diff --git a/packages/observable/package.json b/packages/observable/package.json
index 4391d61d7..18fb2a043 100644
--- a/packages/observable/package.json
+++ b/packages/observable/package.json
@@ -45,4 +45,4 @@
"url": "https://opensource.org/licenses/MIT"
}
]
-}
\ No newline at end of file
+}
diff --git a/packages/observable/spec/subscribableBehaviors.ts b/packages/observable/spec/subscribableBehaviors.ts
index 465e54f59..b84f1671c 100644
--- a/packages/observable/spec/subscribableBehaviors.ts
+++ b/packages/observable/spec/subscribableBehaviors.ts
@@ -17,6 +17,12 @@ describe('Subscribable', function () {
expect(isSubscribable(null)).toEqual(false)
})
+ it('creates/has a Symbol.observable', () => {
+ const sub = new subscribable()
+ expect(Symbol.observable).toEqual(Symbol.for('@tko/Symbol.observable'))
+ expect(sub[Symbol.observable]()).toBe(sub)
+ })
+
it('Should be able to notify subscribers', function () {
var instance = new subscribable()
var notifiedValue
diff --git a/packages/observable/src/subscribable.ts b/packages/observable/src/subscribable.ts
index d1747f54f..c908a482f 100644
--- a/packages/observable/src/subscribable.ts
+++ b/packages/observable/src/subscribable.ts
@@ -14,6 +14,10 @@ export { isSubscribable } from './subscribableSymbol'
// subscribed.
export const LATEST_VALUE = Symbol('Knockout latest value')
+if (!Symbol.observable) {
+ Symbol.observable = Symbol.for('@tko/Symbol.observable')
+}
+
export function subscribable () {
Object.setPrototypeOf(this, ko_subscribable_fn)
ko_subscribable_fn.init(this)
diff --git a/sites/minimum-esm/Makefile b/sites/minimum-esm/Makefile
new file mode 100644
index 000000000..8b7e4f345
--- /dev/null
+++ b/sites/minimum-esm/Makefile
@@ -0,0 +1,2 @@
+
+include ../../tools/site.mk
diff --git a/sites/minimum-esm/README.md b/sites/minimum-esm/README.md
new file mode 100644
index 000000000..6b1806bc7
--- /dev/null
+++ b/sites/minimum-esm/README.md
@@ -0,0 +1,9 @@
+# Sample Site
+
+This is a trival setup, exhibiting a minimal configuration.
+
+## Startup
+
+```bash
+$ make serve
+```
diff --git a/sites/minimum-esm/src/entry.tsx b/sites/minimum-esm/src/entry.tsx
new file mode 100644
index 000000000..eae661dd0
--- /dev/null
+++ b/sites/minimum-esm/src/entry.tsx
@@ -0,0 +1,49 @@
+import { Builder } from '@tko/builder'
+
+import { ComponentProvider } from '@tko/provider.component'
+import { MultiProvider } from '@tko/provider.multi'
+import {
+ NativeProvider
+} from '@tko/provider.native'
+
+import { bindings as coreBindings } from '@tko/binding.core'
+import { bindings as componentBindings } from '@tko/binding.component'
+
+import { filters } from '@tko/filter.punches'
+
+import components from '@tko/utils.component'
+import { createElement, Fragment } from '@tko/utils.jsx'
+
+
+const builder = new Builder({
+ filters,
+ provider: new MultiProvider({
+ providers: [
+ new ComponentProvider(),
+ new NativeProvider(),
+ ]
+ }),
+ bindings: [
+ coreBindings,
+ componentBindings,
+ ],
+ extenders: [],
+ options: {},
+})
+
+const tko = builder.create({
+ jsx: {
+ createElement,
+ Fragment,
+ },
+ components,
+ version: 'live',
+ Component: components.ComponentABC,
+})
+
+class TestComponent extends components.ComponentABC {
+ get template () { return hello ${new Date().toISOString()} }
+}
+TestComponent.register()
+
+tko.applyBindings()
diff --git a/sites/minimum-esm/src/index.d.ts b/sites/minimum-esm/src/index.d.ts
new file mode 100644
index 000000000..cf976b873
--- /dev/null
+++ b/sites/minimum-esm/src/index.d.ts
@@ -0,0 +1,7 @@
+
+declare namespace JSX {
+ interface IntrinsicElements {
+ [elemName: string]: any;
+ }
+}
+
diff --git a/sites/minimum-esm/src/index.html b/sites/minimum-esm/src/index.html
new file mode 100644
index 000000000..397d62dda
--- /dev/null
+++ b/sites/minimum-esm/src/index.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/sites/minimum-esm/tsconfig.json b/sites/minimum-esm/tsconfig.json
new file mode 100644
index 000000000..ef9e0dee0
--- /dev/null
+++ b/sites/minimum-esm/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "downlevelIteration": true,
+ "target": "ES2015",
+ "module": "ES2015",
+ "moduleResolution": "node",
+ "allowJs": true,
+ "importHelpers": true,
+ "strict": true,
+ "jsx": "react",
+ "jsxFactory": "tko.jsx.createElement",
+ "jsxFragmentFactory": "tko.jsx.Fragment",
+ "baseUrl": ".",
+ "paths": {
+ "*": [
+ "*",
+ "../../packages/*",
+ ]
+ }
+ }
+}
diff --git a/sites/www.tko.io/Makefile b/sites/www.tko.io/Makefile
new file mode 100644
index 000000000..289c69c84
--- /dev/null
+++ b/sites/www.tko.io/Makefile
@@ -0,0 +1,7 @@
+
+include ../../tools/site.mk
+
+dist/esbuild.wasm: node_modules
+ cp node_modules/esbuild-wasm/esbuild.wasm dist
+
+build:: dist/esbuild.wasm
diff --git a/builds/reference/docs/3to4.md b/sites/www.tko.io/docs/3to4.md
similarity index 100%
rename from builds/reference/docs/3to4.md
rename to sites/www.tko.io/docs/3to4.md
diff --git a/builds/reference/docs/amd-loading.md b/sites/www.tko.io/docs/amd-loading.md
similarity index 100%
rename from builds/reference/docs/amd-loading.md
rename to sites/www.tko.io/docs/amd-loading.md
diff --git a/builds/reference/docs/animated.md b/sites/www.tko.io/docs/animated.md
similarity index 100%
rename from builds/reference/docs/animated.md
rename to sites/www.tko.io/docs/animated.md
diff --git a/builds/reference/docs/books.pug b/sites/www.tko.io/docs/books.pug
similarity index 100%
rename from builds/reference/docs/books.pug
rename to sites/www.tko.io/docs/books.pug
diff --git a/builds/reference/docs/fn.md b/sites/www.tko.io/docs/fn.md
similarity index 100%
rename from builds/reference/docs/fn.md
rename to sites/www.tko.io/docs/fn.md
diff --git a/builds/reference/docs/intro.md b/sites/www.tko.io/docs/intro.md
similarity index 100%
rename from builds/reference/docs/intro.md
rename to sites/www.tko.io/docs/intro.md
diff --git a/builds/reference/docs/json-data.md b/sites/www.tko.io/docs/json-data.md
similarity index 100%
rename from builds/reference/docs/json-data.md
rename to sites/www.tko.io/docs/json-data.md
diff --git a/builds/reference/docs/links.md b/sites/www.tko.io/docs/links.md
similarity index 100%
rename from builds/reference/docs/links.md
rename to sites/www.tko.io/docs/links.md
diff --git a/builds/reference/docs/plugins.md b/sites/www.tko.io/docs/plugins.md
similarity index 100%
rename from builds/reference/docs/plugins.md
rename to sites/www.tko.io/docs/plugins.md
diff --git a/sites/www.tko.io/package.json b/sites/www.tko.io/package.json
new file mode 100644
index 000000000..6c95d59dd
--- /dev/null
+++ b/sites/www.tko.io/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "www.tko.io",
+ "version": "1.0.0",
+ "description": "www.tko.io",
+ "repository": "https://github.com/knockout/tko",
+ "author": "The Knockout Team",
+ "license": "MIT",
+ "dependencies": {
+ "@monaco-editor/loader": "^1.1.1",
+ "@types/css-font-loading-module": "^0.0.5",
+ "esbuild-wasm": "^0.12.12",
+ "jss": "^10.6.0",
+ "jss-preset-default": "^10.6.0"
+ }
+}
diff --git a/sites/www.tko.io/src/EsbuildComponent.tsx b/sites/www.tko.io/src/EsbuildComponent.tsx
new file mode 100644
index 000000000..d1c77592c
--- /dev/null
+++ b/sites/www.tko.io/src/EsbuildComponent.tsx
@@ -0,0 +1,42 @@
+
+import * as esbuild from 'esbuild-wasm'
+import { observable, observableArray } from '@tko/observable'
+
+import {TkoComponent} from './TkoComponent'
+
+
+const wasmURL = './esbuild.wasm'
+
+export class EsbuildComponent extends TkoComponent {
+ private esbuildInitialized: Promise
+ protected code = observable('')
+ protected warnings = observableArray([])
+ protected errors = observableArray([])
+
+ constructor () {
+ super()
+ this.esbuildInitialized = Promise.resolve(this.initializeEsbuild())
+ }
+
+ async initializeEsbuild () {
+ await esbuild.initialize({ wasmURL })
+ }
+
+ protected async compile (code: string) {
+ try {
+ await this.esbuildInitialized
+ } catch (err) {
+ this.errors.push(err)
+ }
+ try {
+ const r = await esbuild.transform(code)
+ this.warnings(r.warnings)
+ this.errors([])
+ return r
+ } catch (err: esbuild.TransformFailure) {
+ this.warnings(err.warnings)
+ this.errors(err.errors)
+ return { code: '' }
+ }
+ }
+}
diff --git a/sites/www.tko.io/src/TkoComponent.tsx b/sites/www.tko.io/src/TkoComponent.tsx
new file mode 100644
index 000000000..20365feeb
--- /dev/null
+++ b/sites/www.tko.io/src/TkoComponent.tsx
@@ -0,0 +1,119 @@
+import { default as jss, StyleSheet } from 'jss'
+import preset from "jss-preset-default"
+
+import { tko } from './tko'
+
+jss.setup(preset())
+
+const JSS = Symbol('Memoized ViewComponent.jss')
+const staticStyles: Record = {}
+
+/**
+ * TkoComponent is a Knockout web-component base-class for all view components.
+ *
+ * It has builtin JSS styles.
+ */
+export abstract class TkoComponent extends tko.components.ComponentABC {
+ private static customElementName: string
+
+ dispose () {
+ super.dispose()
+ if (this._styles) { jss.removeStyleSheet(this._styles) }
+ }
+
+ /**
+ * @return {object|null} containing JSS-style classes that are specific to
+ * the instance.
+ *
+ * This offers more dynamic options than `static get css`, but at a
+ * substantial performance cost. Use sparingly.
+ */
+ get css () { return {} as const }
+
+ /**
+ * @return {object} containing JSS-style classes that apply to every
+ * instance of this class.
+ *
+ * This is higher performance than `get css`
+ */
+ static get css () { return {} as const }
+
+ /**
+ * Lazy getter, so subclass constructors can refer to observables and
+ * computeds added to the class in the constructor
+ * after `super` has been called.
+ */
+ get styles () : StyleSheet {
+ if (!this.css) { return { classes: {} } as StyleSheet }
+ const options = {
+ meta: `⚙️ Dynamic Classes for ${this.constructor.name}>`,
+ link: true,
+ classNamePrefix: `${this.constructor.name}--`
+ }
+ const sheet = jss.createStyleSheet(this.css, options).attach()
+ return this._styles || (this._styles = sheet)
+ }
+
+ /**
+ * Static styles are created for each class (not each instance).
+ */
+ static get styles () : StyleSheet {
+ if (this.name in staticStyles) { return staticStyles[this.name] }
+ if (!this.css) { return { classes: {} } as StyleSheet }
+ const options = {
+ meta: `🎨 Static Classes for ${this.name}`,
+ link: true, // Warning: [JSS] Failed to execute 'insertRule' on 'CSSStyleSheet': Failed to insert the rule.
+ classNamePrefix: `${this.name}__`
+ }
+ const sheet = jss.createStyleSheet(this.css, options).attach()
+ return (staticStyles[this.name] = sheet)
+ }
+
+ /**
+ * Return the classes object for our JSS/CSS.
+ */
+ get jss (): Record {
+ return this[JSS] || (this[JSS] = {
+ ...(this.constructor as typeof TkoComponent).styles.classes,
+ ...this.styles.classes,
+ })
+ }
+
+ /**
+ * Called when the component is removed from the DOM. Must be on the
+ * prototype (for performance we don't add a callback for every component).
+ */
+ disconnectedCallback? (node: HTMLElement): void
+
+ get template () { return Symbol('No template') }
+
+ /**
+ * We overload the Register to create a custom element that
+ * triggers a `disconnectedCallback`. This is simpler and faster
+ * than using MutationObserver to trigger when an element
+ * is removed from the DOM.
+ */
+ static register (name = this.customElementName) {
+ const wantsCallback = 'disconnectedCallback' in this.prototype
+ if (wantsCallback) { this.defineCustomElementForDisconnectCallback(name) }
+ return super.register(name)
+ }
+
+ /**
+ * Define customElement that triggers a disconnection callback when the
+ * element is removed from the DOM.
+ */
+ private static defineCustomElementForDisconnectCallback (name: string) {
+ if (globalThis.customElements) {
+ customElements.define(name, class extends HTMLElement {
+ disconnectedCallback (this: HTMLElement) {
+ const component = tko.dataFor(this.children[0])
+ if (component) { component.disconnectedCallback(this) }
+ }
+ })
+ } else if (!globalThis.process) {
+ console.warn(`"window.customElements" is not available. Unable to
+ register life-cycle disconnection callback.`)
+ }
+ }
+}
diff --git a/sites/www.tko.io/src/WithFontsView.tsx b/sites/www.tko.io/src/WithFontsView.tsx
new file mode 100644
index 000000000..407640d7a
--- /dev/null
+++ b/sites/www.tko.io/src/WithFontsView.tsx
@@ -0,0 +1,42 @@
+import { observable } from '@tko/observable'
+import { computed } from '@tko/computed'
+
+import { TkoComponent } from './TkoComponent'
+
+export abstract class WithFontsView extends TkoComponent {
+ static fontsLoaded = observable(false)
+
+ protected abstract bodyHTML: any
+
+ /**
+ * document.fonts.ready is a promise that resolves when all
+ * the fonts on the screen are loaded.
+ */
+ private async monitorFontsLoading () {
+ const waitForFontsToBeOnScreen = Promise.resolve()
+ await waitForFontsToBeOnScreen
+ await document.fonts.ready
+ WithFontsView.fontsLoaded(true)
+ }
+
+ static get css () {
+ const { fontsLoaded } = this
+ const opacityUntilFontsLoaded = computed(() => fontsLoaded() ? 1 : 0)
+
+ return {
+ ...super.css,
+
+
+ '@global': {
+ body: {
+ opacity: opacityUntilFontsLoaded,
+ },
+ },
+ }
+ }
+
+ get template () {
+ this.monitorFontsLoading()
+ return <>{this.bodyHTML()}>
+ }
+}
diff --git a/sites/www.tko.io/src/entry.tsx b/sites/www.tko.io/src/entry.tsx
new file mode 100644
index 000000000..ee09a0779
--- /dev/null
+++ b/sites/www.tko.io/src/entry.tsx
@@ -0,0 +1,5 @@
+import { tko } from './tko'
+
+import './www-tko-io'
+
+tko.applyBindings()
diff --git a/sites/www.tko.io/src/index.html b/sites/www.tko.io/src/index.html
new file mode 100644
index 000000000..7085e898b
--- /dev/null
+++ b/sites/www.tko.io/src/index.html
@@ -0,0 +1,13 @@
+
+
+ TKO.io
+
+
+
+
+
+
+
+
+
+
diff --git a/sites/www.tko.io/src/monacoHandler.ts b/sites/www.tko.io/src/monacoHandler.ts
new file mode 100644
index 000000000..a03c4daa5
--- /dev/null
+++ b/sites/www.tko.io/src/monacoHandler.ts
@@ -0,0 +1,25 @@
+
+import { BindingHandler } from '@tko/bind'
+import loader from '@monaco-editor/loader'
+
+class MonacoHandler extends BindingHandler {
+ constructor (params: any) {
+ super(params)
+ this.initMonaco()
+ }
+
+ async initMonaco () {
+ const monaco = await loader.init()
+ await new Promise(r => setTimeout(r, 200))
+ const editor = monaco.editor.create(this.$element, {
+ value: '// some comment',
+ language: 'typescript',
+ })
+
+ editor.onDidChangeModelContent(console.info)
+ // temp1.getModel().getValue()
+ console.log(`editor`, editor)
+ }
+}
+
+MonacoHandler.registerAs('monaco-handler')
diff --git a/sites/www.tko.io/src/play-ground.tsx b/sites/www.tko.io/src/play-ground.tsx
new file mode 100644
index 000000000..66a0150b1
--- /dev/null
+++ b/sites/www.tko.io/src/play-ground.tsx
@@ -0,0 +1,49 @@
+import { EsbuildComponent } from "./EsbuildComponent"
+import { observable } from "@tko/observable"
+import './monacoHandler'
+
+class PlayGround extends EsbuildComponent {
+ private input = observable('')
+
+ async result () {
+ try {
+ const { code, warnings } = await this.compile(this.input())
+ if (warnings.length) {
+ console.warn('WARNINGS', ...warnings)
+ }
+ return code
+ } catch (err) {
+ console.error
+ }
+ }
+
+ get template () {
+ const { jss } = this
+ const result = this.computed(() => this.result()).extend({ deferred: true })
+ return (
+
+
+
+
+ {result}
+
+
+ {this.warnings}
+
+
+ {this.errors}
+
+
+ )
+ }
+
+ static get css () {
+ return {
+ layout: {},
+ input: {},
+ result: {},
+ }
+ }
+}
+
+PlayGround.register()
diff --git a/sites/www.tko.io/src/tko.ts b/sites/www.tko.io/src/tko.ts
new file mode 100644
index 000000000..10068d52d
--- /dev/null
+++ b/sites/www.tko.io/src/tko.ts
@@ -0,0 +1,48 @@
+import { Builder } from '@tko/builder'
+
+import { ComponentProvider } from '@tko/provider.component'
+import { MultiProvider } from '@tko/provider.multi'
+import {
+ NativeProvider
+} from '@tko/provider.native'
+
+import { bindings as coreBindings } from '@tko/binding.core'
+import { bindings as componentBindings } from '@tko/binding.component'
+
+import { filters } from '@tko/filter.punches'
+
+import components from '@tko/utils.component'
+import { createElement, Fragment } from '@tko/utils.jsx'
+
+
+const builder = new Builder({
+ filters,
+ provider: new MultiProvider({
+ providers: [
+ new ComponentProvider(),
+ new NativeProvider(),
+ ]
+ }),
+ bindings: [
+ coreBindings,
+ componentBindings,
+ ],
+ extenders: [],
+ options: {},
+})
+
+export const tko = builder.create({
+ jsx: {
+ createElement,
+ Fragment,
+ },
+ components,
+ version: 'live',
+ Component: components.ComponentABC,
+})
+
+Object.assign(window, {
+ TF: tko.jsx.createElement,
+ TFF: tko.jsx.Fragment,
+})
+
diff --git a/sites/www.tko.io/src/www-tko-io.tsx b/sites/www.tko.io/src/www-tko-io.tsx
new file mode 100644
index 000000000..339c5e779
--- /dev/null
+++ b/sites/www.tko.io/src/www-tko-io.tsx
@@ -0,0 +1,96 @@
+
+import { WithFontsView } from './WithFontsView'
+import './play-ground'
+
+class WwwTkoIo extends WithFontsView {
+ protected bodyHTML () {
+ const { jss } = this
+ return (
+
+ )
+ }
+
+ static get cssVars () {
+ return {
+ '--bg-color': '#aaa',
+ '--body-font': 'Roboto',
+ '--brand-font': 'Pacifico',
+ '--fg-color': 'black',
+ '--head-bg-color': '#931d0d',
+ '--head-fg-color': 'white',
+ '--head-height': '55px',
+ }
+ }
+
+ static get css () {
+ return {
+ ...super.css,
+
+ // See: https://github.com/cssinjs/jss/issues/1524
+ // Once this is fixed, we can use this in places of the similar
+ // '@import': [
+ // 'url(https://fonts.googleapis.com/css2?family=Roboto&family=Pacifico&display=swap)',
+ // ],
+
+ '@global': {
+ body: {
+ ...super.css['@global'].body,
+ padding: 0,
+ margin: 0,
+ ...this.cssVars,
+ },
+ },
+
+ layout: {
+ display: 'grid',
+ gridTemplateRows: 'var(--head-height) 1fr',
+ backgroundColor: 'var(--bg-color)',
+ color: 'var(--fg-color)',
+ height: '100%',
+ fontFamily: 'var(--body-font)'
+ },
+
+ head: {
+ display: 'flex',
+ alignItems: 'center',
+ color: 'var(--head-fg-color)',
+ backgroundColor: 'var(--head-bg-color)',
+ padding: '0px 1rem',
+ },
+
+ brand: {
+ fontSize: '1.6rem',
+ padding: '0.25em 0.4em',
+ textShadow: '0 0 5px #efff6c, 0 0 10px #efff6c',
+ fontFamily: 'var(--brand-font)',
+ },
+
+ body: {
+ padding: '1rem',
+ },
+
+ brandFontStrut: {
+ opacity: 0,
+ fontFamily: 'var(--brand-font)',
+ },
+
+ bodyFontStrut: {
+ opacity: 0,
+ fontFamily: 'var(--body-font)',
+ }
+ }
+ }
+}
+
+WwwTkoIo.register()
+
diff --git a/sites/www.tko.io/tsconfig.json b/sites/www.tko.io/tsconfig.json
new file mode 100644
index 000000000..3d5147e78
--- /dev/null
+++ b/sites/www.tko.io/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "downlevelIteration": true,
+ "target": "ES2020",
+ "module": "ES2020",
+ "moduleResolution": "node",
+ "allowJs": true,
+ "importHelpers": true,
+ "strict": true,
+ "jsx": "react",
+ "jsxFactory": "TF",
+ "jsxFragmentFactory": "TFF",
+ "baseUrl": ".",
+ "paths": {
+ "*": [
+ "*",
+ "../../packages/*"
+ ]
+ }
+ }
+}
diff --git a/tko.io/.gitignore b/tko.io/.gitignore
deleted file mode 100644
index 378eac25d..000000000
--- a/tko.io/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-build
diff --git a/tko.io/app.yaml b/tko.io/app.yaml
deleted file mode 100644
index fd142e2ef..000000000
--- a/tko.io/app.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# This is the Google App Engine standard config.
-#
-# Deploy with the `gcloud` tool using:
-#
-# $ gcloud app deploy --project tko-io .
-#
-# Test with `dev_appserver.py .`
-#
-runtime: python27
-api_version: 1
-threadsafe: true
-
-default_expiration: 30s
-
-handlers:
-
-- url: /
- secure: always
- static_files: build/index.html
- upload: build/index.html
- # http_headers: ...
-
-- url: /3to4
- secure: always
- static_files: build/3to4.html
- upload: build/3to4.html
-
-- url: /(.*\.js)$
- secure: always
- static_files: src/\1
- upload: src/.*$
-
-- url: /
- secure: always
- static_dir: build/
-
-
-skip_files:
- - node_modules
- - ".*.yaml"
- - ".*.lock"
diff --git a/tko.io/make.js b/tko.io/make.js
deleted file mode 100755
index 02e0a3a85..000000000
--- a/tko.io/make.js
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env node
-
-const fs = require('fs-extra')
-const yaml = require('js-yaml')
-const pug = require('pug')
-const debounce = require('lodash.debounce')
-const hljs = require('highlight.js')
-const {spawn} = require('child_process')
-const {argv} = process
-
-function highlight (str, lang) {
- if (!lang) { return '' }
- if (hljs.getLanguage(lang)) {
- try {
- return hljs.highlight(lang, str).value
- } catch (__) {}
- }
- return ''
-}
-
-const md = require('markdown-it')({
- html: true,
- linkify: true,
- typographer: true,
- highlight
-})
-
-const ENC = {encoding: 'utf8'}
-
-function * genHtmlIncludes ({includes}, htmlSettings, config) {
- for (const relPath of includes || []) {
- const sourcePath = '../packages/' + relPath
- console.log(' | ', sourcePath)
- const source = fs.readFileSync(sourcePath, ENC)
- if (sourcePath.endsWith('.md')) {
- yield `
- ${md.render(source)}`
- } else if (sourcePath.endsWith('.pug')) {
- yield pug.render(source, Object.assign({}, htmlSettings, config))
- } else {
- throw new Error(`Bad extension: ${sourcePath} (not .md or .pug)`)
- }
- }
-}
-
-function * genSections (htmlConfig, config) {
- for (const section of htmlConfig.sections) {
- console.log(` |- ${section.title}`)
- section.html = Array.from(genHtmlIncludes(section, htmlConfig, config)).join('\n')
- yield section
- }
-}
-
-function makeHtml({htmlSettings, scripts, links, styles}, config) {
- /**
- * Make build/index.html
- */
- console.log(` Making ${htmlSettings.dest}`)
- Object.assign(htmlSettings, {scripts, links, styles}) // add links + scripts
- const sections = Array.from(genSections(htmlSettings, config))
- const locals = Object.assign(htmlSettings, {sections})
- const html = pug.renderFile('src/index.pug', locals)
- fs.writeFileSync(htmlSettings.dest, html)
-}
-
-function make () {
- console.log('👲 Starting at ', new Date())
-
- /**
- * Make build/
- */
- fs.mkdirs('build/')
-
- const styles = fs.readFileSync('src/tko.css')
- const config = yaml.load(fs.readFileSync('./settings.yaml', ENC))
- const {scripts, links} = config
-
- makeHtml({ htmlSettings: config.index, styles, scripts, links }, config)
- makeHtml({ htmlSettings: config['3to4'], styles, scripts, links }, config)
-
- console.log("🏁 Complete.", new Date())
- /**
- * Make Legacy Javascript
- */
- // console.log('Making build/tko-io.js')
- // fs.copySync('src/tko-io.js', 'build/tko-io.js')
-}
-
-if (argv.includes('-w')) {
- const ignored = '' // /(^|[\/\\])(\..|build\/*)/
- require('chokidar')
- .watch(['settings.yaml', 'src', '../packages'], {ignored})
- .on('all', debounce(make, 150))
-} else {
- console.log(`
- Usage: make.js [-w] [-s]
-
- -w Watch and rebuild on change
- -s Start the server with 'dev_appserver.py .' (from Google Cloud)
-
- Deploy with:
-
- $ gcloud app deploy --project tko-io .
- `)
- make()
-}
-
-if (argv.includes('-s')) {
- spawn('dev_appserver.py', ['.'], {stdio: 'inherit'})
-}
diff --git a/tko.io/package.json b/tko.io/package.json
deleted file mode 100644
index 138f0ee4d..000000000
--- a/tko.io/package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "tko.io",
- "version": "1.0.0",
- "description": "Landing page for tko.io",
- "main": "index.js",
- "author": "Knockout Team",
- "license": "MIT",
- "dependencies": {
- "chokidar": "^1.7.0",
- "fs-extra": "^4.0.2",
- "gray-matter": "^3.1.1",
- "highlight.js": "^9.12.0",
- "js-yaml": "^3.10.0",
- "lodash.debounce": "^4.0.8",
- "markdown-it": "^8.4.0",
- "pug": "^2.0.0-rc.4"
- }
-}
diff --git a/tko.io/settings.yaml b/tko.io/settings.yaml
deleted file mode 100644
index f950678e4..000000000
--- a/tko.io/settings.yaml
+++ /dev/null
@@ -1,428 +0,0 @@
-
-links:
-- href: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css
- integrity: sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M
-
-- href: https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css
- integrity: sha256-akwTLZec/XAFvgYgVH1T5/369lhA2Efr22xzCNl1nHs=
-
-- href: https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css
- integrity: sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN
-
-scripts:
-- src: https://unpkg.com/tko@4.0.0-alpha4a/dist/tko.js
- integrity: sha384-MJ/drYzT5bwJWdFxjHRDTJHTNccRZb70G7rQ9GeBnrSW/ssr3+A0kA1Ul7IHBZ/Y
- crossorigin: anonymous
-
-- src: https://production-assets.codepen.io/assets/embed/ei.js
- async: async
-
-- src: tko-io.js
- type: application/javascript
- async: async
-
-3to4:
- dest: build/3to4.html
- sections:
- - title: Knockout 3 to 4 Guide
- includes:
- - tko/docs/3to4.md
-
-index:
- dest: build/index.html
- sections:
- - title: Introduction
- includes:
- - tko/docs/intro.md
- - tko/docs/books.pug
- # - tko/docs/amd-loading.md
- # - tko/docs/animated.md
- # - tko/docs/api.md
- # - tko/docs/browser-support.md
- # - tko/docs/docs.md
- # - tko/docs/fn.md
- # - tko/docs/installation.md
- # - tko/docs/intro.md
- # - tko/docs/links.md
- # - tko/docs/plugins.md
-
- # - title: Binding DOM and Javascript
- # includes:
- # - tko.bind/docs/binding-syntax.md
- # - tko.bind/docs/binding-context.md
- # - tko.provider.databind/docs/databind-parser.md
- # - tko.provider/docs/provider.md
- # - tko.bind/docs/binding-preprocessing.md
- # - tko.bind/docs/custom-bindings.md
- # - tko.bind/docs/custom-bindings-for-virtual-elements.md
- # - tko.bind/docs/custom-bindings-controlling-descendant-bindings.md
- # - tko.bind/docs/custom-bindings-disposal.md
-
- # - title: Included bindings
- # includes:
- # - tko.binding.core/docs/attr-binding.md
- # - tko.binding.core/docs/checked-binding.md
- # - tko.binding.core/docs/click-binding.md
- # - tko.binding.core/docs/css-binding.md
- # - tko.binding.core/docs/disable-binding.md
- # - tko.binding.core/docs/enable-binding.md
- # - tko.binding.core/docs/event-binding.md
- # - tko.binding.core/docs/hasfocus-binding.md
- # - tko.binding.core/docs/html-binding.md
- # - tko.binding.core/docs/options-binding.md
- # - tko.binding.core/docs/selectedOptions-binding.md
- # - tko.binding.core/docs/style-binding.md
- # - tko.binding.core/docs/submit-binding.md
- # - tko.binding.core/docs/text-binding.md
- # - tko.binding.core/docs/textInput-binding.md
- # - tko.binding.core/docs/uniqueName-binding.md
- # - tko.binding.core/docs/unobtrusive-event-handling.md
- # - tko.binding.core/docs/value-binding.md
- # - tko.binding.core/docs/visible-binding.md
- # - tko.binding.if/docs/if-binding.md
- # - tko.binding.if/docs/ifnot-binding.md
- # - tko.binding.if/docs/index.md
- # - tko.binding.if/docs/with-binding.md
- # - tko.binding.template/docs/foreach-binding.md
- # - tko.binding.template/docs/template-binding.md
-
- # - title: Observables
- # includes:
- # - tko.observable/docs/arraychange.md
- # - tko.observable/docs/observableArrays.md
- # - tko.observable/docs/observables.md
- # - tko.observable/docs/rateLimit-observable.md
- # - tko.observable/docs/extenders.md
- # - tko.observable/docs/throttle-extender.md
- # - tko/docs/json-data.md
-
-
- # - title: Computed Observables
- # includes:
- # - tko.computed/docs/computed-dependency-tracking.md
- # - tko.computed/docs/computed-pure.md
- # - tko.computed/docs/computed-reference.md
- # - tko.computed/docs/computed-writable.md
- # - tko.computed/docs/computedObservables.md
-
- # - title: Components & Custom Tags
- # includes:
- # - tko.utils.component/docs/component-binding.md
- # - tko.utils.component/docs/component-custom-elements.md
- # - tko.utils.component/docs/component-loaders.md
- # - tko.utils.component/docs/component-overview.md
- # - tko.utils.component/docs/component-registration.md
-
-
- # - title: Life Cycles
- # includes:
- # - tko.lifecycle/docs/life-cycle.md
-
- # - title: Plugins
-
- # - title: API
-
-
-# The following can be auto-generated from `volumeInfo` via
-# https://www.googleapis.com/books/v1/volumes/${id}
-books:
-
- - title: Knockout.js
- subtitle: Building Dynamic Client-Side Web Applications
- authors:
- - Jamie Munro
- publisher: Oreilly & Associates Incorporated
- publishedDate: '2015-01-03'
- description: "Use Knockout.js to design and build dynamic client-side web applications
- that are extremely responsive and easy to maintain. This example-driven book shows
- you how to use this lightweight JavaScript framework and its Model-View-ViewModel
- (MVVM) pattern. You’ll learn how to build your own data bindings, extend the framework
- with reusable functions, and work with a server to enhance your client-side application
- with persistence. In the final chapter, you’ll build a shopping cart to see how
- everything fits together.
If you’re a web developer with experience in
- JavaScript, HTML, and CSS, you’re ready for Knockout.
Learn how to
- create a ViewModel Bind HTML data and attributes, and CSS classes and
- styles Understand data binding in Knockout’s context hierarchy Use
- properties that change dynamically through user interaction Work with
- forms by using several different bindings Bind multiple ViewModels on
- a single page Extend or attach custom functions to observables Perform
- server-side interactions with jQuery Map a JavaScript object or apply
- JSON data to a new object "
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1491914319'
- - type: ISBN_13
- identifier: '9781491914311'
- readingModes:
- text: false
- image: false
- pageCount: 86
- printedPageCount: 86
- dimensions:
- height: 23.30 cm
- width: 17.80 cm
- thickness: 0.50 cm
- printType: BOOK
- categories:
- - Computers / Programming Languages / JavaScript
- - Computers / Internet / Application Development
- - Computers / Web / Web Programming
- maturityRating: NOT_MATURE
- allowAnonLogging: false
- contentVersion: preview-1.0.0
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=ZPDnoQEACAAJ&printsec=frontcover&img=1&zoom=5&imgtk=AFLRE73xh8xZACPIjOtB8rD5RE06-ElVbzgtH5e0nmkyo0UjgGwBZweLwET2ieAFeO_E6k4vI1gqVVxyRWIhOlXmxrprvBuMm-oQigjlTEfm9M9bABMXNcxwZKRTZvvdUBkP14nJ6MIp&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=ZPDnoQEACAAJ&printsec=frontcover&img=1&zoom=1&imgtk=AFLRE717dECAVjOpJblfNu0EPHVMBQmgOOan5rn21GWN2OQhSbPiehsljCYRsxdJQ1wcejFwt0wBmNnRraYQUHHWPqjrHJW0kRSrXjobRrKukJDD-hhmn5DWwNGA--8nQVITS2vbv8t6&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=ZPDnoQEACAAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=ZPDnoQEACAAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/Knockout_js.html?hl=&id=ZPDnoQEACAAJ
-
- - title: Asp.net Mvc 5 With Bootstrap and Knockout.js
- subtitle: Building Dynamic, Responsive Web Applications
- authors:
- - Jamie Munro
- publisher: O'Reilly Media, Incorporated
- publishedDate: '2015-03-25'
- description: "Bring dynamic server-side web content and responsive web design
- together to build websites that work and display well on any resolution, desktop
- or mobile. With this practical book, you’ll learn how by combining the ASP.NET
- MVC server-side language, the Bootstrap front-end framework, and Knockout.js—the
- JavaScript implementation of the Model-View-ViewModel pattern.
Author Jamie
- Munro introduces these and other related technologies by having you work with
- sophisticated web forms. At the end of the book, experienced and aspiring web
- developers alike will learn how to build a complete shopping cart that demonstrates
- how these technologies interact with each other in a sleek, dynamic, and responsive
- web application.
Build well-organized, easy-to-maintain web applications
- by letting ASP.NET MVC 5, Bootstrap, and Knockout.js do the heavy lifting
- Use ASP.NET MVC 5 to build server-side web applications, interact with a database,
- and dynamically render HTML Create responsive views with Bootstrap that
- render on a variety of modern devices; you may never code with CSS again
- Add Knockout.js to enhance responsive web design with snappy client-side interactions
- driven by your server-side web application "
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1491914394'
- - type: ISBN_13
- identifier: '9781491914397'
- readingModes:
- text: false
- image: false
- pageCount: 278
- printedPageCount: 278
- dimensions:
- height: 23.30 cm
- width: 17.80 cm
- thickness: 1.30 cm
- printType: BOOK
- categories:
- - Computers / Programming Languages / ASP.NET
- - Computers / Web / General
- - Computers / Web / Web Programming
- maturityRating: NOT_MATURE
- allowAnonLogging: false
- contentVersion: preview-1.0.0
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=try8oQEACAAJ&printsec=frontcover&img=1&zoom=5&imgtk=AFLRE71NgZ3twak4WXm7mMrpPXQwM5LLeI3zeLgpf4CSBir_nKmU0mZJoh6Z5JPwwrMk_WjQE_j04VenoDv3PBQAY0yCp4w_tW5TM4BjdModKb6BhbGfnYR0Qt1Qmn6SmtV6WDNhsqd2&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=try8oQEACAAJ&printsec=frontcover&img=1&zoom=1&imgtk=AFLRE71KQ8fmuM2sSfN0TOooxRRz51cBqbN-oSufwl2TKH6qSzuzhI_Sarc_I5dMWgvbKB1SmWvA3IREW1ByGHSRAnTsybrM8B4LxCKEjavv9Zq2VxVBR3pweSl2UWtLe4Oav0m5_S5G&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=try8oQEACAAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=try8oQEACAAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/Asp_net_Mvc_5_With_Bootstrap_and_Knockou.html?hl=&id=try8oQEACAAJ
-
- - title: Getting Started with Knockout.js for .NET Developers
- authors:
- - Andrey Akinshin
- publisher: Packt Publishing Ltd
- publishedDate: '2015-05-27'
- description: This book is intended for .NET developers who want to use the MVVM
- design pattern to create powerful client-side JavaScript linked to server-side
- C# logic. Basic experience with ASP.NET, Razor, and creating web applications
- is needed.
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1783984015'
- - type: ISBN_13
- identifier: '9781783984015'
- readingModes:
- text: true
- image: true
- pageCount: 188
- printedPageCount: 188
- printType: BOOK
- categories:
- - Computers / Programming Languages / JavaScript
- - Computers / Internet / Application Development
- - Computers / Programming Languages / ASP.NET
- maturityRating: NOT_MATURE
- allowAnonLogging: false
- contentVersion: 0.1.1.0.preview.3
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=A-iuCQAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE700Ur2bUx3-xG1lJ7dhXYNiVxT0TlvFTCLKBDmCgsc2s1pOb_YVZxtI6jUwv53hOOAMnvSH2j3GR2NKExvEev5ALEK68u7oLyrUTxA-4j5iwmH7jEV0USmCSJE8PE6Nke2aUWS2&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=A-iuCQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE72rh8mTdqUnmJDjLIi1wLaea_frTsNMmKGHxTa2lID6PyuW_qNH_XzvkxqDVn3QEa2LfnTsvAmj6Vq_Wd73Zl4Q9_gIQA0lmIwRfK0Zr17YFHAV9uSx-9q5bTOOepwmRpwG3fbG&source=gbs_api
- small: https://books.google.ca/books/content?id=A-iuCQAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE71Y9WVxVSRTitqbcivBU-WgoXUCyyPTuNsjEn7uZ9oFTc7vKFCJekAx1vMoo_v4lV59_ehco3Lt8vcJTalPxGaIZj57lo1DPirPBwRhGu_kuQtALcu0khKaKimJdwj4Sp_kEIEj&source=gbs_api
- medium: https://books.google.ca/books/content?id=A-iuCQAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE71n9MaRenbMt90bPtLsyELGmzZq6U4KEbYvVRl7e_kLBJD0QvZ36lTpLejO3BJ4i3WWHL-hzY10ThMf3Qg5vSGD4q3TFoHU62YmSImkw1obbyph6p04pfMutEekEHYXO6d-Yuc9&source=gbs_api
- large: https://books.google.ca/books/content?id=A-iuCQAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE73BGDB8DqNQzhG2wE-jBgyb-JdjNtiNXeqazRtGxQUwrTnpjHSg2G5LSXaassUEItKLZbyrt8myz6fLL2dl5M_xvH-tZosq63njrzlZYkJuJqjhj2ZxNItqlkYShzh6C0jMklxu&source=gbs_api
- extraLarge: https://books.google.ca/books/content?id=A-iuCQAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE72ntS5Ll1QmMWu-A2hwAdGAqTBeG9EEYgH4qlIvCZH3p5gaoPJO4XxPTCKfOZVpVzPN0gTVAoTclhd6v1Yrmk5dvyfX4032bvw9fEp9HP1AemUNgCh_Cjtgzcwma2HlyVG9n7jh&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=A-iuCQAAQBAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=A-iuCQAAQBAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/Getting_Started_with_Knockout_js_for_NET.html?hl=&id=A-iuCQAAQBAJ
-
- - title: Mastering KnockoutJS
- authors:
- - Timothy Moran
- publisher: Packt Publishing Ltd
- publishedDate: '2014-11-26'
- description: If you are an experienced JavaScript developer who is looking for new
- tools to build web applications and get an understanding of core elements and
- applications, this is the book for you. A basic knowledge of DOM, JavaScript,
- and KnockoutJS is assumed.
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1783981016'
- - type: ISBN_13
- identifier: '9781783981014'
- readingModes:
- text: true
- image: true
- pageCount: 270
- printedPageCount: 489
- printType: BOOK
- categories:
- - Computers / Web / Design
- - Computers / Programming Languages / JavaScript
- - Computers / Internet / Application Development
- maturityRating: NOT_MATURE
- allowAnonLogging: true
- contentVersion: 1.1.1.0.preview.3
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=BoqbBQAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE71OGVtK3R39HAA3YPPexcAfdqkhHpK2qY2aqN2VwnuRbzJ5pWfCdPP_5p0KuPpod7GvQPI8wHYLAO8zssun_5j31mq5DrjNHULX097DHieG55cZxoF3R3nX4po7w9urdhoH83CT&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=BoqbBQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE70GS42a68O_DBLirScLduiYOUbk80jGntqSuuykg8RU1usaN5xdHy5Gl13pgEb2LdZYZ7b5sYtt4qmedX1FiwDuhbprf-X1ADNLHolZCVletNeHvoUvy0gFKPplc4eopBGHQnPG&source=gbs_api
- small: https://books.google.ca/books/content?id=BoqbBQAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE72HypPfd5WB7VNPF5ovT8veIkql_616DZvT64hc5QPN8HhYCwP3F_XuPKD5D3euB0qJSau7qlRgyrp7VjnOACjsF10v9PekqqAw7fnOakZVnLGBJ3_tWNTl-GByWWxzTDi1rXrQ&source=gbs_api
- medium: https://books.google.ca/books/content?id=BoqbBQAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE72bJ_PJ9fydBJC1A4b8n-F1x_VHnyeBSp9uRJTFYxQVcIyEO-hCcU51x-TmUrH4JOblv0J2g2OzpwxQK2oELDtzlE7qzE0a_D-KsqSqoFFPXLlPrL45r8fLLXvTRUubJNJy31No&source=gbs_api
- large: https://books.google.ca/books/content?id=BoqbBQAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE70OgKfn3_48ic1MFdtFGQyoOBg8JHQwln0q5M1fKTYREAuugBOOtf5Q7m6_yD-DEN_n933Y5labtoiq-KM_BEWWukCgkOeJvT1Xr-XuATJrtXX9N-cq1Z-1qbfO3ncRz0yMo-_c&source=gbs_api
- extraLarge: https://books.google.ca/books/content?id=BoqbBQAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE71OClJjx-G3VrcH4lga7AKeiw0CGOSwyAvjxfZ8ns3TKv_o8SLzY_p3_e5Q8kJgiVXA1GWpNT-kWgwNwHa5BYsVHbF5DXlGpqyLGxOT8fOXBlsBr8e_H375DucdcSP-0v7L1jF8&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=BoqbBQAAQBAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=BoqbBQAAQBAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/Mastering_KnockoutJS.html?hl=&id=BoqbBQAAQBAJ
-
- - title: Web App Testing Using Knockout.JS
- authors:
- - Roberto Messora
- publisher: Packt Publishing Ltd
- publishedDate: '2014-11-17'
- description: If you are a JavaScript developer, beginner, or an expert who wants
- to improve quality standards in terms of solutions design and functional verification,
- this book is for you. Basic understanding of web development, HTML, and JavaScript
- is required.
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1783982853'
- - type: ISBN_13
- identifier: '9781783982851'
- readingModes:
- text: true
- image: true
- pageCount: 154
- printedPageCount: 237
- printType: BOOK
- categories:
- - Computers / Software Development & Engineering / Quality Assurance & Testing
- - Computers / Programming Languages / JavaScript
- - Computers / Web / Web Programming
- averageRating: 5
- ratingsCount: 2
- maturityRating: NOT_MATURE
- allowAnonLogging: false
- contentVersion: 1.1.1.0.preview.3
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=dZN1BQAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE70A3vdwml0dXDKn1YCWpz8n0p8IKHaCN6FnhytFUt7ZiwPTttCa3_2-Q6ZRyyeCrTzWd3AvkTSQwvO31hHUZjEbUVKlNij50crBaQerevytbQWF6ZMvTW6qxlFH-DfN-AvUv6e2&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=dZN1BQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE71zzDoAJ8_68JqPI9sZ3Tlvyhyqxiyi_z0QwpVpjChRp5YC3bKNGiUBlDLThbtmQ3uIdVes5uGumrDrmUPlvGA_3PSqev9ZbCwthmLIjwEisbAwI1z2nJNzqwSHb7b-8uEekpvB&source=gbs_api
- small: https://books.google.ca/books/content?id=dZN1BQAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE71Bq-gmv0FqD2RAIGkqGsnAMEI2VSAlzOme8QiPTpwA09b16Xx9fwBL7WAHIONiyVnFu6iACEO9SVQqZDGf9l56_gTMChhENAXWnM_ZnV5l-K4ouOHjqhAzx61yzxdj2OgmS7Bl&source=gbs_api
- medium: https://books.google.ca/books/content?id=dZN1BQAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE72glYr_QFUGY7Xc2cBVMa1kXnEaRIn5W2ULqSu6McZlyOZLXhZ1Aw2EYxWmfIzkpr9Le6d8D0AmMCP2YI8RRAAkmrrtQxTO3ow44Gf_kINC2GIrZtLywg9ul7tGgtJNdqMLyfWi&source=gbs_api
- large: https://books.google.ca/books/content?id=dZN1BQAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE72x5vBQpMoPigr6fGa246ERfQvakIU7pB6PpTEUbktcoWhXxik5WF8TohPvbPuOGXqG0Lzh1JmSy6N7PIVpqCJXIyHV2UIzOxz1u1SeyfQNatsajdpQ16rGp6uaJxPhT31o0JUy&source=gbs_api
- extraLarge: https://books.google.ca/books/content?id=dZN1BQAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE73xjKYwV0fwumEQIryeYX8vFDu7KUe8WgpYN-QvZU8ZMbVU5b5Ua8cYnD_FBBGpDTf22w_tiYOC8G9BpvSOkHaO07HRV-YDM51FaVQWlXywSXL7UVgOWUaI0iG5xbY3M6CJWMOz&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=dZN1BQAAQBAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=dZN1BQAAQBAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/Web_App_Testing_Using_Knockout_JS.html?hl=&id=dZN1BQAAQBAJ
-
- - title: KnockoutJS Essentials
- authors:
- - Jorge Ferrando
- publisher: Packt Publishing Ltd
- publishedDate: '2015-02-27'
- description: If you are a JavaScript developer who has been using DOM manipulation
- libraries such as Mootools or Scriptaculous, and you want go further in modern
- JavaScript development with a simple and well-documented library, then this book
- is for you. Learning how to use Knockout will be perfect as your next step towards
- building JavaScript applications that respond to user interaction.
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1784395285'
- - type: ISBN_13
- identifier: '9781784395285'
- readingModes:
- text: true
- image: true
- pageCount: 232
- printedPageCount: 232
- printType: BOOK
- categories:
- - Computers / Internet / General
- - Computers / Internet / Application Development
- - Computers / Programming Languages / Java
- maturityRating: NOT_MATURE
- allowAnonLogging: false
- contentVersion: 2.2.2.0.preview.3
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=HEXfBgAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE73KcIEK76fLL4WMQf9A1CJTvx-SGdI5O2ezmLb54SZbJGzguyU7PjmjzBRqRYw0fFGHmcGBjfwozfYegr6gQ12u-c5vUhXf7szQkTjXEXWV5Y0KQcgDfg_OFQmKi9h-9cm-4zdb&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=HEXfBgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE72iT2HkL3gawhD9TqH0Ozcj5SZW5bchxnpKvWAjxtYdxh8HcnIKbul_cXzv6zK-EDmZh5QY29qCYf-JQQEGU6sjiaaVSoeGbbezRI32UgWJNVpiPu6kd2aeMSZa5Vamelt0nAda&source=gbs_api
- small: https://books.google.ca/books/content?id=HEXfBgAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE72qNwfz7Ar9qbXS_7Z_y2lsYAYpWy2pEy37MmEtZSajj0E7AMzXnEHIk2EG6otNwbELtO63zSSVjiAs3jvlerXq_N-uD227lrRMSDt8-N2-rZr0d396FW0F0oukatK3HcBwkBzc&source=gbs_api
- medium: https://books.google.ca/books/content?id=HEXfBgAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE72m6oGoEwL5xAbLyuU4C_334JN-IgaHkW70a4mFNRW58iirrlcuJaZ8hDEPGcADH_Qd1HeLukT2e_1gxJUEqOVGAqdTJopfflSRdEFSy_d3R3TFxvTCvrWqw2b9RBsbgnWL-vu2&source=gbs_api
- large: https://books.google.ca/books/content?id=HEXfBgAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE727dgJxfT9K-HpbDFySw0YytRHfJV1Nr8z87ClKXeljh02ZGsv-9KyehOnyFMH11gXgyN7Rks3adufGjMDwsMgxCVvvsFQgX2LHt1_jeB7EoPeoVgRdKllAd6TqnHSvPYG5dePq&source=gbs_api
- extraLarge: https://books.google.ca/books/content?id=HEXfBgAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE70WdC_9qZ_FtUczIwDq4_4XBZMUl-HwNXyucuOI0v4OCtyRxQAgvDM3m7jJDeXcrm83b-Bi5-TdzSkjxZu4RbpTzW4NL8mPDRAFUlMGPViNw4xMw-ebSHRkgWYsMriAUYjYp_OZ&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=HEXfBgAAQBAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=HEXfBgAAQBAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/KnockoutJS_Essentials.html?hl=&id=HEXfBgAAQBAJ
-
- - title: KnockoutJS Blueprints
- authors:
- - Carlo Russo
- publisher: Packt Publishing Ltd
- publishedDate: '2015-02-25'
- description: If you are a JavaScript developer and already know the basics of KnockoutJS
- and you want to get the most out of it, then this book is for you. This book will
- help in your transition from a small site to a large web application that is easily
- maintainable.
- industryIdentifiers:
- - type: ISBN_10
- identifier: '1783980850'
- - type: ISBN_13
- identifier: '9781783980857'
- readingModes:
- text: true
- image: true
- pageCount: 218
- printedPageCount: 218
- printType: BOOK
- categories:
- - Computers / General
- - Computers / Programming Languages / JavaScript
- maturityRating: NOT_MATURE
- allowAnonLogging: false
- contentVersion: 2.2.2.0.preview.3
- imageLinks:
- smallThumbnail: https://books.google.ca/books/content?id=5ljTBgAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE73zg0-XBzMzQAcMQW_DYHtbhQovG3pLSICrTsQiuPtQjcoh0uUD8mixpJOoQ5Jyhx_Q39QcF8zNZW9vZxYpfOY2H-vNHZ1Q3F-RtZ4urPVrSSKQauMG9YeZOtFE_uyJhwPTkVmA&source=gbs_api
- thumbnail: https://books.google.ca/books/content?id=5ljTBgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE709pFQ7H1gOnU-LAndEX0z9bqHUPQAi5rRoYbighr68U9tTN7ONHq8sgiLrkmhFBO5isUK3dKydyNM1aWDgk4FqErfk2DSbjC2T_jd7nfsnQzXHcFCVEcD3rLNxV7n0pegmMoEy&source=gbs_api
- small: https://books.google.ca/books/content?id=5ljTBgAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE70TIZJ2jb02xZbyrF-pi7rCkKtRbM9QNCKS-7PZfJcNhsqHXwROEZ1W6tasXaC0cOmDdIrUrgAVLgDmP6Yg6HGwxqeV_MyZdZeeJ8zbhL4R9M0jQpKGggoGGLzLzoJ39ID5dCIn&source=gbs_api
- medium: https://books.google.ca/books/content?id=5ljTBgAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE714ZgU0oxMuFEtbSrhaZJwsYhvkBEr1D_wYVJsJyiy6NE80XQxdDKopHEcJtSOG-WVKnjsrgrvidnWoxo2kvauH97Nr4iE44nAJeTFsjlLOG0Xv8anJAMSd2_aA4KYAK5cXZ0u8&source=gbs_api
- large: https://books.google.ca/books/content?id=5ljTBgAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE72zC_ZRz28WbKJAHvaFUB6LqLgItZOT3XobgdMZDn_fnYVVWIg8iv1gMPtNek1yrVlTFwWmWa061ZS5xZVFRxlkXRWPmxiroQjmhiAoCEQ7cjp2Gb6Tos7xcoH1rjVU7GCbMYhH&source=gbs_api
- extraLarge: https://books.google.ca/books/content?id=5ljTBgAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE732FDrzmu-zRydUQ7jmyI9LnQxtWx49_kOuxlwgjW2jI95C_GWB_UWIg02hmKbYRHXbU7jtLw_VL38n-_DUntiCj_f9AG5Lswlq1KaXyjlwfCEXWTIsH82VkQeqnC77S3bqLkFV&source=gbs_api
- language: en
- previewLink: https://books.google.ca/books?id=5ljTBgAAQBAJ&hl=&source=gbs_api
- infoLink: https://books.google.ca/books?id=5ljTBgAAQBAJ&hl=&source=gbs_api
- canonicalVolumeLink: https://books.google.ca/books/about/KnockoutJS_Blueprints.html?hl=&id=5ljTBgAAQBAJ
diff --git a/tko.io/src/index.pug b/tko.io/src/index.pug
deleted file mode 100644
index 50cfa52ca..000000000
--- a/tko.io/src/index.pug
+++ /dev/null
@@ -1,31 +0,0 @@
-doctype html
-html(lang="en")
- head
- title= "TKO"
- meta(charset="UTF-8")
-
- each link in links
- link(rel='stylesheet' href=link.href integrity=link.integrity crossorigin='anonymous')
-
- each script in scripts
- script(src=script.src integrity=script.integrity crossorigin=script.crossorigin type=script.type || "application/javascript" async=script.async)
-
- style(type='text/css')
- | #{styles}
-
- body
- nav.top-bar(data-bind='highlightIfCurrent')
- .tko TKO
- a(href='/') Introduction
- a(href='/3to4') Knockout 3 to 4 Guide
- a.external(href='https://github.com/knockout/tko') Github
-
- nav.sidebar
- #toc.toc(data-bind='each: contents')
- a(href='#\{{ navId }}' class='nav flex-column' data-bind='template: { nodes: nodes }, class: css, click: click')
-
- main
- each section in sections
- .section
- .section-title #{section.title}
- .section-body !{section.html}
diff --git a/tko.io/src/tko-io.js b/tko.io/src/tko-io.js
deleted file mode 100644
index af7c2601d..000000000
--- a/tko.io/src/tko-io.js
+++ /dev/null
@@ -1,118 +0,0 @@
-const {ko} = window
-
-const GITHUB_ROOT = 'https://github.com/knockout/tko/blob/master/packages/'
-const TITLE_QS = '.section-title, h1, h2'
-
-const titleNodeMap = new Map()
-
-ko.options.deferUpdates = true
-
-const titleObserver = new IntersectionObserver(entries => {
- entries.forEach(e => titleNodeMap.get(e.target)(e.isIntersecting))
-})
-
-
-class Title {
- constructor ({element, navIdNumber}) {
- const navId = `toc-${navIdNumber}`
- const depth = this.getDepth(element)
- Object.assign(this, {element, navId, depth})
- element.setAttribute('id', this.navId)
-
- const viewportObservables = ko.observableArray([])
-
- for (const node of this.generateSiblingNodes()) {
- const nodeInViewport = ko.observable(false)
- if (titleNodeMap.has(node)) {
- viewportObservables.push(titleNodeMap.get(node))
- } else {
- titleNodeMap.set(node, nodeInViewport)
- titleObserver.observe(node)
- }
- viewportObservables.push(nodeInViewport)
- }
-
- this.inViewport = ko.computed(() => viewportObservables().some(o => o()))
- }
-
- * generateSiblingNodes () {
- let atNode = this.element
- yield atNode
- while (atNode = atNode.nextSibling) {
- if (atNode.nodeType !== atNode.ELEMENT_NODE) { continue }
- if (this.getDepth(atNode) <= this.depth) { return }
- yield atNode
- }
- }
-
- getDepth (node) {
- if (node.classList.contains('section-title')) { return 0 }
- if (node.tagName === 'H1') { return 1 }
- if (node.tagName === 'H2') { return 2 }
- return 3
- }
-
- get css () {
- const css = { 'in-viewport': this.inViewport }
- switch (this.element.tagName) {
- case 'DIV': Object.assign(css, { section: true }); break
- case 'H2': Object.assign(css, { subheading: true }); break
- case 'H1': Object.assign(css, { heading: true }); break
- }
- return css
- }
-
- get nodes () {
- const node = document.createElement('span')
- node.innerHTML = this.element.innerHTML
- return [node]
- }
-
- click (vm, evt) {
- this.element.scrollIntoView({ behavior: 'smooth', block: 'start' })
- return false
- }
-}
-
-function * generateTitles () {
- let navIdNumber = 0
- for (const element of document.querySelectorAll(TITLE_QS)) {
- navIdNumber++
- yield new Title({element, navIdNumber})
- }
-}
-
-
-/**
- * Rely on some convention to map the source file to its parts / github origin.
- */
-ko.bindingHandlers.set({
- source (element) {
- const origin = this.value // e.g. "../packages/tko/docs/intro.md"
- const link = GITHUB_ROOT + origin
- const [pkg, file] = origin.split('/docs/')
-
- element.classList.add('source')
- element.setAttribute('title', `This part of the documentation comes from ${origin} on GitHub/knockout/tko`)
- element.innerHTML =
- `
-
- ${pkg}
-
- ${file}
- `
- },
-
- highlightIfCurrent (element) {
- for (const anchor of element.querySelectorAll('a[href]')) {
- if (anchor.href === location.href) {
- anchor.classList.add('current-page')
- }
- }
- }
-})
-
-window.addEventListener("load", () => {
- const contents = ko.observableArray(Array.from(generateTitles()))
- ko.applyBindings({ contents })
-})
diff --git a/tko.io/src/tko.css b/tko.io/src/tko.css
deleted file mode 100644
index b9fe13435..000000000
--- a/tko.io/src/tko.css
+++ /dev/null
@@ -1,285 +0,0 @@
-@import url('https://fonts.googleapis.com/css?family=Nunito|Pacifico|Source+Code+Pro');
-
-html,
-body {
- /* Prevent scroll on narrow devices */
- overflow-x: hidden;
- font-family: 'Nunito', sans-serif;
-}
-
-body {
- display: grid;
- margin-top: 75px;
- height: calc(100vh - 75px);
-
- grid-template-columns: minmax(200px, max-content) auto;
- grid-template-areas:
- 'sidebar main';
-}
-
-@media screen and (max-width: 991px) {
- body {
- grid-template-columns: auto;
- grid-template-areas:
- 'sidebar'
- 'main';
- }
-}
-
-a {
- color: #590c12;
- transition: 0.1s ease-in-out;
-}
-
-a:focus, a:hover, a:active {
- color: #8e383c;
- cursor: pointer;
- text-decoration: none;
-}
-
-main a {
- border-bottom: 1px dashed #590c12;
-}
-
-td {
- padding: 5px 1em;
- border-bottom: 1px solid gray;
-}
-
-th {
- padding: 5px 1em;
- border-bottom: 1px solid black;
-}
-
-
-/* Codepen iFrames */
-iframe {
- padding: 0px 1em;
-}
-
-
-/*
- * TOP - BAR
- */
-.top-bar {
- width: 100%;
- display: grid;
- grid-template-columns: auto;
- grid-auto-flow: column;
- justify-content: center;
- grid-column-gap: 24px;
-
- top: 0;
- left: 0;
- position: fixed;
- z-index: 1200;
- padding: 12px;
-
- background-color: #931d0d;
- font-family: Pacifico;
-}
-
-.top-bar a {
- border-radius: 12px;
- text-align: center;
- padding: 0.25em 0.4em;
- color: white;
- font-size: 1.4rem;
- text-shadow: 0 0 5px black;
- line-height: 2.4rem;
- transition: 0.4s background-color ease-in-out;
-}
-
-.top-bar a:hover {
- background-color: #00000080;
- text-shadow: 0 0 5px #931d0d, 0 0 10px #931d0d;
- transition: 0.4s background-color ease-in-out;
-}
-
-.top-bar .tko {
- color: white;
- font-size: 1.6rem;
- padding: 0.25em 0.4em;
- text-shadow: 0 0 5px #efff6c, 0 0 10px #efff6c;
-}
-
-.current-page {
- background-color: #00000040;
-}
-
-/**
- * SIDE-BAR
- */
-.sidebar {
- grid-area: sidebar;
-
- height: calc(100vh - 75px);
- /* Scrollable contents if viewport is shorter than content */
- overflow-y: auto;
- overflow-x: hidden;
- left: 0;
- bottom: 0;
- z-index: 1000;
- padding: 0;
- background-color: #efebe9;
- border-right: 1px solid #efebe9;
-
- padding: 4px 0.75em;
-}
-
-.toc {
- position: sticky;
-}
-
-.sidebar a {
- padding: 1ex 0.25rem;
- color: #931d0d;
- border-radius: 4px;
-}
-
-.sidebar a:hover {
- color: black;
- background-color: #FFaFaFB0;
- transition: 0.4s background-color ease-in-out;
-}
-
-.sidebar .section {
- font-size: 1.2rem;
-}
-
-.sidebar .subheading {
- padding: 0.6ex 8px;
- font-weight: normal;
- margin-left: 1rem;
-}
-
- @keyframes popin {
- from { transform: translateX(50%); }
- to { transform: translateX(0%); }
- }
-
-.sidebar .in-viewport::after {
- position: absolute;
- right: -22px;
- background-color: #8F3F4F90;
- width: 20px;
- height: 20px;
- border-radius: 12px;
- content: ' ';
- animation: 0.25s ease-in 0s popin;
-}
-
-/**
- * MAIN
- */
-main {
- grid-area: main;
- height: calc(100vh - 75px);
- background-color: #fcd4d4;
- padding: 16px;
- overflow: scroll;
-}
-
-h2, h3, h4 {
- margin-top: 1.3em;
- margin-bottom: 0.6em;
-}
-
-h2 {
- font-weight: 800;
-}
-
-h3, h4, h2 time {
- font-weight: 400;
-}
-
-h1 {
- margin-top: 1.5em;
-}
-
-h1 code {
- background-color: transparent;
- border: 3px solid #E8D8D8;
- font-size: inherit;
-}
-
-/**
- * CODE
- */
-
-pre {
- font-family: 'Source Code Pro', monospace;
- background-color: #0a0909;
- padding: 1ex 1em;
- margin-left: 1em;
- border-radius: 1px;
- border: 1px black inset;
-}
-
-code {
- background-color: #080707;
- color: #e6c07b;
- font-size: 0.9rem;
-}
-
-main code {
- font-family: 'Source Code Pro', monospace;
-}
-
-code, td code {
- white-space: nowrap;
- padding: 2px 8px;
-}
-
-pre code {
- color: #e6c07b;
- white-space: pre; /* We want newlines to be newlines in code blocks */
-}
-
-/**
- *
- * TITLES
- *
- */
-
-.section-title {
- font-size: 3rem;
- font-weight: bold;
-}
-
-
-
-
-
-/**
- * Source linking
- */
-.source {
- display: block;
- text-align: right;
- font-size: 0.9rem;
- position: sticky;
- top: 0px;
-}
-
-.source a {
- padding: 2px 0.62em;
- background-color: #E8D8D8;
- border: 1px solid gray;
-}
-
-/**
- *
- * BOOKS
- *
- */
-.book-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, 250px);
- grid-gap: 10px;
- justify-content: space-around;
-}
-
-.book-grid .card {
- width: 250px;
-}
diff --git a/tko.io/yarn.lock b/tko.io/yarn.lock
deleted file mode 100644
index 587d2d0c5..000000000
--- a/tko.io/yarn.lock
+++ /dev/null
@@ -1,1311 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-
-acorn-globals@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
- dependencies:
- acorn "^4.0.4"
-
-acorn@^3.1.0, acorn@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-acorn@^4.0.4, acorn@~4.0.2:
- version "4.0.13"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
-
-ajv@^4.9.1:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-anymatch@^1.3.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
- dependencies:
- micromatch "^2.1.5"
- normalize-path "^2.0.0"
-
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-
-are-we-there-yet@~1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.6"
-
-argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-flatten@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-asap@~2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert-plus@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-aws-sign2@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws4@^1.2.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-binary-extensions@^1.0.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- dependencies:
- inherits "~2.0.0"
-
-boom@2.x.x:
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
- dependencies:
- hoek "2.x.x"
-
-brace-expansion@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-character-parser@^2.1.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
- dependencies:
- is-regex "^1.0.3"
-
-chokidar@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-clean-css@^3.3.0:
- version "3.4.28"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff"
- dependencies:
- commander "2.8.x"
- source-map "0.4.x"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@2.8.x:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-constantinople@^3.0.1:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.0.tgz#7569caa8aa3f8d5935d62e1fa96f9f702cd81c79"
- dependencies:
- acorn "^3.1.0"
- is-expression "^2.0.1"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-cryptiles@2.x.x:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
- dependencies:
- boom "2.x.x"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-debug@^2.2.0:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-decamelize@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-extend@~0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-detect-libc@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1"
-
-doctypes@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-entities@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-
-esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- dependencies:
- fill-range "^2.1.0"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- dependencies:
- is-extendable "^0.1.0"
-
-extend@~3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- dependencies:
- is-extglob "^1.0.0"
-
-extsprintf@1.3.0, extsprintf@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
-filename-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-
-fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^1.1.3"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-for-in@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- dependencies:
- for-in "^1.0.1"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.1.1:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-fs-extra@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
- dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.36"
-
-fstream-ignore@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-function-bind@^1.0.2:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- dependencies:
- is-glob "^2.0.0"
-
-glob@^7.0.5:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-
-gray-matter@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac"
- dependencies:
- extend-shallow "^2.0.1"
- js-yaml "^3.10.0"
- kind-of "^5.0.2"
- strip-bom-string "^1.0.0"
-
-har-schema@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
-
-har-validator@~4.2.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
- dependencies:
- ajv "^4.9.1"
- har-schema "^1.0.5"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
- dependencies:
- function-bind "^1.0.2"
-
-hawk@3.1.3, hawk@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
- dependencies:
- boom "2.x.x"
- cryptiles "2.x.x"
- hoek "2.x.x"
- sntp "1.x.x"
-
-highlight.js@^9.12.0:
- version "9.12.0"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
-
-hoek@2.x.x:
- version "2.16.3"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-http-signature@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
- dependencies:
- assert-plus "^0.2.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-ini@~1.3.0:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-is-dotfile@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- dependencies:
- is-primitive "^2.0.0"
-
-is-expression@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-2.1.0.tgz#91be9d47debcfef077977e9722be6dcfb4465ef0"
- dependencies:
- acorn "~3.3.0"
- object-assign "^4.0.1"
-
-is-expression@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f"
- dependencies:
- acorn "~4.0.2"
- object-assign "^4.0.1"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- dependencies:
- is-extglob "^1.0.0"
-
-is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- dependencies:
- kind-of "^3.0.2"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-promise@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-
-is-regex@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- dependencies:
- has "^1.0.1"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-isarray@1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- dependencies:
- isarray "1.0.0"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-js-stringify@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db"
-
-js-yaml@^3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-jstransformer@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"
- dependencies:
- is-promise "^2.0.0"
- promise "^7.0.1"
-
-kind-of@^3.0.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.2:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-linkify-it@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f"
- dependencies:
- uc.micro "^1.0.1"
-
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-markdown-it@^8.4.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.0.tgz#e2400881bf171f7018ed1bd9da441dac8af6306d"
- dependencies:
- argparse "^1.0.7"
- entities "~1.1.1"
- linkify-it "^2.0.0"
- mdurl "^1.0.1"
- uc.micro "^1.0.3"
-
-mdurl@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
-
-micromatch@^2.1.5:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
-
-mime-types@^2.1.12, mime-types@~2.1.7:
- version "2.1.17"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
- dependencies:
- mime-db "~1.30.0"
-
-minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-"mkdirp@>=0.5 0", mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-
-nan@^2.3.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
-
-node-pre-gyp@^0.6.36:
- version "0.6.39"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
- dependencies:
- detect-libc "^1.0.2"
- hawk "3.1.3"
- mkdirp "^0.5.1"
- nopt "^4.0.1"
- npmlog "^4.0.2"
- rc "^1.1.7"
- request "2.81.0"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^2.2.1"
- tar-pack "^3.4.0"
-
-nopt@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
-normalize-path@^2.0.0, normalize-path@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-npmlog@^4.0.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-oauth-sign@~0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-object-assign@^4.0.1, object-assign@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-once@^1.3.0, once@^1.3.3:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-osenv@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-performance-now@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-
-promise@^7.0.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
- dependencies:
- asap "~2.0.3"
-
-pug-attrs@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.2.tgz#8be2b2225568ffa75d1b866982bff9f4111affcb"
- dependencies:
- constantinople "^3.0.1"
- js-stringify "^1.0.1"
- pug-runtime "^2.0.3"
-
-pug-code-gen@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.0.tgz#96aea39a9e62f1ec5d2b6a5b42a29d528c70b43d"
- dependencies:
- constantinople "^3.0.1"
- doctypes "^1.1.0"
- js-stringify "^1.0.1"
- pug-attrs "^2.0.2"
- pug-error "^1.3.2"
- pug-runtime "^2.0.3"
- void-elements "^2.0.1"
- with "^5.0.0"
-
-pug-error@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26"
-
-pug-filters@^2.1.5:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-2.1.5.tgz#66bf6e80d97fbef829bab0aa35eddff33fc964f3"
- dependencies:
- clean-css "^3.3.0"
- constantinople "^3.0.1"
- jstransformer "1.0.0"
- pug-error "^1.3.2"
- pug-walk "^1.1.5"
- resolve "^1.1.6"
- uglify-js "^2.6.1"
-
-pug-lexer@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-3.1.0.tgz#fd087376d4a675b4f59f8fef422883434e9581a2"
- dependencies:
- character-parser "^2.1.1"
- is-expression "^3.0.0"
- pug-error "^1.3.2"
-
-pug-linker@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.3.tgz#25f59eb750237f0368e59c3379764229c0189c41"
- dependencies:
- pug-error "^1.3.2"
- pug-walk "^1.1.5"
-
-pug-load@^2.0.9:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.9.tgz#ee217c914cc1d9324d44b86c32d1df241d36de7a"
- dependencies:
- object-assign "^4.1.0"
- pug-walk "^1.1.5"
-
-pug-parser@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-4.0.0.tgz#c9f52322e4eabe4bf5beeba64ed18373bb627801"
- dependencies:
- pug-error "^1.3.2"
- token-stream "0.0.1"
-
-pug-runtime@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.3.tgz#98162607b0fce9e254d427f33987a5aee7168bda"
-
-pug-strip-comments@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.2.tgz#d313afa01bcc374980e1399e23ebf2eb9bdc8513"
- dependencies:
- pug-error "^1.3.2"
-
-pug-walk@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.5.tgz#90e943acbcf7021e6454cf1b32245891cba6f851"
-
-pug@^2.0.0-rc.4:
- version "2.0.0-rc.4"
- resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.0-rc.4.tgz#b7b08f6599bd5302568042b7436984fb28c80a13"
- dependencies:
- pug-code-gen "^2.0.0"
- pug-filters "^2.1.5"
- pug-lexer "^3.1.0"
- pug-linker "^3.0.3"
- pug-load "^2.0.9"
- pug-parser "^4.0.0"
- pug-runtime "^2.0.3"
- pug-strip-comments "^1.0.2"
-
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-qs@~6.4.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
-
-randomatic@^1.1.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-rc@^1.1.7:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
- dependencies:
- deep-extend "~0.4.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- safe-buffer "~5.1.1"
- string_decoder "~1.0.3"
- util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
-regex-cache@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
- dependencies:
- is-equal-shallow "^0.1.3"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-
-repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-
-repeat-string@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-request@2.81.0:
- version "2.81.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~4.2.1"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- performance-now "^0.2.0"
- qs "~6.4.0"
- safe-buffer "^5.0.1"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "^0.6.0"
- uuid "^3.0.0"
-
-resolve@^1.1.6:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
- dependencies:
- path-parse "^1.0.5"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
- dependencies:
- glob "^7.0.5"
-
-safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-
-semver@^5.3.0:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
-
-set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-signal-exit@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-sntp@1.x.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
- dependencies:
- hoek "2.x.x"
-
-source-map@0.4.x:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@~0.5.1:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string_decoder@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
- dependencies:
- safe-buffer "~5.1.0"
-
-stringstream@~0.0.4:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-bom-string@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-tar-pack@^3.4.0:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
- dependencies:
- debug "^2.2.0"
- fstream "^1.0.10"
- fstream-ignore "^1.0.5"
- once "^1.3.3"
- readable-stream "^2.1.4"
- rimraf "^2.5.1"
- tar "^2.2.1"
- uid-number "^0.0.6"
-
-tar@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- dependencies:
- block-stream "*"
- fstream "^1.0.2"
- inherits "2"
-
-token-stream@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"
-
-tough-cookie@~2.3.0:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
- dependencies:
- punycode "^1.4.1"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-uc.micro@^1.0.1, uc.micro@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192"
-
-uglify-js@^2.6.1:
- version "2.8.29"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
- dependencies:
- source-map "~0.5.1"
- yargs "~3.10.0"
- optionalDependencies:
- uglify-to-browserify "~1.0.0"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-uid-number@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-
-universalify@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-uuid@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-void-elements@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
-
-wide-align@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
- dependencies:
- string-width "^1.0.2"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-with@^5.0.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe"
- dependencies:
- acorn "^3.1.0"
- acorn-globals "^3.0.0"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"
diff --git a/tools/site.mk b/tools/site.mk
new file mode 100644
index 000000000..ec0fe5c8b
--- /dev/null
+++ b/tools/site.mk
@@ -0,0 +1,45 @@
+#
+# Site-related make targets
+#
+
+
+NODE_BIN := ../../node_modules/.bin
+ESBUILD := $(NODE_BIN)/esbuild
+PORT := 8080
+
+dist := dist/entry.js dist/index.html
+
+all: build
+
+dist/:
+ mkdir -p dist
+
+src/index.html:
+
+dist/entry.js: src/entry.tsx dist/
+ $(ESBUILD) src/entry.tsx \
+ --bundle \
+ --format=esm \
+ --sourcemap \
+ --metafile=dist/meta.json \
+ --outfile=dist/entry.js
+
+dist/index.html: src/index.html dist/
+ ln -sf ../src/index.html dist/index.html
+
+.PHONY: BUILD
+build:: dist/index.html dist/entry.js
+
+.PHONY: clean
+clean:
+ rm -rf dist/*
+
+.PHONY: serve
+serve: build
+ $(ESBUILD) src/entry.tsx \
+ --bundle \
+ --format=esm \
+ --sourcemap \
+ --metafile=dist/meta.json \
+ --servedir=dist --serve=$(PORT) \
+ --outfile=dist/entry.js
diff --git a/tsconfig.json b/tsconfig.json
index 88fad2949..82a99106b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -21,6 +21,7 @@
"packages/*",
"builds/*"
]
- }
+ },
+ "jsx": "preserve"
}
}