diff --git a/README.md b/README.md index dcce3eb8e1..062b02297c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ difficulties, many combining functionality from several packages) in the | [`@thi.ng/iterators`](./packages/iterators) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/iterators.svg)](https://www.npmjs.com/package/@thi.ng/iterators) | [changelog](./packages/iterators/CHANGELOG.md) | | [`@thi.ng/paths`](./packages/paths) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/paths.svg)](https://www.npmjs.com/package/@thi.ng/paths) | [changelog](./packages/paths/CHANGELOG.md) | | [`@thi.ng/pointfree`](./packages/pointfree) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/pointfree.svg)](https://www.npmjs.com/package/@thi.ng/pointfree) | [changelog](./packages/pointfree/CHANGELOG.md) | +| [`@thi.ng/pointfree-lang`](./packages/pointfree-lang) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/pointfree-lang.svg)](https://www.npmjs.com/package/@thi.ng/pointfree-lang) | [changelog](./packages/pointfree-lang/CHANGELOG.md) | | [`@thi.ng/rle-pack`](./packages/rle-pack) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/rle-pack.svg)](https://www.npmjs.com/package/@thi.ng/rle-pack) | [changelog](./packages/rle-pack/CHANGELOG.md) | | [`@thi.ng/resolve-map`](./packages/resolve-map) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/resolve-map.svg)](https://www.npmjs.com/package/@thi.ng/resolve-map) | [changelog](./packages/resolve-map/CHANGELOG.md) | | [`@thi.ng/router`](./packages/router) | [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/router.svg)](https://www.npmjs.com/package/@thi.ng/router) | [changelog](./packages/router/CHANGELOG.md) | diff --git a/assets/deps.png b/assets/deps.png index e673c65146..d8a37799b1 100644 Binary files a/assets/deps.png and b/assets/deps.png differ diff --git a/examples/README.md b/examples/README.md index bea2f6206b..20213ad58b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -15,7 +15,8 @@ If you want to [contribute](../CONTRIBUTING.md) an example, please get in touch | 7 | [interceptor-basics](./hdom-benchmark) | event handling w/ interceptors and side effects | atom, hdom | intermediate | | 8 | [json-components](./json-components) | JSON->component transformation, live editor | hdom, transducers | intermediate | | 9 | [login-form](./login-form) | basic SPA without router | atom, hdom | intermediate | -| 10 | [router-basics](./router-basics) | complete mini SPA | atom, hdom, router | advanced | -| 11 | [svg-particles](./svg-particles) | hdom SVG generation / animation | hdom, transducers | basic | -| 12 | [todo-list](./todo-list) | Canonical Todo list with undo/redo | atom, hdom, transducers | intermediate | -| 13 | [webgl](./webgl) | Canvas component handling | hdom, hdom-components | basic | +| 10 | [pointfree-svg](./pointfree-svg) | generate SVG using pointfree DSL | hiccup, hdom-components, pointfree-lang | intermediate | +| 11 | [router-basics](./router-basics) | complete mini SPA | atom, hdom, router | advanced | +| 12 | [svg-particles](./svg-particles) | hdom SVG generation / animation | hdom, transducers | basic | +| 13 | [todo-list](./todo-list) | Canonical Todo list with undo/redo | atom, hdom, transducers | intermediate | +| 14 | [webgl](./webgl) | Canvas component handling | hdom, hdom-components | basic | diff --git a/examples/async-effect/README.md b/examples/async-effect/README.md index cdf27b701e..0fb9fcf76b 100644 --- a/examples/async-effect/README.md +++ b/examples/async-effect/README.md @@ -6,14 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/async-effect yarn install -yarn build +yarn start ``` - -Unlike other examples, this one requires a local webserver to function, for example: - -``` -python -m SimpleHTTPServer -``` - -Ps. You can also run the demo without server, but this only good for testing -the error event handling :) \ No newline at end of file diff --git a/examples/async-effect/package.json b/examples/async-effect/package.json index 3dd4ccd323..4575868eca 100644 --- a/examples/async-effect/package.json +++ b/examples/async-effect/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.3.1", - "typescript": "^2.7.1", - "webpack": "^3.10.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/api": "latest", diff --git a/examples/async-effect/tsconfig.json b/examples/async-effect/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/async-effect/tsconfig.json +++ b/examples/async-effect/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/async-effect/webpack.config.js b/examples/async-effect/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/async-effect/webpack.config.js +++ b/examples/async-effect/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/cellular-automata/README.md b/examples/cellular-automata/README.md index 2f5c766d85..92ebcdee71 100644 --- a/examples/cellular-automata/README.md +++ b/examples/cellular-automata/README.md @@ -6,20 +6,9 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/cellular-automata yarn install +yarn start ``` -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... - ## Example configurations - [Conway (default)](http://demo.thi.ng/umbrella/cellular-automata/#000100000-001100000) diff --git a/examples/cellular-automata/package.json b/examples/cellular-automata/package.json index 123ffddb55..858b9a4469 100644 --- a/examples/cellular-automata/package.json +++ b/examples/cellular-automata/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/api": "latest", diff --git a/examples/cellular-automata/tsconfig.json b/examples/cellular-automata/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/cellular-automata/tsconfig.json +++ b/examples/cellular-automata/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/cellular-automata/webpack.config.js b/examples/cellular-automata/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/cellular-automata/webpack.config.js +++ b/examples/cellular-automata/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/dashboard/README.md b/examples/dashboard/README.md index 0514a80736..375577204b 100644 --- a/examples/dashboard/README.md +++ b/examples/dashboard/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/dashboard yarn install +yarn start ``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/dashboard/package.json b/examples/dashboard/package.json index 5a72526e7d..de3c69b85c 100644 --- a/examples/dashboard/package.json +++ b/examples/dashboard/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/hdom": "latest" diff --git a/examples/dashboard/tsconfig.json b/examples/dashboard/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/dashboard/tsconfig.json +++ b/examples/dashboard/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/dashboard/webpack.config.js b/examples/dashboard/webpack.config.js index de90a8af0b..e2bf1e8d3a 100644 --- a/examples/dashboard/webpack.config.js +++ b/examples/dashboard/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false, + devServer: { + contentBase: "." } }; diff --git a/examples/devcards/README.md b/examples/devcards/README.md index 1cf3828e3f..7f488eb0fd 100644 --- a/examples/devcards/README.md +++ b/examples/devcards/README.md @@ -6,15 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/devcards yarn install +yarn start ``` -Then - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/devcards/package.json b/examples/devcards/package.json index 74cf14db2c..92ffd276a1 100644 --- a/examples/devcards/package.json +++ b/examples/devcards/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.3.1", - "typescript": "^2.7.1", - "webpack": "^3.10.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/api": "latest", diff --git a/examples/devcards/tsconfig.json b/examples/devcards/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/devcards/tsconfig.json +++ b/examples/devcards/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/devcards/webpack.config.js b/examples/devcards/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/devcards/webpack.config.js +++ b/examples/devcards/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/hdom-basics/README.md b/examples/hdom-basics/README.md index 23154144a6..d8cdf4c2ac 100644 --- a/examples/hdom-basics/README.md +++ b/examples/hdom-basics/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/hdom-basics yarn install +yarn start ``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... \ No newline at end of file diff --git a/examples/hdom-basics/package.json b/examples/hdom-basics/package.json index 2dffff8eed..492e57056f 100644 --- a/examples/hdom-basics/package.json +++ b/examples/hdom-basics/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/hdom": "latest" diff --git a/examples/hdom-basics/tsconfig.json b/examples/hdom-basics/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/hdom-basics/tsconfig.json +++ b/examples/hdom-basics/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/hdom-basics/webpack.config.js b/examples/hdom-basics/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/hdom-basics/webpack.config.js +++ b/examples/hdom-basics/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/hdom-benchmark/README.md b/examples/hdom-benchmark/README.md index 0ceeae35e7..43eaad0df3 100644 --- a/examples/hdom-benchmark/README.md +++ b/examples/hdom-benchmark/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/hdom-benchmark yarn install -``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... +yarn start +``` \ No newline at end of file diff --git a/examples/hdom-benchmark/package.json b/examples/hdom-benchmark/package.json index 742d9e16e8..61fda56abc 100644 --- a/examples/hdom-benchmark/package.json +++ b/examples/hdom-benchmark/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/api": "latest", diff --git a/examples/hdom-benchmark/tsconfig.json b/examples/hdom-benchmark/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/hdom-benchmark/tsconfig.json +++ b/examples/hdom-benchmark/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/hdom-benchmark/webpack.config.js b/examples/hdom-benchmark/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/hdom-benchmark/webpack.config.js +++ b/examples/hdom-benchmark/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/interceptor-basics/README.md b/examples/interceptor-basics/README.md index 084a24ad3c..75e8dd7b3c 100644 --- a/examples/interceptor-basics/README.md +++ b/examples/interceptor-basics/README.md @@ -6,17 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/interceptor-basics yarn install +yarn start ``` -Then - -``` -# For Mac -yarn dev -``` - -``` -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/interceptor-basics/package.json b/examples/interceptor-basics/package.json index 86d195e8ed..33898c5a23 100644 --- a/examples/interceptor-basics/package.json +++ b/examples/interceptor-basics/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/api": "latest", diff --git a/examples/interceptor-basics/tsconfig.json b/examples/interceptor-basics/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/interceptor-basics/tsconfig.json +++ b/examples/interceptor-basics/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/interceptor-basics/webpack.config.js b/examples/interceptor-basics/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/interceptor-basics/webpack.config.js +++ b/examples/interceptor-basics/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/json-components/README.md b/examples/json-components/README.md index 4020f895f5..19563e0437 100644 --- a/examples/json-components/README.md +++ b/examples/json-components/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/json-components yarn install +yarn start ``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/json-components/package.json b/examples/json-components/package.json index 42a9c5ea78..90a3c3bf95 100644 --- a/examples/json-components/package.json +++ b/examples/json-components/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/hdom": "latest", diff --git a/examples/json-components/tsconfig.json b/examples/json-components/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/json-components/tsconfig.json +++ b/examples/json-components/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/json-components/webpack.config.js b/examples/json-components/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/json-components/webpack.config.js +++ b/examples/json-components/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/login-form/README.md b/examples/login-form/README.md index bd5d5de767..397df15c6c 100644 --- a/examples/login-form/README.md +++ b/examples/login-form/README.md @@ -6,18 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/login-form yarn install +yarn start ``` - -Then - -``` -\# For Mac -yarn dev -``` - -``` -\# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/login-form/package.json b/examples/login-form/package.json index e1ab32fe08..e08f15a6d4 100644 --- a/examples/login-form/package.json +++ b/examples/login-form/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.3.1", - "typescript": "^2.7.1", - "webpack": "^3.10.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/atom": "latest", diff --git a/examples/login-form/tsconfig.json b/examples/login-form/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/login-form/tsconfig.json +++ b/examples/login-form/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/login-form/webpack.config.js b/examples/login-form/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/login-form/webpack.config.js +++ b/examples/login-form/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/pointfree-svg/.gitignore b/examples/pointfree-svg/.gitignore new file mode 100644 index 0000000000..9c418ce79f --- /dev/null +++ b/examples/pointfree-svg/.gitignore @@ -0,0 +1,3 @@ +node_modules +yarn.lock +*.js diff --git a/examples/pointfree-svg/README.md b/examples/pointfree-svg/README.md new file mode 100644 index 0000000000..9f5d35732b --- /dev/null +++ b/examples/pointfree-svg/README.md @@ -0,0 +1,24 @@ +# pointfree-svg + +This is a non-interactive demo combining the following packages to generate the SVG graphic below: + +- [@thi.ng/hiccup](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup) +- [@thi.ng/hdom-components](https://github.com/thi-ng/umbrella/tree/master/packages/hdom-components) +- [@thi.ng/pointfree](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree) +- [@thi.ng/pointfree-lang](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree-lang) + +![generated result](./output.svg) + +Most of the [source code](./src/index.ts) is written in the pointfree +DSL syntax and includes a rudimentary graphics lib to generate SVG +shapes in hiccup format (basically a DOM defined by nested arrays). The +example also demonstrates how to define custom words defined in JS to +easily extend the language. + +The generated SVG file will be written in this example's directory... + +``` +git clone https://github.com/thi-ng/umbrella.git +cd umbrella/examples/pointfree-svg +yarn build +``` diff --git a/examples/pointfree-svg/output.svg b/examples/pointfree-svg/output.svg new file mode 100644 index 0000000000..5789d06190 --- /dev/null +++ b/examples/pointfree-svg/output.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/pointfree-svg/package.json b/examples/pointfree-svg/package.json new file mode 100644 index 0000000000..db784932cb --- /dev/null +++ b/examples/pointfree-svg/package.json @@ -0,0 +1,17 @@ +{ + "name": "pointfree-svg", + "version": "0.0.1", + "repository": "https://github.com/thi-ng/umbrella", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn clean && tsc && node index.js", + "clean": "rm -rf *.js" + }, + "dependencies": { + "@thi.ng/hiccup": "latest", + "@thi.ng/hdom-components": "latest", + "@thi.ng/pointfree": "latest", + "@thi.ng/pointfree-lang": "latest" + } +} \ No newline at end of file diff --git a/examples/pointfree-svg/src/index.ts b/examples/pointfree-svg/src/index.ts new file mode 100644 index 0000000000..c0344b768a --- /dev/null +++ b/examples/pointfree-svg/src/index.ts @@ -0,0 +1,93 @@ +import * as fs from "fs"; + +import * as svg from "@thi.ng/hdom-components/svg"; +import { serialize } from "@thi.ng/hiccup"; +import { ensureStack, maptos } from "@thi.ng/pointfree"; +import { ffi, run } from "@thi.ng/pointfree-lang"; + +// rudimentary generic graphics lib & helper words +const libsrc = ` +( helper words for forming 2D vectors ) +: xy ( x y -- [x y] ) vec2 ; +: yx ( x y -- [y x] ) swap vec2 ; + +( appends a hiccup shape element to @shapes array ) +: addshape ( s -- ) @shapes pushl drop ; + +( creates hiccup element with 2 args & shape type ) +: shape2 ( a b type -- ) -rot vec3 addshape; + +( transforms 2 points into a svg line ) +: line ( a b -- ) @svg.line shape2 ; + +( transforms point and radius into a svg circle ) +: circle ( p r -- ) @svg.circle shape2 ; + +( creates a horizontal line ) +: hline ( y width -- ) over 0 yx -rot yx line ; + +( creates a vertical line ) +: vline ( x height -- ) over 0 xy -rot xy line ; + +( + 2D grid loop construct + executes body quot for each iteration +) +: loop2 ( cols rows body -- ) + >r [ over [ over cprd exec ] dotimes drop ] dotimes + drop rdrop ; +`; + +// user code to generate SVG graphic and write out as file +// the whole block has this stack effect: +// +// ( filename res -- ) +const usersrc = ` +( creates grid of lines with given grid res ) +: grid ( res -- ) + dup [10 * 100 dup2 hline vline] dotimes ; + +( + creates triangular grid of circles with given grid res + only creates circles for grid cells where x <= y +) +: circlegrid ( res -- ) + dup [dup2 lteq [xy 10 v* 3 circle] [drop2] if] loop2 ; + +grid circlegrid + +( create SVG root element in hiccup format ) +@svg.svgdoc [{width: 200, height: 200, stroke: "#f04", fill: "none"}] pushl +( concat with generated shapes ) +@shapes cat +( serialize hiccup format to SVG and write to disk ) +serialize swap write-file +`; + +// initialize environment and pre-compile library source +const env = ffi( + // predefined variables + { + "svg.line": svg.line, + "svg.circle": svg.circle, + "svg.svgdoc": svg.svgdoc, + shapes: [], + }, + // foreign function interface (FFI) + // custom words usable by the DSL + { + // ( svgdom -- svgstring ) + "serialize": maptos(serialize), + // ( body filename -- ) + "write-file": (ctx) => { + const stack = ctx[0]; + ensureStack(stack, 2); + fs.writeFileSync(stack.pop(), stack.pop()); + return ctx; + } + }); +// compile lib (resulting words are stored in env) +run(libsrc, env); + +// compile & execute user code with given stack params +run(usersrc, env, ["output.svg", 21]); diff --git a/examples/pointfree-svg/tsconfig.json b/examples/pointfree-svg/tsconfig.json new file mode 100644 index 0000000000..29e4b7fbeb --- /dev/null +++ b/examples/pointfree-svg/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": ".", + "noUnusedLocals": false, + }, + "include": [ + "./src/**/*.ts" + ] +} \ No newline at end of file diff --git a/examples/router-basics/README.md b/examples/router-basics/README.md index 94ec2ff533..6134b0f688 100644 --- a/examples/router-basics/README.md +++ b/examples/router-basics/README.md @@ -15,7 +15,7 @@ Installs all dependencies, runs `webpack-dev-server` and opens the app in your b This example is based on the [create-hdom-app](https://github.com/thi-ng/create-hdom-app) project -template and is the most advanced example in this repo thus far. +template and is one the most advanced example in this repo thus far. Features covered: - App & component configuration diff --git a/examples/router-basics/package.json b/examples/router-basics/package.json index ed1b14fa59..0beaa3a174 100644 --- a/examples/router-basics/package.json +++ b/examples/router-basics/package.json @@ -16,10 +16,10 @@ "@thi.ng/router": "latest" }, "devDependencies": { - "ts-loader": "^4.0.1", - "typescript": "^2.7.2", - "webpack": "^4.1.1", - "webpack-cli": "^2.0.12", + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", "webpack-dev-server": "^3.1.1" } } \ No newline at end of file diff --git a/examples/router-basics/tsconfig.json b/examples/router-basics/tsconfig.json index acab3b01c9..bfbce98f88 100644 --- a/examples/router-basics/tsconfig.json +++ b/examples/router-basics/tsconfig.json @@ -1,17 +1,10 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "module": "commonjs", - "target": "ES6", "outDir": "build", - "experimentalDecorators": true, - "noUnusedParameters": true, - "noUnusedLocals": true, - "sourceMap": true, + "sourceMap": true }, "include": [ "./src/**/*.ts" - ], - "exclude": [ - "./**/node_modules" ] } \ No newline at end of file diff --git a/examples/svg-particles/README.md b/examples/svg-particles/README.md index ac4462d8e9..dcf4ce21d4 100644 --- a/examples/svg-particles/README.md +++ b/examples/svg-particles/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/svg-particles yarn install +yarn start ``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/svg-particles/package.json b/examples/svg-particles/package.json index cf35b14a4b..55f4074545 100644 --- a/examples/svg-particles/package.json +++ b/examples/svg-particles/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/hdom": "latest", diff --git a/examples/svg-particles/tsconfig.json b/examples/svg-particles/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/svg-particles/tsconfig.json +++ b/examples/svg-particles/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/svg-particles/webpack.config.js b/examples/svg-particles/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/svg-particles/webpack.config.js +++ b/examples/svg-particles/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/examples/todo-list/README.md b/examples/todo-list/README.md index 2e10e640da..7f804669c0 100644 --- a/examples/todo-list/README.md +++ b/examples/todo-list/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/todo-list yarn install +yarn start ``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/todo-list/package.json b/examples/todo-list/package.json index 5a7a5ae2cd..2d3a03a8a1 100644 --- a/examples/todo-list/package.json +++ b/examples/todo-list/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/atom": "latest", diff --git a/examples/todo-list/tsconfig.json b/examples/todo-list/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/todo-list/tsconfig.json +++ b/examples/todo-list/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/todo-list/webpack.config.js b/examples/todo-list/webpack.config.js index de90a8af0b..e2bf1e8d3a 100644 --- a/examples/todo-list/webpack.config.js +++ b/examples/todo-list/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false, + devServer: { + contentBase: "." } }; diff --git a/examples/webgl/README.md b/examples/webgl/README.md index 068614e172..d9f9db79c3 100644 --- a/examples/webgl/README.md +++ b/examples/webgl/README.md @@ -6,16 +6,5 @@ git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/webgl yarn install +yarn start ``` - -Then... - -``` -# For Mac -yarn dev - -# For Debian, Ubuntu, Etc. -yarn debdev -``` - -Once webpack has completed building, refresh your browser... diff --git a/examples/webgl/package.json b/examples/webgl/package.json index 7ad8baca3f..a95cb1f40f 100644 --- a/examples/webgl/package.json +++ b/examples/webgl/package.json @@ -5,15 +5,15 @@ "author": "Karsten Schmidt ", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.5.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { "@thi.ng/hdom": "latest", diff --git a/examples/webgl/tsconfig.json b/examples/webgl/tsconfig.json index bd6481a5a6..bfbce98f88 100644 --- a/examples/webgl/tsconfig.json +++ b/examples/webgl/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "." + "outDir": "build", + "sourceMap": true }, "include": [ "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/examples/webgl/webpack.config.js b/examples/webgl/webpack.config.js index 26efe6fb12..e2bf1e8d3a 100644 --- a/examples/webgl/webpack.config.js +++ b/examples/webgl/webpack.config.js @@ -8,10 +8,11 @@ module.exports = { extensions: [".ts", ".js"] }, module: { - loaders: [{ test: /\.ts$/, loader: "ts-loader" }] + rules: [ + { test: /\.ts$/, use: "ts-loader" } + ] }, - node: { - process: false, - setImmediate: false + devServer: { + contentBase: "." } }; diff --git a/package.json b/package.json index a9107fdd19..b8b8c344b1 100644 --- a/package.json +++ b/package.json @@ -5,18 +5,22 @@ ], "devDependencies": { "benchmark": "^2.1.4", - "lerna": "^2.9.0", - "nyc": "^11.4.1", + "lerna": "^2.9.1", + "nyc": "^11.6.0", "tslint": "^5.9.1", - "typescript": "^2.7.2" + "typescript": "^2.8.1", + "ts-loader": "^4.1.0", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "scripts": { "build": "yarn install && lerna bootstrap && lerna run build --sort", "cover": "lerna run cover", "depgraph": "scripts/depgraph && git add assets/deps.png && git commit -m 'docs: update dep graph' && git push", "doc": "lerna run doc", - "examples": "ex=\"examples/*\"; for e in $ex; do (cd $e && yarn build); done", + "examples": "ex=\"examples/*\"; for e in $ex; do (cd $e && yarn install && yarn build); done", "pub": "lerna publish && yarn depgraph && yarn doc && scripts/upload-docs", "test": "yarn build && lerna run test" } -} +} \ No newline at end of file diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index a2e7f53291..3535577db4 100644 --- a/packages/api/CHANGELOG.md +++ b/packages/api/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/api@2.1.1...@thi.ng/api@2.1.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/api + ## [2.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/api@2.1.0...@thi.ng/api@2.1.1) (2018-03-28) diff --git a/packages/api/README.md b/packages/api/README.md index e981bb6208..36bf085941 100644 --- a/packages/api/README.md +++ b/packages/api/README.md @@ -2,7 +2,19 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/api.svg)](https://www.npmjs.com/package/@thi.ng/api) -Generic, common interfaces, types, decorators and mixins for thi.ng TypeScript projects (and others). +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + +This package is implicitly used by most other projects in this +repository. It defines: + +- 30+ generic, common interfaces & types +- class & method decorators +- mixins +- error types +- comparison & equivalence checks ## Installation diff --git a/packages/api/package.json b/packages/api/package.json index a77c068574..15e2dba323 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/api", - "version": "2.1.1", + "version": "2.1.2", "description": "Common, generic types & interfaces for thi.ng projects", "main": "./index.js", "typings": "./index.d.ts", @@ -16,17 +16,15 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/checks": "^1.3.0" + "@thi.ng/checks": "^1.3.1" }, "keywords": [ "compare", @@ -34,6 +32,7 @@ "ES6", "generic", "interfaces", + "mixins", "type declarations", "typescript" ], diff --git a/packages/atom/CHANGELOG.md b/packages/atom/CHANGELOG.md index 3f205768e2..ea2cdb385a 100644 --- a/packages/atom/CHANGELOG.md +++ b/packages/atom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.2.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@1.2.1...@thi.ng/atom@1.2.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/atom + ## [1.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@1.2.0...@thi.ng/atom@1.2.1) (2018-03-28) diff --git a/packages/atom/README.md b/packages/atom/README.md index 97073c0f89..dab7e3410e 100644 --- a/packages/atom/README.md +++ b/packages/atom/README.md @@ -2,28 +2,33 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/atom.svg)](https://www.npmjs.com/package/@thi.ng/atom) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About -Clojure inspired mutable wrappers for (usually) immutable values, with infrastructure support for: +Clojure inspired mutable wrappers for (usually) immutable values, with +infrastructure support for: - watches - derived view subscriptions - cursors (direct R/W access to nested values) - undo/redo history -Together these types act as building blocks for various application state -handling patterns, specifically aimed (though not exclusively) at the concept -of using a nested, immutable, centralized atom as single source of truth within -an application. +Together these types act as building blocks for various application +state handling patterns, specifically aimed (though not exclusively) at +the concept of using a nested, immutable, centralized atom as single +source of truth within an application. ### Status Stable, used in production and in active development. -**Note: On 2018-03-17 this package was split to remain more -focused. Path based getters/setters have been moved into the new -[@thi.ng/paths](https://github.com/thi-ng/umbrella/tree/master/packages/paths) package. -Likewise, all interceptor based event handling functionality now lives in the +**Note: On 2018-03-17 this package was split to remain more focused. +Path based getters/setters have been moved into the new +[@thi.ng/paths](https://github.com/thi-ng/umbrella/tree/master/packages/paths) +package. Likewise, all interceptor based event handling functionality +now lives in the [@thi.ng/interceptors](https://github.com/thi-ng/umbrella/tree/master/packages/interceptors) package.** @@ -35,7 +40,8 @@ yarn add @thi.ng/atom **New since 2018-03-15: You can now create a preconfigured app skeleton using @thi.ng/atom, @thi.ng/hdom & @thi.ng/router using the -[create-hdom-app](https://github.com/thi-ng/create-hdom-app) project generator:** +[create-hdom-app](https://github.com/thi-ng/create-hdom-app) project +generator:** ``` yarn create hdom-app my-app @@ -53,11 +59,11 @@ directory make heavy use of this library. ### Atom -An `Atom` is a mutable wrapper for immutable values. The wrapped value can be -obtained via `deref()`, replaced via `reset()` and updated using `swap()`. An -atom too supports the concept of watches, essentially `onchange` event handlers -which are called from `reset`/`swap` and receive both the old and new atom -values. +An `Atom` is a mutable wrapper for immutable values. The wrapped value +can be obtained via `deref()`, replaced via `reset()` and updated using +`swap()`. An atom too supports the concept of watches, essentially +`onchange` event handlers which are called from `reset`/`swap` and +receive both the old and new atom values. ```typescript import * as atom from "@thi.ng/atom"; @@ -120,9 +126,9 @@ a.deref(); // { a: { b: { c: 2 } } } ``` -For that reason, it's recommended to design the overall data layout rather wide -than deep (my personal limit is 3-4 levels) to minimize the length of the -propagation chain and maximize structural sharing. +For that reason, it's recommended to design the overall data layout +rather wide than deep (my personal limit is 3-4 levels) to minimize the +length of the propagation chain and maximize structural sharing. ```typescript // main state @@ -158,7 +164,10 @@ main.deref() ### Derived views -Whereas cursors provide read/write access to nested key paths within a state atom, there are many situations when one only requires read access and the ability to (optionally) produce transformed versions of such a value. The `View` type provides exactly this functionality: +Whereas cursors provide read/write access to nested key paths within a +state atom, there are many situations when one only requires read access +and the ability to (optionally) produce transformed versions of such a +value. The `View` type provides exactly this functionality: ```typescript db = new atom.Atom({a: 1, b: {c: 2}}); @@ -235,15 +244,16 @@ x === null // true ``` -Atoms & views are useful tools for keeping state outside UI components. Here's -an example of a tiny +Atoms & views are useful tools for keeping state outside UI components. +Here's an example of a tiny [@thi.ng/hdom](https://github.com/thi-ng/umbrella/tree/master/packages/hdom) -web app, demonstrating how to use derived views to switch the UI for different -application states / modules. +web app, demonstrating how to use derived views to switch the UI for +different application states / modules. -Note: The constrained nature of this next example doesn't really do justice to -the powerful nature of the approach. Also stylistically, in a larger app we'd -want to avoid the use of global variables (apart from `db`) as done here... +Note: The constrained nature of this next example doesn't really do +justice to the powerful nature of the approach. Also stylistically, in a +larger app we'd want to avoid the use of global variables (apart from +`db`) as done here... For a more advanced / realworld usage pattern, check the related [event handling @@ -342,9 +352,10 @@ start(document.body, app); ### Undo history -The `History` type can be used with & behaves like an Atom or Cursor, but -creates snapshots of the current state before applying the new state. By -default history has length of 100 steps, but this is configurable. +The `History` type can be used with & behaves like an Atom or Cursor, +but creates snapshots of the current state before applying the new +state. By default history has length of 100 steps, but this is +configurable. ```typescript db = new atom.History(new atom.Atom({a: 1})) diff --git a/packages/atom/package.json b/packages/atom/package.json index 9447a0b1d3..b6ffc91cef 100644 --- a/packages/atom/package.json +++ b/packages/atom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/atom", - "version": "1.2.1", + "version": "1.2.2", "description": "Mutable wrapper for immutable values", "main": "./index.js", "typings": "./index.d.ts", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/paths": "^1.1.2" + "@thi.ng/api": "^2.1.2", + "@thi.ng/paths": "^1.1.3" }, "keywords": [ "cursor", diff --git a/packages/bitstream/CHANGELOG.md b/packages/bitstream/CHANGELOG.md index 90c00dc5cd..54247a9d63 100644 --- a/packages/bitstream/CHANGELOG.md +++ b/packages/bitstream/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.4.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@0.4.1...@thi.ng/bitstream@0.4.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/bitstream + ## [0.4.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@0.4.0...@thi.ng/bitstream@0.4.1) (2018-03-28) diff --git a/packages/bitstream/README.md b/packages/bitstream/README.md index 5a8080d6b3..006f219b06 100644 --- a/packages/bitstream/README.md +++ b/packages/bitstream/README.md @@ -2,10 +2,13 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/bitstream.svg)](https://www.npmjs.com/package/@thi.ng/bitstream) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## Overview -ES6 iterator based, seekable read/write bit streams. -Written in TypeScript, distributed in ES6. +ES6 iterator based, seekable read/write bit streams. Written in +TypeScript, distributed in ES6. ## Installation @@ -21,20 +24,21 @@ import * as bits from "@thi.ng/bitstream"; ### BitOutputStream -`Uint8Array` backed, bitwise output stream abstraction (big endian order). -Individual word sizes can range between 1-52 bits (in practice) and are not -fixed (each word can have a different size). +`Uint8Array` backed, bitwise output stream abstraction (big endian +order). Individual word sizes can range between 1-52 bits (in practice) +and are not fixed (each word can have a different size). -The constructor accepts an optional initial `Uint8Array` buffer or buffer size -(in bytes) and an optional write start position (**in bits**). The buffer will -only be written to starting from the given bit position (even if in the middle -of a byte). Default buffer size is 16 bytes, but the array is resized (x2) -automatically each time capacity is reached. +The constructor accepts an optional initial `Uint8Array` buffer or +buffer size (in bytes) and an optional write start position (**in +bits**). The buffer will only be written to starting from the given bit +position (even if in the middle of a byte). Default buffer size is 16 +bytes, but the array is resized (x2) automatically each time capacity is +reached. -**Note**: The max. word size of 52 bits is not enforced by the library, but JS -can only represent integers (w/o loss of precision) up to `2^53-1`. If you're -willing to accept lossy precision for larger values, technically the max. -supported word width is 64 bits. +**Note**: The max. word size of 52 bits is not enforced by the library, +but JS can only represent integers (w/o loss of precision) up to +`2^53-1`. If you're willing to accept lossy precision for larger values, +technically the max. supported word width is 64 bits. ```js out = new bits.BitOutputStream(); @@ -53,26 +57,28 @@ out.bytes() // Uint8Array [ 185, 183, 178, 190, 235, 106, 170, 149, 85, 64 ] ``` -In addition to the generic `write()` method, there's also the slightly faster -`writeBit()` for writing single bits (the arg MUST be `0` or `1` only). +In addition to the generic `write()` method, there's also the slightly +faster `writeBit()` for writing single bits (the arg MUST be `0` or `1` +only). -Using `seek(pos)`, the write position can be repositioned within current limits -(does not attempt to resize backing buffer). +Using `seek(pos)`, the write position can be repositioned within current +limits (does not attempt to resize backing buffer). ### BitInputStream -`Uint8Array` backed bitwise input stream abstraction (big endian order) with -optional start position and read limit (both **in bits**). All readers are -independent instances, but if obtained from `BitOutputStream` will share the -same backing buffer as the writer. An auto-configured input stream can be -obtained via `output.reader()`. The class too implements the ES6 Iterator API -for **bitwise** read access (see [below](#bitinputstream)), as well as a -`read()` method to read bitfields. +`Uint8Array` backed bitwise input stream abstraction (big endian order) +with optional start position and read limit (both **in bits**). All +readers are independent instances, but if obtained from +`BitOutputStream` will share the same backing buffer as the writer. An +auto-configured input stream can be obtained via `output.reader()`. The +class too implements the ES6 Iterator API for **bitwise** read access +(see [below](#bitinputstream)), as well as a `read()` method to read +bitfields. **Note**: Attempting to read beyond capacity will throw an EOF error. -Using `input.seek(pos)`, the read position can be repositioned within stream -limits. +Using `input.seek(pos)`, the read position can be repositioned within +stream limits. ```js // get input from output stream... @@ -110,8 +116,8 @@ input.read(7) // 8 => low nibble of last byte ``` -In addition to the generic `read()` method, there's also the slightly faster -`readBit()` for reading single bits. +In addition to the generic `read()` method, there's also the slightly +faster `readBit()` for reading single bits. # Authors diff --git a/packages/bitstream/package.json b/packages/bitstream/package.json index 662c25bc20..5ea52d6fc0 100644 --- a/packages/bitstream/package.json +++ b/packages/bitstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bitstream", - "version": "0.4.1", + "version": "0.4.2", "description": "ES6 iterator based read/write bit streams & support for variable word widths", "main": "./index.js", "typings": "./index.d.ts", @@ -16,17 +16,15 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "dependencies": { - "@thi.ng/api": "^2.1.1" + "@thi.ng/api": "^2.1.2" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "keywords": [ "binary", diff --git a/packages/checks/CHANGELOG.md b/packages/checks/CHANGELOG.md index 2d84e62ae1..afbd6168c1 100644 --- a/packages/checks/CHANGELOG.md +++ b/packages/checks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/checks@1.3.0...@thi.ng/checks@1.3.1) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/checks + # [1.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/checks@1.2.1...@thi.ng/checks@1.3.0) (2018-03-08) diff --git a/packages/checks/README.md b/packages/checks/README.md index f29545b9fd..69fe8c63d8 100644 --- a/packages/checks/README.md +++ b/packages/checks/README.md @@ -1,6 +1,12 @@ # @thi.ng/checks -Single-function sub-modules for type, feature & value checks. +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + +This package provides ~50 single-function sub-modules for type, feature +& value checks. ## Installation diff --git a/packages/checks/package.json b/packages/checks/package.json index 0f9d762831..f14c641465 100644 --- a/packages/checks/package.json +++ b/packages/checks/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/checks", - "version": "1.3.0", + "version": "1.3.1", "description": "Single-function sub-modules for type, feature & value checks", "main": "./index.js", "typings": "./index.d.ts", @@ -16,14 +16,12 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "keywords": [ "check", diff --git a/packages/csp/CHANGELOG.md b/packages/csp/CHANGELOG.md index 0c6c7a1555..92e5057afe 100644 --- a/packages/csp/CHANGELOG.md +++ b/packages/csp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.3.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.22...@thi.ng/csp@0.3.23) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/csp + ## [0.3.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.21...@thi.ng/csp@0.3.22) (2018-03-28) diff --git a/packages/csp/README.md b/packages/csp/README.md index 2922e64816..4a1c190cf6 100644 --- a/packages/csp/README.md +++ b/packages/csp/README.md @@ -2,9 +2,16 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/csp.svg)](https://www.npmjs.com/package/@thi.ng/csp) -Lightweight ES6-promise based CSP implementation written in TypeScript (18KB minified, full lib). +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. -- `Channel` with/without buffering and/or [transducers](https://github.com/thi-ng/transducers) +## About + +Lightweight ES6-promise based CSP implementation written in TypeScript +(18KB minified, full lib). + +- `Channel` with/without buffering and/or + [transducers](https://github.com/thi-ng/umbrella/blob/master/packages/transducers) - optional channel IDs - choice of buffer behaviors (fixed, sliding, dropping) - channel selection diff --git a/packages/csp/package.json b/packages/csp/package.json index 40e2b4e02d..c79154eadb 100644 --- a/packages/csp/package.json +++ b/packages/csp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/csp", - "version": "0.3.22", + "version": "0.3.23", "description": "ES6 promise based CSP implementation", "main": "./index.js", "typings": "./index.d.ts", @@ -20,18 +20,16 @@ "testnode": "tsc -p test && node build/test/node.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/dcons": "^0.1.16", - "@thi.ng/transducers": "^1.7.2" + "@thi.ng/dcons": "^0.1.17", + "@thi.ng/transducers": "^1.7.3" }, "keywords": [ "async", diff --git a/packages/dcons/CHANGELOG.md b/packages/dcons/CHANGELOG.md index 676617eda8..b1f80b3efc 100644 --- a/packages/dcons/CHANGELOG.md +++ b/packages/dcons/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@0.1.16...@thi.ng/dcons@0.1.17) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/dcons + ## [0.1.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@0.1.15...@thi.ng/dcons@0.1.16) (2018-03-28) diff --git a/packages/dcons/README.md b/packages/dcons/README.md index bdbc0ab2fa..fc2231ece8 100644 --- a/packages/dcons/README.md +++ b/packages/dcons/README.md @@ -2,6 +2,11 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/dcons.svg)](https://www.npmjs.com/package/@thi.ng/dcons) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + Comprehensive doubly linked list structure with: - ES6 iterator support diff --git a/packages/dcons/package.json b/packages/dcons/package.json index b9540c9f49..01242ce091 100644 --- a/packages/dcons/package.json +++ b/packages/dcons/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dcons", - "version": "0.1.16", + "version": "0.1.17", "description": "Comprehensive doubly linked list structure w/ iterator support", "main": "./index.js", "typings": "./index.d.ts", @@ -16,17 +16,15 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1" + "@thi.ng/api": "^2.1.2" }, "keywords": [ "datastructure", diff --git a/packages/diff/CHANGELOG.md b/packages/diff/CHANGELOG.md index 3c77fb1472..7547bcb489 100644 --- a/packages/diff/CHANGELOG.md +++ b/packages/diff/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.0.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/diff@1.0.3...@thi.ng/diff@1.0.4) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/diff + ## [1.0.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/diff@1.0.2...@thi.ng/diff@1.0.3) (2018-03-28) diff --git a/packages/diff/README.md b/packages/diff/README.md index 1f5a9de4e5..24e5a81f3e 100644 --- a/packages/diff/README.md +++ b/packages/diff/README.md @@ -2,9 +2,12 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/diff.svg)](https://www.npmjs.com/package/@thi.ng/diff) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About -TODO... +Array (sequential) & object (associative) Diff implementations. ## Installation diff --git a/packages/diff/package.json b/packages/diff/package.json index f0f7fcf2a5..3d7b8bd0a8 100644 --- a/packages/diff/package.json +++ b/packages/diff/package.json @@ -1,7 +1,7 @@ { "name": "@thi.ng/diff", - "version": "1.0.3", - "description": "TODO", + "version": "1.0.4", + "description": "Array & object Diff", "main": "./index.js", "typings": "./index.d.ts", "repository": "https://github.com/thi-ng/umbrella", @@ -15,16 +15,14 @@ "test": "rm -rf build && tsc -p test && mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1" + "@thi.ng/api": "^2.1.2" }, "keywords": [ "array", diff --git a/packages/hdom-components/CHANGELOG.md b/packages/hdom-components/CHANGELOG.md index 8c4efc4f8e..6b9fcbec9d 100644 --- a/packages/hdom-components/CHANGELOG.md +++ b/packages/hdom-components/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@1.1.0...@thi.ng/hdom-components@1.1.1) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/hdom-components + + +# [1.1.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@1.0.9...@thi.ng/hdom-components@1.1.0) (2018-03-29) + + +### Features + +* **hdom-components:** add svg line() ([6cbacec](https://github.com/thi-ng/umbrella/commit/6cbacec)) + + + + ## [1.0.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@1.0.8...@thi.ng/hdom-components@1.0.9) (2018-03-28) diff --git a/packages/hdom-components/README.md b/packages/hdom-components/README.md index 39513a287a..098dd3b01a 100644 --- a/packages/hdom-components/README.md +++ b/packages/hdom-components/README.md @@ -2,17 +2,23 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/hdom-components.svg)](https://www.npmjs.com/package/@thi.ng/hdom-components) -**As of 2018-03-03 this package is now called @thi.ng/hdom-components, formerly @thi.ng/hiccup-dom-components** +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +**As of 2018-03-03 this package is now called @thi.ng/hdom-components, +formerly @thi.ng/hiccup-dom-components** ## About -A growing collection of unstyled, re-usable & customizable components for use -with +A growing collection of unstyled, re-usable & customizable components +for use with [@thi.ng/hdom](https://github.com/thi-ng/umbrella/tree/master/packages/hdom) & [@thi.ng/hiccup](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup). -**Status:** Pre-alpha +## Status + +ALPHA ## Installation diff --git a/packages/hdom-components/package.json b/packages/hdom-components/package.json index 55cc09f3fa..388ad3e646 100644 --- a/packages/hdom-components/package.json +++ b/packages/hdom-components/package.json @@ -1,7 +1,7 @@ { "name": "@thi.ng/hdom-components", - "version": "1.0.9", - "description": "TODO", + "version": "1.1.1", + "description": "Raw, skinnable UI & SVG components for @thi.ng/hdom", "main": "./index.js", "typings": "./index.d.ts", "repository": "https://github.com/thi-ng/umbrella", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", "mocha": "^5.0.1", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/checks": "^1.3.0", - "@thi.ng/hiccup": "^1.3.1" + "@thi.ng/checks": "^1.3.1", + "@thi.ng/hiccup": "^1.3.2" }, "keywords": [ "ES6", diff --git a/packages/hdom-components/src/svg.ts b/packages/hdom-components/src/svg.ts index 5a193b133e..a0ee8ca8c2 100644 --- a/packages/hdom-components/src/svg.ts +++ b/packages/hdom-components/src/svg.ts @@ -43,6 +43,17 @@ export const rect = (p: ArrayLike, width = 1, height = 1, attr?) => }, attr) ]; +export const line = (a: ArrayLike, b: ArrayLike, attr?) => + [ + "line", + Object.assign({ + x1: ff(a[0]), + y1: ff(a[1]), + x2: ff(b[0]), + y2: ff(b[1]), + }, attr) + ]; + export const polyline = (points: ArrayLike[], attr?) => [ "polyline", diff --git a/packages/hdom/CHANGELOG.md b/packages/hdom/CHANGELOG.md index ceab8e750b..4cf89950ed 100644 --- a/packages/hdom/CHANGELOG.md +++ b/packages/hdom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.3.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@2.3.1...@thi.ng/hdom@2.3.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/hdom + ## [2.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@2.3.0...@thi.ng/hdom@2.3.1) (2018-03-28) diff --git a/packages/hdom/README.md b/packages/hdom/README.md index f41d41b59b..6c2d67b19a 100644 --- a/packages/hdom/README.md +++ b/packages/hdom/README.md @@ -2,25 +2,33 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/hdom.svg)](https://www.npmjs.com/package/@thi.ng/hdom) -**As of 2018-03-03 this package is now called @thi.ng/hdom, formerly @thi.ng/hiccup-dom** +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +**As of 2018-03-03 this package is now called @thi.ng/hdom, formerly +@thi.ng/hiccup-dom** ## About -Lightweight reactive DOM components using only vanilla JS data structures -(arrays, objects, closures, iterators), based on +Lightweight reactive DOM components using only vanilla JS data +structures (arrays, objects, closures, iterators), based on [@thi.ng/hiccup](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup). Benefits: -- Use the full expressiveness of ES6/TypeScript to define, annotate & document components +- Use the full expressiveness of ES6/TypeScript to define, annotate & + document components - Clean, functional component composition and reuse - No pre-processing / pre-compilation steps - No string parsing / interpolation steps - Less verbose than HTML, resulting in smaller file sizes -- Static components can be distributed as JSON (or [dynamically compose components, based on JSON data](https://github.com/thi-ng/umbrella/tree/master/examples/json-components)) +- Static components can be distributed as JSON (or [dynamically compose + components, based on JSON + data](https://github.com/thi-ng/umbrella/tree/master/examples/json-components)) - Supports SVG, arbitrary elements, attributes, events - CSS conversion from JS objects -- Suitable for server side rendering (by passing the same data structure to @thi.ng/hiccup's `serialize()`) +- Suitable for server side rendering (by passing the same data structure + to @thi.ng/hiccup's `serialize()`) - Fairly fast (see benchmark example below) - Only ~10KB minified @@ -59,32 +67,36 @@ console.log(hiccup.serialize(app())); No template engine & no precompilation steps needed, just use the full expressiveness of ES6/TypeScript to define your DOM tree. The additional -benefit of using TypeScript is that your UI components can become strongly -typed, since they're just normal functions, can use generics, overrides, -varargs etc. +benefit of using TypeScript is that your UI components can become +strongly typed, since they're just normal functions, can use generics, +overrides, varargs etc. The actual DOM update is based on the minimal edit set of the recursive difference between the old and new DOM trees (both nested JS arrays). -Components can be defined as static arrays, closures or objects with life cycle -hooks (init, render, release). +Components can be defined as static arrays, closures or objects with +life cycle hooks (init, render, release). ![hdom dataflow](../../assets/hdom-dataflow.svg) The syntax is inspired by Clojure's [Hiccup](https://github.com/weavejester/hiccup) and -[Reagent](http://reagent-project.github.io/) projects, however the latter is a -wrapper around React, whereas this library is standalone, more lowlevel & -less opinionated. +[Reagent](http://reagent-project.github.io/) projects, however the +latter is a wrapper around React, whereas this library is standalone, +more lowlevel & less opinionated. If you're interested in using this, please also consider the -[@thi.ng/atom](https://github.com/thi-ng/umbrella/tree/master/packages/atom) and +[@thi.ng/atom](https://github.com/thi-ng/umbrella/tree/master/packages/atom) +and [@thi.ng/rstream](https://github.com/thi-ng/umbrella/tree/master/packages/rstream) packages to integrate app state handling, event streams & reactive value subscriptions. More examples are forthcoming... ## Status -This project is currently still in BETA. The overall "API" is stable, but there's still further work planned on optimization and generalization beyond the standard browser DOM use cases. Furthermore, the project has been used for several projects in production since 2016. +This project is currently still in BETA. The overall "API" is stable, +but there's still further work planned on optimization and +generalization beyond the standard browser DOM use cases. Furthermore, +the project has been used for several projects in production since 2016. ## Installation @@ -94,7 +106,8 @@ yarn add @thi.ng/hdom **New since 2018-03-15: You can now create a preconfigured app skeleton using @thi.ng/atom, @thi.ng/hdom & @thi.ng/router using the -[create-hdom-app](https://github.com/thi-ng/create-hdom-app) project generator:** +[create-hdom-app](https://github.com/thi-ng/create-hdom-app) project +generator:** ``` yarn create hdom-app my-app @@ -106,19 +119,22 @@ yarn start ## Usage examples -Even though the overall approach should be obvious from the code examples -below, it's recommended to first study the +Even though the overall approach should be obvious from the code +examples below, it's recommended to first study the [@thi.ng/hiccup](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup) -reference. It's also important to point out, that this project **currently** -has some differences as to how some attribute and iterables are treated and/or -are supported in general. This project also has additional features (e.g. life -cycle hooks), which aren't needed for the static serialization use cases of -hiccup. Both experiments started in early 2016, but have somewhat evolved -independently and require some conceptional synchronization. +reference. It's also important to point out, that this project +**currently** has some differences as to how some attribute and +iterables are treated and/or are supported in general. This project also +has additional features (e.g. life cycle hooks), which aren't needed for +the static serialization use cases of hiccup. Both experiments started +in early 2016, but have somewhat evolved independently and require some +conceptional synchronization. ### Dataflow graph SVG components -This is a preview of the upcoming [@thi.ng/estuary](https://github.com/thi-ng/umbrella/tree/feature/estuary/packages/estuary) package: +This is a preview of the upcoming +[@thi.ng/estuary](https://github.com/thi-ng/umbrella/tree/feature/estuary/packages/estuary) +package: [Source](https://github.com/thi-ng/umbrella/tree/feature/estuary/packages/estuary) | [Live demo](http://demo.thi.ng/umbrella/estuary/) @@ -189,16 +205,18 @@ TODO example forthcoming... ### Benchmark -A stress test benchmark is here: [/examples/benchmark](https://github.com/thi-ng/umbrella/tree/master/examples/hdom-benchmark) +A stress test benchmark is here: +[/examples/benchmark](https://github.com/thi-ng/umbrella/tree/master/examples/hdom-benchmark) [Live demo here](http://demo.thi.ng/umbrella/hdom-benchmark/) Based on [user feedback collected via -Twitter](https://twitter.com/toxi/status/959246871339454464), performance -should be more than acceptable for even quite demanding UIs. In the 192/256 -cells configurations this stress test causes approx. 600/800 DOM every single -frame, something very unlikely for a typical web app. In Chrome 64 on a MBP2016 -this still runs at a pretty stable 30fps (50 frame SMA). +Twitter](https://twitter.com/toxi/status/959246871339454464), +performance should be more than acceptable for even quite demanding UIs. +In the 192/256 cells configurations this stress test causes approx. +600/800 DOM every single frame, something very unlikely for a typical +web app. In Chrome 64 on a MBP2016 this still runs at a pretty stable +30fps (50 frame SMA). ## Authors diff --git a/packages/hdom/package.json b/packages/hdom/package.json index abccbf98b0..fd997853c4 100644 --- a/packages/hdom/package.json +++ b/packages/hdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom", - "version": "2.3.1", + "version": "2.3.2", "description": "Lightweight vanilla ES6 UI component & virtual DOM system", "main": "./index.js", "typings": "./index.d.ts", @@ -16,21 +16,19 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@thi.ng/atom": "^1.2.1", - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@thi.ng/atom": "^1.2.2", + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/diff": "^1.0.3", - "@thi.ng/hiccup": "^1.3.1", - "@thi.ng/iterators": "^4.1.1" + "@thi.ng/api": "^2.1.2", + "@thi.ng/diff": "^1.0.4", + "@thi.ng/hiccup": "^1.3.2", + "@thi.ng/iterators": "^4.1.2" }, "keywords": [ "browser", diff --git a/packages/hiccup-css/CHANGELOG.md b/packages/hiccup-css/CHANGELOG.md index d280583d45..4d323cfae3 100644 --- a/packages/hiccup-css/CHANGELOG.md +++ b/packages/hiccup-css/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.1.6...@thi.ng/hiccup-css@0.1.7) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/hiccup-css + ## [0.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.1.5...@thi.ng/hiccup-css@0.1.6) (2018-03-28) diff --git a/packages/hiccup-css/README.md b/packages/hiccup-css/README.md index 857887b37f..1a0074ef75 100644 --- a/packages/hiccup-css/README.md +++ b/packages/hiccup-css/README.md @@ -2,12 +2,15 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/hiccup-css.svg)](https://www.npmjs.com/package/@thi.ng/hiccup-css) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About Following a similar pattern as the [@thi.ng/hiccup](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup) -package, this library generates CSS from plain nested arrays / data structures, -functions, iterators. +package, this library generates CSS from plain nested arrays / data +structures, functions, iterators. ## Features @@ -15,7 +18,8 @@ functions, iterators. - Uses JS object to define selector properties - Multiple objects per scope are combined automatically - Supports nested selectors and computes their cartesian products -- Configurable auto-prefixed properties & vendor prefixes (disabled by default) +- Configurable auto-prefixed properties & vendor prefixes (disabled by + default) - Automatically consumes embedded iterators - Supports embeded functions, either: - to define entire selector branches/scopes @@ -38,7 +42,8 @@ functions, iterators. - CSS framework & theme generators - Dynamic CSS generation for components -The overall approach of using S-expressions was inspired by these Clojure projects: +The overall approach of using S-expressions was inspired by these +Clojure projects: - [hiccup](https://github.com/weavejester/hiccup) - [garden](https://github.com/noprompt/garden) @@ -58,15 +63,15 @@ import * as css from "@thi.ng/hiccup-css"; ### `css(rules: any, opts?: CSSOpts)` This is the main function exposed by this module. It accepts a JS data -structure (array, object, iterator or function) and returns a CSS string. The -optional `opts` arg is used to control formatting, auto-prefixing and other -conversion options. See +structure (array, object, iterator or function) and returns a CSS +string. The optional `opts` arg is used to control formatting, +auto-prefixing and other conversion options. See [api.ts](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup-css/src/api.ts) for reference. -By default the generated CSS uses the `css.COMPACT` format, causing "minimized" -outputs. Pretty printing is supported via the `css.PRETTY` format preset, see -examples further below. +By default the generated CSS uses the `css.COMPACT` format, causing +"minimized" outputs. Pretty printing is supported via the `css.PRETTY` +format preset, see examples further below. ### Property formatting only @@ -204,10 +209,10 @@ css.css( ### Nested selectors -Selector nesting can be easily done via array nesting. Each new nesting level -defines a child scope of the current selector. The actual CSS selectors are -computed using the cartesian product of any selectors in the current scope and -their previously defined parents: +Selector nesting can be easily done via array nesting. Each new nesting +level defines a child scope of the current selector. The actual CSS +selectors are computed using the cartesian product of any selectors in +the current scope and their previously defined parents: ```typescript css.css( @@ -245,8 +250,8 @@ header, footer { ### Auto-prefixed properties -(Currently, only prefixed properties are supported. Auto-prefixing based on -property values is planned, but currently low priority.) +(Currently, only prefixed properties are supported. Auto-prefixing based +on property values is planned, but currently low priority.) ```typescript css.css( @@ -268,11 +273,11 @@ div { ### Media queries Media queries (optionally nested) are supported via the `at_media()` and -`at_supports()` functions, both taking an object (or string) of conditionals -and a body which will be based to `css()`. +`at_supports()` functions, both taking an object (or string) of +conditionals and a body which will be based to `css()`. -The key-value pairs of the conditional object are interpreted as follows and -ALWAYS combined using `and`: +The key-value pairs of the conditional object are interpreted as follows +and ALWAYS combined using `and`: | Key/Value pair | Result | | --- | --- | @@ -380,16 +385,17 @@ css.css( ### General function handling -**Functions are handled differently based on their position in the rule tree.** -Also see the section on [Quoted functions](#quoted-functions) below... +**Functions are handled differently based on their position in the rule +tree.** Also see the section on [Quoted functions](#quoted-functions) +below... #### Functions in scope head position -If a function is given as arg to `css()` or is in the head position (first -element) of a rule scope, the function is expected to produce output directly -and is called with an empty result accumulator array and the `CSSOpts` object -passed to `css()`. This form is mainly used by the various `at_*()` functions -provided (e.g. `at_media()` example above). +If a function is given as arg to `css()` or is in the head position +(first element) of a rule scope, the function is expected to produce +output directly and is called with an empty result accumulator array and +the `CSSOpts` object passed to `css()`. This form is mainly used by the +various `at_*()` functions provided (e.g. `at_media()` example above). ```typescript css.css(at_import("foo.css", "screen")); @@ -411,25 +417,27 @@ css.css([ #### Functions in other positions -If a function is located anywhere else in a rule scope array (2nd index or -later), it will be called without arguments and the return value used in its -place. Any returned functions will be eval'd recursively in the same manner. +If a function is located anywhere else in a rule scope array (2nd index +or later), it will be called without arguments and the return value used +in its place. Any returned functions will be eval'd recursively in the +same manner. ### Quoted functions -One of this project's use cases is to support stylesheets defined as JSON. -Since functions cannot be used there, an optional mechanism to map strings to -functions is provided: +One of this project's use cases is to support stylesheets defined as +JSON. Since functions cannot be used there, an optional mechanism to map +strings to functions is provided: ``` ["function-name", ...args] ``` -The quoted function name is looked up in a dictionary and if found, called with -all remaining elements in the same array. I.e. `["@import", "foo.css"]` will be -the same result as `at_import("foo.css")`. +The quoted function name is looked up in a dictionary and if found, +called with all remaining elements in the same array. I.e. `["@import", +"foo.css"]` will be the same result as `at_import("foo.css")`. -**IMPORTANT:** Quoted functions are only supported in the head position of a scope. +**IMPORTANT:** Quoted functions are only supported in the head position +of a scope. ```typescript const styles = [ diff --git a/packages/hiccup-css/package.json b/packages/hiccup-css/package.json index 3ae4121683..933f5dcd3f 100644 --- a/packages/hiccup-css/package.json +++ b/packages/hiccup-css/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-css", - "version": "0.1.6", + "version": "0.1.7", "description": "CSS from nested JS data structures", "main": "./index.js", "typings": "./index.d.ts", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/transducers": "^1.7.2" + "@thi.ng/api": "^2.1.2", + "@thi.ng/transducers": "^1.7.3" }, "keywords": [ "clojure", diff --git a/packages/hiccup/CHANGELOG.md b/packages/hiccup/CHANGELOG.md index 6297f33528..83517e3f06 100644 --- a/packages/hiccup/CHANGELOG.md +++ b/packages/hiccup/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.3.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@1.3.1...@thi.ng/hiccup@1.3.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/hiccup + ## [1.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@1.3.0...@thi.ng/hiccup@1.3.1) (2018-03-28) diff --git a/packages/hiccup/README.md b/packages/hiccup/README.md index bf24b31b71..b6bd8cdd6a 100644 --- a/packages/hiccup/README.md +++ b/packages/hiccup/README.md @@ -2,19 +2,23 @@ [![npm](https://img.shields.io/npm/v/@thi.ng/hiccup.svg)](https://www.npmjs.com/package/@thi.ng/hiccup) -## Overview +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About Lightweight HTML/SVG/XML serialization of plain, nested data structures, iterables & closures. Inspired by [Hiccup](https://github.com/weavejester/hiccup) and [Reagent](http://reagent-project.github.io/) for Clojure/ClojureScript. -Forget all the custom toy DSLs for templating and instead use the full power of -ES6 to directly define fully data-driven, purely functional and easily -*composable* components for static serialization to HTML & friends. +Forget all the custom toy DSLs for templating and instead use the full +power of ES6 to directly define fully data-driven, purely functional and +easily *composable* components for static serialization to HTML & +friends. -This library is suitable for static website generation, server side rendering -etc. For interactive use cases, please see companion package +This library is suitable for static website generation, server side +rendering etc. For interactive use cases, please see companion package [@thi.ng/hdom](https://github.com/thi-ng/umbrella/tree/master/packages/hdom). ### Features @@ -32,22 +36,24 @@ serialization time. Examples below... ### No special sauce needed (or wanted) -Using only vanilla language features simplifies the development, composability, -reusability and testing of components. Furthermore, no custom template parser -is required and you're only restricted by the expressiveness of the language / -environment, not by your template engine. +Using only vanilla language features simplifies the development, +composability, reusability and testing of components. Furthermore, no +custom template parser is required and you're only restricted by the +expressiveness of the language / environment, not by your template +engine. -Components can be defined as simple functions returning arrays or loaded via JSON/JSONP. +Components can be defined as simple functions returning arrays or loaded +via JSON/JSONP. ### What is Hiccup? -For many years, [Hiccup](https://github.com/weavejester/hiccup) has been the -de-facto standard to encode HTML/XML datastructures in Clojure. This library -brings & extends this convention into ES6. A valid Hiccup tree is any flat -(though, usually nested) array of the following possible structures. Any -functions embedded in the tree are expected to return values of the same -structure. Please see [examples](#examples) & [API](#api) further -explanations... +For many years, [Hiccup](https://github.com/weavejester/hiccup) has been +the de-facto standard to encode HTML/XML datastructures in Clojure. This +library brings & extends this convention into ES6. A valid Hiccup tree +is any flat (though, usually nested) array of the following possible +structures. Any functions embedded in the tree are expected to return +values of the same structure. Please see [examples](#examples) & +[API](#api) further explanations... ```js ["tag", ...] @@ -88,12 +94,13 @@ h.serialize( ### Attributes -Arbitrary attributes can be supplied via an optional 2nd array element. `style` -attributes can be given as CSS string or as an object. Boolean attributes are -serialized in HTML5 syntax (i.e. present or not, but no values). +Arbitrary attributes can be supplied via an optional 2nd array element. +`style` attributes can be given as CSS string or as an object. Boolean +attributes are serialized in HTML5 syntax (i.e. present or not, but no +values). -If the 2nd array element is not a plain object, it's treated as normal child -node (see previous example). +If the 2nd array element is not a plain object, it's treated as normal +child node (see previous example). ```js h.serialize( @@ -113,12 +120,13 @@ h.serialize(
WARNING
``` -If an attribute specifies a function as value, the function is called with the -entire attribute object as argument. This allows for the dynamic generation of -attribute values, based on existing ones. The result MUST be a string. +If an attribute specifies a function as value, the function is called +with the entire attribute object as argument. This allows for the +dynamic generation of attribute values, based on existing ones. The +result MUST be a string. -**BREAKING CHANGE since 1.0.0:** Function values for event attributes (any -attrib name starting with "on") WILL BE OMITTED from output. +**BREAKING CHANGE since 1.0.0:** Function values for event attributes +(any attrib name starting with "on") WILL BE OMITTED from output. ```js ["div#foo", { bar: (attribs) => attribs.id + "-bar" }] @@ -313,12 +321,12 @@ The library exposes these two functions: ### serialize(tree, escape = false): string -Recursively normalizes and then serializes given tree as HTML/SVG/XML string. -If `escape` is true, HTML entity replacement is applied to all element body & -attribute values. +Recursively normalizes and then serializes given tree as HTML/SVG/XML +string. If `escape` is true, HTML entity replacement is applied to all +element body & attribute values. -Any embedded component functions are expanded with their results. -A normalized element has one of these shapes: +Any embedded component functions are expanded with their results. A +normalized element has one of these shapes: ```js // no body @@ -337,22 +345,23 @@ Tags can be defined in "Zencoding" convention, i.e. ["div#foo.bar.baz", "hi"] =>
hi
``` -**Note:** It's an error to specify IDs and/or classes in Zencoding convention -**and** in a supplied attribute object. However, either of these are valid: +**Note:** It's an error to specify IDs and/or classes in Zencoding +convention **and** in a supplied attribute object. However, either of +these are valid: ```js ["div#foo", { class: "bar" }] //
["div.foo", { id: "bar" }] //
``` -The presence of the attributes object is optional. -If the 2nd array index is **not** a plain object, it'll be treated -as normal child of the current tree node. +The presence of the attributes object is optional. If the 2nd array +index is **not** a plain object, it'll be treated as normal child of the +current tree node. -Any `null` or `undefined` values (other than in head position) -will be removed, unless a function is in head position. -In this case all other elements of that array are passed as -arguments when that function is called. +Any `null` or `undefined` values (other than in head position) will be +removed, unless a function is in head position. In this case all other +elements of that array are passed as arguments when that function is +called. ```js const myfunc = (a, b, c) => ["div", {id: a, class: c}, b]; @@ -368,16 +377,16 @@ Will result in: ``` The function's return value MUST be a valid new tree (or `undefined`). -Functions located in other positions are called without args -and can return any (serializable) value (i.e. new trees, strings, -numbers, iterables or any type with a suitable `.toString()` -implementation). +Functions located in other positions are called without args and can +return any (serializable) value (i.e. new trees, strings, numbers, +iterables or any type with a suitable `.toString()` implementation). ### escape(str: string): string -Helper function. Applies HTML entity replacement on given string. -If `serialize()` is called with `true` as 2nd argument, entity encoding -is done automatically ([list of entities considered](https://github.com/thi-ng/hiccup/blob/master/src/index.ts#L14)). +Helper function. Applies HTML entity replacement on given string. If +`serialize()` is called with `true` as 2nd argument, entity encoding is +done automatically ([list of entities +considered](https://github.com/thi-ng/umbrella/blob/master/packages/hiccup/src/index.ts#L14)). # Authors - Karsten Schmidt diff --git a/packages/hiccup/package.json b/packages/hiccup/package.json index 1c3c137005..4e675b3d73 100644 --- a/packages/hiccup/package.json +++ b/packages/hiccup/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup", - "version": "1.3.1", + "version": "1.3.2", "description": "HTML/SVG/XML serialization of nested data structures, iterables & closures", "main": "./index.js", "typings": "./index.d.ts", @@ -16,19 +16,17 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@thi.ng/atom": "^1.2.1", - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@thi.ng/atom": "^1.2.2", + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/checks": "^1.3.0" + "@thi.ng/api": "^2.1.2", + "@thi.ng/checks": "^1.3.1" }, "keywords": [ "clojure", diff --git a/packages/interceptors/CHANGELOG.md b/packages/interceptors/CHANGELOG.md index 2b748a3b43..deb8b1417e 100644 --- a/packages/interceptors/CHANGELOG.md +++ b/packages/interceptors/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@1.1.1...@thi.ng/interceptors@1.1.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/interceptors + ## [1.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@1.1.0...@thi.ng/interceptors@1.1.1) (2018-03-28) diff --git a/packages/interceptors/README.md b/packages/interceptors/README.md index 00866d3ebd..35303110fe 100644 --- a/packages/interceptors/README.md +++ b/packages/interceptors/README.md @@ -2,6 +2,9 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/interceptors.svg)](https://www.npmjs.com/package/@thi.ng/interceptors) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About Interceptor based event, side effect & immutable state handling. @@ -20,7 +23,8 @@ import * as interceptors from "@thi.ng/interceptors"; ### Event bus, interceptors, side effects -Description forthcoming. Please check the detailed commented source code and examples for now: +Description forthcoming. Please check the detailed commented source code +and examples for now: - [/src/event-bus.ts](https://github.com/thi-ng/umbrella/tree/master/packages/interceptors/src/event-bus.ts) diff --git a/packages/interceptors/package.json b/packages/interceptors/package.json index df6ab7de43..c0e21bd2b0 100644 --- a/packages/interceptors/package.json +++ b/packages/interceptors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/interceptors", - "version": "1.1.1", + "version": "1.1.2", "description": "Interceptor based event bus, side effect & immutable state handling", "main": "./index.js", "typings": "./index.d.ts", @@ -16,19 +16,17 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/atom": "^1.2.1", - "@thi.ng/paths": "^1.1.2" + "@thi.ng/api": "^2.1.2", + "@thi.ng/atom": "^1.2.2", + "@thi.ng/paths": "^1.1.3" }, "keywords": [ "ES6", diff --git a/packages/iterators/CHANGELOG.md b/packages/iterators/CHANGELOG.md index e9efa82fa1..ceca16f87e 100644 --- a/packages/iterators/CHANGELOG.md +++ b/packages/iterators/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [4.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.1...@thi.ng/iterators@4.1.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/iterators + ## [4.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.0...@thi.ng/iterators@4.1.1) (2018-03-28) diff --git a/packages/iterators/README.md b/packages/iterators/README.md index 817e31721d..6bd7c56c4f 100644 --- a/packages/iterators/README.md +++ b/packages/iterators/README.md @@ -2,14 +2,16 @@ ![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/iterators.svg) -## Overview +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. -Collection of ~50 composable, iterator-centric data processing functions, -largely implemented as ES6 iterators / generators, inspired by -[clojure.core](http://clojure.github.io/clojure/clojure.core-api.html) API. -Written in TypeScript. +## About -See [changelog](https://github.com/thi-ng/iterators/blob/master/CHANGELOG.md) for recent updates. +Collection of ~50 composable, iterator-centric data processing +functions, largely implemented as ES6 iterators / generators, inspired +by +[clojure.core](http://clojure.github.io/clojure/clojure.core-api.html) +API. Written in TypeScript. ## Installation @@ -17,9 +19,9 @@ See [changelog](https://github.com/thi-ng/iterators/blob/master/CHANGELOG.md) fo yarn add @thi.ng/iterators ``` -All functions are defined as sub-modules and re-exported to allow the full -library to be imported if desired. Sub-module file names use *Kebab case*, -whereas function names are in *Camel case*. +All functions are defined as sub-modules and re-exported to allow the +full library to be imported if desired. Sub-module file names use *Kebab +case*, whereas function names are in *Camel case*. ```js // import all @@ -53,12 +55,12 @@ Yields iterator of all but the last value of input. ### `cached(input: Iterable) => CachedIterableIterator` -Consumes and **lazily** caches values of a **finite** input and returns a -no-arg function, which when called return new iterator. These iterator -instances always start from the beginning of the cache and allows for separate -states and sharing of cached results among arbitrary number of iterators. The -original input is only consumed when attempting to read beyond current cache -boundary. +Consumes and **lazily** caches values of a **finite** input and returns +a no-arg function, which when called return new iterator. These iterator +instances always start from the beginning of the cache and allows for +separate states and sharing of cached results among arbitrary number of +iterators. The original input is only consumed when attempting to read +beyond current cache boundary. ```js c = ti.cached(ti.range(10)); @@ -99,9 +101,9 @@ ti.zip( ### `concat(...inputs: Iterable[]) => IterableIterator` -Produces iterator yielding **lazy** concatenation of given iterables. For -practical purposes none but the last input should be infinite. Any `null` or -`undefined` input arguments are skipped in the output. +Produces iterator yielding **lazy** concatenation of given iterables. +For practical purposes none but the last input should be infinite. Any +`null` or `undefined` input arguments are skipped in the output. ```js [... ti.concat([1, 2, 3], [10, 20, 30], [100, 200, 300])] @@ -113,8 +115,8 @@ practical purposes none but the last input should be infinite. Any `null` or ### `constantly(x: T) => (...args: any[]) => T` -Helper function returning a new fn which takes any number of args and always -returns `x`. +Helper function returning a new fn which takes any number of args and +always returns `x`. ```js // define an iterable of unknown size @@ -150,8 +152,9 @@ side effects) and optionally only up to the given number of steps. ### `cycle(input: Iterable) => IterableIterator` -Produces iterator which **lazily** caches & **infinitely** repeats sequence of input. -**Important:** Input MUST be finite, use `take` to truncate input or output if necessary. +Produces iterator which **lazily** caches & **infinitely** repeats +sequence of input. **Important:** Input MUST be finite, use `take` to +truncate input or output if necessary. ```js [... ti.take(10, ti.cycle(ti.range(3)))] @@ -183,8 +186,8 @@ var eq = (a, b) => a.a === b.a; ### `dense(input: Iterable) => IterableIterator` -Yields iterator of all non-`null` and non-`undefined` values of input (e.g. a -sparse array). +Yields iterator of all non-`null` and non-`undefined` values of input +(e.g. a sparse array). ```js var a = [] @@ -222,9 +225,9 @@ Produces iterator which drops every `n`th item from input. ### `dropWhile(pred: (x: T) => boolean, input: Iterable) => IterableIterator` -Consumes input and calls `pred` for each item. -Discards all items whilst `pred` returns `true`, then returns remaining -(possibly exhausted) iterator. +Consumes input and calls `pred` for each item. Discards all items whilst +`pred` returns `true`, then returns remaining (possibly exhausted) +iterator. ```js [... ti.dropWhile((x) => x < 5, ti.range(10))] @@ -233,11 +236,12 @@ Discards all items whilst `pred` returns `true`, then returns remaining ### `every(pred: (x: T) => boolean, input: Iterable) => boolean` -Consumes input and calls `pred` for each item. When `pred` returns not `true`, -process stops and returns `false` itself. When all items pass the predicate, -the function returns `true`. +Consumes input and calls `pred` for each item. When `pred` returns not +`true`, process stops and returns `false` itself. When all items pass +the predicate, the function returns `true`. -If input is empty/exhausted prior to execution, `every` will return `false`. +If input is empty/exhausted prior to execution, `every` will return +`false`. ```js var nums = ti.iterator([2, 4, 6, 8, 10]); @@ -259,8 +263,8 @@ ti.every((x) => true, []) ### `filter(pred: (x: T) => boolean, input: Iterable) => IterableIterator` -Consumes input and calls `pred` for each item. -Yields iterator of items for which `pred` returned `true`. +Consumes input and calls `pred` for each item. Yields iterator of items +for which `pred` returned `true`. ```js var multOf3 = (x) => (x % 3) === 0; @@ -270,9 +274,10 @@ var multOf3 = (x) => (x % 3) === 0; ### `flatten(input: Iterable, flatObjects = true) => IterableIterator` -Produces iterator which recursively flattens input (using `flattenWith`). -**Important:** Recursion only applies to iterable types (excluding strings) and -objects (enabled by default, using `objectIterator`, see below). +Produces iterator which recursively flattens input (using +`flattenWith`). **Important:** Recursion only applies to iterable types +(excluding strings) and objects (enabled by default, using +`objectIterator`, see below). ```js [... ti.flatten([1, [2, 3], [4, [5, ["abc"]]]])] @@ -288,11 +293,12 @@ objects (enabled by default, using `objectIterator`, see below). ### `flattenWith(tx: (x: any) => any, input: Iterable) => IterableIterator` -Produces iterator which selectively & recursively flattens input. The first arg -`tx` is a transformation fn called for each non-`null/undefined` value taken -from the input. It's used to check and possibly obtain an iteratable value for -further flattening. **The transformer must return `undefined` if the value can't -or shouldn't be flattened**. If a value is returned it MUST be iterable. +Produces iterator which selectively & recursively flattens input. The +first arg `tx` is a transformation fn called for each +non-`null/undefined` value taken from the input. It's used to check and +possibly obtain an iteratable value for further flattening. **The +transformer must return `undefined` if the value can't or shouldn't be +flattened**. If a value is returned it MUST be iterable. The default transformer used by `flatten` is: @@ -311,14 +317,14 @@ let tx = x => typeof x == "string" ? ti.map(x => x.charCodeAt(0), x) : ti.maybeI ### `fnil(fn: (...args: any[]) => any, ...ctors: (() => any)[]) => (...args: any[]) => any` -Takes a function `fn` and up to 3 `ctor` functions. Produces a new function -that calls `fn`, replacing a `null` or `undefined` arg with the value obtained -by calling its related positional `ctor` fn (e.g. the first ctor is used to -supply first arg, etc.). +Takes a function `fn` and up to 3 `ctor` functions. Produces a new +function that calls `fn`, replacing a `null` or `undefined` arg with the +value obtained by calling its related positional `ctor` fn (e.g. the +first ctor is used to supply first arg, etc.). -The function `fn` can take any number of arguments, however only the first 3 -are being potentially patched, how many depends on the number of `ctor` fns -supplied. +The function `fn` can take any number of arguments, however only the +first 3 are being potentially patched, how many depends on the number of +`ctor` fns supplied. ```js hello = (greet, name) => `${greet}, ${name}!`; @@ -354,20 +360,21 @@ ti.reduce(updateWith(adder), {}, "abracadabra"); ### `fork(input: Iterable, cacheLimit = 16) => () => IterableIterator` -Similar to `cached`, this function allows multiple consumers of a single input, -however is only using a sliding window of N cached values (`cached` stores the -entire input). +Similar to `cached`, this function allows multiple consumers of a single +input, however is only using a sliding window of N cached values +(`cached` stores the entire input). -`fork` returns a no-arg function, which returns a new forked iterator when -called. There's no limit to the number of active forks. +`fork` returns a no-arg function, which returns a new forked iterator +when called. There's no limit to the number of active forks. -**Important:** The use case for `fork` is synchronized consumption at similar -speeds (up to `cacheLimit` divergence). The cache is shared by *all* forks. If -one of the forks consumes the input faster than the given `cacheLimit`, the -other forks will lose intermediate values. If in doubt, increase the cache -limit to a higher value (default 16). The cache uses -[@thi.ng/dcons](https://github.com/thi-ng/umbrella/tree/master/packages/dcons) to avoid unnecessary copying during window -sliding. +**Important:** The use case for `fork` is synchronized consumption at +similar speeds (up to `cacheLimit` divergence). The cache is shared by +*all* forks. If one of the forks consumes the input faster than the +given `cacheLimit`, the other forks will lose intermediate values. If in +doubt, increase the cache limit to a higher value (default 16). The +cache uses +[@thi.ng/dcons](https://github.com/thi-ng/umbrella/tree/master/packages/dcons) +to avoid unnecessary copying during window sliding. ```js // stream of random numbers, as sliding partitions of 5 values @@ -400,11 +407,11 @@ for(let part of raw) { ### `frequencies(input: Iterable, key?: (v: T) => any): IterableIterator[]>` -Consumes input, applies `key` fn (if given) to each item and yields iterator of -2-element tuples, each `[key, freq]` (where `freq` is the number of times the -item occurred). **Important:** The input MUST be finite. Implementation uses -`JSON.stringify` to determine key equality. If no `key` fn is given, the -original values will be used as key. +Consumes input, applies `key` fn (if given) to each item and yields +iterator of 2-element tuples, each `[key, freq]` (where `freq` is the +number of times the item occurred). **Important:** The input MUST be +finite. Implementation uses `JSON.stringify` to determine key equality. +If no `key` fn is given, the original values will be used as key. ```js // without key fn @@ -425,10 +432,9 @@ var isLetter = (x) => /[a-z]/i.test(x); ### `groupBy(key: (v) => any, input: Iterable) => { [id: string]: T[] }` -Consumes input, applies `key` fn to each item and returns object of items -grouped by result of `key` fn. -**Important:** The input MUST be finite. -Implementation uses `JSON.stringify` to determine key equality. +Consumes input, applies `key` fn to each item and returns object of +items grouped by result of `key` fn. **Important:** The input MUST be +finite. Implementation uses `JSON.stringify` to determine key equality. ```js // group into multiples of 2 @@ -474,8 +480,9 @@ Yields iterator producing `[index, value]` pairs of input. ### `interleave(...inputs: Iterable[]) => IterableIterator` -Takes an arbitrary number of iterators and yields iterator of interleaved items from each input. -Terminates as soon as one of the inputs is exhausted. +Takes an arbitrary number of iterators and yields iterator of +interleaved items from each input. Terminates as soon as one of the +inputs is exhausted. ```js [... ti.interleave(ti.range(), ti.range(100, 200), ti.range(200, 205))] @@ -484,7 +491,8 @@ Terminates as soon as one of the inputs is exhausted. ### `interpose(x: any, input: Iterable) => IterableIterator` -Produces an iterator which injects `x` inbetween each item from input `iter`. +Produces an iterator which injects `x` inbetween each item from input +`iter`. ```js [... ti.interpose("/", ti.range(5))] @@ -493,7 +501,8 @@ Produces an iterator which injects `x` inbetween each item from input `iter`. ### `iterate(fn: (x: T) => T, seed: T) => IterableIterator` -Produces an iterator of the infinite results of iteratively applying `fn` to `seed`. +Produces an iterator of the infinite results of iteratively applying +`fn` to `seed`. **Important:** Use `take` to truncate sequence. @@ -504,15 +513,15 @@ Produces an iterator of the infinite results of iteratively applying `fn` to `se ### `iterator(x: Iterable) => Iterator` -Syntax sugar. Returns `x[Symbol.iterator]()`. -Most functions in this module call this automatically for each input. +Syntax sugar. Returns `x[Symbol.iterator]()`. Most functions in this +module call this automatically for each input. ### `juxt(...fns: ((x: T) => any)[]) => (x: T) => any[]` -Takes arbitrary number of functions and returns new function, -which takes single argument `x` and produces array of result -values of applying each input function to `x` -(juxtoposition of the given transformation functions). +Takes arbitrary number of functions and returns new function, which +takes single argument `x` and produces array of result values of +applying each input function to `x` (juxtoposition of the given +transformation functions). ```js var kernel = ti.juxt( @@ -544,10 +553,11 @@ ti.last(ti.take(10, ti.range())) ### `map(fn: (...args: any[]) => T, ...inputs: Iterable[]) => IterableIterator` -Consumes an arbitrary number of iterators and applies `fn` to each of their values. -Produces iterator of results. Iteration stops as soon as one of the inputs is exhausted. -The mapping `fn` should accept as many arguments as there are inputs to `map`. -Provides a fast path for single input mapping. +Consumes an arbitrary number of iterators and applies `fn` to each of +their values. Produces iterator of results. Iteration stops as soon as +one of the inputs is exhausted. The mapping `fn` should accept as many +arguments as there are inputs to `map`. Provides a fast path for single +input mapping. ```js [... ti.map((x)=> x*10, ti.range(10))] @@ -559,10 +569,9 @@ Provides a fast path for single input mapping. ### `mapcat(fn: (...args: any[]) => Iterable, ...inputs: Iterable[]) => IterableIterator` Like `map`, but expects mapping fn to return an iterable result and -produces iterator which yields the flat concatenation of results -(only the first level of nesting is removed). -`null` or `undefined` values returned by the mapping fn are skipped -in the output. +produces iterator which yields the flat concatenation of results (only +the first level of nesting is removed). `null` or `undefined` values +returned by the mapping fn are skipped in the output. ```js [... ti.mapcat((x) => ti.repeat(x, 3), "hello")] @@ -588,12 +597,13 @@ argument to mapping fn. ### `maybeIterator(x: any) => any` -Helper function, returning arg's iterator (if present) or else `undefined`. +Helper function, returning arg's iterator (if present) or else +`undefined`. ### `maybeObjectIterator(x: any) => any` -Helper function, checks if `x` is object-like (but no generator) and returns -`objectIterator(x)` or else `undefined`. +Helper function, checks if `x` is object-like (but no generator) and +returns `objectIterator(x)` or else `undefined`. ### `objectIterator(x: any) => IterableIterator` @@ -607,10 +617,10 @@ Produces iterator of an object"s key/value pairs. ### `partition(n: number, step: number, input: Iterable, all = false) => IterableIterator` Produces iterator of fixed size partitions/chunks of input values. -Produces overlapping partitions, if `step` < partition size `n`. -Unless the optional `all` flag is enabled, returns only completely filled -partitions. If `all = true`, the last partition -produced may have less than `n` items (though never empty). +Produces overlapping partitions, if `step` < partition size `n`. Unless +the optional `all` flag is enabled, returns only completely filled +partitions. If `all = true`, the last partition produced may have less +than `n` items (though never empty). ```js [... ti.partition(3, 3, ti.range(10))] @@ -629,8 +639,8 @@ produced may have less than `n` items (though never empty). ### `partitionBy(fn: (x: T) => any, input: Iterable) => IterableIterator` -Produces iterator of partitions/chunks of input values. Applies `fn` to each item -and starts new partition each time `fn` returns new result. +Produces iterator of partitions/chunks of input values. Applies `fn` to +each item and starts new partition each time `fn` returns new result. ```js [... ti.partitionBy((x) => x / 5 | 0, ti.range(11))] @@ -639,8 +649,8 @@ and starts new partition each time `fn` returns new result. ### `randomSample(prob: number, input: Iterable) => IterableIterator` -Produces iterator which consumes input and yields values with given probability -(0 .. 1 range). +Produces iterator which consumes input and yields values with given +probability (0 .. 1 range). ```js [... ti.randomSample(0.1, ti.range(100))] @@ -649,7 +659,8 @@ Produces iterator which consumes input and yields values with given probability ### `range(from?: number, to?: number, step?: number) => IterableIterator` -Produces iterator of monotonically increasing or decreasing values with optional `step` value. +Produces iterator of monotonically increasing or decreasing values with +optional `step` value. - If called without arguments, produces values from 0 .. +∞. - If called with 1 arg: 0 ... n (exclusive) @@ -679,11 +690,10 @@ If `from` > `to` and no `step` is given, a `step` of `-1` is used. ### `reduce(rfn: (acc: B, x: A) => B | ReducedValue, acc: B, input: Iterable) => B` -Consumes and reduces input using reduction function `rfn`, -then returns reduced result value. `rfn` can abort reduction -process by returning a value wrapped using `reduced(x)`. -If this is done, then this value is unwrapped and returned -as final result. +Consumes and reduces input using reduction function `rfn`, then returns +reduced result value. `rfn` can abort reduction process by returning a +value wrapped using `reduced(x)`. If this is done, then this value is +unwrapped and returned as final result. If input is empty, returns initial `acc`umulator arg. @@ -698,10 +708,12 @@ ti.reduce((acc, x) => { return acc += x, acc >= 15 ? ti.reduced(acc) : acc }, 0, ### `reductions(rfn: (acc: B, x: A) => B | ReducedValue, acc: B, input: Iterable) => IterableIterator` -Like `reduce`, but yields an iterator of all intermediate reduction results. -Always yields at least initial `acc`umulator arg, even if input is empty. +Like `reduce`, but yields an iterator of all intermediate reduction +results. Always yields at least initial `acc`umulator arg, even if input +is empty. -Thus, the result is the equivalent of an *exclusive* [scan operation](http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html) +Thus, the result is the equivalent of an *exclusive* [scan +operation](http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html) (with the exception of possible early bail out via `reduced`). ```js @@ -715,9 +727,8 @@ Thus, the result is the equivalent of an *exclusive* [scan operation](http://htt ### `reduced(x: T) => ReducedValue` -For use inside reduction functions only. -Wraps result in marker type to cause early termination of reduction -(see example above). +For use inside reduction functions only. Wraps result in marker type to +cause early termination of reduction (see example above). ### `repeat(x: T, n?: number) => IterableIterator` @@ -734,8 +745,8 @@ If `n` is given, produces only that many values. ### `repeatedly(fn: () => T, n?: number) => IterableIterator` -Produces an iterator of infinite (by default) results of calling the no-arg `fn` repeatedly. -If `n` is given, produces only that many values. +Produces an iterator of infinite (by default) results of calling the +no-arg `fn` repeatedly. If `n` is given, produces only that many values. ```js [... ti.take(3, ti.repeatedly(() => Math.random()))] @@ -747,9 +758,9 @@ If `n` is given, produces only that many values. ### `reverse(input: Iterable) => IterableIterator` -Yields iterator **lazily** producing reverse result order of input (**must be -finite**). If input is not already array-like (strings are for this purpose), -the function first consumes & caches input as array. +Yields iterator **lazily** producing reverse result order of input +(**must be finite**). If input is not already array-like (strings are +for this purpose), the function first consumes & caches input as array. ```js [...ti.reverse([1, 2, 3])] @@ -764,9 +775,9 @@ the function first consumes & caches input as array. ### `some(pred: (x: T) => boolean, input: Iterable) => T` -Consumes iterator and calls `pred` for each item. -When `pred` returns `true`, process stops and returns this first successful item. -When none of the items pass the predicate, the function returns `undefined`. +Consumes iterator and calls `pred` for each item. When `pred` returns +`true`, process stops and returns this first successful item. When none +of the items pass the predicate, the function returns `undefined`. ```js var nums = ti.iterator([1, 2, 3]); @@ -785,8 +796,8 @@ nums.next() ### `take(n: number, input: Iterable) => IterableIterator` -Produces iterator of the first `n` values of input -(or less than `n`, if input is too short...) +Produces iterator of the first `n` values of input (or less than `n`, if +input is too short...) ```js [... ti.take(3, ti.range())] @@ -804,12 +815,12 @@ Produces an iterator only yielding every `n`th item from input. ### `takeWhile(pred: (x: T) => boolean, input: Iterable) => IterableIterator` -Produces iterator which calls `pred` for each item of input and terminates as -soon as `pred` returns `false`. +Produces iterator which calls `pred` for each item of input and +terminates as soon as `pred` returns `false`. **Important:** Due to lack of look-ahead in the ES6 iterator API, the -value failing the given `pred` will be lost when working with the original -iterator *after* `takeWhile`. +value failing the given `pred` will be lost when working with the +original iterator *after* `takeWhile`. ```js var input = ti.range(10); @@ -822,8 +833,8 @@ var input = ti.range(10); ### `takeLast(n: number, input: Iterable) => IterableIterator` -Consumes input and produces iterator of the last `n` values of input (or less -than `n`, if input is too short...) +Consumes input and produces iterator of the last `n` values of input (or +less than `n`, if input is too short...) **Important:** Never attempt to use with infinite inputs! @@ -837,10 +848,10 @@ than `n`, if input is too short...) ### `walk(fn: (x: any) => void, input: Iterable, postOrder = false) => void` -Recursively walks input and applies `fn` to each element (for in-place editing -or side effects). Only iterable values and objects (but not strings) are -traversed further. Traversal is pre-order by default, but can be changed to -post-order via last arg. +Recursively walks input and applies `fn` to each element (for in-place +editing or side effects). Only iterable values and objects (but not +strings) are traversed further. Traversal is pre-order by default, but +can be changed to post-order via last arg. ```js // dummy SVG document @@ -880,9 +891,10 @@ doc.content[1] ### `walkIterator(input: Iterable, postOrder = false) => IterableIterator` -Yields an iterator performing either pre-order (default) or post-order -[traversal](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order) of input. -Only iterable values and objects (but not strings) are traversed further. +Yields an iterator performing either pre-order (default) or post-order +[traversal](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order) of +input. Only iterable values and objects (but not strings) are traversed +further. ```js // pre-order traversal @@ -918,10 +930,10 @@ Only iterable values and objects (but not strings) are traversed further. ### `zip(keys: Iterable, vals: Iterable, target?: any) => any` -Takes an iterator of keys and iterator of values, pairwise combines items -from each input and associates them as key-value mappings in a given target -object (if `target` is missing, returns new object). -Stops as soon as either input is exhausted. +Takes an iterator of keys and iterator of values, pairwise combines +items from each input and associates them as key-value mappings in a +given target object (if `target` is missing, returns new object). Stops +as soon as either input is exhausted. ```js ti.zip("abcdef", ti.range()) @@ -948,4 +960,4 @@ ti.zip(ti.map((x)=> x.id, langs), langs) # License -© 2017 Karsten Schmidt // Apache Software License 2.0 \ No newline at end of file +© 2017-2018 Karsten Schmidt // Apache Software License 2.0 \ No newline at end of file diff --git a/packages/iterators/package.json b/packages/iterators/package.json index 0812c8b5cd..9e86ae945c 100644 --- a/packages/iterators/package.json +++ b/packages/iterators/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iterators", - "version": "4.1.1", + "version": "4.1.2", "description": "clojure.core inspired, composable ES6 iterators & generators", "main": "./index.js", "typings": "./index.d.ts", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/dcons": "^0.1.16" + "@thi.ng/api": "^2.1.2", + "@thi.ng/dcons": "^0.1.17" }, "keywords": [ "clojure", diff --git a/packages/paths/CHANGELOG.md b/packages/paths/CHANGELOG.md index bec1701a4c..fbc7f205ab 100644 --- a/packages/paths/CHANGELOG.md +++ b/packages/paths/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@1.1.2...@thi.ng/paths@1.1.3) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/paths + ## [1.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@1.1.1...@thi.ng/paths@1.1.2) (2018-03-28) diff --git a/packages/paths/README.md b/packages/paths/README.md index d9769f0ed7..71655894af 100644 --- a/packages/paths/README.md +++ b/packages/paths/README.md @@ -2,6 +2,9 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/paths.svg)](https://www.npmjs.com/package/@thi.ng/paths) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About This library provides immutable, optimized path-based accessors for diff --git a/packages/paths/package.json b/packages/paths/package.json index 0265b29924..577bdde580 100644 --- a/packages/paths/package.json +++ b/packages/paths/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/paths", - "version": "1.1.2", + "version": "1.1.3", "description": "immutable, optimized path-based object property / array accessors", "main": "./index.js", "typings": "./index.d.ts", @@ -16,17 +16,15 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/checks": "^1.3.0" + "@thi.ng/checks": "^1.3.1" }, "keywords": [ "accessors", diff --git a/packages/pointfree-lang/.npmignore b/packages/pointfree-lang/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/pointfree-lang/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/pointfree-lang/CHANGELOG.md b/packages/pointfree-lang/CHANGELOG.md new file mode 100644 index 0000000000..9d9a388312 --- /dev/null +++ b/packages/pointfree-lang/CHANGELOG.md @@ -0,0 +1,34 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@0.1.2...@thi.ng/pointfree-lang@0.1.3) (2018-04-01) + + +### Bug Fixes + +* **pointfree-lang:** object literal grammar rule (allow initial WS) ([208b5c3](https://github.com/thi-ng/umbrella/commit/208b5c3)) + + + + + +## [0.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@0.1.1...@thi.ng/pointfree-lang@0.1.2) (2018-03-31) + + +### Bug Fixes + +* **pointfree-lang:** add ensureEnv, update re-exports, update readme ([659cce9](https://github.com/thi-ng/umbrella/commit/659cce9)) + + + + + +## [0.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@0.1.0...@thi.ng/pointfree-lang@0.1.1) (2018-03-31) + + + + +**Note:** Version bump only for package @thi.ng/pointfree-lang diff --git a/packages/pointfree-lang/LICENSE b/packages/pointfree-lang/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/pointfree-lang/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/pointfree-lang/README.md b/packages/pointfree-lang/README.md new file mode 100644 index 0000000000..abedcfcd52 --- /dev/null +++ b/packages/pointfree-lang/README.md @@ -0,0 +1,389 @@ +# @thi.ng/pointfree-lang + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/pointfree-lang.svg)](https://www.npmjs.com/package/@thi.ng/pointfree-lang) + +This project is part of the [@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + + + +- [About](#about) +- [Status](#status) +- [Installation](#installation) +- [Usage examples](#usage-examples) +- [Language & Syntax](#language--syntax) + - [Comments](#comments) + - [Identifiers](#identifiers) + - [Word definitions](#word-definitions) + - [Hyperstatic words](#hyperstatic-words) + - [Boolean](#boolean) + - [Numbers](#numbers) + - [Strings](#strings) + - [Quotations (Arrays)](#quotations-arrays) + - [Literal quotes](#literal-quotes) + - [Variables](#variables) + - [Objects](#objects) + - [Sets](#sets) +- [Ideas / Todos](#ideas--todos) +- [Authors](#authors) +- [License](#license) + + + +## About + +Experimental language layer with compact +[Forth](https://en.wikipedia.org/wiki/Forth_(programming_language)) +style syntax for the +[@thi.ng/pointfree](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree), +an ES6 embedded DSL for concatenative programming: + +- [PegJS](https://pegjs.org/) based + [grammar](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree-lang/src/grammar.pegjs) + & parser +- untyped, interpreted, but with AOT compilation of user defined words +- hyperstatic word definitions +- support for custom / externally defined vocabularies (word sets / JS functions) +- scoped variables (stored in environment object) +- nested quotations (code as data) +- array & object literals (optionally w/ computed properties) +- all other features of @thi.ng/pointfree (combinators, array/vector ops etc.) + +## Status + +ALPHA + +## Installation + +``` +yarn add @thi.ng/pointfree-lang +``` + +```typescript +import * as pf from "@thi.ng/pointfree-lang"; +``` + +## Usage examples + +[A complete +example](https://github.com/thi-ng/umbrella/tree/master/examples/pointfree-svg/) +generating the below SVG graphic is located in the `/examples` +directory. + +![generated example output](../../examples/pointfree-svg/output.svg) + +```ts +// DSL source code (syntax described further below) + +const src = ` +( helper words for forming 2D vectors ) +: xy ( x y -- [x y] ) vec2 ; +: yx ( x y -- [y x] ) swap vec2 ; + +( generate horizontal line coords ) +: hline ( y width -- [0 y] [width y]) + over 0 yx -rot yx ; + +( generate vertical line coords ) +: vline ( x height -- [x 0] [x height]) + over 0 xy -rot xy ; + +( draw haircross w/ FFI 'gfx.line' word ) +: hairx ( x y w h -- [] ) + -rot [vline] [hline] bis2 [gfx.line] bia2; +`; + + +// custom word definition (will be used by `hairx` word above) +// stack effect: +// ( [x1 y1] [x2 y2] -- ) + +const drawLine = (ctx) => { + const stack = ctx[0]; + // minimum stack depth guard + pf.ensureStack(stack, 2); + // pop top 2 values + const [x2, y2] = stack.pop(); + const [x1, y1] = stack.pop(); + console.log(`draw line: ${x1},${y1} -> ${x2},${y2}`); + + // if we had a canvas drawing context stored in env... + // const canvasCtx = ctx[2].canvasContext; + // canvasCtx.beginPath(); + // canvasCtx.moveTo(x1, y1); + // canvasCtx.lineTo(x2, y2); + // canvasCtx.stroke(); + + // or... alternatively generate SVG (and push result on stack (or store in env) + // stack.push(``); + + // ...same again, but in @thi.ng/hiccup format + // stack.push(["line", {x1,y1,x2,y2}]) + + return ctx; +}; + +// the DSL interpreter & compiler uses an environment object +// to lookup & store word definitions & variables +// here we create new environment and associate custom FFI word(s) +const env = pf.ffi({}, { + "gfx.line": drawLine +}); + +// compile / execute source code w/ given env +// the compiled words will be stored in the env +pf.run(src, env); + +// (optional, but that's how we do it here for example purposes) +// store some external state / config in env +// this could be modified via event handlers etc. +env.mouseX = 100; +env.mouseY = 200; +env.width = 640; +env.height = 480; + +// now actually call the `hairx` word with args pulled from env +// words prefixed w/ `@` are variable lookups +pf.run(`@mouseX @mouseY @width @height hairx`, env); +// draw line: 100,0 -> 100,480 +// draw line: 0,200 -> 640,200 + +// or call precompiled word/function directly w/ given initial stack +pf.runWord("hairx", env, [100, 200, 640, 480]); +// draw line: 100,0 -> 100,480 +// draw line: 0,200 -> 640,200 +``` + +## Language & Syntax + +As noted previously, the syntax is closely based on Forth (and other +concatenative languages), however since this implementation is targetted +to ES6 environments, the semantics and actual implementation differ +drastically. In @thi.ng/pointfree (and therefore also in this DSL layer): + +- words and programs are implemented as functional compositions of + vanilla JS functions, i.e. `1 2 +` => `add(push(1)(push(2)(ctx)))` + - therefore no user controlled context switch between immediate & + compile modes, as in Forth + - parsing of word definitions and quotations triggers compile mode + automatically +- both stacks (D & R stacks) can store any valid JS data type +- no linear memory as in Forth, instead variables and the dictionary of + (custom / FFI or user defined) words is stored in a separate + environment object, which is passed to each word/function +- the DSL has syntax sugar for variable value lookups & assignments +- the DSL allows nested quotations & object literals, optionally with + lazily resolved computed properties and/or values +- all symbols are separated by whitespace (like in Clojure, commas are + considered whitespace too) + +### Comments + +As in Forth, comments are enclosed in `( ... )`. If the comment body +includes the `--` string, it's marked as a [stack effect +comment](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree#about-stack-effects) +in preparation for future tooling additions. + +Comments can span multiple lines. There's no special syntax for single +line comments: + +``` +( multiline: + .__ __ _____ +______ ____ |__| _____/ |__/ ____\______ ____ ____ +\____ \ / _ \| |/ \ __\ __\\_ __ \_/ __ \_/ __ \ +| |_> > <_> ) | | \ | | | | | \/\ ___/\ ___/ +| __/ \____/|__|___| /__| |__| |__| \___ >\___ > +|__| \/ \/ \/ + +) + +1 2 ( embedded single line ) 3 +``` + +### Identifiers + +Word identifiers can contain any alhpanumeric character and these +additional ones: `*?$%&/|~<>=._+-`. Digits are not allowed as first +char. + +All 100+ built-in words defined by +[@thi.ng/pointfree](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree) +are available by default with the following additional aliases (which +aren't valid names in the ES6 context): + +| Alias | Original name | +| --- | --- | +| ?drop | dropif | +| ?dup | dupif | +| -rot | invrot | +| >r | movdr | +| >r2 | movdr2 | +| r> | movrd | +| r2> | movrd2 | +| if | condq | +| switch | casesq | +| while | loopq | +| + | add | +| - | sub | +| * | mul | +| / | div | +| 1+ | inc | +| 1- | dec | +| v+ | vadd | +| v- | vsub | +| v* | vmul | +| v/ | vdiv | +| . | print | +| .s | printds | +| .r | printrs | + +The ID resolution priority is: + +1. current env +2. built-in aliases +3. built-ins + +### Word definitions + +As in Forth, new words can be defined using the `: name ... ;` form. + +``` +: square ( x -- x*x ) dup * ; + +10 square . +``` + +Will result in `100`. + +#### Hyperstatic words + +Unlike [variables](#variables), words are defined in a +[hyper-static](http://wiki.c2.com/?HyperStaticGlobalEnvironment) +environment, meaning new versions of existing words can be defined, +however any other word (incl. the new version of same word) which uses +the earlier version will continue to do so. By implication, this too +means that attempting to use undefined words inside a word definition +will fail, even if they'd be defined later on. + +```ts +pf.run(` +: foo "foo1" ; +: bar foo "bar" + ; + +( redefine foo, incl. use of existing version ) +: foo foo "foo2" + ; + +( use words ) +foo bar +`)[0]; +// [ 'foo1foo2', 'foo1bar' ] +``` + +There're no formatting rules enforced (yet, but under consideration). +However, it's strongly encouraged to include [stack effect +comments](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree#about-stack-effects) +as shown in the examples above. + +**Word definitions MUST be terminated with `;`.** + +### Boolean + +The symbol `T` evaluates as `true` and `F` as `false`. + +### Numbers + +- `0b...` - binary numbers (max 32 bits), e.g. `0b11110100` +- `0x...` - hex numbers (max 32bits), e.g. `0xdecafbad` +- decimals (optionally signed and/or scientific notation, e.g. `-1.23e-4`) + +### Strings + +`"Hello world"` - no `\"` escape feature implemented yet + +### Quotations (Arrays) + +Arrays can be contain any valid data literal or symbol and can be +arbitrarily nested. Commas optional. + +`["result: " [2, 3, *] exec +]` + +### Literal quotes + +A single element quotation can be formed by prefixing a term with `'`. Nestable. + +- `'+` => `[+]` +- `''+` => `[[+]]` +- `[1 2]` => `[[1,2]]` + +### Variables + +Variables can be looked up & resolved via the currently active +environment by prefixing their name with `@`. Attempting to resolve an +unknown var will result in an error. + +```ts +pf.runU(`@a @b +`, {a: 10, b: 20}); +// 30 +``` + +Storing a stack value in a variable (in the the current environment) is +done via the `!` suffix: + +```ts +pf.runE(`1 2 + a!`) +// {a: 3} +``` + +Furthermore, readonly variables can be defined via words. In this case +no prefix must be used and these kind of variables are +[hyperstatic](#hyperstatic-words). + +TODO add info about scoping and resolution in words / quotations... + +### Objects + +Plain objects literals can be created similarly as in JS, i.e. + +`{key1: value, key2: val2 ...}` (again commas are optional) + +Keys can be given with or without doublequotes (string literals). Quotes +are only needed if: + +- the key contains spaces, has `@` prefix or `!` suffix +- is binary/hex number +- a number in scientific notation + +Furthermore, variables can be used both as keys and/or values: + +`{@a: {@b: @c}}` + +```ts +// dynamically resolved switch using `bingo` var +src = `{@bingo: ["yay: " @bingo +] default: ["nope"]} switch`; +pf.runU(src, {bingo: 42}, [42]); +// bingo: 42 + +pf.runU(src, {bingo: 42}, [43]); +// nope +``` + +### Sets + +TODO + +## Ideas / Todos + +- [ ] add tests +- [ ] tail recursion (help wanted, see #1) +- [ ] async words +- [ ] canvas drawing vocab +- [ ] @thi.ng/atom vocab & integration +- [ ] @thi.ng/rstream vocab & integration + +## Authors + +- Karsten Schmidt + +## License + +© 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/pointfree-lang/package.json b/packages/pointfree-lang/package.json new file mode 100644 index 0000000000..2e30330bfc --- /dev/null +++ b/packages/pointfree-lang/package.json @@ -0,0 +1,48 @@ +{ + "name": "@thi.ng/pointfree-lang", + "version": "0.1.3", + "description": "Forth style syntax layer/compiler for the @thi.ng/pointfree DSL", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": "https://github.com/thi-ng/umbrella", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn clean && tsc --declaration && yarn peg", + "clean": "rm -rf *.js *.d.ts .nyc_output build doc", + "cover": "yarn test && nyc report --reporter=lcov", + "doc": "node_modules/.bin/typedoc --mode modules --out doc src", + "peg": "pegjs -o parser.js src/grammar.pegjs", + "pegtest": "pegjs -o build/src/parser.js src/grammar.pegjs", + "pub": "yarn build && yarn publish --access public", + "test": "rm -rf build && tsc -p test && yarn pegtest && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "pegjs": "^0.10.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" + }, + "dependencies": { + "@thi.ng/api": "^2.1.2", + "@thi.ng/pointfree": "^0.6.2" + }, + "keywords": [ + "concatenative", + "dataflow", + "DSL", + "ES6", + "Forth", + "functional", + "grammar", + "PEG", + "pointfree", + "syntax", + "typescript" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/pointfree-lang/src/api.ts b/packages/pointfree-lang/src/api.ts new file mode 100644 index 0000000000..77ae75a8c7 --- /dev/null +++ b/packages/pointfree-lang/src/api.ts @@ -0,0 +1,53 @@ +import { IObjectOf } from "@thi.ng/api/api"; +import * as pf from "@thi.ng/pointfree"; + +export interface ASTNode { + type: NodeType; + body: any; + id?: string; +} + +export enum NodeType { + SYM = 1, + WORD, + QUOT, + + VAR_DEREF, + VAR_STORE, + + NIL, + NUMBER, + BOOLEAN, + STRING, + MAP, + SET, + + COMMENT, + STACK_COMMENT, +}; + +export const ALIASES: IObjectOf = { + "?drop": pf.dropif, + "?dup": pf.dupif, + "-rot": pf.invrot, + ">r": pf.movdr, + ">r2": pf.movdr2, + "r>": pf.movrd, + "r2>": pf.movrd2, + "if": pf.condq, + "switch": pf.casesq, + "while": pf.loopq, + "+": pf.add, + "-": pf.sub, + "*": pf.mul, + "/": pf.div, + "1+": pf.inc, + "1-": pf.dec, + "v+": pf.vadd, + "v-": pf.vsub, + "v*": pf.vmul, + "v/": pf.vdiv, + ".": pf.print, + ".s": pf.printds, + ".r": pf.printrs, +}; diff --git a/packages/pointfree-lang/src/grammar.pegjs b/packages/pointfree-lang/src/grammar.pegjs new file mode 100644 index 0000000000..3ddc0dedff --- /dev/null +++ b/packages/pointfree-lang/src/grammar.pegjs @@ -0,0 +1,184 @@ +{ + const NodeType = require("./api").NodeType; + + // const NodeType = {}; + // NodeType[NodeType["SYM"] = 1] = "SYM"; + // NodeType[NodeType["WORD"] = 2] = "WORD"; + // NodeType[NodeType["QUOT"] = 3] = "QUOT"; + // NodeType[NodeType["VAR_DEREF"] = 4] = "VAR_DEREF"; + // NodeType[NodeType["VAR_STORE"] = 5] = "VAR_STORE"; + // NodeType[NodeType["NIL"] = 6] = "NIL"; + // NodeType[NodeType["NUMBER"] = 7] = "NUMBER"; + // NodeType[NodeType["BOOLEAN"] = 8] = "BOOLEAN"; + // NodeType[NodeType["STRING"] = 9] = "STRING"; + // NodeType[NodeType["MAP"] = 10] = "MAP"; + // NodeType[NodeType["SET"] = 11] = "SET"; + // NodeType[NodeType["COMMENT"] = 12] = "COMMENT"; + // NodeType[NodeType["STACK_COMMENT"] = 13] = "STACK_COMMENT"; + + const ast = (node) => { + // const loc = location().start; + // node.loc = [loc.offset, loc.line, loc.column]; + return node; + }; +} + +Root + = exrp:Expr* + +Expr + = _ expr:( + Word + / Quot + / LitQuote + / Var + / Comment + / Atom + / Map +// / Set + ) _ { return ast(expr); } + +Word + = ":" __ id:Sym body:Expr+ ";" { + return { type: NodeType.WORD, id: id.id, body}; + } + +Quot + = "[" body:Expr* "]" { + return { type: NodeType.QUOT, body }; + } + +Set + = "#{" body:Expr* "}" { + return { type: NodeType.SET, body }; + } + +Map + = "{" _ body:MapPair* "}" { + return { type: NodeType.MAP, body }; + } + +MapPair + = k:MapKey v:MapVal { return [ k, v ]; } + +MapKey + = k:(String / Sym / Number / VarDeref) ":" { return k; } + +MapVal + = _ val:( + Atom + / Quot + / LitQuote + / VarDeref + / Map +// / Set + ) _ { return val; } + +Atom + = String + / Number + / Boolean + / Nil + / Sym + +Nil + = "nil" { + return {type: NodeType.NIL, body: null}; + } + +Boolean + = $("T" / "F") { + return {type: NodeType.BOOLEAN, body: text() == "T"}; + } + +Sym + = id:$(SymInit SymRest*) { + return {type: NodeType.SYM, id}; + } + +SymInit + = Alpha + / SymChars + +SymRest + = AlphaNum + / SymChars + +SymChars + = [*?$%&/\|~<>=._+\-] + +Var + = VarDeref + / VarStore + +VarDeref + = "@" id:Sym { + return {type: NodeType.VAR_DEREF, id: id.id} + } + +VarStore + = id:Sym "!" { + return {type: NodeType.VAR_STORE, id: id.id} + } + +LitQuote + = "'" body:Expr { + return {type: NodeType.QUOT, body: [body]}; + } + +Comment + = "("+ body:$(!")" .)* ")" { + return body.indexOf("--") > 0 ? + { type: NodeType.STACK_COMMENT, + body: body.split("--").map(x => x.trim().split(" ")) + } : + { type: NodeType.COMMENT, body: body.trim()}; + } + +String + = "\"" body:$(!"\"" .)* "\"" { + return {type: NodeType.STRING, body }; + } + +Number + = Hex + / Binary + / Decimal + +Sign = [-+] + +Binary + = "0b" n:$[01]+ { + return {type: NodeType.NUMBER, radix: 2, body: parseInt(n, 2)}; + } +Hex + = "0x" n:$[0-9a-fA-F]+ { + return {type: NodeType.NUMBER, radix: 16, body: parseInt(n, 16)}; + } + +Int + = Sign? Uint + +Uint + = Digit+ + +Decimal + = Int ("." Uint?)? ("e" Int)? { + return {type: NodeType.NUMBER, body: parseFloat(text())}; + } + +AlphaNum + = Alpha + / Digit + +Alpha + = [a-z]i + +Digit + = [0-9] + +LineBreak + = [\n\r] + +_ = [ ,\t\n\r]* +__ = [ ,\t\n\r]+ diff --git a/packages/pointfree-lang/src/index.ts b/packages/pointfree-lang/src/index.ts new file mode 100644 index 0000000000..4e6a5e3329 --- /dev/null +++ b/packages/pointfree-lang/src/index.ts @@ -0,0 +1,216 @@ +import { IObjectOf } from "@thi.ng/api/api"; +import { illegalArgs, illegalState } from "@thi.ng/api/error"; +import * as pf from "@thi.ng/pointfree"; + +import { ASTNode, NodeType, ALIASES } from "./api"; +import { parse } from "./parser"; + +let DEBUG = false; + +export const setDebug = (state: boolean) => DEBUG = state; + +const resolveSym = (node: ASTNode, ctx: pf.StackContext) => { + const id = node.id; + let w = (ctx[2].__words[id] || ALIASES[id] || pf[id]); + if (!w) { + illegalArgs(`unknown symbol: ${id}`); + } + return w; +}; + +const resolveVar = (id: string, ctx: pf.StackContext) => { + const w = ctx[2][id]; + if (w === undefined) { + illegalArgs(`unknown var: ${id}`); + } + return w; +}; + +const visit = (node: ASTNode, ctx: pf.StackContext, isQuote = false) => { + DEBUG && console.log("visit", NodeType[node.type], node, ctx); + switch (node.type) { + case NodeType.SYM: + return visitSym(node, ctx, isQuote); + case NodeType.NUMBER: + case NodeType.BOOLEAN: + case NodeType.STRING: + case NodeType.NIL: + ctx[0].push(node.body); + return ctx; + case NodeType.MAP: + return visitMap(node, ctx, isQuote); + case NodeType.QUOT: + return visitQuot(node, ctx); + case NodeType.VAR_DEREF: + return visitDeref(node, ctx, isQuote); + case NodeType.VAR_STORE: + return visitStore(node, ctx, isQuote); + case NodeType.WORD: + return visitWord(node, ctx, isQuote); + default: + DEBUG && console.log("skipping node..."); + } + return ctx; +}; + +const visitSym = (node: ASTNode, ctx: pf.StackContext, isQuote: boolean) => { + const w = resolveSym(node, ctx); + if (isQuote) { + ctx[0].push(w); + return ctx; + } else { + return w(ctx); + } +}; + +const visitQuot = (node: ASTNode, ctx: pf.StackContext) => { + let qctx = pf.ctx([], ctx[2]); + for (let n of node.body) { + qctx = visit(n, qctx, true); + } + ctx[0].push(qctx[0]); + return ctx; +}; + +const visitDeref = (node: ASTNode, ctx: pf.StackContext, isQuote: boolean) => { + const id = node.id; + ctx[0].push(isQuote ? pf.loadkey(id) : resolveVar(id, ctx)); + return ctx; +}; + +const visitStore = (node: ASTNode, ctx: pf.StackContext, isQuote: boolean) => { + const id = node.id; + if (isQuote) { + ctx[0].push(pf.storekey(id)); + return ctx; + } else { + ctx[0].push(id); + return pf.store(ctx); + } +}; + +const visitWord = (node: ASTNode, ctx: pf.StackContext, isQuote: boolean) => { + const id = node.id; + if (isQuote) { + illegalState(`can't define words inside quotations (${id})`); + } + let wctx = pf.ctx([], { ...ctx[2] }); + for (let n of node.body) { + wctx = visit(n, wctx, true); + } + const w = pf.word(wctx[0], wctx[2]); + // TODO add stack comment as meta + ctx[2].__words[id] = w; + return ctx; +} + +const visitMap = (node: ASTNode, ctx: pf.StackContext, isQuote: boolean) => { + const res = {}; + let k, v; + for (let pair of node.body) { + [k, v] = pair; + let deferV: ASTNode, deferK: ASTNode; + switch (v.type) { + case NodeType.QUOT: + v = pf.unwrap(visitQuot(v, pf.ctx([], { ...ctx[2] }))); + break; + case NodeType.MAP: + v = visitMap(v, pf.ctx([], { ...ctx[2] }), isQuote)[0]; + if (isQuote) { + ctx[0].push(...v.slice(0, v.length - 1)); + } + v = v[v.length - 1]; + break; + case NodeType.SYM: + v = resolveSym(v, ctx); + break; + case NodeType.VAR_DEREF: + if (isQuote) { + deferV = v; + } else { + v = resolveVar(v.id, ctx); + } + break; + default: + v = v.body; + } + switch (k.type) { + case NodeType.VAR_DEREF: + if (isQuote) { + deferK = k; + } else { + res[resolveVar(k.id, ctx)] = v; + } + break; + case NodeType.SYM: + if (deferV) { + deferK = k.id; + } else { + res[k.id] = v; + } + break; + default: + if (deferV) { + deferK = k.body; + } else { + res[k.body] = v; + } + } + if (deferK !== undefined || deferV !== undefined) { + ctx[0].push(deferedPair(res, deferK, deferV || v)); + } + } + ctx[0].push(res); + return ctx; +}; + +const deferedPair = (res: any, k, v) => { + return (k.type === NodeType.VAR_DEREF) ? + (v != null && v.type === NodeType.VAR_DEREF) ? + (ctx: pf.StackContext) => (res[resolveVar(k.id, ctx)] = resolveVar(v.id, ctx), ctx) : + (ctx: pf.StackContext) => (res[resolveVar(k.id, ctx)] = v, ctx) : + (ctx: pf.StackContext) => (res[k] = resolveVar(v.id, ctx), ctx); +}; + +export const ensureEnv = (env?: pf.StackEnv) => { + env = env || {}; + if (!env.__words) { + env.__words = {}; + } + return env; +}; + +export const run = (src: string, env?: pf.StackEnv, stack: pf.Stack = []) => { + let ctx = pf.ctx(stack, ensureEnv(env)); + for (let node of parse(src)) { + ctx = visit(node, ctx); + } + return ctx; +}; + +export const runU = (src: string, env?: pf.StackEnv, stack?: pf.Stack, n = 1) => + pf.unwrap(run(src, env, stack), n); + +export const runE = (src: string, env?: pf.StackEnv, stack?: pf.Stack) => + run(src, env, stack)[2]; + +export const runWord = (id: string, env?: pf.StackEnv, stack: pf.Stack = []) => + env.__words[id](pf.ctx(stack, ensureEnv(env))); + +export const runWordU = (id: string, env?: pf.StackEnv, stack: pf.Stack = [], n = 1) => + pf.unwrap(env.__words[id](pf.ctx(stack, ensureEnv(env))), n); + +export const runWordE = (id: string, env?: pf.StackEnv, stack: pf.Stack = []) => + env.__words[id](pf.ctx(stack, ensureEnv(env)))[2]; + +export const ffi = (env: any, words: IObjectOf) => { + env = ensureEnv(env); + env.__words = { ...env.__words, ...words }; + return env; +}; + +export { + ensureStack, + ensureStackN, + unwrap, +} from "@thi.ng/pointfree"; \ No newline at end of file diff --git a/packages/pointfree-lang/src/parser.ts b/packages/pointfree-lang/src/parser.ts new file mode 100644 index 0000000000..96cdc40e05 --- /dev/null +++ b/packages/pointfree-lang/src/parser.ts @@ -0,0 +1,12 @@ +// DO NOT EDIT THIS FILE! +// +// Stubs for auto-generated parser module (using pegjs 0.10.+) +// To rebuild the parser run either: `yarn build` or `yarn peg` +export function SyntaxError(message: string, expected: string, found: any, loc: any) { + message; expected; found; loc; +} + +export function parse(input: string, options?: any): any { + input; options; + return null; +} diff --git a/packages/pointfree-lang/test/index.ts b/packages/pointfree-lang/test/index.ts new file mode 100644 index 0000000000..c962debf83 --- /dev/null +++ b/packages/pointfree-lang/test/index.ts @@ -0,0 +1,36 @@ +import * as assert from "assert"; +import * as pf from "@thi.ng/pointfree"; +import { run, runU } from "../src/index"; + +describe("pointfree-lang", () => { + it("nil", () => { + assert.strictEqual(runU(`nil`), null); + assert.deepEqual(run(`nil nil`)[0], [null, null]); + assert.deepEqual(run(`'nil dup`)[0], [[null], [null]]); + }); + + it("litquote", () => { + assert.deepEqual(runU(`'nil`), [null]); + assert.deepEqual(runU(`'+`), [pf.add]); + assert.deepEqual(run(`1 '1`)[0], [1, [1]]); + assert.deepEqual(run(`1 2 '+`)[0], [1, 2, [pf.add]]); + assert.deepEqual(run(`1 2 '+ exec`)[0], [3]); + }); + + // setDebug(true); + + // console.log(run(`"result: " 1 2 + + .`)); + // console.log(run(`[[1 2] [10 20] v*] exec`)); + // console.log(run(`10 20 'inc bia`)); + // console.log(run(`10 a! 2 @a +`)); + // console.log(run(`: madd -rot * + ; 3 5 10 madd .`)); + // console.log(run(`: madd 100 a! @a -rot * + ; 3 5 10 a! madd .`)); + // console.log(run(`3 ["i=" swap + . ] dotimes`)); + // console.log(run(`: sq dup mul; [1 2 3 4] 'sq mapll '+ 0 foldl`)); + // console.log(run(`'[10 [1 2 3 4] v+]`)[0]); + + // const res = runU(`[{@a: {"b": @b cc: [{@a: @a}]}}] "bb" "b" store exec`, { a: "aa" }); + // const res = runU(`[{@a: {"b": @b cc: [{@a: @a}]}}] "bb" "b" store exec @a at "cc" at exec`, { a: "aa" }); + // console.log("res", res); + // console.log(pf.runU([res.aa.cc, pf.exec], [[], [], { a: "aa" }])); +}); diff --git a/packages/pointfree-lang/test/readme.ts b/packages/pointfree-lang/test/readme.ts new file mode 100644 index 0000000000..8876e06daa --- /dev/null +++ b/packages/pointfree-lang/test/readme.ts @@ -0,0 +1,63 @@ +import * as pf from "../src"; + +const src = ` +( helper words for forming 2D vectors ) +: xy ( x y -- [x y] ) vec2 ; +: yx ( x y -- [y x] ) swap vec2 ; + +( generate horizontal line coords ) +: hline ( y w -- [0 y] [w y]) + over 0 yx -rot yx ; + +( generate vertical line coords ) +: vline ( x h -- [x 0] [x h]) + over 0 xy -rot xy ; + +( generate haircross w/ FFI 'gfx.line' word ) +: hairx ( x y w h -- [] ) + -rot [vline] [hline] bis2 [gfx.line] bia2; +`; + +const drawLine = (ctx) => { + const stack = ctx[0]; + // minimum stack depth guard + pf.ensureStack(stack, 2); + // pop top 2 values + const [x2, y2] = stack.pop(); + const [x1, y1] = stack.pop(); + console.log(`draw line: ${x1},${y1} -> ${x2},${y2}`); + + // if we had a canvas drawing context stored in env... + // const canvasCtx = ctx[2].canvasContext; + // canvasCtx.beginPath(); + // canvasCtx.moveTo(x1, y1); + // canvasCtx.lineTo(x2, y2); + // canvasCtx.stroke(); + + // or alternatively generate SVG and push result on stack (or store in env) + // stack.push(``); + return ctx; +}; + +// create new environment and associate custom FFI words +const env = pf.ffi({}, { + "gfx.line": drawLine +}); + +// compile / execute source code w/ given env +// the compiled words will be stored in given env +pf.run(src, env); + +// (optional, but that's how we do it here for example purposes) +// store some external state / config in env +// this could be modified via event handlers etc. +env.mouseX = 100; +env.mouseY = 200; +env.width = 640; +env.height = 480; + +// now actually call the `hairx` word with args pulled from env +pf.run(`@mouseX @mouseY @width @height hairx`, env); + +// or call precompiled word/function directly w/ given initial stack +pf.runWord("hairx", env, [100, 200, 640, 480]); diff --git a/packages/pointfree-lang/test/tsconfig.json b/packages/pointfree-lang/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/pointfree-lang/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/pointfree-lang/tsconfig.json b/packages/pointfree-lang/tsconfig.json new file mode 100644 index 0000000000..bd6481a5a6 --- /dev/null +++ b/packages/pointfree-lang/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/pointfree/CHANGELOG.md b/packages/pointfree/CHANGELOG.md index 419df93810..878a31b1bd 100644 --- a/packages/pointfree/CHANGELOG.md +++ b/packages/pointfree/CHANGELOG.md @@ -3,6 +3,59 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.6.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.6.1...@thi.ng/pointfree@0.6.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/pointfree + + +## [0.6.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.6.0...@thi.ng/pointfree@0.6.1) (2018-03-31) + + +### Bug Fixes + +* **pointfree:** reexport ensureStack fns ([a0bf781](https://github.com/thi-ng/umbrella/commit/a0bf781)) + + + + + +# [0.6.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.5.0...@thi.ng/pointfree@0.6.0) (2018-03-31) + + +### Features + +* **pointfree:** add caseq() ([5db90c5](https://github.com/thi-ng/umbrella/commit/5db90c5)) + + + + + +# [0.5.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.4.0...@thi.ng/pointfree@0.5.0) (2018-03-29) + + +### Features + +* **pointfree:** add combinators, update controlflow words, remove execq ([3dc30a8](https://github.com/thi-ng/umbrella/commit/3dc30a8)) +* **pointfree:** add more dataflow combinators, words & tests ([b096e43](https://github.com/thi-ng/umbrella/commit/b096e43)) + + + + + +# [0.4.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.3.0...@thi.ng/pointfree@0.4.0) (2018-03-29) + + +### Features + +* **pointfree:** add new words, constructs, aliases, fix re-exports ([943b4f9](https://github.com/thi-ng/umbrella/commit/943b4f9)) + + + + # [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.2.1...@thi.ng/pointfree@0.3.0) (2018-03-28) diff --git a/packages/pointfree/README.md b/packages/pointfree/README.md index 876f04aa17..8b556e11a5 100644 --- a/packages/pointfree/README.md +++ b/packages/pointfree/README.md @@ -2,6 +2,9 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/pointfree.svg)](https://www.npmjs.com/package/@thi.ng/pointfree) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + - [About](#about) @@ -12,6 +15,7 @@ - [Custom word definitions](#custom-word-definitions) - [Factoring](#factoring) - [Quotations](#quotations) + - [Dataflow combinators](#dataflow-combinators) - [Array transformations](#array-transformations) - [Conditionals](#conditionals) - [Loops](#loops) @@ -20,7 +24,7 @@ - [Core vocabulary](#core-vocabulary) - [D-Stack modification](#d-stack-modification) - [R-Stack modification](#r-stack-modification) - - [Dynamic execution](#dynamic-execution) + - [Word & quotation execution / combinators](#word--quotation-execution--combinators) - [Primitive math](#primitive-math) - [Logic](#logic) - [Environment](#environment) @@ -36,24 +40,36 @@ ## About [Pointfree](https://en.wikipedia.org/wiki/Concatenative_programming_language) -functional composition via lightweight (3KB gzipped), stack-based -[Forth](https://en.wikipedia.org/wiki/Forth_(programming_language)) -inspired DSL: +functional composition via lightweight (~3KB gzipped), stack-based embedded DSL. + +This module implements the language's core components in vanilla ES6 and +is perfectly usable like that. **The related +[@thi.ng/pointfree-lang](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree-lang) +module defines an actual language with a powerful and more concise +syntax around this module and might be better suited for some use +cases.** + +Current features: - words implemented as tiny vanilla JS functions (easily extensible) -- optimized pre-composition/compilation of custom user defined words (see [comp.ts](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree/src/comp.ts)) +- optimized pre-composition/compilation of custom user defined words + (see + [comp.ts](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree/src/comp.ts)) - dual stack (main & stash/scratch space) - nested execution environments (scopes) - arbitrary stack values -- quotations (static or dynamically generated programs stored on stack) -- includes ~85 stack operators: +- nested quotations (static or dynamically generated programs stored on stack) +- includes 100+ operators: - conditionals - looping constructs + - 20+ dataflow / quotation combinators (`dip`, `keep`, `bi` etc.) - array / tuple ops - math, binary & logic ops - currying quotations - higher order combinators - environment manipulation etc. +- stack comments & documentation for most ops/words +- [over 330 test cases](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree/test/index.ts) For a great overview & history of this type of this type of programming, please see: @@ -71,8 +87,8 @@ VM/REPL](http://forth.thi.ng) (JS) and refactored to be more generally useful as environment for building data processing pipelines in a [pointfree / concatenative programming style](https://en.wikipedia.org/wiki/Concatenative_programming_language) -rather than acting as fullblown VM. Some words and operations have been -influenced by [Factor](http://factorcode.org) and +rather than acting as fullblown VM. Some words and concepts have been +ported from [Factor](http://factorcode.org) and [Popr](https://github.com/HackerFoo/poprc). ### A brief comparison @@ -81,8 +97,8 @@ influenced by [Factor](http://factorcode.org) and ```typescript // define word to compute dot product of two vectors -const dotp = pf.word([pf.vmul, [pf.add], 0, pf.mapl]); -// another word to normalize a vector (re-uses `dotp`) +const dotp = pf.word([pf.vmul, [pf.add], 0, pf.foldl]); +// another word to normalize a vector (uses `dotp`) const normalize = pf.word([pf.dup, pf.dup, dotp, pf.sqrt, pf.vdiv]); // `word(...)` creates a functional composition of given body @@ -90,10 +106,10 @@ const normalize = pf.word([pf.dup, pf.dup, dotp, pf.sqrt, pf.vdiv]); // i.e. normalize = vdiv(sqrt(dotp(dup(dup(ctx))))); // `unwrap` retrieves a value/section of the result stack -unwrap(dotp([[ [1, 2, 3], [4, 5, 6] ]])) +pf.unwrap(dotp([[ [1, 2, 3], [4, 5, 6] ]])) // 32 -unwrap(normalize([[ [10, -10, 0] ]])) +pf.unwrap(normalize([[ [10, -10, 0] ]])) // [ 0.7071067811865475, -0.7071067811865475, 0 ] ``` @@ -130,12 +146,13 @@ however the pointfree method and use of a stack as sole communication medium between different sub-processes **can** be more flexible, since each function ("word" in Concatenative-programming-speak) can consume or produce any number of intermediate values from/on the stack. -Furthermore, on-stack quotations can be used for dynamic programming -approaches and conditionals can be used to cause non-linear controlflow. +Furthermore, on-stack quotations and dataflow combinators can be used +for dynamic programming approaches and conditionals can be used to cause +non-linear controlflow. ## Status -BETA - in active development +ALPHA - in active development, API still undergoing major changes ## Installation @@ -167,12 +184,15 @@ The `StackContext` tuple consists of: space for internal data - **env** - arbitrary data object defining the current environment -Each program function ("word") accepts a `StackContext` -tuple and can arbitrarily modify both its stacks and/or environment and -returns the updated context (usually the same instance as passed in, but -could also produce a new one). Any side effects are allowed. +Each program function ("word") accepts a `StackContext` tuple and can +arbitrarily modify both its stacks and/or environment and must return +the updated context (usually the same instance as passed in, but could +also produce a new one). Any side effects are allowed. -A `StackProgram` is an array of stack functions and non-function values. The latter are replaced by calls to `push` which pushes the given value on the stack as is. Therefore, a stack program like: `[1, 2, pf.add]` compiles to: +A `StackProgram` is an array of stack functions and non-function values. +The latter are replaced by calls to `push` which pushes the given value +on the stack as is. Therefore, a stack program like: `[1, 2, pf.add]` +compiles to: ``` pf.add(pf.push(2)(pf.push(1)())) @@ -190,7 +210,8 @@ approach to document the effect a word has on the stack structure. The items in front of the `--` describe the relevant state of the stack before the execution of a word (the args expected/consumed by the word). The part after the `--` is the state of the stack after execution (the -results). If no args are given on the LHS, the word consumes no args. If no args are given on the RHS, no result values are produced. +results). If no args are given on the LHS, the word consumes no args. If +no args are given on the RHS, no result values are produced. (Note: **TOS** = Top Of Stack) @@ -253,7 +274,8 @@ maddU([3, 5, 10]); Factoring is a crucial aspect of developing programs in concatenative languages. The general idea is to decompose a larger solution into -smaller re-usable units, words, quotations. +smaller re-usable units, words, quotations. These often extremely small +words can be much easier tested and reused. ```typescript // compute square of x @@ -261,17 +283,17 @@ smaller re-usable units, words, quotations. const pow2 = pf.word([pf.dup, pf.mul]); // test word with given (partial) stack context -pow2([[-10]]) -// [ [ 100 ] ] +pf.unwrap(pow2([[-10]])) +// 100 // compute magnitude of 2d vector (using `pow2`) // ( x y -- mag ) const mag2 = pf.wordU([ - pow2, // ( x y -- x y^2 ) - pf.swap, // ( x y^2 -- y^2 x ) - pow2, // ( y^2 x -- y^2 x^2 ) - pf.add, // ( y^2 x^2 -- sum ) - pf.sqrt + // `bia` is a combinator, + // which applies quotation to both inputs + [pow2], pf.bia, // ( x*x y*y ) + pf.add, // ( x*x+y*y ) + pf.sqrt // ( sqrt(x*x+y*y) ) ]); mag2([[-10, 10]]) @@ -281,10 +303,12 @@ mag2([[-10, 10]]) ### Quotations A `StackProgram` residing as data on the stack is called a quotation. -Quoatations enable a form of dynamic meta programming and are used by -several built-in words. Quoations are used like lambdas / anonymous -functions in traditional functional programming, though **they're not -closures**. Quotations are executed via `execq`. +Quotations enable a form of dynamic meta programming and are used by +several built-in words and combinators. Quoations are used like lambdas +/ anonymous functions in traditional functional programming, are +executed in the current environment, but needn't be complete units of +execution. Quotations can be nested, composed and are executed via +`exec`. This example uses a quoted form of the above `pow2` word: @@ -294,7 +318,7 @@ pf.runU( // push quotation on stack [pf.dup, pf.mul], // execute - pf.execq, + pf.exec, ], // initial (partial) stack context [[10]] @@ -304,14 +328,17 @@ pf.runU( #### Currying & composing quotations -Since quoatations are just arrays, we can treat them as data. E.g. The +Since quoatations are just arrays, we can treat them as data, i.e. **the functional composition of two quotations is the same as concatenating -two arrays: +two arrays**: ``` +const add10 = [10, pf.add]; +const mul10 = [10, pf.mul]; + // `cat` is used to concatenate arrays // the result quotation computes: `(x+10)*10` -pf.runU([ [10, pf.add], [10, pf.mul], pf.cat, pf.execq], [[1]]) +pf.runU([ add10, mul10, pf.cat, pf.exec ], [[1]]) // 110 ``` @@ -319,10 +346,12 @@ As with [partial application](https://en.wikipedia.org/wiki/Partial_application) in functional programming, we can "curry" quotations and use `pushl` to prepend (or `pushr` to append) arguments to a given quotation (array). +Also see [the section about combinators](#dataflow-combinators) for more +advanced options. ```typescript // build & execute curried quotation -pf.run([10, [pf.add], pf.pushl, pf.execq], [[13]]); +pf.run([10, [pf.add], pf.pushl, pf.exec], [[13]]); // 23 ``` @@ -333,54 +362,155 @@ in a larger word/program (i.e. as a form of inlining code). // a quotation is just an array of values/words // this function is a quotation generator const tupleQ = (n) => [n, pf.collect]; -// predefine fixed size tuples -const pair = tupleQ(2); -const triple = tupleQ(3); - // define another quotation which takes an id and // when executed stores TOS under `id` key in current environment const storeQ = (id) => [id, pf.store] -// define word which inlines given quotation and `storeQ` -// when executed first runs quotation -// then stores result in current environment object -const storeID = (id, quot) => pf.word([...quot, ...storeQ(id)]); - -// alternatively we could write: -const storeID = (id, quot) => - pf.word([quot, pf.execq, storeQ(id), pf.execq]); +// define word which inlines both `tupleQ` and `storeQ` +const storeID = (id, size) => pf.word([...tupleQ(size), ...storeQ(id)]); // transform stack into tuples, stored in env // `runE()` only returns the result environment pf.runE( - [storeID("a", pair), storeID("b", triple)], - // (`ctx()` completes a partial definition) + [storeID("a", 2), storeID("b", 3)], + // (`ctx()` creates a complete StackContext tuple) pf.ctx([1, 2, 3, 4, 5]) ); // { a: [ 4, 5 ], b: [ 1, 2, 3 ] } +``` -// same again without quotations -pf.runE( - [2, pf.collect, "a", pf.store, 3, pf.collect, "b", pf.store], - // stack context tuple [DS, RS, ENV] - [[1, 2, 3, 4, 5], [], {}] -); -// { a: [ 4, 5 ], b: [ 1, 2, 3 ] } +### Dataflow combinators + +Combinators are higher-order constructs, enabling powerful data +processing patterns, e.g. applying multiple quotations to single or +multiple values, preserving/excluding stack values during processing etc. + +Most of these combinators have been ported from the +[Factor](http://docs.factorcode.org:8080/content/article-dataflow-combinators.html) +language. + +Btw. the number suffixes indicate the number of values or quotations +each combinator deals with... not all versions are shown here. + +#### `dip / dip2 / dip3 / dip4` + +Removes one or more stack values before applying quotation, then +restores them again after. Most other combinators are internally built +on `dip` and/or `keep`. + +```ts +// remove `20` before executing quot, then restores after +// with the effect of apply qout to 2nd topmost value (here: 10) +pf.run([10, 20, [pf.inc], pf.dip])[0] +// [11, 20] + +// dip2 removes & restores 2 values +pf.run([1, 2, 3, [10, pf.add], pf.dip2])[0] +// [11, 2, 3] ``` +#### `keep / keep2 / keep3` + +Calls a quotation with a value on the d-stack, restoring the value after +quotation finished. + +```ts +// here `add` would normally consume two stack values +// but `keep2` restores them again after the quot has run +pf.run([1, 2, [pf.add], pf.keep2])[0] +// [3, 1, 2] +``` + +#### `bi / bi2 / bi3 / tri / tri2 / tri3` + +`bi` takes one value and two quotations. Applies first quot to the +value, then applies second quot to the same value. + +```ts +pf.run([2, [10, pf.add], [10, pf.mul], pf.bi])[0] +// [12, 20] + +// `bi3` takes 3 stack values and 2 quots (hence "bi") +pf.run([2, 10, 100, [pf.add, pf.add], [pf.mul, pf.mul], pf.bi3])[0] +// [112, 2000] +``` + +`tri` takes 3 quotations, else same as `bi`: + +```ts +pf.run([10, [pf.dec], [pf.dup, pf.mul], [pf.inc], pf.tri])[0] +// [9, 100, 11] +``` + +#### `bis / bis2 / tris / tris2` + +`bis` applies first quot `p` to `x`, then applies 2nd quot `q` to `y`. + +( x y p q -- px qy ) + +```ts +pf.run([10, 20, [pf.inc], [pf.dec], pf.bis])[0] +// [11, 19] + +// bis2 expects quotations to take 2 args +// computes: 10+20 and 30-40 +pf.run([10, 20, 30, 40, [pf.add], [pf.sub], pf.bis2])[0] +// [30, -10] +``` + +#### `bia / bia2 / tria / tria2` + +Applies the quotation `q` to `x`, then to `y`. + +( x y q -- qx qy ) + +```ts +pf.run([10, 20, [pf.inc], pf.bia])[0] +// [11, 21] + +// tria2 takes 6 values and applies quot 3x pairwise +// i.e. 10+20, 30+40, 50+60 +pf.run([10, 20, 30, 40, 50, 60, [pf.add], pf.tria2])[0] +// [30, 70, 110] +``` + +See [tests](https://github.com/thi-ng/umbrella/tree/master/packages/pointfree/test/index.ts#L579) for more examples... + ### Array transformations -The DSL includes several array transforming words and constructs, incl. array/vector math ops, splitting, deconstructing, push/pull (both LHS/RHS) and the `mapl` & `mapll` words, both of which act as generalization for `map`, `filter`, `mapcat` and `reduce`. The only difference between `mapl` and `mapll` is that the former does **not** produce a result array (only flat results pushed on stack), whereas `mapll` always produces a new array. +The DSL includes several array transforming words and constructs, incl. +array/vector math ops, splitting, deconstructing, push/pull (both +LHS/RHS) and the `mapl` & `mapll` words, both of which act as +generalization for `map`, `filter`, `mapcat` and `reduce`. The only +difference between `mapl` and `mapll` is that the former does **not** +produce a result array (only flat results pushed on stack), whereas +`mapll` always produces a new array. -`mapl` takes an array and a quotation. Loops over array, pushes each value on the stack and applies quotation for each. +`mapl` takes an array and a quotation. Loops over array, pushes each +value on the stack and applies quotation for each. ```typescript // multiply each array item * 10 pf.runU([[1, 2, 3, 4], [10, pf.mul], pf.mapll]); // [ 10, 20, 30, 40 ] +// same packaged as standalone function +const map_mul10 = pf.word([[10, pf.mul], pf.mapll, pf.unwrap]); +map_mul10([[[1, 2, 3, 4]]]); +// [ 10, 20, 30, 40 ] + +// the above case can also be solved more easily via vector math words +// multiply vector * scalar +pf.runU([[1, 2, 3, 4], 10, pf.vmul]); +// [ 10, 20, 30, 40 ] + +// multiply vector * vector +pf.runU([[1, 2, 3, 4], [10, 20, 30, 40], pf.vmul]); +// [ 10, 40, 90, 160 ] + // drop even numbers, duplicate odd ones -pf.runU([[1, 2, 3, 4], [pf.dup, pf.even, pf.cond(pf.drop, pf.dup)], pf.mapll]) +// here using nested quotations (`condq` is explained further below) +pf.runU([[1, 2, 3, 4], [pf.dup, pf.even, [pf.drop], [pf.dup], pf.condq], pf.mapll]) // [ 1, 1, 3, 3 ] // reduction example (using `mapl`) @@ -389,20 +519,36 @@ pf.runU([0, [1, 2, 3, 4], [pf.add], pf.mapl]) // 10 // using `foldl` allows a different (better) argument order -// for reduction purposes +// for reduction purposes (uses `mapl` internally) +// ( arr q init -- reduction ) pf.runU([[1, 2, 3, 4], [pf.add], 0, pf.foldl]) // 10 ``` +#### Bind stack values to object keys + +`bindkeys` takes an array of keys and target object, then pops & binds +deeper stack values to their respective keys in object. Pushes result +object back on stack at the end. Throws error if there're less remaining +stack values than keys in given array. + +```typescript +runU([1, 2, 3, ["a","b","c"], {}, bindkeys]) +// { c: 3, b: 2, a: 1 } +``` + +#### Combine array transform op with deeper stack values + ```typescript // helper word to extract a 8bit range from a 32bit int -// ( x s -- x (x>>s)&0xff ) +// `x` is the orig number, `s` bit shift amount +// ( x s -- x byte ) const extractByte = pf.word([ pf.over, // ( x s x ) pf.swap, // ( x x s ) pf.lsru, // ( x x>>>s ) 0xff, // ( x x>>>s 0xff ) - pf.bitand // ( x (x>>s)&0xff ) + pf.bitand // ( x (x>>>s)&0xff ) ]); // decompose a number into 4 bytes @@ -411,7 +557,6 @@ const extractByte = pf.word([ const splitBytes = pf.word([[24, 16, 8, 0], [extractByte, pf.swap], pf.mapl, pf.drop]); // decompose the number 0xdecafbad into 4 bytes -// the array defines the bitshift offsets for each byte splitBytes([[0xdecafbad]]); // [ [ 222, 202, 251, 173 ] ] // in hex: [ [ 0xde, 0xca, 0xfb, 0xad ] ] @@ -461,25 +606,79 @@ classify(-1); ### Loops `loop` takes two quotations (a test and a body). Executes body as long -as test produces a truthy result. +as test produces a truthy result. There's also `loopq` which reads its +arguments (same as `loop`) from the stack. ```typescript // print countdown from 3 pf.run( - pf.loop( + [ // test [pf.dup, pf.ispos], // ( x -- x bool ) // loop body - ["counter: ", pf.over, pf.add, pf.print, pf.dec] // ( x -- x-1 ) - ), + ["counter: ", pf.over, pf.add, pf.print, pf.dec], // ( x -- x-1 ) + pf.loopq + ], // initial stack context - [[3]]); + [[3]] +); // counter: 3 // counter: 2 // counter: 1 // [ [ 0 ] ] ``` +Alternatively, the `dotimes` construct is more suitable for simple +counter based iterations. Like `loopq` it's not an higher-order word and +works with a body quotation, which is executed `n` times. + +```typescript +pf.run([3, ["counter: ", pf.swap, pf.add, pf.print], pf.dotimes]) +// counter: 0 +// counter: 1 +// counter: 2 +``` + +`loop`/`loopq` and `dotimes` can be used to create more complex/custom +looping constructs: + +```typescript +// 2D range/grid loop +// +// (cols rows body -- ? ) +// +// iterates over `rows` as outer and `cols` as inner loop +// executes body quotation with this stack effect +// ( x y -- ) +const loop2 = pf.word([ + pf.maptos(pf.word), // first compile body + pf.movdr, // move body move to r-stack + [ + pf.over, + [pf.over, pf.cprd, pf.exec], pf.dotimes, + pf.drop, + ], pf.dotimes, + pf.drop, // cleanup both stacks + pf.rdrop, +]); + +pf.run([2, 3, [pf.vec2, pf.print], loop2]); +// [ 0, 0 ] +// [ 1, 0 ] +// [ 0, 1 ] +// [ 1, 1 ] +// [ 0, 2 ] +// [ 1, 2 ] +// [ [], [], {} ] + +// To keep/collect the grid coordinates for future use +// use `vec2` and `invrot` to rotate them 2 places down the stack +// the last 2 words `dsp, collect` are used to group +// all stack items into a single tuple +pf.runU([2, 3, [pf.vec2, pf.invrot], loop2, pf.dsp, pf.collect]); +// [ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ], [ 1, 1 ], [ 0, 2 ], [ 1, 2 ] ] +``` + ### In-place stack value transformation The `maptos()`, `map2()` higher order words can be used to transform @@ -490,13 +689,12 @@ stack items in place using vanilla JS functions: back result. The arg order is (TOS, TOS-1) - this is how all primitive math ops are implemented -```typescript - -``` - ### R-stack usage -The second stack ("R-stack") is useful to store interim processing state without having to resort to complex stack shuffling ops. There're several words available for moving data between main ("D-stack") and the r-stack and to manipulate the structure of the R-stack itself. +The second stack ("R-stack") is useful to store interim processing state +without having to resort to complex stack shuffling ops. There're +several words available for moving data between main ("D-stack") and the +r-stack and to manipulate the structure of the R-stack itself. ```typescript // this example partitions the main stack into triples @@ -546,13 +744,13 @@ pf.runU([ // [ [ 1, 2 ], [ 3, 4, 5 ], [ 6, 7, 8 ] ] ``` - TODO more examples forthcoming ## Core vocabulary By default, each word checks for stack underflow and throws an error if -there are insufficient values on the stack. These checks can be disabled by calling `pf.safeMode(false)`. +there are insufficient values on the stack. These checks can be disabled +by calling `pf.safeMode(false)`. Note: Some of the words are higher-order functions, accepting arguments at word construction time and return a pre-configured stack function. @@ -563,11 +761,12 @@ at word construction time and return a pre-configured stack function. | --- | --- | --- | | `drop` | `( x -- )` | remove TOS | | `drop2` | `( x y -- )` | remove top 2 vals | -| `dropIf` | `( x -- ? )` | remove only if TOS truthy | +| `dropif` | `( x -- ? )` | remove only if TOS truthy | | `dsp` | `( -- stack.length )` | push d-stack depth | | `dup` | `( x -- x x )` | duplicate TOS | | `dup2` | `( x y -- x y x y )` | duplicate top 2 vals | -| `dupIf` | `( x -- x x? )` | dup only if TOS truthy | +| `dup3` | `( x y z -- x y z x y z )` | duplicate top 3 vals | +| `dupif` | `( x -- x x? )` | dup only if TOS truthy | | `maptos(fn)` | `( x -- f(x) )` | transform TOS w/ `f` | | `map2(fn)` | `( x y -- f(y, x) )` | reduce top 2 vals with `f`, single result | | `nip` | `( x y -- y )` | remove `x` from stack | @@ -594,12 +793,21 @@ at word construction time and return a pre-configured stack function. | `cpdr` | `( x -- x )` (d-stack effect) | copy d-stack TOS on r-stack | | `cprd` | `( -- x )` (d-stack effect) | copy r-stack TOS on d-stack | -### Dynamic execution +### Word & quotation execution / combinators | Word | Stack effect | Description | | --- | --- | --- | -| `exec` | ` ( w -- ? )` | call TOS as (compiled) word w/ curr ctx | -| `execq` | ` ( q -- ? )` | execute TOS as quotation w/ curr ctx| +| `exec` | `( w -- ? )` | call TOS as (compiled) word w/ curr ctx | +| `dip` | `( x q -- .. x )` | | +| `dip2` | `( x y q -- .. x y )` | | +| `dip3` | `( x y z q -- .. x y z )` | | +| `dip4` | `( x y z w q -- .. x y z w )` | | +| `keep` | `( x q -- .. x )` | | +| `keep2` | `( x y q -- .. x y )` | | +| `keep3` | `( x y z q -- .. x y z )` | | +| `bi` | `( x p q -- pres qres )` | | +| `bi2` | `( x y p q -- pres qres )` | | +| `bi3` | `( x y z p q -- pres qres )` | | ### Primitive math @@ -617,8 +825,13 @@ at word construction time and return a pre-configured stack function. | `odd` | `( x -- bool )` | true, if `x` is odd | | `min` | `( x y -- min(x, y) )` | | `max` | `( x y -- max(x, y) )` | +| `log` | `( x -- log(x) )` | | `pow` | `( x y -- pow(x, y) )` | +| `rand` | `( -- Math.random() )` | | `sqrt` | `( x -- sqrt(x) )` | +| `sin` | `( x -- sin(x) )` | +| `cos` | `( x -- cos(x) )` | +| `atan2` | `( x y -- atan2(y, x) )` | | `lsl` | `( x y -- x<>y )` | | `lsru` | `( x y -- x>>>y )` | @@ -661,12 +874,14 @@ at word construction time and return a pre-configured stack function. | Word | Stack effect | Description | | --- | --- | --- | | `at` | `( obj k -- obj[k] )` | `obj` can be array/obj/string | +| `bindkeys` | `(v1 v2 .. [k1 k2 ..] obj -- obj )` | bind key/value pairs in `obj` | | `collect` | `( ... n -- [...] )` | tuple of top `n` vals | | `foldl` | `( arr q init -- x )` | like `mapl`, but w/ `init` val for reduction | | `length` | `( x -- x.length )` | length of arraylike | +| `list` | `( -- [] )` | create new empty array | | `mapl` | `( arr q -- ? )` | transform array w/ quotation (no explicit result array) | | `mapll` | `( arr q -- ? )` | transform array w/ quotation | -| `storeAt` | `( val obj k -- )` | `obj` can be array/obj | +| `obj` | `( -- {} )` | create new empty object | | `pushl` | `( x arr -- arr )` | push `x` on LHS of array | | `pushr` | `( arr x -- arr )` | push `x` on RHS of array | | `popr` | `( arr -- arr arr[-1] )` | extract RHS of array as new TOS | @@ -675,19 +890,24 @@ at word construction time and return a pre-configured stack function. | `pull3` | `( arr -- x y z arr )` | short for: `[pull2, pull]` | | `pull4` | `( arr -- a b c d arr )` | short for: `[pull2, pull2]` | | `split` | `( arr x -- [...] [...] )` | split array at index `x` | +| `storeat` | `( val obj k -- )` | `obj` can be array/obj | | `tuple(n)` | `( ... -- [...] )` | HOF, like `collect`, but w/ predefined size | +| `vec2` | `( x y -- [x, y] )` | same as `tuple(2)` | +| `vec3` | `( x y z -- [x, y, z] )` | same as `tuple(3)` | +| `vec4` | `( x y z w -- [x, y, z, w] )` | same as `tuple(4)` | | `vadd` | `( a b -- c )` | add 2 arrays (or array + scalar) | | `vsub` | `( a b -- c )` | subtract 2 arrays (or array + scalar) | | `vmul` | `( a b -- c )` | multiply 2 arrays (or array + scalar) | | `vdiv` | `( a b -- c )` | divide 2 arrays (or array + scalar) | | `op2v(f)` | `( a b -- c )` | HOF word gen, e.g. `vadd` is based on | + ### I/O | Word | Stack effect | Description | | --- | --- | --- | | `print` | `( x -- )` | `console.log(x)` | | `printds` | `( -- )` | print out D-stack | -| `printrs` | `( -- )` | print out R-stack +| `printrs` | `( -- )` | print out R-stack | ### Control flow @@ -700,6 +920,16 @@ depending if TOS was truthy or not. Note: Unlike JS `if() {...} else {...}` constructs, the actual conditional is **not** part of this word (only the branches are). +#### `condq` + +Non-HOF version of `cond`, expects `test` result and both branches on +d-stack. Executes `thenq` word/quotation if `test` is truthy, else runs +`elseq`. + +``` +( test thenq elseq -- ? ) +``` + #### `cases(cases: IObjectOf)` Higher order word. Essentially like JS `switch`. Takes an object of @@ -716,6 +946,26 @@ the stack before execution. Takes a `test` and `body` stack program. Applies test to TOS and executes body. Repeats while test is truthy. +#### `loopq` + +Non-HOF version of `loop`. Expects test result and body quotation/word +on d-stack. + +``` +( testq bodyq -- ? ) +``` + +#### `dotimes` + +``` +( n body -- ? ) +``` + +Pops `n` and `body` from d-stack and executes given `body` word / +quotation `n` times. In each iteration pushes current counter on d-stack +prior to executing body. With empty body acts as finite range generator +0 .. n. + ### Word creation and execution #### `word(prog: StackProgram, env?: StackEnv, mergeEnv = false)` diff --git a/packages/pointfree/package.json b/packages/pointfree/package.json index 6c60606661..7b20b9eabb 100644 --- a/packages/pointfree/package.json +++ b/packages/pointfree/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pointfree", - "version": "0.3.0", + "version": "0.6.2", "description": "Pointfree functional composition / Forth style stack execution engine", "main": "./index.js", "typings": "./index.d.ts", @@ -16,26 +16,26 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1" + "@thi.ng/api": "^2.1.2" }, "keywords": [ "composition", "concatenative", + "dataflow", "DSL", "ES6", "Forth", "functional", "pipeline", + "pointfree", "stack", "data transformation", "typescript" diff --git a/packages/pointfree/src/index.ts b/packages/pointfree/src/index.ts index fcac014a45..08df2d675f 100644 --- a/packages/pointfree/src/index.ts +++ b/packages/pointfree/src/index.ts @@ -75,6 +75,11 @@ const $ = SAFE ? (stack: Stack, n: number) => $n(stack.length, n) : () => { }; +export { + $ as ensureStack, + $n as ensureStackN +} + const $stackFn = (f: StackProc) => isArray(f) ? word(f) : f; @@ -99,6 +104,69 @@ export const unwrap = ([stack]: StackContext, n = 1) => tos(stack) : stack.slice(Math.max(0, stack.length - n)); +//////////////////// Dynamic words & quotations //////////////////// + +/** + * Higher order word. Takes a StackProgram and returns it as StackFn to + * be used like any word. Unknown stack effect. + * + * If the optional `env` is given, uses a shallow copy of that + * environment (one per invocation) instead of the current one passed by + * `run()` at runtime. If `mergeEnv` is true (default), the user + * provided env will be merged with the current env (also shallow + * copies). This is useful in conjunction with `pushenv()` and `store()` + * or `storekey()` to save results of sub procedures in the main env. + * + * Note: The provided (or merged) env is only active within the + * execution scope of the word. + * + * ( ? -- ? ) + * + * @param prog + * @param env + * @param mergeEnv + */ +export const word = (prog: StackProgram, env?: StackEnv, mergeEnv = true) => { + const w: StackFn = compile(prog); + return env ? + mergeEnv ? + (ctx: StackContext) => (w([ctx[0], ctx[1], { ...ctx[2], ...env }]), ctx) : + (ctx: StackContext) => (w([ctx[0], ctx[1], { ...env }]), ctx) : + w; +}; + +/** + * Like `word()`, but automatically calls `unwrap()` on result context + * to produced unwrapped value/tuple. + * + * **Importatant:** Words defined with this function CANNOT be used as + * part of a larger stack program, only for standalone use. + * + * @param prog + * @param n + * @param env + * @param mergeEnv + */ +export const wordU = (prog: StackProgram, n = 1, env?: StackEnv, mergeEnv = true) => { + const w: StackFn = compile(prog); + return env ? + mergeEnv ? + (ctx: StackContext) => unwrap(w([ctx[0], ctx[1], { ...ctx[2], ...env }]), n) : + (ctx: StackContext) => unwrap(w([ctx[0], ctx[1], { ...env }]), n) : + (ctx: StackContext) => unwrap(w(ctx), n); +}; + +/** + * Executes TOS as stack function and places result back on d-stack. TOS + * MUST be a valid word or quotation. + * + * ( x -- x() ) + * + * @param ctx + */ +export const exec = (ctx: StackContext) => + ($(ctx[0], 1), $stackFn(ctx[0].pop())(ctx)); + //////////////////// Operator generators //////////////////// /** @@ -286,6 +354,21 @@ export const dup2 = (ctx: StackContext) => { return ctx; }; +/** + * Duplicates top 3 vals on d-stack. + * + * ( x y -- x y x y ) + * + * @param ctx + */ +export const dup3 = (ctx: StackContext) => { + const stack = ctx[0]; + let n = stack.length - 3; + $n(n, 0); + stack.push(stack[n], stack[n + 1], stack[n + 2]); + return ctx; +}; + /** * If TOS is truthy then push copy of it on d-stack: * @@ -510,6 +593,23 @@ export const rswap = _swap(1); */ export const rswap2 = _swap2(1); +/** + * Like `inc`, but applies to r-stack TOS. + * + * @param ctx + */ +export const rinc = (ctx: StackContext) => + ($(ctx[1], 1), ctx[1][ctx[1].length - 1]++ , ctx); + +/** + * Like `dec`, but applies to r-stack TOS. + * + * @param ctx + */ +export const rdec = (ctx: StackContext) => + ($(ctx[1], 1), ctx[1][ctx[1].length - 1]-- , ctx); + + //////////////////// Math ops //////////////////// /** @@ -540,6 +640,13 @@ export const sub = op2((b, a) => a - b); */ export const div = op2((b, a) => a / b); +/** + * ( x -- 1/x ) + * + * @param ctx + */ +export const oneover = word([1, swap, div]); + /** * ( x y -- x%y ) * @@ -598,6 +705,17 @@ export const pow = op2((b, a) => Math.pow(a, b)); */ export const sqrt = op1(Math.sqrt); +export const log = op1(Math.log); + +export const sin = op1(Math.sin); + +export const cos = op1(Math.cos); + +export const atan2 = op2(Math.atan2); + +export const rand = (ctx: StackContext) => + (ctx[0].push(Math.random()), ctx); + /** * ( x -- bool ) * @@ -763,78 +881,200 @@ export const isneg = op1((x) => x < 0); */ export const isnull = op1((x) => x == null); -//////////////////// Dynamic words & quotations //////////////////// +//////////////////// Dataflow combinators //////////////////// + +// these combinators have been ported from Factor: +// http://docs.factorcode.org:8080/content/article-dataflow-combinators.html /** - * Higher order word. Takes a StackProgram and returns it as StackFn to - * be used like any word. Unknown stack effect. + * Removes `x` from d-stack, calls `q` and restores `x` to the top of + * the d-stack after quotation is finished. * - * If the optional `env` is given, uses a shallow copy of that - * environment (one per invocation) instead of the current one passed by - * `run()` at runtime. If `mergeEnv` is true (default), the user - * provided env will be merged with the current env (also shallow - * copies). This is useful in conjunction with `pushenv()` and `store()` - * or `storekey()` to save results of sub procedures in the main env. + * ( x q -- x ) * - * Note: The provided (or merged) env is only active within the - * execution scope of the word. - * - * ( ? -- ? ) + * Same behavior as: `[swap, movdr, exec, movrd]`, only the current + * implementation doesn't use r-stack and stashes `x` off stack. * - * @param prog - * @param env - * @param mergeEnv + * @param ctx */ -export const word = (prog: StackProgram, env?: StackEnv, mergeEnv = true) => { - const w: StackFn = compile(prog); - return env ? - mergeEnv ? - (ctx: StackContext) => (w([ctx[0], ctx[1], { ...ctx[2], ...env }]), ctx) : - (ctx: StackContext) => (w([ctx[0], ctx[1], { ...env }]), ctx) : - w; +export const dip = (ctx: StackContext) => { + const stack = ctx[0]; + $(stack, 2); + const q = stack.pop(); + const x = stack.pop(); + ctx = $stackFn(q)(ctx); + ctx[0].push(x); + return ctx; }; /** - * Like `word()`, but automatically calls `unwrap()` on result context - * to produced unwrapped value/tuple. + * Removes `x y` from d-stack, calls `q` and restores removed vals + * to the top of the d-stack after quotation is finished. * - * **Importatant:** Words defined with this function CANNOT be used as - * part of a larger stack program, only for standalone use. + * ( x y q -- x y ) + */ +export const dip2 = word([swap, [dip], dip]); + +/** + * Removes `x y z` from d-stack, calls `q` and restores removed + * vals to the top of the d-stack after quotation is finished. * - * @param prog - * @param n - * @param env - * @param mergeEnv + * ( x y z q -- x y z ) */ -export const wordU = (prog: StackProgram, n = 1, env?: StackEnv, mergeEnv = true) => { - const w: StackFn = compile(prog); - return env ? - mergeEnv ? - (ctx: StackContext) => unwrap(w([ctx[0], ctx[1], { ...ctx[2], ...env }]), n) : - (ctx: StackContext) => unwrap(w([ctx[0], ctx[1], { ...env }]), n) : - (ctx: StackContext) => unwrap(w(ctx), n); -}; +export const dip3 = word([swap, [dip2], dip]); /** - * Executes TOS as stack function and places result back on d-stack. + * Removes `x y z w` from d-stack, calls `q` and restores removed + * vals to the top of the d-stack after quotation is finished. * - * ( x -- x() ) + * ( x y z w q -- x y z w ) + */ +export const dip4 = word([swap, [dip3], dip]); + +/** + * Calls a quotation with a value on the d-stack, restoring the value + * after quotation finished. * - * @param ctx + * ( x q -- .. x ) */ -export const exec = (ctx: StackContext) => - ($(ctx[0], 1), ctx[0].pop()(ctx)); +export const keep = word([over, [exec], dip]); /** - * Pops TOS and executes it as stack program. TOS MUST be a valid - * StackProgram (array of values/words, i.e. a quotation). + * Call a quotation with two values on the stack, restoring the values + * after quotation finished. * - * ( x -- ? ) + * ( x y q -- .. x y ) + */ +export const keep2 = word([[dup2], dip, dip2]); + +/** + * Call a quotation with two values on the stack, restoring the values + * after quotation finished. * - * @param ctx + * ( x y z q -- .. x y z ) + */ +export const keep3 = word([[dup3], dip, dip3]); + +/** + * First applies `p` to the value `x`, then applies `q` to the same + * value. + * + * ( x p q -- px qx ) + */ +export const bi = word([[keep], dip, exec]); + +/** + * First applies `p` to the two input values `x y`, then applies `q` to + * the same values. + * + * ( x y p q -- pxy qxy ) + */ +export const bi2 = word([[keep2], dip, exec]); + +/** + * First applies `p` to the three input values `x y z`, then applies `q` + * to the same values. + * + * ( x y z p q -- pxyz qxyz ) + */ +export const bi3 = word([[keep3], dip, exec]); + +/** + * Applies `p` to `x`, then `q` to `x`, and finally `r` to `x` + * + * ( x p q r -- px qx rx ) + */ +export const tri = word([[[keep], dip, keep], dip, exec]); + +/** + * Applies `p` to the two input values `x y`, then same with `q`, and + * finally with `r`. + * + * ( x y p q r -- pxy qxy rxy ) + */ +export const tri2 = word([[[keep2], dip, keep2], dip, exec]); + +/** + * Applies `p` to the three input values `x y z`, then same with `q`, + * and finally with `r`. + * + * ( x y z p q r -- pxyz qxyz rxyz ) + */ +export const tri3 = word([[[keep3], dip, keep3], dip, exec]); + +/** + * Applies `p` to `x`, then applies `q` to `y`. + * + * ( x y p q -- px qy ) + */ +export const bis = word([[dip], dip, exec]); + +/** + * Applies `p` to `a b`, then applies `q` to `c d`. + * + * ( a b c d p q -- pab qcd ) + */ +export const bis2 = word([[dip2], dip, exec]); + +/** + * Applies `p` to `x`, then `q` to `y`, and finally `r` to `z`. + * + * ( x y z p q r -- ) + */ +export const tris = word([[[dip2], dip, dip], dip, exec]); + +/** + * Applies `p` to `u v`, then `q` to `w x`, and finally `r` to `y z`. + * + * ( u v w x y z p q r -- puv qwx ryz ) + */ +export const tris2 = word([[dip4], dip2, bis2]); + +/** + * Applies the quotation `q` to `x`, then to `y`. + * + * ( x y q -- qx qy ) + */ +export const bia = word([dup, bis]); + +/** + * Applies the quotation `q` to `x y`, then to `z w`. + * + * ( x y z w q -- qxy qzw ) + */ +export const bia2 = word([dup, bis2]); + +/** + * Applies the `q` to `x`, then to `y`, and finally to `z`. + * + * ( x y z q -- qx qy qz ) + */ +export const tria = word([dup, dup, tris]); + +/** + * Applies the quotation to `u v`, then to `w x`, and then to `y z`. + * + * ( u v w x y z q -- quv qwx qyz ) */ -export const execq = (ctx: StackContext) => - ($(ctx[0], 1), run(ctx[0].pop(), ctx)); +export const tria2 = word([dup, dup, tris2]); + +/** + * Applies `q` individually to both input vals `x y` and combines + * results with `and`. The final result will be true if both interim + * results were truthy. + * + * ( x y q -- qx && qy ) + */ +export const both = word([bia, and]); + +/** + * Applies `q` individually to both input vals `x y` and combines results with `or`. + * The final result will be true if at least one of the interim results + * was truthy. + * + * ( x y q -- qx || qy ) + */ +export const either = word([bia, or]); //////////////////// Conditionals //////////////////// @@ -846,7 +1086,7 @@ export const execq = (ctx: StackContext) => * Note: Unlike JS `if() {...} else {...}` constructs, the actual * conditional is NOT part of this word. * - * ( x -- ? ) + * ( bool -- ? ) * * @param _then * @param _else @@ -855,6 +1095,23 @@ export const cond = (_then: StackProc, _else: StackProc = nop) => (ctx: StackContext) => ($(ctx[0], 1), $stackFn(ctx[0].pop() ? _then : _else)(ctx)); +/** + * Non-HOF version of `cond`, expects `test` result and both branches on + * d-stack. Executes `thenq` word/quotation if `test` is truthy, else + * runs `elseq`. + * + * ( test thenq elseq -- ? ) + * + * @param ctx + */ +export const condq = (ctx: StackContext) => { + const stack = ctx[0]; + $(stack, 3); + const _else = stack.pop(); + const _then = stack.pop(); + return $stackFn(stack.pop() ? _then : _else)(ctx); +}; + /** * Higher order word. Takes an object of stack programs with keys in the * object being used to check for equality with TOS. If a match is @@ -883,11 +1140,17 @@ export const cases = (cases: IObjectOf) => illegalState(`no matching case for: ${tos}`); }; +export const casesq = (ctx: StackContext) => { + const stack = ctx[0]; + $(stack, 2); + return cases(stack.pop())(ctx); +}; + //////////////////// Loop constructs //////////////////// /** - * Takes a `test` and `body` stack program. Applies test to - * copy of TOS and executes body. Repeats while test is truthy. + * Higher order word. Takes a `test` and `body` stack program. Applies + * test to copy of TOS and executes body. Repeats while test is truthy. * * ( -- ? ) * @@ -916,6 +1179,58 @@ export const loop = (test: StackProc, body: StackProc) => { } }; +/** + * Non-HOF version of `loop`. Expects test result and body quotation / + * word on d-stack. + * + * ( testq bodyq -- ? ) + * + * @param ctx + */ +export const loopq = (ctx: StackContext) => { + const stack = ctx[0]; + $(stack, 2); + const body = stack.pop(); + return loop(stack.pop(), body)(ctx); +}; + +/** + * Executes given `body` word/quotation `n` times. In each iteration + * pushes current counter on d-stack prior to executing body. + * + * ``` + * pf.run([3, ["i=", pf.swap, pf.add, pf.print], pf.dotimes]) + * // i=0 + * // i=1 + * // i=2 + * ``` + * + * With empty body acts as finite range generator 0 .. n: + * + * ``` + * // range gen + * pf.run([3, [], pf.dotimes]) + * [ [ 0, 1, 2 ], [], {} ] + * + * // range gen (collect results as array) + * pf.runU([3, pf.cpdr, [], pf.dotimes, pf.movrd, pf.collect]) + * // [ 0, 1, 2 ] + * ``` + * + * ( n body -- ? ) + * + * @param body + */ +export const dotimes = (ctx: StackContext) => { + let stack = ctx[0]; + $(stack, 2); + const w = $stackFn(stack.pop()); + for (let i = 0, n = stack.pop(); i < n; i++) { + ctx[0].push(i); + ctx = w(ctx); + } + return ctx; +}; //////////////////// Array / list ops //////////////////// @@ -952,6 +1267,17 @@ export const loop = (test: StackProc, body: StackProc) => { export const list = (ctx: StackContext) => (ctx[0].push([]), ctx); +/** + * Pushes new empty JS object on d-stack. + * Same reasoning as for `list`. + * + * ( -- {} ) + * + * @param ctx + */ +export const obj = (ctx: StackContext) => + (ctx[0].push({}), ctx); + /** * Pushes `val` on the LHS of array. * @@ -1192,6 +1518,10 @@ export const collect = (ctx: StackContext) => { */ export const tuple = (n: number | StackFn) => word([n, collect]); +export const vec2 = tuple(2); +export const vec3 = tuple(3); +export const vec4 = tuple(4); + /** * Higher order helper word to convert a TOS tuple/array into a string * using `Array.join()` with given `sep`arator. @@ -1234,6 +1564,36 @@ export const storeat = (ctx: StackContext) => { return ctx; }; +//////////////////// Objects //////////////////// + +/** + * Takes an array of keys and target object, then pops & binds deeper + * stack values to respective keys in object. Pushes result object back + * on stack at the end. Throws error if there're less stack values than + * keys in given array. + * + * ``` + * runU([1,2,3, ["a","b","c"], {}, bindkeys]) + * // { c: 3, b: 2, a: 1 } + * ``` + * + * (v1 v2 .. [k1 k2 ..] obj -- obj ) + * + * @param ctx + */ +export const bindkeys = (ctx: StackContext) => { + const stack = ctx[0]; + $(stack, 2); + const obj = stack.pop(); + const keys = stack.pop(); + $(stack, keys.length); + for (let i = keys.length - 1; i >= 0; i--) { + obj[keys[i]] = stack.pop(); + } + stack.push(obj); + return ctx; +}; + //////////////////// Environment //////////////////// /** @@ -1313,3 +1673,6 @@ export const printds = (ctx: StackContext) => export const printrs = (ctx: StackContext) => (console.log(ctx[1]), ctx); + +export * from "./api"; +export * from "./comp"; diff --git a/packages/pointfree/test/index.ts b/packages/pointfree/test/index.ts index c79b11ca1f..c81669547a 100644 --- a/packages/pointfree/test/index.ts +++ b/packages/pointfree/test/index.ts @@ -513,11 +513,11 @@ describe("pointfree", () => { assert.deepEqual(pf.exec($([1, 2, pf.add]))[0], [3]); }); - it("execq", () => { - assert.throws(() => pf.execq($())); - assert.throws(() => pf.execq($([[pf.add]]))); - assert.throws(() => pf.execq($([[1, pf.add]]))); - assert.deepEqual(pf.execq($([[1, 2, pf.add]]))[0], [3]); + it("exec (quot)", () => { + assert.throws(() => pf.exec($())); + assert.throws(() => pf.exec($([[pf.add]]))); + assert.throws(() => pf.exec($([[1, pf.add]]))); + assert.deepEqual(pf.exec($([[1, 2, pf.add]]))[0], [3]); }); it("cond", () => { @@ -570,4 +570,113 @@ describe("pointfree", () => { assert.deepEqual(pf.wordU([pf.pushenv], 1, { a: 1 })($()), { a: 1 }); assert.deepEqual(pf.wordU([pf.pushenv], 1, { a: 1 }, true)([[], [], { b: 2 }]), { a: 1, b: 2 }); }); + + it("bindkeys", () => { + assert.throws(() => pf.run([1, ["a", "b"], {}, pf.bindkeys])); + assert.deepEqual(pf.run([1, 2, 3, ["a", "b", "c"], {}, pf.bindkeys]), [[{ a: 1, b: 2, c: 3 }], [], {}]); + }); + + it("dip", () => { + assert.deepEqual(pf.run([1, [10], pf.dip])[0], [10, 1]); + assert.deepEqual(pf.run([1, 2, [10, pf.add], pf.dip])[0], [11, 2]); + }); + + it("dip2", () => { + assert.deepEqual(pf.run([1, 2, [10], pf.dip2])[0], [10, 1, 2]); + assert.deepEqual(pf.run([1, 2, 3, [10, pf.add], pf.dip2])[0], [11, 2, 3]); + }); + + it("dip3", () => { + assert.deepEqual(pf.run([1, 2, 3, [10], pf.dip3])[0], [10, 1, 2, 3]); + assert.deepEqual(pf.run([1, 2, 3, 4, [10, pf.add], pf.dip3])[0], [11, 2, 3, 4]); + }); + + it("dip4", () => { + assert.deepEqual(pf.run([1, 2, 3, 4, [10], pf.dip4])[0], [10, 1, 2, 3, 4]); + assert.deepEqual(pf.run([1, 2, 3, 4, 5, [10, pf.add], pf.dip4])[0], [11, 2, 3, 4, 5]); + }); + + it("keep", () => { + assert.deepEqual(pf.run([1, [10, pf.add], pf.keep])[0], [11, 1]); + }); + + it("keep2", () => { + assert.deepEqual(pf.run([1, 2, [pf.add], pf.keep2])[0], [3, 1, 2]); + }); + + it("keep3", () => { + assert.deepEqual(pf.run([1, 2, 3, [pf.add, pf.add], pf.keep3])[0], [6, 1, 2, 3]); + }); + + it("bi", () => { + assert.deepEqual(pf.run([2, [10, pf.add], [10, pf.mul], pf.bi])[0], [12, 20]); + }); + + it("bi2", () => { + assert.deepEqual(pf.run([2, 10, [pf.add], [pf.mul], pf.bi2])[0], [12, 20]); + }); + + it("bi3", () => { + assert.deepEqual(pf.run([2, 10, 100, [pf.add, pf.add], [pf.mul, pf.mul], pf.bi3])[0], [112, 2000]); + }); + + it("tri", () => { + assert.deepEqual(pf.run([10, [pf.dec], [pf.dup, pf.mul], [pf.inc], pf.tri])[0], [9, 100, 11]); + }); + + it("tri2", () => { + assert.deepEqual(pf.run([10, 20, [pf.add], [pf.mul], [pf.sub], pf.tri2])[0], [30, 200, -10]); + }); + + it("tri3", () => { + assert.deepEqual(pf.run([10, 20, 30, [pf.add, pf.add], [pf.mul, pf.mul], [pf.sub, pf.sub], pf.tri3])[0], [60, 6000, 20]); + }); + + it("bis", () => { + assert.deepEqual(pf.run([10, 20, [pf.inc], [pf.dec], pf.bis])[0], [11, 19]); + }); + + it("bis2", () => { + assert.deepEqual(pf.run([10, 20, 30, 40, [pf.add], [pf.sub], pf.bis2])[0], [30, -10]); + }); + + it("tris", () => { + assert.deepEqual(pf.run([10, 20, 30, [pf.inc], [pf.dup, pf.mul], [pf.dec], pf.tris])[0], [11, 400, 29]); + }); + + it("tris2", () => { + assert.deepEqual(pf.run([10, 20, 30, 40, 50, 60, [pf.add], [pf.mul], [pf.sub], pf.tris2])[0], [30, 1200, -10]); + }); + + it("bia", () => { + assert.deepEqual(pf.run([10, 20, [pf.inc], pf.bia])[0], [11, 21]); + }); + + it("bia2", () => { + assert.deepEqual(pf.run([10, 20, 30, 40, [pf.add], pf.bia2])[0], [30, 70]); + }); + + it("tria", () => { + assert.deepEqual(pf.run([10, 20, 30, [pf.inc], pf.tria])[0], [11, 21, 31]); + }); + + it("tria2", () => { + assert.deepEqual(pf.run([10, 20, 30, 40, 50, 60, [pf.add], pf.tria2])[0], [30, 70, 110]); + }); + + it("both", () => { + assert.deepEqual(pf.run([10, 20, [pf.even], pf.both])[0], [true]); + assert.deepEqual(pf.run([11, 20, [pf.even], pf.both])[0], [false]); + assert.deepEqual(pf.run([10, 21, [pf.even], pf.both])[0], [false]); + assert.deepEqual(pf.run([11, 21, [pf.even], pf.both])[0], [false]); + }); + + it("either", () => { + assert.deepEqual(pf.run([10, 20, [pf.even], pf.either])[0], [true]); + assert.deepEqual(pf.run([11, 20, [pf.even], pf.either])[0], [true]); + assert.deepEqual(pf.run([10, 21, [pf.even], pf.either])[0], [true]); + assert.deepEqual(pf.run([11, 21, [pf.even], pf.either])[0], [false]); + }); + + }); diff --git a/packages/resolve-map/CHANGELOG.md b/packages/resolve-map/CHANGELOG.md index 801a55a867..986ae44e5c 100644 --- a/packages/resolve-map/CHANGELOG.md +++ b/packages/resolve-map/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@0.1.3...@thi.ng/resolve-map@0.1.4) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/resolve-map + ## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@0.1.2...@thi.ng/resolve-map@0.1.3) (2018-03-28) diff --git a/packages/resolve-map/README.md b/packages/resolve-map/README.md index 978d7d870b..a69805c3fa 100644 --- a/packages/resolve-map/README.md +++ b/packages/resolve-map/README.md @@ -2,15 +2,18 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/resolve-map.svg)](https://www.npmjs.com/package/@thi.ng/resolve-map) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About DAG resolution of vanilla objects & arrays with internally linked values. It's common practice to use nested JS objects for configuration -purposes. Frequently some values in the object are copies or -derivatives of other values, which can lead to mistakes during -refactoring and/or duplication of effort. +purposes. Frequently some values in the object are copies or derivatives +of other values, which can lead to mistakes during refactoring and/or +duplication of effort. To avoid these issues, this library provides the ability to define single sources of truth, create references (links) to these values and a diff --git a/packages/resolve-map/package.json b/packages/resolve-map/package.json index 598604913b..b631b93394 100644 --- a/packages/resolve-map/package.json +++ b/packages/resolve-map/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/resolve-map", - "version": "0.1.3", + "version": "0.1.4", "description": "DAG resolution of vanilla objects & arrays with internally linked values", "main": "./index.js", "typings": "./index.d.ts", @@ -15,17 +15,15 @@ "test": "rm -rf build && tsc -p test && mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/checks": "^1.3.0", - "@thi.ng/paths": "^1.1.2" + "@thi.ng/checks": "^1.3.1", + "@thi.ng/paths": "^1.1.3" }, "keywords": [ "configuration", diff --git a/packages/rle-pack/CHANGELOG.md b/packages/rle-pack/CHANGELOG.md index ec7ab7ef60..1fd9087730 100644 --- a/packages/rle-pack/CHANGELOG.md +++ b/packages/rle-pack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@0.2.10...@thi.ng/rle-pack@0.2.11) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/rle-pack + ## [0.2.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@0.2.9...@thi.ng/rle-pack@0.2.10) (2018-03-28) diff --git a/packages/rle-pack/README.md b/packages/rle-pack/README.md index 1b411577b5..11d3451898 100644 --- a/packages/rle-pack/README.md +++ b/packages/rle-pack/README.md @@ -1,9 +1,14 @@ # @thi.ng/rle-pack -## Overview +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/rle-pack.svg)](https://www.npmjs.com/package/@thi.ng/rle-pack) -Binary run-length encoding packer/unpacker w/ flexible repeat bit widths. -Written in TypeScript, distributed in ES6. +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + +Binary run-length encoding packer/unpacker w/ flexible repeat bit +widths. Written in TypeScript, distributed in ES6. Encoding format: diff --git a/packages/rle-pack/package.json b/packages/rle-pack/package.json index d35fc67804..27562db6e4 100644 --- a/packages/rle-pack/package.json +++ b/packages/rle-pack/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rle-pack", - "version": "0.2.10", + "version": "0.2.11", "description": "Binary run-length encoding packer w/ flexible repeat bit widths", "main": "./index.js", "typings": "./index.d.ts", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", "benchmark": "^2.1.4", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/bitstream": "^0.4.1" + "@thi.ng/bitstream": "^0.4.2" }, "keywords": [ "binary", diff --git a/packages/router/CHANGELOG.md b/packages/router/CHANGELOG.md index c21556fa5f..cda78c8729 100644 --- a/packages/router/CHANGELOG.md +++ b/packages/router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@0.1.2...@thi.ng/router@0.1.3) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/router + ## [0.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@0.1.1...@thi.ng/router@0.1.2) (2018-03-28) diff --git a/packages/router/README.md b/packages/router/README.md index e19e60add4..1e3393627a 100644 --- a/packages/router/README.md +++ b/packages/router/README.md @@ -2,13 +2,19 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/router.svg)](https://www.npmjs.com/package/@thi.ng/router) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About -Generic router for browser & non-browser based applications with support for: +Generic router for browser & non-browser based applications with support +for: - Declarative route definitions -- Parametric routes, each param with optional value coercion & validation -- Route authentication handler to enable/disable routes based on other state factors +- Parametric routes, each param with optional value coercion & + validation +- Route authentication handler to enable/disable routes based on other + state factors - Fallback route - Enforced initial route (optional) - Route formatting (with params) @@ -22,7 +28,8 @@ yarn add @thi.ng/router **New since 2018-03-15: You can now create a preconfigured app skeleton using @thi.ng/atom, @thi.ng/hdom & @thi.ng/router using the -[create-hdom-app](https://github.com/thi-ng/create-hdom-app) project generator:** +[create-hdom-app](https://github.com/thi-ng/create-hdom-app) project +generator:** ``` yarn create hdom-app my-app @@ -136,4 +143,4 @@ See [further comments in source code](https://github.com/thi-ng/umbrella/blob/ma ## License -© 2018 Karsten Schmidt // Apache Software License 2.0 +© 2014-2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/router/package.json b/packages/router/package.json index 1acc78b59a..fd87634f3c 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/router", - "version": "0.1.2", + "version": "0.1.3", "description": "Generic router for browser & non-browser based applications", "main": "./index.js", "typings": "./index.d.ts", @@ -15,17 +15,15 @@ "test": "rm -rf build && tsc -p test && mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1" + "@thi.ng/api": "^2.1.2" }, "keywords": [ "declarative", diff --git a/packages/rstream-csp/CHANGELOG.md b/packages/rstream-csp/CHANGELOG.md index d6b023612d..976d932985 100644 --- a/packages/rstream-csp/CHANGELOG.md +++ b/packages/rstream-csp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.42](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.41...@thi.ng/rstream-csp@0.1.42) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/rstream-csp + ## [0.1.41](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.40...@thi.ng/rstream-csp@0.1.41) (2018-03-28) diff --git a/packages/rstream-csp/README.md b/packages/rstream-csp/README.md index 66c688957a..c9e592d79d 100644 --- a/packages/rstream-csp/README.md +++ b/packages/rstream-csp/README.md @@ -2,11 +2,14 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/rstream-csp.svg)](https://www.npmjs.com/package/@thi.ng/rstream-csp) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + ## About Adapter bridge between async [CSP -channels](https://github.com/thi-ng/umbrella/tree/master/packages/csp) and -synchronous stream subscriptions/transformations of +channels](https://github.com/thi-ng/umbrella/tree/master/packages/csp) +and synchronous stream subscriptions/transformations of [@thi.ng/rstream](https://github.com/thi-ng/umbrella/tree/master/packages/rstream). ## Installation diff --git a/packages/rstream-csp/package.json b/packages/rstream-csp/package.json index b6314c6c6b..9e24eff0f0 100644 --- a/packages/rstream-csp/package.json +++ b/packages/rstream-csp/package.json @@ -1,7 +1,7 @@ { "name": "@thi.ng/rstream-csp", - "version": "0.1.41", - "description": "TODO", + "version": "0.1.42", + "description": "@thi.ng/csp bridge module for @thi.ng/rstream", "main": "./index.js", "typings": "./index.d.ts", "repository": "https://github.com/thi-ng/umbrella", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/csp": "^0.3.22", - "@thi.ng/rstream": "^1.2.1" + "@thi.ng/csp": "^0.3.23", + "@thi.ng/rstream": "^1.2.2" }, "keywords": [ "bridge", diff --git a/packages/rstream-log/CHANGELOG.md b/packages/rstream-log/CHANGELOG.md index 2b56f71e98..79133bf9a0 100644 --- a/packages/rstream-log/CHANGELOG.md +++ b/packages/rstream-log/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.6.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@0.6.1...@thi.ng/rstream-log@0.6.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/rstream-log + ## [0.6.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@0.6.0...@thi.ng/rstream-log@0.6.1) (2018-03-28) diff --git a/packages/rstream-log/README.md b/packages/rstream-log/README.md index 016887580b..d16d8f7074 100644 --- a/packages/rstream-log/README.md +++ b/packages/rstream-log/README.md @@ -2,8 +2,14 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/rstream-log.svg)](https://www.npmjs.com/package/@thi.ng/rstream-log) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + Extensible, multi-level & multi-hierarchy logging based on -[@thi.ng/rstream](https://github.com/thi-ng/umbrella/tree/master/packages/rstream)s, transformable via +[@thi.ng/rstream](https://github.com/thi-ng/umbrella/tree/master/packages/rstream)s, +transformable via [@thi.ng/transducers](https://github.com/thi-ng/umbrella/tree/master/packages/transducers). ## Installation diff --git a/packages/rstream-log/package.json b/packages/rstream-log/package.json index 1549ae5aea..4114e87268 100644 --- a/packages/rstream-log/package.json +++ b/packages/rstream-log/package.json @@ -1,7 +1,7 @@ { "name": "@thi.ng/rstream-log", - "version": "0.6.1", - "description": "TODO", + "version": "0.6.2", + "description": "Structured, multilevel & hierarchical loggers based on @thi.ng/rstream", "main": "./index.js", "typings": "./index.d.ts", "repository": "https://github.com/thi-ng/umbrella", @@ -16,18 +16,16 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/rstream": "^1.2.1" + "@thi.ng/api": "^2.1.2", + "@thi.ng/rstream": "^1.2.2" }, "keywords": [ "ES6", diff --git a/packages/rstream/CHANGELOG.md b/packages/rstream/CHANGELOG.md index 0c07bfa758..4cf7b442b6 100644 --- a/packages/rstream/CHANGELOG.md +++ b/packages/rstream/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.2.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.2.1...@thi.ng/rstream@1.2.2) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/rstream + ## [1.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.2.0...@thi.ng/rstream@1.2.1) (2018-03-28) diff --git a/packages/rstream/README.md b/packages/rstream/README.md index 449533051f..482cb588cd 100644 --- a/packages/rstream/README.md +++ b/packages/rstream/README.md @@ -2,6 +2,11 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/rstream.svg)](https://www.npmjs.com/package/@thi.ng/rstream) +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + Lightweight reactive multi-tap streams and transducer based transformation pipeline constructs, written in TypeScript. @@ -162,7 +167,11 @@ new rs.StreamMerge({ ### Dataflow graph example -This example uses [synchronized stream merging](https://github.com/thi-ng/umbrella/tree/master/packages/rstream/src/stream-sync.ts#L19) to implement a dataflow graph whose leaf inputs (and their changes) are sourced from a central immutable [atom](https://github.com/thi-ng/umbrella/tree/master/packages/). +This example uses [synchronized stream +merging](https://github.com/thi-ng/umbrella/tree/master/packages/rstream/src/stream-sync.ts#L19) +to implement a dataflow graph whose leaf inputs (and their changes) are +sourced from a central immutable +[atom](https://github.com/thi-ng/umbrella/tree/master/packages/). ```typescript import { Atom } from "@thi.ng/atom/atom"; diff --git a/packages/rstream/package.json b/packages/rstream/package.json index 09acd4afc6..7649354281 100644 --- a/packages/rstream/package.json +++ b/packages/rstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream", - "version": "1.2.1", + "version": "1.2.2", "description": "Reactive multi-tap streams, dataflow & transformation pipeline constructs", "main": "./index.js", "typings": "./index.d.ts", @@ -16,19 +16,17 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1", - "@thi.ng/atom": "^1.2.1", - "@thi.ng/transducers": "^1.7.2" + "@thi.ng/api": "^2.1.2", + "@thi.ng/atom": "^1.2.2", + "@thi.ng/transducers": "^1.7.3" }, "keywords": [ "datastructure", diff --git a/packages/transducers/CHANGELOG.md b/packages/transducers/CHANGELOG.md index 118192d610..d601db11f6 100644 --- a/packages/transducers/CHANGELOG.md +++ b/packages/transducers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.7.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@1.7.2...@thi.ng/transducers@1.7.3) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/transducers + ## [1.7.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@1.7.1...@thi.ng/transducers@1.7.2) (2018-03-28) diff --git a/packages/transducers/README.md b/packages/transducers/README.md index 0c55909950..14ab9e2059 100644 --- a/packages/transducers/README.md +++ b/packages/transducers/README.md @@ -2,7 +2,13 @@ [![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/transducers.svg)](https://www.npmjs.com/package/@thi.ng/transducers) -Lightweight transducer implementations for ES6 / TypeScript (~24KB minified, full lib). +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + +## About + +Lightweight transducer implementations for ES6 / TypeScript (~24KB +minified, full lib). ## TOC @@ -21,23 +27,24 @@ Lightweight transducer implementations for ES6 / TypeScript (~24KB minified, ful This library provides altogether 90+ transducers, reducers and sequence generators (iterators) for composing data transformation pipelines. -The overall concept and many of the core functions offered here are directly -inspired by the original Clojure implementation by Rich Hickey, though the -implementation does differ (also in contrast to some other JS based -implementations) and dozens of less common, but generally highly useful operators -have been added. See full list below. +The overall concept and many of the core functions offered here are +directly inspired by the original Clojure implementation by Rich Hickey, +though the implementation does differ (also in contrast to some other JS +based implementations) and dozens of less common, but generally highly +useful operators have been added. See full list below. The [@thi.ng/rstream](https://github.com/thi-ng/umbrella/tree/master/packages/rstream) -& [@thi.ng/csp](https://github.com/thi-ng/umbrella/tree/master/packages/csp) -partner modules provide related functionality, supplementing features of this -library and depending on it. +& +[@thi.ng/csp](https://github.com/thi-ng/umbrella/tree/master/packages/csp) +partner modules provide related functionality, supplementing features of +this library and depending on it. Since 0.8.0 this project largely supersedes the [@thi.ng/iterators](https://github.com/thi-ng/umbrella/tree/master/packages/iterators) -library for most use cases and offers are more powerful API and potentially -faster execution of composed transformations (due to lack of ES generator -overheads). +library for most use cases and offers are more powerful API and +potentially faster execution of composed transformations (due to lack of +ES generator overheads). ## Installation @@ -48,10 +55,11 @@ yarn add @thi.ng/transducers ## Usage examples **There're several standalone example projects using this library in the -[/examples](https://github.com/thi-ng/umbrella/tree/master/examples) directory.** +[/examples](https://github.com/thi-ng/umbrella/tree/master/examples) +directory.** -Almost all functions can be imported selectively, but for development purposes -full module re-exports are defined. +Almost all functions can be imported selectively, but for development +purposes full module re-exports are defined. ```typescript // full import @@ -154,9 +162,9 @@ tx.reduce( ### Multiplexing / parallel transducer application -`multiplex` and `multiplexObj` can be used to transform values in parallel -using the provided transducers (which can be composed as usual) and results in -a tuple or keyed object. +`multiplex` and `multiplexObj` can be used to transform values in +parallel using the provided transducers (which can be composed as usual) +and results in a tuple or keyed object. ```typescript tx.transduce( @@ -250,8 +258,9 @@ tx.transduce( ### Stream parsing / structuring -The `struct` transducer is simply a composition of: `partitionOf -> partition -> rename -> mapKeys`. -[See code here](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/xform/struct.ts). +The `struct` transducer is simply a composition of: `partitionOf -> +partition -> rename -> mapKeys`. [See code +here](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/xform/struct.ts). ```typescript // Higher-order transducer to convert linear input into structured objects @@ -333,8 +342,9 @@ tx.transduce(tx.comp(tx.scan(tx.count), tx.scan(tx.pushCopy)), tx.push(), [1,1,1 ### Streaming hexdump -This is a higher-order transducer, purely composed from other transducers. -[See code here](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/xform/hex-dump.ts). +This is a higher-order transducer, purely composed from other +transducers. [See code +here](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/xform/hex-dump.ts). ```typescript src = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 33, 48, 49, 50, 51, 126, 122, 121, 120] @@ -417,9 +427,9 @@ tx.transduce(tx.take(1000), tx.frequencies(), tx.choices("abcd", [1, 0.5, 0.25, ## API -_Documentation is slowly forthcoming in the form of doc comments (incl. code -examples) for a growing number the functions listed below. Please see source -code for now._ +_Documentation is slowly forthcoming in the form of doc comments (incl. +code examples) for a growing number the functions listed below. Please +see source code for now._ ### Types @@ -428,12 +438,14 @@ Apart from type aliases, the only real types defined are: #### Reducer Reducers are the core building blocks of transducers. Unlike other -implementations using OOP approaches, a `Reducer` in this lib is a simple -3-element array of functions, each addressing a separate processing step. +implementations using OOP approaches, a `Reducer` in this lib is a +simple 3-element array of functions, each addressing a separate +processing step. -Since v0.6.0 the bundled reducers are all wrapped in functions to provide a -uniform API (and some of them can be preconfigured and/or are stateful -closures). However, it's fine to define stateless reducers as constant arrays. +Since v0.6.0 the bundled reducers are all wrapped in functions to +provide a uniform API (and some of them can be preconfigured and/or are +stateful closures). However, it's fine to define stateless reducers as +constant arrays. ```typescript interface Reducer extends Array { @@ -465,8 +477,8 @@ const push: Reducer = [ ]; ``` -`partition`, `partitionBy`, `streamSort`, `streamShuffle` are (examples of) -transducers making use of their 1-arity completing function. +`partition`, `partitionBy`, `streamSort`, `streamShuffle` are (examples +of) transducers making use of their 1-arity completing function. #### Reduced @@ -478,9 +490,9 @@ class Reduced implements IDeref { } ``` -Simple type wrapper to identify early termination of a reducer. Does not modify -wrapped value by injecting magic properties. Instances can be created via -`reduced(x)` and handled via these helper functions: +Simple type wrapper to identify early termination of a reducer. Does not +modify wrapped value by injecting magic properties. Instances can be +created via `reduced(x)` and handled via these helper functions: #### `reduced(x: any): any` @@ -496,9 +508,9 @@ From Rich Hickey's original definition: > A transducer is a transformation from one reducing function to another -As shown in the examples above, transducers can be dynamically composed (using -`comp()`) to form arbitrary data transformation pipelines without causing large -overheads for intermediate collections. +As shown in the examples above, transducers can be dynamically composed +(using `comp()`) to form arbitrary data transformation pipelines without +causing large overheads for intermediate collections. ```typescript type Transducer = (rfn: Reducer) => Reducer; @@ -537,9 +549,9 @@ function dedupe(): Transducer { #### `comp(f1, f2, ...)` -Returns new transducer composed from given transducers. Data flow is from left -to right. Offers fast paths for up to 10 args. If more are given, composition -is done dynamically via for loop. +Returns new transducer composed from given transducers. Data flow is +from left to right. Offers fast paths for up to 10 args. If more are +given, composition is done dynamically via for loop. #### `compR(rfn: Reducer, fn: (acc, x) => any): Reducer` @@ -547,17 +559,18 @@ Helper function to compose reducers. #### `iterator(tx: Transducer, xs: Iterable): IterableIterator` -Similar to `transduce()`, but emits results as ES6 iterator (and hence doesn't -use a reduction function). +Similar to `transduce()`, but emits results as ES6 iterator (and hence +doesn't use a reduction function). #### `reduce(rfn: Reducer, acc: A, xs: Iterable): A` -Reduces iterable using given reducer and optional initial accumulator/result. +Reduces iterable using given reducer and optional initial +accumulator/result. #### `transduce(tx: Transducer, rfn: Reducer, acc: C, xs: Iterable): C` -Transforms iterable using given transducer and combines results with given -reducer and optional initial accumulator/result. +Transforms iterable using given transducer and combines results with +given reducer and optional initial accumulator/result. ### Transducers @@ -621,7 +634,6 @@ reducer and optional initial accumulator/result. #### `mapVals(fn: (v: A) => B, copy = true): Transducer, IObjectOf>` - #### `movingAverage(n: number): Transducer` #### `movingMedian(n: number, key?: ((x: A) => B), cmp?: Comparator): Transducer` diff --git a/packages/transducers/package.json b/packages/transducers/package.json index 62ad619bd1..38b23f9246 100644 --- a/packages/transducers/package.json +++ b/packages/transducers/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers", - "version": "1.7.2", + "version": "1.7.3", "description": "Lightweight transducer implementations for ES6 / TypeScript", "main": "./index.js", "typings": "./index.d.ts", @@ -16,17 +16,15 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.1.1" + "@thi.ng/api": "^2.1.2" }, "keywords": [ "ES6", diff --git a/packages/unionstruct/CHANGELOG.md b/packages/unionstruct/CHANGELOG.md index 383bf0c3d1..3b6d255711 100644 --- a/packages/unionstruct/CHANGELOG.md +++ b/packages/unionstruct/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/unionstruct@0.1.7...@thi.ng/unionstruct@0.1.8) (2018-04-01) + + + + +**Note:** Version bump only for package @thi.ng/unionstruct + ## [0.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/unionstruct@0.1.6...@thi.ng/unionstruct@0.1.7) (2018-02-18) diff --git a/packages/unionstruct/README.md b/packages/unionstruct/README.md index ed11ae8cb4..e94384f49a 100644 --- a/packages/unionstruct/README.md +++ b/packages/unionstruct/README.md @@ -2,18 +2,23 @@ [![npm](https://img.shields.io/npm/v/@thi.ng/unionstruct.svg)](https://www.npmjs.com/package/@thi.ng/unionstruct) -## Overview +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. -C-style struct, union and bitfield read/write views of ArrayBuffers. Written in -TypeScript, distributed as ES6. +## About + +C-style struct, union and bitfield read/write views of ArrayBuffers. +Written in TypeScript, distributed as ES6. Features: - construct memory mapped JS objects based on given typedef specs - nested structs & unions - packed bitfields (signed / unsigned) -- auto-alignment of fields to respective word boundaries (can be disabled) -- configurable endianess (bitfields currently assume network order / big endian) +- auto-alignment of fields to respective word boundaries (can be + disabled) +- configurable endianess (bitfields currently assume network order / big + endian) - no runtime dependencies, works in node & browser - small: 2.35KB minified, 1.14KB gzipped @@ -31,13 +36,14 @@ yarn add @thi.ng/unionstruct let {struct, union, sizeOf} = require("@thi.ng/unionstruct"); ``` -C-style union types define alternate views of the same data. For example this C -snippet below defines such a type, of which the first 32-bits can be accessed -either via individual bitfields or as combined value. Fields in this union type -can be accessed like `x.flags` (combined) or `x.state.cache` (only bits 9-11 of -`x.flags`). Since all views share the same memory, value changes of one -view are reflected in all others too (of course updating bitfields only modifies -a field's allocated bit range). +C-style union types define alternate views of the same data. For example +this C snippet below defines such a type, of which the first 32-bits can +be accessed either via individual bitfields or as combined value. Fields +in this union type can be accessed like `x.flags` (combined) or +`x.state.cache` (only bits 9-11 of `x.flags`). Since all views share the +same memory, value changes of one view are reflected in all others too +(of course updating bitfields only modifies a field's allocated bit +range). ```c // C @@ -112,18 +118,19 @@ header.state.tag // 12345 ### union(spec: Field[], buf?: ArrayBuffer, offset = 0, align = true, littleEndian = false) => any -Takes an array of field specs (as in example above) and optional ArrayBuffer, -offset etc. If no buffer is given, constructs a new one with minimum size -required by this field spec. Returns an object with enumerable field accessors -and the following additional keys (largely for introspection purposes): +Takes an array of field specs (as in example above) and optional +ArrayBuffer, offset etc. If no buffer is given, constructs a new one +with minimum size required by this field spec. Returns an object with +enumerable field accessors and the following additional keys (largely +for introspection purposes): - `__buffer` - backing ArrayBuffer instance - `__offsets` - **bit offset** in buffer for each field - `__spec` - original field spec array provided - `__size` - computed **bit size** of whole type -All top-level fields in a union share the same start address. -Also see note about [alignment](#alignment) below. +All top-level fields in a union share the same start address. Also see +note about [alignment](#alignment) below. ### struct(spec: Field[], buf?: ArrayBuffer, offset = 0, align = true, littleEndian = false) => any @@ -145,12 +152,12 @@ sizeOf([["a", "u32", 14], ["b", "u32", 6], ["c","u8"]], true); ``` ### Alignment -For unions, if `align` is enabled (default), the entire type's offset will be -aligned to the largest required width. E.g. If any of the top-level fields is -of type `f64`, alignment will be to 8-byte boundaries. If the union contains -nested types, they will be checked recursively and aligned to largest type -found (for structs only the first field has an impact on whole struct -alignment). +For unions, if `align` is enabled (default), the entire type's offset +will be aligned to the largest required width. E.g. If any of the +top-level fields is of type `f64`, alignment will be to 8-byte +boundaries. If the union contains nested types, they will be checked +recursively and aligned to largest type found (for structs only the +first field has an impact on whole struct alignment). | Type | Alignment | |-----------|----------:| @@ -163,13 +170,13 @@ alignment). ### Bitfields Bitfields can only use integer types and support both signed / unsigned -flavors. Successive bitfields are densely packed (no alignment in between). The -max. width of a single field is 32 bits, but an arbitrary number of successive -bitfields can be defined. +flavors. Successive bitfields are densely packed (no alignment in +between). The max. width of a single field is 32 bits, but an arbitrary +number of successive bitfields can be defined. -If `align` is enabled and the last bitfield in a group does not end at a word -boundary, the field will be padded invisibly, based on its type (has no impact -on size of last field). +If `align` is enabled and the last bitfield in a group does not end at a +word boundary, the field will be padded invisibly, based on its type +(has no impact on size of last field). ```js bitfields = struct([ @@ -189,9 +196,11 @@ bitfields.__offsets ## Typescript specifics -The library defines a `FieldType` type alias and `Field` interface to allow for -type checking of field specs (details [here](https://github.com/thi-ng/unionstruct/blob/master/src/index.ts)). -These are exposed in the `index.d.ts` file, bundled in the release version. +The library defines a `FieldType` type alias and `Field` interface to +allow for type checking of field specs (details +[here](https://github.com/thi-ng/umbrella/blob/master/packages/unionstruct/src/index.ts)). +These are exposed in the `index.d.ts` file, bundled in the release +version. # Authors diff --git a/packages/unionstruct/package.json b/packages/unionstruct/package.json index 62277105f3..8f01e0ea5d 100644 --- a/packages/unionstruct/package.json +++ b/packages/unionstruct/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/unionstruct", - "version": "0.1.7", + "version": "0.1.8", "description": "C-style struct, union and bitfield views of ArrayBuffers", "main": "./index.js", "typings": "./index.d.ts", @@ -16,14 +16,12 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "keywords": [ "align", diff --git a/scripts/make-example b/scripts/make-example index 3ffb185f1a..6125010300 100755 --- a/scripts/make-example +++ b/scripts/make-example @@ -20,21 +20,21 @@ cat << EOF > $MODULE/package.json "author": "$AUTHOR <$EMAIL>", "license": "Apache-2.0", "scripts": { - "build": "yarn clean && webpack", - "clean": "rm -rf bundle.*", - "dev": "open index.html && webpack -w", - "debdev": "see index.html && webpack -w" + "build": "webpack --mode production", + "start": "webpack-dev-server --open --mode development --devtool inline-source-map" }, "devDependencies": { - "ts-loader": "^3.3.1", - "typescript": "^2.7.1", - "webpack": "^3.10.0" + "ts-loader": "^4.1.0", + "typescript": "^2.8.1", + "webpack": "^4.4.1", + "webpack-cli": "^2.0.13", + "webpack-dev-server": "^3.1.1" }, "dependencies": { - "@thi.ng/api": "^2.0.3", - "@thi.ng/hdom": "^2.0.0", - "@thi.ng/rstream": "^1.0.0", - "@thi.ng/transducers": "^1.6.1" + "@thi.ng/api": "latest", + "@thi.ng/hdom": "latest", + "@thi.ng/rstream": "latest", + "@thi.ng/transducers": "latest" } } EOF @@ -108,16 +108,14 @@ cat << EOF > $MODULE/README.md git clone https://github.com/thi-ng/umbrella.git cd umbrella/examples/$1 yarn install +yarn start \`\`\` -Then -\`\`\` -# For Mac -yarn dev +## Authors -# For Debian, Ubuntu, Etc. -yarn debdev -\`\`\` +- $AUTHOR + +## License -Once webpack has completed building, refresh your browser... +© 2018 $AUTHOR // Apache Software License 2.0 EOF diff --git a/scripts/make-module b/scripts/make-module index 13f4a1efa3..596104d165 100755 --- a/scripts/make-module +++ b/scripts/make-module @@ -37,21 +37,21 @@ cat << EOF > $MODULE/package.json "scripts": { "build": "yarn run clean && tsc --declaration", "clean": "rm -rf *.js *.d.ts build doc", + "cover": "yarn test && nyc report --reporter=lcov", "doc": "node_modules/.bin/typedoc --mode modules --out doc src", "pub": "yarn run build && yarn publish --access public", - "test": "rm -rf build && tsc -p test && mocha build/test/*.js" + "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "mocha": "^5.0.0", - "ts-loader": "^3.5.0", - "typedoc": "^0.10.0", - "typescript": "^2.7.2", - "webpack": "^3.11.0" + "@types/mocha": "^5.0.0", + "@types/node": "^9.6.1", + "mocha": "^5.0.5", + "nyc": "^11.6.0", + "typedoc": "^0.11.1", + "typescript": "^2.8.1" }, "dependencies": { - "@thi.ng/api": "^2.0.4" + "@thi.ng/api": "^2.1.0" }, "keywords": [ "ES6", @@ -124,7 +124,6 @@ yarn add @thi.ng/$1 \`\`\`typescript import * as $1 from "@thi.ng/$1"; - \`\`\` ## Authors diff --git a/yarn.lock b/yarn.lock index c563147d66..4489e934b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,17 @@ # yarn lockfile v1 +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + "@types/events@*": version "1.1.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-1.1.0.tgz#93b1be91f63c184450385272c47b6496fd028e02" -"@types/fs-extra@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.0.tgz#d3e225b35eb5c6d3a5a782c28219df365c781413" +"@types/fs-extra@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.1.tgz#cd856fbbdd6af2c11f26f8928fd8644c9e9616c9" dependencies: "@types/node" "*" @@ -28,9 +32,9 @@ version "9.12.2" resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.2.tgz#6ee7cd395effe5ec80b515d3ff1699068cd0cd1d" -"@types/lodash@4.14.99": - version "4.14.99" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.99.tgz#e6e10c0a4cc16c7409b3181f1e66880d2fb7d4dc" +"@types/lodash@4.14.104": + version "4.14.104" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80" "@types/marked@0.3.0": version "0.3.0" @@ -40,21 +44,21 @@ version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" -"@types/mocha@^2.2.48": - version "2.2.48" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.48.tgz#3523b126a0b049482e1c3c11877460f76622ffab" +"@types/mocha@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.0.0.tgz#a3014921991066193f6c8e47290d4d598dfd19e6" "@types/node@*": version "9.4.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.0.tgz#b85a0bcf1e1cc84eb4901b7e96966aedc6f078d1" -"@types/node@^9.4.6": - version "9.4.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e" +"@types/node@^9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.1.tgz#e2d374ef15b315b48e7efc308fa1a7cd51faa06c" -"@types/shelljs@0.7.7": - version "0.7.7" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.7.tgz#1f7bfa28947661afea06365db9b1135bbc903ec4" +"@types/shelljs@0.7.8": + version "0.7.8" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.8.tgz#4b4d6ee7926e58d7bca448a50ba442fd9f6715bd" dependencies: "@types/glob" "*" "@types/node" "*" @@ -70,15 +74,18 @@ abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" +accepts@~1.3.4, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" dependencies: - acorn "^4.0.3" + mime-types "~2.1.18" + negotiator "0.6.1" -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" +acorn-dynamic-import@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + dependencies: + acorn "^5.0.0" acorn@^5.0.0: version "5.4.1" @@ -119,10 +126,18 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -141,12 +156,26 @@ ansi-styles@^3.2.0: dependencies: color-convert "^1.9.0" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" + color-convert "^1.9.0" + +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + +any-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" append-transform@^0.4.0: version "0.4.0" @@ -154,7 +183,7 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -193,14 +222,33 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -219,7 +267,7 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -253,15 +301,23 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +ast-types@0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + +ast-types@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@^1.4.0, async@^1.5.0: +async@^1.4.0, async@^1.5.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.2: +async@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -291,6 +347,30 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + babel-generator@^6.18.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" @@ -304,20 +384,522 @@ babel-generator@^6.18.0: source-map "^0.5.6" trim-right "^1.0.1" +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: babel-runtime "^6.22.0" -babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-es2015@^6.9.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-stage-1@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0, babel-register@^6.9.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.16.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -327,7 +909,7 @@ babel-template@^6.16.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -341,7 +923,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -350,10 +932,14 @@ babel-types@^6.18.0, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.18.0: +babylon@^6.17.3, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +babylon@^7.0.0-beta.30: + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -374,6 +960,10 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -395,16 +985,50 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" +binaryextensions@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" + 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" +bluebird@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -426,7 +1050,7 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.3.1: +braces@^2.3.0, braces@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" dependencies: @@ -451,6 +1075,10 @@ browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" @@ -503,6 +1131,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" +buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -527,6 +1163,28 @@ byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -541,6 +1199,18 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + caching-transform@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" @@ -583,7 +1253,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -601,24 +1271,51 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.2.0" +chalk@^2.0.1, chalk@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" +chokidar@^2.0.0, chokidar@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" dependencies: - anymatch "^1.3.0" + anymatch "^2.0.0" async-each "^1.0.0" - glob-parent "^2.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" inherits "^2.0.1" is-binary-path "^1.0.0" - is-glob "^2.0.0" + is-glob "^4.0.0" + normalize-path "^2.1.1" path-is-absolute "^1.0.0" readdirp "^2.0.0" + upath "^1.0.0" optionalDependencies: - fsevents "^1.0.0" + fsevents "^1.1.2" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +chrome-trace-event@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz#90f36885d5345a50621332f0717b595883d5d982" ci-info@^1.0.0: version "1.1.2" @@ -640,12 +1337,35 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + dependencies: + colors "1.0.3" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -674,10 +1394,44 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + dependencies: + mimic-response "^1.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + +clone@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + clone@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + +cloneable-readable@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + cmd-shim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" @@ -710,6 +1464,14 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -731,7 +1493,7 @@ commander@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" -commander@^2.12.1: +commander@^2.12.1, commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -750,6 +1512,24 @@ component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" +compressible@~2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" + dependencies: + mime-db ">= 1.33.0 < 2" + +compression@^1.5.2: + version "1.7.2" + resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + dependencies: + accepts "~1.3.4" + bytes "3.0.0" + compressible "~2.0.13" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.1" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -762,6 +1542,19 @@ concat-stream@^1.4.10: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -776,6 +1569,14 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + conventional-changelog-angular@^1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.4.tgz#47debaf92b75b0bd6b39fcba8f9c70dd97552be6" @@ -926,10 +1727,29 @@ conventional-recommended-bump@^1.2.1: meow "^3.3.0" object-assign "^4.0.1" -convert-source-map@^1.3.0: +convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -938,6 +1758,10 @@ core-js@^2.4.0: version "2.5.3" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" +core-js@^2.4.1, core-js@^2.5.0: + version "2.5.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" + 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" @@ -982,7 +1806,7 @@ cross-spawn@^4: lru-cache "^4.0.1" which "^1.2.9" -cross-spawn@^5.0.1: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -990,6 +1814,16 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -1018,11 +1852,9 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" dargs@^4.0.1: version "4.1.0" @@ -1030,12 +1862,20 @@ dargs@^4.0.1: dependencies: number-is-nan "^1.0.0" +dargs@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + 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" +date-fns@^1.27.2: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -1047,19 +1887,23 @@ dateformat@^1.0.11, dateformat@^1.0.12: get-stdin "^4.0.1" meow "^3.3.0" +dateformat@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" -debug@3.1.0, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" +debug@3.1.0, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" @@ -1071,11 +1915,21 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" -deep-extend@~0.4.0: +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@^0.4.0, deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" @@ -1091,6 +1945,13 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -1110,6 +1971,17 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1118,6 +1990,14 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -1125,6 +2005,14 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-conflict@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -1139,10 +2027,18 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" +detect-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + diff@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" +diff@3.5.0, diff@^3.3.1, diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + diff@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" @@ -1155,6 +2051,23 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -1173,12 +2086,37 @@ duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" +duplexify@^3.4.2, duplexify@^3.5.3: + version "3.5.4" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + 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" +editions@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.3.1: + version "2.5.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.8.tgz#2ab6954619f225e6193b7ac5f7c39c48fefe4380" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -1195,16 +2133,25 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -enhanced-resolve@^3.0.0, enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a" dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" + tapable "^1.0.0" -errno@^0.1.3: +errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: @@ -1216,72 +2163,47 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.39" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" +error@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" + string-template "~0.2.1" + xtend "~4.0.0" -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" +es-abstract@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" dependencies: - d "1" - es5-ext "~0.10.14" + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -1300,17 +2222,24 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -1342,6 +2271,10 @@ execa@^0.8.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -1366,6 +2299,47 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.16.2: + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1383,7 +2357,7 @@ extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.4: +external-editor@^2.0.4, external-editor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" dependencies: @@ -1426,6 +2400,25 @@ fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -1455,6 +2448,18 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -1463,6 +2468,14 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1476,6 +2489,23 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +first-chunk-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" + dependencies: + readable-stream "^2.0.2" + +flow-parser@^0.*: + version "0.69.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.69.0.tgz#378b5128d6d0b554a8b2f16a4ca3e1ab9649f00e" + +flush-write-stream@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1486,6 +2516,10 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + foreground-child@^1.5.3, foreground-child@^1.5.6: version "1.5.6" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" @@ -1505,12 +2539,27 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0, from2@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-extra@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -1527,11 +2576,20 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + 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: +fsevents@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" dependencies: @@ -1555,6 +2613,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.0.2, function-bind@^1.1.1: + 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" @@ -1590,7 +2652,7 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" -get-stream@^3.0.0: +get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -1604,6 +2666,13 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +gh-got@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0" + dependencies: + got "^7.0.0" + is-plain-obj "^1.1.0" + git-raw-commits@^1.3.0, git-raw-commits@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.2.tgz#0766c14d33566ba0094869697e13b0eb06147c07" @@ -1634,6 +2703,19 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +github-username@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417" + dependencies: + gh-got "^6.0.0" + +glob-all@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" + dependencies: + glob "^7.0.5" + yargs "~1.2.6" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -1665,6 +2747,24 @@ glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glo once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -1695,14 +2795,65 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" +got@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +got@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.0.tgz#6ba26e75f8a6cc4c6b3eb1fe7ce4fec7abac8533" + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + graceful-fs@^4.1.11, 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" +grouped-queue@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c" + dependencies: + lodash "^4.17.2" + growl@1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" @@ -1730,6 +2881,10 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -1742,6 +2897,16 @@ has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + dependencies: + has-symbol-support-x "^1.4.1" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1773,6 +2938,12 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +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" + hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -1822,10 +2993,82 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.4.0: + version "0.4.11" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -1838,7 +3081,7 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -iconv-lite@^0.4.17: +iconv-lite@0.4.19, iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -1846,6 +3089,17 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1856,6 +3110,10 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -1867,7 +3125,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -1875,11 +3133,11 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.2, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^3.2.2: +inquirer@^3.2.2, inquirer@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: @@ -1898,10 +3156,41 @@ inquirer@^3.2.2: strip-ansi "^4.0.0" through "^2.3.6" -interpret@^1.0.0: +inquirer@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.1.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^5.5.2" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +internal-ip@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + +interpret@^1.0.0, interpret@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -1912,6 +3201,14 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1944,6 +3241,10 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + is-ci@^1.0.10: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" @@ -1962,6 +3263,10 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -2002,7 +3307,7 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" -is-extglob@^2.1.0: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2034,6 +3339,12 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2054,13 +3365,39 @@ is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + +is-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + dependencies: + symbol-observable "^0.2.2" + is-odd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" dependencies: is-number "^4.0.0" -is-plain-obj@^1.0.0: +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -2086,10 +3423,22 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" -is-retry-allowed@^1.0.0: +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" +is-scoped@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" + dependencies: + scoped-regex "^1.0.0" + is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -2098,6 +3447,10 @@ is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -2112,10 +3465,14 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2138,9 +3495,9 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" +istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" istanbul-lib-hook@^1.1.0: version "1.1.0" @@ -2148,43 +3505,58 @@ istanbul-lib-hook@^1.1.0: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" +istanbul-lib-instrument@^1.10.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.2.0" semver "^5.3.0" -istanbul-lib-report@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" +istanbul-lib-report@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259" dependencies: - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.1.2" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" +istanbul-lib-source-maps@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" dependencies: debug "^3.1.0" - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.1.2" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" +istanbul-reports@^1.1.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" dependencies: handlebars "^4.0.3" +istextorbinary@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53" + dependencies: + binaryextensions "2" + editions "^1.3.3" + textextensions "2" + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -2200,13 +3572,57 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jscodeshift@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.4.1.tgz#da91a1c2eccfa03a3387a21d39948e251ced444a" + dependencies: + async "^1.5.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-es2015 "^6.9.0" + babel-preset-stage-1 "^6.5.0" + babel-register "^6.9.0" + babylon "^6.17.3" + colors "^1.1.2" + flow-parser "^0.*" + lodash "^4.13.1" + micromatch "^2.3.7" + node-dir "0.1.8" + nomnom "^1.8.1" + recast "^0.12.5" + temp "^0.8.1" + write-file-atomic "^1.2.0" + +jscodeshift@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.0.tgz#bdb7b6cc20dd62c16aa728c3fa2d2fe66ca7c748" + dependencies: + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-es2015 "^6.9.0" + babel-preset-stage-1 "^6.5.0" + babel-register "^6.9.0" + babylon "^7.0.0-beta.30" + colors "^1.1.2" + flow-parser "^0.*" + lodash "^4.13.1" + micromatch "^2.3.7" + neo-async "^2.5.0" + node-dir "0.1.8" + nomnom "^1.8.1" + recast "^0.14.1" + temp "^0.8.1" + write-file-atomic "^1.2.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" json-parse-better-errors@^1.0.1: version "1.0.1" @@ -2230,6 +3646,10 @@ json-stringify-safe@^5.0.1, 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" +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -2257,6 +3677,16 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + dependencies: + json-buffer "3.0.0" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2293,9 +3723,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lerna@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.9.0.tgz#303f70bc50b1c4541bdcf54eda13c36fe54401f3" +lerna@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.9.1.tgz#d7d21793ad35ae7733733ced34ce30f5b3bb1abe" dependencies: async "^1.5.0" chalk "^2.1.0" @@ -2337,6 +3767,54 @@ lerna@^2.9.0: write-pkg "^3.1.0" yargs "^8.0.2" +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-observable "^0.2.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.4.2" + stream-to-observable "^0.2.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2401,13 +3879,40 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" -lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +lodash@^4.13.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log-symbols@^2.1.0, log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + +loglevel@^1.4.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" -lodash@^4.13.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +loglevelnext@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e" longest@^1.0.1: version "1.0.1" @@ -2419,14 +3924,14 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: +loud-rejection@^1.0.0, loud-rejection@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@^1.0.0: +lowercase-keys@1.0.0, lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" @@ -2437,12 +3942,25 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + make-dir@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" dependencies: pify "^3.0.0" +make-dir@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + dependencies: + pify "^3.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -2457,9 +3975,9 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked@^0.3.12: - version "0.3.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" +marked@^0.3.17: + version "0.3.19" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" md5-hex@^1.2.0: version "1.3.0" @@ -2478,6 +3996,33 @@ md5.js@^1.3.4: hash-base "^3.0.0" inherits "^2.0.1" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem-fs-editor@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz#dd0a6eaf2bb8a6b37740067aa549eb530105af9f" + dependencies: + commondir "^1.0.1" + deep-extend "^0.4.0" + ejs "^2.3.1" + glob "^7.0.3" + globby "^6.1.0" + mkdirp "^0.5.0" + multimatch "^2.0.0" + rimraf "^2.2.8" + through2 "^2.0.0" + vinyl "^2.0.1" + +mem-fs@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc" + dependencies: + through2 "^2.0.0" + vinyl "^1.1.0" + vinyl-file "^2.0.0" + mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" @@ -2506,13 +4051,21 @@ meow@^3.3.0, meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + merge-source-map@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" dependencies: source-map "^0.6.1" -micromatch@^2.1.5, micromatch@^2.3.11: +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -2548,6 +4101,24 @@ micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -2555,20 +4126,32 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.33.0: +"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.12, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: mime-db "~1.33.0" +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +mime@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.2.tgz#6b4c109d88031d7b5c23635f5b923da336d79121" + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-response@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" @@ -2599,6 +4182,21 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -2606,13 +4204,13 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mocha@^5.0.0, mocha@^5.0.1: +mocha@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac" dependencies: @@ -2627,6 +4225,21 @@ mocha@^5.0.0, mocha@^5.0.1: mkdirp "0.5.1" supports-color "4.4.0" +mocha@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.5.tgz#e228e3386b9387a4710007a641f127b00be44b52" + dependencies: + browser-stdout "1.3.1" + commander "2.11.0" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" + mkdirp "0.5.1" + supports-color "4.4.0" + modify-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" @@ -2635,10 +4248,41 @@ moment@^2.6.0: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +multimatch@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -2664,6 +4308,26 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +neo-async@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + +nice-try@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + +node-dir@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" + +node-forge@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" + node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" @@ -2708,6 +4372,13 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" +nomnom@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -2724,12 +4395,20 @@ normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1: +normalize-path@^2.0.1, normalize-path@^2.1.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" +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -2749,26 +4428,26 @@ 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" -nyc@^11.4.1: - version "11.4.1" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.4.1.tgz#13fdf7e7ef22d027c61d174758f6978a68f4f5e5" +nyc@^11.6.0: + version "11.6.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.6.0.tgz#d9c7b51ffceb6bba099a4683a6adc1b331b98853" dependencies: archy "^1.0.0" arrify "^1.0.1" caching-transform "^1.0.0" - convert-source-map "^1.3.0" + convert-source-map "^1.5.1" debug-log "^1.0.1" default-require-extensions "^1.0.0" find-cache-dir "^0.1.1" find-up "^2.1.0" foreground-child "^1.5.3" glob "^7.0.6" - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.1.2" istanbul-lib-hook "^1.1.0" - istanbul-lib-instrument "^1.9.1" - istanbul-lib-report "^1.1.2" - istanbul-lib-source-maps "^1.2.2" - istanbul-reports "^1.1.3" + istanbul-lib-instrument "^1.10.0" + istanbul-lib-report "^1.1.3" + istanbul-lib-source-maps "^1.2.3" + istanbul-reports "^1.1.4" md5-hex "^1.2.0" merge-source-map "^1.0.2" micromatch "^2.3.11" @@ -2777,8 +4456,8 @@ nyc@^11.4.1: rimraf "^2.5.4" signal-exit "^3.0.1" spawn-wrap "^1.4.2" - test-exclude "^4.1.1" - yargs "^10.0.3" + test-exclude "^4.2.0" + yargs "11.1.0" yargs-parser "^8.0.0" oauth-sign@~0.8.1: @@ -2797,6 +4476,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -2816,18 +4499,42 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0, once@^1.3.3: +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" +onetime@^1.0.0: + version "1.1.0" + resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" dependencies: mimic-fn "^1.0.0" +opn@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + dependencies: + is-wsl "^1.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -2835,6 +4542,21 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -2851,7 +4573,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -2862,10 +4584,32 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + +p-cancelable@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.0.tgz#bcb41d35bf6097fc4367a065b6eb84b9b124eff0" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + dependencies: + p-reduce "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + +p-lazy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" + p-limit@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" @@ -2878,6 +4622,26 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + dependencies: + p-finally "^1.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -2895,6 +4659,14 @@ pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + parse-asn1@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" @@ -2931,6 +4703,14 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -2953,11 +4733,15 @@ path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-key@^2.0.0: +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -2965,6 +4749,10 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -2995,6 +4783,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -3023,10 +4815,24 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + platform@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" +portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -3035,11 +4841,27 @@ prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -process-nextick-args@~2.0.0: +prettier@^1.5.3: + version "1.11.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +private@^0.1.6, private@^0.1.7, private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" @@ -3051,6 +4873,17 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +proxy-addr@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -3069,6 +4902,21 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + dependencies: + duplexify "^3.5.3" + inherits "^2.0.3" + pump "^2.0.0" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -3081,10 +4929,22 @@ q@^1.4.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" +qs@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -3093,6 +4953,14 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -3113,6 +4981,19 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: version "1.2.5" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" @@ -3122,6 +5003,13 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +read-chunk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" + dependencies: + pify "^3.0.0" + safe-buffer "^5.1.1" + read-cmd-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" @@ -3142,6 +5030,13 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -3166,6 +5061,18 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.4, readable-stream@^2.2.9, readable-stream@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" @@ -3187,6 +5094,25 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +recast@^0.12.5: + version "0.12.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + dependencies: + ast-types "0.10.1" + core-js "^2.4.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.14.1: + version "0.14.7" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d" + dependencies: + ast-types "0.11.3" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -3200,10 +5126,22 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -3216,6 +5154,21 @@ regex-not@^1.0.0: dependencies: extend-shallow "^2.0.1" +regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + registry-auth-token@^3.0.1: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" @@ -3229,6 +5182,16 @@ registry-url@^3.0.3: dependencies: rc "^1.0.1" +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + 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" @@ -3247,6 +5210,14 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -3282,19 +5253,53 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" -resolve@^1.1.6, resolve@^1.3.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" +resolve@^1.1.6, resolve@^1.3.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" dependencies: - path-parse "^1.0.5" + exit-hook "^1.0.0" + onetime "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" @@ -3303,18 +5308,26 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + 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.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" @@ -3322,12 +5335,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" -run-async@^2.2.0: +run-async@^2.0.0, run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -3338,14 +5357,90 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +rxjs@^5.4.2, rxjs@^5.5.2: + version "5.5.8" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.8.tgz#b2b0809a57614ad6254c03d7446dea0d83ca3791" + dependencies: + symbol-observable "1.0.1" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.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@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +schema-utils@^0.4.2, schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +scoped-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.9.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + dependencies: + node-forge "0.7.1" + +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serialize-javascript@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + +serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3382,6 +5477,14 @@ setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.10" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" @@ -3399,7 +5502,7 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shelljs@^0.8.1: +shelljs@^0.8.0, shelljs@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.1.tgz#729e038c413a2254c4078b95ed46e0397154a9f1" dependencies: @@ -3415,6 +5518,10 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -3452,6 +5559,24 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -3472,6 +5597,12 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -3482,7 +5613,7 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -3515,6 +5646,29 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdy-transport@^2.0.18: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -3551,6 +5705,12 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + dependencies: + safe-buffer "^5.1.1" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -3558,6 +5718,14 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -3565,6 +5733,13 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + stream-http@^2.7.2: version "2.8.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" @@ -3575,6 +5750,24 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +stream-to-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" + dependencies: + any-observable "^0.2.0" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + 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" @@ -3612,6 +5805,17 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + +strip-bom-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" + dependencies: + first-chunk-stream "^2.0.0" + strip-bom "^2.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -3662,11 +5866,11 @@ supports-color@^3.1.2: dependencies: has-flag "^1.0.0" -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" +supports-color@^5.1.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" dependencies: - has-flag "^2.0.0" + has-flag "^3.0.0" supports-color@^5.2.0: version "5.2.0" @@ -3674,9 +5878,17 @@ supports-color@^5.2.0: dependencies: has-flag "^3.0.0" -tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +symbol-observable@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + +tapable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" tar-pack@^3.4.0: version "3.4.1" @@ -3714,6 +5926,13 @@ temp-write@^3.3.0: temp-dir "^1.0.0" uuid "^3.0.1" +temp@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + tempfile@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" @@ -3721,12 +5940,12 @@ tempfile@^1.1.1: os-tmpdir "^1.0.0" uuid "^2.0.1" -test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" +test-exclude@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" dependencies: arrify "^1.0.1" - micromatch "^2.3.11" + micromatch "^3.1.8" object-assign "^4.1.0" read-pkg-up "^1.0.1" require-main-filename "^1.0.1" @@ -3735,6 +5954,14 @@ text-extensions@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +textextensions@2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" + through2@^2.0.0, through2@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -3746,7 +5973,11 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -timed-out@^4.0.0: +thunky@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" + +timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -3791,6 +6022,15 @@ to-regex@^3.0.1: extend-shallow "^2.0.1" regex-not "^1.0.0" +to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + tough-cookie@~2.3.0: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" @@ -3809,12 +6049,12 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -ts-loader@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-3.5.0.tgz#151d004dcddb4cf8e381a3bf9d6b74c2d957a9c0" +ts-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-4.1.0.tgz#6216e75600941df3270bc4a7125e20aefb2dc5ea" dependencies: chalk "^2.3.0" - enhanced-resolve "^3.0.0" + enhanced-resolve "^4.0.0" loader-utils "^1.0.2" micromatch "^3.1.4" semver "^5.0.1" @@ -3860,6 +6100,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -3868,37 +6115,44 @@ typedoc-default-themes@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227" -typedoc@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.10.0.tgz#898b447248dabf68ecbde9d5ccf5141fda8aa166" +typedoc@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.11.1.tgz#9f033887fd2218c769e1045feb88a1efed9f12c9" dependencies: - "@types/fs-extra" "5.0.0" + "@types/fs-extra" "5.0.1" "@types/handlebars" "4.0.36" "@types/highlight.js" "9.12.2" - "@types/lodash" "4.14.99" + "@types/lodash" "4.14.104" "@types/marked" "0.3.0" "@types/minimatch" "3.0.3" - "@types/shelljs" "0.7.7" + "@types/shelljs" "0.7.8" fs-extra "^5.0.0" handlebars "^4.0.6" highlight.js "^9.0.0" - lodash "^4.13.1" - marked "^0.3.12" + lodash "^4.17.5" + marked "^0.3.17" minimatch "^3.0.0" progress "^2.0.0" shelljs "^0.8.1" typedoc-default-themes "^0.5.0" - typescript "2.7.1" + typescript "2.7.2" -typescript@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.1.tgz#bb3682c2c791ac90e7c6210b26478a8da085c359" - -typescript@^2.7.2: +typescript@2.7.2: version "2.7.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" -uglify-js@^2.6, uglify-js@^2.8.29: +typescript@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" + +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -3911,18 +6165,27 @@ 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" -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" +uglifyjs-webpack-plugin@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043" dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -3932,10 +6195,26 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -3943,20 +6222,56 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +untildify@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.2.tgz#7f1f302055b3fea0f3e81dc78eb36766cb65e3f1" + unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" +upath@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" +url-join@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" dependencies: prepend-http "^1.0.1" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + dependencies: + prepend-http "^2.0.0" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" + dependencies: + querystringify "~1.0.0" + requires-port "~1.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -3982,14 +6297,22 @@ util@0.10.3, util@^0.10.3: dependencies: inherits "2.0.1" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0, uuid@^3.0.1: +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +v8-compile-cache@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -3997,6 +6320,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -4005,19 +6332,55 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vinyl-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" + dependencies: + graceful-fs "^4.1.2" + pify "^2.3.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + strip-bom-stream "^2.0.0" + vinyl "^1.1.0" + +vinyl@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" dependencies: indexof "0.0.1" -watchpack@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" +watchpack@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" dependencies: - async "^2.1.2" - chokidar "^1.7.0" + chokidar "^2.0.2" graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + dependencies: + minimalistic-assert "^1.0.0" wcwidth@^1.0.0: version "1.0.1" @@ -4025,45 +6388,143 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webpack-sources@^1.0.1: +webpack-addons@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a" + dependencies: + jscodeshift "^0.4.0" + +webpack-cli@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.0.13.tgz#6e2bd9ef91345344737217e22e29001ad8537518" + dependencies: + chalk "^2.3.2" + cross-spawn "^6.0.5" + diff "^3.5.0" + enhanced-resolve "^4.0.0" + glob-all "^3.1.0" + global-modules "^1.0.0" + got "^8.2.0" + inquirer "^5.1.0" + interpret "^1.0.4" + jscodeshift "^0.5.0" + listr "^0.13.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + log-symbols "^2.2.0" + mkdirp "^0.5.1" + p-each-series "^1.0.0" + p-lazy "^1.0.0" + prettier "^1.5.3" + resolve-cwd "^2.0.0" + supports-color "^5.3.0" + v8-compile-cache "^1.1.2" + webpack-addons "^1.1.5" + yargs "^11.0.0" + yeoman-environment "^2.0.0" + yeoman-generator "^2.0.3" + +webpack-dev-middleware@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.0.1.tgz#7ffd6d0192883c83d3f262e8d7dec822493c6166" + dependencies: + loud-rejection "^1.6.0" + memory-fs "~0.4.1" + mime "^2.1.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + url-join "^4.0.0" + webpack-log "^1.0.1" + +webpack-dev-server@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.1.tgz#3c0fdd1ba3b50ebc79858a0e6b9ccdd1565b0c24" + dependencies: + ansi-html "0.0.7" + array-includes "^3.0.3" + bonjour "^3.5.0" + chokidar "^2.0.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + import-local "^1.0.0" + internal-ip "1.2.0" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.19" + sockjs-client "1.1.4" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "3.0.1" + webpack-log "^1.1.2" + yargs "9.0.1" + +webpack-log@^1.0.1, webpack-log@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.1.2.tgz#cdc76016537eed24708dc6aa3d1e52189efee107" + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-sources@^1.0.1, webpack-sources@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" +webpack@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.4.1.tgz#b0105789890c28bfce9f392623ef5850254328a4" dependencies: acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" + acorn-dynamic-import "^3.0.0" ajv "^6.1.0" ajv-keywords "^3.1.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" + chrome-trace-event "^0.1.1" + enhanced-resolve "^4.0.0" + eslint-scope "^3.7.1" loader-runner "^2.3.0" loader-utils "^1.1.0" memory-fs "~0.4.1" + micromatch "^3.1.8" mkdirp "~0.5.0" + neo-async "^2.5.0" node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" + schema-utils "^0.4.2" + tapable "^1.0.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" webpack-sources "^1.0.1" - yargs "^8.0.2" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.9, which@^1.3.0: +which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -4087,6 +6548,12 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -4098,7 +6565,7 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.1.4: +write-file-atomic@^1.1.4, write-file-atomic@^1.2.0: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" dependencies: @@ -4132,7 +6599,7 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -4140,6 +6607,10 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -4150,15 +6621,56 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.0.0, yargs-parser@^8.1.0: +yargs-parser@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" dependencies: camelcase "^4.1.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + dependencies: + camelcase "^4.1.0" + +yargs@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -4171,7 +6683,7 @@ yargs@^10.0.3: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^8.1.0" + yargs-parser "^9.0.2" yargs@^8.0.2: version "8.0.2" @@ -4191,6 +6703,12 @@ yargs@^8.0.2: y18n "^3.2.1" yargs-parser "^7.0.0" +yargs@~1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + dependencies: + minimist "^0.1.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" @@ -4199,3 +6717,51 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yeoman-environment@^2.0.0, yeoman-environment@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.0.6.tgz#ae1b21d826b363f3d637f88a7fc9ea7414cb5377" + dependencies: + chalk "^2.1.0" + debug "^3.1.0" + diff "^3.3.1" + escape-string-regexp "^1.0.2" + globby "^6.1.0" + grouped-queue "^0.3.3" + inquirer "^3.3.0" + is-scoped "^1.0.0" + lodash "^4.17.4" + log-symbols "^2.1.0" + mem-fs "^1.1.0" + text-table "^0.2.0" + untildify "^3.0.2" + +yeoman-generator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.3.tgz#19426ed22687ffe05d31526c3f1c2cf67ba768f3" + dependencies: + async "^2.6.0" + chalk "^2.3.0" + cli-table "^0.3.1" + cross-spawn "^5.1.0" + dargs "^5.1.0" + dateformat "^3.0.2" + debug "^3.1.0" + detect-conflict "^1.0.0" + error "^7.0.2" + find-up "^2.1.0" + github-username "^4.0.0" + istextorbinary "^2.1.0" + lodash "^4.17.4" + make-dir "^1.1.0" + mem-fs-editor "^3.0.2" + minimist "^1.2.0" + pretty-bytes "^4.0.2" + read-chunk "^2.1.0" + read-pkg-up "^3.0.0" + rimraf "^2.6.2" + run-async "^2.0.0" + shelljs "^0.8.0" + text-table "^0.2.0" + through2 "^2.0.0" + yeoman-environment "^2.0.5"