diff --git a/.gitignore b/.gitignore index 3b7c9023b4..73fe25942e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,13 +5,15 @@ build dev doc docs +export examples/dataflow-scenegraph examples/hdc examples/hdom-class +examples/hdom-clj +examples/ts-parse .DS_Store tachyons.min.css bundle.* -*.html *.log *.tgz *.js @@ -19,3 +21,5 @@ bundle.* *.bak* *.zip /.gtm/ + +packages/geom-accel diff --git a/README.md b/README.md index a4631f94e7..10565be7f0 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ All / most packages: - auto-generated online documentation at [docs.thi.ng](http://docs.thi.ng) - licensed under Apache Software License 2.0 -There's a steadily growing number (20+) of standalone examples +There's a steadily growing number (30+) of standalone examples (different difficulties, many combining functionality from several packages) in the [examples](./examples) directory. @@ -43,6 +43,7 @@ packages) in the [examples](./examples) directory. | [`@thi.ng/associative`](./packages/associative) | [![version](https://img.shields.io/npm/v/@thi.ng/associative.svg)](https://www.npmjs.com/package/@thi.ng/associative) | [changelog](./packages/associative/CHANGELOG.md) | Alt Set & Map implementations | | [`@thi.ng/atom`](./packages/atom) | [![version](https://img.shields.io/npm/v/@thi.ng/atom.svg)](https://www.npmjs.com/package/@thi.ng/atom) | [changelog](./packages/atom/CHANGELOG.md) | Immutable value wrappers, views, history | | [`@thi.ng/bench`](./packages/bench) | [![version](https://img.shields.io/npm/v/@thi.ng/bench.svg)](https://www.npmjs.com/package/@thi.ng/bench) | [changelog](./packages/bench/CHANGELOG.md) | Basic benchmarking helpers | +| [`@thi.ng/binary`](./packages/binary) | [![version](https://img.shields.io/npm/v/@thi.ng/binary.svg)](https://www.npmjs.com/package/@thi.ng/binary) | [changelog](./packages/binary/CHANGELOG.md) | Assorted binary / bitwise ops, utilities | | [`@thi.ng/bitstream`](./packages/bitstream) | [![version](https://img.shields.io/npm/v/@thi.ng/bitstream.svg)](https://www.npmjs.com/package/@thi.ng/bitstream) | [changelog](./packages/bitstream/CHANGELOG.md) | Bitwise input / output streams | | [`@thi.ng/cache`](./packages/cache) | [![version](https://img.shields.io/npm/v/@thi.ng/cache.svg)](https://www.npmjs.com/package/@thi.ng/cache) | [changelog](./packages/cache/CHANGELOG.md) | In-memory caches / strategies | | [`@thi.ng/checks`](./packages/checks) | [![version](https://img.shields.io/npm/v/@thi.ng/checks.svg)](https://www.npmjs.com/package/@thi.ng/checks) | [changelog](./packages/checks/CHANGELOG.md) | Type & value checks | @@ -52,9 +53,12 @@ packages) in the [examples](./examples) directory. | [`@thi.ng/defmulti`](./packages/defmulti) | [![version](https://img.shields.io/npm/v/@thi.ng/defmulti.svg)](https://www.npmjs.com/package/@thi.ng/defmulti) | [changelog](./packages/defmulti/CHANGELOG.md) | Dynamic multiple dispatch | | [`@thi.ng/dgraph`](./packages/dgraph) | [![version](https://img.shields.io/npm/v/@thi.ng/dgraph.svg)](https://www.npmjs.com/package/@thi.ng/dgraph) | [changelog](./packages/dgraph/CHANGELOG.md) | Dependency graph | | [`@thi.ng/diff`](./packages/diff) | [![version](https://img.shields.io/npm/v/@thi.ng/diff.svg)](https://www.npmjs.com/package/@thi.ng/diff) | [changelog](./packages/diff/CHANGELOG.md) | Array & object diffing | +| [`@thi.ng/dlogic`](./packages/dlogic) | [![version](https://img.shields.io/npm/v/@thi.ng/dlogic.svg)](https://www.npmjs.com/package/@thi.ng/dlogic) | [changelog](./packages/dlogic/CHANGELOG.md) | Digital logic ops / constructs | | [`@thi.ng/dot`](./packages/dot) | [![version](https://img.shields.io/npm/v/@thi.ng/dot.svg)](https://www.npmjs.com/package/@thi.ng/dot) | [changelog](./packages/dot/CHANGELOG.md) | Graphviz DOM & export | +| [`@thi.ng/dsp`](./packages/dsp) | [![version](https://img.shields.io/npm/v/@thi.ng/dsp.svg)](https://www.npmjs.com/package/@thi.ng/dsp) | [changelog](./packages/dsp/CHANGELOG.md) | DSP utils, oscillators | | [`@thi.ng/equiv`](./packages/equiv) | [![version](https://img.shields.io/npm/v/@thi.ng/equiv.svg)](https://www.npmjs.com/package/@thi.ng/equiv) | [changelog](./packages/equiv/CHANGELOG.md) | Deep value equivalence checking | | [`@thi.ng/errors`](./packages/errors) | [![version](https://img.shields.io/npm/v/@thi.ng/errors.svg)](https://www.npmjs.com/package/@thi.ng/errors) | [changelog](./packages/errors/CHANGELOG.md) | Custom error types | +| [`@thi.ng/geom`](./packages/geom) | [![version](https://img.shields.io/npm/v/@thi.ng/geom.svg)](https://www.npmjs.com/package/@thi.ng/geom) | [changelog](./packages/geom/CHANGELOG.md) | Hiccup based VDOM & diffing | | [`@thi.ng/hdom`](./packages/hdom) | [![version](https://img.shields.io/npm/v/@thi.ng/hdom.svg)](https://www.npmjs.com/package/@thi.ng/hdom) | [changelog](./packages/hdom/CHANGELOG.md) | Hiccup based VDOM & diffing | | [`@thi.ng/hdom-canvas`](./packages/hdom-canvas) | [![version](https://img.shields.io/npm/v/@thi.ng/hdom-canvas.svg)](https://www.npmjs.com/package/@thi.ng/hdom-canvas) | [changelog](./packages/hdom-canvas/CHANGELOG.md) | hdom based declarative canvas drawing | | [`@thi.ng/hdom-components`](./packages/hdom-components) | [![version](https://img.shields.io/npm/v/@thi.ng/hdom-components.svg)](https://www.npmjs.com/package/@thi.ng/hdom-components) | [changelog](./packages/hdom-components/CHANGELOG.md) | hdom based UI components | @@ -65,7 +69,9 @@ packages) in the [examples](./examples) directory. | [`@thi.ng/iges`](./packages/iges) | [![version](https://img.shields.io/npm/v/@thi.ng/iges.svg)](https://www.npmjs.com/package/@thi.ng/iges) | [changelog](./packages/iges/CHANGELOG.md) | IGES format geometry serialization | | [`@thi.ng/interceptors`](./packages/interceptors) | [![version](https://img.shields.io/npm/v/@thi.ng/interceptors.svg)](https://www.npmjs.com/package/@thi.ng/interceptors) | [changelog](./packages/interceptors/CHANGELOG.md) | Composable event handlers & processor | | [`@thi.ng/iterators`](./packages/iterators) | [![version](https://img.shields.io/npm/v/@thi.ng/iterators.svg)](https://www.npmjs.com/package/@thi.ng/iterators) | [changelog](./packages/iterators/CHANGELOG.md) | ES6 generators / iterators | +| [`@thi.ng/math`](./packages/math) | [![version](https://img.shields.io/npm/v/@thi.ng/math.svg)](https://www.npmjs.com/package/@thi.ng/math) | [changelog](./packages/math/CHANGELOG.md) | Assorted common math functions & utilities | | [`@thi.ng/memoize`](./packages/memoize) | [![version](https://img.shields.io/npm/v/@thi.ng/memoize.svg)](https://www.npmjs.com/package/@thi.ng/memoize) | [changelog](./packages/memoize/CHANGELOG.md) | Function memoization w/ customizable caching | +| [`@thi.ng/morton`](./packages/morton) | [![version](https://img.shields.io/npm/v/@thi.ng/morton.svg)](https://www.npmjs.com/package/@thi.ng/morton) | [changelog](./packages/morton/CHANGELOG.md) | Z-order-curve / Morton coding | | [`@thi.ng/paths`](./packages/paths) | [![version](https://img.shields.io/npm/v/@thi.ng/paths.svg)](https://www.npmjs.com/package/@thi.ng/paths) | [changelog](./packages/paths/CHANGELOG.md) | Immutable nested object accessors | | [`@thi.ng/pointfree`](./packages/pointfree) | [![version](https://img.shields.io/npm/v/@thi.ng/pointfree.svg)](https://www.npmjs.com/package/@thi.ng/pointfree) | [changelog](./packages/pointfree/CHANGELOG.md) | stack-based DSL & functional composition | | [`@thi.ng/pointfree-lang`](./packages/pointfree-lang) | [![version](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) | Forth-like syntax layer for @thi.ng/pointfree | diff --git a/assets/dot/xml-converter.dot b/assets/dot/xml-converter.dot new file mode 100644 index 0000000000..c4dd90e3d9 --- /dev/null +++ b/assets/dot/xml-converter.dot @@ -0,0 +1,34 @@ +digraph g { + rankdir=LR; + node[fontname="Inconsolata", fontsize="11"]; + edge[arrowsize="0.75", fontname="Inconsolata", fontsize="9"]; + + rank=same { + prettyPrint; + doubleQuote; + trailingComma; + removeTags; + removeAttribs; + xml; + } + + prettyPrint -> formatOpts; + doubleQuote -> formatOpts; + trailingComma -> formatOpts; + + removeTags -> opts; + removeAttribs -> opts; + formatOpts -> opts; + + xml -> main; + opts -> main; + + main -> app -> ui; + + ui -> xml[label="user", style=dashed]; + ui -> prettyPrint[label="user", style=dashed]; + ui -> doubleQuote[label="user", style=dashed]; + ui -> trailingComma[label="user", style=dashed]; + ui -> removeTags[label="user", style=dashed]; + ui -> removeAttribs[label="user", style=dashed]; +} \ No newline at end of file diff --git a/assets/geom/chaikin-closed.svg b/assets/geom/chaikin-closed.svg new file mode 100644 index 0000000000..c439bcea88 --- /dev/null +++ b/assets/geom/chaikin-closed.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/geom/chaikin-open.svg b/assets/geom/chaikin-open.svg new file mode 100644 index 0000000000..04c207342d --- /dev/null +++ b/assets/geom/chaikin-open.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/geom/tessel.svg b/assets/geom/tessel.svg new file mode 100644 index 0000000000..ca7ab57ab7 --- /dev/null +++ b/assets/geom/tessel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/screenshots/xml-converter.png b/assets/screenshots/xml-converter.png new file mode 100644 index 0000000000..16aa3ab321 Binary files /dev/null and b/assets/screenshots/xml-converter.png differ diff --git a/assets/xml-converter.png b/assets/xml-converter.png new file mode 100644 index 0000000000..ca95fc8e79 Binary files /dev/null and b/assets/xml-converter.png differ diff --git a/examples/README.md b/examples/README.md index 1007040b42..16dfc833c0 100644 --- a/examples/README.md +++ b/examples/README.md @@ -37,3 +37,4 @@ If you want to [contribute](../CONTRIBUTING.md) an example, please get in touch | 29 | [transducers-hdom](./transducers-hdom) | Transducer & rstream based hdom UI updates | hdom, rstream, transducers-hdom | basic | | 30 | [triple-query](./triple-query) | Triple store query results & sortable table | atom, hdom, hdom-components, rstream-query, transducers | intermediate | | 31 | [webgl](./webgl) | Canvas component handling | hdom, hdom-components | basic | +| 32 | [xml-converter](./xml-converter) | XML/HTML/SVG to hiccup conversion as you type | rstream, sax, transducers, transducers-hdom | advanced | diff --git a/examples/async-effect/package.json b/examples/async-effect/package.json index 0098aeece5..31052e68e8 100644 --- a/examples/async-effect/package.json +++ b/examples/async-effect/package.json @@ -6,9 +6,9 @@ "license": "Apache-2.0", "scripts": { "clean": "rm -rf .cache build out", - "prepare": "yarn clean && mkdir -p out && cp foo.json out", - "build": "yarn prepare && parcel build index.html -d out --no-source-maps --no-cache --detailed-report --public-url ./", - "start": "yarn prepare && parcel index.html -p 8080 --open -d out" + "prep": "yarn clean && mkdir -p out && cp foo.json out", + "build": "yarn prep && parcel build index.html -d out --no-source-maps --no-cache --detailed-report --public-url ./", + "start": "yarn prep && parcel index.html -p 8080 --open -d out" }, "devDependencies": { "parcel-bundler": "^1.9.7", diff --git a/examples/commit-table-ssr/.gitignore b/examples/commit-table-ssr/.gitignore index 0c5abcab62..aa37efed9a 100644 --- a/examples/commit-table-ssr/.gitignore +++ b/examples/commit-table-ssr/.gitignore @@ -2,4 +2,5 @@ out node_modules yarn.lock +table.html *.js diff --git a/examples/commit-table-ssr/commits.json b/examples/commit-table-ssr/commits.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/examples/commit-table-ssr/commits.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/examples/commit-table-ssr/index.html b/examples/commit-table-ssr/index.html new file mode 100644 index 0000000000..868c182c64 --- /dev/null +++ b/examples/commit-table-ssr/index.html @@ -0,0 +1,17 @@ + + + + + + + + + commit-table-hdom + + + +
+ + + + \ No newline at end of file diff --git a/examples/commit-table-ssr/package.json b/examples/commit-table-ssr/package.json index eb6e093ae1..7de550e95a 100644 --- a/examples/commit-table-ssr/package.json +++ b/examples/commit-table-ssr/package.json @@ -6,9 +6,9 @@ "license": "Apache-2.0", "scripts": { "clean": "rm -rf .cache build out", - "prepare": "yarn clean && mkdir -p out && cp commits.json out", + "prep": "yarn clean && mkdir -p out && cp commits.json out", "build-static": "tsc && node build/server/static.js", - "build": "yarn prepare && parcel build index.html -d out --no-source-maps --no-cache --detailed-report --public-url ./", + "build": "yarn prep && parcel build index.html -d out --no-source-maps --no-cache --detailed-report --public-url ./", "start": "tsc && node build/server/index.js" }, "devDependencies": { diff --git a/examples/commit-table-ssr/src/server/index.ts b/examples/commit-table-ssr/src/server/index.ts index 5ac57b254e..0292329c79 100644 --- a/examples/commit-table-ssr/src/server/index.ts +++ b/examples/commit-table-ssr/src/server/index.ts @@ -1,6 +1,7 @@ import { TLRUCache } from "@thi.ng/cache"; import * as express from "express"; import * as Bundler from "parcel-bundler"; +import * as fs from "fs"; import { Commit } from "../common/api"; import { ctx } from "../common/config"; @@ -13,13 +14,18 @@ import { repoCommits } from "./git"; const rawCache = new TLRUCache(null, { ttl: 60 * 60 * 1000 }); const htmlCache = new TLRUCache(null, { ttl: 60 * 60 * 1000 }); -// console.log("parcel:", Object.keys(parcel)); const bundler = new Bundler("index.html", { outDir: "./out", outFile: "index.html", publicUrl: "/out", }); +const getCommits = async () => { + const commits = [...repoCommits(ctx.repo.path)]; + fs.writeFileSync("commits.json", JSON.stringify(commits)); + return commits; +}; + const app = express(); // route for browser version @@ -34,7 +40,7 @@ app.get("/commits", (_, res) => { // (re)create if missing... rawCache.getSet( ctx.repo.path, - async () => [...repoCommits(ctx.repo.path)] + getCommits ).then( (commits) => res.type("json").send(commits) ) @@ -50,7 +56,7 @@ app.get("/ssr", (_, res) => { async () => buildRepoTableHTML( await rawCache.getSet( ctx.repo.path, - async () => [...repoCommits(ctx.repo.path)] + getCommits ) ) ).then((doc) => res.send(doc)) diff --git a/examples/hdom-canvas-clock/src/index.ts b/examples/hdom-canvas-clock/src/index.ts index 4b3feb3083..e310879045 100644 --- a/examples/hdom-canvas-clock/src/index.ts +++ b/examples/hdom-canvas-clock/src/index.ts @@ -50,7 +50,7 @@ const cancel = start(() => { { translate: [100, 100], stroke: "black", fill: "none", - align: "center", baseLine: "middle", + align: "center", baseline: "middle", __normalize: false }, // rim diff --git a/examples/hdom-canvas-shapes/src/index.ts b/examples/hdom-canvas-shapes/src/index.ts index 6c43014dda..cacd1843cf 100644 --- a/examples/hdom-canvas-shapes/src/index.ts +++ b/examples/hdom-canvas-shapes/src/index.ts @@ -122,7 +122,7 @@ const TESTS = { weight: 1, stroke: "#00f", align: "center", - baseLine: "middle", + baseline: "middle", font: "48px Menlo", __normalize: false }, @@ -211,7 +211,7 @@ const TESTS = { }, ["rect", { fill: "#ff0" }, [-50, -50], 100, 100], ["text", - { fill: "#00f", font: "18px Menlo", align: "center", baseLine: "middle" }, + { fill: "#00f", font: "18px Menlo", align: "center", baseline: "middle" }, [0, 0], new Date().toISOString() ] ]; diff --git a/examples/router-basics/package.json b/examples/router-basics/package.json index 3b799bd14e..c54772b5c2 100644 --- a/examples/router-basics/package.json +++ b/examples/router-basics/package.json @@ -7,9 +7,9 @@ "license": "Apache-2.0", "scripts": { "clean": "rm -rf .cache build out", - "prepare": "yarn clean && mkdir -p out && cp -R assets out", - "build": "yarn prepare && parcel build index.html -d out --no-source-maps --no-cache --detailed-report --public-url ./", - "start": "yarn prepare && parcel index.html -p 8080 --open -d out" + "prep": "yarn clean && mkdir -p out && cp -R assets out", + "build": "yarn prep && parcel build index.html -d out --no-source-maps --no-cache --detailed-report --public-url ./", + "start": "yarn prep && parcel index.html -p 8080 --open -d out" }, "dependencies": { "@thi.ng/atom": "latest", diff --git a/examples/xml-converter/.gitignore b/examples/xml-converter/.gitignore new file mode 100644 index 0000000000..0c5abcab62 --- /dev/null +++ b/examples/xml-converter/.gitignore @@ -0,0 +1,5 @@ +.cache +out +node_modules +yarn.lock +*.js diff --git a/examples/xml-converter/README.md b/examples/xml-converter/README.md new file mode 100644 index 0000000000..c3c9333baa --- /dev/null +++ b/examples/xml-converter/README.md @@ -0,0 +1,90 @@ +# xml-converter + +[Live demo](http://demo.thi.ng/umbrella/xml-converter/) + +This example uses +[@thi.ng/sax](https://github.com/thi-ng/umbrella/tree/master/packages/sax) +to convert XML/HTML/SVG syntax into +[hiccup](https://github.com/thi-ng/umbrella/tree/master/packages/hiccup) +/ JSON syntax and provides several options to filter the parsed tree and +control the resulting output format. + +## Dataflow + +This diagram illustrates the +[@thi.ng/rstream](https://github.com/thi-ng/umbrella/tree/master/packages/rstream) +dataflow topology used by the browser app: + +![dataflow](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/xml-converter.png) + +## Browser version +```bash +git clone https://github.com/thi-ng/umbrella.git +cd umbrella/examples/xml-converter +yarn install +yarn start +``` + +## CLI version + +In addition to the above browser UI, this example can be built as a +**basic** CLI tool to convert & filter files (the result is always +written to stdout). + +```bash +# in this example's project root... +yarn build-cli + +bin/hiccup --help +# Usage: hiccup [options] +# +# Options: +# +# -V, --version output the version number +# -t, --tags remove tags from tree +# -a, --attribs remove attribs from tree +# -v, --var generate TS export var declaration +# -s, --single-quote use single quotes +# -p, --no-pretty disable pretty printing +# -h, --help output usage information + +# Example file +cat << EOF > foo.svg + + + add + Foo bar + + + + + +EOF + +bin/hiccup \ + -v ICON \ # create a target var name + -t title,desc,defs \ # remove tags + -a id,style,stroke,fill,xmlns,width,height,version \ # remove attribs + foo.svg +# export const ICON = +# ["svg", { viewBox: "0 0 10 10" }, +# ["g", +# { +# "fill-rule": "evenodd", +# "stroke-width": 1, +# }, +# ["path", { d: "M6,4 L10,4 L10,6 L6,6 L6,10 L4,10 L4,6 L0,6 L0,4 L4,4 L4,0 L6,0 L6,4 Z" }]]]; +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/examples/xml-converter/bin/hiccup b/examples/xml-converter/bin/hiccup new file mode 100755 index 0000000000..e4b6448d7d --- /dev/null +++ b/examples/xml-converter/bin/hiccup @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +const fs = require("fs"); +const path = require("path"); +const program = require("commander"); +const package = require("../package.json"); +const convert = require("./convert"); +const format = require("./format"); +const utils = require("./utils"); + +program + .version(package.version) + .usage("[options] ") + .option("-t, --tags ", "remove tags from tree", utils.asSet) + .option("-a, --attribs ", "remove attribs from tree", utils.asSet) + .option("-v, --var ", "generate TS export var decl") + .option("-s, --single-quote", "use single quotes") + .option("-p, --no-pretty", "disable pretty printing") + .parse(process.argv); + +if (program.args.length == 0) { + console.log("Please run: hiccup --help"); + process.exit(1); +} + +const xmlFile = path.resolve(program.args[0]); +const quote = program.singleQuote ? `'` : `"`; +const copts = { + format: program.pretty ? + { ...format.DEFAULT_FORMAT, quote, indent: 4 } : + { ...format.COMPACT_FORMAT, quote }, + removeAttribs: program.attribs || new Set(), + removeTags: program.tags || new Set(), +}; + +const xml = fs.readFileSync(xmlFile).toString(); +const hiccup = convert.convertXML(xml, copts); + +console.log( + program.var ? + `export const ${program.var} =\n${hiccup};` : + hiccup +); diff --git a/examples/xml-converter/index.html b/examples/xml-converter/index.html new file mode 100644 index 0000000000..bca5d4683a --- /dev/null +++ b/examples/xml-converter/index.html @@ -0,0 +1,24 @@ + + + + + + + + xml/html/svg-to-hiccup converter + + + + +
+

XML / Hiccup converter

+
+
+ + + + + \ No newline at end of file diff --git a/examples/xml-converter/package.json b/examples/xml-converter/package.json new file mode 100644 index 0000000000..096c7a6f1c --- /dev/null +++ b/examples/xml-converter/package.json @@ -0,0 +1,31 @@ +{ + "name": "xml-converter", + "version": "0.0.1", + "repository": "https://github.com/thi-ng/umbrella", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "clean": "rm -rf .cache build out", + "build": "yarn clean && parcel build index.html -d out --public-url ./ --no-source-maps --no-cache --detailed-report", + "build-cli": "tsc -p tsconfig-cli.json", + "start": "parcel index.html -p 8080 --open" + }, + "devDependencies": { + "parcel-bundler": "^1.9.7", + "terser": "^3.8.2", + "typescript": "^3.0.1" + }, + "dependencies": { + "@thi.ng/rstream": "latest", + "@thi.ng/sax": "latest", + "@thi.ng/strings": "latest", + "@thi.ng/transducers-hdom": "latest", + "commander": "^2.18.0" + }, + "browserslist": [ + "last 3 Chrome versions" + ], + "browser": { + "process": false + } +} \ No newline at end of file diff --git a/examples/xml-converter/src/convert.ts b/examples/xml-converter/src/convert.ts new file mode 100644 index 0000000000..08bf73e1ff --- /dev/null +++ b/examples/xml-converter/src/convert.ts @@ -0,0 +1,140 @@ +import { isString } from "@thi.ng/checks/is-string"; +import { + parse, + ParseElement, + ParseEvent, + Type +} from "@thi.ng/sax"; +import { comp } from "@thi.ng/transducers/func/comp"; +import { pairs } from "@thi.ng/transducers/iter/pairs"; +import { assocObj } from "@thi.ng/transducers/rfn/assoc-obj"; +import { last } from "@thi.ng/transducers/rfn/last"; +import { push } from "@thi.ng/transducers/rfn/push"; +import { transduce } from "@thi.ng/transducers/transduce"; +import { filter } from "@thi.ng/transducers/xform/filter"; +import { map } from "@thi.ng/transducers/xform/map"; +import { DEFAULT_FORMAT, format, FormatOpts } from "./format"; + +export interface ConversionOpts { + format: FormatOpts; + removeTags: Set; + removeAttribs: Set; +} + +export const DEFAULT_OPTS: ConversionOpts = { + format: DEFAULT_FORMAT, + removeAttribs: new Set(), + removeTags: new Set(), +}; + +// converts given XMLish string into formatted hiccup +export const convertXML = (src: string, opts: Partial = {}) => { + let tree = transformTree( + parseXML(src), + { ...DEFAULT_OPTS, ...opts } + ); + return format({ ...DEFAULT_FORMAT, ...opts.format }, "", tree); +}; + +// parses given XMLish string using @thi.ng/sax transducer into a +// sequence of parse events. we only care about the final (or error) +// event, which will be related to the final close tag and contains the +// entire tree +const parseXML = (src: string) => + transduce( + comp( + parse({ trim: true, boolean: true, entities: true }), + filter((e) => e.type === Type.ELEM_END || e.type === Type.ERROR) + ), + last(), + src + ); + +// transforms string of CSS properties into a plain object +const transformCSS = (css: string) => + css.split(";").reduce( + (acc, p) => { + const [k, v] = p.split(":"); + (v != null) && (acc[k.trim()] = parseAttrib([k, v.trim()])[1]); + return acc; + }, + {} + ); + +// takes attrib key-value pair and attempts to coerce / transform its +// value. returns updated pair. +const parseAttrib = (attrib: string[]) => { + let [k, v] = attrib; + if (isString(v)) { + v = v.replace(/[\n\r]+\s*/g, " "); + return k === "style" ? + [k, transformCSS(v)] : + v === "true" ? + [k, true] : + v === "false" ? + [k, false] : + [k, /^[0-9.e+-]+$/.test(v) ? + parseFloat(v) : + v]; + } + return attrib; +}; + +// transforms an entire object of attributes +const transformAttribs = (attribs: any, remove: Set = new Set()) => + transduce( + comp( + filter((a) => !remove.has(a[0])), + map(parseAttrib) + ), + assocObj(), + {}, + pairs(attribs) + ); + +// transforms element name by attempting to form Emmet-like tags +const transformTag = (tag: string, attribs: any) => { + if (attribs.id) { + tag += "#" + attribs.id; + delete attribs.id; + } + if (isString(attribs.class)) { + const classes = attribs.class.replace(/\s+/g, "."); + classes.length && (tag += "." + classes); + delete attribs.class; + } + return tag; +}; + +// recursively transforms entire parse tree +const transformTree = (tree: ParseEvent | ParseElement, opts: ConversionOpts) => { + if (tree == null) { + return ""; + } + if ((tree).type === Type.ERROR) { + return ["error", tree.body]; + } + if (opts.removeTags.has(tree.tag)) { + return; + } + const attribs = transformAttribs(tree.attribs, opts.removeAttribs); + const res: any[] = [transformTag(tree.tag, attribs)]; + if (Object.keys(attribs).length) { + res.push(attribs); + } + if (tree.body) { + res.push(tree.body); + } + if (tree.children && tree.children.length) { + transduce( + comp( + map((t: any) => transformTree(t, opts)), + filter((t) => !!t) + ), + push(), + res, + tree.children + ) + } + return res; +}; diff --git a/examples/xml-converter/src/format.ts b/examples/xml-converter/src/format.ts new file mode 100644 index 0000000000..db99cc652c --- /dev/null +++ b/examples/xml-converter/src/format.ts @@ -0,0 +1,133 @@ +import { isArray } from "@thi.ng/checks/is-array"; +import { isBoolean } from "@thi.ng/checks/is-boolean"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { DEFAULT, defmulti } from "@thi.ng/defmulti"; +import { repeat } from "@thi.ng/strings/repeat"; +import { peek } from "@thi.ng/transducers/func/peek"; + +export interface FormatOpts { + indent: number; + tabSize: number; + lineSep: string; + prefix?: string; + quote: string; + ws: string; + trailingComma: boolean; +} + +export const DEFAULT_FORMAT: FormatOpts = { + indent: 0, + tabSize: 4, + trailingComma: true, + lineSep: "\n", + prefix: "", + quote: `"`, + ws: " " +}; + +export const COMPACT_FORMAT: FormatOpts = { + indent: 0, + tabSize: 0, + trailingComma: false, + lineSep: "", + prefix: "", + quote: `"`, + ws: "" +}; + +// memoized indentations +export const spaces = (n: number) => repeat(" ", n); + +// creates new state with deeper indentation +const indentState = (opts: FormatOpts): FormatOpts => + ({ ...opts, indent: opts.indent + opts.tabSize }); + +// dispatch helper function for the `format` defmulti below +const classify = (x: any) => + isArray(x) ? "array" : isPlainObject(x) ? "obj" : DEFAULT; + +// wraps attrib name in quotes if needed +const formatAttrib = (opts: FormatOpts, x: string) => + /^[a-z]+$/i.test(x) ? x : opts.quote + x + opts.quote; + +// attrib or body value formatter +const formatVal = (opts: FormatOpts, x: any, indent = true) => + isNumber(x) || isBoolean(x) ? + x : + isPlainObject(x) ? + format(indent ? indentState(opts) : opts, "", x) : + opts.quote + x + opts.quote; + +// attrib key-value pair formatter w/ indentation +const formatPair = (opts: FormatOpts, x: any, k: string) => + spaces(opts.indent) + formatAttrib(opts, k) + ":" + opts.ws + + formatVal(opts, x[k], k !== "style"); + +// multiple-dispatch function to format the transformed tree (hiccup +// structure) into a more compact & legible format than produced by +// standard: `JSON.stringify(tree, null, 4)` +export const format = defmulti( + (_, __, x) => classify(x) +); + +// implementation for array values +format.add("array", (opts, res, x) => { + const hasAttribs = isPlainObject(x[1]); + let attribs = hasAttribs ? Object.keys(x[1]) : []; + res += spaces(opts.indent) + "[" + opts.quote + x[0] + opts.quote; + if (hasAttribs) { + res += "," + opts.ws; + res = format( + { + ...indentState(opts), + prefix: `${opts.lineSep}${spaces(opts.indent + opts.tabSize)}` + }, + res, + x[1] + ); + } + // single line if none or only single child + // and if no `style` attrib + if (x.length === (hasAttribs ? 3 : 2) && + attribs.length < 2 && + attribs[0] !== "style" && + classify(peek(x)) === DEFAULT) { + return format({ ...opts, indent: 0 }, res += "," + opts.ws, peek(x)) + "]"; + } + // default format if more children + for (let i = hasAttribs ? 2 : 1; i < x.length; i++) { + res += "," + opts.lineSep; + res = format(indentState(opts), res, x[i]); + } + res += "]"; + return res; +}); + +// implementation for object values (i.e. attributes in this case) +format.add("obj", (opts, res, x) => { + const keys = Object.keys(x); + if (keys.length === 0) { + res += `{}`; + } else if (keys.length === 1 && + (keys[0] !== "style" || Object.keys(x.style).length < 2)) { + res += "{" + opts.ws + formatPair({ ...opts, indent: 0 }, x, keys[0]) + opts.ws + "}"; + } else { + const outer = spaces(opts.indent); + res += opts.prefix + "{" + opts.lineSep; + for (let i = keys.length; --i >= 0;) { + const k = keys[i]; + res += formatPair( + k === "style" ? + { ...indentState(opts), prefix: "" } : + indentState(opts), x, k); + res += (opts.trailingComma || i > 0 ? "," : "") + opts.lineSep; + } + res += outer + "}"; + } + return res; +}); + +// implementation for other values +format.add(DEFAULT, (opts, res, x) => + res += spaces(opts.indent) + formatVal(opts, x)); diff --git a/examples/xml-converter/src/index.ts b/examples/xml-converter/src/index.ts new file mode 100644 index 0000000000..402b9c11ef --- /dev/null +++ b/examples/xml-converter/src/index.ts @@ -0,0 +1,98 @@ +import { stream } from "@thi.ng/rstream/stream"; +import { sync } from "@thi.ng/rstream/stream-sync"; +import { updateDOM } from "@thi.ng/transducers-hdom"; +import { map } from "@thi.ng/transducers/xform/map"; + +import { convertXML } from "./convert"; +import { COMPACT_FORMAT, DEFAULT_FORMAT } from "./format"; +import { app, UI } from "./ui"; +import { xformAsSet } from "./utils"; + +// input streams (reactive state values) +const inputs = { + xml: stream(), + prettyPrint: stream(), + doubleQuote: stream(), + trailingComma: stream(), + removeAttribs: stream(), + removeTags: stream(), + copyButton: stream(), +}; + +// stream combinator to assemble formatter options +const formatOpts = sync({ + src: { + trailingComma: inputs.trailingComma, + doubleQuote: inputs.doubleQuote, + prettyPrint: inputs.prettyPrint, + }, + xform: map( + (opts: any) => ({ + ...(opts.prettyPrint ? DEFAULT_FORMAT : COMPACT_FORMAT), + trailingComma: opts.trailingComma, + quote: opts.doubleQuote ? `"` : `'`, + }) + ) +}); + +// stream combinator to assemble conversion options +const opts = sync({ + src: { + format: formatOpts, + removeAttribs: inputs.removeAttribs.transform(xformAsSet), + removeTags: inputs.removeTags.transform(xformAsSet), + } +}); + +// main stream combinator to create & update UI +const main = sync({ + src: { + src: inputs.xml, + copy: inputs.copyButton, + opts, + } +}).transform( + // convert xml -> hiccup + map((state: any) => ({ + ...state, + hiccup: convertXML(state.src, state.opts) + })), + // transform into hdom tree + map(app(UI.main, inputs)), + // apply to real DOM + updateDOM({ ctx: UI }) +); + +// all inputs need to be initialized +// in order for the UI to be rendered at least once + +// initial options +inputs.removeTags.next("head"); +inputs.removeAttribs.next("id,class"); +inputs.trailingComma.next(true); +inputs.doubleQuote.next(true); +inputs.prettyPrint.next(true); + +inputs.copyButton.next(false); + +// seed input and kick off UI/app +inputs.xml.next( + ` + + foo + + +

+ HTML & Hiccup walk into a bar... +

+
+ + +` +); + +// ParcelJS HMR handling +if (process.env.NODE_ENV !== "production") { + const hot = (module).hot; + hot && hot.dispose(() => main.done()); +} diff --git a/examples/xml-converter/src/ui.ts b/examples/xml-converter/src/ui.ts new file mode 100644 index 0000000000..738453d71d --- /dev/null +++ b/examples/xml-converter/src/ui.ts @@ -0,0 +1,159 @@ +import { mapIndexed } from "@thi.ng/transducers/xform/map-indexed"; +import { handleTab } from "./utils"; + +// converted from: +// https://github.com/IBM/carbon-icons/blob/master/src/svg/copy.svg +const ICON_COPY = + ["svg.mr2", { viewBox: "0 0 16 16", width: "0.7rem", height: "0.7rem", stroke: "white" }, + ["path", { d: "M1,10H0V2c0-1.1,0.9-2,2-2l8,0l0,1L2,1C1.4,1,1,1.5,1,2L1,10z" }], + ["path", { d: "M11,4.2V8h3.8L11,4.2z M15,9h-4c-0.6,0-1-0.4-1-1V4H4.5C4.2,4,4,4.2,4,4.5v10C4,14.8,4.2,15,4.5,15h10 c0.3,0,0.5-0.2,0.5-0.5V9z M11,3c0.1,0,0.3,0.1,0.4,0.1l4.5,4.5C15.9,7.7,16,7.9,16,8v6.5c0,0.8-0.7,1.5-1.5,1.5h-10 C3.7,16,3,15.3,3,14.5v-10C3,3.7,3.7,3,4.5,3H11z" }]]; + +// component styles: +// this object will be provided as hdom user context to all +// component functions +export const UI = { + editor: { + root: { class: "w-50-ns pa3" }, + title: { class: "ma0 mb2" }, + textarea: { class: "w-100.pa2.bn.f7.code.lh-copy" }, + stats: { class: "f7" } + }, + input: { + root: { class: "mb2" }, + label: { class: "dib w-100 w-25-l pv2" }, + input: { class: "w-100 w-75-l pa1 bg-silver white bn" }, + }, + button: { + href: "#", + class: "dib.link.white.pv1.ph2.w4.bn.hover-bg-blue.bg-animate", + }, + copyButton: { + style: { + position: "relative", + top: "-3rem", + left: "0.5rem" + }, + }, + main: { + small: { class: "fw1 ml2 dn dib-l" }, + src: { + class: "bg-washed-green", + autofocus: true, + }, + result: { + success: { + disabled: true, + class: "bg-light-gray" + }, + error: { + disabled: true, + class: "bg-washed-red" + } + }, + } +}; + +// hdom UI root component. this function will be used as stream +// transformer and receives a tuple of xml & formatted hiccup strings. +// defined as closure to avoid using global vars. the `ctx` is the above +// `UI.main` and `inputs` are defined in `index.ts`. +export const app = (ctx: any, inputs: any) => + ({ src, hiccup }) => + ["div.flex-ns", + [editPane, + [ + "XML/HTML source", + ["small", ctx.small, "(must be well formed!)"] + ], + { + ...ctx.src, + onkeydown: handleTab(inputs.xml), + // emitting a new value to the stream will + // re-trigger conversion & UI update + oninput: (e) => inputs.xml.next(e.target.value), + }, + src], + [editPane, + ["Transformed Hiccup / JSON"], + hiccup.indexOf("error") < 0 ? + ctx.result.success : + ctx.result.error, + hiccup, + [copyButton, + { + class: hiccup.indexOf("error") < 0 ? + "bg-green" : + "bg-gray" + }, + inputs.copyButton, + hiccup], + [transformOpts, inputs]]]; + +// configurable editor panel UI component +// (uses Tachyons CSS classes for styling) +const editPane = ({ editor }, title, attribs, value, ...extra) => + ["div", editor.root, + ["h3", editor.title, ...title], + [`textarea.${editor.textarea.class}`, { rows: 16, value, ...attribs }], + ["div", editor.stats, `${value.length} chars`], + ...extra]; + +// configurable input UI component +const input = ({ input }, label, attribs) => + ["div", input.root, + ["label", { ...input.label, for: attribs.id }, label], + ["input", { ...input.input, ...attribs }]]; + + +const iconButton = ({ button }, attribs, icon, label) => + [`a.${button.class}`, { ...button, ...attribs }, icon, label]; + +// button which, when clicked, copies given `text` to clipboard and +// emits true on `stream`. resets stream back to false after given +// `delay` time. +const copyButton = ({ copyButton }, attribs, stream, text, delay = 500) => + [iconButton, + { + ...copyButton, + ...attribs, + onclick: (e) => { + e.preventDefault(); + e.target.blur(); + (navigator).clipboard.writeText(text) + .then( + () => { + setTimeout(() => stream.next(false), delay); + stream.next(true); + }, + () => alert("Couldn't copy to clipboard") + ); + } + }, + ICON_COPY, + stream.deref() ? "Copied" : "Copy" + ]; + +// combined transform options input components +const transformOpts = (_, inputs) => + ["div", + ["h3", "Options"], + mapIndexed( + (i, [label, type, stream]) => { + let v = type === "checkbox" ? "checked" : "value"; + return [input, label, + { + id: "opt" + i, + type, + [v]: stream.deref(), + oninput: (e) => stream.next(e.target[v]) + }]; + }, + [ + ["Remove tags", "text", inputs.removeTags], + ["Remove attributes", "text", inputs.removeAttribs], + ["Pretty print", "checkbox", inputs.prettyPrint], + ["Double quotes", "checkbox", inputs.doubleQuote], + ["Trailing commas", "checkbox", inputs.trailingComma], + ] + ) + ]; diff --git a/examples/xml-converter/src/utils.ts b/examples/xml-converter/src/utils.ts new file mode 100644 index 0000000000..008ad8b5e4 --- /dev/null +++ b/examples/xml-converter/src/utils.ts @@ -0,0 +1,23 @@ +import { splice } from "@thi.ng/strings/splice"; +import { map } from "@thi.ng/transducers/xform/map"; + +export const asSet = (x: string) => + new Set(map((x) => x.trim(), x.split(","))); + +// helper transducer to convert a CSV string into an ES6 Set +export const xformAsSet = map(asSet); + +// key event handler for textareas to override Tab key behavior and +// insert spaces at cursor position instead of changing keyboard focus +export const handleTab = (stream) => + (e: KeyboardEvent) => { + // override tab to insert spaces at edit pos + if (e.key === "Tab") { + e.preventDefault(); + stream.next( + splice((e.target).value, " ", + (e.target).selectionStart + ) + ); + } + }; diff --git a/examples/xml-converter/tsconfig-cli.json b/examples/xml-converter/tsconfig-cli.json new file mode 100644 index 0000000000..8471f0aa29 --- /dev/null +++ b/examples/xml-converter/tsconfig-cli.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "bin", + "target": "es6", + "module": "commonjs" + }, + "include": [ + "./src/**/*.ts" + ] +} \ No newline at end of file diff --git a/examples/xml-converter/tsconfig.json b/examples/xml-converter/tsconfig.json new file mode 100644 index 0000000000..bbf112cc18 --- /dev/null +++ b/examples/xml-converter/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": ".", + "target": "es6", + "sourceMap": true + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index 9ed7ea26dd..e94e220a40 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. +## [4.2.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/api@4.2.1...@thi.ng/api@4.2.2) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/api + + + + + ## [4.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/api@4.2.0...@thi.ng/api@4.2.1) (2018-09-24) diff --git a/packages/api/package.json b/packages/api/package.json index 30720fcae4..cdb59f021a 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/api", - "version": "4.2.1", + "version": "4.2.2", "description": "Common, generic types & interfaces for thi.ng projects", "main": "./index.js", "typings": "./index.d.ts", @@ -28,7 +28,7 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/errors": "^0.1.9" + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "compare", diff --git a/packages/associative/CHANGELOG.md b/packages/associative/CHANGELOG.md index d83bf05f48..c16b614119 100644 --- a/packages/associative/CHANGELOG.md +++ b/packages/associative/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.6.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@0.6.11...@thi.ng/associative@0.6.12) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/associative + + + + + + +## [0.6.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@0.6.10...@thi.ng/associative@0.6.11) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/associative + + + + + + +## [0.6.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@0.6.9...@thi.ng/associative@0.6.10) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/associative + + + + + + +## [0.6.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@0.6.8...@thi.ng/associative@0.6.9) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/associative + + + + + ## [0.6.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@0.6.7...@thi.ng/associative@0.6.8) (2018-09-24) diff --git a/packages/associative/package.json b/packages/associative/package.json index 9383a0446e..2f1968782a 100644 --- a/packages/associative/package.json +++ b/packages/associative/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/associative", - "version": "0.6.8", + "version": "0.6.12", "description": "Alternative Set & Map data type implementations with customizable equality semantics & supporting operations", "main": "./index.js", "typings": "./index.d.ts", @@ -28,13 +28,13 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/compare": "^0.1.9", - "@thi.ng/dcons": "^1.1.8", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/compare": "^0.1.10", + "@thi.ng/dcons": "^1.1.12", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "data structures", diff --git a/packages/atom/CHANGELOG.md b/packages/atom/CHANGELOG.md index efde5b5251..6e54d43fcc 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.5.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@1.5.4...@thi.ng/atom@1.5.5) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/atom + + + + + ## [1.5.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@1.5.3...@thi.ng/atom@1.5.4) (2018-09-24) diff --git a/packages/atom/package.json b/packages/atom/package.json index d1a9fa720d..d9b99bf035 100644 --- a/packages/atom/package.json +++ b/packages/atom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/atom", - "version": "1.5.4", + "version": "1.5.5", "description": "Mutable wrapper for immutable values", "main": "./index.js", "typings": "./index.d.ts", @@ -28,11 +28,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/paths": "^1.6.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/paths": "^1.6.4" }, "keywords": [ "cursor", diff --git a/packages/bench/CHANGELOG.md b/packages/bench/CHANGELOG.md index 6e7645f07a..d5fe017ad8 100644 --- a/packages/bench/CHANGELOG.md +++ b/packages/bench/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.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.2.3...@thi.ng/bench@0.2.4) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/bench + + + + + ## [0.2.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.2.2...@thi.ng/bench@0.2.3) (2018-09-24) diff --git a/packages/bench/package.json b/packages/bench/package.json index b85148ac32..4b201aa343 100644 --- a/packages/bench/package.json +++ b/packages/bench/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bench", - "version": "0.2.3", + "version": "0.2.4", "description": "Basic benchmarking helpers", "main": "./index.js", "typings": "./index.d.ts", diff --git a/packages/binary/.npmignore b/packages/binary/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/binary/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/binary/CHANGELOG.md b/packages/binary/CHANGELOG.md new file mode 100644 index 0000000000..8176ab7399 --- /dev/null +++ b/packages/binary/CHANGELOG.md @@ -0,0 +1,11 @@ +# 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.0 (2018-10-17) + + +### Features + +* **binary:** add [@thi](https://github.com/thi).ng/binary package ([458d4a0](https://github.com/thi-ng/umbrella/commit/458d4a0)) diff --git a/packages/binary/LICENSE b/packages/binary/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/binary/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/binary/README.md b/packages/binary/README.md new file mode 100644 index 0000000000..e5ea94fe48 --- /dev/null +++ b/packages/binary/README.md @@ -0,0 +1,47 @@ +# @thi.ng/binary + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/binary.svg)](https://www.npmjs.com/package/@thi.ng/binary) +![npm downloads](https://img.shields.io/npm/dm/@thi.ng/binary.svg) +[![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?style=flat-square&label=twitter)](https://twitter.com/thing_umbrella) + +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + + + +- [About](#about) +- [Installation](#installation) +- [Dependencies](#dependencies) +- [Usage examples](#usage-examples) +- [Authors](#authors) +- [License](#license) + + + +## About + +Collection of 50+ binary / bitwise operations, conversions, utilities. + +## Installation + +```bash +yarn add @thi.ng/binary +``` + +## Dependencies + +None. + +## Usage examples + +```ts +import * as b from "@thi.ng/binary"; +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/binary/package.json b/packages/binary/package.json new file mode 100644 index 0000000000..52326e6b4b --- /dev/null +++ b/packages/binary/package.json @@ -0,0 +1,46 @@ +{ + "name": "@thi.ng/binary", + "version": "0.1.0", + "description": "Assorted binary / bitwise operations, conversions, utilities.", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/thi-ng/umbrella.git" + }, + "homepage": "https://github.com/thi-ng/umbrella/tree/master/packages/binary", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn run clean && tsc --declaration", + "clean": "rm -rf *.js *.d.ts .nyc_output build coverage 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 && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.5.5", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "typedoc": "^0.11.1", + "typescript": "^3.0.1" + }, + "keywords": [ + "alignment", + "binary", + "bitwise", + "conversion", + "ES6", + "gray code", + "logic", + "math", + "splat", + "swizzle", + "typescript" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/binary/src/align.ts b/packages/binary/src/align.ts new file mode 100644 index 0000000000..244e13c848 --- /dev/null +++ b/packages/binary/src/align.ts @@ -0,0 +1,17 @@ +import { Pow2 } from "./api"; + +/** + * Aligns `addr` to next multiple of `size`. The latter must be a power + * of 2. + * + * @param addr + * @param size + */ +export const align = (addr: number, size: Pow2) => + (size-- , (addr + size) & ~size); + +/** + * Returns true if `addr` is aligned to wordsize `size`. + */ +export const isAligned = (addr: number, size: Pow2) => + !(addr & (size - 1)); diff --git a/packages/binary/src/api.ts b/packages/binary/src/api.ts new file mode 100644 index 0000000000..c1ced3c2b3 --- /dev/null +++ b/packages/binary/src/api.ts @@ -0,0 +1,28 @@ +export type Lane8 = + 0 | 1 | 2 | 3; + +export type Lane4 = + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7; + +export type Lane2 = + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | + 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15; + +export type Bit = + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | + 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | + 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | + 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31; + +export type Pow2 = + 0x1 | 0x2 | 0x4 | 0x8 | + 0x10 | 0x20 | 0x40 | 0x80 | + 0x100 | 0x200 | 0x400 | 0x800 | + 0x1000 | 0x2000 | 0x4000 | 0x8000 | + 0x10000 | 0x20000 | 0x40000 | 0x80000 | + 0x100000 | 0x200000 | 0x400000 | 0x800000 | + 0x1000000 | 0x2000000 | 0x4000000 | 0x8000000 | + 0x10000000 | 0x20000000 | 0x40000000 | 0x80000000; + +export const MASKS = + new Array(33).fill(0).map((_, i) => Math.pow(2, i) - 1); diff --git a/packages/binary/src/count.ts b/packages/binary/src/count.ts new file mode 100644 index 0000000000..518ff022a1 --- /dev/null +++ b/packages/binary/src/count.ts @@ -0,0 +1,43 @@ +/** + * Returns number of 1 bits in `x`. + * + * @param x + */ +export const popCount = (x: number) => ( + x = x - ((x >>> 1) & 0x55555555), + x = (x & 0x33333333) + ((x >>> 2) & 0x33333333), + ((x + (x >>> 4) & 0xf0f0f0f) * 0x1010101) >>> 24 +); + +/** + * https://en.wikipedia.org/wiki/Hamming_distance + * + * @param x + * @param y + */ +export const hammingDist = (x: number, y: number) => + popCount(x ^ y); + +/** + * Math.clz32() polyfill (corrected). + * + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32$revision/1426816 + * + * @param x + */ +export const clz32 = (x: number) => + x !== 0 ? + 31 - ((Math.log(x >>> 0) / Math.LN2) | 0) : + 32; + +export const ctz32 = (x: number) => { + let c = 32; + x &= -x; + x && (c--); + (x & 0x0000ffff) && (c -= 16); + (x & 0x00ff00ff) && (c -= 8); + (x & 0x0f0f0f0f) && (c -= 4); + (x & 0x33333333) && (c -= 2); + (x & 0x55555555) && (c -= 1); + return c; +}; diff --git a/packages/binary/src/edit.ts b/packages/binary/src/edit.ts new file mode 100644 index 0000000000..733af78138 --- /dev/null +++ b/packages/binary/src/edit.ts @@ -0,0 +1,37 @@ +import { Bit } from "./api"; +import { defMask } from "./mask"; + +/** + * Clears bit in given uint `x`. + * + * @param x value + * @param bit bit number (0..31) + */ +export const bitClear = (x: number, bit: Bit) => + (x & ~(1 << bit)) >>> 0; + +/** + * Toggles bit in given uint `x`. + * + * @param x + * @param bit + */ +export const bitFlip = (x: number, bit: Bit) => + (x ^ (1 << bit)) >>> 0; + +/** + * Sets bit in given uint `x`. + * + * @param x value + * @param bit bit number (0..31) + */ +export const bitSet = (x: number, bit: Bit) => + (x | (1 << bit)) >>> 0; + +export const bitSetWindow = (x: number, y: number, from: number, to: number) => { + const m = defMask(from, to); + return (x & ~m) | ((y << (1 << from)) & m); +}; + +export const bitClearWindow = (x: number, from: number, to: number) => + (x & ~defMask(from, to)); diff --git a/packages/binary/src/float.ts b/packages/binary/src/float.ts new file mode 100644 index 0000000000..f6a204a7c2 --- /dev/null +++ b/packages/binary/src/float.ts @@ -0,0 +1,30 @@ +const F32 = new Float32Array(1); +const I32 = new Int32Array(F32.buffer); +const U32 = new Uint32Array(F32.buffer); + +export const floatToIntBits = (x: number) => + (F32[0] = x, I32[0]); + +export const floatToUintBits = (x: number) => + (F32[0] = x, U32[0]); + +export const intBitsToFloat = (x: number) => + (I32[0] = x, F32[0]); + +export const uintBitsToFloat = (x: number) => + (U32[0] = x, F32[0]); + +/** + * Converts given float into a sortable integer representation, using + * raw bitwise conversion via `floatToIntBits()`. + * + * https://github.com/tzaeschke/phtree/blob/master/PhTreeRevisited.pdf + * (page 3) + * + * @param x + */ +export const floatToSortableInt = (x: number) => { + if (x === -0) x = 0; + const i = floatToIntBits(x); + return x < 0 ? (~i) | (1 << 31) : i; +}; diff --git a/packages/binary/src/gray.ts b/packages/binary/src/gray.ts new file mode 100644 index 0000000000..abd891d4a4 --- /dev/null +++ b/packages/binary/src/gray.ts @@ -0,0 +1,25 @@ +/** + * Converts 32bit unsigned int to Gray code (reflected binary). Gray + * codes of successive values always have a Hamming distance of 1 (i.e. + * only 1 bit changes at a time). + * + * https://en.wikipedia.org/wiki/Gray_code + * + * @param x u32 + */ +export const encodeGray32 = (x: number) => + (x ^ (x >>> 1)) >>> 0; + +/** + * Converts 32bit Gray code to binary / unsigned int. + * + * https://en.wikipedia.org/wiki/Gray_code + */ +export const decodeGray32 = (x: number) => { + x = x ^ (x >>> 16); + x = x ^ (x >>> 8); + x = x ^ (x >>> 4); + x = x ^ (x >>> 2); + x = x ^ (x >>> 1); + return x >>> 0; +}; diff --git a/packages/binary/src/index.ts b/packages/binary/src/index.ts new file mode 100644 index 0000000000..06b4af8f41 --- /dev/null +++ b/packages/binary/src/index.ts @@ -0,0 +1,12 @@ +export * from "./api"; +export * from "./align"; +export * from "./count"; +export * from "./edit"; +export * from "./float"; +export * from "./gray"; +export * from "./logic"; +export * from "./mask"; +export * from "./pow"; +export * from "./rotate"; +export * from "./splat"; +export * from "./swizzle"; diff --git a/packages/binary/src/logic.ts b/packages/binary/src/logic.ts new file mode 100644 index 0000000000..4e9e03ee0e --- /dev/null +++ b/packages/binary/src/logic.ts @@ -0,0 +1,43 @@ +import { maskL } from "./mask"; + +export const bitNot = (n: number, x: number) => + maskL(n, ~x); + +export const bitAnd = (n: number, a: number, b: number) => + maskL(n, a & b); + +export const bitNand = (n: number, a: number, b: number) => + maskL(n, ~(a & b)); + +export const bitOr = (n: number, a: number, b: number) => + maskL(n, a | b); + +export const bitNor = (n: number, a: number, b: number) => + maskL(n, ~(a & b)); + +export const bitXor = (n: number, a: number, b: number) => + maskL(n, a ^ b); + +export const bitXnor = (n: number, a: number, b: number) => + maskL(n, ~(a ^ b)); + +export const bitImply = (n: number, a: number, b: number) => + maskL(n, (~a) | b); + +export const bitAoi21 = (n: number, a: number, b: number, c: number) => + maskL(n, ~(a | (b & c))); + +export const bitOai21 = (n: number, a: number, b: number, c: number) => + maskL(n, ~(a & (b | c))); + +export const bitAoi22 = (n: number, a: number, b: number, c: number, d: number) => + maskL(n, ~((a & b) | (c & d))); + +export const bitOai22 = (n: number, a: number, b: number, c: number, d: number) => + maskL(n, ~((a | b) & (c | d))); + +export const bitMux = (n: number, a: number, b: number, s: number) => + maskL(n, (a & ~s) | (b & s)); + +export const bitDemux = (n: number, a: number, b: number, s: number): [number, number] => + [maskL(n, a & ~s), maskL(n, b & s)]; diff --git a/packages/binary/src/mask.ts b/packages/binary/src/mask.ts new file mode 100644 index 0000000000..a929ea38af --- /dev/null +++ b/packages/binary/src/mask.ts @@ -0,0 +1,34 @@ +import { MASKS } from "./api"; + +/** + * Creates bit mask by enabling bit `a` to bit `b-1`, both in range + * 0-32. `b` MUST be >= `a`. + * + * ``` + * defMask(1,31).toString(16) // 7ffffffe + * defMask(3,8).toString(16) // f8 + * ``` + * + * @param a + * @param b + */ +export const defMask = (a: number, b: number) => + ((~MASKS[a]) & MASKS[b]) >>> 0; + +/** + * Returns unsigned version of `x` with only lowest `n` bits. + * + * @param n + * @param x + */ +export const maskL = (n: number, x: number) => + (x & MASKS[n]) >>> 0; + +/** + * Returns unsigned version of `x` with only highest `n` bits. + * + * @param n + * @param x + */ +export const maskH = (n: number, x: number) => + (x & ~MASKS[n]) >>> 0; diff --git a/packages/binary/src/pow.ts b/packages/binary/src/pow.ts new file mode 100644 index 0000000000..e69be6503d --- /dev/null +++ b/packages/binary/src/pow.ts @@ -0,0 +1,24 @@ +// http://graphics.stanford.edu/~seander/bithacks.html + +export const isPow2 = (x: number) => + (!!x) && !(x & (x - 1)); + +export const ceilPow2 = (x: number) => { + x += (x === 0); + --x; + x |= x >>> 1; + x |= x >>> 2; + x |= x >>> 4; + x |= x >>> 8; + x |= x >>> 16; + return x + 1; +}; + +export const floorPow2 = (x: number) => { + x |= x >>> 1; + x |= x >>> 2; + x |= x >>> 4; + x |= x >>> 8; + x |= x >>> 16; + return x - (x >>> 1); +}; diff --git a/packages/binary/src/rotate.ts b/packages/binary/src/rotate.ts new file mode 100644 index 0000000000..61bab66df9 --- /dev/null +++ b/packages/binary/src/rotate.ts @@ -0,0 +1,19 @@ +import { Bit } from "./api"; + +/** + * Rotates `x` `n` bits to the left. + * + * @param x + * @param n + */ +export const rotateLeft = (x: number, n: Bit) => + ((x << n) | (x >>> (32 - n))) >>> 0; + +/** + * Rotates `x` `n` bits to the right. + * + * @param x + * @param n + */ +export const rotateRight = (x: number, n: Bit) => + ((x >>> n) | (x << (32 - n))) >>> 0; diff --git a/packages/binary/src/splat.ts b/packages/binary/src/splat.ts new file mode 100644 index 0000000000..175e6c6dbc --- /dev/null +++ b/packages/binary/src/splat.ts @@ -0,0 +1,55 @@ +/** + * Repeats lowest nibble of `x` as 24 bit uint. + * + * @param x + */ +export const splat4_24 = (x: number) => + (x &= 0xf, splat8_24(x | x << 4)); + +/** + * Repeats lowest nibble of `x` as 32 bit uint. + * + * @param x + */ +export const splat4_32 = (x: number) => + (x &= 0xf, splat8_32(x | x << 4)); + +/** + * Repeats lowest byte of `x` as 24 bit uint. + * + * @param x + */ +export const splat8_24 = (x: number) => + (x & 0xff) * 0x010101; + +/** + * Repeats lowest byte of `x` as 32 bit uint. + * + * @param x + */ +export const splat8_32 = (x: number) => + ((x & 0xff) * 0x01010101) >>> 0; + +/** + * Repeats lowest 16bit of `x` as 32 bit uint. + * + * @param x + */ +export const splat16_32 = (x: number) => + (x &= 0xffff, ((x << 16) | x) >>> 0); + +/** + * Returns true if bits 0-3 are same as bits 4-7. + * + * @param x + */ +export const same4 = (x: number) => + (x >> 4 & 0xf) === (x & 0xf); + +/** + * Returns true if bits 0-7 are same as bits 8-15. + * + * @param x + */ +export const same8 = (x: number) => + (x >> 8 & 0xff) === (x & 0xff); diff --git a/packages/binary/src/swizzle.ts b/packages/binary/src/swizzle.ts new file mode 100644 index 0000000000..cb83e5eec0 --- /dev/null +++ b/packages/binary/src/swizzle.ts @@ -0,0 +1,91 @@ +import { Lane2, Lane4, Lane8 } from "./api"; + +/** + * Extracts 8-bit lane from given 32bit uint. + * + * - Lane #0: bits 24-31 + * - Lane #1: bits 16-23 + * - Lane #2: bits 8-15 + * - Lane #3: bits 0-7 + * + * @param x + * @param l + */ +export const lane8 = (x: number, l: Lane8) => + (x >>> ((3 - l) << 3)) & 0xff; + +/** + * Extracts 4-bit lane from given 32bit uint. + * + * - Lane #0: bits 28-31 + * - Lane #1: bits 24-27 + * - Lane #2: bits 20-23 + * - Lane #3: bits 16-19 + * - Lane #4: bits 12-15 + * - Lane #5: bits 8-11 + * - Lane #6: bits 4-7 + * - Lane #7: bits 0-3 + * + * @param x + * @param l + */ +export const lane4 = (x: number, l: Lane4) => + (x >>> ((7 - l) << 2)) & 0xf; + +export const lane2 = (x: number, l: Lane2) => + (x >>> ((15 - l) << 1)) & 0x3; + +/** + * Re-orders byte lanes in given order (MSB). + * + * ``` + * swizzle(0x12345678, 3, 2, 1, 0) // 0x78563412 + * swizzle(0x12345678, 1, 0, 3, 2) // 0x34127856 + * swizzle(0x12345678, 2, 2, 0, 0) // 0x56561212 + * ``` + * + * @param x + * @param a + * @param b + * @param c + * @param d + */ +export const swizzle8 = (x: number, a: Lane8, b: Lane8, c: Lane8, d: Lane8) => + ( + lane8(x, a) << 24 | + lane8(x, b) << 16 | + lane8(x, c) << 8 | + lane8(x, d) + ) >>> 0; + +/** + * + * @param x + * @param a + * @param b + * @param c + * @param d + * @param e + * @param f + * @param g + * @param h + */ +export const swizzle4 = (x: number, a: Lane4, b: Lane4, c: Lane4, d: Lane4, e: Lane4, f: Lane4, g: Lane4, h: Lane4) => + ( + lane4(x, a) << 28 | + lane4(x, b) << 24 | + lane4(x, c) << 20 | + lane4(x, d) << 16 | + lane4(x, e) << 12 | + lane4(x, f) << 8 | + lane4(x, g) << 4 | + lane4(x, h) + ) >>> 0; + +/** + * Same as `swizzle8(x, 3, 2, 1, 0)`, but faster. + * + * @param x + */ +export const flipBytes = (x: number) => + ((x >>> 24) | (x >> 8 & 0xff00) | (x & 0xff00) << 8 | x << 24) >>> 0; diff --git a/packages/binary/test/index.ts b/packages/binary/test/index.ts new file mode 100644 index 0000000000..9d0e8ad0f9 --- /dev/null +++ b/packages/binary/test/index.ts @@ -0,0 +1,6 @@ +// import * as assert from "assert"; +// import * as b from "../src/index"; + +describe("binary", () => { + it("tests pending"); +}); diff --git a/packages/binary/test/tsconfig.json b/packages/binary/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/binary/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/binary/tsconfig.json b/packages/binary/tsconfig.json new file mode 100644 index 0000000000..bd6481a5a6 --- /dev/null +++ b/packages/binary/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/bitstream/CHANGELOG.md b/packages/bitstream/CHANGELOG.md index 6ecd1c5859..67c60cc29e 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.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@0.4.18...@thi.ng/bitstream@0.4.19) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/bitstream + + + + + ## [0.4.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@0.4.17...@thi.ng/bitstream@0.4.18) (2018-09-24) diff --git a/packages/bitstream/package.json b/packages/bitstream/package.json index dfd2e59231..acfb75cff5 100644 --- a/packages/bitstream/package.json +++ b/packages/bitstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bitstream", - "version": "0.4.18", + "version": "0.4.19", "description": "ES6 iterator based read/write bit streams & support for variable word widths", "main": "./index.js", "typings": "./index.d.ts", @@ -20,7 +20,7 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "dependencies": { - "@thi.ng/errors": "^0.1.9" + "@thi.ng/errors": "^0.1.10" }, "devDependencies": { "@types/mocha": "^5.2.5", diff --git a/packages/cache/CHANGELOG.md b/packages/cache/CHANGELOG.md index 5e357915c8..40879ad787 100644 --- a/packages/cache/CHANGELOG.md +++ b/packages/cache/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@0.2.28...@thi.ng/cache@0.2.29) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/cache + + + + + + +## [0.2.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@0.2.27...@thi.ng/cache@0.2.28) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/cache + + + + + + +## [0.2.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@0.2.26...@thi.ng/cache@0.2.27) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/cache + + + + + + +## [0.2.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@0.2.25...@thi.ng/cache@0.2.26) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/cache + + + + + ## [0.2.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@0.2.24...@thi.ng/cache@0.2.25) (2018-09-24) diff --git a/packages/cache/package.json b/packages/cache/package.json index ad665eb3e8..ed0722e992 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/cache", - "version": "0.2.25", + "version": "0.2.29", "description": "In-memory cache implementations with ES6 Map-like API and different eviction strategies", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/dcons": "^1.1.8", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/dcons": "^1.1.12", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "cache", diff --git a/packages/cache/src/lru.ts b/packages/cache/src/lru.ts index 4c03175270..8c9d18026a 100644 --- a/packages/cache/src/lru.ts +++ b/packages/cache/src/lru.ts @@ -12,8 +12,8 @@ export class LRUCache implements ICache { constructor(pairs?: Iterable<[K, V]>, opts?: Partial>) { const _opts = >Object.assign({ - maxlen: Number.POSITIVE_INFINITY, - maxsize: Number.POSITIVE_INFINITY, + maxlen: Infinity, + maxsize: Infinity, map: () => new Map(), ksize: () => 0, vsize: () => 0, diff --git a/packages/checks/CHANGELOG.md b/packages/checks/CHANGELOG.md index f796805803..473087d30b 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.5.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/checks@1.5.11...@thi.ng/checks@1.5.12) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/checks + + + + + ## [1.5.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/checks@1.5.10...@thi.ng/checks@1.5.11) (2018-09-24) diff --git a/packages/checks/package.json b/packages/checks/package.json index 9aecbff357..31843c17ae 100644 --- a/packages/checks/package.json +++ b/packages/checks/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/checks", - "version": "1.5.11", + "version": "1.5.12", "description": "Single-function sub-modules for type, feature & value checks", "main": "./index.js", "typings": "./index.d.ts", diff --git a/packages/compare/CHANGELOG.md b/packages/compare/CHANGELOG.md index a3a4bc7c6e..f59d04aa0c 100644 --- a/packages/compare/CHANGELOG.md +++ b/packages/compare/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.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/compare@0.1.9...@thi.ng/compare@0.1.10) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/compare + + + + + ## [0.1.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/compare@0.1.8...@thi.ng/compare@0.1.9) (2018-09-24) diff --git a/packages/compare/package.json b/packages/compare/package.json index a3540fa5bf..8f72bc4360 100644 --- a/packages/compare/package.json +++ b/packages/compare/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/compare", - "version": "0.1.9", + "version": "0.1.10", "description": "Comparator with optional delegation for types implementing @thi.ng/api/ICompare interface", "main": "./index.js", "typings": "./index.d.ts", diff --git a/packages/compose/CHANGELOG.md b/packages/compose/CHANGELOG.md index 6301293c69..84734f0523 100644 --- a/packages/compose/CHANGELOG.md +++ b/packages/compose/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/compose@0.1.4...@thi.ng/compose@0.2.0) (2018-10-17) + + +### Features + +* **compose:** add partial(), update readme ([6851f2c](https://github.com/thi-ng/umbrella/commit/6851f2c)) + + + + + ## [0.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/compose@0.1.3...@thi.ng/compose@0.1.4) (2018-09-24) diff --git a/packages/compose/README.md b/packages/compose/README.md index accff7d6d9..f79e40b740 100644 --- a/packages/compose/README.md +++ b/packages/compose/README.md @@ -22,9 +22,10 @@ This project is part of the Functional composition helpers: -- [comp(...)](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/comp.ts) -- [compI(...)](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/comp.ts) -- [juxt(...)](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/juxt.ts) +- [comp()](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/comp.ts) +- [compI()](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/comp.ts) +- [juxt()](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/juxt.ts) +- [partial()](https://github.com/thi-ng/umbrella/tree/master/packages/compose/src/partial.ts) ## Installation diff --git a/packages/compose/package.json b/packages/compose/package.json index 3570ea9b12..dc00447700 100644 --- a/packages/compose/package.json +++ b/packages/compose/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/compose", - "version": "0.1.4", + "version": "0.2.0", "description": "Functional composition helpers", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "composition", diff --git a/packages/compose/src/index.ts b/packages/compose/src/index.ts index 99ae4c440f..ee645566d1 100644 --- a/packages/compose/src/index.ts +++ b/packages/compose/src/index.ts @@ -1,2 +1,3 @@ export * from "./comp"; export * from "./juxt"; +export * from "./partial"; diff --git a/packages/compose/src/partial.ts b/packages/compose/src/partial.ts new file mode 100644 index 0000000000..d8ba1c883d --- /dev/null +++ b/packages/compose/src/partial.ts @@ -0,0 +1,35 @@ +import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; + +export function partial(fn: (a: A, ...args: any[]) => T, a: A): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, ...args: any[]) => T, a: A, b: B): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, c: C, ...args: any[]) => T, a: A, b: B, c: C): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, c: C, d: D, ...args: any[]) => T, a: A, b: B, c: C, d: D): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, c: C, d: D, e: E, ...args: any[]) => T, a: A, b: B, c: C, d: D, e: E): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, c: C, d: D, e: E, f: F, ...args: any[]) => T, a: A, b: B, c: C, d: D, e: E, f: F): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, ...args: any[]) => T, a: A, b: B, c: C, d: D, e: E, f: F, g: G): (...args: any[]) => T; +export function partial(fn: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, ...args: any[]) => T, a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H): (...args: any[]) => T; +export function partial(fn, ...args: any[]) { + let [a, b, c, d, e, f, g, h] = args; + switch (args.length) { + case 1: + return (...xs: any[]) => fn(a, ...xs); + case 2: + return (...xs: any[]) => fn(a, b, ...xs); + case 3: + return (...xs: any[]) => fn(a, b, c, ...xs); + case 4: + return (...xs: any[]) => fn(a, b, c, d, ...xs); + case 5: + return (...xs: any[]) => fn(a, b, c, d, e, ...xs); + case 6: + return (...xs: any[]) => fn(a, b, c, d, e, f, ...xs); + case 7: + return (...xs: any[]) => fn(a, b, c, d, e, f, g, ...xs); + case 8: + return (...xs: any[]) => fn(a, b, c, d, e, f, g, h, ...xs); + default: + illegalArgs(); + } +} + +export const foo = partial((a: string, b: number) => a + b, "a"); diff --git a/packages/csp/CHANGELOG.md b/packages/csp/CHANGELOG.md index d7aeda7e4a..386b5c7789 100644 --- a/packages/csp/CHANGELOG.md +++ b/packages/csp/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.68](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.67...@thi.ng/csp@0.3.68) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/csp + + + + + + +## [0.3.67](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.66...@thi.ng/csp@0.3.67) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/csp + + + + + + +## [0.3.66](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.65...@thi.ng/csp@0.3.66) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/csp + + + + + + +## [0.3.65](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.64...@thi.ng/csp@0.3.65) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/csp + + + + + ## [0.3.64](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@0.3.63...@thi.ng/csp@0.3.64) (2018-09-24) diff --git a/packages/csp/package.json b/packages/csp/package.json index b23784230d..a38d0ade23 100644 --- a/packages/csp/package.json +++ b/packages/csp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/csp", - "version": "0.3.64", + "version": "0.3.68", "description": "ES6 promise based CSP implementation", "main": "./index.js", "typings": "./index.d.ts", @@ -32,11 +32,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/dcons": "^1.1.8", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/dcons": "^1.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "async", diff --git a/packages/dcons/CHANGELOG.md b/packages/dcons/CHANGELOG.md index 29bc7bcd12..26b5c6d5d8 100644 --- a/packages/dcons/CHANGELOG.md +++ b/packages/dcons/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@1.1.11...@thi.ng/dcons@1.1.12) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/dcons + + + + + + +## [1.1.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@1.1.10...@thi.ng/dcons@1.1.11) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/dcons + + + + + + +## [1.1.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@1.1.9...@thi.ng/dcons@1.1.10) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/dcons + + + + + + +## [1.1.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@1.1.8...@thi.ng/dcons@1.1.9) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/dcons + + + + + ## [1.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@1.1.7...@thi.ng/dcons@1.1.8) (2018-09-24) diff --git a/packages/dcons/package.json b/packages/dcons/package.json index 0e484ad8dc..360262dbf1 100644 --- a/packages/dcons/package.json +++ b/packages/dcons/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dcons", - "version": "1.1.8", + "version": "1.1.12", "description": "Comprehensive doubly linked list structure w/ iterator support", "main": "./index.js", "typings": "./index.d.ts", @@ -28,12 +28,12 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/compare": "^0.1.9", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/compare": "^0.1.10", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "datastructure", diff --git a/packages/defmulti/CHANGELOG.md b/packages/defmulti/CHANGELOG.md index b2bd426006..85c23a7fed 100644 --- a/packages/defmulti/CHANGELOG.md +++ b/packages/defmulti/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.4.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/defmulti@0.3.11...@thi.ng/defmulti@0.4.0) (2018-10-17) + + +### Features + +* **defmulti:** add varargs support ([6094738](https://github.com/thi-ng/umbrella/commit/6094738)) + + + + + ## [0.3.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/defmulti@0.3.10...@thi.ng/defmulti@0.3.11) (2018-09-24) diff --git a/packages/defmulti/package.json b/packages/defmulti/package.json index b94d32c73f..91f7cd4b63 100644 --- a/packages/defmulti/package.json +++ b/packages/defmulti/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/defmulti", - "version": "0.3.11", + "version": "0.4.0", "description": "Dynamically extensible multiple dispatch via user supplied dispatch function.", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "ES6", diff --git a/packages/defmulti/src/index.ts b/packages/defmulti/src/index.ts index 4971ec70ca..3c1f974da4 100644 --- a/packages/defmulti/src/index.ts +++ b/packages/defmulti/src/index.ts @@ -5,24 +5,24 @@ import { illegalArity } from "@thi.ng/errors/illegal-arity"; export const DEFAULT: unique symbol = Symbol(); export type DispatchFn = (...args) => PropertyKey; -export type DispatchFn1 = (a: A) => PropertyKey; -export type DispatchFn2 = (a: A, b: B) => PropertyKey; -export type DispatchFn3 = (a: A, b: B, c: C) => PropertyKey; -export type DispatchFn4 = (a: A, b: B, c: C, d: D) => PropertyKey; -export type DispatchFn5 = (a: A, b: B, c: C, d: D, e: E) => PropertyKey; -export type DispatchFn6 = (a: A, b: B, c: C, d: D, e: E, f: F) => PropertyKey; -export type DispatchFn7 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => PropertyKey; -export type DispatchFn8 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => PropertyKey; +export type DispatchFn1 = (a: A, ...xs: any[]) => PropertyKey; +export type DispatchFn2 = (a: A, b: B, ...xs: any[]) => PropertyKey; +export type DispatchFn3 = (a: A, b: B, c: C, ...xs: any[]) => PropertyKey; +export type DispatchFn4 = (a: A, b: B, c: C, d: D, ...xs: any[]) => PropertyKey; +export type DispatchFn5 = (a: A, b: B, c: C, d: D, e: E, ...xs: any[]) => PropertyKey; +export type DispatchFn6 = (a: A, b: B, c: C, d: D, e: E, f: F, ...xs: any[]) => PropertyKey; +export type DispatchFn7 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G, ...xs: any[]) => PropertyKey; +export type DispatchFn8 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, ...xs: any[]) => PropertyKey; export type Implementation = (...args: any[]) => T; -export type Implementation1 = (a: A) => T; -export type Implementation2 = (a: A, b: B) => T; -export type Implementation3 = (a: A, b: B, c: C) => T; -export type Implementation4 = (a: A, b: B, c: C, d: D) => T; -export type Implementation5 = (a: A, b: B, c: C, d: D, e: E) => T; -export type Implementation6 = (a: A, b: B, c: C, d: D, e: E, f: F) => T; -export type Implementation7 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => T; -export type Implementation8 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => T; +export type Implementation1 = (a: A, ...xs: any[]) => T; +export type Implementation2 = (a: A, b: B, ...xs: any[]) => T; +export type Implementation3 = (a: A, b: B, c: C, ...xs: any[]) => T; +export type Implementation4 = (a: A, b: B, c: C, d: D, ...xs: any[]) => T; +export type Implementation5 = (a: A, b: B, c: C, d: D, e: E, ...xs: any[]) => T; +export type Implementation6 = (a: A, b: B, c: C, d: D, e: E, f: F, ...xs: any[]) => T; +export type Implementation7 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G, ...xs: any[]) => T; +export type Implementation8 = (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, ...xs: any[]) => T; export interface MultiFn extends Implementation { add: (id: PropertyKey, g: Implementation) => boolean; diff --git a/packages/dgraph/CHANGELOG.md b/packages/dgraph/CHANGELOG.md index 90a3b677e0..23d8d8675f 100644 --- a/packages/dgraph/CHANGELOG.md +++ b/packages/dgraph/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@0.2.23...@thi.ng/dgraph@0.2.24) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/dgraph + + + + + + +## [0.2.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@0.2.22...@thi.ng/dgraph@0.2.23) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/dgraph + + + + + + +## [0.2.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@0.2.21...@thi.ng/dgraph@0.2.22) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/dgraph + + + + + + +## [0.2.21](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@0.2.20...@thi.ng/dgraph@0.2.21) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/dgraph + + + + + ## [0.2.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@0.2.19...@thi.ng/dgraph@0.2.20) (2018-09-24) diff --git a/packages/dgraph/package.json b/packages/dgraph/package.json index ed69d7442d..bf0e7ccbd4 100644 --- a/packages/dgraph/package.json +++ b/packages/dgraph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dgraph", - "version": "0.2.20", + "version": "0.2.24", "description": "Type-agnostic directed acyclic graph (DAG) & graph operations", "main": "./index.js", "typings": "./index.d.ts", @@ -28,11 +28,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/associative": "^0.6.8", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/associative": "^0.6.12", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "data structure", diff --git a/packages/diff/CHANGELOG.md b/packages/diff/CHANGELOG.md index e72898ca1e..e516f9d532 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.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/diff@1.1.2...@thi.ng/diff@1.1.3) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/diff + + + + + ## [1.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/diff@1.1.1...@thi.ng/diff@1.1.2) (2018-09-24) diff --git a/packages/diff/package.json b/packages/diff/package.json index f244daeb09..6d41d53107 100644 --- a/packages/diff/package.json +++ b/packages/diff/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/diff", - "version": "1.1.2", + "version": "1.1.3", "description": "Array & object Diff", "main": "./index.js", "typings": "./index.d.ts", @@ -26,8 +26,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/equiv": "^0.1.11" + "@thi.ng/api": "^4.2.2", + "@thi.ng/equiv": "^0.1.12" }, "keywords": [ "array", diff --git a/packages/dlogic/.npmignore b/packages/dlogic/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/dlogic/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/dlogic/CHANGELOG.md b/packages/dlogic/CHANGELOG.md new file mode 100644 index 0000000000..b10dc857d2 --- /dev/null +++ b/packages/dlogic/CHANGELOG.md @@ -0,0 +1,11 @@ +# 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.0 (2018-10-17) + + +### Features + +* **dlogic:** add [@thi](https://github.com/thi).ng/dlogic package ([405cf51](https://github.com/thi-ng/umbrella/commit/405cf51)) diff --git a/packages/dlogic/LICENSE b/packages/dlogic/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/dlogic/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/dlogic/README.md b/packages/dlogic/README.md new file mode 100644 index 0000000000..5b505d6d78 --- /dev/null +++ b/packages/dlogic/README.md @@ -0,0 +1,74 @@ +# @thi.ng/dlogic + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/dlogic.svg)](https://www.npmjs.com/package/@thi.ng/dlogic) +![npm downloads](https://img.shields.io/npm/dm/@thi.ng/dlogic.svg) +[![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?style=flat-square&label=twitter)](https://twitter.com/thing_umbrella) + +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + + + +- [About](#about) +- [Status](#status) +- [Installation](#installation) +- [Dependencies](#dependencies) +- [Usage examples](#usage-examples) +- [Authors](#authors) +- [License](#license) + + + +## About + +Assorted digital logic gates and ops for boolean values to compose +complex logic in a more functional manner, e.g. for DSL or simulation +purposes. Truth tables and references are provided in the doc strings of +each function. + +Also see +[@thi.ng/binary](https://github.com/thi-ng/umbrella/tree/master/packages/binary/src/logic.ts) +for binary versions of most of the ops provided by this package. + +## Status + +ALPHA + +## Installation + +```bash +yarn add @thi.ng/dlogic +``` + +## Dependencies + +None. + +## Usage examples + +```ts +import { nand } from "@thi.ng/dlogic"; + +// XOR construction only using NAND gates +const xor = (a: boolean, b: boolean) => { + const ab = nand(a,b); + return nand(nand(a, ab), nand(b, ab)); +}; + +xor(false, false) +// false +xor(false, true) +// true +xor(true, false) +// true +xor(true, true) +// false +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2017 - 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dlogic/package.json b/packages/dlogic/package.json new file mode 100644 index 0000000000..ea5ee60083 --- /dev/null +++ b/packages/dlogic/package.json @@ -0,0 +1,43 @@ +{ + "name": "@thi.ng/dlogic", + "version": "0.1.0", + "description": "Assorted digital logic ops / constructs.", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/thi-ng/umbrella.git" + }, + "homepage": "https://github.com/thi-ng/umbrella/tree/master/packages/logic", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn run clean && tsc --declaration", + "clean": "rm -rf *.js *.d.ts .nyc_output build coverage 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 && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.5.5", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "typedoc": "^0.11.1", + "typescript": "^3.0.1" + }, + "keywords": [ + "boolean", + "digital", + "ES6", + "functional", + "gates", + "logic", + "simulation", + "typescript" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/dlogic/src/index.ts b/packages/dlogic/src/index.ts new file mode 100644 index 0000000000..b8b09effc4 --- /dev/null +++ b/packages/dlogic/src/index.ts @@ -0,0 +1,286 @@ +export interface Sum { + s: T; + c: boolean; +} + + +/** + * https://en.wikipedia.org/wiki/Inverter_(logic_gate) + * + * | X | Q | + * |---|---| + * | 0 | 1 | + * | 1 | 0 | + * + * @param x + */ +export const not = (x: boolean) => !x; + +/** + * https://en.wikipedia.org/wiki/NAND_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 1 | + * | 0 | 1 | 1 | + * | 1 | 0 | 1 | + * | 1 | 1 | 0 | + * + * @param a + * @param b + */ +export const nand = (a: boolean, b: boolean) => !(a && b); + +/** + * https://en.wikipedia.org/wiki/AND_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 0 | + * | 0 | 1 | 0 | + * | 1 | 0 | 0 | + * | 1 | 1 | 1 | + * + * @param a + * @param b + */ +export const and = (a: boolean, b: boolean) => a && b; + +/** + * https://en.wikipedia.org/wiki/OR_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 0 | + * | 0 | 1 | 1 | + * | 1 | 0 | 1 | + * | 1 | 1 | 1 | + * + * @param a + * @param b + */ +export const or = (a: boolean, b: boolean) => a || b; + +/** + * https://en.wikipedia.org/wiki/NOR_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 1 | + * | 0 | 1 | 0 | + * | 1 | 0 | 0 | + * | 1 | 1 | 0 | + * + * @param a + * @param b + */ +export const nor = (a: boolean, b: boolean) => !(a || b); + +/** + * https://en.wikipedia.org/wiki/XOR_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 0 | + * | 0 | 1 | 1 | + * | 1 | 0 | 1 | + * | 1 | 1 | 0 | + * + * @param a + * @param b + */ +export const xor = (a: boolean, b: boolean) => a !== b; + +/** + * https://en.wikipedia.org/wiki/XNOR_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 1 | + * | 0 | 1 | 0 | + * | 1 | 0 | 0 | + * | 1 | 1 | 1 | + * + * @param a + * @param b + */ +export const xnor = (a: boolean, b: boolean) => a === b; + +/** + * https://web.archive.org/web/20160304050642/http://www.zigwap.com/digital/gates/imply_gate + * + * | A | B | Q | + * |---|---|---| + * | 0 | 0 | 1 | + * | 0 | 1 | 1 | + * | 1 | 0 | 0 | + * | 1 | 1 | 1 | + * @param a + * @param b + */ +export const imply = (a: boolean, b: boolean) => !a || b; + +/** + * https://en.wikipedia.org/wiki/AND-OR-Invert + * + * `q = nor(a, and(b, c))` + * + * | A | B | C | Q | + * |---|---|---|---| + * | 0 | 0 | 0 | 1 | + * | 0 | 0 | 1 | 1 | + * | 0 | 1 | 0 | 1 | + * | 0 | 1 | 1 | 0 | + * | 1 | 0 | 0 | 0 | + * | 1 | 0 | 1 | 0 | + * | 1 | 1 | 0 | 0 | + * | 1 | 1 | 1 | 0 | + * + * @param a + * @param b + * @param c + */ +export const aoi21 = (a: boolean, b: boolean, c: boolean) => + !(a || (b && c)); + +/** + * https://en.wikipedia.org/wiki/AND-OR-Invert + * + * `q = nor(and(a, b), and(c, d))` + * + * | A | B | C | D | Q | + * |---|---|---|---|---| + * | 0 | X | X | 0 | 1 | + * | X | 0 | X | 0 | 1 | + * | 0 | X | 0 | X | 1 | + * | X | 0 | 0 | X | 1 | + * | 1 | 1 | X | X | 0 | + * | X | X | 1 | 1 | 0 | + * + * @param a + * @param b + * @param c + */ +export const aoi22 = (a: boolean, b: boolean, c: boolean, d: boolean) => + !((a && b) || (c && d)); + +/** + * Complement logic of `aoi21`. + * + * `q = nand(a, or(b, c))` + * + * @param a + * @param b + * @param c + */ +export const oai21 = (a: boolean, b: boolean, c: boolean) => + !(a && (b || c)); + +/** + * Complement logic of `aoi22`. + * + * `q = nand(or(a, b), or(c, d))` + * + * @param a + * @param b + * @param c + * @param d + */ +export const oai22 = (a: boolean, b: boolean, c: boolean, d: boolean) => + !((a || b) && (c || d)); + +/** + * https://en.wikipedia.org/wiki/NAND_logic#MUX + * + * | A | B | S | Q | + * |---|---|---|---| + * | 0 | 0 | 0 | 0 | + * | 0 | 1 | 0 | 0 | + * | 1 | 0 | 0 | 1 | + * | 1 | 1 | 0 | 1 | + * | 0 | 0 | 1 | 0 | + * | 0 | 1 | 1 | 1 | + * | 1 | 0 | 1 | 0 | + * | 1 | 1 | 1 | 1 | + * + * @param a + * @param b + * @param s + */ +export const mux = (a: boolean, b: boolean, s: boolean) => + (a && !s) || (b && s); + +/** + * https://en.wikipedia.org/wiki/NAND_logic#DEMUX + * + * | I | S | A | B | + * |---|---|---|---| + * | 0 | 0 | 0 | 0 | + * | 1 | 0 | 1 | 0 | + * | 0 | 1 | 0 | 0 | + * | 1 | 1 | 0 | 1 | + * + * @param i + * @param s + */ +export const demux = (i: boolean, s: boolean): [boolean, boolean] => + [i && !s, i && s]; + +/** + * https://en.wikipedia.org/wiki/Adder_(electronics)#Half_adder + * + * @param a + * @param b + */ +export const hadd1 = (a: boolean, b: boolean): Sum => + ({ s: a !== b, c: a && b }); + +/** + * https://en.wikipedia.org/wiki/Adder_(electronics)#Full_adder + * + * @param a + * @param b + * @param c + */ +export const fadd1 = (a: boolean, b: boolean, c: boolean): Sum => + ({ + s: (a !== b) !== c, + c: ((a !== b) && c) || (a && b) + }); + +/** + * https://en.wikipedia.org/wiki/Adder_(electronics)#Ripple-carry_adder + * + * @param a + * @param b + * @param c + */ +export const rca = (a: boolean[], b: boolean[], c: boolean): Sum => { + const s: boolean[] = []; + for (let n = a.length, i = 0; i < n; i++) { + const r = fadd1(a[i], b[i], c); + s.push(r.s); + c = r.c; + } + return { s, c }; +}; + +/** + * HOF delay line generator. Returned function takes single boolean arg, + * buffers `n` values (ring buffer) and returns currently oldest. The + * first `n` results will always be `false`. + * + * @param n + */ +export const delay = (n: number) => { + const buf: boolean[] = new Array(n).fill(false); + let i = 0; + return n > 0 ? + (x: boolean) => { + const y = buf[i]; + buf[i++] = x; + i %= n; + return y; + } : + (x: boolean) => x; +}; diff --git a/packages/dlogic/test/index.ts b/packages/dlogic/test/index.ts new file mode 100644 index 0000000000..9739c69974 --- /dev/null +++ b/packages/dlogic/test/index.ts @@ -0,0 +1,6 @@ +// import * as assert from "assert"; +// import * as dl from "../src/index"; + +describe("dlogic", () => { + it("tests pending"); +}); diff --git a/packages/dlogic/test/tsconfig.json b/packages/dlogic/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/dlogic/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/dlogic/tsconfig.json b/packages/dlogic/tsconfig.json new file mode 100644 index 0000000000..bd6481a5a6 --- /dev/null +++ b/packages/dlogic/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/dot/CHANGELOG.md b/packages/dot/CHANGELOG.md index 0c13cfa4d1..f5bc07e7b0 100644 --- a/packages/dot/CHANGELOG.md +++ b/packages/dot/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.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/dot@0.1.15...@thi.ng/dot@0.1.16) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/dot + + + + + ## [0.1.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/dot@0.1.14...@thi.ng/dot@0.1.15) (2018-09-24) diff --git a/packages/dot/package.json b/packages/dot/package.json index 0d0a4f4b9d..ec64aeae51 100644 --- a/packages/dot/package.json +++ b/packages/dot/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dot", - "version": "0.1.15", + "version": "0.1.16", "description": "Graphviz DOM abstraction as vanilla JS objects & serialization to DOT format", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12" }, "keywords": [ "ES6", diff --git a/packages/dsp/.npmignore b/packages/dsp/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/dsp/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/dsp/CHANGELOG.md b/packages/dsp/CHANGELOG.md new file mode 100644 index 0000000000..16ca7b8dd5 --- /dev/null +++ b/packages/dsp/CHANGELOG.md @@ -0,0 +1,11 @@ +# 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.0 (2018-10-17) + + +### Features + +* **dsp:** add oscillators as [@thi](https://github.com/thi).ng/dsp package (from synstack / VEX) ([889730f](https://github.com/thi-ng/umbrella/commit/889730f)) diff --git a/packages/dsp/LICENSE b/packages/dsp/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/dsp/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/dsp/README.md b/packages/dsp/README.md new file mode 100644 index 0000000000..efb553fcda --- /dev/null +++ b/packages/dsp/README.md @@ -0,0 +1,79 @@ +# @thi.ng/dsp + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/dsp.svg)](https://www.npmjs.com/package/@thi.ng/dsp) +![npm downloads](https://img.shields.io/npm/dm/@thi.ng/dsp.svg) +[![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?style=flat-square&label=twitter)](https://twitter.com/thing_umbrella) + +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + + + +- [About](#about) +- [Status](#status) +- [Installation](#installation) +- [Dependencies](#dependencies) +- [Usage examples](#usage-examples) +- [Authors](#authors) +- [License](#license) + + + +## About + +Assorted DSP utils collected & ported from other thi.ng projects (e.g. +[thi.ng/synstack](https://github.com/thi-ng/synstack)). Currently only +features various [stateless & stateful wave generators / +oscillators](https://github.com/thi-ng/umbrella/tree/master/packages/dsp/src/osc.ts), +which have been ported from thi.ng/vexed-generation. + +## Status + +ALPHA / WIP + +## Installation + +```bash +yarn add @thi.ng/dsp +``` + +## Dependencies + +- [@thi.ng/math](https://github.com/thi-ng/umbrella/tree/master/packages/math) + +## Usage examples + +```ts +import * as dsp from "@thi.ng/dsp"; +import { take } from "@thi.ng/transducers"; + +[...take(20, new dsp.Oscillator(dsp.mix(dsp.sin,dsp.rect), 1/20)] +// [ 0.5, +// 0.6545084971874737, +// 0.7938926261462366, +// 0.9045084971874737, +// 0.9755282581475768, +// 1, +// 0.9755282581475768, +// 0.9045084971874737, +// 0.7938926261462367, +// 0.654508497187474, +// 0.5000000000000003, +// -0.6545084971874735, +// -0.7938926261462365, +// -0.9045084971874737, +// -0.9755282581475768, +// -1, +// -0.9755282581475766, +// -0.9045084971874735, +// -0.793892626146236, +// -0.6545084971874731 ] +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dsp/package.json b/packages/dsp/package.json new file mode 100644 index 0000000000..bed8f9d548 --- /dev/null +++ b/packages/dsp/package.json @@ -0,0 +1,48 @@ +{ + "name": "@thi.ng/dsp", + "version": "0.1.0", + "description": "Assorted DSP utils, oscillators etc.", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/thi-ng/umbrella.git" + }, + "homepage": "https://github.com/thi-ng/umbrella/tree/master/packages/dsp", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn run clean && tsc --declaration", + "clean": "rm -rf *.js *.d.ts .nyc_output build coverage 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 && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.5.5", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "typedoc": "^0.11.1", + "typescript": "^3.0.1" + }, + "dependencies": { + "@thi.ng/math": "^0.1.0" + }, + "keywords": [ + "additive", + "DSP", + "ES6", + "generator", + "math", + "oscillator", + "stateless", + "synthesis", + "typescript", + "waveform" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/dsp/src/api.ts b/packages/dsp/src/api.ts new file mode 100644 index 0000000000..99bd50b70f --- /dev/null +++ b/packages/dsp/src/api.ts @@ -0,0 +1 @@ +export type StatelessOscillator = (phase: number, freq: number, amp?: number, dc?: number, opts?: any) => number; diff --git a/packages/dsp/src/index.ts b/packages/dsp/src/index.ts new file mode 100644 index 0000000000..fa97ae53fe --- /dev/null +++ b/packages/dsp/src/index.ts @@ -0,0 +1,3 @@ +export * from "./api"; + +export * from "./osc"; diff --git a/packages/dsp/src/osc.ts b/packages/dsp/src/osc.ts new file mode 100644 index 0000000000..ce932921eb --- /dev/null +++ b/packages/dsp/src/osc.ts @@ -0,0 +1,157 @@ +import { HALF_PI, TAU } from "@thi.ng/math/api"; +import { mix as _mix } from "@thi.ng/math/mix"; +import { wrap01 } from "@thi.ng/math/interval"; +import { fract } from "@thi.ng/math/prec"; +import { StatelessOscillator } from "./api"; + +export class Oscillator implements + Iterable { + + osc: StatelessOscillator; + phase: number; + freq: number; + amp: number; + dc: number; + opt: any; + + constructor(osc: StatelessOscillator, freq: number, amp = 1, dc = 0, opt?: any) { + this.osc = osc; + this.phase = 0; + this.freq = freq; + this.amp = amp; + this.dc = dc; + this.opt = opt; + } + + *[Symbol.iterator]() { + while (true) { + yield this.update(); + } + } + + update() { + const y = this.osc(this.phase, 1, this.amp, this.dc, this.opt); + this.phase = wrap01(this.phase + this.freq); + return y; + } +} + +export class AMFMOscillator extends Oscillator { + + osc: StatelessOscillator; + am: Oscillator; + fm: Oscillator; + + constructor( + osc: StatelessOscillator, + amod: Oscillator, + fmod: Oscillator, + freq: number, + amp = 1, + dc = 0, + opt?: any + ) { + super(osc, freq, amp, dc, opt); + this.am = amod; + this.fm = fmod; + } + + update() { + const y = this.osc( + this.phase, + 1, + this.am ? this.amp + this.am.update() : this.amp, + this.dc, + this.opt + ); + this.phase = wrap01(this.phase + this.freq + (this.fm ? this.fm.update() : 0)); + return y; + } +} + +export const sin = (phase: number, freq: number, amp = 1, dc = 0) => + dc + amp * Math.sin(phase * freq * TAU); + +export const tri = (phase: number, freq: number, amp = 1, dc = 0) => + dc + amp * (Math.abs((phase * freq * 4) % 4 - 2) - 1); + +export const triConcave = (phase: number, freq: number, amp = 1, dc = 0) => + dc + amp * (8 * Math.pow(fract(phase * freq) - 0.5, 2) - 1); + +export const rect = (phase: number, freq: number, amp = 1, dc = 0, duty = 0.5) => + dc + amp * (fract(phase * freq) < duty ? 1 : -1); + +export const saw = (phase: number, freq: number, amp = 1, dc = 0) => + dc + amp * (1 - 2 * fract(phase * freq)); + +export const wavetable = (table: number[]): StatelessOscillator => { + const n = table.length; + return (phase: number, freq: number, amp = 1, dc = 0) => { + const i = Math.round(phase * freq * n) % n; + return dc + amp * table[i < 0 ? i + n : i]; + }; +}; + +export const mix = (osc1: StatelessOscillator, osc2: StatelessOscillator): StatelessOscillator => + (phase: number, freq: number, amp = 1, dc = 0, t = 0.5) => + _mix(osc1(phase, freq, amp, dc), osc2(phase, freq, amp, dc), t); + +export const additive = ( + osc: StatelessOscillator, + freqFn: (i: number) => number, + ampFn: (i: number) => number, n: number) => + + (phase: number, freq: number, amp = 1, dc = 0) => { + let y = 0; + for (let i = 1; i <= n; i++) { + y += osc(phase, freq * freqFn(i), amp * ampFn(i)); + } + return dc + y; + }; + +/** + * Interactive graph of this oscillator: + * https://www.desmos.com/calculator/irugw6gnhy + * + * @param n + */ +export const squareAdditive = (n = 8) => + additive(sin, (i) => 2 * (i - 1) + 1, (i) => 1 / (2 * (i - 1) + 1) * gibbs(n, i), n); + +/** + * Interactive graph of this oscillator: + * https://www.desmos.com/calculator/irugw6gnhy + * + * @param n + */ +export const sawAdditive = (n = 8) => + additive(sin, (i) => i, (i) => 1 / i * gibbs(n, i), n); + +/** + * https://en.wikipedia.org/wiki/Gibbs_phenomenon + * http://www.musicdsp.org/files/bandlimited.pdf + * + * Interactive graph: + * https://www.desmos.com/calculator/irugw6gnhy + * + * @param n + * @param i + */ +export const gibbs = (n: number, i: number) => + Math.pow(Math.cos((i - 1) * HALF_PI / n), 2); + +/** + * Polynomial attenuation to create bandlimited version of a signal. + * + * - http://research.spa.aalto.fi/publications/papers/smc2010-phaseshaping/ + * - http://www.kvraudio.com/forum/viewtopic.php?t=375517 + * + * @param eps + * @param x + */ +export const polyBLEP = (eps: number, x: number) => + x < eps ? + (x /= eps, x + x - x * x - 1) : + x > 1 - eps ? + (x = (x - 1) / eps, x * x + x + x + 1) : + 0; diff --git a/packages/dsp/test/index.ts b/packages/dsp/test/index.ts new file mode 100644 index 0000000000..fcc7940253 --- /dev/null +++ b/packages/dsp/test/index.ts @@ -0,0 +1,6 @@ +// import * as assert from "assert"; +// import * as dsp from "../src/index"; + +describe("dsp", () => { + it("tests pending"); +}); diff --git a/packages/dsp/test/tsconfig.json b/packages/dsp/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/dsp/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/dsp/tsconfig.json b/packages/dsp/tsconfig.json new file mode 100644 index 0000000000..bd6481a5a6 --- /dev/null +++ b/packages/dsp/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/equiv/CHANGELOG.md b/packages/equiv/CHANGELOG.md index b0e21dacd9..7d6d945ab9 100644 --- a/packages/equiv/CHANGELOG.md +++ b/packages/equiv/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.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/equiv@0.1.11...@thi.ng/equiv@0.1.12) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/equiv + + + + + ## [0.1.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/equiv@0.1.10...@thi.ng/equiv@0.1.11) (2018-09-24) diff --git a/packages/equiv/package.json b/packages/equiv/package.json index 2d286d5ff4..686e6759c5 100644 --- a/packages/equiv/package.json +++ b/packages/equiv/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/equiv", - "version": "0.1.11", + "version": "0.1.12", "description": "Extensible deep equivalence checking for any data types", "main": "./index.js", "typings": "./index.d.ts", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index ca6bd52a00..9d665c30b7 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/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.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/errors@0.1.9...@thi.ng/errors@0.1.10) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/errors + + + + + ## [0.1.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/errors@0.1.8...@thi.ng/errors@0.1.9) (2018-09-24) diff --git a/packages/errors/package.json b/packages/errors/package.json index ec817aa873..d339952f10 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/errors", - "version": "0.1.9", + "version": "0.1.10", "description": "Custom error types and helper fns.", "main": "./index.js", "typings": "./index.d.ts", diff --git a/packages/geom/.npmignore b/packages/geom/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/geom/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/geom/CHANGELOG.md b/packages/geom/CHANGELOG.md new file mode 100644 index 0000000000..dd6f46e729 --- /dev/null +++ b/packages/geom/CHANGELOG.md @@ -0,0 +1,19 @@ +# 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.0 (2018-10-17) + + +### Features + +* **geom:** add ICollate & ICopy impls, re-add/update convexHull2 ([3b1bf64](https://github.com/thi-ng/umbrella/commit/3b1bf64)) +* **geom:** add/update factory fns, arg handling, tessel, poly area ([555fc51](https://github.com/thi-ng/umbrella/commit/555fc51)) +* **geom:** add/update interfaces & impls ([2657df6](https://github.com/thi-ng/umbrella/commit/2657df6)) +* **geom:** add/update tessellate() impls ([fa87f1e](https://github.com/thi-ng/umbrella/commit/fa87f1e)) +* **geom:** add/update various shape impls & ops ([3a20ef3](https://github.com/thi-ng/umbrella/commit/3a20ef3)) +* **geom:** import (updated) old thi.ng/geom package (minus vectors) ([c03259c](https://github.com/thi-ng/umbrella/commit/c03259c)) +* **geom:** re-add Arc2, update Circle2, update helper fns ([aa6b120](https://github.com/thi-ng/umbrella/commit/aa6b120)) +* **geom:** re-import & refactor partial port of thi.ng/geom (clojure) ([d655ec2](https://github.com/thi-ng/umbrella/commit/d655ec2)) +* **geom:** update all shape types, add interfaces & ops, update tests ([9c27c77](https://github.com/thi-ng/umbrella/commit/9c27c77)) diff --git a/packages/geom/LICENSE b/packages/geom/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/geom/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/geom/README.md b/packages/geom/README.md new file mode 100644 index 0000000000..7107802064 --- /dev/null +++ b/packages/geom/README.md @@ -0,0 +1,98 @@ +# @thi.ng/geom + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/geom.svg)](https://www.npmjs.com/package/@thi.ng/geom) + +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) + - [Tessellations](#tessellations) + - [Subdivision curves](#subdivision-curves) +- [Authors](#authors) +- [License](#license) + + + +## About + +This package is a partial WIP port of selected features of the +[Clojure/ClojureScript version of +thi.ng/geom](https://github.com/thi-ng/geom), as well as +[c.thi.ng](https://github.com/thi-ng/c-thing). Currently only 2D shapes +& operations are supported. + +## Status + +ALPHA - major breaking changes forthcoming... + +## Installation + +```bash +yarn add @thi.ng/geom +``` + +## Usage examples + +### Tessellations + +![sample output](../../assets/geom/tessel.svg) + +```ts +import * as g from "@thi.ng/geom"; +import * as v from "@thi.ng/vectors"; +import * as h from "@thi.ng/hiccup"; +import * as svg from "@thi.ng/hiccup-svg"; +import * as fs from "fs"; + +const tintedPoly = (points) => { + const p = g.polygon2(points); + const c = p.centroid().toPolar(); + p.attribs = { fill: `hsl(${v.deg(c.y)},${c.x}%,${100-c.x/2}%)` }; + return p; +}; + +fs.writeFileSync( + "tessel.svg", + h.serialize( + svg.svg( + { + width: 1000, height: 1000, + viewBox: "-100 -100 200 200", + fill: "none", + stroke: "#000", + "stroke-width": 0.5, + }, + svg.convertTree( + g.circle2(100) + .toPolygon(6) + .tessellate([g.quadFan, g.triFan, g.edgeSplit, g.quadFan]) + .map((pts) => tintedPoly(pts).toHiccup()) + ) + ) + ) +); +``` + +### Subdivision curves + +| Chaikin (closed) | Chaikin (open) | +|---------------------------------------------------------|-----------------------------------------------------| +| ![chaikin closed](../../assets/geom/chaikin-closed.svg) | ![chaikin open](../../assets/geom/chaikin-open.svg) | + +```ts +g.polygon2([-100,-100, 0,100, 100,-100, 0,0]).subdivide(g.CHAIKIN_CLOSED, 4); +g.polyline2([-100,100, -100,-100, 0,0, 100,-100, 100,100]).subdivide(g.CHAIKIN_OPEN, 4); +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2013 - 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom/package.json b/packages/geom/package.json new file mode 100644 index 0000000000..5402cc43ce --- /dev/null +++ b/packages/geom/package.json @@ -0,0 +1,49 @@ +{ + "name": "@thi.ng/geom", + "version": "0.1.0", + "description": "2D/3D geometry primitives", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/thi-ng/umbrella.git" + }, + "homepage": "https://github.com/thi-ng/umbrella/tree/master/packages/geom", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn run clean && tsc --declaration", + "clean": "rm -rf *.js *.d.ts .nyc_output build coverage doc internal", + "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 && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.5.5", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "typedoc": "^0.12.0", + "typescript": "^3.0.1" + }, + "dependencies": { + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/math": "^0.1.0", + "@thi.ng/transducers": "^2.2.0", + "@thi.ng/vectors": "^1.4.0" + }, + "keywords": [ + "ES6", + "geometry", + "2d", + "3d", + "shapes", + "intersection", + "typescript" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/geom/src/api.ts b/packages/geom/src/api.ts new file mode 100644 index 0000000000..05e02f7306 --- /dev/null +++ b/packages/geom/src/api.ts @@ -0,0 +1,263 @@ +import { IObjectOf } from "@thi.ng/api/api"; +import { IVector, ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; + +export const DEFAULT_SAMPLES = 32; + +export type Attribs = IObjectOf; + +export type Tessellator> = + (points: ReadonlyArray) => T[][]; + +export const enum LineIntersectionType { + PARALLEL, + COINCIDENT, + COINCIDENT_NO_INTERSECT, + INTERSECT, + INTERSECT_OUTSIDE, +} + +export const enum SegmentType { + MOVE, + LINE, + POLYLINE, + ARC, + CUBIC, + QUADRATIC, + CLOSE, +} + +export interface CollateOpts { + buf: Vec; + start: number; + cstride: number; + estride: number; +} + +export interface LineIntersection { + type: LineIntersectionType; + isec?: T; + det?: number; + alpha?: number; + beta?: number; +} + +export interface PathSegment { + type: SegmentType; + point?: Vec2; + geo?: IBoundsRaw & IVertices & IHiccupPathSegment; +} + +export interface SamplingOpts { + /** + * Number of points to sample & return. Defaults to the implementing + * type's `DEFAULT_RES` if neither this nor `theta` option is given + * (see `ArcSamplingOpts`). + */ + num: number; + /** + * Approximate desired distance between sampled result points. If + * given, takes priority over the `num` option, but the latter MIGHT + * be used as part of the sampling process (implementation + * specific). Note: For circles this value is interpreted as arc + * length, not cartesian distance (error will be proportional to the + * given value relative to the circle's radius). + */ + dist: number; + /** + * Currently only used by these types: + * + * - Arc2 + * - Circle2 + * + * Defines the target angle between sampled points. If greater than + * the actual range of the arc, only the two end points will be + * returned at most. This option is used to derive a `num` value and + * takes priority if `num` is given as well. + * + * This option is useful to adapt the sampling based on angular + * resolution, rather than a fixed number of samples. + */ + theta: number; + /** + * If `true`, the shape's end point will be included in the result + * array. The default setting for open geometries is `true`, for + * closed ones `false`. This option has no influence on any internal + * resolution calculation. + * + * For open geometry this option is useful to when re-sampling paths + * of consecutive segments, where the end points of each segment + * coincide with the start points of the next segment. For all but + * the last segment, this option should be `false` and so can be + * used to avoid duplicate vertices in the concatenated result. + * + * When sampling closed shapes, enabling this option will include an + * extra point (start), i.e. if the `num` option was given, results + * in `num+1` points. + */ + last: boolean; +} + +export interface SubdivKernel> { + fn: (pts: T[], i: number, nump: number) => T[]; + size: number; +} + +export interface IArea { + /** + * Computes and returns area. For types where orientation is taken + * into account, setting `signed` to false will always return the + * absolute area (default is `true`). + * + * @param unsigned + */ + area(signed?: boolean): number; +} + +export interface IArcLength { + /** + * Returns arc length, or for closed shapes, circumference. + */ + arcLength(): number; +} + +export interface IBoundsRaw { + /** + * @return min / max points + */ + boundsRaw(): [V, V]; +} + +export interface IBounds { + /** + * Bounding shape + */ + bounds(): T; +} + +export interface ICentroid { + /** + * Computes & returns centroid. If `c` is given it MUST be a zero + * vector and will be used to store result. + * + * @param c + */ + centroid(c?: T): T; +} + +export interface ICenter { + center(origin?: Readonly): this; +} + +export interface IClassifyPoint { + classifyPoint(p: Readonly): number; +} + +export interface IPointInside { + pointInside(p: Readonly): boolean; +} + +export interface ICollate { + /** + * Collates all points into a single buffer and remaps existing + * vertices (by default). Points will written from given `start` + * index, using layout defined by `cstride` and `estride`. + * + * @param opts + */ + collate(opts?: Partial): Vec; +} + +export interface IEdges { + edges(opts?: any): Iterable; +} + +export interface IHiccupPathSegment { + toHiccupPathSegments(): any[]; +} + +export interface IPointMap { + mapPoint(p: Readonly, out?: B): B; + unmapPoint(p: Readonly, out?: A): A; +} + +export interface IToPolygon { + // FIXME return type should be interface + toPolygon(opts?: O): any; +} + +export interface ITessellateable> { + tessellate(tessel: Tessellator, iter?: number): T[][]; + tessellate(tessel: Iterable>): T[][]; +} + +export interface ITransformable { + transform(mat: M): this; +} + +export interface IUnion { + union(x: T): T; +} + +export interface IVertices { + vertices(opts?: O): Iterable; +} + +export interface JsonShape { + type: string; + attribs?: Attribs; +} + +export interface JsonArc2 extends JsonShape { + pos: Vec; + r: Vec; + axis: number; + start: number; + end: number; + xl: boolean; + clockwise: boolean; +} + +export interface JsonCircle2 extends JsonShape { + pos: Vec; + r: number; +} + +export interface JsonCubic2 extends JsonShape { + points: Vec[]; +} + +export interface JsonQuadratic2 extends JsonShape { + points: Vec[]; +} + +export interface JsonPolygon2 extends JsonShape { + points: Vec[]; +} + +export interface JsonPolyline2 extends JsonShape { + points: Vec[]; +} + +export interface JsonRect2 extends JsonShape { + pos: Vec; + size: Vec[]; +} + +export type HiccupArc2 = + ["arc", Attribs, ReadonlyVec, ReadonlyVec, number, number, number, boolean, boolean]; + +export type HiccupCircle2 = + ["circle", Attribs, ReadonlyVec, number]; + +export type HiccupLine2 = + ["line", Attribs, ReadonlyVec, ReadonlyVec]; + +export type HiccupPolygon2 = + ["polygon", Attribs, number[] | number[][]]; + +export type HiccupPolyline2 = + ["polyline", Attribs, number[] | number[][]]; + +export type HiccupRect2 = + ["rect", Attribs, ReadonlyVec, number, number, number?]; diff --git a/packages/geom/src/arc2.ts b/packages/geom/src/arc2.ts new file mode 100644 index 0000000000..6622b9f0ba --- /dev/null +++ b/packages/geom/src/arc2.ts @@ -0,0 +1,246 @@ +import { ICopy } from "@thi.ng/api"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { HALF_PI, PI, TAU } from "@thi.ng/math/api"; +import { inRange } from "@thi.ng/math/interval"; +import { mix } from "@thi.ng/math/mix"; +import { range } from "@thi.ng/transducers/iter/range"; +import { push } from "@thi.ng/transducers/rfn/push"; +import { transduce } from "@thi.ng/transducers/transduce"; +import { filter } from "@thi.ng/transducers/xform/filter"; +import { map } from "@thi.ng/transducers/xform/map"; +import { Vec } from "@thi.ng/vectors/api"; +import { + add2, + asVec2, + rotate2, + setS2, + Vec2 +} from "@thi.ng/vectors/vec2"; +import { + Attribs, + DEFAULT_SAMPLES, + HiccupArc2, + IBounds, + IBoundsRaw, + IEdges, + IVertices, + JsonArc2, + SamplingOpts +} from "./api"; +import { bounds } from "./internal/bounds"; +import { edges } from "./internal/edges"; +import { Rect2 } from "./rect2"; +import { Sampler } from "./sampler"; + +export class Arc2 implements + IBounds, + IBoundsRaw, + ICopy, + IEdges, + IVertices> { + + static fromJSON(spec: JsonArc2) { + return new Arc2( + new Vec2(spec.pos), + new Vec2(spec.r), + spec.axis, + spec.start, + spec.end, + spec.xl, + spec.clockwise, + spec.attribs + ); + } + + static fromHiccup(spec: HiccupArc2) { + return new Arc2( + asVec2(spec[2]), + asVec2(spec[3]), + spec[4], + spec[5], + spec[6], + spec[7], + spec[8], + spec[1] + ); + } + + static from2Points( + a: Readonly, + b: Readonly, + radii: Readonly, + axisTheta = 0, + large = false, + clockwise = true) { + + const r = radii.copy().abs(); + const co = Math.cos(axisTheta); + const si = Math.sin(axisTheta); + const m = a.subNew(b).mulN(0.5); + const p = new Vec2([co * m.x + si * m.y, -si * m.x + co * m.y]); + const px2 = p.x * p.x; + const py2 = p.y * p.y; + const l = px2 / (r.x * r.x) + py2 / (r.y * r.y); + l > 1 && r.mulN(Math.sqrt(l)); + const rx2 = r.x * r.x; + const ry2 = r.y * r.y; + const rxpy = rx2 * py2; + const rypx = ry2 * px2; + const root = ((large === clockwise) ? -1 : 1) * + Math.sqrt(Math.abs((rx2 * ry2 - rxpy - rypx)) / (rxpy + rypx)); + const tc = new Vec2([r.x * p.y / r.y, -r.y * p.x / r.x]).mulN(root); + const c = new Vec2([co * tc.x - si * tc.y, si * tc.x + co * tc.y]).add(a.mixNewN(b)); + const d1 = new Vec2([(p.x - tc.x) / r.x, (p.y - tc.y) / r.y]); + const d2 = new Vec2([(-p.x - tc.x) / r.x, (-p.y - tc.y) / r.y]); + const theta = Vec2.X_AXIS.angleBetween(d1, true); + let delta = d1.angleBetween(d2, true); + if (clockwise && delta < 0) { + delta += TAU; + } else if (!clockwise && delta > 0) { + delta -= TAU; + } + return new Arc2(c, r, axisTheta, theta, theta + delta, large, clockwise); + } + + pos: Vec2; + r: Vec2; + axis: number; + start: number; + end: number; + xl: boolean; + clockwise: boolean; + attribs: Attribs; + + constructor( + pos: Vec2, + r: Vec2, + axis: number, + start: number, + end: number, + xl = false, + clockwise = false, + attribs?: Attribs) { + + this.pos = pos; + this.r = r; + this.axis = axis; + this.start = start; + this.end = end; + this.clockwise = clockwise; + this.xl = xl; + this.attribs = attribs; + } + + copy() { + return new Arc2( + this.pos.copy(), + this.r.copy(), + this.axis, + this.start, + this.end, + this.xl, + this.clockwise, + { ...this.attribs } + ); + } + + boundsRaw() { + // https://stackoverflow.com/a/1336739/294515 + const pts = transduce( + map(this.pointAtTheta.bind(this)), + push(), + [ + this.start, + this.end, + // multiples of HALF_PI in arc range + ...filter( + (t: number) => inRange(t, this.start, this.end), + range(-3 * PI, 3.01 * PI, HALF_PI) + ) + ] + ); + return bounds(pts, Vec2.MAX.copy(), Vec2.MIN.copy()); + } + + bounds() { + return Rect2.fromMinMax(...this.boundsRaw()); + } + + edges(opts?: number | Partial) { + return edges(this.vertices(opts)); + } + + pointAt(t: number) { + return this.pointAtTheta(mix(this.start, this.end, t)); + } + + pointAtTheta(theta: number) { + return new Vec2([Math.cos(theta), Math.sin(theta)]) + .mul(this.r) + .rotate(this.axis) + .add(this.pos); + } + + vertices(opts?: number | Partial): Vec2[] { + if (isPlainObject(opts) && (opts).dist !== undefined) { + return new Sampler(this.vertices((opts).num || DEFAULT_SAMPLES)) + .sampleUniform((opts).dist, (opts).last !== false); + } + opts = isNumber(opts) ? + { num: opts, last: true } : + { num: DEFAULT_SAMPLES, ...opts }; + let num: number; + const start = this.start; + let delta = this.end - start; + num = opts.theta ? + Math.round(delta / opts.theta) : + opts.num; + delta /= num; + opts.last !== false && num++; + const pts: Vec = new Array(num * 2); + const pos = this.pos; + const [rx, ry] = this.r; + const axis = this.axis; + for (let i = 0, j = 0; i < num; i++ , j += 2) { + const t = start + i * delta; + setS2(pts, Math.cos(t) * rx, Math.sin(t) * ry, j); + rotate2(pts, axis, j); + add2(pts, pos.buf, j, pos.i, 1, pos.s); + } + return Vec2.mapBuffer(pts, num); + } + + toHiccup() { + return ["path", this.attribs, + [ + ["M", this.pointAtTheta(this.start)], + ...this.toHiccupPathSegments() + ] + ]; + } + + toHiccupPathSegments() { + return [["A", + this.r, + this.axis, + this.xl ? 1 : 0, + this.clockwise ? 1 : 0, + this.pointAtTheta(this.end) + ]]; + } + + toJSON(): JsonArc2 { + return { + type: "arc2", + pos: this.pos.toJSON(), + r: this.r.toJSON(), + start: this.start, + end: this.end, + axis: this.axis, + xl: this.xl, + clockwise: this.clockwise, + attribs: this.attribs, + }; + } +} diff --git a/packages/geom/src/bezier2.ts b/packages/geom/src/bezier2.ts new file mode 100644 index 0000000000..4af770b8ea --- /dev/null +++ b/packages/geom/src/bezier2.ts @@ -0,0 +1,317 @@ +import { ICopy } from "@thi.ng/api"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { IMath, ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { clamp01 } from "@thi.ng/math/interval"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + DEFAULT_SAMPLES, + IVertices, + JsonCubic2, + JsonQuadratic2, + SamplingOpts +} from "./api"; +import { PointContainer2 } from "./container2"; +import { args3, args4 } from "./internal/args"; +import { Sampler } from "./sampler"; + +export const mixQuadratic1 = (a: number, b: number, c: number, t: number) => { + const s = 1 - t; + return a * s * s + b * 2 * s * t + c * t * t; +}; + +export const mixCubic1 = (a: number, b: number, c: number, d: number, t: number) => { + const t2 = t * t; + const s = 1 - t; + const s2 = s * s; + return a * s2 * s + b * 3 * s2 * t + c * 3 * t2 * s + d * t2 * t; +}; + +export const mixQuadratic = & IMath>(a: T, b: T, c: T, t: number) => { + const s = 1 - t; + return a.mulNewN(s * s) + .maddN(b, 2 * s * t) + .maddN(c, t * t); +}; + +export const mixCubic = & IMath>(a: T, b: T, c: T, d: T, t: number) => { + const t2 = t * t; + const s = 1 - t; + const s2 = s * s; + return a.mulNewN(s2 * s) + .maddN(b, 3 * s2 * t) + .maddN(c, 3 * t2 * s) + .maddN(d, t2 * t); +}; + +const cubicAxisBounds = (pa: number, pb: number, pc: number, pd: number) => { + let a = 3 * pd - 9 * pc + 9 * pb - 3 * pa; + let b = 6 * pa - 12 * pb + 6 * pc; + let c = 3 * pb - 3 * pa; + let disc = b * b - 4 * a * c; + let l = pa; + let h = pa; + + const bounds = (t: number) => { + if (t > 0 && t < 1) { + const x = mixCubic1(pa, pb, pc, pd, t); + x < l && (l = x); + x > h && (h = x); + } + }; + + pd < l && (l = pd); + pd > h && (h = pd); + if (disc >= 0) { + disc = Math.sqrt(disc); + a *= 2; + bounds((-b + disc) / a); + bounds((-b - disc) / a); + } + return [l, h]; +}; + +export class Cubic2 extends PointContainer2 implements + IVertices> { + + static fromJSON(spec: JsonCubic2) { + return cubic2(spec.points, spec.attribs); + } + + static fromLine(a: Vec2, b: Vec2) { + return new Cubic2([a, a.mixNewN(b, 1 / 3), b.mixNewN(a, 1 / 3), b]); + } + + copy() { + return new Cubic2(this._copy(), this.attribs); + } + + boundsRaw(): [Vec2, Vec2] { + // https://stackoverflow.com/a/24814530/294515 + // https://iquilezles.org/www/articles/bezierbbox/bezierbbox.htm + const [a, b, c, d] = this.points; + const x = cubicAxisBounds(a.x, b.x, c.x, d.x); + const y = cubicAxisBounds(a.y, b.y, c.y, d.y); + return Vec2.mapBuffer([x[0], y[0], x[1], y[1]], 2); + } + + pointAt(t: number) { + const pts = this.points; + return mixCubic(pts[0], pts[1], pts[2], pts[3], t); + } + + /** + * Splits curve into 2 sub-curves at position `t`. + * + * http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm + * + * @param t + */ + splitAt(t: number): [Cubic2, Cubic2] { + const [a, b, c, d] = this.points; + if (t <= 0 || t >= 1) { + const p = t <= 0 ? a : d; + const c1 = new Cubic2(Vec2.mapBuffer([p.x, p.y, p.x, p.y, p.x, p.y], 4)); + const c2 = new Cubic2(Vec2.mapBuffer([a.x, a.y, b.x, b.y, c.x, c.y, d.x, d.y], 4)); + return t <= 0 ? [c1, c2] : [c2, c1]; + } + const ab = a.mixNewN(b, t); + const bc = b.mixNewN(c, t); + const cd = c.mixNewN(d, t); + const abc = ab.mixNewN(bc, t); + const bcd = bc.mixNewN(cd, t); + const p = abc.mixNewN(bcd, t); + return [ + new Cubic2(Vec2.mapBuffer([a.x, a.y, ab.x, ab.y, abc.x, abc.y, p.x, p.y], 4)), + new Cubic2(Vec2.mapBuffer([p.x, p.y, bcd.x, bcd.y, cd.x, cd.y, d.x, d.y], 4)) + ]; + } + + vertices(opts?: Partial) { + if (isPlainObject(opts) && (opts).dist !== undefined) { + return new Sampler(this.vertices((opts).num || DEFAULT_SAMPLES)) + .sampleUniform((opts).dist, (opts).last !== false); + } + opts = isNumber(opts) ? + { + num: opts, + last: true + } : + { + num: DEFAULT_SAMPLES, + ...opts + }; + const res: number[] = []; + const [a, b, c, d] = this.points; + const delta = 1 / opts.num; + for (let t = 0; t < opts.num; t++) { + res.push( + mixCubic1(a.x, b.x, c.x, d.x, t * delta), + mixCubic1(a.y, b.y, c.y, d.y, t * delta) + ); + } + opts.last && res.push(d.x, d.y); + return Vec2.mapBuffer(res); + } + + toHiccup() { + return ["path", this.attribs, + [ + ["M", this.points[0]], + ...this.toHiccupPathSegments() + ] + ]; + } + + toHiccupPathSegments() { + const pts = this.points; + return [["C", pts[1], pts[2], pts[3]]]; + } + + toJSON() { + return this._toJSON("cubic2"); + } +} + +export class Quadratic2 extends PointContainer2 implements + IVertices> { + + static fromJSON(spec: JsonQuadratic2) { + return quadratic2(spec.points, spec.attribs); + } + + static fromLine(a: Vec2, b: Vec2) { + return new Quadratic2([a, a.mixNewN(b), b]); + } + + copy() { + return new Quadratic2(this._copy(), this.attribs); + } + + boundsRaw(): [Vec2, Vec2] { + const [a, b, c] = this.points; + const mi = a.copy().min(c); + const ma = a.copy().max(c); + const solve = (a, b, c) => { + const t = clamp01((a - b) / (a - 2.0 * b + c)); + const s = 1 - t; + return s * s * a + 2.0 * s * t * b + t * t * c; + }; + if (b.x < mi.x || b.x > ma.x || b.y < mi.y || b.y > ma.y) { + const q = new Vec2([ + solve(a.x, b.x, c.x), + solve(a.y, b.y, c.y), + ]); + mi.min(q); + ma.max(q); + } + return [mi, ma]; + } + + pointAt(t: number) { + const pts = this.points; + return mixQuadratic(pts[0], pts[1], pts[2], t); + } + + /** + * Splits curve into 2 sub-curves at position `t`. + * + * http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm + * + * @param t + */ + splitAt(t: number): [Quadratic2, Quadratic2] { + const [a, b, c] = this.points; + if (t == 0) { + return [ + new Quadratic2(this._copy([a, a, a])), + new Quadratic2(this._copy([a, b, c])) + ]; + } + if (t == 1) { + return [ + new Quadratic2(this._copy([a, b, c])), + new Quadratic2(this._copy([c, c, c])) + ]; + } + const ab = a.mixNewN(b, t); + const bc = b.mixNewN(c, t); + const p = ab.mixNewN(bc, t); + return [ + new Quadratic2([a.copy(), ab, p]), + new Quadratic2([p, bc, c.copy()]) + ]; + } + + vertices(opts?: number | Partial) { + if (isPlainObject(opts) && (opts).dist !== undefined) { + return new Sampler(this.vertices((opts).num || DEFAULT_SAMPLES)) + .sampleUniform((opts).dist, (opts).last !== false); + } + opts = isNumber(opts) ? + { + num: opts, + last: true + } : + { + num: DEFAULT_SAMPLES, + ...opts + }; + const res: number[] = []; + const delta = 1 / opts.num; + const [a, b, c] = this.points; + for (let t = 0; t < opts.num; t++) { + res.push( + mixQuadratic1(a.x, b.x, c.x, t * delta), + mixQuadratic1(a.y, b.y, c.y, t * delta) + ); + } + opts.last && res.push(c.x, c.y); + return Vec2.mapBuffer(res); + } + + toCubic() { + const [a, b, c] = this.points; + return new Cubic2([ + a.copy(), + a.mulNewN(1 / 3).maddN(b, 2 / 3), + c.mulNewN(1 / 3).maddN(b, 2 / 3), + c.copy() + ]); + } + + toHiccup() { + return ["path", this.attribs, + [ + ["M", this.points[0]], + ...this.toHiccupPathSegments() + ] + ]; + } + + toHiccupPathSegments() { + const pts = this.points; + return [["Q", pts[1], pts[2]]]; + } + + toJSON() { + return this._toJSON("quadratic2"); + } +} + +export function cubic2(points: Vec, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Cubic2; +export function cubic2(a: ReadonlyVec, b: ReadonlyVec, c: ReadonlyVec, d: ReadonlyVec, attribs?: Attribs): Cubic2; +export function cubic2(points: ReadonlyVec[], attribs?: Attribs): Cubic2; +export function cubic2(...args: any[]) { + const [points, attribs] = args4(args); + return new Cubic2(points, attribs); +} + +export function quadratic2(points: Vec, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Quadratic2; +export function quadratic2(a: Vec2 | ReadonlyVec, b: Vec2 | ReadonlyVec, c: Vec2 | ReadonlyVec, attribs?: Attribs): Quadratic2; +export function quadratic2(points: ReadonlyVec[], attribs?: Attribs): Quadratic2; +export function quadratic2(...args: any[]) { + const [points, attribs] = args3(args); + return new Quadratic2(points, attribs); +} diff --git a/packages/geom/src/circle2.ts b/packages/geom/src/circle2.ts new file mode 100644 index 0000000000..edbec805e1 --- /dev/null +++ b/packages/geom/src/circle2.ts @@ -0,0 +1,193 @@ +import { IToHiccup } from "@thi.ng/api/api"; +import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { PI, TAU } from "@thi.ng/math/api"; +import { eqDelta } from "@thi.ng/math/eqdelta"; +import { ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { + asVec2, + setS2, + toCartesian2, + Vec2 +} from "@thi.ng/vectors/vec2"; +import { + Attribs, + DEFAULT_SAMPLES, + HiccupCircle2, + IArcLength, + IBounds, + IBoundsRaw, + ICentroid, + IClassifyPoint, + IPointInside, + IToPolygon, + IVertices, + JsonCircle2, + SamplingOpts +} from "./api"; +import { circumCenter } from "./internal/circumcenter"; +import { edges } from "./internal/edges"; +import { Polygon2 } from "./polygon2"; +import { Rect2 } from "./rect2"; + +export class Circle2 implements + IArcLength, + IBoundsRaw, + IBounds, + ICentroid, + IClassifyPoint, + IPointInside, + IToHiccup, + IToPolygon>, + IVertices> { + + static fromJSON(spec: JsonCircle2) { + return new Circle2( + new Vec2(spec.pos), + spec.r, + spec.attribs + ); + } + + static fromHiccup(spec: HiccupCircle2) { + return new Circle2(asVec2(spec[2]), spec[3], spec[1]); + } + + static from2Points(a: Readonly, b: Readonly, attribs?: Attribs) { + return new Circle2(a.mixNewN(b), a.dist(b) / 2, attribs); + } + static from3Points(a: Readonly, b: Readonly, c: Readonly, attribs?: Attribs) { + const o = circumCenter(a, b, c); + if (o) { + return new Circle2(o, a.dist(o), attribs); + } + } + + pos: Vec2; + r: number; + attribs: Attribs; + + constructor(pos: Vec2, r = 1, attribs?: Attribs) { + this.pos = pos; + this.r = r; + this.attribs = attribs; + } + + copy() { + return new Circle2(this.pos.copy(), this.r, { ...this.attribs }); + } + + edges(opts?: Partial) { + return edges(this.vertices(opts)); + } + + vertices(opts?: number | Partial) { + let [num, last] = isNumber(opts) ? + [opts, false] : + [ + opts.theta ? + Math.floor(TAU / opts.theta) : + opts.dist ? + Math.floor(TAU / (opts.dist / this.r)) : + opts.num || DEFAULT_SAMPLES, + opts.last === true + ]; + const buf: Vec = []; + const pos = this.pos.buf; + const po = this.pos.i; + const ps = this.pos.s; + const r = this.r; + const delta = TAU / num; + last && num++; + for (let i = 0; i < num; i++) { + toCartesian2( + setS2(buf, r, i * delta, i * 2), + pos, i * 2, po, 1, ps + ); + } + return Vec2.mapBuffer(buf, num); + } + + area() { + return PI * this.r * this.r; + } + + arcLength() { + return TAU * this.r; + } + + boundsRaw(): [Vec2, Vec2] { + return [ + this.pos.subNewN(this.r), + this.pos.addNewN(this.r) + ]; + } + + bounds(): Rect2 { + return new Rect2( + this.pos.subNewN(this.r), + new Vec2([this.r, this.r]) + ); + } + + centroid(c?: Vec2) { + return c ? c.set(this.pos) : this.pos; + } + + classifyPoint(p: Readonly) { + const d = p.distSq(this.pos); + const r = this.r * this.r; + return eqDelta(d, r) ? 0 : d < r ? 1 : -1; + } + + pointInside(p: Readonly) { + return this.classifyPoint(p) >= 0; + } + + toPolygon(opts?: number | Partial) { + return new Polygon2(this.vertices(opts)); + } + + toHiccup(): HiccupCircle2 { + return ["circle", this.attribs || {}, this.pos, this.r]; + } + + toJSON() { + return { + type: "circle2", + pos: this.pos.toJSON(), + r: this.r, + attribs: this.attribs, + }; + } +} + +export function circle2(r: number, attribs?: Attribs): Circle2; +export function circle2(x: number, y: number, attribs?: Attribs): Circle2; +export function circle2(x: number, y: number, r: number, attribs?: Attribs): Circle2; +export function circle2(pos: ReadonlyVec, attribs?: Attribs): Circle2; +export function circle2(pos: ReadonlyVec, r: number, attribs?: Attribs): Circle2; +export function circle2(...args: any[]) { + let attribs; + let n = args.length - 1; + if (isPlainObject(args[n]) || args[n] == null) { + attribs = args[n]; + n--; + } + if (isArrayLike(args[0])) { + return new Circle2( + asVec2(args[0]), + n === 1 ? args[n] : 1, + attribs + ); + } + if (n > 0) { + return new Circle2( + new Vec2([args[0], args[1]]), + n === 2 ? args[n] : 1, + attribs + ); + } + return new Circle2(new Vec2(), args[0], attribs); +} diff --git a/packages/geom/src/container2.ts b/packages/geom/src/container2.ts new file mode 100644 index 0000000000..d3f8c066fa --- /dev/null +++ b/packages/geom/src/container2.ts @@ -0,0 +1,134 @@ +import { Mat23 } from "@thi.ng/vectors/mat23"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + CollateOpts, + IBounds, + IBoundsRaw, + ICenter, + ICentroid, + ICollate, + IVertices +} from "./api"; +import { fitIntoBounds2 } from "./fit"; +import { bounds } from "./internal/bounds"; +import { centroid } from "./internal/centroid"; +import { collateWith } from "./internal/collate"; +import { convexHull } from "./internal/graham-scan"; +import { Rect2 } from "./rect2"; + +export class PointContainer2 implements + IBoundsRaw, + IBounds, + ICentroid, + ICenter, + ICollate, + IVertices { + + points: Vec2[]; + attribs: Attribs; + + constructor(pts: Vec2[], attribs?: Attribs) { + this.points = pts; + this.attribs = attribs; + } + + *[Symbol.iterator]() { + yield* this.vertices(); + } + + collate(opts?: Partial) { + return collateWith(Vec2.intoBuffer, this.points, opts, 2); + } + + vertices() { + return this.points; + } + + boundsRaw() { + return bounds(this.points, Vec2.MAX.copy(), Vec2.MIN.copy()); + } + + bounds(): Rect2 { + return Rect2.fromMinMax(...this.boundsRaw()); + } + + convextHull() { + return convexHull(this.points); + } + + centroid(c?: Vec2) { + return centroid(this.points, c || new Vec2()); + } + + center(origin?: Readonly) { + const d = this.centroid().neg(); + return this.translate(origin ? d.add(origin) : d); + } + + flip() { + this.points.reverse(); + return this; + } + + fit(bounds: Rect2) { + fitIntoBounds2(this, bounds); + return this; + } + + rotate(theta: number) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + pts[i].rotate(theta); + } + return this; + } + + scale(v: Readonly) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + pts[i].mul(v); + } + return this; + } + + scaleN(n: number) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + pts[i].mulN(n); + } + return this; + } + + translate(v: Readonly) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + pts[i].add(v); + } + return this; + } + + transform(mat: Readonly) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + mat.mulV(pts[i]); + } + return this; + } + + protected _copy(pts = this.points) { + return Vec2.mapBuffer(Vec2.intoBuffer([], pts), pts.length); + } + + protected _toJSON(type: string) { + return { + type, + attribs: this.attribs, + points: this.points.map((p) => p.toJSON()) + }; + } + + protected _toHiccup(type: string) { + return [type, this.attribs, this.points]; + } +} diff --git a/packages/geom/src/container3.ts b/packages/geom/src/container3.ts new file mode 100644 index 0000000000..c8149bfad0 --- /dev/null +++ b/packages/geom/src/container3.ts @@ -0,0 +1,109 @@ +import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; +import { Mat44 } from "@thi.ng/vectors/mat44"; +import { Vec3, vec3 } from "@thi.ng/vectors/vec3"; +import { + Attribs, + CollateOpts, + IBounds, + IBoundsRaw, + ICenter, + ICentroid, + ICollate, + IVertices +} from "./api"; +import { bounds } from "./internal/bounds"; +import { collateWith } from "./internal/collate"; + +export class PointContainer3 implements + IBoundsRaw, + IBounds, // TODO + ICentroid, + ICenter, + ICollate, + IVertices { + + points: Vec3[]; + attribs: Attribs; + + constructor(pts: Vec3[], attribs?: Attribs) { + this.points = pts; + this.attribs = attribs; + } + + *[Symbol.iterator]() { + yield* this.vertices(); + } + + collate(opts?: Partial) { + return collateWith(Vec3.intoBuffer, this.points, opts, 3); + } + + vertices() { + return this.points; + } + + boundsRaw() { + return bounds(this.points, Vec3.MAX.copy(), Vec3.MIN.copy()); + } + + bounds() { + return this.boundsRaw(); + } + + centroid(c?: Vec3): Vec3 { + const pts = this.points; + const num = pts.length; + !num && illegalArgs("no points available"); + !c && (c = vec3()); + for (let i = num; --i >= 0;) { + c.add(pts[i]); + } + return c.divN(num); + } + + center(p?: Readonly) { + const d = this.centroid().neg(); + return this.translate(p ? d.add(p) : d); + } + + flip() { + this.points.reverse(); + return this; + } + + scale(v: Readonly) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + pts[i].mul(v); + } + return this; + } + + translate(v: Readonly) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + pts[i].add(v); + } + return this; + } + + transform(mat: Readonly) { + const pts = this.points; + for (let i = pts.length; --i >= 0;) { + mat.mulV3(pts[i]); + } + return this; + } + + protected _copy() { + return Vec3.mapBuffer(Vec3.intoBuffer([], this.points), this.points.length); + } + + protected _toJSON(type: string) { + return { + type, + attribs: this.attribs, + points: this.points.map((p) => p.toJSON()) + }; + } +} diff --git a/packages/geom/src/fit.ts b/packages/geom/src/fit.ts new file mode 100644 index 0000000000..2c7828dcbb --- /dev/null +++ b/packages/geom/src/fit.ts @@ -0,0 +1,42 @@ +import { Mat23 } from "@thi.ng/vectors/mat23"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { IBounds, ICentroid, ITransformable } from "./api"; +import { collBounds } from "./internal/bounds"; +import { Rect2 } from "./rect2"; + +const translateScale = (shape: ITransformable, c1: Vec2, c2: Vec2, smat: Mat23) => + shape.transform( + Mat23.concat( + Mat23.translation(c1), + smat, + Mat23.translation(c2) + ) + ); + +export const fitIntoBounds2 = & ITransformable>(shape: T, bounds: Rect2) => { + const obounds = shape.bounds(); + const tscale = bounds.size.copy().divNew(obounds.size); + const scale = Math.min(tscale.x, tscale.y); + return translateScale( + shape, + bounds.centroid(), + obounds.centroid().neg(), + Mat23.scale(scale) + ); +} + +export const fitAllIntoBounds2 = & ICentroid & ITransformable>(shapes: T[], dest: Rect2) => { + const src: Rect2 = collBounds(shapes); + const w = dest.size.x / src.size.x; + const h = dest.size.y / src.size.y; + const s = w > 0 && h > 0 ? Math.min(w, h) : w > 0 ? w : h; + const b = src.copy().scaleN(s).center(dest.centroid()); + const smat = Mat23.scale(s); + for (let i = shapes.length; --i >= 0;) { + const s = shapes[i]; + const c1 = s.centroid(); + const c2 = b.unmapPoint(src.mapPoint(c1)); + translateScale(s, c2, c1.neg(), smat); + } + return shapes; +}; diff --git a/packages/geom/src/index.ts b/packages/geom/src/index.ts new file mode 100644 index 0000000000..46762d01db --- /dev/null +++ b/packages/geom/src/index.ts @@ -0,0 +1,22 @@ +export * from "./api"; +export * from "./container2"; +export * from "./container3"; + +export * from "./arc2"; +export * from "./bezier2"; +export * from "./circle2"; +export * from "./container2"; +export * from "./container3"; +export * from "./line2"; +export * from "./path2"; +export * from "./polygon2"; +export * from "./polyline2"; +export * from "./quad2"; +export * from "./rect2"; +export * from "./sampler"; +export * from "./triangle2"; + +export * from "./fit"; +export * from "./subdiv-curve"; +export * from "./tessellate"; +export * from "./warp"; diff --git a/packages/geom/src/internal/arc-length.ts b/packages/geom/src/internal/arc-length.ts new file mode 100644 index 0000000000..31ed1e0fbe --- /dev/null +++ b/packages/geom/src/internal/arc-length.ts @@ -0,0 +1,14 @@ +import { IVector } from "@thi.ng/vectors/api"; + +export const arcLength = >(pts: ReadonlyArray, closed = false) => { + const num = pts.length; + if (num < 2) return 0; + let res = 0; + let p = pts[0]; + let q = pts[1]; + for (let i = 1; i < num; i++ , p = q, q = pts[i]) { + res += p.dist(q); + } + closed && (res += p.dist(pts[0])); + return res; +}; diff --git a/packages/geom/src/internal/area.ts b/packages/geom/src/internal/area.ts new file mode 100644 index 0000000000..73b8d795b9 --- /dev/null +++ b/packages/geom/src/internal/area.ts @@ -0,0 +1,9 @@ +import { Vec2 } from "@thi.ng/vectors/vec2"; + +export const polygonArea = (pts: ReadonlyArray) => { + let res = 0; + for (let n = pts.length - 1, i = n, j = 0; n >= 0; i = j, j++ , n--) { + res += pts[i].cross(pts[j]); + } + return res / 2; +}; diff --git a/packages/geom/src/internal/args.ts b/packages/geom/src/internal/args.ts new file mode 100644 index 0000000000..8d430d07b3 --- /dev/null +++ b/packages/geom/src/internal/args.ts @@ -0,0 +1,76 @@ +import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; +import { ReadonlyVec } from "@thi.ng/vectors/api"; +import { asVec2, Vec2 } from "@thi.ng/vectors/vec2"; + +export const args3 = (args: any[]) => { + let points = args[0], attribs; + if (isArrayLike(points[0])) { + points = (points).map(asVec2); + attribs = args[1]; + } else if (args.length >= 3 && + isArrayLike(points) && + isArrayLike(args[1]) && + isArrayLike(args[2])) { + points = [asVec2(points), asVec2(args[1]), asVec2(args[2])]; + attribs = args[3]; + } else if (isNumber(points[0])) { + points = Vec2.mapBuffer( + points, + 3, + args[1] || 0, + args[2] || 1, + args[3] || 2 + ); + attribs = args[4]; + } else { + illegalArgs(); + } + return [points, attribs]; +}; + +export const args4 = (args: any[]) => { + let points = args[0], attribs; + if (isArrayLike(points[0])) { + points = (points).map(asVec2); + attribs = args[1]; + } else if (args.length >= 4 && + isArrayLike(points) && + isArrayLike(args[1]) && + isArrayLike(args[2]) && + isArrayLike(args[3])) { + points = [asVec2(points), asVec2(args[1]), asVec2(args[2]), asVec2(args[3])]; + attribs = args[4]; + } else if (isNumber(points[0])) { + points = Vec2.mapBuffer( + points, + 4, + args[1] || 0, + args[2] || 1, + args[3] || 2 + ); + attribs = args[4]; + } else { + illegalArgs(); + } + return [points, attribs]; +}; + +export const argsN = (args: any[]) => { + let points = args[0], attribs; + if (isNumber(points[0])) { + points = Vec2.mapBuffer( + points, + args[1] || points.length / 2, + args[2] || 0, + args[3] || 1, + args[4] || 2 + ); + attribs = args[5]; + } else if (isArrayLike(points[0])) { + points = (points).map(asVec2); + attribs = args[1]; + } + return [points, attribs]; +}; diff --git a/packages/geom/src/internal/barycentric.ts b/packages/geom/src/internal/barycentric.ts new file mode 100644 index 0000000000..0eb94072f0 --- /dev/null +++ b/packages/geom/src/internal/barycentric.ts @@ -0,0 +1,25 @@ +import { IVector } from "@thi.ng/vectors/api"; +import { Vec3 } from "@thi.ng/vectors/vec3"; + +export const toBarycentric = + > + (a: Readonly, b: Readonly, c: Readonly, p: Readonly, out = new Vec3()) => { + + const u = b.subNew(a); + const v = c.subNew(a); + const w = p.subNew(a); + const uu = u.magSq(); + const vv = v.magSq(); + const uv = u.dot(v); + const uw = u.dot(w); + const vw = v.dot(w); + const d = 1 / (uv * uv - uu * vv); + const s = d * (uv * vw - vv * uw); + const t = d * (uv * uw - uu * vw); + return out.setS(1 - (s + t), s, t); + }; + +export const fromBarycentric = + > + (a: Readonly, b: Readonly, c: Readonly, p: Readonly, out?: T) => + a.mulNewN(p.x, out).maddN(b, p.y).maddN(c, p.z); diff --git a/packages/geom/src/internal/bounds.ts b/packages/geom/src/internal/bounds.ts new file mode 100644 index 0000000000..5d4cb1118d --- /dev/null +++ b/packages/geom/src/internal/bounds.ts @@ -0,0 +1,40 @@ +import { IVector } from "@thi.ng/vectors/api"; +import { IBounds, IUnion } from "../api"; + +export const axisBounds = + > + (points: ReadonlyArray, axis: number): [number, number] => { + + let min = Infinity; + let max = -Infinity; + for (let i = points.length; --i >= 0;) { + const x = points[i][axis]; + x < min && (min = x); + x > max && (max = x); + } + return [min, max]; + }; + +export const bounds = + > + (pts: ReadonlyArray, vmin: T, vmax: T): [T, T] => { + + for (let i = pts.length; --i >= 0;) { + const p = pts[i]; + vmin.min(p); + vmax.max(p); + } + return [vmin, vmax]; + }; + +export const collBounds = + , B extends IBounds & IUnion> + (shapes: T[]) => { + + let n = shapes.length - 1; + let res: B = n > 0 ? shapes[n].bounds() : undefined; + for (; --n >= 0;) { + res = res.union(shapes[n].bounds()); + } + return res; + }; diff --git a/packages/geom/src/internal/centroid.ts b/packages/geom/src/internal/centroid.ts new file mode 100644 index 0000000000..e84643f1ef --- /dev/null +++ b/packages/geom/src/internal/centroid.ts @@ -0,0 +1,29 @@ +import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; +import { IVector } from "@thi.ng/vectors/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; + +export const centroid = >(pts: ReadonlyArray, c?: T) => { + const num = pts.length; + !num && illegalArgs("no points available"); + !c && (c = pts[0].empty()); + for (let i = num; --i >= 0;) { + c.add(pts[i]); + } + return c.divN(num); +}; + +export const centerOfWeight = (pts: Vec2[], c?: Vec2) => { + let area = 0; + let x = 0; + let y = 0; + for (let n = pts.length - 1, i = pts[n], j = pts[0], k = 0; k <= n; k++ , i = j, j = pts[k]) { + const z = i.cross(j); + area += z; + x += (i.x + j.x) * z; + y += (i.y + j.y) * z; + } + area = 1 / (area * 3); + x *= area; + y *= area; + return c ? c.setS(x, y) : new Vec2([x, y]); +}; diff --git a/packages/geom/src/internal/circumcenter.ts b/packages/geom/src/internal/circumcenter.ts new file mode 100644 index 0000000000..65517cf648 --- /dev/null +++ b/packages/geom/src/internal/circumcenter.ts @@ -0,0 +1,43 @@ +import { EPS } from "@thi.ng/math/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; + +export const circumCenter = + (a: Readonly, b: Readonly, c: Readonly, eps = EPS) => { + + const deltaAB = Math.abs(a.y - b.y); + const deltaBC = Math.abs(b.y - c.y); + if (deltaAB < eps && deltaBC < eps) { + return null; + } + const ax = a.x, ay = a.y; + const bx = b.x, by = b.y; + const cx = c.x, cy = c.y; + let m1, m2, mx1, mx2, my1, my2, xc, yc; + if (deltaAB < eps) { + m2 = - (cx - bx) / (cy - by); + mx2 = (bx + cx) / 2; + my2 = (by + cy) / 2; + xc = (bx + ax) / 2; + yc = m2 * (xc - mx2) + my2; + } else if (deltaBC < eps) { + m1 = - (bx - ax) / (by - ay); + mx1 = (ax + bx) / 2; + my1 = (ay + by) / 2; + xc = (cx + bx) / 2; + yc = m1 * (xc - mx1) + my1; + } else { + m1 = - (bx - ax) / (by - ay); + m2 = - (cx - bx) / (cy - by); + mx1 = (ax + bx) / 2; + my1 = (ay + by) / 2; + mx2 = (bx + cx) / 2; + my2 = (by + cy) / 2; + xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2); + if (deltaAB > deltaBC) { + yc = m1 * (xc - mx1) + my1; + } else { + yc = m2 * (xc - mx2) + my2; + } + } + return new Vec2(xc, yc); + }; diff --git a/packages/geom/src/internal/closest-point.ts b/packages/geom/src/internal/closest-point.ts new file mode 100644 index 0000000000..ca8db6d33f --- /dev/null +++ b/packages/geom/src/internal/closest-point.ts @@ -0,0 +1,99 @@ +import { IVector } from "@thi.ng/vectors/api"; + +export const closestPoint = + >(p: T, pts: T[]) => { + + let minD = Infinity; + let closest: T; + for (let i = pts.length; --i >= 0;) { + const d = pts[i].distSq(p); + if (d < minD) { + minD = d; + closest = pts[i]; + } + } + return closest; + }; + +export const closestCoeff = + >(p: T, a: T, b: T) => { + + const d = b.subNew(a); + const l = d.magSq(); + if (l > 1e-6) { + return p.subNew(a).dot(d) / l; + } + }; + +export const closestPointSegment = + >(p: T, a: T, b: T, out: T) => { + + const t = closestCoeff(p, a, b); + if (t !== undefined) { + return t <= 0.0 ? + out.set(a) : + t >= 1.0 ? + out.set(b) : + a.mixNewN(b, t, out); + } + }; + +export const closestPointPolyline = + >(p: Readonly, pts: ReadonlyArray, closed = false) => { + + const closest = pts[0].empty(); + const tmp = closest.empty(); + const n = pts.length - 1; + let minD = Infinity, i, j; + if (closed) { + i = n; + j = 0; + } else { + i = 0; + j = 1; + } + for (; j <= n; i = j, j++) { + if (closestPointSegment(p, pts[i], pts[j], tmp)) { + const d = p.distSq(tmp); + if (d < minD) { + minD = d; + closest.set(tmp); + } + } + } + return closest; + }; + +/** + * Returns the index of the start point containing the segment in the + * polyline array `points` farthest away from `p` with regards to the + * line segment `a` to `b`. `points` is only checked between indices + * `from` and `to`. + * + * @param a + * @param b + * @param points + * @param from + * @param to + */ +export const farthestPointSegment = + >( + a: T, + b: T, + points: T[], + from = 0, + to = points.length) => { + + let maxD = -1; + let maxIdx; + const tmp = a.empty(); + for (let i = from; i < to; i++) { + const p = points[i]; + const d = p.distSq(closestPointSegment(p, a, b, tmp) || a); + if (d > maxD) { + maxD = d; + maxIdx = i; + } + } + return [maxIdx, Math.sqrt(maxD)]; + }; diff --git a/packages/geom/src/internal/collate.ts b/packages/geom/src/internal/collate.ts new file mode 100644 index 0000000000..c29f1e1a28 --- /dev/null +++ b/packages/geom/src/internal/collate.ts @@ -0,0 +1,37 @@ +import { Vec, IVec } from "@thi.ng/vectors/api"; +import { CollateOpts } from "../api"; + +export const remap = (buf: Vec, pts: IVec[], start: number, cstride: number, estride: number) => { + for (let i = pts.length; --i >= 0;) { + const p = pts[i]; + p.buf = buf; + p.i = start + i * estride; + p.s = cstride; + } + return buf; +}; + +export const collateWith = ( + fn: (buf: Vec, src: Iterable>, start, cstride, estride) => Vec, + pts: T[], + opts: Partial, + stride: number) => { + + opts = { + start: 0, + cstride: 1, + estride: stride, + ...opts + }; + const { start, cstride, estride } = opts; + return remap( + fn( + opts.buf || new Array(start + pts.length * estride).fill(0), + pts, + start, + cstride, + estride + ), + pts, start, cstride, estride + ); +}; diff --git a/packages/geom/src/internal/corner.ts b/packages/geom/src/internal/corner.ts new file mode 100644 index 0000000000..8bf3274009 --- /dev/null +++ b/packages/geom/src/internal/corner.ts @@ -0,0 +1,38 @@ +import { sign } from "@thi.ng/math/abs"; +import { EPS } from "@thi.ng/math/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; + +export const corner = + (a: Readonly, b: Readonly, c: Readonly) => { + const ax = a.x; + const ay = a.y; + return (b.x - ax) * (c.y - ay) - (c.x - ax) * (b.y - ay); + }; + +export const classify = + (a: Readonly, b: Readonly, c: Readonly, eps = EPS) => + sign(corner(a, b, c), eps); + +export const clockwise2 = + (a: Readonly, b: Readonly, c: Readonly) => + corner(a, b, c) < 0; + +export const classifyPointInTriangle2 = + (p: Readonly, a: Readonly, b: Readonly, c: Readonly) => { + const s = clockwise2(a, b, c) ? 1 : -1; + return sign( + Math.min( + s * corner(a, c, p), + s * corner(b, a, p), + s * corner(c, b, p) + ) + ); + }; + +export const pointInTriangle2 = + (p: Readonly, a: Readonly, b: Readonly, c: Readonly) => { + const s = clockwise2(a, b, c) ? 1 : -1; + return s * corner(a, c, p) >= 0 && + s * corner(b, a, p) >= 0 && + s * corner(c, b, p) >= 0; + }; diff --git "a/packages/geom/src/internal/douglas\342\200\223peucker.ts" "b/packages/geom/src/internal/douglas\342\200\223peucker.ts" new file mode 100644 index 0000000000..b2a7061dc1 --- /dev/null +++ "b/packages/geom/src/internal/douglas\342\200\223peucker.ts" @@ -0,0 +1,43 @@ +import { peek } from "@thi.ng/transducers/func/peek"; +import { IVector } from "@thi.ng/vectors/api"; +import { farthestPointSegment } from "./closest-point"; + +// https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm + +export const simplifyPolyline = + >(pts: T[], eps = 0, closed = false) => { + + let num = pts.length; + const visited: boolean[] = []; + if (num <= 2) { + return pts.slice(); + } + if (closed && !pts[0].eqDelta(peek(pts))) { + pts = pts.slice(); + pts.push(pts[0]); + num++; + } + + const $ = (from: number, to: number) => { + visited[from] = visited[to] = true; + if (to <= from + 1) { + return; + } + const [maxIdx, maxD] = farthestPointSegment(pts[from], pts[to], pts, from + 1, to); + if (maxD <= eps) { + return; + } + $(from, maxIdx); + $(maxIdx, to); + }; + + $(0, num - 1); + + const res: T[] = []; + for (let i = 0, n = closed ? num - 1 : num; i < n; i++) { + if (visited[i]) { + res.push(pts[i]); + } + } + return res; + }; diff --git a/packages/geom/src/internal/edges.ts b/packages/geom/src/internal/edges.ts new file mode 100644 index 0000000000..fe9bed6d49 --- /dev/null +++ b/packages/geom/src/internal/edges.ts @@ -0,0 +1,6 @@ +import { wrap } from "@thi.ng/transducers/iter/wrap"; +import { partition } from "@thi.ng/transducers/xform/partition"; + +export const edges = (vertices: Iterable, closed = false) => { + return partition(2, 1, closed ? wrap(vertices, 1, false, true) : vertices); +}; diff --git a/packages/geom/src/internal/eq-delta.ts b/packages/geom/src/internal/eq-delta.ts new file mode 100644 index 0000000000..657aea90b1 --- /dev/null +++ b/packages/geom/src/internal/eq-delta.ts @@ -0,0 +1,11 @@ +import { EPS } from "@thi.ng/math/api"; +import { IVector } from "@thi.ng/vectors/api"; + +export const containsDelta = >(pts: Iterable, q: Readonly, eps = EPS) => { + for (let p of pts) { + if (p.eqDelta(q, eps)) { + return true; + } + } + return false; +}; diff --git a/packages/geom/src/internal/graham-scan.ts b/packages/geom/src/internal/graham-scan.ts new file mode 100644 index 0000000000..eb446aa0b4 --- /dev/null +++ b/packages/geom/src/internal/graham-scan.ts @@ -0,0 +1,37 @@ +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { corner } from "./corner"; + +/** + * Returns array of points defining the 2D Convex Hull of `pts` using + * the Graham Scan method. + * + * https://en.wikipedia.org/wiki/Graham_scan + * + * @param pts + */ +export const convexHull = (pts: ReadonlyArray) => { + const num = pts.length; + const res: Vec2[] = []; + let h = 0, i; + pts = pts.slice().sort(Vec2.comparator(0, 1)); + + const scan = (p: Vec2, thresh: number) => { + while (h >= thresh && corner(res[h - 2], res[h - 1], p) >= 0) { + res.pop(); + h--; + } + res[h++] = p; + }; + + for (i = 0; i < num; i++) { + scan(pts[i], 2); + } + res.pop(); + h--; + const h2 = h + 2; + for (i = num - 1; i >= 0; i--) { + scan(pts[i], h2); + } + res.pop(); + return res; +}; diff --git a/packages/geom/src/internal/liang-barsky.ts b/packages/geom/src/internal/liang-barsky.ts new file mode 100644 index 0000000000..9106f6faf3 --- /dev/null +++ b/packages/geom/src/internal/liang-barsky.ts @@ -0,0 +1,50 @@ +import { EPS } from "@thi.ng/math/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; + +// https://en.wikipedia.org/wiki/Liang%E2%80%93Barsky_algorithm +// https://github.com/thi-ng/c-thing/blob/master/src/geom/clip/liangbarsky.c + +export const liangBarsky2 = + (la: Vec2, lb: Vec2, tl: Vec2, br: Vec2, ca?: Vec2, cb?: Vec2): [Vec2, Vec2, number, number] => { + const [lax, lay] = la; + const dx = lb.x - lax; + const dy = lb.y - lay; + let a = 0; + let b = 1; + + const clip = (p: number, q: number) => { + if (q < 0 && Math.abs(p) < EPS) { + return 0; + } + const r = q / p; + if (p < 0) { + if (r > b) { + return false; + } else if (r > a) { + a = r; + } + } else if (p > 0) { + if (r < a) { + return false; + } else if (r < b) { + b = r; + } + } + return true; + }; + + if (!(clip(-dx, -(tl.x - lax)) && + clip(dx, br.x - lax) && + clip(-dy, -(tl.y - lay)) && + clip(dy, br.y - lay))) { + return; + } + + !ca && (ca = new Vec2()); + !cb && (cb = new Vec2()); + + ca.setS(a * dx + lax, a * dy + lay); + cb.setS(b * dx + lax, b * dy + lay); + + return [ca, cb, a, b]; + }; diff --git a/packages/geom/src/internal/line-intersection.ts b/packages/geom/src/internal/line-intersection.ts new file mode 100644 index 0000000000..583a098dd4 --- /dev/null +++ b/packages/geom/src/internal/line-intersection.ts @@ -0,0 +1,31 @@ +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { LineIntersection, LineIntersectionType } from "../api"; + +export const intersectLines2 = (a: Vec2, b: Vec2, c: Vec2, d: Vec2) => { + const bax = b.x - a.x; + const bay = b.y - a.y; + const dcx = d.x - c.x; + const dcy = d.y - c.y; + const acx = a.x - c.x; + const acy = a.y - c.y; + const det = dcy * bax - dcx * bay; + let alpha = dcx * acy - dcy * acx; + let beta = bax * acy - bay * acx; + if (det === 0) { + if (alpha === 0 && beta === 0) { + return { type: LineIntersectionType.COINCIDENT }; + } + return { type: LineIntersectionType.PARALLEL }; + } + alpha /= det; + beta /= det; + return >{ + type: (0 <= alpha && alpha <= 1) && (0 <= beta && beta <= 1) ? + LineIntersectionType.INTERSECT : + LineIntersectionType.INTERSECT_OUTSIDE, + isec: a.mixNewN(b, alpha), + alpha, + beta, + det, + }; +}; diff --git a/packages/geom/src/internal/sutherland-hodgeman.ts b/packages/geom/src/internal/sutherland-hodgeman.ts new file mode 100644 index 0000000000..fe4b1ea771 --- /dev/null +++ b/packages/geom/src/internal/sutherland-hodgeman.ts @@ -0,0 +1,43 @@ +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { classify } from "./corner"; +import { intersectLines2 } from "./line-intersection"; + +/** + * Extended version of Sutherland-Hodgeman convex polygon clipping + * supporting any convex boundary (not only rects). Returns new array of + * clipped vertices. + * + * https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm + * + * @param poly subject poly + * @param bounds clipping boundary + * @param bc pre-computed boundary centroid + * @param eps edge classification tolerance + */ +export const clipConvex = (poly: Vec2[], bounds: Vec2[], bc: Vec2, eps = 1e-4) => { + for (let ne = bounds.length, j = ne - 1, i = 0; i < ne; j = i, i++) { + const clipped = []; + const ca = bounds[j]; + const cb = bounds[i]; + const sign = classify(ca, cb, bc, eps); + for (let np = poly.length, k = np - 1, l = 0; l < np; k = l, l++) { + const p = poly[k]; + const q = poly[l]; + const cqsign = classify(ca, cb, q, eps); + if (classify(ca, cb, p, eps) === sign) { + clipped.push( + cqsign !== sign ? + intersectLines2(ca, cb, p, q).isec : + q + ); + } else if (cqsign === sign) { + clipped.push(intersectLines2(ca, cb, p, q).isec, q); + } + } + if (clipped.length < 2) { + return []; + } + poly = clipped; + } + return poly; +}; diff --git a/packages/geom/src/line2.ts b/packages/geom/src/line2.ts new file mode 100644 index 0000000000..4c90fac069 --- /dev/null +++ b/packages/geom/src/line2.ts @@ -0,0 +1,96 @@ +import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { asVec2, Vec2 } from "@thi.ng/vectors/vec2"; +import { Attribs, HiccupLine2, SamplingOpts } from "./api"; +import { PointContainer2 } from "./container2"; +import { liangBarsky2 } from "./internal/liang-barsky"; +import { intersectLines2 } from "./internal/line-intersection"; +import { Rect2 } from "./rect2"; +import { Sampler } from "./sampler"; + +export class Line2 extends PointContainer2 { + + constructor(points: Vec2[], attribs?: Attribs) { + if (points.length > 2) { + points = points.slice(0, 2); + } + super(points, attribs); + } + + copy() { + return new Line2(this._copy(), { ...this.attribs }); + } + + edges() { + return this.points.slice(0, 2); + } + + area() { + return 0; + } + + arcLength() { + const pts = this.points; + return pts[0].dist(pts[1]); + } + + vertices(opts?: number | Partial) { + const sampler = new Sampler(this.points); + if (opts !== undefined) { + if (isPlainObject(opts)) { + return opts.dist ? + sampler.sampleUniform(opts.dist, opts.last !== false) : + sampler.sampleFixedNum(opts.num, opts.last !== false); + } + return sampler.sampleFixedNum(opts, true); + } else { + return this.points; + } + } + + intersectLine(l: Line2) { + return intersectLines2(this.points[0], this.points[1], l.points[0], l.points[1]); + } + + clipRect(bounds: [Vec2, Vec2] | Rect2) { + const res = bounds instanceof Rect2 ? + liangBarsky2(this.points[0], this.points[1], bounds.pos, bounds.pos.addNew(bounds.size)) : + liangBarsky2(this.points[0], this.points[1], bounds[0], bounds[1]); + if (res) { + return new Line2([res[0], res[1]], { ...this.attribs }); + } + } + + toHiccup(): HiccupLine2 { + return ["line", this.attribs || {}, this.points[0], this.points[1]]; + } + + toHiccupPathSegments() { + return [["L", this.points[1]]]; + } + + toJSON() { + return this._toJSON("line2"); + } +} + +export function line2(points: Vec, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Line2; +export function line2(x1: number, y1: number, x2: number, y2: number, attribs?: Attribs): Line2; +export function line2(a: ReadonlyVec, b: ReadonlyVec, attribs?: Attribs): Line2; +export function line2(...args: any[]) { + let points = args[0], attribs; + let n = args.length - 1; + if (isPlainObject(args[n]) || args[n] == null) { + attribs = args[n]; + n--; + } + if (isNumber(points)) { + return new Line2(Vec2.mapBuffer(args.slice(0, 4), 2), attribs); + } + if (isArrayLike(points)) { + return new Line2([asVec2(points), asVec2(args[1])], attribs); + } + return new Line2(Vec2.mapBuffer(points, 2, args[1] || 0, args[2] || 1, args[3] || 2), attribs); +} diff --git a/packages/geom/src/path2.ts b/packages/geom/src/path2.ts new file mode 100644 index 0000000000..eedf1c3ab1 --- /dev/null +++ b/packages/geom/src/path2.ts @@ -0,0 +1,467 @@ +import { isNumber } from "@thi.ng/checks/is-number"; +import { rad } from "@thi.ng/math/angle"; +import { eqDelta } from "@thi.ng/math/eqdelta"; +import { ensureArray } from "@thi.ng/transducers/func/ensure-array"; +import { peek } from "@thi.ng/transducers/func/peek"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + IBounds, + IBoundsRaw, + IToPolygon, + IVertices, + PathSegment, + SamplingOpts, + SegmentType +} from "./api"; +import { Arc2 } from "./arc2"; +import { Cubic2, Quadratic2 } from "./bezier2"; +import { Line2 } from "./line2"; +import { Polygon2 } from "./polygon2"; +import { Polyline2 } from "./polyline2"; +import { Rect2 } from "./rect2"; +import { simplifyPolyline } from "./internal/douglas–peucker"; + +export class Path2 implements + Iterable, + IBoundsRaw, + IBounds, + IToPolygon, + IVertices { + + segments: PathSegment[]; + closed: boolean; + attribs: Attribs; + + constructor(segments?: PathSegment[], attribs?: Attribs) { + this.segments = segments || []; + this.attribs = attribs; + this.closed = false; + } + + *[Symbol.iterator]() { + yield* (this.segments); + } + + add(s: PathSegment) { + this.segments.push(s); + } + + boundsRaw(): [Vec2, Vec2] { + const min = Vec2.MAX.copy(); + const max = Vec2.MIN.copy(); + for (let s of this.segments) { + if (s.geo) { + const b = s.geo.boundsRaw(); + min.min(b[0]); + max.max(b[1]); + } + } + return [min, max]; + } + + bounds() { + return Rect2.fromMinMax(...this.boundsRaw()); + } + + simplify(eps = 0.01): Path2 { + const res: PathSegment[] = []; + const orig = this.segments; + const n = orig.length; + let points: Vec2[]; + let lastP: Vec2; + for (let i = 0; i < n; i++) { + const s = orig[i]; + if (s.type === SegmentType.LINE || s.type === SegmentType.POLYLINE) { + points = (points || []).concat(ensureArray(s.geo.vertices())); + lastP = peek(points); + } else if (points) { + points.push(lastP); + res.push({ + geo: new Polyline2(simplifyPolyline(points, eps)), + type: SegmentType.POLYLINE, + }); + points = null; + } else { + res.push(s); + } + } + if (points) { + points.push(lastP); + res.push({ + geo: new Polyline2(points), + type: SegmentType.POLYLINE, + }); + } + this.segments = res; + return this; + } + + vertices(opts?: number | Partial) { + const _opts = isNumber(opts) ? { num: opts } : opts; + let verts: Vec2[] = []; + for (let segs = this.segments, n = segs.length - 1, i = 0; i <= n; i++) { + const s = segs[i]; + if (s.geo) { + const v = ensureArray(s.geo.vertices({ ..._opts, last: i === n && !this.closed })); + // console.log(i, SegmentType[s.type], v.toString()); + verts = verts.concat(v); + } + } + return verts; + } + + toPolygon(opts?: number | Partial) { + return new Polygon2(this.vertices(opts)); + } + + toPolyline(res = 10) { + return new Polyline2(this.vertices(res)); + } + + toHiccup() { + const dest: any[] = []; + const res: any[] = ["path", this.attribs || {}, dest]; + const src = this.segments; + const n = src.length; + if (n > 1) { + dest.push(["M", src[0].point]); + for (let i = 1; i < n; i++) { + dest.push(...src[i].geo.toHiccupPathSegments()); + } + if (this.closed) { + dest.push(["Z"]); + } + } + return res; + } +} + +const CMD_RE = /[achlmqstvz]/i; + +export class PathBuilder { + + static roundedRect(pos: Vec2, size: Vec2, r: Vec2) { + const b = new PathBuilder(), + w = size.x - 2 * r.x, + h = size.y - 2 * r.y; + b.moveTo(new Vec2([pos.x + r.x, pos.y])); + b.hlineTo(w, true); + b.arcTo(r, r, 0, false, true, true); + b.vlineTo(h, true); + b.arcTo(new Vec2([-r.x, r.y]), r, 0, false, true, true); + b.hlineTo(-w, true); + b.arcTo(new Vec2([-r.x, -r.y]), r, 0, false, true, true); + b.vlineTo(-h, true); + b.arcTo(new Vec2([r.x, -r.y]), r, 0, false, true, true); + return b.curr; + } + + static fromSVG(svg: string) { + const b = new PathBuilder(); + try { + let cmd: string; + for (let n = svg.length, i = 0; i < n;) { + i = skipWS(svg, i); + const c = svg.charAt(i); + if (CMD_RE.test(c)) { + cmd = c; + i++; + } + let p, pa, pb, t1, t2, t3; + switch (cmd.toLowerCase()) { + case "m": + [p, i] = readPoint(svg, i); + b.moveTo(p, cmd === "m"); + break; + case "l": + [p, i] = readPoint(svg, i); + b.lineTo(p, cmd === "l"); + break; + case "h": + [p, i] = readFloat(svg, i); + b.hlineTo(p, cmd === "h"); + break; + case "v": + [p, i] = readFloat(svg, i); + b.vlineTo(p, cmd === "v"); + break; + case "q": + [pa, i] = readPoint(svg, i); + [p, i] = readPoint(svg, i); + // console.log("quadratic", pa.toString(), p.toString()); + b.quadraticTo(pa, p, cmd === "q"); + break; + case "c": + [pa, i] = readPoint(svg, i); + [pb, i] = readPoint(svg, i); + [p, i] = readPoint(svg, i); + // console.log("cubic", pa.toString(), pb.toString(), p.toString()); + b.cubicTo(pa, pb, p, cmd === "c"); + break; + case "s": + [pa, i] = readPoint(svg, i); + [p, i] = readPoint(svg, i); + // console.log("cubicChain", pa.toString(), p.toString()); + b.cubicChainTo(pa, p, cmd === "s"); + break; + case "t": + [p, i] = readPoint(svg, i); + // console.log("quadraticChain", p.toString()); + b.quadraticChainTo(p, cmd === "t"); + break; + case "a": { + [pa, i] = readPoint(svg, i); + [t1, i] = readFloat(svg, i); + [t2, i] = readFloat(svg, i); + [t3, i] = readFloat(svg, i); + [pb, i] = readPoint(svg, i); + // console.log("arc", pa.toString(), rad(t1), t2, t3, pb.toString()); + b.arcTo(pb, pa, rad(t1), !!t2, !!t3, cmd === "a"); + break; + } + case "z": + b.closePath(); + break; + default: + throw new Error(`unsupported segment type: ${c} @ pos ${i}`); + } + } + return b.paths; + } catch (e) { + throw e instanceof Error ? e : new Error(`illegal char '${svg.charAt(e)}' @ ${e}`); + } + } + + paths: Path2[]; + protected curr: Path2; + protected currP: Vec2; + protected bezierP: Vec2; + protected startP: Vec2; + + constructor() { + this.paths = []; + this.newPath(); + } + + *[Symbol.iterator]() { + yield* this.paths; + } + + newPath() { + this.curr = new Path2(); + this.paths.push(this.curr); + this.currP = new Vec2(); + this.bezierP = new Vec2(); + this.startP = new Vec2(); + } + + moveTo(p: Vec2, relative = false): PathBuilder { + if (this.curr.segments.length > 0) { + this.curr = new Path2(); + this.paths.push(this.curr); + } + p = this.updateCurrent(p, relative); + this.startP.set(p); + this.bezierP.set(p); + this.curr.add({ + point: p, + type: SegmentType.MOVE, + }); + return this; + } + + lineTo(p: Vec2, relative = false): PathBuilder { + this.curr.add({ + geo: new Line2([ + this.currP.copy(), + this.updateCurrent(p, relative) + ]), + type: SegmentType.LINE, + }); + this.bezierP.set(this.currP); + return this; + } + + hlineTo(x: number, relative = false): PathBuilder { + const prev = this.currP.copy(); + this.currP.x = relative ? this.currP.x + x : x; + this.bezierP.set(this.currP); + this.curr.add({ + geo: new Line2([prev, this.currP.copy()]), + type: SegmentType.LINE, + }); + return this; + } + + vlineTo(y: number, relative = false): PathBuilder { + const prev = this.currP.copy(); + this.currP.y = relative ? this.currP.y + y : y; + this.bezierP.set(this.currP); + this.curr.add({ + geo: new Line2([prev, this.currP.copy()]), + type: SegmentType.LINE, + }); + return this; + } + + cubicTo(cp1: Vec2, cp2: Vec2, p: Vec2, relative = false) { + const c2 = this.absPoint(cp2, relative); + this.bezierP.set(c2); + this.curr.add({ + geo: new Cubic2([ + this.currP.copy(), + this.absPoint(cp1, relative), + c2, + this.updateCurrent(p, relative), + ]), + type: SegmentType.CUBIC, + }); + return this; + } + + quadraticTo(cp: Vec2, p: Vec2, relative = false) { + const c1 = this.absPoint(cp, relative); + this.bezierP.set(c1); + this.curr.add({ + geo: new Quadratic2([ + this.currP.copy(), + c1, + this.updateCurrent(p, relative), + ]), + type: SegmentType.QUADRATIC, + }); + return this; + } + + cubicChainTo(cp2: Vec2, p: Vec2, relative = false) { + const prevMode = peek(this.curr.segments).type; + const c1 = this.currP.copy(); + if (prevMode === SegmentType.CUBIC) { + c1.add(c1.subNew(this.bezierP)); + } + const c2 = this.absPoint(cp2, relative); + this.bezierP.set(c2); + this.curr.add({ + geo: new Cubic2([ + this.currP.copy(), + c1, + c2, + this.updateCurrent(p, relative), + ]), + type: SegmentType.CUBIC, + }); + return this; + } + + quadraticChainTo(p: Vec2, relative = false) { + const prevMode = peek(this.curr.segments).type; + const c1 = this.currP.copy(); + if (prevMode === SegmentType.QUADRATIC) { + c1.mulN(2).sub(this.bezierP); + } + this.bezierP.set(c1); + this.curr.add({ + geo: new Quadratic2([ + this.currP.copy(), + c1, + this.updateCurrent(p, relative), + ]), + type: SegmentType.CUBIC, + }); + return this; + } + + arcTo(p: Vec2, r: Vec2, xaxis: number, xl: boolean, clockwise: boolean, relative = false) { + if (eqDelta(r.x, 0) || eqDelta(r.y, 0)) { + return this.lineTo(p, relative); + } + const prev = this.currP.copy(); + const arc = Arc2.from2Points(prev, this.updateCurrent(p, relative), r, xaxis, xl, clockwise); + this.curr.add({ + geo: arc, + type: SegmentType.ARC, + }); + this.bezierP.set(this.currP); + return this; + } + + closePath() { + this.curr.add({ + geo: new Line2([this.currP.copy(), this.startP.copy()]), + type: SegmentType.LINE, + }); + this.curr.closed = true; + return this; + } + + protected updateCurrent(p: Vec2, relative: boolean) { + p = (relative ? this.currP.add(p) : this.currP.set(p)).copy(); + return p; + } + + protected absPoint(p: Vec2, relative: boolean) { + return relative ? p.add(this.currP) : p; + } +} + +const readPoint = (src: string, index: number): [Vec2, number] => { + let x, y; + [x, index] = readFloat(src, index); + index = skipWS(src, index); + [y, index] = readFloat(src, index); + return [new Vec2([x, y]), index]; +}; + +const isWS = (c: string) => c === " " || c === "\n" || c === "\r" || c === "\t"; + +const skipWS = (src: string, i: number) => { + const n = src.length; + while (i < n && isWS(src.charAt(i))) i++; + return i; +}; + +const readFloat = (src: string, index: number) => { + index = skipWS(src, index); + let signOk = true; + let dotOk = true; + let expOk = false; + let commaOk = false; + let i = index; + for (let n = src.length; i < n; i++) { + const c = src.charAt(i); + // console.log("float", src.substring(index, i + 1)); + if ("0" <= c && c <= "9") { + expOk = true; + commaOk = true; + signOk = false; + continue; + } + if (c === "-" || c === "+") { + if (!signOk) break; + signOk = false; + continue; + } + if (c === ".") { + if (!dotOk) break; + dotOk = false; + continue; + } + if (c === "e") { + if (!expOk) throw i; + expOk = false; + dotOk = false; + signOk = true; + continue; + } + if (c === ",") { + if (!commaOk) throw i; + i++; + } + break; + } + if (i === index) { + throw new Error(`expected coordinate @ pos: ${i}`); + } + return [parseFloat(src.substring(index, i)), i]; +} diff --git a/packages/geom/src/polygon2.ts b/packages/geom/src/polygon2.ts new file mode 100644 index 0000000000..3fbb535288 --- /dev/null +++ b/packages/geom/src/polygon2.ts @@ -0,0 +1,161 @@ +import { ICopy, IToHiccup } from "@thi.ng/api/api"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { TAU } from "@thi.ng/math/api"; +import { cycle } from "@thi.ng/transducers/iter/cycle"; +import { normRange } from "@thi.ng/transducers/iter/norm-range"; +import { tuples } from "@thi.ng/transducers/iter/tuples"; +import { push } from "@thi.ng/transducers/rfn/push"; +import { transduce } from "@thi.ng/transducers/transduce"; +import { map } from "@thi.ng/transducers/xform/map"; +import { ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { asVec2, toCartesian2, Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + HiccupPolygon2, + IArcLength, + IArea, + IEdges, + IPointInside, + ITessellateable, + SamplingOpts, + SubdivKernel, + Tessellator +} from "./api"; +import { PointContainer2 } from "./container2"; +import { arcLength } from "./internal/arc-length"; +import { polygonArea } from "./internal/area"; +import { argsN } from "./internal/args"; +import { centerOfWeight, centroid } from "./internal/centroid"; +import { closestPointPolyline } from "./internal/closest-point"; +import { edges } from "./internal/edges"; +import { containsDelta } from "./internal/eq-delta"; +import { clipConvex } from "./internal/sutherland-hodgeman"; +import { Sampler } from "./sampler"; +import { subdivideCurve } from "./subdiv-curve"; +import { tessellate } from "./tessellate"; +import { simplifyPolyline } from "./internal/douglas–peucker"; + +export class Polygon2 extends PointContainer2 implements + IArcLength, + IArea, + ICopy, + IEdges, + IPointInside, + ITessellateable, + IToHiccup { + + static fromHiccup([_, attribs, pts]: HiccupPolygon2) { + return new Polygon2( + isNumber(pts[0]) ? + Vec2.mapBuffer(pts) : + (pts).map(asVec2), + attribs + ); + } + + static star(r: number, n: number, profile: number[]) { + const total = n * profile.length; + const pts = transduce( + map(([i, p]) => new Vec2(toCartesian2([r * p, i * TAU]))), + push(), + tuples(normRange(total, false), cycle(profile)) + ); + return new Polygon2(pts); + } + + copy() { + return new Polygon2(this._copy(), { ...this.attribs }); + } + + edges() { + return edges(this.points, true); + } + + area(signed = true) { + const area = polygonArea(this.points); + return signed ? area : Math.abs(area); + } + + arcLength() { + return arcLength(this.points, true); + } + + centroid(c?: Vec2): Vec2 { + return centerOfWeight(this.points, c); + } + + closestPoint(p: Readonly) { + return closestPointPolyline(p, this.points, true); + } + + pointInside(p: Readonly) { + const pts = this.points; + if (containsDelta(pts, p)) return true; + const px = p.x; + const py = p.y; + let inside = false; + for (let n = pts.length - 1, i = n, j = 0; j < n; i = j, j++) { + const [ax, ay] = pts[i]; + const [bx, by] = pts[j]; + (((by < py && ay >= py) || (ay < py && by >= py)) && + ((py - by) / (ay - by) * (ax - bx) + bx) < px) && + (inside = !inside); + } + return inside; + } + + simplify(eps: number) { + return new Polygon2(simplifyPolyline(this.points, eps, true), { ...this.attribs }); + } + + vertices(opts?: number | Partial) { + const sampler = new Sampler(this.points, true); + if (opts !== undefined) { + return isPlainObject(opts) ? + opts.dist ? + sampler.sampleUniform(opts.dist, opts.last) : + sampler.sampleFixedNum(opts.num, opts.last) : + sampler.sampleFixedNum(opts, false); + } else { + return this.points; + } + } + + clipConvex(boundary: Polygon2 | Vec2[]) { + let bpts, bc; + if (boundary instanceof Polygon2) { + bpts = boundary.points; + bc = boundary.centroid(); + } else { + bpts = boundary; + bc = centroid(bpts, new Vec2()); + } + return new Polygon2(clipConvex(this.points, bpts, bc), { ...this.attribs }); + } + + subdivide(kernel: SubdivKernel, iter = 1) { + return new Polygon2(subdivideCurve(kernel, this.points, iter, true), { ...this.attribs }); + } + + tessellate(tessel: Tessellator, iter?: number): Vec2[][]; + tessellate(tessel: Iterable>): Vec2[][]; + tessellate(...args: any[]) { + return tessellate.apply(null, [this.points, ...args]); + } + + toHiccup() { + return this._toHiccup("polygon"); + } + + toJSON() { + return this._toJSON("polygon2"); + } +} + +export function polygon2(points: Vec, num?: number, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Polygon2; +export function polygon2(points: ReadonlyVec[], attribs?: Attribs): Polygon2; +export function polygon2(...args: any[]) { + const [points, attribs] = argsN(args); + return new Polygon2(points, attribs); +} diff --git a/packages/geom/src/polyline2.ts b/packages/geom/src/polyline2.ts new file mode 100644 index 0000000000..4f9853c27c --- /dev/null +++ b/packages/geom/src/polyline2.ts @@ -0,0 +1,90 @@ +import { ICopy, IToHiccup } from "@thi.ng/api/api"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + IArcLength, + IArea, + IEdges, + IVertices, + SamplingOpts, + SubdivKernel +} from "./api"; +import { PointContainer2 } from "./container2"; +import { arcLength } from "./internal/arc-length"; +import { argsN } from "./internal/args"; +import { closestPointPolyline } from "./internal/closest-point"; +import { edges } from "./internal/edges"; +import { Sampler } from "./sampler"; +import { subdivideCurve } from "./subdiv-curve"; + +export class Polyline2 extends PointContainer2 implements + IArcLength, + IArea, + ICopy, + IEdges, + IVertices>, + IToHiccup { + + copy() { + return new Polyline2(this._copy(), { ...this.attribs }); + } + + edges() { + return edges(this.points); + } + + area() { + return 0; + } + + arcLength() { + return arcLength(this.points); + } + + closestPoint(p: Readonly) { + return closestPointPolyline(p, this.points, false); + } + + subdivide(kernel: SubdivKernel, iter = 1) { + return new Polyline2(subdivideCurve(kernel, this.points, iter, false), { ...this.attribs }); + } + + vertices(opts?: number | Partial) { + const sampler = new Sampler(this.points); + if (opts !== undefined) { + if (isPlainObject(opts)) { + return opts.dist ? + sampler.sampleUniform(opts.dist, opts.last !== false) : + sampler.sampleFixedNum(opts.num, opts.last !== false); + } + return sampler.sampleFixedNum(opts, true); + } else { + return this.points; + } + } + + toHiccup() { + return this._toHiccup("polyline"); + } + + toHiccupPathSegments() { + const res: any[] = []; + for (let pts = this.points, n = pts.length, i = 1; i < n; i++) { + res.push(["L", pts[i]]); + } + return res; + } + + toJSON() { + return this._toJSON("polyline2"); + } +} + +export function polyline2(points: Vec, num?: number, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Polyline2; +export function polyline2(points: ReadonlyVec[], attribs?: Attribs): Polyline2; +export function polyline2(...args: any[]) { + const [points, attribs] = argsN(args); + return new Polyline2(points, attribs); +} diff --git a/packages/geom/src/quad2.ts b/packages/geom/src/quad2.ts new file mode 100644 index 0000000000..4a2c07dbbc --- /dev/null +++ b/packages/geom/src/quad2.ts @@ -0,0 +1,77 @@ +import { ICopy } from "@thi.ng/api"; +import { ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + IArcLength, + IArea, + IEdges, + IPointMap, + ITessellateable, + Tessellator +} from "./api"; +import { PointContainer2 } from "./container2"; +import { arcLength } from "./internal/arc-length"; +import { args4 } from "./internal/args"; +import { corner } from "./internal/corner"; +import { edges } from "./internal/edges"; +import { tessellate } from "./tessellate"; + +export class Quad2 extends PointContainer2 implements + IArea, + IArcLength, + ICopy, + IEdges, + IPointMap, + ITessellateable { + + copy() { + return new Quad2(this._copy(), { ...this.attribs }); + } + + arcLength() { + return arcLength(this.points, true); + } + + area(signed = true) { + const [a, b, c, d] = this.points; + const area = 0.5 * (corner(a, b, c) + corner(a, c, d)); + return signed ? area : Math.abs(area); + } + + edges() { + return edges(this.points, true); + } + + mapPoint(_: Readonly, __?: Vec2): Vec2 { + throw new Error("TODO"); + } + + unmapPoint(q: Readonly, out?: Vec2) { + const p = this.points; + const res = Vec2.mixBilinear(p[0], p[1], p[3], p[2], q.x, q.y); + return out ? out.set(res) : res; + } + + tessellate(tessel: Tessellator, iter?: number): Vec2[][]; + tessellate(tessel: Iterable>): Vec2[][]; + tessellate(...args: any[]) { + return tessellate.apply(null, [this.points, ...args]); + } + + toHiccup() { + return this._toHiccup("polygon"); + } + + toJSON() { + return this._toJSON("quad2"); + } +} + +export function quad2(points: Vec, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Quad2; +export function quad2(a: ReadonlyVec, b: ReadonlyVec, c: ReadonlyVec, d: ReadonlyVec, attribs?: Attribs): Quad2; +export function quad2(points: ReadonlyVec[], attribs?: Attribs): Quad2; +export function quad2(...args: any[]) { + const [points, attribs] = args4(args); + return new Quad2(points, attribs); +} diff --git a/packages/geom/src/rect2.ts b/packages/geom/src/rect2.ts new file mode 100644 index 0000000000..b6d3527645 --- /dev/null +++ b/packages/geom/src/rect2.ts @@ -0,0 +1,201 @@ +import { ICopy } from "@thi.ng/api"; +import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { isNumber } from "@thi.ng/checks/is-number"; +import { isPlainObject } from "@thi.ng/checks/is-plain-object"; +import { ReadonlyVec } from "@thi.ng/vectors/api"; +import { asVec2, Vec2 } from "@thi.ng/vectors/vec2"; +import { + Attribs, + CollateOpts, + IArcLength, + IArea, + IBounds, + IBoundsRaw, + ICenter, + ICentroid, + ICollate, + IPointInside, + IPointMap, + ITessellateable, + IVertices, + Tessellator +} from "./api"; +import { collateWith } from "./internal/collate"; +import { edges } from "./internal/edges"; +import { tessellate } from "./tessellate"; + +export class Rect2 implements + IArea, + IArcLength, + IBoundsRaw, + IBounds, + ICentroid, + ICenter, + ICollate, + ICopy, + IPointInside, + IPointMap, + ITessellateable, + IVertices { + + static fromMinMax(min: Vec2, max: Vec2) { + return new Rect2(min, max.subNew(min)); + } + + pos: Vec2; + size: Vec2; + attribs: Attribs; + + constructor(pos: Vec2, size: Vec2, attribs?: any) { + this.pos = pos; + this.size = size; + this.attribs = attribs; + } + + copy() { + const buf = Vec2.intoBuffer([], [this.pos, this.size]); + return new Rect2(new Vec2(buf, 0), new Vec2(buf, 2), { ...this.attribs }) + } + + collate(opts?: Partial) { + return collateWith(Vec2.intoBuffer, [this.pos, this.size], opts, 2); + } + + area() { + return this.size.x * this.size.y; + } + + arcLength() { + return 2 * (this.size.x + this.size.y); + } + + boundsRaw(): [Vec2, Vec2] { + return [this.pos.copy(), this.pos.addNew(this.size)]; + } + + bounds() { + return this; + } + + centroid(c?: Vec2) { + return this.pos.maddNewN(this.size, 0.5, c); + } + + center(origin?: Readonly) { + const d = this.centroid().neg(); + this.pos.add(origin ? d.add(origin) : d); + return this; + } + + pointInside(p: Readonly) { + const px = p.x; + const py = p.y; + const x1 = this.pos.x; + const y1 = this.pos.y; + const x2 = x1 + this.size.x; + const y2 = y1 + this.size.y; + return px >= x1 && px <= x2 && py >= y1 && py <= y2; + } + + mapPoint(p: Readonly, out?: Vec2) { + return p.subNew(this.pos, out).div(this.size); + } + + unmapPoint(p: Readonly, out?: Vec2) { + return (out ? out.set(this.pos) : this.pos.copy()).madd(this.size, p); + } + + tessellate(tessel: Tessellator, iter?: number): Vec2[][]; + tessellate(tessel: Iterable>): Vec2[][]; + tessellate(...args: any[]) { + return tessellate.apply(null, [this.vertices(), ...args]); + } + + scale(v: Readonly) { + this.pos.mul(v); + this.size.mul(v); + return this; + } + + scaleN(n: number) { + this.pos.mulN(n); + this.size.mulN(n); + return this; + } + + translate(v: Readonly) { + this.pos.add(v); + return this; + } + + union(r: Rect2) { + const p = this.pos.addNew(this.size); + const q = r.pos.addNew(r.size); + this.pos.min(r.pos); + this.size.set(p.max(q).sub(this.pos)); + return this; + } + + edges() { + return edges(this.vertices(), true); + } + + vertices() { + const [x, y] = this.pos; + const [w, h] = this.size; + return Vec2.mapBuffer([x, y, x + w, y, x + w, y + h, x, y + h], 4); + } + + toHiccup() { + return ["rect", this.attribs, this.pos, this.size.x, this.size.y]; + } + + toJSON() { + return { + type: "rect2", + pos: this.pos.toJSON(), + size: this.size.toJSON(), + }; + } +} + +export function rect2(x: number, y: number, w: number, h: number, attribs?: Attribs): Rect2; +export function rect2(x: number, y: number, w: number, attribs?: Attribs): Rect2; +export function rect2(w: number, h: number, attribs?: Attribs): Rect2; +export function rect2(pos: ReadonlyVec, w: number, attribs?: Attribs): Rect2; +export function rect2(pos: ReadonlyVec, size: ReadonlyVec, attribs?: Attribs): Rect2; +export function rect2(w: number, attribs?: Attribs): Rect2; +export function rect2(...args: any[]) { + let attribs; + let n = args.length - 1; + if (isPlainObject(args[n]) || args[n] == null) { + attribs = args[n]; + n--; + } + if (isArrayLike(args[0])) { + const size = args[1]; + return new Rect2( + asVec2(args[0]), + isNumber(size) ? + new Vec2([size, size]) : + asVec2(size), + attribs + ); + } + if (n > 1) { + return new Rect2( + new Vec2([args[0], args[1]]), + new Vec2( + n === 2 ? + [args[2], args[2]] : + [args[2], args[3]] + ), + attribs + ); + } + return new Rect2( + new Vec2([0, 0]), + new Vec2(n > 0 ? [args[0], args[1]] : [args[0], args[0]]), + attribs + ); +}; diff --git a/packages/geom/src/sampler.ts b/packages/geom/src/sampler.ts new file mode 100644 index 0000000000..2f6a6a3c18 --- /dev/null +++ b/packages/geom/src/sampler.ts @@ -0,0 +1,71 @@ +import { peek } from "@thi.ng/transducers/func/peek"; +import { IVector } from "@thi.ng/vectors/api"; + +export class Sampler> { + + points: T[]; + index: number[]; + + constructor(points: ReadonlyArray, closed = false) { + if (closed) { + this.points = points.slice(); + this.points.push(points[0]); + } else { + this.points = points; + } + this.buildIndex(); + } + + pointAt(t: number) { + const pts = this.points; + const n = pts.length - 1; + if (n < 0) { + return; + } + if (n === 0 || t <= 0) { + return pts[0]; + } + if (t >= 1) { + return pts[n]; + } + const idx = this.index; + const t0 = t * idx[n]; + for (let i = 1; i <= n; i++) { + if (idx[i] >= t0) { + return pts[i - 1].mixNewN(pts[i], (t0 - idx[i - 1]) / (idx[i] - idx[i - 1])); + } + } + } + + sampleUniform(dist: number, includeLast = false, result: T[] = []) { + const index = this.index; + const total = peek(index); + const delta = dist / total; + const n = index.length; + for (let t = 0, i = 1; t < 1; t += delta) { + const ct = t * total; + while (ct >= index[i] && i < n) { i++; } + if (i >= n) break; + const p = index[i - 1]; + result.push(this.points[i - 1].mixNewN(this.points[i], (ct - p) / (index[i] - p))); + } + if (includeLast) { + result.push(this.points[this.points.length - 1].copy()); + } + return result; + } + + sampleFixedNum(num: number, includeLast = false, result?: T[]) { + return this.sampleUniform(peek(this.index) / num, includeLast, result); + } + + protected buildIndex() { + const idx: number[] = [0]; + const pts = this.points; + const n = pts.length; + for (let i = 0, j = 1; j < n; i = j, j++) { + idx[j] = idx[i] + pts[i].dist(pts[j]); + } + this.index = idx; + } +} diff --git a/packages/geom/src/subdiv-curve.ts b/packages/geom/src/subdiv-curve.ts new file mode 100644 index 0000000000..31b3e93ebd --- /dev/null +++ b/packages/geom/src/subdiv-curve.ts @@ -0,0 +1,104 @@ +import { comp } from "@thi.ng/transducers/func/comp"; +import { wrap } from "@thi.ng/transducers/iter/wrap"; +import { push } from "@thi.ng/transducers/rfn/push"; +import { transduce } from "@thi.ng/transducers/transduce"; +import { indexed } from "@thi.ng/transducers/xform/indexed"; +import { mapcat } from "@thi.ng/transducers/xform/mapcat"; +import { partition } from "@thi.ng/transducers/xform/partition"; +import { IVector } from "@thi.ng/vectors/api"; +import { SubdivKernel } from "./api"; + +const madd2 = + > + (a: Readonly, b: Readonly, ua: number, ub: number) => + a.mulNewN(ua).maddN(b, ub); + +const madd3 = + > + (a: Readonly, b: Readonly, c: Readonly, ua: number, ub: number, uc: number) => + a.mulNewN(ua).maddN(b, ub).maddN(c, uc); + +const madd5 = + > + (a: Readonly, b: Readonly, c: Readonly, d: Readonly, e: Readonly, + ua: number, ub: number, uc: number, ud: number, ue: number) => + a.mulNewN(ua).maddN(b, ub).maddN(c, uc).maddN(d, ud).maddN(e, ue); + +export const subdivKernel2 = + ([ua, ub]: number[], [va, vb]: number[]) => + >([a, b]: T[]) => [ + madd2(a, b, ua, ub), + madd2(a, b, va, vb), + ]; + +export const subdivKernel3 = + ([ua, ub, uc]: number[], [va, vb, vc]: number[]) => + >([a, b, c]: T[]) => [ + madd3(a, b, c, ua, ub, uc), + madd3(a, b, c, va, vb, vc), + ]; + +export const subdivKernel5 = + ([ua, ub, uc, ud, ue]: number[], [va, vb, vc, vd, ve]: number[]) => + >([a, b, c, d, e]: T[]) => [ + madd5(a, b, c, d, e, ua, ub, uc, ud, ue), + madd5(a, b, c, d, e, va, vb, vc, vd, ve), + ]; + +/** + * http://algorithmicbotany.org/papers/subgpu.sig2003.pdf + * + * @param kernel subdivision scheme + * @param pts source points + * @param iter number of iterations + * @param closed true, if closed input geometry + */ +export const subdivideCurve = + >( + { fn, size }: SubdivKernel, + pts: T[], + iter = 1, + closed = false) => { + + while (--iter >= 0) { + const nump = pts.length; + pts = transduce( + comp( + partition(size, 1), + indexed(), + mapcat(([i, pts]) => fn(pts, i, nump)) + ), + push(), + closed ? + wrap(pts, size >> 1, true, true) : + pts + ); + } + return pts; + }; + +const CHAIKIN_FIRST = subdivKernel3([1 / 2, 1 / 2, 0], [0, 3 / 4, 1 / 4]); +const CHAIKIN_MAIN = subdivKernel3([1 / 4, 3 / 4, 0], [0, 3 / 4, 1 / 4]); +const CHAIKIN_LAST = subdivKernel3([1 / 4, 3 / 4, 0], [0, 1 / 2, 1 / 2]); + +const CUBIC_MAIN = subdivKernel3([1 / 8, 3 / 4, 1 / 8], [0, 1 / 2, 1 / 2]); + +export const CHAIKIN_CLOSED: SubdivKernel = { + fn: CHAIKIN_MAIN, + size: 3 +}; + +export const CHAIKIN_OPEN: SubdivKernel = { + fn: (pts, i, n) => + i == 0 ? + [pts[0], ...CHAIKIN_FIRST(pts)] : + i === n - 3 ? + [...CHAIKIN_LAST(pts), pts[2]] : + CHAIKIN_MAIN(pts), + size: 3 +}; + +export const CUBIC_CLOSED: SubdivKernel = { + fn: CUBIC_MAIN, + size: 3 +}; diff --git a/packages/geom/src/tessellate.ts b/packages/geom/src/tessellate.ts new file mode 100644 index 0000000000..dc100dc8e8 --- /dev/null +++ b/packages/geom/src/tessellate.ts @@ -0,0 +1,164 @@ +import { isFunction } from "@thi.ng/checks/is-function"; +import { comp } from "@thi.ng/transducers/func/comp"; +import { range } from "@thi.ng/transducers/iter/range"; +import { repeat } from "@thi.ng/transducers/iter/repeat"; +import { tuples } from "@thi.ng/transducers/iter/tuples"; +import { wrap } from "@thi.ng/transducers/iter/wrap"; +import { reducer } from "@thi.ng/transducers/reduce"; +import { last } from "@thi.ng/transducers/rfn/last"; +import { push } from "@thi.ng/transducers/rfn/push"; +import { transduce } from "@thi.ng/transducers/transduce"; +import { map } from "@thi.ng/transducers/xform/map"; +import { mapcat } from "@thi.ng/transducers/xform/mapcat"; +import { partition } from "@thi.ng/transducers/xform/partition"; +import { scan } from "@thi.ng/transducers/xform/scan"; +import { IVector } from "@thi.ng/vectors/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { Tessellator } from "./api"; +import { polygonArea } from "./internal/area"; +import { centroid } from "./internal/centroid"; +import { corner, pointInTriangle2 } from "./internal/corner"; + +const snip = (points: ReadonlyArray, u: number, v: number, w: number, n: number, ids: number[]) => { + const a = points[ids[u]]; + const b = points[ids[v]]; + const c = points[ids[w]]; + if (corner(a, b, c) > 0) { + for (let i = 0; i < n; i++) { + if (i !== u && i !== v && i !== w) { + if (pointInTriangle2(points[ids[i]], a, b, c)) { + return; + } + } + } + return [a, b, c]; + } +}; + +export const earCut = (points: ReadonlyArray) => { + const tris: Vec2[][] = []; + let n = points.length; + const ids = [ + ...(polygonArea(points) > 0 ? + range(n) : + range(n - 1, -1, -1)) + ]; + let count = 2 * n - 1; + let v = n - 1, u, w, t; + while (count > 0 && n > 2) { + u = n <= v ? 0 : v; + v = u + 1; + v = n <= v ? 0 : v; + w = v + 1; + w = n <= w ? 0 : w; + t = snip(points, u, v, w, n, ids); + if (t !== undefined) { + tris.push(t); + ids.splice(v, 1); + n--; + count = 2 * n; + } else { + count--; + } + } + return tris; +}; + +export const triFan = >(points: ReadonlyArray) => { + const c = centroid(points); + return transduce( + comp( + partition(2, 1), + map(([a, b]) => [a, b, c]) + ), + push(), + wrap(points, 1, false, true) + ); +}; + +export const quadFan = >(points: ReadonlyArray) => { + const p = centroid(points); + return transduce( + comp( + partition(3, 1), + map(([a, b, c]) => [a.mixNewN(b, 0.5), b, b.mixNewN(c, 0.5), p]) + ), + push(), + wrap(points, 1, true, true) + ); +}; + +export const edgeSplit = >(points: ReadonlyArray) => { + const c = centroid(points); + return transduce( + comp( + partition(2, 1), + mapcat(([a, b]) => { + const m = a.mixNewN(b, 0.5); + return [[a, m, c], [m, b, c]]; + })), + push(), + wrap(points, 1, false, true) + ); +}; + +export const rimTris = >(points: ReadonlyArray) => { + const edgeCentroids = transduce( + comp( + partition(2, 1), + map((e) => e[0].mixNewN(e[1], 0.5)) + ), + push(), + wrap(points, 1, false, true) + ); + return transduce( + comp( + partition(2, 1), + map((t) => [t[0][0], t[1][1], t[1][0]]) + ), + push(), + [edgeCentroids], + wrap([...tuples(edgeCentroids, points)], 1, true, false) + ); +}; + +export const inset = (inset = 0.5, keepInterior = false) => + >(points: ReadonlyArray) => { + const c = centroid(points); + const inner = points.map((p) => p.mixNewN(c, inset)); + return transduce( + comp( + partition(2, 1), + map(([[a, b], [c, d]]) => [a, b, d, c]) + ), + push(), + keepInterior ? [inner] : [], + wrap([...tuples(points, inner)], 1, false, true) + ); + }; + +export function tessellate>(points: T[], tessFn: Tessellator, iter?: number): T[][]; +export function tessellate>(points: T[], tessFns: Iterable>): T[][]; +export function tessellate>(...args): T[][] { + return transduce( + scan( + reducer( + () => [args[0]], + (acc: T[][], fn: Tessellator) => + transduce( + mapcat(fn), + push(), + acc + ) + ) + ), + last(), + isFunction(args[1]) ? + repeat(args[1], args[2] || 1) : + args[1] + ); +} + +/* +v=require("@thi.ng/vectors"); g=require("@thi.ng/geom"); h=require("@thi.ng/hiccup"); svg=require("@thi.ng/hiccup-svg"); s=require("@thi.ng/strings"); tx=require("@thi.ng/transducers"); fs=require("fs"); +*/ \ No newline at end of file diff --git a/packages/geom/src/triangle2.ts b/packages/geom/src/triangle2.ts new file mode 100644 index 0000000000..faa20596c1 --- /dev/null +++ b/packages/geom/src/triangle2.ts @@ -0,0 +1,93 @@ +import { ICopy } from "@thi.ng/api"; +import { PI } from "@thi.ng/math/api"; +import { ReadonlyVec, Vec } from "@thi.ng/vectors/api"; +import { Vec2 } from "@thi.ng/vectors/vec2"; +import { Vec3 } from "@thi.ng/vectors/vec3"; +import { + Attribs, + IArcLength, + IArea, + IClassifyPoint, + IPointInside, + IPointMap, + ITessellateable, + Tessellator +} from "./api"; +import { PointContainer2 } from "./container2"; +import { arcLength } from "./internal/arc-length"; +import { args3 } from "./internal/args"; +import { fromBarycentric, toBarycentric } from "./internal/barycentric"; +import { classifyPointInTriangle2, corner, pointInTriangle2 } from "./internal/corner"; +import { tessellate } from "./tessellate"; + +export class Triangle2 extends PointContainer2 implements + IArea, + IArcLength, + IClassifyPoint, + ICopy, + IPointInside, + IPointMap, + ITessellateable { + + static equilateral(a: Vec2, b: Vec2) { + const dir = b.subNew(a); + const c = dir.perpendicularLeft().normalize(dir.mag() * Math.sin(PI / 3)); + return new Triangle2([a, b, c.maddN(dir, 0.5)]); + } + + copy() { + return new Triangle2(this._copy(), { ...this.attribs }); + } + + classifyPoint(p: Readonly): number { + const [a, b, c] = this.points; + return classifyPointInTriangle2(p, a, b, c); + } + + pointInside(p: Readonly): boolean { + const [a, b, c] = this.points; + return pointInTriangle2(p, a, b, c); + } + + arcLength(): number { + return arcLength(this.points, true); + } + + area(signed = true) { + const [a, b, c] = this.points; + const area = 0.5 * corner(a, b, c); + return signed ? area : Math.abs(area); + } + + mapPoint(p: Readonly, out?: Vec3): Vec3 { + const [a, b, c] = this.points; + return toBarycentric(a, b, c, p, out); + } + + unmapPoint(p: Readonly, out?: Vec2): Vec2 { + const [a, b, c] = this.points; + return fromBarycentric(a, b, c, p, out); + } + + tessellate(tessel: Tessellator, iter?: number): Vec2[][]; + tessellate(tessel: Iterable>): Vec2[][]; + tessellate(...args: any[]) { + return tessellate.apply(null, [this.points, ...args]); + } + + toHiccup() { + return this._toHiccup("polygon"); + } + + toJSON() { + return this._toJSON("triangle2"); + } +} + +export function triangle2(points: Vec, start?: number, cstride?: number, estride?: number, attribs?: Attribs): Triangle2; +export function triangle2(a: ReadonlyVec, b: ReadonlyVec, c: ReadonlyVec, attribs?: Attribs): Triangle2; +export function triangle2(points: ReadonlyVec[], attribs?: Attribs): Triangle2; +export function triangle2(...args: any[]) { + const [points, attribs] = args3(args); + return new Triangle2(points, attribs); +} \ No newline at end of file diff --git a/packages/geom/src/warp.ts b/packages/geom/src/warp.ts new file mode 100644 index 0000000000..839d58c47d --- /dev/null +++ b/packages/geom/src/warp.ts @@ -0,0 +1,12 @@ +import { IPointMap } from "./api"; +import { IVector } from "@thi.ng/vectors/api"; + +export const warpPoints = + , V2 extends IVector, A extends IPointMap, B extends IPointMap> + (dest: B, src: ReadonlyArray, srcBounds: A) => { + const res: V[] = []; + for (let n = src.length, i = 0; i < n; i++) { + res.push(dest.unmapPoint(srcBounds.mapPoint(src[i]))); + } + return res; + }; diff --git a/packages/geom/test/circle2.ts b/packages/geom/test/circle2.ts new file mode 100644 index 0000000000..4ab293f658 --- /dev/null +++ b/packages/geom/test/circle2.ts @@ -0,0 +1,125 @@ +import { equiv } from "@thi.ng/equiv"; +import { PI, TAU, HALF_PI } from "@thi.ng/math/api"; +import { eqDelta2array, vec2 } from "@thi.ng/vectors/vec2"; +import * as assert from "assert"; +import { circle2, Circle2, HiccupCircle2 } from "../src"; + +describe("circle2", () => { + + it("ctor1", () => { + const c = circle2(10, 20); + assert(c instanceof Circle2); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 1); + assert.strictEqual(c.attribs, undefined); + }); + + it("ctor2", () => { + const c = circle2(10, 20, 5); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 5); + assert.strictEqual(c.attribs, undefined); + }); + + it("ctor3", () => { + const c = circle2(10, 20, 5, { a: 1 }); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 5); + assert.deepEqual(c.attribs, { a: 1 }); + }); + + it("ctor4", () => { + const c = circle2(vec2(10, 20)); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 1); + assert.strictEqual(c.attribs, undefined); + }); + + it("ctor5", () => { + const c = circle2(vec2(10, 20), 5); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 5); + assert.strictEqual(c.attribs, undefined); + }); + + it("ctor6", () => { + const c = circle2(vec2(10, 20), { a: 1 }); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 1); + assert.deepEqual(c.attribs, { a: 1 }); + }); + + + it("ctor7", () => { + const c = circle2(vec2(10, 20), 5, { a: 1 }); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 5); + assert.deepEqual(c.attribs, { a: 1 }); + }); + + it("ctor8", () => { + const c = circle2(5); + assert(equiv(c.pos, [0, 0])); + assert.equal(c.r, 5); + assert.strictEqual(c.attribs, undefined); + }); + + it("ctor9", () => { + const c = circle2(5, { a: 1 }); + assert(equiv(c.pos, [0, 0])); + assert.equal(c.r, 5); + assert.deepEqual(c.attribs, { a: 1 }); + }); + + it("hiccup", () => { + const src: HiccupCircle2 = ["circle", { a: 1 }, [10, 20], 5]; + const c = Circle2.fromHiccup(src); + assert(equiv(c.pos, [10, 20])); + assert.equal(c.r, 5); + assert.deepEqual(c.attribs, { a: 1 }); + assert(equiv(c.toHiccup(), src)); + }); + + it("area", () => { + assert.equal(circle2(10).area(), PI * 100); + }); + + it("arclength", () => { + assert.equal(circle2(10).arcLength(), TAU * 10); + }); + + it("vertices (num)", () => { + assert(eqDelta2array( + circle2(10).vertices(4), + [[10, 0], [0, 10], [-10, 0], [0, -10]] + )) + }); + + it("vertices ({ num })", () => { + assert(eqDelta2array( + circle2(10).vertices({ num: 4 }), + [[10, 0], [0, 10], [-10, 0], [0, -10]] + )) + }); + + it("vertices ({ num, last: true })", () => { + assert(eqDelta2array( + circle2(10).vertices({ num: 4, last: true }), + [[10, 0], [0, 10], [-10, 0], [0, -10], [10, 0]] + )) + }); + + it("vertices ({ theta })", () => { + assert(eqDelta2array( + circle2(10).vertices({ theta: HALF_PI }), + [[10, 0], [0, 10], [-10, 0], [0, -10]] + )) + }); + + it("vertices ({ dist })", () => { + assert(eqDelta2array( + circle2(10).vertices({ dist: TAU * 10 / 4 }), + [[10, 0], [0, 10], [-10, 0], [0, -10]] + )) + }); +}); diff --git a/packages/geom/test/poly2.ts b/packages/geom/test/poly2.ts new file mode 100644 index 0000000000..292b81f86e --- /dev/null +++ b/packages/geom/test/poly2.ts @@ -0,0 +1,37 @@ +import { equiv } from "@thi.ng/equiv"; +import * as assert from "assert"; +import { polygon2, Polygon2, HiccupPolygon2 } from "../src/index"; + +describe("polygon2", () => { + + it("area", () => { + const a = polygon2([0, 0, 100, 0, 100, 100, 0, 100]); + assert.equal(a.area(), 100 * 100); + a.points.pop() + assert.equal(a.area(), 100 * 100 / 2); + }); + + it("circumference", () => { + const a = polygon2([0, 0, 100, 0, 100, 100, 0, 100]); + assert.equal(a.arcLength(), 400); + a.points.pop() + assert.equal(a.arcLength(), 200 + Math.sqrt(2) * 100); + }); + + it("hiccup", () => { + const src: HiccupPolygon2 = ["polygon", { fill: "red" }, [[0, 0], [100, 0], [100, 100], [0, 100]]]; + const src2: HiccupPolygon2 = ["polygon", { fill: "red" }, [0, 0, 100, 0, 100, 100, 0, 100]]; + let a = Polygon2.fromHiccup(src); + assert(equiv(a.points, src[2])); + assert.deepEqual(a.attribs, src[1]); + a = Polygon2.fromHiccup(src2); + assert(equiv(a.points, src[2])); + assert.deepEqual(a.attribs, src2[1]); + assert( + equiv( + a.toHiccup(), + src + ) + ); + }); +}); diff --git a/packages/geom/test/tsconfig.json b/packages/geom/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/geom/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/geom/tsconfig.json b/packages/geom/tsconfig.json new file mode 100644 index 0000000000..f6c291a0a0 --- /dev/null +++ b/packages/geom/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/hdom-canvas/CHANGELOG.md b/packages/hdom-canvas/CHANGELOG.md index a953d26a1e..9a215f3d09 100644 --- a/packages/hdom-canvas/CHANGELOG.md +++ b/packages/hdom-canvas/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@0.1.5...@thi.ng/hdom-canvas@0.1.6) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/hdom-canvas + + + + + + +## [0.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@0.1.4...@thi.ng/hdom-canvas@0.1.5) (2018-09-28) + +**Note:** Version bump only for package @thi.ng/hdom-canvas + + + + + + +## [0.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@0.1.3...@thi.ng/hdom-canvas@0.1.4) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/hdom-canvas + + + + + + +## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@0.1.2...@thi.ng/hdom-canvas@0.1.3) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/hdom-canvas + + + + + ## [0.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@0.1.1...@thi.ng/hdom-canvas@0.1.2) (2018-09-24) diff --git a/packages/hdom-canvas/README.md b/packages/hdom-canvas/README.md index 38cf38a584..1f5b81a003 100644 --- a/packages/hdom-canvas/README.md +++ b/packages/hdom-canvas/README.md @@ -337,7 +337,7 @@ Some attributes use different names than their actual names in the |-------------|--------------------------| | align | textAlign | | alpha | globalAlpha | -| baseLine | textBaseline | +| baseline | textBaseline | | compose | globalCompositeOperation | | dash | setLineDash | | dashOffset | lineDashOffset | diff --git a/packages/hdom-canvas/package.json b/packages/hdom-canvas/package.json index bc35c61122..4024e34d46 100644 --- a/packages/hdom-canvas/package.json +++ b/packages/hdom-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom-canvas", - "version": "0.1.2", + "version": "0.1.6", "description": "Declarative canvas scenegraph & visualization for @thi.ng/hdom", "main": "./index.js", "typings": "./index.d.ts", @@ -28,10 +28,10 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/diff": "^1.1.2", - "@thi.ng/hdom": "^5.0.2" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/diff": "^1.1.3", + "@thi.ng/hdom": "^5.0.6" }, "keywords": [ "ES6", diff --git a/packages/hdom-canvas/src/index.ts b/packages/hdom-canvas/src/index.ts index 051a2d8df2..016af633fd 100644 --- a/packages/hdom-canvas/src/index.ts +++ b/packages/hdom-canvas/src/index.ts @@ -20,7 +20,7 @@ const TAU = Math.PI * 2; const DEFAULTS = { align: "left", alpha: 1, - baseLine: "alphabetic", + baseline: "alphabetic", cap: "butt", comp: "source-over", dash: [], @@ -42,7 +42,7 @@ const DEFAULTS = { const CTX_ATTRIBS = { align: "textAlign", alpha: "globalAlpha", - baseLine: "textBaseline", + baseline: "textBaseline", clip: "clip", compose: "globalCompositeOperation", dash: "setLineDash", @@ -253,10 +253,10 @@ const walk = (ctx: CanvasRenderingContext2D, shape: any[], pstate: DrawState) => rect(ctx, attribs, shape[2], shape[3], shape[4], shape[5]); break; case "circle": - arc(ctx, attribs, shape[2], shape[3]); + circularArc(ctx, attribs, shape[2], shape[3]); break; case "arc": - arc(ctx, attribs, shape[2], shape[3], shape[4], shape[5]); + circularArc(ctx, attribs, shape[2], shape[3], shape[4], shape[5]); break; case "text": text(ctx, attribs, shape[2], shape[3]); @@ -556,7 +556,7 @@ const path = (ctx: CanvasRenderingContext2D, endShape(ctx, attribs); }; -const arc = (ctx: CanvasRenderingContext2D, +const circularArc = (ctx: CanvasRenderingContext2D, attribs: IObjectOf, pos: ReadonlyVec, r: number, diff --git a/packages/hdom-components/CHANGELOG.md b/packages/hdom-components/CHANGELOG.md index ac72686151..5b0505aabc 100644 --- a/packages/hdom-components/CHANGELOG.md +++ b/packages/hdom-components/CHANGELOG.md @@ -3,6 +3,44 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@2.2.10...@thi.ng/hdom-components@2.2.11) (2018-10-17) + + +### Bug Fixes + +* **hdom-components:** add Canvas2DContextAttributes (removed in TS3.1) ([775cc8a](https://github.com/thi-ng/umbrella/commit/775cc8a)) + + + + + + +## [2.2.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@2.2.9...@thi.ng/hdom-components@2.2.10) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/hdom-components + + + + + + +## [2.2.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@2.2.8...@thi.ng/hdom-components@2.2.9) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/hdom-components + + + + + + +## [2.2.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@2.2.7...@thi.ng/hdom-components@2.2.8) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/hdom-components + + + + + ## [2.2.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@2.2.6...@thi.ng/hdom-components@2.2.7) (2018-09-24) diff --git a/packages/hdom-components/package.json b/packages/hdom-components/package.json index 3f061d396d..59604f4d9d 100644 --- a/packages/hdom-components/package.json +++ b/packages/hdom-components/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom-components", - "version": "2.2.7", + "version": "2.2.11", "description": "Raw, skinnable UI & SVG components for @thi.ng/hdom", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/transducers": "^2.1.3", + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/transducers": "^2.2.0", "@types/webgl2": "^0.0.4" }, "keywords": [ diff --git a/packages/hdom-components/src/canvas.ts b/packages/hdom-components/src/canvas.ts index 8e5adca876..5fd633245b 100644 --- a/packages/hdom-components/src/canvas.ts +++ b/packages/hdom-components/src/canvas.ts @@ -3,6 +3,13 @@ export type CanvasContext = WebGLRenderingContext | WebGL2RenderingContext; +interface Canvas2DContextAttributes { + alpha?: boolean; + storage?: boolean; + willReadFrequently?: boolean; + [attribute: string]: boolean | string | undefined; +} + /** * User provided canvas life cycle methods. These differ from the usual * @thi.ng/hdom life cycle methods and are always passed at least the diff --git a/packages/hdom/CHANGELOG.md b/packages/hdom/CHANGELOG.md index 694be3c7cf..0231261b49 100644 --- a/packages/hdom/CHANGELOG.md +++ b/packages/hdom/CHANGELOG.md @@ -3,6 +3,44 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@5.0.5...@thi.ng/hdom@5.0.6) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/hdom + + + + + + +## [5.0.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@5.0.4...@thi.ng/hdom@5.0.5) (2018-09-28) + +**Note:** Version bump only for package @thi.ng/hdom + + + + + + +## [5.0.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@5.0.3...@thi.ng/hdom@5.0.4) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/hdom + + + + + + +## [5.0.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@5.0.2...@thi.ng/hdom@5.0.3) (2018-09-24) + + +### Bug Fixes + +* **hdom:** add DEFAULT_IMPL to re-exports ([#47](https://github.com/thi-ng/umbrella/issues/47)) ([50fa649](https://github.com/thi-ng/umbrella/commit/50fa649)) + + + + + ## [5.0.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@5.0.1...@thi.ng/hdom@5.0.2) (2018-09-24) diff --git a/packages/hdom/README.md b/packages/hdom/README.md index 344bd23b57..23676d245d 100644 --- a/packages/hdom/README.md +++ b/packages/hdom/README.md @@ -28,22 +28,25 @@ This project is part of the - [Example projects](#example-projects) - [Realtime crypto candle chart](#realtime-crypto-candle-chart) - [Git commit log table](#git-commit-log-table) + - [XML/HTML/SVG to Hiccup converter](#xmlhtmlsvg-to-hiccup-converter) - [Interactive SVG grid generator](#interactive-svg-grid-generator) - [Interactive additive waveform visualization](#interactive-additive-waveform-visualization) - [Dataflow graph SVG components](#dataflow-graph-svg-components) - [Mouse gesture analysis](#mouse-gesture-analysis) - [Canvas based radial dial input widget](#canvas-based-radial-dial-input-widget) - [SPA with router and event bus](#spa-with-router-and-event-bus) + - [XML/HTML to Hiccup syntax converter](#xmlhtml-to-hiccup-syntax-converter) - [Installation](#installation) - [Dependencies](#dependencies) - [API & Usage](#api--usage) - [start()](#start) - [renderOnce()](#renderonce) - [HDOMOpts config options](#hdomopts-config-options) + - [HDOMImplementation interface](#hdomimplementation-interface) - [normalizeTree()](#normalizetree) - [diffTree()](#difftree) - - [createDOM()](#createdom) - - [hydrateDOM()](#hydratedom) + - [createTree()](#createtree) + - [hydrateTree()](#hydratetree) - [User context](#user-context) - [Behavior control attributes](#behavior-control-attributes) - [Benchmark](#benchmark) @@ -283,7 +286,7 @@ start(() => ["g", { stroke: "none", translate: [50, 50] }, ["circle", { fill: "red" }, [0, 0], 25 + 25 * Math.sin(Date.now() * 0.001)], - ["text", { fill: "#fff", align: "center", baseLine: "middle" }, + ["text", { fill: "#fff", align: "center", baseline: "middle" }, [0, 0], "Hello"] ] ] @@ -480,7 +483,7 @@ const now = () => new Date().toLocaleString(); ### Iterators -ES6 iteratables are supported out of the box and their use is encouraged +ES6 iterables are supported out of the box and their use is encouraged to avoid the unnecessary allocation of temporary objects caused by chained application of `Array.map()` to transform raw state values into components. However, since iterators can only be consumed once, please @@ -728,6 +731,13 @@ Non-exhaustive list: [Source](https://github.com/thi-ng/umbrella/tree/master/examples/commit-table-ssr) | [Live version](https://demo.thi.ng/umbrella/commit-table-ssr/) +### XML/HTML/SVG to Hiccup converter + +![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/screenshots/xml-converter.png) + +[Source](https://github.com/thi-ng/umbrella/tree/master/examples/xml-converter) | +[Live version](https://demo.thi.ng/umbrella/xml-converter/) + ### Interactive SVG grid generator ![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/screenshots/rstream-grid.png) @@ -774,6 +784,11 @@ Based on the `create-hdom-app` project scaffolding... [Source](https://github.com/thi-ng/umbrella/tree/master/examples/router-basics) | [Live version](https://demo.thi.ng/umbrella/router-basics/) +### XML/HTML to Hiccup syntax converter + +[Source](https://github.com/thi-ng/umbrella/tree/master/examples/xml-converter) +| [Live version](https://demo.thi.ng/umbrella/xml-converter/) + ## Installation ```bash @@ -866,7 +881,7 @@ update loop. ### renderOnce() -One-off hdom tree conversion & target DOM application. Takes same args +One-off hdom tree conversion & target / DOM application. Takes same args as `start()`, but performs no diffing and only creates or hydrates target (DOM) once. The given tree is first normalized and no further action will be taken, if the normalized result is `null` or `undefined`. @@ -893,11 +908,35 @@ Config options object passed to hdom's `start()`, `renderOnce()` or other discrepancies between the pre-existing DOM and the hdom trees will cause undefined behavior. +### HDOMImplementation interface + +The following functions are the core parts of the `HDOMImplementation` +interface, the abstraction layer used by hdom to support different +targets. + +- [interface definition](https://github.com/thi-ng/umbrella/blob/master/packages/hdom/src/api.ts#L127) +- [default implementation](https://github.com/thi-ng/umbrella/blob/master/packages/hdom/src/default.ts) + ### normalizeTree() -Calling this function is a prerequisite before passing a component tree -to `diffTree()`. Recursively expands given hiccup component tree into -its canonical form: +Normalizes given hdom tree, expands Emmet-style tags, embedded +iterables, component functions, component objects with life cycle +methods and injects `key` attributes for `diffTree()` to later identify +changes in nesting order. During normalization any embedded component +functions are called with the given (optional) user `ctx` object as +first argument. For further details of the default implementation, +please see `normalizeTree()` in `normalize.ts`. + +Implementations MUST check for the presence of the `__impl` control +attribute on each branch. If given, the current implementation MUST +delegate to the `normalizeTree()` method of the specified implementation +and not descent into that branch further itself. + +Furthermore, if (and only if) an element has the `__normalize` control +attrib set to `false`, the normalization of that element's children MUST +be skipped. Calling this function is a prerequisite before passing a +component tree to `diffTree()`. Recursively expands given hiccup +component tree into its canonical form: ```ts ["tag", { attribs }, ...body] @@ -923,42 +962,88 @@ its canonical form: Additionally, unless the `keys` option is explicitly set to false, an unique `key` attribute is created for each node in the tree. This -attribute is used by `diffElement` to determine if a changed node can be +attribute is used by `diffTree` to determine if a changed node can be patched or will need to be moved, replaced or removed. -### diffTree() - -Takes a DOM root element and two hiccup trees, `prev` and `curr`. -Recursively computes diff between both trees and applies any necessary -changes to reflect `curr` tree in real DOM. - -For newly added components, calls `init` with created DOM element (plus -user provided context and any other args) for any components with `init` -life cycle method. Likewise, calls `release` on components with -`release` method when the DOM element is removed. +In terms of life cycle methods: `render` should ALWAYS return an array +or another function, else the component's `init` or `release` fns will +NOT be able to be called. E.g. If the return value of `render` evaluates +as a string or number, it should be wrapped as `["span", "foo"]` or an +equivalent wrapper node. If no `init` or `release` methods are used, +this requirement is relaxed. -**Important:** The actual DOM element/subtree given is assumed to -exactly represent the state of the `prev` tree. Since this function does -NOT track the real DOM at all, the resulting changes will result in -potentially undefined behavior if there're discrepancies. +See `normalizeElement` (normalize.ts) for further details about the +canonical element form. -### createDOM() +### diffTree() -Creates an actual DOM tree from given hiccup component and `parent` -element. Calls `init` with created element (user provided context and -other args) for any components with `init` life cycle method. Returns +Takes an `HDOMOpts` options object, an `HDOMImplementation` and two +normalized hiccup trees, `prev` and `curr`. Recursively computes diff +between both trees and applies any necessary changes to reflect `curr` +tree, based on the differences to `prev`, in target (browser DOM when +using the `DEFAULT_IMPL` implementation). + +All target modification operations are delegated to the given +implementation. `diffTree()` merely manages which elements or attributes +need to be created, updated or removed and this NEVER involves any form +of tracking of the actual underlying target data structure (e.g. the +real browser DOM). hdom in general and `diffTree()` specifically are +stateless. The only state available is that of the two trees given (prev +/ curr). + +Implementations MUST check for the presence of the `__impl` control +attribute on each branch. If given, the current implementation MUST +delegate to the `diffTree()` method of the specified implementation and +not descent into that branch further itself. + +Furthermore, if (and only if) an element has the `__diff` control +attribute set to `false`, then: + +1) Computing the difference between old & new branch MUST be skipped +2) The implementation MUST recursively call any `release` life cycle + methods present anywhere in the current `prev` tree (branch). The + recursive release process itself is implemented by the exported + `releaseDeep()` function in `diff.ts`. Custom implementations are + encouraged to reuse this, since that function also takes care of + handling the `__release` attrib: if the attrib is present and set to + false, `releaseDeep()` will not descend into the branch any further. +3) Call the current implementation's `replaceChild()` method to replace + the old element / branch with the new one. + +### createTree() + +Realizes the given hdom tree in the target below the `parent` node, e.g. +in the case of the browser DOM, creates all required DOM elements +encoded by the given hdom tree. If `parent` is null the result tree +won't be attached to any parent. If `insert` is given, the new elements +will be inserted at given child index. + +For any components with `init` life cycle methods, the implementation +MUST call `init` with the created element, the user provided context +(obtained from `opts`) and any other args. `createTree()` returns the created root element(s) - usually only a single one, but can be an array -of elements, if the provided tree is an iterable. Creates DOM text nodes -for non-component values. Returns `parent` if tree is `null` or -`undefined`. - -### hydrateDOM() - -Takes a DOM root element and normalized hdom tree, then walks tree and -initializes any event listeners and components with lifecycle init -methods. Assumes that an equivalent DOM (minus listeners) already exists -(e.g. generated via SSR) when called. Any other discrepancies between -the pre-existing DOM and the hdom tree will cause undefined behavior. +of elements, if the provided tree is an iterable of multiple roots. The +default implementation creates text nodes for non-component values. +Returns `parent` if tree is `null` or `undefined`. + +Implementations MUST check for the presence of the `__impl` control +attribute on each branch. If given, the current implementation MUST +delegate to the `createTree()` method of the specified implementation +and not descent into that branch further itself. + +### hydrateTree() + +Takes a target root element and normalized hdom tree, then walks tree +and initializes any event listeners and components with life cycle +`init` methods. Assumes that an equivalent "DOM" (minus listeners) +already exists when this function is called. Any other discrepancies +between the pre-existing DOM and the hdom tree might cause undefined +behavior. + +Implementations MUST check for the presence of the `__impl` control +attribute on each branch. If given, the current implementation MUST +delegate to the `hydrateTree()` method of the specified implementation +and not descent into that branch further itself. ## User context diff --git a/packages/hdom/package.json b/packages/hdom/package.json index f66e0f009a..98f2f2e3bc 100644 --- a/packages/hdom/package.json +++ b/packages/hdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom", - "version": "5.0.2", + "version": "5.0.6", "description": "Lightweight vanilla ES6 UI component trees with customizable branch-local behaviors", "main": "./index.js", "typings": "./index.d.ts", @@ -20,7 +20,7 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@thi.ng/atom": "^1.5.4", + "@thi.ng/atom": "^1.5.5", "@types/mocha": "^5.2.5", "@types/node": "^10.5.5", "mocha": "^5.2.0", @@ -29,11 +29,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/diff": "^1.1.2", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/hiccup": "^2.4.1" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/diff": "^1.1.3", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/hiccup": "^2.4.2" }, "keywords": [ "browser", diff --git a/packages/hdom/src/api.ts b/packages/hdom/src/api.ts index 09e2358d2f..e37b7340e7 100644 --- a/packages/hdom/src/api.ts +++ b/packages/hdom/src/api.ts @@ -65,6 +65,12 @@ export interface HDOMBehaviorAttribs { * any of its children. */ __release?: boolean; + /** + * Currently only used by thi.ng/hiccup. No relevance for hdom. If + * `false`, the element and its children will be omitted from the + * serialized result. + */ + __serialize?: boolean } export interface ComponentAttribs extends HDOMBehaviorAttribs { @@ -142,6 +148,60 @@ export interface HDOMImplementation { * default implementation, please see `normalizeTree()` in * `normalize.ts`. * + * Implementations MUST check for the presence of the `__impl` + * control attribute on each branch. If given, the current + * implementation MUST delegate to the `normalizeTree()` method of + * the specified implementation and not descent into that branch + * further itself. + * + * Furthermore, if (and only if) an element has the `__normalize` + * control attrib set to `false`, the normalization of that + * element's children MUST be skipped. + * + * Calling this function is a prerequisite before passing a + * component tree to `diffTree()`. Recursively expands given hiccup + * component tree into its canonical form: + * + * ``` + * ["tag", { attribs }, ...body] + * ``` + * + * - resolves Emmet-style tags (e.g. from `div#id.foo.bar`) + * - adds missing attribute objects (and `key` attribs) + * - merges Emmet-style classes with additional `class` attrib + * values (if given), e.g. `["div.foo", { class: "bar" }]` => + * `["div", {class: "bar foo" }]` + * - evaluates embedded functions and replaces them with their + * result + * - calls the `render` life cycle method on component objects and + * uses result + * - consumes iterables and normalizes their individual values + * - calls `deref()` on elements implementing the `IDeref` interface + * and uses returned results + * - calls `toHiccup()` on elements implementing the `IToHiccup` + * interface and uses returned results + * - calls `.toString()` on any other non-component value and by + * default wraps it in `["span", x]`. The only exceptions to this + * are: `button`, `option`, `textarea` and SVG `text` elements, + * for which spans are never created. + * + * Additionally, unless the `keys` option is explicitly set to + * false, an unique `key` attribute is created for each node in the + * tree. This attribute is used by `diffTree` to determine if a + * changed node can be patched or will need to be moved, replaced or + * removed. + * + * In terms of life cycle methods: `render` should ALWAYS return an + * array or another function, else the component's `init` or + * `release` fns will NOT be able to be called. E.g. If the return + * value of `render` evaluates as a string or number, it should be + * wrapped as `["span", "foo"]` or an equivalent wrapper node. If no + * `init` or `release` methods are used, this requirement is + * relaxed. + * + * See `normalizeElement` (normalize.ts) for further details about + * the canonical element form. + * * @param tree * @param opts */ @@ -149,10 +209,24 @@ export interface HDOMImplementation { /** * Realizes the given hdom tree in the target below the `parent` * node, e.g. in the case of the browser DOM, creates all required - * DOM elements encoded by the hdom tree. If `parent` is null the - * result tree won't be attached to any parent. See `createDOM()` - * for further details. If `insert` is given, the new elements will - * be inserted at given child index. + * DOM elements encoded by the given hdom tree. If `parent` is null + * the result tree won't be attached to any parent. If `insert` is + * given, the new elements will be inserted at given child index. + * + * For any components with `init` life cycle methods, the + * implementation MUST call `init` with the created element, the + * user provided context (obtained from `opts`) and any other args. + * `createTree()` returns the created root element(s) - usually only + * a single one, but can be an array of elements, if the provided + * tree is an iterable of multiple roots. The default implementation + * creates text nodes for non-component values. Returns `parent` if + * tree is `null` or `undefined`. + * + * Implementations MUST check for the presence of the `__impl` + * control attribute on each branch. If given, the current + * implementation MUST delegate to the `createTree()` method of the + * specified implementation and not descent into that branch further + * itself. * * @param parent * @param tree @@ -160,6 +234,18 @@ export interface HDOMImplementation { */ createTree(opts: Partial, parent: T, tree: any, insert?: number): T | T[]; /** + * Takes a target root element and normalized hdom tree, then walks + * tree and initializes any event listeners and components with life + * cycle `init` methods. Assumes that an equivalent "DOM" (minus + * listeners) already exists when this function is called. Any other + * discrepancies between the pre-existing DOM and the hdom tree + * might cause undefined behavior. + * + * Implementations MUST check for the presence of the `__impl` + * control attribute on each branch. If given, the current + * implementation MUST delegate to the `hydrateTree()` method of the + * specified implementation and not descent into that branch further + * itself. * * @param opts * @param parent @@ -168,6 +254,42 @@ export interface HDOMImplementation { */ hydrateTree(opts: Partial, parent: T, tree: any, idx?: number); /** + * Takes an `HDOMOpts` options object, an `HDOMImplementation` and + * two normalized hiccup trees, `prev` and `curr`. Recursively + * computes diff between both trees and applies any necessary + * changes to reflect `curr` tree, based on the differences to + * `prev`, in target (browser DOM when using the `DEFAULT_IMPL` + * implementation). + * + * All target modification operations are delegated to the given + * implementation. `diffTree()` merely manages which elements or + * attributes need to be created, updated or removed and this NEVER + * involves any form of tracking of the actual underlying target + * data structure (e.g. the real browser DOM). hdom in general and + * `diffTree()` specifically are stateless. The only state available + * is that of the two trees given (prev / curr). + * + * Implementations MUST check for the presence of the `__impl` + * control attribute on each branch. If given, the current + * implementation MUST delegate to the `diffTree()` method of the + * specified implementation and not descent into that branch further + * itself. + * + * Furthermore, if (and only if) an element has the `__diff` control + * attribute set to `false`, then: + * + * 1) Computing the difference between old & new branch MUST be + * skipped + * 2) The implementation MUST recursively call any `release` life + * cycle methods present anywhere in the current `prev` tree + * (branch). The recursive release process itself is implemented + * by the exported `releaseDeep()` function in `diff.ts`. Custom + * implementations are encouraged to reuse this, since that + * function also takes care of handling the `__release` attrib: + * if the attrib is present and set to false, `releaseDeep()` + * will not descend into the branch any further. + * 3) Call the current implementation's `replaceChild()` method to + * replace the old element / branch with the new one. * * @param opts * @param impl @@ -235,7 +357,8 @@ export interface HDOMImplementation { */ removeAttribs?(element: T, attribs: string[], prevAttribs: any); /** - * Sets target `element`'s text/body content. + * Sets target `element`'s text / body content. + * * @param element * @param value */ diff --git a/packages/hdom/src/diff.ts b/packages/hdom/src/diff.ts index 12c9b4d9cc..b983dc54f9 100644 --- a/packages/hdom/src/diff.ts +++ b/packages/hdom/src/diff.ts @@ -35,20 +35,7 @@ const buildIndex = (n: number) => { }; /** - * Takes a DOM root element and two normalized hiccup trees, `prev` and - * `curr`. Recursively computes diff between both trees and applies any - * necessary changes to reflect `curr` tree in target (browser DOM by - * default). - * - * For newly added components, calls `init` with created DOM element - * (plus user provided context and any other args) for any components - * with `init` life cycle method. Likewise, calls `release` on - * components with `release` method when the DOM element is removed. - * - * Important: The actual DOM element given is assumed to exactly - * represent the state of the `prev` tree. Since this function does NOT - * track the real DOM at all, the resulting changes will result in - * potentially undefined behavior if there're discrepancies. + * See `HDOMImplementation` interface for further details. * * @param opts * @param impl hdom implementation @@ -159,6 +146,15 @@ export const diffTree = ( } }; +/** + * Helper function for `diffTree()` to compute & apply the difference + * between a node's `prev` and `curr` attributes. + * + * @param impl + * @param el + * @param prev + * @param curr + */ export const diffAttributes = (impl: HDOMImplementation, el: T, prev: any, curr: any) => { const delta = diffObject(prev, curr, _equiv); impl.removeAttribs(el, delta.dels, prev); @@ -189,6 +185,15 @@ export const diffAttributes = (impl: HDOMImplementation, el: T, prev: any, } }; +/** + * Recursively attempts to call the `release` lifecycle method on every + * element in given tree (branch), using depth-first descent. Each + * element is checked for the presence of the `__release` control + * attribute. If (and only if) it is set to `false`, further descent + * into that element's branch is skipped. + * + * @param tag + */ export const releaseTree = (tag: any) => { if (isArray(tag)) { let x: any; diff --git a/packages/hdom/src/dom.ts b/packages/hdom/src/dom.ts index 679264f267..1ee537903f 100644 --- a/packages/hdom/src/dom.ts +++ b/packages/hdom/src/dom.ts @@ -8,14 +8,9 @@ const isArray = isa.isArray; const isNotStringAndIterable = isi.isNotStringAndIterable /** - * Creates an actual DOM tree from given hiccup component and `parent` - * element. Calls `init` with created element (user provided context and - * other args) for any components with `init` life cycle method. Returns - * created root element(s) - usually only a single one, but can be an - * array of elements, if the provided tree is an iterable. Creates DOM - * text nodes for non-component values. Returns `parent` if tree is - * `null` or `undefined`. + * See `HDOMImplementation` interface for further details. * + * @param opts * @param parent * @param tree * @param insert @@ -57,29 +52,24 @@ export const createDOM = (opts: Partial, parent: Element, tree: any, i }; /** - * Takes a DOM root element and normalized hdom tree, then walks tree - * and initializes any event listeners and components with lifecycle - * `init` methods. Assumes that an equivalent DOM (minus listeners) - * already exists (e.g. generated via SSR) when called. Any other - * discrepancies between the pre-existing DOM and the hdom tree will - * cause undefined behavior. + * See `HDOMImplementation` interface for further details. * + * @param opts * @param parent * @param tree - * @param i + * @param index */ -export const hydrateDOM = (opts: Partial, parent: Element, tree: any, i = 0) => { +export const hydrateDOM = (opts: Partial, parent: Element, tree: any, index = 0) => { if (isArray(tree)) { - const el = parent.children[i]; + const el = parent.children[index]; if (typeof tree[0] === "function") { - hydrateDOM(opts, parent, tree[0].apply(null, [opts.ctx, ...tree.slice(1)]), i); + hydrateDOM(opts, parent, tree[0].apply(null, [opts.ctx, ...tree.slice(1)]), index); } const attribs = tree[1]; if (attribs.__impl) { - return (>attribs.__impl).hydrateTree(opts, parent, tree, i); + return (>attribs.__impl).hydrateTree(opts, parent, tree, index); } if ((tree).__init) { - // TODO hdom ctx? (tree).__init.apply((tree).__this, [el, ...(tree).__args]); } for (let a in attribs) { @@ -92,12 +82,26 @@ export const hydrateDOM = (opts: Partial, parent: Element, tree: any, } } else if (isNotStringAndIterable(tree)) { for (let t of tree) { - hydrateDOM(opts, parent, t, i); - i++; + hydrateDOM(opts, parent, t, index); + index++; } } }; +/** + * Creates a new DOM element of type `tag` with optional `attribs`. If + * `parent` is not `null`, the new element will be inserted as child at + * given `insert` index. If `insert` is missing, the element will be + * appended to the `parent`'s list of children. Returns new DOM node. + * + * If `tag` is a known SVG element name, the new element will be created + * with the proper SVG XML namespace. + * + * @param parent + * @param tag + * @param attribs + * @param insert + */ export const createElement = (parent: Element, tag: string, attribs?: any, insert?: number) => { const el = SVG_TAGS[tag] ? document.createElementNS(SVG_NS, tag) : @@ -153,20 +157,20 @@ export const setAttribs = (el: Element, attribs: any) => { }; /** - * Sets a single attribute on given element. If attrib name is NOT - * an event name and its value is a function, it is called with - * given `attribs` object (usually the full attrib object passed - * to `setAttribs`) and the function's return value is used as attrib - * value. + * Sets a single attribute on given element. If attrib name is NOT an + * event name (prefix: "on") and its value is a function, it is called + * with given `attribs` object (usually the full attrib object passed to + * `setAttribs`) and the function's return value is used as the actual + * attrib value. * * Special rules apply for certain attributes: * - * - "style": see `setStyle()` - * - "value": see `updateValueAttrib()` + * - "style": delegated to `setStyle()` + * - "value": delegated to `updateValueAttrib()` * - attrib IDs starting with "on" are treated as event listeners * - * If the given (or computed) attrib value is `false` or `undefined` - * the attrib is removed from the element. + * If the given (or computed) attrib value is `false` or `undefined` the + * attrib is removed from the element. * * @param el * @param id @@ -204,7 +208,15 @@ export const setAttrib = (el: Element, id: string, val: any, attribs?: any) => { return el; }; +/** + * Updates an element's `value` property. For form elements it too + * ensures the edit cursor retains its position. + * + * @param el + * @param v + */ export const updateValueAttrib = (el: HTMLInputElement, v: any) => { + let ev; switch (el.type) { case "text": case "textarea": @@ -213,8 +225,8 @@ export const updateValueAttrib = (el: HTMLInputElement, v: any) => { case "url": case "tel": case "search": - if (el.value !== undefined && typeof v === "string") { - const off = v.length - (el.value.length - el.selectionStart); + if ((ev = el.value) !== undefined && typeof v === "string") { + const off = v.length - (ev.length - el.selectionStart); el.value = v; el.selectionStart = el.selectionEnd = off; break; diff --git a/packages/hdom/src/index.ts b/packages/hdom/src/index.ts index f7ca9cf68f..e33ab1e275 100644 --- a/packages/hdom/src/index.ts +++ b/packages/hdom/src/index.ts @@ -1,4 +1,5 @@ export * from "./api"; +export * from "./default"; export * from "./diff"; export * from "./dom"; export * from "./normalize"; diff --git a/packages/hdom/src/normalize.ts b/packages/hdom/src/normalize.ts index 190e5a39e2..edeff0d8c9 100644 --- a/packages/hdom/src/normalize.ts +++ b/packages/hdom/src/normalize.ts @@ -60,48 +60,10 @@ export const normalizeElement = (spec: any[], keys: boolean) => { }; /** - * Calling this function is a prerequisite before passing a component - * tree to `diffTree()`. Recursively expands given hiccup component tree - * into its canonical form: + * See `HDOMImplementation` interface for further details. * - * ``` - * ["tag", { attribs }, ...body] - * ``` - * - * - resolves Emmet-style tags (e.g. from `div#id.foo.bar`) - * - adds missing attribute objects (and `key` attribs) - * - merges Emmet-style classes with additional `class` attrib values - * (if given), e.g. `["div.foo", { class: "bar" }]` => `["div", { - * class: "bar foo" }]` - * - evaluates embedded functions and replaces them with their result - * - calls the `render` life cycle method on component objects and uses - * result - * - consumes iterables and normalizes their individual values - * - calls `deref()` on elements implementing the `IDeref` interface and - * uses returned results - * - calls `toHiccup()` on elements implementing the `IToHiccup` - * interface and uses returned results - * - calls `.toString()` on any other non-component value and by default - * wraps it in `["span", x]`. The only exceptions to this are: - * `button`, `option`, `textarea` and SVG `text` elements, for which - * spans are never created. - * - * Additionally, unless the `keys` option is explicitly set to false, an - * unique `key` attribute is created for each node in the tree. This - * attribute is used by `diffElement` to determine if a changed node can - * be patched or will need to be moved, replaced or removed. - * - * In terms of life cycle methods: `render` should ALWAYS return an - * array or another function, else the component's `init` or `release` - * fns will NOT be able to be called. E.g. If the return value of - * `render` evaluates as a string or number, the return value should be - * wrapped as `["span", "foo"]`. If no `init` or `release` are used, - * this requirement is relaxed. - * - * See `normalizeElement` for further details about canonical form. - * - * @param tree * @param opts + * @param tree */ export const normalizeTree = (opts: Partial, tree: any) => _normalizeTree(tree, opts, opts.ctx, [0], opts.keys !== false, opts.span !== false); diff --git a/packages/heaps/CHANGELOG.md b/packages/heaps/CHANGELOG.md index 87b30449d6..5c70162304 100644 --- a/packages/heaps/CHANGELOG.md +++ b/packages/heaps/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.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/heaps@0.2.19...@thi.ng/heaps@0.2.20) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/heaps + + + + + ## [0.2.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/heaps@0.2.18...@thi.ng/heaps@0.2.19) (2018-09-24) diff --git a/packages/heaps/README.md b/packages/heaps/README.md index fcc509ffd6..638b7969bc 100644 --- a/packages/heaps/README.md +++ b/packages/heaps/README.md @@ -11,7 +11,7 @@ This project is part of the Type agnostic binary heap & d-ary heap implementations with customizable ordering and fanout / tree arity (in case of `DHeap`). Both `Heap` and -`DHeap` have identical API. +`DHeap` have identical base API, however the former provides several additional operations. ## Installation diff --git a/packages/heaps/package.json b/packages/heaps/package.json index c74b7c0b44..7a8cc8ec08 100644 --- a/packages/heaps/package.json +++ b/packages/heaps/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/heaps", - "version": "0.2.19", + "version": "0.2.20", "description": "Generic binary heap & d-ary heap implementations with customizable ordering", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/compare": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/compare": "^0.1.10" }, "keywords": [ "data structure", diff --git a/packages/hiccup-css/CHANGELOG.md b/packages/hiccup-css/CHANGELOG.md index 5ab23e7314..6a080a6a9a 100644 --- a/packages/hiccup-css/CHANGELOG.md +++ b/packages/hiccup-css/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.2.26...@thi.ng/hiccup-css@0.2.27) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/hiccup-css + + + + + + +## [0.2.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.2.25...@thi.ng/hiccup-css@0.2.26) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/hiccup-css + + + + + + +## [0.2.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.2.24...@thi.ng/hiccup-css@0.2.25) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/hiccup-css + + + + + + +## [0.2.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.2.23...@thi.ng/hiccup-css@0.2.24) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/hiccup-css + + + + + ## [0.2.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@0.2.22...@thi.ng/hiccup-css@0.2.23) (2018-09-24) diff --git a/packages/hiccup-css/package.json b/packages/hiccup-css/package.json index b33d830cf1..34e05c836b 100644 --- a/packages/hiccup-css/package.json +++ b/packages/hiccup-css/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-css", - "version": "0.2.23", + "version": "0.2.27", "description": "CSS from nested JS data structures", "main": "./index.js", "typings": "./index.d.ts", @@ -28,10 +28,10 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "clojure", diff --git a/packages/hiccup-svg/CHANGELOG.md b/packages/hiccup-svg/CHANGELOG.md index 1e0f5fed39..dd5ced73fe 100644 --- a/packages/hiccup-svg/CHANGELOG.md +++ b/packages/hiccup-svg/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.0.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-svg@2.0.2...@thi.ng/hiccup-svg@2.0.3) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/hiccup-svg + + + + + ## [2.0.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-svg@2.0.1...@thi.ng/hiccup-svg@2.0.2) (2018-09-24) diff --git a/packages/hiccup-svg/package.json b/packages/hiccup-svg/package.json index 75f92415d0..da2844e87f 100644 --- a/packages/hiccup-svg/package.json +++ b/packages/hiccup-svg/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-svg", - "version": "2.0.2", + "version": "2.0.3", "description": "SVG element functions for @thi.ng/hiccup & @thi.ng/hdom", "main": "./index.js", "typings": "./index.d.ts", @@ -28,7 +28,7 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/hiccup": "^2.4.1" + "@thi.ng/hiccup": "^2.4.2" }, "keywords": [ "components", diff --git a/packages/hiccup-svg/src/convert.ts b/packages/hiccup-svg/src/convert.ts index 907948ecec..0640ed26bd 100644 --- a/packages/hiccup-svg/src/convert.ts +++ b/packages/hiccup-svg/src/convert.ts @@ -148,7 +148,7 @@ const convertAttribs = (attribs: any) => { case "align": res["text-anchor"] = TEXT_ALIGN[v]; break; - case "baseLine": + case "baseline": // no SVG support? case "filter": // TODO needs to be translated into def first diff --git a/packages/hiccup/CHANGELOG.md b/packages/hiccup/CHANGELOG.md index d2d75155d5..d52a49af91 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. +## [2.4.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@2.4.1...@thi.ng/hiccup@2.4.2) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/hiccup + + + + + ## [2.4.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@2.4.0...@thi.ng/hiccup@2.4.1) (2018-09-24) diff --git a/packages/hiccup/package.json b/packages/hiccup/package.json index 78ea6154f3..d07c40c49d 100644 --- a/packages/hiccup/package.json +++ b/packages/hiccup/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup", - "version": "2.4.1", + "version": "2.4.2", "description": "HTML/SVG/XML serialization of nested data structures, iterables & closures", "main": "./index.js", "typings": "./index.d.ts", @@ -20,7 +20,7 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@thi.ng/atom": "^1.5.4", + "@thi.ng/atom": "^1.5.5", "@types/mocha": "^5.2.5", "@types/node": "^10.5.5", "mocha": "^5.2.0", @@ -29,8 +29,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "clojure", diff --git a/packages/iges/CHANGELOG.md b/packages/iges/CHANGELOG.md index bd15babe16..f0372997c8 100644 --- a/packages/iges/CHANGELOG.md +++ b/packages/iges/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@0.2.16...@thi.ng/iges@0.2.17) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/iges + + + + + + +## [0.2.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@0.2.15...@thi.ng/iges@0.2.16) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/iges + + + + + + +## [0.2.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@0.2.14...@thi.ng/iges@0.2.15) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/iges + + + + + + +## [0.2.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@0.2.13...@thi.ng/iges@0.2.14) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/iges + + + + + ## [0.2.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@0.2.12...@thi.ng/iges@0.2.13) (2018-09-24) diff --git a/packages/iges/package.json b/packages/iges/package.json index 3976c496fb..8fea94ae7c 100644 --- a/packages/iges/package.json +++ b/packages/iges/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iges", - "version": "0.2.13", + "version": "0.2.17", "description": "IGES 5.3 serializer for (currently only) polygonal geometry, both open & closed", "main": "./index.js", "typings": "./index.d.ts", @@ -28,10 +28,10 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/defmulti": "^0.3.11", - "@thi.ng/strings": "^0.4.2", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/defmulti": "^0.4.0", + "@thi.ng/strings": "^0.5.1", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "CAD", diff --git a/packages/interceptors/CHANGELOG.md b/packages/interceptors/CHANGELOG.md index ba0a5b36a0..25d6c8e6b7 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.8.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@1.8.15...@thi.ng/interceptors@1.8.16) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/interceptors + + + + + ## [1.8.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@1.8.14...@thi.ng/interceptors@1.8.15) (2018-09-24) diff --git a/packages/interceptors/package.json b/packages/interceptors/package.json index 3d13177378..d2b8778123 100644 --- a/packages/interceptors/package.json +++ b/packages/interceptors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/interceptors", - "version": "1.8.15", + "version": "1.8.16", "description": "Interceptor based event bus, side effect & immutable state handling", "main": "./index.js", "typings": "./index.d.ts", @@ -28,11 +28,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/atom": "^1.5.4", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/paths": "^1.6.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/atom": "^1.5.5", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/paths": "^1.6.4" }, "keywords": [ "ES6", diff --git a/packages/iterators/CHANGELOG.md b/packages/iterators/CHANGELOG.md index c230d20ba4..8534f87825 100644 --- a/packages/iterators/CHANGELOG.md +++ b/packages/iterators/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.1.33](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.32...@thi.ng/iterators@4.1.33) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/iterators + + + + + + +## [4.1.32](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.31...@thi.ng/iterators@4.1.32) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/iterators + + + + + + +## [4.1.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.30...@thi.ng/iterators@4.1.31) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/iterators + + + + + + +## [4.1.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.29...@thi.ng/iterators@4.1.30) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/iterators + + + + + ## [4.1.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@4.1.28...@thi.ng/iterators@4.1.29) (2018-09-24) diff --git a/packages/iterators/package.json b/packages/iterators/package.json index f55b3b4af1..e14f281a55 100644 --- a/packages/iterators/package.json +++ b/packages/iterators/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iterators", - "version": "4.1.29", + "version": "4.1.33", "description": "clojure.core inspired, composable ES6 iterators & generators", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/dcons": "^1.1.8", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/dcons": "^1.1.12", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "clojure", diff --git a/packages/iterators/src/consume.ts b/packages/iterators/src/consume.ts index ed7ed0d143..37bc6f85dc 100644 --- a/packages/iterators/src/consume.ts +++ b/packages/iterators/src/consume.ts @@ -1,4 +1,4 @@ -export function consume(iter: Iterator, n = Number.POSITIVE_INFINITY) { +export function consume(iter: Iterator, n = Infinity) { while (n-- > 0 && !iter.next().done) { } return iter; } diff --git a/packages/iterators/src/range.ts b/packages/iterators/src/range.ts index 89db57e105..d98f310c30 100644 --- a/packages/iterators/src/range.ts +++ b/packages/iterators/src/range.ts @@ -5,7 +5,7 @@ export function range(from: number, to: number, step: number): IterableIterator< export function* range(from?: number, to?: number, step?: number) { if (from === undefined) { from = 0; - to = Number.POSITIVE_INFINITY; + to = Infinity; } else if (to === undefined) { to = from; from = 0; diff --git a/packages/iterators/src/repeat.ts b/packages/iterators/src/repeat.ts index cf4658e605..6afeb86f58 100644 --- a/packages/iterators/src/repeat.ts +++ b/packages/iterators/src/repeat.ts @@ -1,4 +1,4 @@ -export function* repeat(x: T, n = Number.POSITIVE_INFINITY) { +export function* repeat(x: T, n = Infinity) { while (n-- > 0) { yield x; } diff --git a/packages/iterators/src/repeatedly.ts b/packages/iterators/src/repeatedly.ts index 8e4117609a..6456d88f21 100644 --- a/packages/iterators/src/repeatedly.ts +++ b/packages/iterators/src/repeatedly.ts @@ -1,4 +1,4 @@ -export function* repeatedly(fn: () => T, n = Number.POSITIVE_INFINITY) { +export function* repeatedly(fn: () => T, n = Infinity) { while (n-- > 0) { yield fn(); } diff --git a/packages/math/.npmignore b/packages/math/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/math/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/math/CHANGELOG.md b/packages/math/CHANGELOG.md new file mode 100644 index 0000000000..f425c12867 --- /dev/null +++ b/packages/math/CHANGELOG.md @@ -0,0 +1,11 @@ +# 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.0 (2018-10-17) + + +### Features + +* **math:** extract maths fns from [@thi](https://github.com/thi).ng/vectors as new package ([4af1fba](https://github.com/thi-ng/umbrella/commit/4af1fba)) diff --git a/packages/math/LICENSE b/packages/math/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/math/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/math/README.md b/packages/math/README.md new file mode 100644 index 0000000000..a953590942 --- /dev/null +++ b/packages/math/README.md @@ -0,0 +1,47 @@ +# @thi.ng/math + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/math.svg)](https://www.npmjs.com/package/@thi.ng/math) +![npm downloads](https://img.shields.io/npm/dm/@thi.ng/math.svg) +[![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?style=flat-square&label=twitter)](https://twitter.com/thing_umbrella) + +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + + + +- [About](#about) +- [Installation](#installation) +- [Dependencies](#dependencies) +- [Usage examples](#usage-examples) +- [Authors](#authors) +- [License](#license) + + + +## About + +Assorted common math functions & utilities. + +## Installation + +```bash +yarn add @thi.ng/math +``` + +## Dependencies + +None. + +## Usage examples + +```ts +import * as m from "@thi.ng/math"; +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/math/package.json b/packages/math/package.json new file mode 100644 index 0000000000..7c5f11b8c0 --- /dev/null +++ b/packages/math/package.json @@ -0,0 +1,42 @@ +{ + "name": "@thi.ng/math", + "version": "0.1.0", + "description": "Assorted common math functions & utilities", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/thi-ng/umbrella.git" + }, + "homepage": "https://github.com/thi-ng/umbrella/tree/master/packages/math", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn run clean && tsc --declaration", + "clean": "rm -rf *.js *.d.ts .nyc_output build coverage 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 && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.5.5", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "typedoc": "^0.11.1", + "typescript": "^3.0.1" + }, + "keywords": [ + "ES6", + "interpolation", + "interval", + "math", + "solver", + "typescript", + "utilities" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/math/src/abs.ts b/packages/math/src/abs.ts new file mode 100644 index 0000000000..c173dcb4b4 --- /dev/null +++ b/packages/math/src/abs.ts @@ -0,0 +1,7 @@ +import { EPS } from "./api"; + +export const absDiff = (x: number, y: number) => + Math.abs(x - y); + +export const sign = (x: number, eps = EPS) => + x > eps ? 1 : x < -eps ? -1 : 0; diff --git a/packages/math/src/angle.ts b/packages/math/src/angle.ts new file mode 100644 index 0000000000..3dce9aa26b --- /dev/null +++ b/packages/math/src/angle.ts @@ -0,0 +1,35 @@ +import { + DEG2RAD, + HALF_PI, + PI, + RAD2DEG, + TAU +} from "./api"; + +export const absTheta = (theta: number) => + (theta %= TAU, theta < 0 ? TAU + theta : theta); + +export const angleDist = (a: number, b: number) => + (a = absTheta((b % TAU) - (a % TAU)), a > PI ? TAU - a : a); + +export const atan2Abs = (y: number, x: number) => + absTheta(Math.atan2(y, x)); + +export const quadrant = (theta: number) => + (absTheta(theta) / HALF_PI) | 0; + +/** + * Converts angle to degrees. + * + * @param x angle in radians + */ +export const deg = (x: number) => + x * RAD2DEG; + +/** + * Converts angle to radians. + * + * @param x angle in degrees + */ +export const rad = (x: number) => + x * DEG2RAD; diff --git a/packages/math/src/api.ts b/packages/math/src/api.ts new file mode 100644 index 0000000000..3382fb9122 --- /dev/null +++ b/packages/math/src/api.ts @@ -0,0 +1,14 @@ +export const PI = Math.PI; +export const TAU = PI * 2; +export const HALF_PI = PI / 2; +export const THIRD_PI = PI / 3; +export const QUARTER_PI = PI / 4; +export const SIXTH_PI = PI / 6; + +export const DEG2RAD = PI / 180; +export const RAD2DEG = 180 / PI; + +export const SQRT2 = Math.SQRT2; +export const SQRT3 = Math.sqrt(3); + +export let EPS = 1e-6; diff --git a/packages/math/src/eqdelta.ts b/packages/math/src/eqdelta.ts new file mode 100644 index 0000000000..50eb9c196e --- /dev/null +++ b/packages/math/src/eqdelta.ts @@ -0,0 +1,13 @@ +import { EPS } from "./api"; + +/** + * Checks if `|a - b| <= ε`. + * + * @param a left value + * @param b right value + * @param eps epsilon / tolerance + */ +export const eqDelta = (a: number, b: number, eps = EPS) => { + const d = a - b; + return (d < 0 ? -d : d) <= eps; +}; diff --git a/packages/math/src/fit.ts b/packages/math/src/fit.ts new file mode 100644 index 0000000000..19574eedb1 --- /dev/null +++ b/packages/math/src/fit.ts @@ -0,0 +1,19 @@ +import { clamp01, clamp11 } from "./interval"; + +export const norm = (x: number, a: number, b: number) => + (x - a) / (b - a); + +export const fit = (x: number, a: number, b: number, c: number, d: number) => + c + (d - c) * norm(x, a, b); + +export const fitClamped = (x: number, a: number, b: number, c: number, d: number) => + c + (d - c) * clamp01(norm(x, a, b)); + +export const fit01 = (x: number, a: number, b: number) => + a + (b - a) * clamp01(x); + +export const fit10 = (x: number, a: number, b: number) => + b + (a - b) * clamp01(x); + +export const fit11 = (x: number, a: number, b: number) => + a + (b - a) * (0.5 + 0.5 * clamp11(x)); \ No newline at end of file diff --git a/packages/math/src/index.ts b/packages/math/src/index.ts new file mode 100644 index 0000000000..53eb850ccf --- /dev/null +++ b/packages/math/src/index.ts @@ -0,0 +1,10 @@ +export * from "./api"; +export * from "./abs"; +export * from "./angle"; +export * from "./eqdelta"; +export * from "./fit"; +export * from "./interval"; +export * from "./mix"; +export * from "./prec"; +export * from "./solve"; +export * from "./step"; diff --git a/packages/math/src/interval.ts b/packages/math/src/interval.ts new file mode 100644 index 0000000000..cd4a6ebb8e --- /dev/null +++ b/packages/math/src/interval.ts @@ -0,0 +1,133 @@ +/** + * Clamps value `x` to given closed interval. + * + * @param x value to clamp + * @param min lower bound + * @param max upper bound + */ +export const clamp = (x: number, min: number, max: number) => + x < min ? min : x > max ? max : x; + +export const clamp01 = (x: number) => + x < 0 ? 0 : x > 1 ? 1 : x; + +export const clamp11 = (x: number) => + x < -1 ? -1 : x > 1 ? 1 : x; + +export const wrap = (x: number, min: number, max: number) => + x < min ? x - min + max : x >= max ? x - max + min : x; + +export const wrap01 = (x: number) => + x < 0 ? x + 1 : x >= 1 ? x - 1 : x; + +export const wrap11 = (x: number) => + x < -1 ? x + 2 : x >= 1 ? x - 2 : x; + +export const min2id = (a: number, b: number) => + a <= b ? 0 : 1; + +export const min3id = (a: number, b: number, c: number) => + (a <= b) ? + (a <= c ? 0 : 2) : + (b <= c ? 1 : 2); + +export const min4id = (a: number, b: number, c: number, d: number) => + a <= b ? + (a <= c ? + (a <= d ? 0 : 3) : + (c <= d ? 2 : 3)) : + (b <= c ? + (b <= d ? 1 : 3) : + (c <= d ? 2 : 3)); + +export const max2id = (a: number, b: number) => + a >= b ? 0 : 1; + +export const max3id = (a: number, b: number, c: number) => + (a >= b) ? + (a >= c ? 0 : 2) : + (b >= c ? 1 : 2); + +export const max4id = (a: number, b: number, c: number, d: number) => + a >= b ? + (a >= c ? + (a >= d ? 0 : 3) : + (c >= d ? 2 : 3)) : + (b >= c ? + (b >= d ? 1 : 3) : + (c >= d ? 2 : 3)); + +/** + * See `smax()`. + * + * @param a + * @param b + * @param k smooth exponent (MUST be > 0) + */ +export const smin = (a: number, b: number, k: number) => + smax(a, b, -k); + +/** + * Smooth maximum. Note: Result values will be slightly larger than max + * value near max(a,b) + eps due to exponential decay. Higher `k` values + * reduce the error, but also reduce the smoothing. Recommended k=16. + * + * https://en.wikipedia.org/wiki/Smooth_maximum + * + * @param a + * @param b + * @param k smooth exponent (MUST be > 0) + */ +export const smax = (a: number, b: number, k: number) => { + const ea = Math.exp(a * k); + const eb = Math.exp(b * k); + return (a * ea + b * eb) / (ea + eb); +}; + +/** + * Same as `smin(smax(x, min, k), max, k)`. + * + * @param x + * @param min + * @param max + * @param k + */ +export const sclamp = (x: number, min: number, max: number, k: number) => + smin(smax(x, min, k), max, k); + +export const absMin = (a: number, b: number) => + Math.abs(a) < Math.abs(b) ? a : b; + +export const absMax = (a: number, b: number) => + Math.abs(a) > Math.abs(b) ? a : b; + +/** + * http://www.musicdsp.org/showone.php?id=203 + * + * @param e + * @param x + */ +export const foldback = (e: number, x: number) => + (x < -e || x > e) ? + Math.abs(Math.abs((x - e) % (4 * e)) - 2 * e) - e : + x; + +/** + * Returns true iff `x` is in closed interval `[min .. max]` + * + * @param x + * @param min + * @param max + */ +export const inRange = (x: number, min: number, max: number) => + x >= min && x <= max; + +/** + * Returns true iff `x` is in open interval `(min .. max)` + * + * @param x + * @param min + * @param max + */ +export const inOpenRange = (x: number, min: number, max: number) => + x > min && x < max; diff --git a/packages/math/src/mix.ts b/packages/math/src/mix.ts new file mode 100644 index 0000000000..2d2bf719de --- /dev/null +++ b/packages/math/src/mix.ts @@ -0,0 +1,90 @@ +import { PI, HALF_PI } from "./api"; + +export const mix = (a: number, b: number, t: number) => + a + (b - a) * t; + +/** + * ``` + * c d + * +----+ + * | | + * +----+ + * a b + * ``` + * + * @param a BL value + * @param b BR value + * @param c TL value + * @param d TR value + * @param u 1st interpolation factor + * @param v 2nd interpolation factor + */ +export const mixBilinear = (a: number, b: number, c: number, d: number, u: number, v: number) => + mix(mix(a, b, u), mix(c, d, u), v); + +export const tween = (f: (t: number) => number, from: number, to: number) => + (t: number) => mix(from, to, f(t)); + +/** + * Circular interpolation: `sqrt(1 - (1 - t)^2)` + * + * @param t interpolation factor (0.0 .. 1.0) + */ +export const circular = (t: number) => { + t = 1 - t; + return Math.sqrt(1 - t * t); +}; + +export const cosine = (t: number): number => + 1 - (Math.cos(t * PI) * 0.5 + 0.5); + +export const decimated = (n: number, t: number) => + Math.floor(t * n) / n; + +export const bounce = (k: number, amp: number, t: number) => { + const tk = t * k; + return 1 - amp * Math.sin(tk) / tk * Math.cos(t * HALF_PI); +}; + +/** + * HOF exponential easing. + * + * - `ease = 1` -> linear + * - `ease > 1` -> ease in + * - `ease < 1` -> ease out + * + * @param ease easing behavior [0.0 .. ∞] + * @param t + */ +export const ease = (ease: number, t: number) => + Math.pow(t, ease); + +/** + * HOF impulse generator. Peaks at `t=1/k` + * + * @param k impulse width (higher values => shorter impulse) + */ +export const impulse = (k: number, t: number) => { + const h = k * t; + return h * Math.exp(1 - h); +}; + +export const gain = (k: number, t: number) => + t < 0.5 ? + 0.5 * Math.pow(2 * t, k) : + 1 - 0.5 * Math.pow(2 - 2 * t, k); + +export const parabola = (k: number, t: number) => + Math.pow(4.0 * t * (1.0 - t), k); + +export const cubicPulse = (w: number, c: number, t: number) => { + t = Math.abs(t - c); + return t > w ? + 0 : + (t /= w, 1 - t * t * (3 - 2 * t)); +}; + +export const sinc = (k: number, t: number) => { + t = PI * (k * t - 1.0); + return Math.sin(t) / t; +}; diff --git a/packages/math/src/prec.ts b/packages/math/src/prec.ts new file mode 100644 index 0000000000..9d05ccaf3a --- /dev/null +++ b/packages/math/src/prec.ts @@ -0,0 +1,17 @@ +/** + * Returns `a - b * floor(a/b)` + * + * @param a + * @param b + */ +export const fmod = (a: number, b: number) => + a - b * Math.floor(a / b); + +export const fract = (x: number) => + x - Math.floor(x); + +export const trunc = (x: number) => + x < 0 ? Math.ceil(x) : Math.floor(x); + +export const roundTo = (x: number, prec = 1) => + Math.round(x / prec) * prec; diff --git a/packages/math/src/solve.ts b/packages/math/src/solve.ts new file mode 100644 index 0000000000..fab6df7f0f --- /dev/null +++ b/packages/math/src/solve.ts @@ -0,0 +1,106 @@ +import { EPS } from "./api"; + +/** + * Produces a new function which computes derivative of the given + * single-arg function. The extra optional arg `eps` is used to + * define the step width for computing derived values: + * + * `f'(x) = (f(x + eps) - f(x)) / eps` + * + * The original function is assumed to be fully differentiable + * in the interval the returned function is going to be used. + * No validity checks of any form are done. + * + * https://en.wikipedia.org/wiki/Derivative#Continuity_and_differentiability + * + * @param fn + * @param eps + */ +export const derivative = (f: (x: number) => number, eps = EPS) => { + return (x: number) => (f(x + eps) - f(x)) / eps; +} + +/** + * Computes solution for linear equation: `ax + b = 0`. + * + * Note: `a` MUST NOT be zero. + * + * @param a slope + * @param b constant offset + */ +export const solveLinear = (a: number, b: number) => + -b / a; + +/** + * Computes solutions for quadratic equation: `ax^2 + bx + c = 0`. + * Returns array of real solutions. + * Note: `a` MUST NOT be zero. If the quadratic term is missing, + * use `solveLinear` instead. + * + * https://en.wikipedia.org/wiki/Quadratic_function + * https://en.wikipedia.org/wiki/Quadratic_equation + * + * @param a quadratic coefficient + * @param b linear coefficient + * @param c constant offset + * @param eps tolerance to determine multiple roots + */ +export const solveQuadratic = (a: number, b: number, c: number, eps = 1e-9) => { + const d = 2 * a; + let r = b * b - 4 * a * c; + return r < 0 ? + [] : + r < eps ? + [-b / d] : + (r = Math.sqrt(r), [(-b - r) / d, (-b + r) / d]); +}; + +/** + * Computes solutions for quadratic equation: `ax^3 + bx^2 + c*x + d = 0`. + * Returns array of solutions, both real & imaginary. + * Note: `a` MUST NOT be zero. If the cubic term is missing (i.e. zero), + * use `solveQuadratic` or `solveLinear` instead. + * + * https://en.wikipedia.org/wiki/Cubic_function + * + * @param a cubic coefficient + * @param b quadratic coefficient + * @param c linear coefficient + * @param d constant offset + * @param eps tolerance to determine multiple roots + */ +export const solveCubic = (a: number, b: number, c: number, d: number, eps = 1e-9) => { + const aa = a * a; + const bb = b * b; + const ba3 = b / (3 * a); + const p = (3 * a * c - bb) / (3 * aa); + const q = (2 * bb * b - 9 * a * b * c + 27 * aa * d) / (27 * aa * a); + + if (Math.abs(p) < eps) { + return [Math.cbrt(-q) - ba3]; + } else if (Math.abs(q) < eps) { + return p < 0 ? + [ + -Math.sqrt(-p) - ba3, + -ba3, Math.sqrt(-p) - ba3 + ] : + [-ba3]; + } else { + const denom = q * q / 4 + p * p * p / 27; + if (Math.abs(denom) < eps) { + return [-1.5 * q / p - ba3, 3 * q / p - ba3]; + } else if (denom > 0) { + const u = Math.cbrt(-q / 2 - Math.sqrt(denom)); + return [u - p / (3 * u) - ba3]; + } else { + const u = 2 * Math.sqrt(-p / 3), + t = Math.acos(3 * q / p / u) / 3, + k = 2 * Math.PI / 3; + return [ + u * Math.cos(t) - ba3, + u * Math.cos(t - k) - ba3, + u * Math.cos(t - 2 * k) - ba3 + ]; + } + } +} diff --git a/packages/math/src/step.ts b/packages/math/src/step.ts new file mode 100644 index 0000000000..292c302df2 --- /dev/null +++ b/packages/math/src/step.ts @@ -0,0 +1,51 @@ +import { clamp01 } from "./interval"; + +/** + * Step/threshold function. + * + * @param edge threshold + * @param x test value + * @returns 0, if `x < e`, else 1 + */ +export const step = (edge: number, x: number) => + x < edge ? 0 : 1; + +/** + * GLSL-style smoothStep threshold function. + * + * @param edge lower threshold + * @param edge2 upper threshold + * @param x test value + * @returns 0, if `x < edge1`, 1 if `x > edge2`, else sigmoid interpolation + */ +export const smoothStep = (edge: number, edge2: number, x: number) => { + x = clamp01((x - edge) / (edge2 - edge)); + return (3 - 2 * x) * x * x; +}; + +/** + * Similar to `smoothStep()` but using different polynomial. + * + * @param edge + * @param edge2 + * @param x + */ +export const smootherStep = (edge: number, edge2: number, x: number) => { + x = clamp01((x - edge) / (edge2 - edge)); + return x * x * x * (x * (x * 6 - 15) + 10); +}; + +/** + * Exponential ramp with variable shape, e.g. + * + * - S-curve: k=8, n=4 + * - Step near 1.0: k=8, n=20 + * - Pulse: k=0.005, n=-10 + * - Ease-in: k=0.5, n=0.25 + * + * @param k + * @param n + * @param x + */ +export const expStep = (k: number, n: number, x: number) => + 1 - Math.exp(-k * Math.pow(x, n)); diff --git a/packages/math/test/index.ts b/packages/math/test/index.ts new file mode 100644 index 0000000000..91beafe41b --- /dev/null +++ b/packages/math/test/index.ts @@ -0,0 +1,6 @@ +// import * as assert from "assert"; +// import * as m from "../src/index"; + +describe("math", () => { + it("tests pending"); +}); diff --git a/packages/math/test/tsconfig.json b/packages/math/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/math/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/math/tsconfig.json b/packages/math/tsconfig.json new file mode 100644 index 0000000000..bd6481a5a6 --- /dev/null +++ b/packages/math/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/memoize/CHANGELOG.md b/packages/memoize/CHANGELOG.md index e6cc190b8a..42dd65c985 100644 --- a/packages/memoize/CHANGELOG.md +++ b/packages/memoize/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.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/memoize@0.2.3...@thi.ng/memoize@0.2.4) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/memoize + + + + + ## [0.2.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/memoize@0.2.2...@thi.ng/memoize@0.2.3) (2018-09-24) diff --git a/packages/memoize/package.json b/packages/memoize/package.json index 9954aaefa7..fd57a25bdf 100644 --- a/packages/memoize/package.json +++ b/packages/memoize/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/memoize", - "version": "0.2.3", + "version": "0.2.4", "description": "Function memoization with configurable caches", "main": "./index.js", "typings": "./index.d.ts", @@ -28,7 +28,7 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1" + "@thi.ng/api": "^4.2.2" }, "keywords": [ "cache", diff --git a/packages/morton/.npmignore b/packages/morton/.npmignore new file mode 100644 index 0000000000..d703bda97a --- /dev/null +++ b/packages/morton/.npmignore @@ -0,0 +1,10 @@ +build +coverage +dev +doc +src* +test +.nyc_output +tsconfig.json +*.tgz +*.html diff --git a/packages/morton/CHANGELOG.md b/packages/morton/CHANGELOG.md new file mode 100644 index 0000000000..5cb32bcb74 --- /dev/null +++ b/packages/morton/CHANGELOG.md @@ -0,0 +1,11 @@ +# 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.0 (2018-10-17) + + +### Features + +* **morton:** import & update [@thi](https://github.com/thi).ng/morton package (MBP2010) ([501536b](https://github.com/thi-ng/umbrella/commit/501536b)) diff --git a/packages/morton/LICENSE b/packages/morton/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/packages/morton/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/morton/README.md b/packages/morton/README.md new file mode 100644 index 0000000000..bc390e153c --- /dev/null +++ b/packages/morton/README.md @@ -0,0 +1,65 @@ +# @thi.ng/morton + +[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/morton.svg)](https://www.npmjs.com/package/@thi.ng/morton) +![npm downloads](https://img.shields.io/npm/dm/@thi.ng/morton.svg) +[![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?style=flat-square&label=twitter)](https://twitter.com/thing_umbrella) + +This project is part of the +[@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. + + + +- [About](#about) +- [Installation](#installation) +- [Dependencies](#dependencies) +- [Usage examples](#usage-examples) +- [Authors](#authors) +- [License](#license) + + + +## About + +[Z-order-curve](https://en.wikipedia.org/wiki/Z-order_curve) / Morton +encoding & decoding for 1D, 2D, 3D. + +- https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ +- https://www.forceflow.be/2013/10/07/morton-encodingdecoding-through-bit-interleaving-implementations/ +- https://github.com/JaneliaSciComp/Morton.jl/blob/master/src/Morton.jl + +## Installation + +```bash +yarn add @thi.ng/morton +``` + +## Dependencies + +- [@thi.ng/binary](https://github.com/thi-ng/umbrella/tree/master/packages/binary) +- [@thi.ng/math](https://github.com/thi-ng/umbrella/tree/master/packages/math) + +## Usage examples + +```ts +import * as m from "@thi.ng/morton"; + +m.mux2(23, 42); +// 2461 + +m.demux2(2461) +// [ 23, 42 ] + +m.muxScaled2(0.25, 0.75) +// 2594876074 + +m.demuxScaled2(m.muxScaled2(0.25, 0.75)) +// [ 0.2500038147554742, 0.7499961852445258 ] +``` + +## Authors + +- Karsten Schmidt + +## License + +© 2015 - 2018 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/morton/package.json b/packages/morton/package.json new file mode 100644 index 0000000000..561a8dcc76 --- /dev/null +++ b/packages/morton/package.json @@ -0,0 +1,46 @@ +{ + "name": "@thi.ng/morton", + "version": "0.1.0", + "description": "Z-order-curve / Morton encoding & decoding for 1D, 2D, 3D", + "main": "./index.js", + "typings": "./index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/thi-ng/umbrella.git" + }, + "homepage": "https://github.com/thi-ng/umbrella/tree/master/packages/morton", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "build": "yarn run clean && tsc --declaration", + "clean": "rm -rf *.js *.d.ts .nyc_output build coverage 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 && nyc mocha build/test/*.js" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.5.5", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "typedoc": "^0.11.1", + "typescript": "^3.0.1" + }, + "dependencies": { + "@thi.ng/binary": "^0.1.0", + "@thi.ng/math": "^0.1.0" + }, + "keywords": [ + "binary", + "ES6", + "morton", + "spatial index", + "sorting", + "typescript", + "z-curve" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/morton/src/index.ts b/packages/morton/src/index.ts new file mode 100644 index 0000000000..0a60330259 --- /dev/null +++ b/packages/morton/src/index.ts @@ -0,0 +1,161 @@ +import { ceilPow2 } from "@thi.ng/binary/pow"; +import { fit, fit01 } from "@thi.ng/math/fit"; + +export const encode5 = (x: number) => { + x &= 0x0000001f; + x = (x * 0x01041041) & 0x10204081; + x = (x * 0x00108421) & 0x15500000; + return x >>> 20; +}; + +export const encode10 = (x: number) => { + x &= 0x000003ff; // ---- ---- ---- ---- ---- --98 7654 3210 + x = (x | x << 16) & 0xff0000ff; // ---- --98 ---- ---- ---- ---- 7654 3210 + x = (x | x << 8) & 0x0300f00f; // ---- --98 ---- ---- 7654 ---- ---- 3210 + x = (x | x << 4) & 0x030c30c3; // ---- --98 ---- 76-- --54 ---- 32-- --10 + x = (x | x << 2) & 0x09249249; // ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 + return x >>> 0; +}; + +export const encode16 = (x: number) => { + x &= 0x0000ffff; // ---- ---- ---- ---- fedc ba98 7654 3210 + x = (x | x << 8) & 0x00ff00ff; // ---- ---- fedc ba98 ---- ---- 7654 3210 + x = (x | x << 4) & 0x0f0f0f0f; // ---- fedc ---- ba98 ---- 7654 ---- 3210 + x = (x | x << 2) & 0x33333333; // --fe --dc --ba --98 --76 --54 --32 --10 + x = (x | x << 1) & 0x55555555; // -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 + return x >>> 0; +}; + +export const decode5 = (x: number) => { + x &= 0x00000155; + x = (x | x >> 1) & 0x00000133; + x = (x | x >> 2) & 0x0000010f; + x = (x | x >> 4) & 0x0000001f; + return x; +}; + +export const decode10 = (x: number) => { + x &= 0x09249249; + x = (x | x >> 2) & 0x030c30c3; + x = (x | x >> 4) & 0x0300f00f; + x = (x | x >> 8) & 0xff0000ff; + x = (x | x >> 16) & 0x000003ff; + return x; +}; + +export const decode16 = (x: number) => { + x &= 0x55555555; + x = (x | x >> 1) & 0x33333333; + x = (x | x >> 2) & 0x0f0f0f0f; + x = (x | x >> 4) & 0x00ff00ff; + x = (x | x >> 8) & 0x0000ffff; + return x; +}; + +export const encodeScaled5 = (x: number, min = 0, max = 1) => + encode5(Math.round(fit(x, min, max, 0, 0x1f))); + +export const encodeScaled10 = (x: number, min = 0, max = 1) => + encode10(Math.round(fit(x, min, max, 0, 0x3ff))); + +export const encodeScaled16 = (x: number, min = 0, max = 1) => + encode16(Math.round(fit(x, min, max, 0, 0xffff))); + +export const decodeScaled5 = (x: number, min = 0, max = 1) => + fit01(decode5(x) / 0x1f, min, max); + +export const decodeScaled10 = (x: number, min = 0, max = 1) => + fit01(decode10(x) / 0x3ff, min, max); + +export const decodeScaled16 = (x: number, min = 0, max = 1) => + fit01(decode16(x) / 0xffff, min, max); + +export const mux2 = (x: number, y: number) => + (encode16(x) | encode16(y) << 1) >>> 0; + +export const mux3 = (x: number, y: number, z: number) => + (encode10(x) | encode10(y) << 1 | encode10(z) << 2) >>> 0; + +export const demux2 = (n: number) => + [decode16(n), decode16(n >>> 1)]; + +export const demux3 = (n: number) => + [decode10(n), decode10(n >>> 1), decode10(n >>> 2)]; + +export const muxScaled2 = (x: number, y: number, min = 0, max = 1) => + ( + encodeScaled16(x, min, max) | + encodeScaled16(y, min, max) << 1 + ) >>> 0; + +export const muxScaled3 = (x: number, y: number, z: number, min = 0, max = 1) => + ( + encodeScaled10(x, min, max) | + encodeScaled10(y, min, max) << 1 | + encodeScaled10(z, min, max) << 2 + ) >>> 0; + +export const demuxScaled2 = (n: number, min = 0, max = 1) => + [ + decodeScaled16(n, min, max), + decodeScaled16(n >>> 1, min, max) + ]; + +export const demuxScaled3 = (n: number, min = 0, max = 1) => + [ + decodeScaled10(n, min, max), + decodeScaled10(n >>> 1, min, max), + decodeScaled10(n >>> 2, min, max) + ]; + +export const treeToMorton = (t: number[], dim: number) => { + let n = 0; + let m = 0; + let l = t.length; + dim = 1 << dim; + while (--l >= 0) { + m += t[l] * Math.pow(dim, n); + n++; + } + return m; +}; + +export const mortonToTree = (m: number, dim: number) => { + const t: number[] = []; + dim = 1 << dim; + while (true) { + const d = Math.floor(m / dim); + t.unshift(m % dim); + if (!d) break; + m = d; + } + return t; +}; + +export const treeToCartesian = (t: number[], dim: number) => { + const c: number[] = []; + for (let i = 0, x = t[0]; i < dim; i++) { + c[i] = (x >>> i) & 1; + } + if (t.length < 2) return c; + const cn = treeToCartesian(t.slice(1), 2); + const m = 1 << (t.length - 1); + const res: number[] = new Array(dim); + for (let i = 0; i < dim; i++) { + res[i] = m * c[i] + cn[i]; + } + return res; +}; + +export const cartesianToTree = (v: number[]) => { + const $ = (v: number[], half: number) => { + const t = v.reduce( + (t, x, i) => t + ((1 << i) * (x >= half)), + 0 + ); + return half > 1 ? + [t, ...$(v.map((x) => x % half), half >>> 1)] : + [t]; + }; + return $(v, Math.max(2, ceilPow2(Math.max(...v) + 1)) >> 1); +}; diff --git a/packages/morton/test/index.ts b/packages/morton/test/index.ts new file mode 100644 index 0000000000..5d3a16c374 --- /dev/null +++ b/packages/morton/test/index.ts @@ -0,0 +1,6 @@ +// import * as assert from "assert"; +// import * as m from "../src/index"; + +describe("morton", () => { + it("tests pending"); +}); diff --git a/packages/morton/test/tsconfig.json b/packages/morton/test/tsconfig.json new file mode 100644 index 0000000000..bcf29ace54 --- /dev/null +++ b/packages/morton/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../build" + }, + "include": [ + "./**/*.ts", + "../src/**/*.ts" + ] +} diff --git a/packages/morton/tsconfig.json b/packages/morton/tsconfig.json new file mode 100644 index 0000000000..bd6481a5a6 --- /dev/null +++ b/packages/morton/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "." + }, + "include": [ + "./src/**/*.ts" + ] +} diff --git a/packages/paths/CHANGELOG.md b/packages/paths/CHANGELOG.md index 806ea73d63..d3df9264fb 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.6.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@1.6.3...@thi.ng/paths@1.6.4) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/paths + + + + + ## [1.6.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@1.6.2...@thi.ng/paths@1.6.3) (2018-09-24) diff --git a/packages/paths/package.json b/packages/paths/package.json index 91108ab7d1..e32a3bbb92 100644 --- a/packages/paths/package.json +++ b/packages/paths/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/paths", - "version": "1.6.3", + "version": "1.6.4", "description": "immutable, optimized path-based object property / array accessors", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "accessors", diff --git a/packages/pointfree-lang/CHANGELOG.md b/packages/pointfree-lang/CHANGELOG.md index ea8b0a4e52..3a4574f8d2 100644 --- a/packages/pointfree-lang/CHANGELOG.md +++ b/packages/pointfree-lang/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.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@0.2.22...@thi.ng/pointfree-lang@0.2.23) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/pointfree-lang + + + + + ## [0.2.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@0.2.21...@thi.ng/pointfree-lang@0.2.22) (2018-09-24) diff --git a/packages/pointfree-lang/package.json b/packages/pointfree-lang/package.json index 4ea76dcc2f..eb7c0a1de2 100644 --- a/packages/pointfree-lang/package.json +++ b/packages/pointfree-lang/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pointfree-lang", - "version": "0.2.22", + "version": "0.2.23", "description": "Forth style syntax layer/compiler for the @thi.ng/pointfree DSL", "main": "./index.js", "typings": "./index.d.ts", @@ -30,9 +30,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/pointfree": "^0.8.10" + "@thi.ng/api": "^4.2.2", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/pointfree": "^0.8.11" }, "keywords": [ "concatenative", diff --git a/packages/pointfree/CHANGELOG.md b/packages/pointfree/CHANGELOG.md index f57a86a635..b78f4c87f7 100644 --- a/packages/pointfree/CHANGELOG.md +++ b/packages/pointfree/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.8.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.8.10...@thi.ng/pointfree@0.8.11) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/pointfree + + + + + ## [0.8.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@0.8.9...@thi.ng/pointfree@0.8.10) (2018-09-24) diff --git a/packages/pointfree/package.json b/packages/pointfree/package.json index 9ccfa0414d..fd747c9b8e 100644 --- a/packages/pointfree/package.json +++ b/packages/pointfree/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pointfree", - "version": "0.8.10", + "version": "0.8.11", "description": "Pointfree functional composition / Forth style stack execution engine", "main": "./index.js", "typings": "./index.d.ts", @@ -28,10 +28,10 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "composition", diff --git a/packages/range-coder/CHANGELOG.md b/packages/range-coder/CHANGELOG.md index 0129415a6b..db968f650c 100644 --- a/packages/range-coder/CHANGELOG.md +++ b/packages/range-coder/CHANGELOG.md @@ -3,6 +3,41 @@ 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/range-coder@0.1.16...@thi.ng/range-coder@0.1.17) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/range-coder + + + + + + +## [0.1.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@0.1.15...@thi.ng/range-coder@0.1.16) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/range-coder + + + + + + +## [0.1.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@0.1.14...@thi.ng/range-coder@0.1.15) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/range-coder + + + + + + +## [0.1.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@0.1.13...@thi.ng/range-coder@0.1.14) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/range-coder + + + + + ## [0.1.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@0.1.12...@thi.ng/range-coder@0.1.13) (2018-09-24) diff --git a/packages/range-coder/package.json b/packages/range-coder/package.json index 0f87a53c46..6b3170304e 100644 --- a/packages/range-coder/package.json +++ b/packages/range-coder/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/range-coder", - "version": "0.1.13", + "version": "0.1.17", "description": "Binary data range encoder / decoder", "main": "./index.js", "typings": "./index.d.ts", @@ -20,7 +20,7 @@ "test": "rm -rf build && tsc -p test && nyc mocha build/test/*.js" }, "devDependencies": { - "@thi.ng/transducers": "^2.1.3", + "@thi.ng/transducers": "^2.2.0", "@types/mocha": "^5.2.5", "@types/node": "^10.5.5", "mocha": "^5.2.0", @@ -29,7 +29,7 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/bitstream": "^0.4.18" + "@thi.ng/bitstream": "^0.4.19" }, "keywords": [ "ES6", diff --git a/packages/resolve-map/CHANGELOG.md b/packages/resolve-map/CHANGELOG.md index e90291fc0e..edb6934536 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. +## [3.0.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@3.0.13...@thi.ng/resolve-map@3.0.14) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/resolve-map + + + + + ## [3.0.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@3.0.12...@thi.ng/resolve-map@3.0.13) (2018-09-24) diff --git a/packages/resolve-map/package.json b/packages/resolve-map/package.json index 362dd0618e..fabe835df6 100644 --- a/packages/resolve-map/package.json +++ b/packages/resolve-map/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/resolve-map", - "version": "3.0.13", + "version": "3.0.14", "description": "DAG resolution of vanilla objects & arrays with internally linked values", "main": "./index.js", "typings": "./index.d.ts", @@ -26,9 +26,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/paths": "^1.6.3" + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/paths": "^1.6.4" }, "keywords": [ "configuration", diff --git a/packages/rle-pack/CHANGELOG.md b/packages/rle-pack/CHANGELOG.md index c25680b52d..14b43cc688 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. +## [1.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@1.0.5...@thi.ng/rle-pack@1.0.6) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rle-pack + + + + + ## [1.0.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@1.0.4...@thi.ng/rle-pack@1.0.5) (2018-09-24) diff --git a/packages/rle-pack/package.json b/packages/rle-pack/package.json index 7859f6e923..cb1de650f2 100644 --- a/packages/rle-pack/package.json +++ b/packages/rle-pack/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rle-pack", - "version": "1.0.5", + "version": "1.0.6", "description": "Binary run-length encoding packer w/ flexible repeat bit widths", "main": "./index.js", "typings": "./index.d.ts", @@ -29,8 +29,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/bitstream": "^0.4.18", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/bitstream": "^0.4.19", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "binary", diff --git a/packages/router/CHANGELOG.md b/packages/router/CHANGELOG.md index 5cd17f7255..d73a2ca4dc 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.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@0.1.25...@thi.ng/router@0.1.26) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/router + + + + + ## [0.1.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@0.1.24...@thi.ng/router@0.1.25) (2018-09-24) diff --git a/packages/router/package.json b/packages/router/package.json index 2dd801ca9d..c81bafafbf 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/router", - "version": "0.1.25", + "version": "0.1.26", "description": "Generic router for browser & non-browser based applications", "main": "./index.js", "typings": "./index.d.ts", @@ -27,10 +27,10 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10" }, "keywords": [ "declarative", diff --git a/packages/rstream-csp/CHANGELOG.md b/packages/rstream-csp/CHANGELOG.md index b3722f4d15..79a271cf09 100644 --- a/packages/rstream-csp/CHANGELOG.md +++ b/packages/rstream-csp/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.113](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.112...@thi.ng/rstream-csp@0.1.113) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream-csp + + + + + + +## [0.1.112](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.111...@thi.ng/rstream-csp@0.1.112) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream-csp + + + + + + +## [0.1.111](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.110...@thi.ng/rstream-csp@0.1.111) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream-csp + + + + + + +## [0.1.110](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.109...@thi.ng/rstream-csp@0.1.110) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream-csp + + + + + ## [0.1.109](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@0.1.108...@thi.ng/rstream-csp@0.1.109) (2018-09-24) diff --git a/packages/rstream-csp/package.json b/packages/rstream-csp/package.json index 4c07c313c9..21da7bf188 100644 --- a/packages/rstream-csp/package.json +++ b/packages/rstream-csp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-csp", - "version": "0.1.109", + "version": "0.1.113", "description": "@thi.ng/csp bridge module for @thi.ng/rstream", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/csp": "^0.3.64", - "@thi.ng/rstream": "^1.13.2" + "@thi.ng/csp": "^0.3.68", + "@thi.ng/rstream": "^1.13.6" }, "keywords": [ "bridge", diff --git a/packages/rstream-dot/CHANGELOG.md b/packages/rstream-dot/CHANGELOG.md index ebe4bc292f..47279dd95e 100644 --- a/packages/rstream-dot/CHANGELOG.md +++ b/packages/rstream-dot/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.52](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@0.2.51...@thi.ng/rstream-dot@0.2.52) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream-dot + + + + + + +## [0.2.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@0.2.50...@thi.ng/rstream-dot@0.2.51) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream-dot + + + + + + +## [0.2.50](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@0.2.49...@thi.ng/rstream-dot@0.2.50) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream-dot + + + + + + +## [0.2.49](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@0.2.48...@thi.ng/rstream-dot@0.2.49) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream-dot + + + + + ## [0.2.48](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@0.2.47...@thi.ng/rstream-dot@0.2.48) (2018-09-24) diff --git a/packages/rstream-dot/package.json b/packages/rstream-dot/package.json index 7679faf8d1..3a0f04826d 100644 --- a/packages/rstream-dot/package.json +++ b/packages/rstream-dot/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-dot", - "version": "0.2.48", + "version": "0.2.52", "description": "Graphviz DOT conversion of @thi.ng/rstream dataflow graph topologies", "main": "./index.js", "typings": "./index.d.ts", @@ -28,7 +28,7 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/rstream": "^1.13.2" + "@thi.ng/rstream": "^1.13.6" }, "keywords": [ "conversion", diff --git a/packages/rstream-gestures/CHANGELOG.md b/packages/rstream-gestures/CHANGELOG.md index 16e7b106df..310b2f1736 100644 --- a/packages/rstream-gestures/CHANGELOG.md +++ b/packages/rstream-gestures/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@0.5.13...@thi.ng/rstream-gestures@0.5.14) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream-gestures + + + + + + +## [0.5.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@0.5.12...@thi.ng/rstream-gestures@0.5.13) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream-gestures + + + + + + +## [0.5.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@0.5.11...@thi.ng/rstream-gestures@0.5.12) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream-gestures + + + + + + +## [0.5.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@0.5.10...@thi.ng/rstream-gestures@0.5.11) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream-gestures + + + + + ## [0.5.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@0.5.9...@thi.ng/rstream-gestures@0.5.10) (2018-09-24) diff --git a/packages/rstream-gestures/package.json b/packages/rstream-gestures/package.json index 0bb7c1a204..7cf9c5d141 100644 --- a/packages/rstream-gestures/package.json +++ b/packages/rstream-gestures/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-gestures", - "version": "0.5.10", + "version": "0.5.14", "description": "Unified mouse, mouse wheel & single-touch event stream abstraction", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/rstream": "^1.13.2", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/rstream": "^1.13.6", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "dataflow", diff --git a/packages/rstream-graph/CHANGELOG.md b/packages/rstream-graph/CHANGELOG.md index 8e4195490a..38ff35453e 100644 --- a/packages/rstream-graph/CHANGELOG.md +++ b/packages/rstream-graph/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@2.1.37...@thi.ng/rstream-graph@2.1.38) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream-graph + + + + + + +## [2.1.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@2.1.36...@thi.ng/rstream-graph@2.1.37) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream-graph + + + + + + +## [2.1.36](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@2.1.35...@thi.ng/rstream-graph@2.1.36) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream-graph + + + + + + +## [2.1.35](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@2.1.34...@thi.ng/rstream-graph@2.1.35) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream-graph + + + + + ## [2.1.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@2.1.33...@thi.ng/rstream-graph@2.1.34) (2018-09-24) diff --git a/packages/rstream-graph/package.json b/packages/rstream-graph/package.json index 8b8236458d..76761f03ff 100644 --- a/packages/rstream-graph/package.json +++ b/packages/rstream-graph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-graph", - "version": "2.1.34", + "version": "2.1.38", "description": "Declarative dataflow graph construction for @thi.ng/rstream", "main": "./index.js", "typings": "./index.d.ts", @@ -28,13 +28,13 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/paths": "^1.6.3", - "@thi.ng/resolve-map": "^3.0.13", - "@thi.ng/rstream": "^1.13.2", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/paths": "^1.6.4", + "@thi.ng/resolve-map": "^3.0.14", + "@thi.ng/rstream": "^1.13.6", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "compute", diff --git a/packages/rstream-log/CHANGELOG.md b/packages/rstream-log/CHANGELOG.md index 3df83e7c3c..cd50df0b5b 100644 --- a/packages/rstream-log/CHANGELOG.md +++ b/packages/rstream-log/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.64](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@1.0.63...@thi.ng/rstream-log@1.0.64) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream-log + + + + + + +## [1.0.63](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@1.0.62...@thi.ng/rstream-log@1.0.63) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream-log + + + + + + +## [1.0.62](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@1.0.61...@thi.ng/rstream-log@1.0.62) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream-log + + + + + + +## [1.0.61](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@1.0.60...@thi.ng/rstream-log@1.0.61) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream-log + + + + + ## [1.0.60](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@1.0.59...@thi.ng/rstream-log@1.0.60) (2018-09-24) diff --git a/packages/rstream-log/package.json b/packages/rstream-log/package.json index e3b06ad73b..abc555eb25 100644 --- a/packages/rstream-log/package.json +++ b/packages/rstream-log/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-log", - "version": "1.0.60", + "version": "1.0.64", "description": "Structured, multilevel & hierarchical loggers based on @thi.ng/rstream", "main": "./index.js", "typings": "./index.d.ts", @@ -28,11 +28,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/rstream": "^1.13.2", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/rstream": "^1.13.6", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "ES6", diff --git a/packages/rstream-query/CHANGELOG.md b/packages/rstream-query/CHANGELOG.md index 5d84732b30..69ad98ca37 100644 --- a/packages/rstream-query/CHANGELOG.md +++ b/packages/rstream-query/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@0.3.50...@thi.ng/rstream-query@0.3.51) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream-query + + + + + + +## [0.3.50](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@0.3.49...@thi.ng/rstream-query@0.3.50) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream-query + + + + + + +## [0.3.49](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@0.3.48...@thi.ng/rstream-query@0.3.49) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream-query + + + + + + +## [0.3.48](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@0.3.47...@thi.ng/rstream-query@0.3.48) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream-query + + + + + ## [0.3.47](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@0.3.46...@thi.ng/rstream-query@0.3.47) (2018-09-24) diff --git a/packages/rstream-query/package.json b/packages/rstream-query/package.json index d6d21378ba..ea5ffba289 100644 --- a/packages/rstream-query/package.json +++ b/packages/rstream-query/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-query", - "version": "0.3.47", + "version": "0.3.51", "description": "@thi.ng/rstream based triple store & reactive query engine", "main": "./index.js", "typings": "./index.d.ts", @@ -28,14 +28,14 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/associative": "^0.6.8", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/rstream": "^1.13.2", - "@thi.ng/rstream-dot": "^0.2.48", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/associative": "^0.6.12", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/rstream": "^1.13.6", + "@thi.ng/rstream-dot": "^0.2.52", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "dataflow", diff --git a/packages/rstream/CHANGELOG.md b/packages/rstream/CHANGELOG.md index 6426c24926..441c74ad8a 100644 --- a/packages/rstream/CHANGELOG.md +++ b/packages/rstream/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.13.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.13.5...@thi.ng/rstream@1.13.6) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/rstream + + + + + + +## [1.13.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.13.4...@thi.ng/rstream@1.13.5) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/rstream + + + + + + +## [1.13.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.13.3...@thi.ng/rstream@1.13.4) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/rstream + + + + + + +## [1.13.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.13.2...@thi.ng/rstream@1.13.3) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/rstream + + + + + ## [1.13.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@1.13.1...@thi.ng/rstream@1.13.2) (2018-09-24) diff --git a/packages/rstream/package.json b/packages/rstream/package.json index 44282917e9..dd4f7cc4fb 100644 --- a/packages/rstream/package.json +++ b/packages/rstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream", - "version": "1.13.2", + "version": "1.13.6", "description": "Reactive multi-tap streams, dataflow & transformation pipeline constructs", "main": "./index.js", "typings": "./index.d.ts", @@ -28,13 +28,13 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/associative": "^0.6.8", - "@thi.ng/atom": "^1.5.4", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/paths": "^1.6.3", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/associative": "^0.6.12", + "@thi.ng/atom": "^1.5.5", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/paths": "^1.6.4", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "datastructure", diff --git a/packages/rstream/src/from/interval.ts b/packages/rstream/src/from/interval.ts index d3f03f28ac..b92c6b2f56 100644 --- a/packages/rstream/src/from/interval.ts +++ b/packages/rstream/src/from/interval.ts @@ -10,7 +10,7 @@ import { Subscription } from "../subscription"; * @param delay * @param count */ -export function fromInterval(delay: number, count = Number.POSITIVE_INFINITY) { +export function fromInterval(delay: number, count = Infinity) { return new Stream((stream) => { let i = 0; stream.next(i++); diff --git a/packages/sax/CHANGELOG.md b/packages/sax/CHANGELOG.md index d0cb8bd679..73a2649a45 100644 --- a/packages/sax/CHANGELOG.md +++ b/packages/sax/CHANGELOG.md @@ -3,6 +3,44 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@0.5.1...@thi.ng/sax@0.5.2) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/sax + + + + + + +## [0.5.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@0.5.0...@thi.ng/sax@0.5.1) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/sax + + + + + + +# [0.5.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@0.4.1...@thi.ng/sax@0.5.0) (2018-09-25) + + +### Features + +* **sax:** add opt support for boolean attribs, add tests ([5119b67](https://github.com/thi-ng/umbrella/commit/5119b67)) + + + + + + +## [0.4.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@0.4.0...@thi.ng/sax@0.4.1) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/sax + + + + + # [0.4.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@0.3.21...@thi.ng/sax@0.4.0) (2018-09-24) diff --git a/packages/sax/package.json b/packages/sax/package.json index 6c70b722ee..0341ec21ff 100644 --- a/packages/sax/package.json +++ b/packages/sax/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sax", - "version": "0.4.0", + "version": "0.5.2", "description": "Transducer-based, SAX-like, non-validating, speedy & tiny XML parser", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/transducers": "^2.1.3", - "@thi.ng/transducers-fsm": "^0.2.21" + "@thi.ng/api": "^4.2.2", + "@thi.ng/transducers": "^2.2.0", + "@thi.ng/transducers-fsm": "^0.2.25" }, "keywords": [ "ES6", diff --git a/packages/sax/src/index.ts b/packages/sax/src/index.ts index 4f21a8a952..4765924d6b 100644 --- a/packages/sax/src/index.ts +++ b/packages/sax/src/index.ts @@ -27,8 +27,23 @@ export interface ParseOpts { * Default: false */ trim: boolean; + /** + * If `true`, HTML5 boolean attributes are supported. + * + * Default: false + */ + boolean: boolean; + /** + * If given, element names in this set are allowed to omit their + * closing `/`. E.g. `` vs `` + * + * Default: undefined (none allowed) + */ + // voidTags: Set; // TODO #48 } +export const VOID_TAGS = new Set("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")); + export interface ParseElement { tag: string; attribs: IObjectOf; @@ -342,10 +357,7 @@ const PARSER: FSMStateMap = { } } else { if (ch === ">") { - state.state = State.ELEM_BODY; - state.scope.push({ tag: state.tag, attribs: state.attribs, children: [] }); - state.body = ""; - return [{ type: Type.ELEM_START, tag: state.tag, attribs: state.attribs }]; + return beginElementBody(state); } else if (ch === "/") { state.state = State.ELEM_SINGLE; } else if (!isWS(ch)) { @@ -361,6 +373,20 @@ const PARSER: FSMStateMap = { state.name += ch; } else if (ch === "=") { state.state = State.ATTRIB_VAL_START; + } else if (state.opts.boolean) { + if (ch === " ") { + state.attribs[state.name] = true; + state.state = State.MAYBE_ATTRIB; + } else if (ch === "/") { + state.attribs[state.name] = true; + state.state = State.ELEM_SINGLE; + return; + } else if (ch === ">") { + state.attribs[state.name] = true; + return beginElementBody(state); + } else { + return unexpected(state, ch); + } } else { return unexpected(state, ch); } @@ -515,3 +541,10 @@ const PARSER: FSMStateMap = { } }, }; + +const beginElementBody = (state: ParseState) => { + state.state = State.ELEM_BODY; + state.scope.push({ tag: state.tag, attribs: state.attribs, children: [] }); + state.body = ""; + return [{ type: Type.ELEM_START, tag: state.tag, attribs: state.attribs }]; +}; diff --git a/packages/sax/test/index.ts b/packages/sax/test/index.ts index 6876c47102..fe2ae9805c 100644 --- a/packages/sax/test/index.ts +++ b/packages/sax/test/index.ts @@ -120,11 +120,11 @@ describe("sax", () => { it("errors", () => { assert.deepEqual( - [...tx.iterator(sax.parse(), "a")], + [...sax.parse("a")], [{ type: 7, body: "unexpected char: 'a' @ pos 1" }] ); assert.deepEqual( - [...tx.iterator(sax.parse(), "")], + [...sax.parse("")], [ { type: 4, tag: "a", attribs: {} }, { type: 4, tag: "b", attribs: {} }, @@ -132,4 +132,23 @@ describe("sax", () => { ] ); }); + + it("boolean attribs", () => { + assert.deepEqual( + [...sax.parse({ boolean: true }, ``)], + [ + { type: 4, tag: "foo", attribs: { a: true, b: "2", c: true } }, + { type: 5, tag: "foo", attribs: { a: true, b: "2", c: true }, children: [] } + ], + "no slash" + ) + assert.deepEqual( + [...sax.parse({ boolean: true }, ``)], + [ + { type: 4, tag: "foo", attribs: { a: true, b: "2", c: true } }, + { type: 5, tag: "foo", attribs: { a: true, b: "2", c: true } } + ], + "with slash" + ) + }); }); diff --git a/packages/strings/CHANGELOG.md b/packages/strings/CHANGELOG.md index 6a52b9e272..903df26ca0 100644 --- a/packages/strings/CHANGELOG.md +++ b/packages/strings/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@0.5.0...@thi.ng/strings@0.5.1) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/strings + + + + + + +# [0.5.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@0.4.3...@thi.ng/strings@0.5.0) (2018-09-25) + + +### Features + +* **strings:** add splice(), refactor repeat(), add tests ([0cce048](https://github.com/thi-ng/umbrella/commit/0cce048)) + + + + + + +## [0.4.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@0.4.2...@thi.ng/strings@0.4.3) (2018-09-24) + + +### Bug Fixes + +* **strings:** rename number parsers ([8cbfb97](https://github.com/thi-ng/umbrella/commit/8cbfb97)) + + + + + ## [0.4.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@0.4.1...@thi.ng/strings@0.4.2) (2018-09-24) diff --git a/packages/strings/README.md b/packages/strings/README.md index 9ab38a59d0..bf6def08b2 100644 --- a/packages/strings/README.md +++ b/packages/strings/README.md @@ -21,7 +21,7 @@ This project is part of the ## About Various higher-order, but low-level string formatting & utility -functions, some memoized. WIP / Alpha. +functions, some memoized. WIP / Alpha. Please sources for now. ## Installation diff --git a/packages/strings/package.json b/packages/strings/package.json index 54c1688cb9..8a25a8d5c8 100644 --- a/packages/strings/package.json +++ b/packages/strings/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/strings", - "version": "0.4.2", + "version": "0.5.1", "description": "Various string formatting & utility functions", "main": "./index.js", "typings": "./index.d.ts", @@ -28,7 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/memoize": "^0.2.3" + "@thi.ng/errors": "^0.1.10", + "@thi.ng/memoize": "^0.2.4" }, "keywords": [ "ES6", diff --git a/packages/strings/src/center.ts b/packages/strings/src/center.ts index 23aa06c956..a2a6597b5c 100644 --- a/packages/strings/src/center.ts +++ b/packages/strings/src/center.ts @@ -20,11 +20,11 @@ import { truncate } from "./truncate"; * ``` * * @param lineWidth target length - * @param ch pad character(s) + * @param pad pad character(s) */ -export const center: (lineWidth: number, ch?: string | number) => Stringer = - memoizeJ>((n, ch = " ") => { - const buf = repeat(ch, n); +export const center: (lineWidth: number, pad?: string | number) => Stringer = + memoizeJ>((n, pad = " ") => { + const buf = repeat(pad, n); return (x: any) => { if (x == null) return buf; x = x.toString(); diff --git a/packages/strings/src/index.ts b/packages/strings/src/index.ts index 8b09d3e2d0..55ff7a5424 100644 --- a/packages/strings/src/index.ts +++ b/packages/strings/src/index.ts @@ -9,6 +9,7 @@ export * from "./parse"; export * from "./percent"; export * from "./radix"; export * from "./repeat"; +export * from "./splice"; export * from "./truncate"; export * from "./truncate-left"; export * from "./wrap"; diff --git a/packages/strings/src/parse.ts b/packages/strings/src/parse.ts index efaef03f42..ada5e7bae6 100644 --- a/packages/strings/src/parse.ts +++ b/packages/strings/src/parse.ts @@ -1,9 +1,9 @@ -export const parseInt = (x: string, defaultVal = 0, radix = 10) => { +export const maybeParseInt = (x: string, defaultVal: any = 0, radix = 10) => { const n = parseInt(x, radix); return isNaN(n) ? defaultVal : n; }; -export const parseFloat = (x: string, defaultVal = 0) => { +export const maybeParseFloat = (x: string, defaultVal: any = 0) => { const n = parseFloat(x); return isNaN(n) ? defaultVal : n; }; diff --git a/packages/strings/src/repeat.ts b/packages/strings/src/repeat.ts index 8a5101500a..86738ee717 100644 --- a/packages/strings/src/repeat.ts +++ b/packages/strings/src/repeat.ts @@ -5,5 +5,5 @@ import { memoizeJ } from "@thi.ng/memoize/memoizej"; * @param n repeat count */ export const repeat = memoizeJ( - (ch: string, n: number) => new Array(n).fill(ch).join("") + (ch: string, n: number) => ch.repeat(n) ); diff --git a/packages/strings/src/splice.ts b/packages/strings/src/splice.ts new file mode 100644 index 0000000000..7aa846314d --- /dev/null +++ b/packages/strings/src/splice.ts @@ -0,0 +1,32 @@ +import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; + +/** + * Forms a new strings which inserts given `insert` string into `src` + * string at `from` position and appends remaining `src` chars from + * original `to` position. If `from` and `to` are equal (`to` by default + * is), the operation is a pure insertion. If not, then some chars from + * `src` will be removed in the new string. If either position is + * negative, it'll be considered relative to the end of the `src`. + * + * @param src + * @param insert + * @param from + * @param to + */ +export const splice = (src: string, insert: string, from: number, to = from) => { + if (from < 0) { + from += src.length; + } + if (to < 0) { + to += src.length; + } + if (from > to) { + illegalArgs("'from' index must be <= 'to'"); + } + to = Math.max(to, 0); + return from <= 0 ? + insert + src.substr(to) : + from >= src.length ? + src + insert : + src.substr(0, from) + insert + src.substr(to); +}; diff --git a/packages/strings/test/index.ts b/packages/strings/test/index.ts index dac73b9054..4b5bff721e 100644 --- a/packages/strings/test/index.ts +++ b/packages/strings/test/index.ts @@ -13,7 +13,7 @@ describe("strings", () => { assert.strictEqual(str.padLeft(5), str.padLeft(5)); }); - it("padr", () => { + it("padRight", () => { assert.equal(str.padRight(4)(undefined), " "); assert.equal(str.padRight(4, "0")(null), "0000"); assert.equal(str.padRight(4)(1), "1 "); diff --git a/packages/strings/test/splice.ts b/packages/strings/test/splice.ts new file mode 100644 index 0000000000..c5e7968415 --- /dev/null +++ b/packages/strings/test/splice.ts @@ -0,0 +1,29 @@ +import * as assert from "assert"; +import { splice } from "../src/splice"; + +const SRC = "abc"; + +describe("splice", () => { + it("pos index", () => { + assert.equal(splice(SRC, "x", 0), "xabc"); + assert.equal(splice(SRC, "x", 1), "axbc"); + assert.equal(splice(SRC, "x", 2), "abxc"); + assert.equal(splice(SRC, "x", 3), "abcx"); + assert.equal(splice(SRC, "x", 4), "abcx"); + }); + it("neg index", () => { + assert.equal(splice(SRC, "x", -1), "abxc"); + assert.equal(splice(SRC, "x", -2), "axbc"); + assert.equal(splice(SRC, "x", -3), "xabc"); + assert.equal(splice(SRC, "x", -4), "xabc"); + }); + it("w/ deletion", () => { + assert.equal(splice(SRC, "xx", 0, 1), "xxbc"); + assert.equal(splice(SRC, "xx", 1, 2), "axxc"); + assert.equal(splice(SRC, "xx", 2, 4), "abxx"); + assert.equal(splice(SRC, "xx", -1, 4), "abxx"); + assert.equal(splice(SRC, "xx", -2, 4), "axx"); + assert.equal(splice(SRC, "xx", -3, 4), "xx"); + assert.equal(splice(SRC, "xx", -3, 2), "xxc"); + }); +}); \ No newline at end of file diff --git a/packages/transducers-fsm/CHANGELOG.md b/packages/transducers-fsm/CHANGELOG.md index e378ffb09b..5f0a18c89b 100644 --- a/packages/transducers-fsm/CHANGELOG.md +++ b/packages/transducers-fsm/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@0.2.24...@thi.ng/transducers-fsm@0.2.25) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/transducers-fsm + + + + + + +## [0.2.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@0.2.23...@thi.ng/transducers-fsm@0.2.24) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/transducers-fsm + + + + + + +## [0.2.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@0.2.22...@thi.ng/transducers-fsm@0.2.23) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/transducers-fsm + + + + + + +## [0.2.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@0.2.21...@thi.ng/transducers-fsm@0.2.22) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/transducers-fsm + + + + + ## [0.2.21](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@0.2.20...@thi.ng/transducers-fsm@0.2.21) (2018-09-24) diff --git a/packages/transducers-fsm/package.json b/packages/transducers-fsm/package.json index a289f65ff4..f937967790 100644 --- a/packages/transducers-fsm/package.json +++ b/packages/transducers-fsm/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-fsm", - "version": "0.2.21", + "version": "0.2.25", "description": "Transducer-based Finite State Machine transformer", "main": "./index.js", "typings": "./index.d.ts", @@ -28,8 +28,8 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/api": "^4.2.2", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "ES6", diff --git a/packages/transducers-hdom/CHANGELOG.md b/packages/transducers-hdom/CHANGELOG.md index 0720d13932..93a537a140 100644 --- a/packages/transducers-hdom/CHANGELOG.md +++ b/packages/transducers-hdom/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. +## [1.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.7...@thi.ng/transducers-hdom@1.1.8) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + + +## [1.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.6...@thi.ng/transducers-hdom@1.1.7) (2018-09-28) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + + +## [1.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.5...@thi.ng/transducers-hdom@1.1.6) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + + +## [1.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.4...@thi.ng/transducers-hdom@1.1.5) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + + +## [1.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.3...@thi.ng/transducers-hdom@1.1.4) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + + +## [1.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.2...@thi.ng/transducers-hdom@1.1.3) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + ## [1.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@1.1.1...@thi.ng/transducers-hdom@1.1.2) (2018-09-24) diff --git a/packages/transducers-hdom/package.json b/packages/transducers-hdom/package.json index 417d5b2e05..7e6048a3e1 100644 --- a/packages/transducers-hdom/package.json +++ b/packages/transducers-hdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-hdom", - "version": "1.1.2", + "version": "1.1.8", "description": "Transducer based UI updater for @thi.ng/hdom", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/checks": "^1.5.11", - "@thi.ng/hdom": "^5.0.2", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/checks": "^1.5.12", + "@thi.ng/hdom": "^5.0.6", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "diff", diff --git a/packages/transducers-stats/CHANGELOG.md b/packages/transducers-stats/CHANGELOG.md index 44c795791e..19d46fc347 100644 --- a/packages/transducers-stats/CHANGELOG.md +++ b/packages/transducers-stats/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.4.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@0.4.11...@thi.ng/transducers-stats@0.4.12) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/transducers-stats + + + + + + +## [0.4.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@0.4.10...@thi.ng/transducers-stats@0.4.11) (2018-09-26) + +**Note:** Version bump only for package @thi.ng/transducers-stats + + + + + + +## [0.4.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@0.4.9...@thi.ng/transducers-stats@0.4.10) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/transducers-stats + + + + + + +## [0.4.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@0.4.8...@thi.ng/transducers-stats@0.4.9) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/transducers-stats + + + + + ## [0.4.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@0.4.7...@thi.ng/transducers-stats@0.4.8) (2018-09-24) diff --git a/packages/transducers-stats/package.json b/packages/transducers-stats/package.json index 71cd21e08b..01764deedd 100644 --- a/packages/transducers-stats/package.json +++ b/packages/transducers-stats/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-stats", - "version": "0.4.8", + "version": "0.4.12", "description": "Transducers for statistical / technical analysis", "main": "./index.js", "typings": "./index.d.ts", @@ -28,9 +28,9 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/dcons": "^1.1.8", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/transducers": "^2.1.3" + "@thi.ng/dcons": "^1.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "ES6", diff --git a/packages/transducers/CHANGELOG.md b/packages/transducers/CHANGELOG.md index db8fef0175..b58a8defce 100644 --- a/packages/transducers/CHANGELOG.md +++ b/packages/transducers/CHANGELOG.md @@ -3,6 +3,52 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@2.1.6...@thi.ng/transducers@2.2.0) (2018-10-17) + + +### Bug Fixes + +* **transducers:** minor TS3.1 fixes ([1ef2361](https://github.com/thi-ng/umbrella/commit/1ef2361)) + + +### Features + +* **transducers:** update wrap*() fns to accept iterables ([515e5ba](https://github.com/thi-ng/umbrella/commit/515e5ba)) + + + + + + +## [2.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@2.1.5...@thi.ng/transducers@2.1.6) (2018-09-26) + + +### Bug Fixes + +* **transducers:** fix matchLast(), fix & update return match*() types ([823d828](https://github.com/thi-ng/umbrella/commit/823d828)) + + + + + + +## [2.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@2.1.4...@thi.ng/transducers@2.1.5) (2018-09-25) + +**Note:** Version bump only for package @thi.ng/transducers + + + + + + +## [2.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@2.1.3...@thi.ng/transducers@2.1.4) (2018-09-24) + +**Note:** Version bump only for package @thi.ng/transducers + + + + + ## [2.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@2.1.2...@thi.ng/transducers@2.1.3) (2018-09-24) diff --git a/packages/transducers/README.md b/packages/transducers/README.md index e92bd2318f..a52e724d4c 100644 --- a/packages/transducers/README.md +++ b/packages/transducers/README.md @@ -56,7 +56,7 @@ other JS based implementations) and dozens of less common, but generally highly useful operators have been added. See full list below. Furthermore, since v2.0.0 most transducers & reducers provided here -accept an optional input iterable, which allows them them to be used +accept an optional input iterable, which allows them to be used directly instead of having to wrap their call in one of the execution functions (i.e. `transduce()`, `reduce()`, `iterator()`, `run()`). If executed this way, transducer functions will return a transforming ES6 @@ -789,31 +789,31 @@ As with transducer functions, reducer functions can also given an optional input iterable. If done so, the function will consume the input and return a reduced result (as if it would be called via `reduce()`). -- [add](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/add) -- [assocMap](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/assoc-map) -- [assocObj](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/assoc-obj) -- [conj](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/conj) -- [count](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/count) -- [div](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/div) -- [every](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/every) -- [fill](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/fill) -- [frequencies](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/frequencies) -- [groupBinary](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/group-binary) -- [groupByMap](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/group-by-map) -- [groupByObj](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/group-by-obj) -- [last](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/last) -- [maxCompare](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/max-compare) -- [max](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/max) -- [mean](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/mean) -- [minCompare](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/min-compare) -- [min](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/min) -- [mul](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/mul) -- [pushCopy](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/push-copy) -- [push](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/push) -- [reductions](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/reductions) -- [some](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/some) -- [str](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/str) -- [sub](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/sub) +- [add](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/add.ts) +- [assocMap](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/assoc-map.ts) +- [assocObj](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/assoc-obj.ts) +- [conj](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/conj.ts) +- [count](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/count.ts) +- [div](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/div.ts) +- [every](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/every.ts) +- [fill](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/fill.ts) +- [frequencies](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/frequencies.ts) +- [groupBinary](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/group-binary.ts) +- [groupByMap](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/group-by-map.ts) +- [groupByObj](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/group-by-obj.ts) +- [last](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/last.ts) +- [maxCompare](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/max-compare.ts) +- [max](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/max.ts) +- [mean](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/mean.ts) +- [minCompare](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/min-compare.ts) +- [min](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/min.ts) +- [mul](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/mul.ts) +- [pushCopy](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/push-copy.ts) +- [push](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/push.ts) +- [reductions](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/reductions.ts) +- [some](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/some.ts) +- [str](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/str.ts) +- [sub](https://github.com/thi-ng/umbrella/tree/master/packages/transducers/src/rfn/sub.ts) ## Authors diff --git a/packages/transducers/package.json b/packages/transducers/package.json index b20df7af82..c370d24cef 100644 --- a/packages/transducers/package.json +++ b/packages/transducers/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers", - "version": "2.1.3", + "version": "2.2.0", "description": "Lightweight transducer implementations for ES6 / TypeScript", "main": "./index.js", "typings": "./index.d.ts", @@ -28,13 +28,13 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/compare": "^0.1.9", - "@thi.ng/compose": "^0.1.4", - "@thi.ng/equiv": "^0.1.11", - "@thi.ng/errors": "^0.1.9", - "@thi.ng/strings": "^0.4.2" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/compare": "^0.1.10", + "@thi.ng/compose": "^0.2.0", + "@thi.ng/equiv": "^0.1.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/strings": "^0.5.1" }, "keywords": [ "ES6", diff --git a/packages/transducers/src/func/ensure-array.ts b/packages/transducers/src/func/ensure-array.ts index cf3634d417..5928b40a58 100644 --- a/packages/transducers/src/func/ensure-array.ts +++ b/packages/transducers/src/func/ensure-array.ts @@ -1,4 +1,5 @@ import { isArray } from "@thi.ng/checks/is-array"; +import { isArrayLike } from "@thi.ng/checks/is-arraylike"; import { ensureIterable } from "./ensure-iterable"; /** @@ -12,3 +13,7 @@ import { ensureIterable } from "./ensure-iterable"; export function ensureArray(x: any): any[] { return isArray(x) ? x : [...ensureIterable(x)]; } + +export function ensureArrayLike(x: any): ArrayLike { + return isArrayLike(x) ? x : [...ensureIterable(x)]; +} diff --git a/packages/transducers/src/iter/permutations.ts b/packages/transducers/src/iter/permutations.ts index 4e27fee9d0..c0375cae68 100644 --- a/packages/transducers/src/iter/permutations.ts +++ b/packages/transducers/src/iter/permutations.ts @@ -1,7 +1,5 @@ -import { isArray } from "@thi.ng/checks/is-array"; -import { isString } from "@thi.ng/checks/is-string"; import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; - +import { ensureArrayLike } from "../func/ensure-array"; import { range } from "./range"; /** @@ -10,11 +8,11 @@ import { range } from "./range"; * empty the iterator yields no values. * * ``` - * [...permutations(range(3), "ab")] + * [...permutations("ab", range(3))] * // [ ['a', 0], ['a', 1], ['a', 2], * // ['b', 0], ['b', 1], ['b', 2] ] * - * [...iterator(map((x: any[]) => x.join("")), permutations("ab", "-", tx.range(3)))] + * [...map((x: any[]) => x.join(""), permutations("ab", "-", range(3)))] * // ['a-0', 'a-1', 'a-2', 'b-0', 'b-1', 'b-2'] * * [...permutations([], "", range(0))] @@ -27,13 +25,14 @@ export function permutations(a: Iterable): IterableIterator<[A]>; export function permutations(a: Iterable, b: Iterable): IterableIterator<[A, B]>; export function permutations(a: Iterable, b: Iterable, c: Iterable): IterableIterator<[A, B, C]>; export function permutations(a: Iterable, b: Iterable, c: Iterable, d: Iterable): IterableIterator<[A, B, C, D]>; -export function* permutations(...src: Iterable[]): IterableIterator { +export function permutations(...src: Iterable[]): IterableIterator; +export function* permutations(...src: any[]) { const n = src.length - 1; if (n < 0) { return; } const step = new Array(n + 1).fill(0); - const realized = src.map((s: any) => isArray(s) || isString(s) ? s : [...s]); + const realized = src.map(ensureArrayLike); const total = realized.reduce((acc, x) => acc * x.length, 1); for (let i = 0; i < total; i++) { const tuple = []; @@ -52,8 +51,10 @@ export function* permutations(...src: Iterable[]): IterableIterator } /** - * Iterator yielding the Cartesian Product for `n` items of `m` values each. - * If `m` is not given, defaults to value of `n`. The range of `m` is `0..m-1`. + * Iterator yielding the Cartesian Product for `n` items of `m` values + * each. If `m` is not given, defaults to value of `n`. The range of `m` + * is `0..m-1`. The optional `offsets` array can be used to define start + * values for each dimension. * * ``` * [...permutationsN(2)] @@ -63,14 +64,18 @@ export function* permutations(...src: Iterable[]): IterableIterator * // [ [0, 0], [0, 1], [0, 2], * // [1, 0], [1, 1], [1, 2], * // [2, 0], [2, 1], [2, 2] ] + * + * [...permutationsN(2, 3, [10, 20])] + * // [ [ 10, 20 ], [ 10, 21 ], [ 11, 20 ], [ 11, 21 ] ] * ``` * * @param n * @param m + * @param offsets */ export function permutationsN(n: number, m = n, offsets?: number[]): IterableIterator { if (offsets && offsets.length < n) { - illegalArgs(`insufficient offsets, got ${offsets.length}, but needed ${n}`); + illegalArgs(`insufficient offsets, got ${offsets.length}, needed ${n}`); } const seqs = []; while (--n >= 0) { diff --git a/packages/transducers/src/iter/range.ts b/packages/transducers/src/iter/range.ts index 89db57e105..d98f310c30 100644 --- a/packages/transducers/src/iter/range.ts +++ b/packages/transducers/src/iter/range.ts @@ -5,7 +5,7 @@ export function range(from: number, to: number, step: number): IterableIterator< export function* range(from?: number, to?: number, step?: number) { if (from === undefined) { from = 0; - to = Number.POSITIVE_INFINITY; + to = Infinity; } else if (to === undefined) { to = from; from = 0; diff --git a/packages/transducers/src/iter/repeat.ts b/packages/transducers/src/iter/repeat.ts index cf4658e605..6afeb86f58 100644 --- a/packages/transducers/src/iter/repeat.ts +++ b/packages/transducers/src/iter/repeat.ts @@ -1,4 +1,4 @@ -export function* repeat(x: T, n = Number.POSITIVE_INFINITY) { +export function* repeat(x: T, n = Infinity) { while (n-- > 0) { yield x; } diff --git a/packages/transducers/src/iter/repeatedly.ts b/packages/transducers/src/iter/repeatedly.ts index 8e4117609a..6456d88f21 100644 --- a/packages/transducers/src/iter/repeatedly.ts +++ b/packages/transducers/src/iter/repeatedly.ts @@ -1,4 +1,4 @@ -export function* repeatedly(fn: () => T, n = Number.POSITIVE_INFINITY) { +export function* repeatedly(fn: () => T, n = Infinity) { while (n-- > 0) { yield fn(); } diff --git a/packages/transducers/src/iter/wrap-both.ts b/packages/transducers/src/iter/wrap-both.ts index 8ccc373dd1..791922d08b 100644 --- a/packages/transducers/src/iter/wrap-both.ts +++ b/packages/transducers/src/iter/wrap-both.ts @@ -7,6 +7,6 @@ import { wrap } from "./wrap"; * @param src * @param n */ -export function wrapBoth(src: T[], n = 1) { +export function wrapBoth(src: Iterable, n = 1) { return wrap(src, n); } diff --git a/packages/transducers/src/iter/wrap-left.ts b/packages/transducers/src/iter/wrap-left.ts index 57d9a7a7f0..17c3f027b9 100644 --- a/packages/transducers/src/iter/wrap-left.ts +++ b/packages/transducers/src/iter/wrap-left.ts @@ -7,6 +7,6 @@ import { wrap } from "./wrap"; * @param src * @param n */ -export function wrapLeft(src: T[], n = 1) { +export function wrapLeft(src: Iterable, n = 1) { return wrap(src, n, true, false); } diff --git a/packages/transducers/src/iter/wrap-right.ts b/packages/transducers/src/iter/wrap-right.ts index 50903dd153..d7a0ba8cdb 100644 --- a/packages/transducers/src/iter/wrap-right.ts +++ b/packages/transducers/src/iter/wrap-right.ts @@ -7,6 +7,6 @@ import { wrap } from "./wrap"; * @param src * @param n */ -export function wrapRight(src: T[], n = 1) { +export function wrapRight(src: Iterable, n = 1) { return wrap(src, n, false, true); } diff --git a/packages/transducers/src/iter/wrap.ts b/packages/transducers/src/iter/wrap.ts index 2504825470..b67d78c3e0 100644 --- a/packages/transducers/src/iter/wrap.ts +++ b/packages/transducers/src/iter/wrap.ts @@ -1,4 +1,5 @@ import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; +import { ensureArray } from "../func/ensure-array"; /** * Yields iterator of `src` with the last `n` values of `src` prepended @@ -11,17 +12,18 @@ import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; * @param left * @param right */ -export function* wrap(src: T[], n = 1, left = true, right = true) { - (n < 0 || n > src.length) && illegalArgs(`wrong number of wrap items: got ${n} max: ${src.length}`); +export function* wrap(src: Iterable, n = 1, left = true, right = true) { + const _src: T[] = ensureArray(src); + (n < 0 || n > _src.length) && illegalArgs(`wrong number of wrap items: got ${n}, but max: ${_src.length}`); if (left) { - for (let m = src.length, i = m - n; i < m; i++) { - yield src[i]; + for (let m = _src.length, i = m - n; i < m; i++) { + yield _src[i]; } } - yield* src; + yield* _src; if (right) { for (let i = 0; i < n; i++) { - yield src[i]; + yield _src[i]; } } } diff --git a/packages/transducers/src/iterator.ts b/packages/transducers/src/iterator.ts index 43f32df6d3..22ddd8c6d6 100644 --- a/packages/transducers/src/iterator.ts +++ b/packages/transducers/src/iterator.ts @@ -38,7 +38,7 @@ export function* iterator(xform: Transducer, xs: Iterable): Itera * @param xs */ export function* iterator1(xform: Transducer, xs: Iterable): IterableIterator { - const reduce = (>xform([null, null, (acc, x) => (acc = x)]))[2]; + const reduce = (>xform([null, null, (_, x) => x]))[2]; for (let x of xs) { let y = reduce(SEMAPHORE, x); if (isReduced(y)) { diff --git a/packages/transducers/src/rfn/max.ts b/packages/transducers/src/rfn/max.ts index 8c5eeadb15..56658f82ef 100644 --- a/packages/transducers/src/rfn/max.ts +++ b/packages/transducers/src/rfn/max.ts @@ -6,5 +6,5 @@ export function max(xs: Iterable): number; export function max(xs?: Iterable): any { return xs ? reduce(max(), xs) : - reducer(() => Number.NEGATIVE_INFINITY, (acc, x: number) => Math.max(acc, x)); + reducer(() => -Infinity, (acc, x: number) => Math.max(acc, x)); } diff --git a/packages/transducers/src/rfn/min.ts b/packages/transducers/src/rfn/min.ts index b159c97cd1..f4fda255f2 100644 --- a/packages/transducers/src/rfn/min.ts +++ b/packages/transducers/src/rfn/min.ts @@ -6,5 +6,5 @@ export function min(xs: Iterable): number; export function min(xs?: Iterable): any { return xs ? reduce(min(), xs) : - reducer(() => Number.POSITIVE_INFINITY, (acc, x: number) => Math.min(acc, x)); + reducer(() => Infinity, (acc, x: number) => Math.min(acc, x)); } diff --git a/packages/transducers/src/xform/interleave.ts b/packages/transducers/src/xform/interleave.ts index 526c1d2b18..0d773928fb 100644 --- a/packages/transducers/src/xform/interleave.ts +++ b/packages/transducers/src/xform/interleave.ts @@ -5,12 +5,12 @@ import { isReduced } from "../reduced"; export function interleave(sep: B | (() => B)): Transducer; export function interleave(sep: B | (() => B), src: Iterable): IterableIterator; -export function interleave(sep: B | (() => B), src?: Iterable): any { +export function interleave(sep: any, src?: Iterable): any { return src ? iterator(interleave(sep), src) : (rfn: Reducer) => { const r = rfn[2]; - const _sep = typeof sep === "function" ? sep : () => sep; + const _sep: () => B = typeof sep === "function" ? sep : () => sep; return compR(rfn, (acc, x: A) => { acc = r(acc, _sep()); diff --git a/packages/transducers/src/xform/interpose.ts b/packages/transducers/src/xform/interpose.ts index daab88ac73..200fb0ecb9 100644 --- a/packages/transducers/src/xform/interpose.ts +++ b/packages/transducers/src/xform/interpose.ts @@ -5,12 +5,12 @@ import { isReduced } from "../reduced"; export function interpose(sep: B | (() => B)): Transducer; export function interpose(sep: B | (() => B), src: Iterable): IterableIterator; -export function interpose(sep: B | (() => B), src?: Iterable): any { +export function interpose(sep: any, src?: Iterable): any { return src ? iterator(interpose(sep), src) : (rfn: Reducer) => { const r = rfn[2]; - const _sep = typeof sep === "function" ? sep : () => sep; + const _sep: () => B = typeof sep === "function" ? sep : () => sep; let first = true; return compR(rfn, (acc, x: A) => { diff --git a/packages/transducers/src/xform/match-first.ts b/packages/transducers/src/xform/match-first.ts index ac28647196..467364ec7e 100644 --- a/packages/transducers/src/xform/match-first.ts +++ b/packages/transducers/src/xform/match-first.ts @@ -14,12 +14,28 @@ import { take } from "./take"; * ``` * * Yields none or only the first value which passed the predicate check - * and then causes early termination. + * and then causes early termination. If `src` input is given, returns + * first match found (or `undefined`). Also see `matchLast()`. + * + * ``` + * matchFirst((x) => x >= 5, [3, 1, 4, 2, 6, 5]) + * // 6 + * + * transduce( + * comp( + * matchFirst((x) => x >= 5), + * map((x) => x * 10) + * ), + * last(), + * [3, 1, 4, 2, 6, 5] + * ) + * // 60 + * ``` * * @param pred predicate function */ export function matchFirst(pred: Predicate): Transducer; -export function matchFirst(pred: Predicate, src: Iterable): IterableIterator; +export function matchFirst(pred: Predicate, src: Iterable): T | undefined; export function matchFirst(pred: Predicate, src?: Iterable): any { return src ? [...iterator1(matchFirst(pred), src)][0] : diff --git a/packages/transducers/src/xform/match-last.ts b/packages/transducers/src/xform/match-last.ts index 0771080a9a..e126d9ba3f 100644 --- a/packages/transducers/src/xform/match-last.ts +++ b/packages/transducers/src/xform/match-last.ts @@ -2,7 +2,7 @@ import { Predicate } from "@thi.ng/api"; import { Transducer } from "../api"; import { comp } from "../func/comp"; -import { iterator1 } from "../iterator"; +import { iterator } from "../iterator"; import { filter } from "./filter"; import { takeLast } from "./take-last"; @@ -14,14 +14,30 @@ import { takeLast } from "./take-last"; * ``` * * Yields none or only the last value which passed the predicate check. + * If `src` input is given, returns last match found (or `undefined`). + * + * ``` + * matchLast((x) => x >= 5, [3, 1, 6, 5, 4, 2]) + * // 5 + * + * transduce( + * comp( + * matchLast((x) => x >= 5), + * map((x) => x * 10) + * ), + * last(), + * [3, 1, 4, 2, 6, 5] + * ) + * // 50 + * ``` * * @param pred predicate function * @param src */ export function matchLast(pred: Predicate): Transducer; -export function matchLast(pred: Predicate, src: Iterable): IterableIterator; +export function matchLast(pred: Predicate, src: Iterable): T | undefined; export function matchLast(pred: Predicate, src?: Iterable): any { return src ? - iterator1(matchLast(pred), src) : + [...iterator(matchLast(pred), src)][0] : comp(filter(pred), takeLast(1)); } diff --git a/packages/unionstruct/CHANGELOG.md b/packages/unionstruct/CHANGELOG.md index 9ab88c93b4..485e42cf47 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.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/unionstruct@0.1.16...@thi.ng/unionstruct@0.1.17) (2018-10-17) + +**Note:** Version bump only for package @thi.ng/unionstruct + + + + + ## [0.1.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/unionstruct@0.1.15...@thi.ng/unionstruct@0.1.16) (2018-09-24) diff --git a/packages/unionstruct/package.json b/packages/unionstruct/package.json index 71c4af46dd..5c38cd9fc7 100644 --- a/packages/unionstruct/package.json +++ b/packages/unionstruct/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/unionstruct", - "version": "0.1.16", + "version": "0.1.17", "description": "C-style struct, union and bitfield views of ArrayBuffers", "main": "./index.js", "typings": "./index.d.ts", diff --git a/packages/vectors/CHANGELOG.md b/packages/vectors/CHANGELOG.md index 516ae5f978..820a915f40 100644 --- a/packages/vectors/CHANGELOG.md +++ b/packages/vectors/CHANGELOG.md @@ -3,6 +3,34 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.4.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@1.3.0...@thi.ng/vectors@1.4.0) (2018-10-17) + + +### Features + +* **vectors:** add axis consts, add/update ops ([473ec80](https://github.com/thi-ng/umbrella/commit/473ec80)) +* **vectors:** add collate & eqDelta fns, update ctors ([221fb7f](https://github.com/thi-ng/umbrella/commit/221fb7f)) +* **vectors:** add comparators & ICompare impls for vec2/3/4 ([6a0f8aa](https://github.com/thi-ng/umbrella/commit/6a0f8aa)) +* **vectors:** add IMinMax interface ([34312d8](https://github.com/thi-ng/umbrella/commit/34312d8)) +* **vectors:** add operation specific interfaces, rename Vec3.toPolar() ([5c44ad9](https://github.com/thi-ng/umbrella/commit/5c44ad9)) +* **vectors:** replace math.ts w/ imports from [@thi](https://github.com/thi).ng/maths package ([0967929](https://github.com/thi-ng/umbrella/commit/0967929)) + + + + + + +# [1.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@1.2.2...@thi.ng/vectors@1.3.0) (2018-09-28) + + +### Features + +* **vectors:** add vector ops codegen, update basic vec2/3/4 ops ([#51](https://github.com/thi-ng/umbrella/issues/51)) ([b5ed254](https://github.com/thi-ng/umbrella/commit/b5ed254)) + + + + + ## [1.2.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@1.2.1...@thi.ng/vectors@1.2.2) (2018-09-24) diff --git a/packages/vectors/package.json b/packages/vectors/package.json index 4f85be133c..e2910427f2 100644 --- a/packages/vectors/package.json +++ b/packages/vectors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/vectors", - "version": "1.2.2", + "version": "1.4.0", "description": "Vector algebra for fixed & variable sizes, memory mapped, flexible layouts", "main": "./index.js", "typings": "./index.d.ts", @@ -29,9 +29,11 @@ "typescript": "^3.0.1" }, "dependencies": { - "@thi.ng/api": "^4.2.1", - "@thi.ng/checks": "^1.5.11", - "@thi.ng/errors": "^0.1.9" + "@thi.ng/api": "^4.2.2", + "@thi.ng/checks": "^1.5.12", + "@thi.ng/errors": "^0.1.10", + "@thi.ng/math": "^0.1.0", + "@thi.ng/transducers": "^2.2.0" }, "keywords": [ "ES6", diff --git a/packages/vectors/src/api.ts b/packages/vectors/src/api.ts index 1cb3389c74..c3ece347d7 100644 --- a/packages/vectors/src/api.ts +++ b/packages/vectors/src/api.ts @@ -1,4 +1,12 @@ -import { NumericArray } from "@thi.ng/api/api"; +import { + ICopy, + IEqualsDelta, + IEquiv, + NumericArray, + IEmpty, + ILength, + ICompare +} from "@thi.ng/api/api"; export type Vec = NumericArray; export type ReadonlyVec = ArrayLike & Iterable; @@ -13,17 +21,53 @@ export type ReadonlyMat = ArrayLike & Iterable; export type VecOp1 = (v: Vec, i?: number, s?: number) => T; /** - * A vector operation involving two vectors. The first vector might be + * A vector operation involving 2 vectors. The first vector might be * modified. */ export type VecOp2 = (a: Vec, b: ReadonlyVec, ia?: number, ib?: number, sa?: number, sb?: number) => T; /** - * A vector operation involving input readonly two vectors and writing - * result to an output vector `out`. + * A vector operation involving a vector and a scalar. The vector might + * be modified. + */ +export type VecOpN2 = (a: Vec, n: number, ia?: number, sa?: number) => T; + +/** + * A vector operation involving 2 readonly vectors and storing result + * in output vector `out`. */ export type VecOp2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io?: number, ia?: number, ib?: number, so?: number, sa?: number, sb?: number) => T; +/** + * A vector operation involving a readonly vector and a scalar, + * storing result in output vector `out`. + */ +export type VecOpN2o = (out: Vec, a: ReadonlyVec, n: number, io?: number, ia?: number, so?: number, sa?: number) => T; + +/** + * A vector operation involving 3 vectors. The first vector might be + * modified. + */ +export type VecOp3 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia?: number, ib?: number, ic?: number, sa?: number, sb?: number, sc?: number) => T; + +/** + * A vector operation involving 2 vectors and a scalar. The first + * vector might be modified. + */ +export type VecOpN3 = (a: Vec, b: ReadonlyVec, n: number, ia?: number, ib?: number, sa?: number, sb?: number) => T; + +/** + * A vector operation involving 3 readonly vectors and storing result in + * output vector `out`. + */ +export type VecOp3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, c: ReadonlyVec, io?: number, ia?: number, ib?: number, ic?: number, so?: number, sa?: number, sb?: number, sc?: number) => T; + +/** + * A vector operation involving 3 operands: 2 readonly vectors and a + * scalar, storing result in output vector `out`. + */ +export type VecOpN3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, n: number, io?: number, ia?: number, ib?: number, so?: number, sa?: number, sb?: number) => T; + /** * A readonly vector operation involving only a single vector. */ @@ -34,16 +78,130 @@ export type ReadonlyVecOp1 = (v: ReadonlyVec, i?: number, s?: number) => T; */ export type ReadonlyVecOp2 = (a: ReadonlyVec, b: ReadonlyVec, ia?: number, ib?: number, sa?: number, sb?: number) => T; -export interface IVec { +export type Vec2Coord = 0 | 1; +export type Vec3Coord = 0 | 1 | 2; +export type Vec4Coord = 0 | 1 | 2 | 3; + +export interface IVec extends ILength { buf: Vec; - length: number; i: number; s: number; } -const min = Number.NEGATIVE_INFINITY; -const max = Number.POSITIVE_INFINITY; +export interface IVector extends + Iterable, + IVec, + ICopy, + ICompare, + IEmpty, + IEquiv, + IEqualsDelta, + IDistance, + IDotProduct, + IMagnitude, + IMath, + IMinMax, + IMix, + INormalize { + + set(v: T): T; + setN(n: number): T; +} + +export interface IAngleBetween { + angleBetween(v: Readonly, normalize?: boolean): number; +} + +export interface IDistance { + dist(v: Readonly): number; + distSq(v: Readonly): number; +} +export interface IDotProduct { + dot(v: Readonly): number; +} + +export interface ICrossProduct { + cross(v: Readonly): R; +} + +export interface IMagnitude<> { + mag(): number; + magSq(): number; +} + +export interface IMath { + add(v: Readonly): T; + sub(v: Readonly): T; + mul(v: Readonly): T; + div(v: Readonly): T; + addN(n: number): T; + subN(n: number): T; + mulN(n: number): T; + divN(n: number): T; + madd(v: Readonly, w: Readonly): T; + maddN(v: Readonly, n: number): T; + msub(v: Readonly, w: Readonly): T; + msubN(v: Readonly, n: number): T; + addNew(v: Readonly, out?: T): T; + subNew(v: Readonly, out?: T): T; + mulNew(v: Readonly, out?: T): T; + divNew(v: Readonly, out?: T): T; + addNewN(n: number, out?: T): T; + subNewN(n: number, out?: T): T; + mulNewN(n: number, out?: T): T; + divNewN(n: number, out?: T): T; + maddNew(v: Readonly, w: Readonly, out?: T): T; + maddNewN(v: Readonly, n: number, out?: T): T; + msubNew(v: Readonly, w: Readonly, out?: T): T; + msubNewN(v: Readonly, n: number, out?: T): T; +} + +export interface IMinMax { + min(v: Readonly): T; + max(v: Readonly): T; + clamp(min: Readonly, max: Readonly): T; +} + +export interface IMix { + mix(v: Readonly, t: Readonly): T; + mixN(v: Readonly, t: number): T; + mixNew(v: Readonly, t: Readonly, out?: T): T; + mixNewN(v: Readonly, t: number, out?: T): T; +} + +export interface INormalize { + /** + * Normalizes vector to given `length`. If omitted, target length + * will be 1.0. + * + * @param length + */ + normalize(length?: number): T; +} + +export interface IPolar { + /** + * Converts vector into polar coordinates. For the 3D case, these + * will be spherical coordinates. + */ + toPolar(): T; + /** + * Converts vector with polar coordinates into cartesian form. The + * optional `offset` will be added to the result. + * + * @param offset + */ + toCartesian(offset?: Readonly): T; +} + +const min = -Infinity; +const max = Infinity; export const MIN4 = Object.freeze([min, min, min, min]); export const MAX4 = Object.freeze([max, max, max, max]); export const ONE4 = Object.freeze([1, 1, 1, 1]); export const ZERO4 = Object.freeze([0, 0, 0, 0]); +export const X4 = Object.freeze([1, 0, 0, 0]); +export const Y4 = Object.freeze([0, 1, 0, 0]); +export const Z4 = Object.freeze([0, 0, 1, 0]); +export const W4 = Object.freeze([0, 0, 0, 1]); + diff --git a/packages/vectors/src/codegen.ts b/packages/vectors/src/codegen.ts new file mode 100644 index 0000000000..089d4ce6cc --- /dev/null +++ b/packages/vectors/src/codegen.ts @@ -0,0 +1,247 @@ +import { comp } from "@thi.ng/transducers/func/comp"; +import { range } from "@thi.ng/transducers/iter/range"; +import { tuples } from "@thi.ng/transducers/iter/tuples"; +import { push } from "@thi.ng/transducers/rfn/push"; +import { transduce } from "@thi.ng/transducers/transduce"; +import { map } from "@thi.ng/transducers/xform/map"; +import { mapcat } from "@thi.ng/transducers/xform/mapcat"; +import { take } from "@thi.ng/transducers/xform/take"; +import { + Vec, + VecOp1, + VecOp2, + VecOp2o, + VecOp3, + VecOp3o, + VecOpN2, + VecOpN2o, + VecOpN3, + VecOpN3o +} from "./api"; + +type CommonOps = [ + + // set, setN + VecOp2, + VecOpN2, + + // add, sub, mul, div + VecOp2, + VecOp2, + VecOp2, + VecOp2, + + VecOp2o, + VecOp2o, + VecOp2o, + VecOp2o, + + VecOpN2, + VecOpN2, + VecOpN2, + VecOpN2, + + VecOpN2o, + VecOpN2o, + VecOpN2o, + VecOpN2o, + + // madd / msub + VecOp3, + VecOpN3, + VecOp3, + VecOpN3, + + // Math.* + VecOp1, + VecOp1, + VecOp1, + VecOp1, + VecOp1, + VecOp1, + VecOp1, + + // pow, min,max + VecOp2, + VecOp2, + VecOp2, + + // mix, mixN, mixo, mixNo + VecOp3, + VecOpN3, + VecOp3o, + VecOpN3o +]; + +/** + * HOF array index lookup gen to provide optimized versions of: + * + * ``` + * lookup("a")(0) // a[ia] + * lookup("a")(1) // a[ia * sa] + * lookup("a")(2) // a[ia + 2 * sa] + * ``` + * + * @param sym + */ +const lookup = (sym) => + (i) => i > 1 ? + `${sym}[i${sym}+${i}*s${sym}]` : + i == 1 ? `${sym}[i${sym}+s${sym}]` : + `${sym}[i${sym}]`; + +/** + * Infinite iterator of index lookups for `sym`. + * + * @param sym + */ +const indices = (sym) => map(lookup(sym), range()); + +/** + * Takes a vector size `dim`, a code template function and an array of + * symbol names participating in the template. For each symbol, creates + * iterator of index lookups, forms them into tuples and passes them to + * template to generate code. If the optional `ret` arg is not `null` + * (default `"a"`), appends a `return` statement to the result array, + * using `ret` as return value. Returns array + * + * @param dim + * @param tpl + * @param syms + * @param ret + */ +const assemble = (dim: number, tpl: (syms: string[]) => string, syms: string[], ret = "a") => { + const src = transduce( + comp(take(dim), map(tpl)), + push(), + tuples.apply(null, [...map(indices, syms)]) + ); + ret !== null && src.push(`return ${ret};`); + return src; +}; + +const compile = (args: string, src: string[]) => + new Function(args, src.join("")); + +export const defop1 = (dim: number, op: string): VecOp1 => + compile( + "a,ia=0,sa=1", + assemble(dim, ([a]) => `${a}=${op}(${a});`, ["a"]) + ); + +export const defop2 = (dim: number, op: string): VecOp2 => + compile( + "a,b,ia=0,ib=0,sa=1,sb=1", + assemble(dim, ([a, b]) => `${a}${op}=${b};`, ["a", "b"]) + ); + +export const defopfn2 = (dim: number, fn: string): VecOp2 => + compile( + "a,b,ia=0,ib=0,sa=1,sb=1", + assemble(dim, ([a, b]) => `${a}=${fn}(${a},${b});`, ["a", "b"]) + ); + +export const defopN = (dim: number, op: string): VecOpN2 => + compile( + "a,n,ia=0,sa=1", + assemble(dim, ([a]) => `${a}${op}=n;`, ["a"]) + ); + +export const defop2o = (dim: number, op: string): VecOp2o => + compile( + "o,a,b,io=0,ia=0,ib=0,so=1,sa=1,sb=1", + assemble(dim, ([o, a, b]) => `${o}=${a}${op}${b};`, ["o", "a", "b"], "o") + ); + +export const defopNo = (dim: number, op: string): VecOpN2o => + compile( + "o,a,n,io=0,ia=0,so=1,sa=1", + assemble(dim, ([o, a]) => `${o}=${a}${op}n;`, ["o", "a"], "o") + ); + +export const defop3 = (dim: number, op1: string, op2: string): VecOp3 => + compile( + "a,b,c,ia=0,ib=0,ic=0,sa=1,sb=1,sc=1", + assemble(dim, ([a, b, c]) => `${a}${op1}=${b}${op2}${c};`, ["a", "b", "c"]) + ); + +export const defopN3 = (dim: number, op1: string, op2: string): VecOpN3 => + compile( + "a,b,n,ia=0,ib=0,sa=1,sb=1", + assemble(dim, ([a, b]) => `${a}${op1}=${b}${op2}n;`, ["a", "b"]) + ); + +export const defmix = (dim: number): VecOp3 => + compile( + "a,b,c,ia=0,ib=0,ic=0,sa=1,sb=1,sc=1", + assemble(dim, ([a, b, c]) => `${a}+=(${b}-${a})*${c};`, ["a", "b", "c"]) + ); + +export const defmixN = (dim: number): VecOpN3 => + compile( + "a,b,n,ia=0,ib=0,sa=1,sb=1", + assemble(dim, ([a, b]) => `${a}+=(${b}-${a})*n;`, ["a", "b"]) + ); + +export const defmixo = (dim: number): VecOp3o => + compile( + "o,a,b,c,io=0,ia=0,ib=0,ic=0,so=1,sa=1,sb=1,sc=1", + assemble(dim, ([o, a, b, c]) => `${o}=${a}+(${b}-${a})*${c};`, ["o", "a", "b", "c"], "o") + ); + +export const defmixNo = (dim: number): VecOpN3o => + compile( + "o,a,b,n,io=0,ia=0,ib=0,so=1,sa=1,sb=1", + assemble(dim, ([o, a, b]) => `${o}=${a}+(${b}-${a})*n;`, ["o", "a", "b"], "o") + ); + +export const defcommon = (dim: number): CommonOps => + [ + defop2(dim, ""), + defopN(dim, ""), + + ...mapcat( + (f) => map((op) => f(dim, op), "+-*/"), + [defop2, defop2o, defopN, defopNo] + ), + ...mapcat( + ([op1, op2]) => [defop3(dim, op1, op2), defopN3(dim, op1, op2)], + [["+", "*"], ["-", "*"]] + ), + ...map( + (op) => defop1(dim, `Math.${op}`), + ["abs", "sign", "floor", "ceil", "sin", "cos", "sqrt"] + ), + ...map( + (op) => defopfn2(dim, `Math.${op}`), + ["pow", "min", "max"] + ), + defmix(dim), + defmixN(dim), + defmixo(dim), + defmixNo(dim), + ]; + +/** + * Helper function to create vector/matrix index & property accessors. + * + * @param proto + * @param indices + * @param props + */ +export const declareIndices = (proto: any, props: string[]) => { + const get = (i: number) => function () { return this.buf[this.i + i * (this.s || 1)]; }; + const set = (i: number) => function (n: number) { this.buf[this.i + i * (this.s || 1)] = n; }; + props.forEach((id, i) => { + Object.defineProperty(proto, i, { + get: get(i), + set: set(i), + enumerable: true, + }); + Object.defineProperty(proto, id, { + get: get(i), + set: set(i), + enumerable: true, + }); + }); +}; diff --git a/packages/vectors/src/common.ts b/packages/vectors/src/common.ts index 19459dc3fb..1d6dd58ec9 100644 --- a/packages/vectors/src/common.ts +++ b/packages/vectors/src/common.ts @@ -1,3 +1,5 @@ +import { EPS } from "@thi.ng/math/api"; +import { eqDelta as _eqDelta } from "@thi.ng/math/eqdelta"; import { ReadonlyVec, ReadonlyVecOp1, @@ -5,7 +7,6 @@ import { VecOp2, VecOp2o } from "./api"; -import { EPS, eqDelta1 } from "./math"; export const x: ReadonlyVecOp1 = (v: ReadonlyVec, i = 0) => v[i]; export const y: ReadonlyVecOp1 = (v: ReadonlyVec, i = 0, s = 1) => v[i + s]; @@ -178,33 +179,9 @@ export const equiv = (a: ReadonlyVec, b: ReadonlyVec, n: number, ia = 0, ib = 0, */ export const eqDelta = (a: ReadonlyVec, b: ReadonlyVec, n: number, eps = EPS, ia = 0, ib = 0, sa = 1, sb = 1) => { for (; n > 0; n-- , ia += sa, ib += sb) { - if (!eqDelta1(a[ia], b[ib], eps)) { + if (!_eqDelta(a[ia], b[ib], eps)) { return false; } } return true; }; - -/** - * Helper function to create vector/matrix index & property accessors. - * - * @param proto - * @param indices - * @param props - */ -export const declareIndices = (proto: any, props: string[]) => { - const get = (i: number) => function () { return this.buf[this.i + i * (this.s || 1)]; }; - const set = (i: number) => function (n: number) { this.buf[this.i + i * (this.s || 1)] = n; }; - props.forEach((id, i) => { - Object.defineProperty(proto, i, { - get: get(i), - set: set(i), - enumerable: true, - }); - Object.defineProperty(proto, id, { - get: get(i), - set: set(i), - enumerable: true, - }); - }); -}; diff --git a/packages/vectors/src/gvec.ts b/packages/vectors/src/gvec.ts index 50b2058b18..c0a65e9cea 100644 --- a/packages/vectors/src/gvec.ts +++ b/packages/vectors/src/gvec.ts @@ -6,17 +6,24 @@ import { } from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; - -import { IVec, ReadonlyVec, Vec } from "./api"; -import { $iter, eqDelta, equiv } from "./common"; +import { sign as _sign } from "@thi.ng/math/abs"; +import { EPS } from "@thi.ng/math/api"; +import { clamp as _clamp } from "@thi.ng/math/interval"; +import { fract as _fract } from "@thi.ng/math/prec"; +import { smoothStep as _smoothStep, step as _step } from "@thi.ng/math/step"; import { - clamp1, - EPS, - fract1, - sign1, - smoothStep1, - step1 -} from "./math"; + IDotProduct, + IMagnitude, + IMath, + IMinMax, + IMix, + INormalize, + IVec, + ReadonlyVec, + Vec +} from "./api"; +import { $iter, eqDelta, equiv } from "./common"; + export const opg0 = (fn: () => number, a: Vec, num = a.length, i = 0, s = 1) => { i += num * s; @@ -122,6 +129,12 @@ export const madd = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, num = a.length, ia export const maddN = (a: Vec, b: ReadonlyVec, n: number, num = a.length, ia = 0, ib = 0, sa = 1, sb = 1) => opg2((x, y) => x + y * n, a, b, num, ia, ib, sa, sb); +export const msub = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, num = a.length, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => + opg3((x, y, z) => x - y * z, a, b, c, num, ia, ib, ic, sa, sb, sc); + +export const msubN = (a: Vec, b: ReadonlyVec, n: number, num = a.length, ia = 0, ib = 0, sa = 1, sb = 1) => + opg2((x, y) => x + y * n, a, b, num, ia, ib, sa, sb); + export const mix = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, num = a.length, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => opg3((x, y, z) => x + (y - x) * z, a, b, c, num, ia, ib, ic, sa, sb, sc); @@ -158,7 +171,7 @@ export const abs = (a: Vec, num = a.length, i = 0, s = 1) => opg1(Math.abs, a, num, i, s); export const sign = (a: Vec, num = a.length, eps = EPS, i = 0, s = 1) => - opg1((x) => sign1(x, eps), a, num, i, s); + opg1((x) => _sign(x, eps), a, num, i, s); export const floor = (a: Vec, num = a.length, i = 0, s = 1) => opg1(Math.floor, a, num, i, s); @@ -167,7 +180,7 @@ export const ceil = (a: Vec, num = a.length, i = 0, s = 1) => opg1(Math.ceil, a, num, i, s); export const fract = (a: Vec, num = a.length, i = 0, s = 1) => - opg1(fract1, a, num, i, s); + opg1(_fract, a, num, i, s); export const sin = (a: Vec, num = a.length, i = 0, s = 1) => opg1(Math.sin, a, num, i, s); @@ -191,22 +204,28 @@ export const max = (a: Vec, b: ReadonlyVec, num = a.length, ia = 0, ib = 0, sa = opg2(Math.max, a, b, num, ia, ib, sa, sb); export const clamp = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, num = a.length, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => - opg3(clamp1, a, b, c, num, ia, ib, ic, sa, sb, sc); + opg3(_clamp, a, b, c, num, ia, ib, ic, sa, sb, sc); export const step = (a: Vec, b: ReadonlyVec, num = a.length, ia = 0, ib = 0, sa = 1, sb = 1) => - opg2((x, e) => step1(e, x), a, b, num, ia, ib, sa, sb); + opg2((x, e) => _step(e, x), a, b, num, ia, ib, sa, sb); export const smoothStep = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, num = a.length, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => - opg3((x, e1, e2) => smoothStep1(e1, e2, x), a, b, c, num, ia, ib, ic, sa, sb, sc); + opg3((x, e1, e2) => _smoothStep(e1, e2, x), a, b, c, num, ia, ib, ic, sa, sb, sc); export const gvec = (...coords: number[]) => new GVec(coords, coords.length); export class GVec implements ICopy, + IDotProduct, IEqualsDelta, IEquiv, ILength, + IMagnitude, + IMath, + IMinMax, + IMix, + INormalize, Iterable, IVec { @@ -219,7 +238,7 @@ export class GVec implements return res; } - static intoBuffer(buf: Vec, src: Iterable>, start: number, cstride: number, estride: number) { + static intoBuffer(buf: Vec, src: Iterable>, start = 0, cstride: number, estride: number) { for (let v of src) { set(buf, v.buf, v.n, start, v.i, cstride, v.s); start += estride; @@ -358,6 +377,19 @@ export class GVec implements return this; } + msub(b: Readonly, c: Readonly) { + this.ensureSize(b); + this.ensureSize(c); + msub(this.buf, b.buf, c.buf, this.n, this.i, b.i, c.i, this.s, b.s, c.s); + return this; + } + + msubN(v: Readonly, n: number) { + this.ensureSize(v); + msubN(this.buf, v.buf, n, this.n, this.i, v.i, this.s, v.s); + return this; + } + mix(b: Readonly, c: Readonly) { this.ensureSize(b); this.ensureSize(c); @@ -365,12 +397,68 @@ export class GVec implements return this; } - mixN(v: Readonly, n: number) { + mixN(v: Readonly, n = 0.5) { this.ensureSize(v); mixN(this.buf, v.buf, n, this.n, this.i, v.i, this.s, v.s); return this; } + mixNew(b: Readonly, c: Readonly, out?: GVec) { + return (out || this.copy()).mix(b, c); + } + + mixNewN(v: Readonly, n = 0.5, out?: GVec) { + return (out || this.copy()).mixN(v, n); + } + + addNew(v: Readonly, out?: GVec) { + return (out || this.copy()).add(v); + } + + subNew(v: Readonly, out?: GVec) { + return (out || this.copy()).sub(v); + } + + mulNew(v: Readonly, out?: GVec) { + return (out || this.copy()).mul(v); + } + + divNew(v: Readonly, out?: GVec) { + return (out || this.copy()).div(v); + } + + addNewN(n: number, out?: GVec) { + return (out || this.copy()).addN(n); + } + + subNewN(n: number, out?: GVec) { + return (out || this.copy()).subN(n); + } + + mulNewN(n: number, out?: GVec) { + return (out || this.copy()).mulN(n); + } + + divNewN(n: number, out?: GVec) { + return (out || this.copy()).divN(n); + } + + maddNew(v: Readonly, w: Readonly, out?: GVec) { + return (out || this.copy()).madd(v, w); + } + + maddNewN(v: Readonly, n: number, out?: GVec) { + return (out || this.copy()).maddN(v, n); + } + + msubNew(v: Readonly, w: Readonly, out?: GVec) { + return (out || this.copy()).msub(v, w); + } + + msubNewN(v: Readonly, n: number, out?: GVec) { + return (out || this.copy()).msubN(v, n); + } + magSq() { return magSq(this.buf, this.n, this.i, this.s); } diff --git a/packages/vectors/src/index.ts b/packages/vectors/src/index.ts index 5ffd20465f..921f2cba05 100644 --- a/packages/vectors/src/index.ts +++ b/packages/vectors/src/index.ts @@ -3,8 +3,9 @@ export * from "./common"; export * from "./mat23"; export * from "./mat33"; export * from "./mat44"; -export * from "./math"; export * from "./gvec"; export * from "./vec2"; export * from "./vec3"; export * from "./vec4"; + +// export * from "./codegen"; diff --git a/packages/vectors/src/mat23.ts b/packages/vectors/src/mat23.ts index 81083b62ea..f7e3683be9 100644 --- a/packages/vectors/src/mat23.ts +++ b/packages/vectors/src/mat23.ts @@ -1,14 +1,14 @@ import { ICopy, IEqualsDelta } from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; - +import { EPS } from "@thi.ng/math/api"; import { Mat, ReadonlyMat, ReadonlyVec, Vec } from "./api"; -import { $iter, declareIndices, eqDelta } from "./common"; -import { EPS } from "./math"; +import { declareIndices } from "./codegen"; +import { $iter, eqDelta } from "./common"; import { cross2, dot2, @@ -239,7 +239,7 @@ export class Mat23 implements [id: number]: number; constructor(buf?: Mat, i = 0) { - this.buf = buf || (new Array(6).fill(0)); + this.buf = buf || [0, 0, 0, 0, 0, 0]; this.i = i; } diff --git a/packages/vectors/src/mat33.ts b/packages/vectors/src/mat33.ts index 08bef70f75..b4235482ef 100644 --- a/packages/vectors/src/mat33.ts +++ b/packages/vectors/src/mat33.ts @@ -1,14 +1,14 @@ import { ICopy, IEqualsDelta } from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; - +import { EPS } from "@thi.ng/math/api"; import { Mat, ReadonlyMat, ReadonlyVec, Vec } from "./api"; -import { $iter, declareIndices, eqDelta } from "./common"; -import { EPS } from "./math"; +import { declareIndices } from "./codegen"; +import { $iter, eqDelta } from "./common"; import { dot3, set3, @@ -276,7 +276,7 @@ export class Mat33 implements [id: number]: number; constructor(buf?: Mat, i = 0) { - this.buf = buf || (new Array(9).fill(0)); + this.buf = buf || [0, 0, 0, 0, 0, 0, 0, 0, 0]; this.i = i; } diff --git a/packages/vectors/src/mat44.ts b/packages/vectors/src/mat44.ts index 8e2889f5be..fdb447d5a1 100644 --- a/packages/vectors/src/mat44.ts +++ b/packages/vectors/src/mat44.ts @@ -1,15 +1,14 @@ import { ICopy, IEqualsDelta } from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; - import { Mat, ReadonlyMat, ReadonlyVec, Vec } from "./api"; -import { $iter, declareIndices, eqDelta } from "./common"; +import { declareIndices } from "./codegen"; +import { $iter, eqDelta } from "./common"; import { Mat33 } from "./mat33"; -import { EPS, rad } from "./math"; import { cross3, dot3, @@ -21,6 +20,7 @@ import { Vec3 } from "./vec3"; import { dot4, setS4, Vec4 } from "./vec4"; +import { EPS, DEG2RAD } from "@thi.ng/math/api"; export const get44 = (a: Mat, i = 0) => a.slice(i, i + 16); @@ -159,7 +159,7 @@ export const frustum = (m: Mat, left: number, right: number, bottom: number, top }; export const frustumBounds = (fovy: number, aspect: number, near: number, far: number) => { - const top = near * Math.tan(rad(fovy) / 2); + const top = near * Math.tan(fovy * DEG2RAD / 2); const right = top * aspect; return { left: -right, diff --git a/packages/vectors/src/math.ts b/packages/vectors/src/math.ts deleted file mode 100644 index b8ef6179aa..0000000000 --- a/packages/vectors/src/math.ts +++ /dev/null @@ -1,199 +0,0 @@ -export const PI = Math.PI; -export const TAU = PI * 2; -export const HALF_PI = PI / 2; -export const QUARTER_PI = PI / 2; - -export const DEG2RAD = PI / 180; -export const RAD2DEG = 180 / PI; - -export let EPS = 1e-6; - -export const absDiff1 = (x: number, y: number) => - Math.abs(x - y); - -export const atan2Abs1 = (y: number, x: number) => { - const theta = Math.atan2(y, x); - return theta < 0 ? TAU + theta : theta; -}; - -/** - * Converts angle to degrees. - * - * @param x angle in radians - */ -export const deg = (x: number) => x * RAD2DEG; - -/** - * Converts angle to radians. - * - * @param x angle in degrees - */ -export const rad = (x: number) => x * DEG2RAD; - -/** - * Checks if `|a - b| <= ε`. - * - * @param a left value - * @param b right value - * @param eps epsilon / tolerance - */ -export const eqDelta1 = (a: number, b: number, eps = EPS) => { - const d = a - b; - return (d < 0 ? -d : d) <= eps; -}; - -/** - * Returns `a - b * n` - * - * @param a - * @param b - */ -export const fmod1 = (a: number, b: number) => - a - b * Math.floor(a / b); - -/** - * Step/threshold function. - * - * @param edge threshold - * @param x test value - * @returns 0, if `x < e`, else 1 - */ -export const step1 = (edge: number, x: number) => - x < edge ? 0 : 1; - -/** - * GLSL-style smoothStep threshold function. - * - * @param edge lower threshold - * @param edge2 upper threshold - * @param x test value - * @returns 0, if `x < edge1`, 1 if `x > edge2`, else sigmoid interpolation - */ -export const smoothStep1 = (edge: number, edge2: number, x: number) => { - const t = clamp1((x - edge) / (edge2 - edge), 0, 1); - return (3 - 2 * t) * t * t; -}; - -export const expStep1 = (x: number, k: number, n: number) => - Math.exp(-k * Math.pow(x, n)); - -export const gain1 = (x: number, k: number) => - x < 0.5 ? - 0.5 * Math.pow(2 * x, k) : - 1 - 0.5 * Math.pow(2 - 2 * x, k); - -export const min2id = (a: number, b: number) => - a <= b ? 0 : 1; - -export const min3id = (a: number, b: number, c: number) => - (a <= b) ? - (a <= c ? 0 : 2) : - (b <= c ? 1 : 2); - -export const min4id = (a: number, b: number, c: number, d: number) => - a <= b ? - (a <= c ? - (a <= d ? 0 : 3) : - (c <= d ? 2 : 3)) : - (b <= c ? - (b <= d ? 1 : 3) : - (c <= d ? 2 : 3)); - -export const max2id = (a: number, b: number) => - a >= b ? 0 : 1; - -export const max3id = (a: number, b: number, c: number) => - (a >= b) ? - (a >= c ? 0 : 2) : - (b >= c ? 1 : 2); - -export const max4id = (a: number, b: number, c: number, d: number) => - a >= b ? - (a >= c ? - (a >= d ? 0 : 3) : - (c >= d ? 2 : 3)) : - (b >= c ? - (b >= d ? 1 : 3) : - (c >= d ? 2 : 3)); - -export const smin1 = (a: number, b: number, k: number) => - -Math.log(Math.exp(-k * a) + Math.exp(-k * b)) / k; - -export const smax1 = (a: number, b: number, k: number) => - Math.log(Math.exp(a) + Math.exp(b)) / k; - -/** -* Clamps value `x` to given closed interval. -* -* @param x value to clamp -* @param min lower bound -* @param max upper bound -*/ -export const clamp1 = (x: number, min: number, max: number) => - x < min ? min : x > max ? max : x; - -export const mix1 = (a: number, b: number, t: number) => - a + (b - a) * t; - -/** - * ``` - * c d - * +----+ - * | | - * +----+ - * a b - * ``` - * - * @param a BL value - * @param b BR value - * @param c TL value - * @param d TR value - * @param u 1st interpolation factor - * @param v 2nd interpolation factor - */ -export const mixBilinear1 = (a: number, b: number, c: number, d: number, u: number, v: number) => - mix1(mix1(a, b, u), mix1(c, d, u), v); - -export const norm1 = (x: number, a: number, b: number) => - (x - a) / (b - a); - -export const fit1 = (x: number, a: number, b: number, c: number, d: number) => - c + (d - c) * (x - a) / (b - a); - -export const fitClamped1 = (x: number, a: number, b: number, c: number, d: number) => - c + (d - c) * clamp1((x - a) / (b - a), 0, 1); - -export const sign1 = (x: number, eps = EPS) => - x > eps ? 1 : x < -eps ? -1 : 0; - -export const fract1 = (x: number) => - x - Math.floor(x); - -export const trunc1 = (x: number) => - x < 0 ? Math.ceil(x) : Math.floor(x); - -export const roundTo1 = (x: number, prec = 1) => - Math.round(x / prec) * prec; - -/** - * Returns true iff `x` is in closed interval `[min .. max]` - * - * @param x - * @param min - * @param max - */ -export const inRange1 = (x: number, min: number, max: number) => - x >= min && x <= max; - -/** - * Returns true iff `x` is in open interval `(min .. max)` - * - * @param x - * @param min - * @param max - */ -export const inOpenRange1 = (x: number, min: number, max: number) => - x > min && x < max; - -export const hash1 = (x: number) => - fract1(Math.sin(x) * 758.5453); diff --git a/packages/vectors/src/vec2.ts b/packages/vectors/src/vec2.ts index 98fdad7ef8..d13aa63d09 100644 --- a/packages/vectors/src/vec2.ts +++ b/packages/vectors/src/vec2.ts @@ -1,33 +1,29 @@ -import { - ICopy, - IEqualsDelta, - IEquiv, - ILength -} from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { atan2Abs } from "@thi.ng/math/angle"; +import { EPS, HALF_PI, PI } from "@thi.ng/math/api"; +import { eqDelta } from "@thi.ng/math/eqdelta"; +import { max2id, min2id } from "@thi.ng/math/interval"; +import { mixBilinear } from "@thi.ng/math/mix"; +import { fract } from "@thi.ng/math/prec"; +import { smoothStep, step } from "@thi.ng/math/step"; import { + IAngleBetween, + ICrossProduct, + IPolar, IVec, + IVector, MAX4, MIN4, ONE4, ReadonlyVec, Vec, + Vec2Coord, + X4, + Y4, ZERO4 } from "./api"; -import { $iter, declareIndices } from "./common"; -import { - atan2Abs1, - EPS, - eqDelta1, - fract1, - HALF_PI, - max2id, - min2id, - mixBilinear1, - PI, - smoothStep1, - step1 -} from "./math"; +import { declareIndices, defcommon } from "./codegen"; +import { $iter } from "./common"; export const op2 = (fn: (x: number) => number, a: Vec, ia = 0, sa = 1) => (a[ia] = fn(a[ia]), a[ia + sa] = fn(a[ia + sa]), a); @@ -44,21 +40,9 @@ export const op21 = (fn: (a: number, n: number) => number, a: Vec, n: number, ia a ); -export const op22 = (fn: (a: number, b: number) => number, a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] = fn(a[ia], b[ib]), - a[ia + sa] = fn(a[ia + sa], b[ib + sb]), - a -); - export const get2 = (a: ReadonlyVec, ia = 0, sa = 1) => set2(new ((a.constructor))(2), a, 0, ia, 1, sa); -export const set2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] = b[ib], a[ia + sa] = b[ib + sb], a); - -export const setN2 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] = n, a[ia + sa] = n, a); - export const setS2 = (a: Vec, x: number, y: number, ia = 0, sa = 1) => (a[ia] = x, a[ia + sa] = y, a); @@ -88,156 +72,101 @@ export const equiv2 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, s a[ia + sa] === b[ib + sb]; export const eqDelta2 = (a: ReadonlyVec, b: ReadonlyVec, eps = EPS, ia = 0, ib = 0, sa = 1, sb = 1) => - eqDelta1(a[ia], b[ib], eps) && - eqDelta1(a[ia + sa], b[ib + sb], eps); - -export const add2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] += b[ib], a[ia + sa] += b[ib + sb], a); - -export const sub2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] -= b[ib], a[ia + sa] -= b[ib + sb], a); - -export const mul2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] *= b[ib], a[ia + sa] *= b[ib + sb], a); + eqDelta(a[ia], b[ib], eps) && + eqDelta(a[ia + sa], b[ib + sb], eps); -export const div2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] /= b[ib], a[ia + sa] /= b[ib + sb], a); - -export const add2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => - (out[io] = a[ia] + b[ib], out[io + so] = a[ia + sa] + b[ib + sb], out); - -export const sub2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => - (out[io] = a[ia] - b[ib], out[io + so] = a[ia + sa] - b[ib + sb], out); - -export const mul2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => - (out[io] = a[ia] * b[ib], out[io + so] = a[ia + sa] * b[ib + sb], out); - -export const div2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => - (out[io] = a[ia] / b[ib], out[io + so] = a[ia + sa] / b[ib + sb], out); - -export const addN2 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] += n, a[ia + sa] += n, a); - -export const subN2 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] -= n, a[ia + sa] -= n, a); - -export const mulN2 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] *= n, a[ia + sa] *= n, a); - -export const divN2 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] /= n, a[ia + sa] /= n, a); +export const eqDelta2buf = (a: ReadonlyVec, b: ReadonlyVec, num: number, eps = EPS, ia = 0, ib = 0, sca = 1, scb = 1, sea = 2, seb = 2) => { + while (--num >= 0) { + if (!eqDelta2(a, b, eps, ia + num * sea, ib + num * seb, sca, scb)) { + return false; + } + } + return true; +}; -export const addN2o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => - (out[io] = a[ia] + n, out[io + so] = a[ia + sa] + n, out); +export const eqDelta2array = (a: ReadonlyVec[], b: ReadonlyVec[], eps = EPS) => { + const na = a.length; + if (b.length !== na) { + return false; + } + for (let i = 0; i < na; i++) { + if (!eqDelta2(a[i], b[i], eps)) { + return false; + } + } + return true; +}; -export const subN2o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => - (out[io] = a[ia] - n, out[io + so] = a[ia + sa] - n, out); +export const compare2 = ( + a: ReadonlyVec, + b: ReadonlyVec, + o1: Vec2Coord, o2: Vec2Coord, + ia = 0, ib = 0, sa = 1, sb = 1): number => { + + const ax = a[ia + o1 * sa]; + const ay = a[ia + o2 * sa]; + const bx = b[ib + o1 * sb]; + const by = b[ib + o2 * sb]; + return ax === bx ? + ay === by ? + 0 : + ay < by ? -2 : 2 : + ax < bx ? -1 : 1; +}; -export const mulN2o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => - (out[io] = a[ia] * n, out[io + so] = a[ia + sa] * n, out); +export const collate2 = (buf: Vec, src: Iterable, start = 0, cstride = 1, estride = 2) => { + for (let v of src) { + set2(buf, v, start, 0, cstride, 1); + start += estride; + } + return buf; +}; -export const divN2o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => - (out[io] = a[ia] / n, out[io + so] = a[ia + sa] / n, out); +export const [ + set2, setN2, + add2, sub2, mul2, div2, + add2o, sub2o, mul2o, div2o, + addN2, subN2, mulN2, divN2, + addN2o, subN2o, mulN2o, divN2o, + madd2, maddN2, msub2, msubN2, + abs2, sign2, floor2, ceil2, sin2, cos2, sqrt2, + pow2, min2, max2, + mix2, mixN2, mix2o, mixN2o +] = defcommon(2); export const neg2 = (a: Vec, ia = 0, sa = 1) => mulN2(a, -1, ia, sa); -export const abs2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.abs, a, ia, sa); - -export const sign2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.sign, a, ia, sa); - -export const floor2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.floor, a, ia, sa); - -export const ceil2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.ceil, a, ia, sa); - export const fract2 = (a: Vec, ia = 0, sa = 1) => - op2(fract1, a, ia, sa); - -export const sin2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.sin, a, ia, sa); - -export const cos2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.cos, a, ia, sa); - -export const sqrt2 = (a: Vec, ia = 0, sa = 1) => - op2(Math.sqrt, a, ia, sa); - -export const pow2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op22(Math.pow, a, b, ia, ib, sa, sb); + op2(fract, a, ia, sa); export const powN2 = (a: Vec, n: number, ia = 0, sa = 1) => op21(Math.pow, a, n, ia, sa); -export const madd2 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => - (a[ia] += b[ib] * c[ic], a[ia + sa] += b[ib + sb] * c[ic + sc], a); - -export const maddN2 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] += b[ib] * n, a[ia + sa] += b[ib + sb] * n, a); - -export const msub2 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => - (a[ia] -= b[ib] * c[ic], a[ia + sa] -= b[ib + sb] * c[ic + sc], a); - -export const msubN2 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => - (a[ia] -= b[ib] * n, a[ia + sa] -= b[ib + sb] * n, a); - export const dot2 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => a[ia] * b[ib] + a[ia + sa] * b[ib + sb]; export const cross2 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => a[ia] * b[ib + sb] - a[ia + sa] * b[ib]; -export const mix2 = (a: Vec, b: ReadonlyVec, t: ReadonlyVec, ia = 0, ib = 0, it = 0, sa = 1, sb = 1, st = 1) => ( - a[ia] += (b[ib] - a[ia]) * t[it], - a[ia + sa] += (b[ib + sb] - a[ia + sa]) * t[it + st], - a -); - -export const mixN2 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += (b[ib] - a[ia]) * n, - a[ia + sa] += (b[ib + sb] - a[ia + sa]) * n, - a -); - -export const mix2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, t: ReadonlyVec, io = 0, ia = 0, ib = 0, it = 0, so = 1, sa = 1, sb = 1, st = 1) => ( - out[io] = a[ia] + (b[ib] - a[ia]) * t[it], - out[io + so] = a[ia + sa] + (b[ib + sb] - a[ia + sa]) * t[it + st], - out -); - -export const mixN2o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, n: number, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] + (b[ib] - a[ia]) * n, - out[io + so] = a[ia + sa] + (b[ib + sb] - a[ia + sa]) * n, - out -); - export const mixBilinear2 = ( a: Vec, b: ReadonlyVec, c: ReadonlyVec, d: ReadonlyVec, u: number, v: number, ia = 0, ib = 0, ic = 0, id = 0, sa = 1, sb = 1, sc = 1, sd = 1) => ( - a[ia] = mixBilinear1(a[ia], b[ib], c[ic], d[id], u, v), - a[ia + sa] = mixBilinear1(a[ia + sa], b[ib + sb], c[ic + sc], d[id + sd], u, v), + a[ia] = mixBilinear(a[ia], b[ib], c[ic], d[id], u, v), + a[ia + sa] = mixBilinear(a[ia + sa], b[ib + sb], c[ic + sc], d[id + sd], u, v), a ); -export const min2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op22(Math.min, a, b, ia, ib, sa, sb); - -export const max2 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op22(Math.max, a, b, ia, ib, sa, sb); - export const clamp2 = (a: Vec, min: ReadonlyVec, max: ReadonlyVec, ia = 0, imin = 0, imax = 0, sa = 1, smin = 1, smax = 1) => max2(min2(a, max, ia, imax, sa, smax), min, ia, imin, sa, smin); export const step2 = (a: Vec, e: ReadonlyVec, ia = 0, ie = 0, sa = 1, stridee = 1) => - (a[ia] = step1(e[ie], a[ia]), a[ia + sa] = step1(e[ie + stridee], a[ia + sa]), a); + (a[ia] = step(e[ie], a[ia]), a[ia + sa] = step(e[ie + stridee], a[ia + sa]), a); export const smoothStep2 = (a: Vec, e1: ReadonlyVec, e2: ReadonlyVec, ia = 0, ie1 = 0, ie2 = 0, sa = 1, se1 = 1, se2 = 1) => ( - a[ia] = smoothStep1(e1[ie1], e2[ie2], a[ia]), - a[ia + sa] = smoothStep1(e1[ie1 + se1], e2[ie2 + se2], a[ia + sa]), + a[ia] = smoothStep(e1[ie1], e2[ie2], a[ia]), + a[ia + sa] = smoothStep(e1[ie1 + se1], e2[ie2 + se2], a[ia + sa]), a ); @@ -325,11 +254,15 @@ export const rotateAroundPoint2 = (a: Vec, b: Vec, theta: number, ia = 0, ib = 0 }; export const heading2 = (a: ReadonlyVec, ia = 0, sa = 1) => - atan2Abs1(a[ia + sa], a[ia]); + atan2Abs(a[ia + sa], a[ia]); + +export const angleRatio2 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => + dot2(a, b, ia, ib, sa, sb) / (mag2(a, ia, sa) * mag2(b, ib, sb)); export const angleBetween2 = (a: ReadonlyVec, b: ReadonlyVec, normalize = false, ia = 0, ib = 0, sa = 1, sb = 1): number => normalize ? - angleBetween2(normalize2(get2(a, ia, sa)), normalize2(get2(b, ib, sb))) : + (a[ia] * b[ib + sb] < a[ia + sa] * b[ib] ? -1 : 1) * + Math.acos(angleRatio2(a, b, ia, ib, sa, sb)) : Math.acos(dot2(a, b, ia, ib, sa, sb)); export const bisect2 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => { @@ -361,18 +294,19 @@ export const majorAxis2 = (a: Vec, ia = 0, sa = 1) => export const vec2 = (x = 0, y = 0) => new Vec2([x, y]); +export const asVec2 = (x: ReadonlyVec) => + x instanceof Vec2 ? x : new Vec2([x[0] || 0, x[1] || 0]); + export class Vec2 implements - ICopy, - IEqualsDelta, - IEquiv, - ILength, - Iterable, - IVec { + IVector, + IAngleBetween, + ICrossProduct, + IPolar { /** * Returns array of memory mapped `Vec2` instances using given * backing array and stride settings: The `cstride` is the step size - * between individual XYZ vector components. `estride` is the step + * between individual XY vector components. `estride` is the step * size between successive vectors. This arrangement allows for * different storage approaches, incl. SOA, AOS, striped / * interleaved etc. @@ -383,7 +317,7 @@ export class Vec2 implements * @param cstride component stride * @param estride element stride */ - static mapBuffer(buf: Vec, n: number, start = 0, cstride = 1, estride = 2) { + static mapBuffer(buf: Vec, n: number = buf.length >> 1, start = 0, cstride = 1, estride = 2) { const res: Vec2[] = []; while (--n >= 0) { res.push(new Vec2(buf, start, cstride)); @@ -392,6 +326,20 @@ export class Vec2 implements return res; } + /** + * Merges given `src` iterable of `Vec2`s into single array `buf`. + * Vectors will be arranged according to given component and element + * strides, starting at `start` index. It's the user's + * responsibility to ensure the target buffer has sufficient + * capacity to hold the input vectors. See `Vec2.mapBuffer` for the + * reverse operation. Returns buffer. + * + * @param buf + * @param src + * @param start + * @param cstride + * @param estride + */ static intoBuffer(buf: Vec, src: Iterable>, start = 0, cstride = 1, estride = 2) { for (let v of src) { set2(buf, v.buf, start, v.i, cstride, v.s); @@ -400,6 +348,10 @@ export class Vec2 implements return buf; } + static swizzle(v: IVec, x: number, y: number) { + return new Vec2([]).swizzle(v, x, y); + } + static mixBilinear(a: Readonly, b: Readonly, c: Readonly, d: Readonly, u: number, v: number) { return new Vec2( mixBilinear2( @@ -418,70 +370,16 @@ export class Vec2 implements return new Vec2(randMinMax2([], min, max)); } - static add(a: Readonly, b: Readonly, out?: Vec2) { - !out && (out = new Vec2([])); - add2o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static sub(a: Readonly, b: Readonly, out?: Vec2) { - !out && (out = new Vec2([])); - sub2o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static mul(a: Readonly, b: Readonly, out?: Vec2) { - !out && (out = new Vec2([])); - mul2o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static div(a: Readonly, b: Readonly, out?: Vec2) { - !out && (out = new Vec2([])); - div2o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static addN(a: Readonly, n: number, out?: Vec2) { - !out && (out = new Vec2([])); - addN2o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static subN(a: Readonly, n: number, out?: Vec2) { - !out && (out = new Vec2([])); - subN2o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static mulN(a: Readonly, n: number, out?: Vec2) { - !out && (out = new Vec2([])); - mulN2o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static divN(a: Readonly, n: number, out?: Vec2) { - !out && (out = new Vec2([])); - divN2o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static mix(a: Readonly, b: Readonly, t: Readonly, out?: Vec2) { - !out && (out = new Vec2([])); - mix2o(out.buf, a.buf, b.buf, t.buf, out.i, a.i, b.i, t.i, out.s, a.s, b.s, t.s); - return out; - } - - static mixN(a: Readonly, b: Readonly, t: number, out?: Vec2) { - !out && (out = new Vec2([])); - mixN2o(out.buf, a.buf, b.buf, t, out.i, a.i, b.i, out.s, a.s, b.s); - return out; + static comparator(o1: Vec2Coord, o2: Vec2Coord) { + return (a: Readonly, b: Readonly) => a.compare(b, o1, o2); } static readonly ZERO = Object.freeze(new Vec2(ZERO4)); static readonly ONE = Object.freeze(new Vec2(ONE4)); static readonly MIN = Object.freeze(new Vec2(MIN4)); static readonly MAX = Object.freeze(new Vec2(MAX4)); + static readonly X_AXIS = Object.freeze(new Vec2(X4)); + static readonly Y_AXIS = Object.freeze(new Vec2(Y4)); buf: Vec; i: number; @@ -490,8 +388,8 @@ export class Vec2 implements y: number; [id: number]: number; - constructor(buf: Vec, index = 0, stride = 1) { - this.buf = buf; + constructor(buf?: Vec, index = 0, stride = 1) { + this.buf = buf || [0, 0]; this.i = index; this.s = stride; } @@ -512,6 +410,10 @@ export class Vec2 implements return new Vec2(get2(this.buf, this.i, this.s)); } + empty() { + return new Vec2(); + } + equiv(v: any) { return v instanceof Vec2 ? equiv2(this.buf, v.buf, this.i, v.i, this.s, v.s) : @@ -524,6 +426,10 @@ export class Vec2 implements return eqDelta2(this.buf, v.buf, eps, this.i, v.i, this.s, v.s); } + compare(v: Readonly, o1: Vec2Coord = 0, o2: Vec2Coord = 1) { + return compare2(this.buf, v.buf, o1, o2, this.i, v.i, this.s, v.s); + } + set(v: Readonly) { set2(this.buf, v.buf, this.i, v.i, this.s, v.s); return this; @@ -594,6 +500,90 @@ export class Vec2 implements return this; } + addNew(b: Readonly, out?: Vec2) { + !out && (out = new Vec2([])); + add2o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + subNew(b: Readonly, out?: Vec2) { + !out && (out = new Vec2([])); + sub2o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + mulNew(b: Readonly, out?: Vec2) { + !out && (out = new Vec2([])); + mul2o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + divNew(b: Readonly, out?: Vec2) { + !out && (out = new Vec2([])); + div2o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + addNewN(n: number, out?: Vec2) { + !out && (out = new Vec2([])); + addN2o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + subNewN(n: number, out?: Vec2) { + !out && (out = new Vec2([])); + subN2o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + mulNewN(n: number, out?: Vec2) { + !out && (out = new Vec2([])); + mulN2o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + divNewN(n: number, out?: Vec2) { + !out && (out = new Vec2([])); + divN2o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + maddNew(b: Readonly, c: Readonly, out?: Vec2) { + out = out ? out.set(this) : this.copy(); + madd2(out.buf, b.buf, c.buf, out.i, b.i, c.i, out.s, b.s, c.s); + return out; + } + + maddNewN(b: Readonly, n: number, out?: Vec2) { + out = out ? out.set(this) : this.copy(); + maddN2(out.buf, b.buf, n, out.i, b.i, out.s, b.s); + return out; + } + + msubNew(b: Readonly, c: Readonly, out?: Vec2) { + out = out ? out.set(this) : this.copy(); + msub2(out.buf, b.buf, c.buf, out.i, b.i, c.i, out.s, b.s, c.s); + return out; + } + + msubNewN(b: Readonly, n: number, out?: Vec2) { + out = out ? out.set(this) : this.copy(); + msubN2(out.buf, b.buf, n, out.i, b.i, out.s, b.s); + return out; + } + + mixNew(b: Readonly, t: Readonly, out?: Vec2) { + !out && (out = new Vec2([])); + mix2o(out.buf, this.buf, b.buf, t.buf, out.i, this.i, b.i, t.i, out.s, this.s, b.s, t.s); + return out; + } + + mixNewN(b: Readonly, n = 0.5, out?: Vec2) { + !out && (out = new Vec2([])); + mixN2o(out.buf, this.buf, b.buf, n, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + neg() { mulN2(this.buf, -1, this.i, this.s); return this; @@ -659,12 +649,22 @@ export class Vec2 implements return this; } + msub(b: Readonly, c: Readonly) { + msub2(this.buf, b.buf, c.buf, this.i, b.i, c.i, this.s, b.s, c.s); + return this; + } + + msubN(b: Readonly, n: number) { + msubN2(this.buf, b.buf, n, this.i, b.i, this.s, b.s); + return this; + } + mix(b: Readonly, c: Readonly) { mix2(this.buf, b.buf, c.buf, this.i, b.i, c.i, this.s, b.s, c.s); return this; } - mixN(b: Readonly, n: number) { + mixN(b: Readonly, n = 0.5) { mixN2(this.buf, b.buf, n, this.i, b.i, this.s, b.s); return this; } diff --git a/packages/vectors/src/vec3.ts b/packages/vectors/src/vec3.ts index 91ad0dc891..1ce2dfd6c4 100644 --- a/packages/vectors/src/vec3.ts +++ b/packages/vectors/src/vec3.ts @@ -1,32 +1,30 @@ -import { - ICopy, - IEqualsDelta, - IEquiv, - ILength -} from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { atan2Abs } from "@thi.ng/math/angle"; +import { EPS } from "@thi.ng/math/api"; +import { eqDelta } from "@thi.ng/math/eqdelta"; +import { max3id, min3id } from "@thi.ng/math/interval"; +import { mixBilinear } from "@thi.ng/math/mix"; +import { fract } from "@thi.ng/math/prec"; +import { smoothStep, step } from "@thi.ng/math/step"; import { + IAngleBetween, + ICrossProduct, + IPolar, IVec, + IVector, MAX4, MIN4, ONE4, ReadonlyVec, Vec, + Vec3Coord, + X4, + Y4, + Z4, ZERO4 } from "./api"; -import { $iter, declareIndices } from "./common"; -import { - atan2Abs1, - EPS, - eqDelta1, - fract1, - max3id, - min3id, - mixBilinear1, - sign1, - smoothStep1, - step1 -} from "./math"; +import { declareIndices, defcommon } from "./codegen"; +import { $iter } from "./common"; import { heading2, rotate2, @@ -55,30 +53,9 @@ export const op31 = (fn: (a: number, n: number) => number, a: Vec, n: number, ia a ); -export const op32 = (fn: (a: number, b: number) => number, a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] = fn(a[ia], b[ib]), - a[ia + sa] = fn(a[ia + sa], b[ib + sb]), - a[ia + 2 * sa] = fn(a[ia + 2 * sa], b[ib + 2 * sb]), - a -); - export const get3 = (a: ReadonlyVec, ia = 0, sa = 1) => set3(new ((a.constructor))(3), a, 0, ia, 1, sa); -export const set3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] = b[ib], - a[ia + sa] = b[ib + sb], - a[ia + 2 * sa] = b[ib + 2 * sb], - a -); - -export const setN3 = (a: Vec, n: number, ia = 0, sa = 1) => ( - a[ia] = n, - a[ia + sa] = n, - a[ia + 2 * sa] = n, - a -); - export const setS3 = (a: Vec, x: number, y: number, z: number, ia = 0, sa = 1) => (a[ia] = x, a[ia + sa] = y, a[ia + 2 * sa] = z, a); @@ -111,167 +88,82 @@ export const equiv3 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, s a[ia + 2 * sa] === b[ib + 2 * sb]; export const eqDelta3 = (a: ReadonlyVec, b: ReadonlyVec, eps = EPS, ia = 0, ib = 0, sa = 1, sb = 1) => - eqDelta1(a[ia], b[ib], eps) && - eqDelta1(a[ia + sa], b[ib + sb], eps) && - eqDelta1(a[ia + 2 * sa], b[ib + 2 * sb], eps); - -export const add3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += b[ib], - a[ia + sa] += b[ib + sb], - a[ia + 2 * sa] += b[ib + 2 * sb], - a -); - -export const mul3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] *= b[ib], - a[ia + sa] *= b[ib + sb], - a[ia + 2 * sa] *= b[ib + 2 * sb], - a -); - -export const sub3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] -= b[ib], - a[ia + sa] -= b[ib + sb], - a[ia + 2 * sa] -= b[ib + 2 * sb], - a -); - -export const div3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] /= b[ib], - a[ia + sa] /= b[ib + sb], - a[ia + 2 * sa] /= b[ib + 2 * sb], - a -); - -export const add3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] + b[ib], - out[io + so] = a[ia + sa] + b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] + b[ib + 2 * sb], - out -); - -export const sub3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] - b[ib], - out[io + so] = a[ia + sa] - b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] - b[ib + 2 * sb], - out -); - -export const mul3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] * b[ib], - out[io + so] = a[ia + sa] * b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] * b[ib + 2 * sb], - out -); - -export const div3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] / b[ib], - out[io + so] = a[ia + sa] / b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] / b[ib + 2 * sb], - out -); - -export const addN3 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] += n, a[ia + sa] += n, a[ia + 2 * sa] += n, a); - -export const subN3 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] -= n, a[ia + sa] -= n, a[ia + 2 * sa] -= n, a); - -export const mulN3 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] *= n, a[ia + sa] *= n, a[ia + 2 * sa] *= n, a); - -export const divN3 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] /= n, a[ia + sa] /= n, a[ia + 2 * sa] /= n, a); + eqDelta(a[ia], b[ib], eps) && + eqDelta(a[ia + sa], b[ib + sb], eps) && + eqDelta(a[ia + 2 * sa], b[ib + 2 * sb], eps); + +export const eqDelta3buf = (a: ReadonlyVec, b: ReadonlyVec, num: number, eps = EPS, ia = 0, ib = 0, sca = 1, scb = 1, sea = 3, seb = 3) => { + while (--num >= 0) { + if (!eqDelta3(a, b, eps, ia + num * sea, ib + num * seb, sca, scb)) { + return false; + } + } + return true; +}; -export const addN3o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] + n, - out[io + so] = a[ia + sa] + n, - out[io + 2 * so] = a[ia + 2 * sa] + n, - out -); +export const eqDelta3array = (a: ReadonlyVec[], b: ReadonlyVec[], eps = EPS) => { + const na = a.length; + if (b.length !== na) { + return false; + } + for (let i = 0; i < na; i++) { + if (!eqDelta3(a[i], b[i], eps)) { + return false; + } + } + return true; +}; -export const subN3o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] - n, - out[io + so] = a[ia + sa] - n, - out[io + 2 * so] = a[ia + 2 * sa] - n, - out -); +export const compare3 = ( + a: ReadonlyVec, + b: ReadonlyVec, + o1: Vec3Coord, o2: Vec3Coord, o3: Vec3Coord, + ia = 0, ib = 0, sa = 1, sb = 1): number => { + + const ax = a[ia + o1 * sa]; + const ay = a[ia + o2 * sa]; + const az = a[ia + o3 * sa]; + const bx = b[ib + o1 * sb]; + const by = b[ib + o2 * sb]; + const bz = b[ib + o3 * sb]; + return ax === bx ? + ay === by ? + az === bz ? + 0 : + az < bz ? -3 : 3 : + ay < by ? -2 : 2 : + ax < bx ? -1 : 1; +}; -export const mulN3o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] * n, - out[io + so] = a[ia + sa] * n, - out[io + 2 * so] = a[ia + 2 * sa] * n, - out -); +export const collate3 = (buf: Vec, src: Iterable, start = 0, cstride = 1, estride = 3) => { + for (let v of src) { + set3(buf, v, start, 0, cstride, 1); + start += estride; + } + return buf; +}; -export const divN3o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] / n, - out[io + so] = a[ia + sa] / n, - out[io + 2 * so] = a[ia + 2 * sa] / n, - out -); +export const [ + set3, setN3, + add3, sub3, mul3, div3, + add3o, sub3o, mul3o, div3o, + addN3, subN3, mulN3, divN3, + addN3o, subN3o, mulN3o, divN3o, + madd3, maddN3, msub3, msubN3, + abs3, sign3, floor3, ceil3, sin3, cos3, sqrt3, + pow3, min3, max3, + mix3, mixN3, mix3o, mixN3o +] = defcommon(3); export const neg3 = (a: Vec, ia = 0, sa = 1) => mulN3(a, -1, ia, sa); -export const abs3 = (a: Vec, ia = 0, sa = 1) => - op3(Math.abs, a, ia, sa); - -export const sign3 = (a: Vec, eps = EPS, ia = 0, sa = 1) => - op3((x) => sign1(x, eps), a, ia, sa); - -export const floor3 = (a: Vec, ia = 0, sa = 1) => - op3(Math.floor, a, ia, sa); - -export const ceil3 = (a: Vec, ia = 0, sa = 1) => - op3(Math.ceil, a, ia, sa); - export const fract3 = (a: Vec, ia = 0, sa = 1) => - op3(fract1, a, ia, sa); - -export const sin3 = (a: Vec, ia = 0, sa = 1) => - op3(Math.sin, a, ia, sa); - -export const cos3 = (a: Vec, ia = 0, sa = 1) => - op3(Math.cos, a, ia, sa); - -export const sqrt3 = (a: Vec, ia = 0, sa = 1) => - op3(Math.sqrt, a, ia, sa); - -export const pow3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op32(Math.pow, a, b, ia, ib, sa, sb); + op3(fract, a, ia, sa); export const powN3 = (a: Vec, n: number, ia = 0, sa = 1) => op31(Math.pow, a, n, ia, sa); -export const madd3 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => ( - a[ia] += b[ib] * c[ic], - a[ia + sa] += b[ib + sb] * c[ic + sc], - a[ia + 2 * sa] += b[ib + 2 * sb] * c[ic + 2 * sc], - a -); - -export const maddN3 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += b[ib] * n, - a[ia + sa] += b[ib + sb] * n, - a[ia + 2 * sa] += b[ib + 2 * sb] * n, - a -); - -export const msub3 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => ( - a[ia] -= b[ib] * c[ic], - a[ia + sa] -= b[ib + sb] * c[ic + sc], - a[ia + 2 * sa] -= b[ib + 2 * sb] * c[ic + 2 * sc], - a -); - -export const msubN3 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] -= b[ib] * n, - a[ia + sa] -= b[ib + sb] * n, - a[ia + 2 * sa] -= b[ib + 2 * sb] * n, - a -); - export const dot3 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => a[ia] * b[ib] + a[ia + sa] * b[ib + sb] + @@ -296,64 +188,30 @@ export const orthoNormal3 = (a: Vec, b: Vec, c: Vec, ia = 0, ib = 0, ic = 0, sa sub3(get3(b, ib, sb), a, 0, ia, 1, sa) ); -export const mix3 = (a: Vec, b: ReadonlyVec, t: ReadonlyVec, ia = 0, ib = 0, it = 0, sa = 1, sb = 1, st = 1) => ( - a[ia] += (b[ib] - a[ia]) * t[it], - a[ia + sa] += (b[ib + sb] - a[ia + sa]) * t[it + st], - a[ia + 2 * sa] += (b[ib + 2 * sb] - a[ia + 2 * sa]) * t[it + 2 * st], - a -); - -export const mixN3 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += (b[ib] - a[ia]) * n, - a[ia + sa] += (b[ib + sb] - a[ia + sa]) * n, - a[ia + 2 * sa] += (b[ib + 2 * sb] - a[ia + 2 * sa]) * n, - a -); - -export const mix3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, t: ReadonlyVec, io = 0, ia = 0, ib = 0, it = 0, so = 1, sa = 1, sb = 1, st = 1) => ( - out[io] = a[ia] + (b[ib] - a[ia]) * t[it], - out[io + so] = a[ia + sa] + (b[ib + sb] - a[ia + sa]) * t[it + st], - out[io + 2 * so] = a[ia + 2 * sa] + (b[ib + 2 * sb] - a[ia + 2 * sa]) * t[it + 2 * st], - out -); - -export const mixN3o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, n: number, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] + (b[ib] - a[ia]) * n, - out[io + so] = a[ia + sa] + (b[ib + sb] - a[ia + sa]) * n, - out[io + 2 * so] = a[ia + 2 * sa] + (b[ib + 2 * sb] - a[ia + 2 * sa]) * n, - out -); - export const mixBilinear3 = ( a: Vec, b: ReadonlyVec, c: ReadonlyVec, d: ReadonlyVec, u: number, v: number, ia = 0, ib = 0, ic = 0, id = 0, sa = 1, sb = 1, sc = 1, sd = 1) => ( - a[ia] = mixBilinear1(a[ia], b[ib], c[ic], d[id], u, v), - a[ia + sa] = mixBilinear1(a[ia + sa], b[ib + sb], c[ic + sc], d[id + sd], u, v), - a[ia + 2 * sa] = mixBilinear1(a[ia + 2 * sa], b[ib + 2 * sb], c[ic + 2 * sc], d[id + 2 * sd], u, v), + a[ia] = mixBilinear(a[ia], b[ib], c[ic], d[id], u, v), + a[ia + sa] = mixBilinear(a[ia + sa], b[ib + sb], c[ic + sc], d[id + sd], u, v), + a[ia + 2 * sa] = mixBilinear(a[ia + 2 * sa], b[ib + 2 * sb], c[ic + 2 * sc], d[id + 2 * sd], u, v), a ); -export const min3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op32(Math.min, a, b, ia, ib, sa, sb); - -export const max3 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op32(Math.max, a, b, ia, ib, sa, sb); - export const clamp3 = (a: Vec, min: ReadonlyVec, max: ReadonlyVec, ia = 0, imin = 0, imax = 0, sa = 1, smin = 1, smax = 1) => max3(min3(a, max, ia, imax, sa, smax), min, ia, imin, sa, smin); export const step3 = (a: Vec, e: ReadonlyVec, ia = 0, ie = 0, sa = 1, se = 1) => ( - a[ia] = step1(e[ie], a[ia]), - a[ia + sa] = step1(e[ie + se], a[ia + sa]), - a[ia + 2 * sa] = step1(e[ie + 2 * se], a[ia + 2 * sa]), + a[ia] = step(e[ie], a[ia]), + a[ia + sa] = step(e[ie + se], a[ia + sa]), + a[ia + 2 * sa] = step(e[ie + 2 * se], a[ia + 2 * sa]), a ); export const smoothStep3 = (a: Vec, e1: ReadonlyVec, e2: ReadonlyVec, ia = 0, ie1 = 0, ie2 = 0, sa = 1, se1 = 1, se2 = 1) => ( - a[ia] = smoothStep1(e1[ie1], e2[ie2], a[ia]), - a[ia + sa] = smoothStep1(e1[ie1 + se1], e2[ie2 + se2], a[ia + sa]), - a[ia + 2 * sa] = smoothStep1(e1[ie1 + 2 * se1], e2[ie2 + 2 * se2], a[ia + 2 * sa]), + a[ia] = smoothStep(e1[ie1], e2[ie2], a[ia]), + a[ia + sa] = smoothStep(e1[ie1 + se1], e2[ie2 + se2], a[ia + sa]), + a[ia + 2 * sa] = smoothStep(e1[ie1 + 2 * se1], e2[ie2 + 2 * se2], a[ia + 2 * sa]), a ); @@ -450,17 +308,21 @@ export const rotateAroundAxis3 = (v: Vec, axis: Vec, theta: number, ia = 0, ib = export const headingXY3 = heading2; export const headingXZ3 = (a: ReadonlyVec, ia = 0, sa = 1) => - atan2Abs1(a[ia + 2 * sa], a[ia]); + atan2Abs(a[ia + 2 * sa], a[ia]); export const headingYZ3 = (a: ReadonlyVec, ia = 0, sa = 1) => - atan2Abs1(a[ia + 2 * sa], a[ia + sa]); + atan2Abs(a[ia + 2 * sa], a[ia + sa]); + +export const angleRatio3 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => + dot3(a, b, ia, ib, sa, sb) / (mag3(a, ia, sa) * mag3(b, ib, sb)); export const angleBetween3 = (a: ReadonlyVec, b: ReadonlyVec, normalize = false, ia = 0, ib = 0, sa = 1, sb = 1): number => normalize ? - angleBetween3(normalize3(get3(a, ia, sa)), normalize3(get3(b, ib, sb))) : + (a[ia] * b[ib + sb] < a[ia + sa] * b[ib] ? -1 : 1) * + Math.acos(angleRatio3(a, b, ia, ib, sa, sb)) : Math.acos(dot3(a, b, ia, ib, sa, sb)); -export const toSpherical3 = (a: Vec, ia = 0, sa = 1) => { +export const toPolar3 = (a: Vec, ia = 0, sa = 1) => { const x = a[ia]; const y = a[ia + sa]; const z = a[ia + 2 * sa]; @@ -498,13 +360,14 @@ export const majorAxis3 = (a: Vec, ia = 0, sa = 1) => export const vec3 = (x = 0, y = 0, z = 0) => new Vec3([x, y, z]); +export const asVec3 = (x: ReadonlyVec) => + x instanceof Vec3 ? x : new Vec3([x[0] || 0, x[1] || 0, x[2] || 0]); + export class Vec3 implements - ICopy, - IEqualsDelta, - IEquiv, - ILength, - Iterable, - IVec { + IVector, + IAngleBetween, + ICrossProduct, + IPolar { /** * Returns array of memory mapped `Vec3` instances using given @@ -520,7 +383,7 @@ export class Vec3 implements * @param cstride component stride * @param estride element stride */ - static mapBuffer(buf: Vec, n: number, start = 0, cstride = 1, estride = 3) { + static mapBuffer(buf: Vec, n = (buf.length / 3) | 0, start = 0, cstride = 1, estride = 3) { const res: Vec3[] = []; while (--n >= 0) { res.push(new Vec3(buf, start, cstride)); @@ -529,7 +392,21 @@ export class Vec3 implements return res; } - static intoBuffer(buf: Vec, src: Iterable>, start = 0, cstride = 1, estride = 2) { + /** + * Merges given `src` iterable of `Vec3`s into single array `buf`. + * Vectors will be arranged according to given component and element + * strides, starting at `start` index. It's the user's + * responsibility to ensure the target buffer has sufficient + * capacity to hold the input vectors. See `Vec3.mapBuffer` for the + * reverse operation. Returns buffer. + * + * @param buf + * @param src + * @param start + * @param cstride + * @param estride + */ + static intoBuffer(buf: Vec, src: Iterable>, start = 0, cstride = 1, estride = 3) { for (let v of src) { set3(buf, v.buf, start, v.i, cstride, v.s); start += estride; @@ -537,6 +414,10 @@ export class Vec3 implements return buf; } + static swizzle(v: IVec, x: number, y: number, z: number) { + return new Vec3([]).swizzle(v, x, y, z); + } + static mixBilinear(a: Readonly, b: Readonly, c: Readonly, d: Readonly, u: number, v: number) { return new Vec3( mixBilinear3( @@ -559,70 +440,17 @@ export class Vec3 implements return new Vec3(randMinMax3([], min, max)); } - static add(a: Readonly, b: Readonly, out?: Vec3) { - !out && (out = new Vec3([])); - add3o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static sub(a: Readonly, b: Readonly, out?: Vec3) { - !out && (out = new Vec3([])); - sub3o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static mul(a: Readonly, b: Readonly, out?: Vec3) { - !out && (out = new Vec3([])); - mul3o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static div(a: Readonly, b: Readonly, out?: Vec3) { - !out && (out = new Vec3([])); - div3o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static addN(a: Readonly, n: number, out?: Vec3) { - !out && (out = new Vec3([])); - addN3o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static subN(a: Readonly, n: number, out?: Vec3) { - !out && (out = new Vec3([])); - subN3o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static mulN(a: Readonly, n: number, out?: Vec3) { - !out && (out = new Vec3([])); - mulN3o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static divN(a: Readonly, n: number, out?: Vec3) { - !out && (out = new Vec3([])); - divN3o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static mix(a: Readonly, b: Readonly, t: Readonly, out?: Vec3) { - !out && (out = new Vec3([])); - mix3o(out.buf, a.buf, b.buf, t.buf, out.i, a.i, b.i, t.i, out.s, a.s, b.s, t.s); - return out; - } - - static mixN(a: Readonly, b: Readonly, t: number, out?: Vec3) { - !out && (out = new Vec3([])); - mixN3o(out.buf, a.buf, b.buf, t, out.i, a.i, b.i, out.s, a.s, b.s); - return out; + static comparator(o1: Vec3Coord, o2: Vec3Coord, o3: Vec3Coord) { + return (a: Readonly, b: Readonly) => a.compare(b, o1, o2, o3); } static readonly ZERO = Object.freeze(new Vec3(ZERO4)); static readonly ONE = Object.freeze(new Vec3(ONE4)); static readonly MIN = Object.freeze(new Vec3(MIN4)); static readonly MAX = Object.freeze(new Vec3(MAX4)); + static readonly X_AXIS = Object.freeze(new Vec3(X4)); + static readonly Y_AXIS = Object.freeze(new Vec3(Y4)); + static readonly Z_AXIS = Object.freeze(new Vec3(Z4)); buf: Vec; i: number; @@ -632,8 +460,8 @@ export class Vec3 implements z: number; [id: number]: number; - constructor(buf: Vec, index = 0, stride = 1) { - this.buf = buf; + constructor(buf?: Vec, index = 0, stride = 1) { + this.buf = buf || [0, 0, 0]; this.i = index; this.s = stride; } @@ -654,6 +482,10 @@ export class Vec3 implements return new Vec3(get3(this.buf, this.i, this.s)); } + empty() { + return new Vec3(); + } + equiv(v: any) { return v instanceof Vec3 ? equiv3(this.buf, v.buf, this.i, v.i, this.s, v.s) : @@ -666,6 +498,10 @@ export class Vec3 implements return eqDelta3(this.buf, v.buf, eps, this.i, v.i, this.s, v.s); } + compare(v: Readonly, o1: Vec3Coord = 0, o2: Vec3Coord = 1, o3: Vec3Coord = 2) { + return compare3(this.buf, v.buf, o1, o2, o3, this.i, v.i, this.s, v.s); + } + set(v: Readonly) { set3(this.buf, v.buf, this.i, v.i, this.s, v.s); return this; @@ -736,6 +572,90 @@ export class Vec3 implements return this; } + addNew(b: Readonly, out?: Vec3) { + !out && (out = new Vec3([])); + add3o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + subNew(b: Readonly, out?: Vec3) { + !out && (out = new Vec3([])); + sub3o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + mulNew(b: Readonly, out?: Vec3) { + !out && (out = new Vec3([])); + mul3o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + divNew(b: Readonly, out?: Vec3) { + !out && (out = new Vec3([])); + div3o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + addNewN(n: number, out?: Vec3) { + !out && (out = new Vec3([])); + addN3o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + subNewN(n: number, out?: Vec3) { + !out && (out = new Vec3([])); + subN3o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + mulNewN(n: number, out?: Vec3) { + !out && (out = new Vec3([])); + mulN3o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + divNewN(n: number, out?: Vec3) { + !out && (out = new Vec3([])); + divN3o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + maddNew(b: Readonly, c: Readonly, out?: Vec3) { + out = out ? out.set(this) : this.copy(); + madd3(out.buf, b.buf, c.buf, out.i, b.i, c.i, out.s, b.s, c.s); + return out; + } + + maddNewN(b: Readonly, n: number, out?: Vec3) { + out = out ? out.set(this) : this.copy(); + maddN3(out.buf, b.buf, n, out.i, b.i, out.s, b.s); + return out; + } + + msubNew(b: Readonly, c: Readonly, out?: Vec3) { + out = out ? out.set(this) : this.copy(); + msub3(out.buf, b.buf, c.buf, out.i, b.i, c.i, out.s, b.s, c.s); + return out; + } + + msubNewN(b: Readonly, n: number, out?: Vec3) { + out = out ? out.set(this) : this.copy(); + msubN3(out.buf, b.buf, n, out.i, b.i, out.s, b.s); + return out; + } + + mixNew(b: Readonly, t: Readonly, out?: Vec3) { + !out && (out = new Vec3([])); + mix3o(out.buf, this.buf, b.buf, t.buf, out.i, this.i, b.i, t.i, out.s, this.s, b.s, t.s); + return out; + } + + mixNewN(b: Readonly, n = 0.5, out?: Vec3) { + !out && (out = new Vec3([])); + mixN3o(out.buf, this.buf, b.buf, n, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + neg() { mulN3(this.buf, -1, this.i, this.s); return this; @@ -801,12 +721,22 @@ export class Vec3 implements return this; } + msub(b: Readonly, c: Readonly) { + msub3(this.buf, b.buf, c.buf, this.i, b.i, c.i, this.s, b.s, c.s); + return this; + } + + msubN(b: Readonly, n: number) { + msubN3(this.buf, b.buf, n, this.i, b.i, this.s, b.s); + return this; + } + mix(b: Readonly, c: Readonly) { mix3(this.buf, b.buf, c.buf, this.i, b.i, c.i, this.s, b.s, c.s); return this; } - mixN(b: Readonly, n: number) { + mixN(b: Readonly, n = 0.5) { mixN3(this.buf, b.buf, n, this.i, b.i, this.s, b.s); return this; } @@ -937,8 +867,8 @@ export class Vec3 implements return angleBetween3(this.buf, v.buf, normalize, this.i, v.i, this.s, v.s); } - toSpherical() { - toSpherical3(this.buf, this.i, this.s); + toPolar() { + toPolar3(this.buf, this.i, this.s); return this; } diff --git a/packages/vectors/src/vec4.ts b/packages/vectors/src/vec4.ts index 7e775b157a..310f1ca4a8 100644 --- a/packages/vectors/src/vec4.ts +++ b/packages/vectors/src/vec4.ts @@ -1,30 +1,27 @@ -import { - ICopy, - IEqualsDelta, - IEquiv, - ILength -} from "@thi.ng/api/api"; import { isArrayLike } from "@thi.ng/checks/is-arraylike"; +import { EPS } from "@thi.ng/math/api"; +import { eqDelta } from "@thi.ng/math/eqdelta"; +import { max4id, min4id } from "@thi.ng/math/interval"; +import { mixBilinear } from "@thi.ng/math/mix"; +import { fract } from "@thi.ng/math/prec"; +import { smoothStep, step } from "@thi.ng/math/step"; import { IVec, + IVector, MAX4, MIN4, ONE4, ReadonlyVec, Vec, + Vec4Coord, + W4, + X4, + Y4, + Z4, ZERO4 } from "./api"; -import { $iter, declareIndices } from "./common"; -import { - EPS, - eqDelta1, - fract1, - max4id, - min4id, - mixBilinear1, - smoothStep1, - step1 -} from "./math"; +import { declareIndices, defcommon } from "./codegen"; +import { $iter } from "./common"; export const op4 = (fn: (x: number) => number, a: Vec, ia = 0, sa = 1) => ( a[ia] = fn(a[ia]), @@ -50,33 +47,9 @@ export const op41 = (fn: (a: number, n: number) => number, a: Vec, n: number, ia a ); -export const op42 = (fn: (a: number, b: number) => number, a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] = fn(a[ia], b[ib]), - a[ia + sa] = fn(a[ia + sa], b[ib + sb]), - a[ia + 2 * sa] = fn(a[ia + 2 * sa], b[ib + 2 * sb]), - a[ia + 3 * sa] = fn(a[ia + 3 * sa], b[ib + 3 * sb]), - a -); - export const get4 = (a: ReadonlyVec, ia = 0, sa = 1) => set4(new ((a.constructor))(4), a, 0, ia, 1, sa); -export const set4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] = b[ib], - a[ia + sa] = b[ib + sb], - a[ia + 2 * sa] = b[ib + 2 * sb], - a[ia + 3 * sa] = b[ib + 3 * sb], - a -); - -export const setN4 = (a: Vec, n: number, ia = 0, sa = 1) => ( - a[ia] = n, - a[ia + sa] = n, - a[ia + 2 * sa] = n, - a[ia + 3 * sa] = n, - a -); - export const setS4 = (a: Vec, x: number, y: number, z: number, w: number, ia = 0, sa = 1) => ( a[ia] = x, a[ia + sa] = y, @@ -117,183 +90,86 @@ export const equiv4 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, s a[ia + 3 * sa] === b[ib + 3 * sb]; export const eqDelta4 = (a: ReadonlyVec, b: ReadonlyVec, eps = EPS, ia = 0, ib = 0, sa = 1, sb = 1) => - eqDelta1(a[ia], b[ib], eps) && - eqDelta1(a[ia + sa], b[ib + sb], eps) && - eqDelta1(a[ia + 2 * sa], b[ib + 2 * sb], eps) && - eqDelta1(a[ia + 3 * sa], b[ib + 3 * sb], eps); - -export const add4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += b[ib], - a[ia + sa] += b[ib + sb], - a[ia + 2 * sa] += b[ib + 2 * sb], - a[ia + 3 * sa] += b[ib + 3 * sb], - a -); - -export const mul4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] *= b[ib], - a[ia + sa] *= b[ib + sb], - a[ia + 2 * sa] *= b[ib + 2 * sb], - a[ia + 3 * sa] *= b[ib + 3 * sb], - a -); - -export const sub4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] -= b[ib], - a[ia + sa] -= b[ib + sb], - a[ia + 2 * sa] -= b[ib + 2 * sb], - a[ia + 3 * sa] -= b[ib + 3 * sb], - a -); - -export const div4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] /= b[ib], - a[ia + sa] /= b[ib + sb], - a[ia + 2 * sa] /= b[ib + 2 * sb], - a[ia + 3 * sa] /= b[ib + 3 * sb], - a -); - -export const add4o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] + b[ib], - out[io + so] = a[ia + sa] + b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] + b[ib + 2 * sb], - out[io + 3 * so] = a[ia + 3 * sa] + b[ib + 3 * sb], - out -); - -export const sub4o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] - b[ib], - out[io + so] = a[ia + sa] - b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] - b[ib + 2 * sb], - out[io + 3 * so] = a[ia + 3 * sa] - b[ib + 3 * sb], - out -); - -export const mul4o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] * b[ib], - out[io + so] = a[ia + sa] * b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] * b[ib + 2 * sb], - out[io + 3 * so] = a[ia + 3 * sa] * b[ib + 3 * sb], - out -); - -export const div4o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] / b[ib], - out[io + so] = a[ia + sa] / b[ib + sb], - out[io + 2 * so] = a[ia + 2 * sa] / b[ib + 2 * sb], - out[io + 3 * so] = a[ia + 3 * sa] / b[ib + 3 * sb], - out -); - -export const addN4 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] += n, a[ia + sa] += n, a[ia + 2 * sa] += n, a[ia + 3 * sa] += n, a); - -export const subN4 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] -= n, a[ia + sa] -= n, a[ia + 2 * sa] -= n, a[ia + 3 * sa] -= n, a); - -export const mulN4 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] *= n, a[ia + sa] *= n, a[ia + 2 * sa] *= n, a[ia + 3 * sa] *= n, a); - -export const divN4 = (a: Vec, n: number, ia = 0, sa = 1) => - (a[ia] /= n, a[ia + sa] /= n, a[ia + 2 * sa] /= n, a[ia + 3 * sa] /= n, a); + eqDelta(a[ia], b[ib], eps) && + eqDelta(a[ia + sa], b[ib + sb], eps) && + eqDelta(a[ia + 2 * sa], b[ib + 2 * sb], eps) && + eqDelta(a[ia + 3 * sa], b[ib + 3 * sb], eps); + +export const eqDelta4buf = (a: ReadonlyVec, b: ReadonlyVec, num: number, eps = EPS, ia = 0, ib = 0, sca = 1, scb = 1, sea = 4, seb = 4) => { + while (--num >= 0) { + if (!eqDelta4(a, b, eps, ia + num * sea, ib + num * seb, sca, scb)) { + return false; + } + } + return true; +}; -export const addN4o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] + n, - out[io + so] = a[ia + sa] + n, - out[io + 2 * so] = a[ia + 2 * sa] + n, - out[io + 3 * so] = a[ia + 3 * sa] + n, - out -); +export const eqDelta4array = (a: ReadonlyVec[], b: ReadonlyVec[], eps = EPS) => { + const na = a.length; + if (b.length !== na) { + return false; + } + for (let i = 0; i < na; i++) { + if (!eqDelta4(a[i], b[i], eps)) { + return false; + } + } + return true; +}; -export const subN4o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] - n, - out[io + so] = a[ia + sa] - n, - out[io + 2 * so] = a[ia + 2 * sa] - n, - out[io + 3 * so] = a[ia + 3 * sa] - n, - out -); +export const compare4 = ( + a: ReadonlyVec, + b: ReadonlyVec, + o1: Vec4Coord, o2: Vec4Coord, o3: Vec4Coord, o4: Vec4Coord, + ia = 0, ib = 0, sa = 1, sb = 1): number => { + + const ax = a[ia + o1 * sa]; + const ay = a[ia + o2 * sa]; + const az = a[ia + o3 * sa]; + const aw = b[ia + o4 * sa]; + const bx = b[ib + o1 * sb]; + const by = b[ib + o2 * sb]; + const bz = b[ib + o3 * sb]; + const bw = b[ib + o4 * sb]; + return ax === bx ? + ay === by ? + az === bz ? + aw === bw ? + 0 : + aw < bw ? -4 : 4 : + az < bz ? -3 : 3 : + ay < by ? -2 : 2 : + ax < bx ? -1 : 1; +}; -export const mulN4o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] * n, - out[io + so] = a[ia + sa] * n, - out[io + 2 * so] = a[ia + 2 * sa] * n, - out[io + 3 * so] = a[ia + 3 * sa] * n, - out -); +export const collate4 = (buf: Vec, src: Iterable, start = 0, cstride = 1, estride = 4) => { + for (let v of src) { + set4(buf, v, start, 0, cstride, 1); + start += estride; + } + return buf; +}; -export const divN4o = (out: Vec, a: ReadonlyVec, n: number, io = 0, ia = 0, so = 1, sa = 1) => ( - out[io] = a[ia] / n, - out[io + so] = a[ia + sa] / n, - out[io + 2 * so] = a[ia + 2 * sa] / n, - out[io + 3 * so] = a[ia + 3 * sa] / n, - out -); +export const [ + set4, setN4, + add4, sub4, mul4, div4, + add4o, sub4o, mul4o, div4o, + addN4, subN4, mulN4, divN4, + addN4o, subN4o, mulN4o, divN4o, + madd4, maddN4, msub4, msubN4, + abs4, sign4, floor4, ceil4, sin4, cos4, sqrt4, + pow4, min4, max4, + mix4, mixN4, mix4o, mixN4o +] = defcommon(4); export const neg4 = (a: Vec, ia = 0, sa = 1) => mulN4(a, -1, ia, sa); -export const abs4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.abs, a, ia, sa); - -export const sign4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.sign, a, ia, sa); - -export const floor4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.floor, a, ia, sa); - -export const ceil4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.ceil, a, ia, sa); - export const fract4 = (a: Vec, ia = 0, sa = 1) => - op4(fract1, a, ia, sa); - -export const sin4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.sin, a, ia, sa); - -export const cos4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.cos, a, ia, sa); - -export const sqrt4 = (a: Vec, ia = 0, sa = 1) => - op4(Math.sqrt, a, ia, sa); - -export const pow4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op42(Math.pow, a, b, ia, ib, sa, sb); + op4(fract, a, ia, sa); export const powN4 = (a: Vec, n: number, ia = 0, sa = 1) => - op4((x) => Math.pow(x, n), a, ia, sa); - -export const madd4 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => ( - a[ia] += b[ib] * c[ic], - a[ia + sa] += b[ib + sb] * c[ic + sc], - a[ia + 2 * sa] += b[ib + 2 * sb] * c[ic + 2 * sc], - a[ia + 3 * sa] += b[ib + 3 * sb] * c[ic + 3 * sc], - a -); - -export const maddN4 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += b[ib] * n, - a[ia + sa] += b[ib + sb] * n, - a[ia + 2 * sa] += b[ib + 2 * sb] * n, - a[ia + 3 * sa] += b[ib + 3 * sb] * n, - a -); - -export const msub4 = (a: Vec, b: ReadonlyVec, c: ReadonlyVec, ia = 0, ib = 0, ic = 0, sa = 1, sb = 1, sc = 1) => ( - a[ia] -= b[ib] * c[ic], - a[ia + sa] -= b[ib + sb] * c[ic + sc], - a[ia + 2 * sa] -= b[ib + 2 * sb] * c[ic + 2 * sc], - a[ia + 3 * sa] -= b[ib + 3 * sb] * c[ic + 3 * sc], - a -); - -export const msubN4 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] -= b[ib] * n, - a[ia + sa] -= b[ib + sb] * n, - a[ia + 2 * sa] -= b[ib + 2 * sb] * n, - a[ia + 3 * sa] -= b[ib + 3 * sb] * n, - a -); + op41(Math.pow, a, n, ia, sa); export const dot4 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => a[ia] * b[ib] + @@ -301,71 +177,33 @@ export const dot4 = (a: ReadonlyVec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb a[ia + 2 * sa] * b[ib + 2 * sb] + a[ia + 3 * sa] * b[ib + 3 * sb]; -export const mix4 = (a: Vec, b: ReadonlyVec, t: ReadonlyVec, ia = 0, ib = 0, it = 0, sa = 1, sb = 1, st = 1) => ( - a[ia] += (b[ib] - a[ia]) * t[it], - a[ia + sa] += (b[ib + sb] - a[ia + sa]) * t[it + st], - a[ia + 2 * sa] += (b[ib + 2 * sb] - a[ia + 2 * sa]) * t[it + 2 * st], - a[ia + 3 * sa] += (b[ib + 3 * sb] - a[ia + 3 * sa]) * t[it + 3 * st], - a -); - -export const mixN4 = (a: Vec, b: ReadonlyVec, n: number, ia = 0, ib = 0, sa = 1, sb = 1) => ( - a[ia] += (b[ib] - a[ia]) * n, - a[ia + sa] += (b[ib + sb] - a[ia + sa]) * n, - a[ia + 2 * sa] += (b[ib + 2 * sb] - a[ia + 2 * sa]) * n, - a[ia + 3 * sa] += (b[ib + 3 * sb] - a[ia + 3 * sa]) * n, - a -); - -export const mix4o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, t: ReadonlyVec, io = 0, ia = 0, ib = 0, it = 0, so = 1, sa = 1, sb = 1, st = 1) => ( - out[io] = a[ia] + (b[ib] - a[ia]) * t[it], - out[io + so] = a[ia + sa] + (b[ib + sb] - a[ia + sa]) * t[it + st], - out[io + 2 * so] = a[ia + 2 * sa] + (b[ib + 2 * sb] - a[ia + 2 * sa]) * t[it + 2 * st], - out[io + 3 * so] = a[ia + 3 * sa] + (b[ib + 3 * sb] - a[ia + 3 * sa]) * t[it + 3 * st], - out -); - -export const mixN4o = (out: Vec, a: ReadonlyVec, b: ReadonlyVec, n: number, io = 0, ia = 0, ib = 0, so = 1, sa = 1, sb = 1) => ( - out[io] = a[ia] + (b[ib] - a[ia]) * n, - out[io + so] = a[ia + sa] + (b[ib + sb] - a[ia + sa]) * n, - out[io + 2 * so] = a[ia + 2 * sa] + (b[ib + 2 * sb] - a[ia + 2 * sa]) * n, - out[io + 3 * so] = a[ia + 3 * sa] + (b[ib + 3 * sb] - a[ia + 3 * sa]) * n, - out -); - export const mixBilinear4 = ( a: Vec, b: ReadonlyVec, c: ReadonlyVec, d: ReadonlyVec, u: number, v: number, ia = 0, ib = 0, ic = 0, id = 0, sa = 1, sb = 1, sc = 1, sd = 1) => ( - a[ia] = mixBilinear1(a[ia], b[ib], c[ic], d[id], u, v), - a[ia + sa] = mixBilinear1(a[ia + sa], b[ib + sb], c[ic + sc], d[id + sd], u, v), - a[ia + 2 * sa] = mixBilinear1(a[ia + 2 * sa], b[ib + 2 * sb], c[ic + 2 * sc], d[id + 2 * sd], u, v), - a[ia + 3 * sa] = mixBilinear1(a[ia + 3 * sa], b[ib + 3 * sb], c[ic + 3 * sc], d[id + 3 * sd], u, v), + a[ia] = mixBilinear(a[ia], b[ib], c[ic], d[id], u, v), + a[ia + sa] = mixBilinear(a[ia + sa], b[ib + sb], c[ic + sc], d[id + sd], u, v), + a[ia + 2 * sa] = mixBilinear(a[ia + 2 * sa], b[ib + 2 * sb], c[ic + 2 * sc], d[id + 2 * sd], u, v), + a[ia + 3 * sa] = mixBilinear(a[ia + 3 * sa], b[ib + 3 * sb], c[ic + 3 * sc], d[id + 3 * sd], u, v), a ); -export const min4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op42(Math.min, a, b, ia, ib, sa, sb); - -export const max4 = (a: Vec, b: ReadonlyVec, ia = 0, ib = 0, sa = 1, sb = 1) => - op42(Math.max, a, b, ia, ib, sa, sb); - export const clamp4 = (a: Vec, min: ReadonlyVec, max: ReadonlyVec, ia = 0, imin = 0, imax = 0, sa = 1, smin = 1, smax = 1) => max4(min4(a, max, ia, imax, sa, smax), min, ia, imin, sa, smin); export const step4 = (a: Vec, e: ReadonlyVec, ia = 0, ie = 0, sa = 1, se = 1) => ( - a[ia] = step1(e[ie], a[ia]), - a[ia + sa] = step1(e[ie + se], a[ia + sa]), - a[ia + 2 * sa] = step1(e[ie + 2 * se], a[ia + 2 * sa]), - a[ia + 3 * sa] = step1(e[ie + 3 * se], a[ia + 3 * sa]), + a[ia] = step(e[ie], a[ia]), + a[ia + sa] = step(e[ie + se], a[ia + sa]), + a[ia + 2 * sa] = step(e[ie + 2 * se], a[ia + 2 * sa]), + a[ia + 3 * sa] = step(e[ie + 3 * se], a[ia + 3 * sa]), a ); export const smoothStep4 = (a: Vec, e1: ReadonlyVec, e2: ReadonlyVec, ia = 0, ie1 = 0, ie2 = 0, sa = 1, se1 = 1, se2 = 1) => ( - a[ia] = smoothStep1(e1[ie1], e2[ie2], a[ia]), - a[ia + sa] = smoothStep1(e1[ie1 + se1], e2[ie2 + se2], a[ia + sa]), - a[ia + 2 * sa] = smoothStep1(e1[ie1 + 2 * se1], e2[ie2 + 2 * se2], a[ia + 2 * sa]), - a[ia + 3 * sa] = smoothStep1(e1[ie1 + 3 * se1], e2[ie2 + 2 * se2], a[ia + 3 * sa]), + a[ia] = smoothStep(e1[ie1], e2[ie2], a[ia]), + a[ia + sa] = smoothStep(e1[ie1 + se1], e2[ie2 + se2], a[ia + sa]), + a[ia + 2 * sa] = smoothStep(e1[ie1 + 2 * se1], e2[ie2 + 2 * se2], a[ia + 2 * sa]), + a[ia + 3 * sa] = smoothStep(e1[ie1 + 3 * se1], e2[ie2 + 2 * se2], a[ia + 3 * sa]), a ); @@ -437,18 +275,16 @@ export const majorAxis4 = (a: Vec, ia = 0, sa = 1) => export const vec4 = (x = 0, y = 0, z = 0, w = 0) => new Vec4([x, y, z, w]); +export const asVec4 = (x: ReadonlyVec) => + x instanceof Vec4 ? x : new Vec4([x[0] || 0, x[1] || 0, x[2] || 0, x[3] || 0]); + export class Vec4 implements - ICopy, - IEqualsDelta, - IEquiv, - ILength, - Iterable, - IVec { + IVector { /** * Returns array of memory mapped `Vec4` instances using given * backing array and stride settings: The `cstride` is the step size - * between individual XYZ vector components. `estride` is the step + * between individual XYZW vector components. `estride` is the step * size between successive vectors. This arrangement allows for * different storage approaches, incl. SOA, AOS, striped / * interleaved etc. @@ -459,7 +295,7 @@ export class Vec4 implements * @param cstride component stride * @param estride element stride */ - static mapBuffer(buf: Vec, n: number, start = 0, cstride = 1, estride = 4) { + static mapBuffer(buf: Vec, n = buf.length >> 2, start = 0, cstride = 1, estride = 4) { const res: Vec4[] = []; while (--n >= 0) { res.push(new Vec4(buf, start, cstride)); @@ -468,7 +304,21 @@ export class Vec4 implements return res; } - static intoBuffer(buf: Vec, src: Iterable>, start = 0, cstride = 1, estride = 2) { + /** + * Merges given `src` iterable of `Vec4`s into single array `buf`. + * Vectors will be arranged according to given component and element + * strides, starting at `start` index. It's the user's + * responsibility to ensure the target buffer has sufficient + * capacity to hold the input vectors. See `Vec4.mapBuffer` for the + * reverse operation. Returns buffer. + * + * @param buf + * @param src + * @param start + * @param cstride + * @param estride + */ + static intoBuffer(buf: Vec, src: Iterable>, start = 0, cstride = 1, estride = 4) { for (let v of src) { set4(buf, v.buf, start, v.i, cstride, v.s); start += estride; @@ -476,6 +326,10 @@ export class Vec4 implements return buf; } + static swizzle(v: IVec, x: number, y: number, z: number, w: number) { + return new Vec4([]).swizzle(v, x, y, z, w); + } + static mixBilinear(a: Readonly, b: Readonly, c: Readonly, d: Readonly, u: number, v: number) { return new Vec4( mixBilinear4( @@ -494,71 +348,18 @@ export class Vec4 implements return new Vec4(randMinMax4([], min, max)); } - static add(a: Readonly, b: Readonly, out?: Vec4) { - !out && (out = new Vec4([])); - add4o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static sub(a: Readonly, b: Readonly, out?: Vec4) { - !out && (out = new Vec4([])); - sub4o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static mul(a: Readonly, b: Readonly, out?: Vec4) { - !out && (out = new Vec4([])); - mul4o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static div(a: Readonly, b: Readonly, out?: Vec4) { - !out && (out = new Vec4([])); - div4o(out.buf, a.buf, b.buf, out.i, a.i, b.i, out.s, a.s, b.s); - return out; - } - - static addN(a: Readonly, n: number, out?: Vec4) { - !out && (out = new Vec4([])); - addN4o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static subN(a: Readonly, n: number, out?: Vec4) { - !out && (out = new Vec4([])); - subN4o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static mulN(a: Readonly, n: number, out?: Vec4) { - !out && (out = new Vec4([])); - mulN4o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static divN(a: Readonly, n: number, out?: Vec4) { - !out && (out = new Vec4([])); - divN4o(out.buf, a.buf, n, out.i, a.i, out.s, a.s); - return out; - } - - static mix(a: Readonly, b: Readonly, t: Readonly, out?: Vec4) { - !out && (out = new Vec4([])); - mix4o(out.buf, a.buf, b.buf, t.buf, out.i, a.i, b.i, t.i, out.s, a.s, b.s, t.s); - return out; - } - - static mixN(a: Readonly, b: Readonly, t: number, out?: Vec4) { - !out && (out = new Vec4([])); - mixN4o(out.buf, a.buf, b.buf, t, out.i, a.i, b.i, out.s, a.s, b.s); - return out; + static comparator(o1: Vec4Coord, o2: Vec4Coord, o3: Vec4Coord, o4: Vec4Coord) { + return (a: Readonly, b: Readonly) => a.compare(b, o1, o2, o3, o4); } static readonly ZERO = Object.freeze(new Vec4(ZERO4)); static readonly ONE = Object.freeze(new Vec4(ONE4)); static readonly MIN = Object.freeze(new Vec4(MIN4)); static readonly MAX = Object.freeze(new Vec4(MAX4)); - + static readonly X_AXIS = Object.freeze(new Vec4(X4)); + static readonly Y_AXIS = Object.freeze(new Vec4(Y4)); + static readonly Z_AXIS = Object.freeze(new Vec4(Z4)); + static readonly W_AXIS = Object.freeze(new Vec4(W4)); buf: Vec; i: number; s: number; @@ -568,8 +369,8 @@ export class Vec4 implements w: number; [id: number]: number; - constructor(buf: Vec, index = 0, stride = 1) { - this.buf = buf; + constructor(buf?: Vec, index = 0, stride = 1) { + this.buf = buf || [0, 0, 0, 0]; this.i = index; this.s = stride; } @@ -590,6 +391,10 @@ export class Vec4 implements return new Vec4(get4(this.buf, this.i, this.s)); } + empty() { + return new Vec4(); + } + equiv(v: any) { return v instanceof Vec4 ? equiv4(this.buf, v.buf, this.i, v.i, this.s, v.s) : @@ -602,6 +407,10 @@ export class Vec4 implements return eqDelta4(this.buf, v.buf, eps, this.i, v.i, this.s, v.s); } + compare(v: Readonly, o1: Vec4Coord = 0, o2: Vec4Coord = 1, o3: Vec4Coord = 2, o4: Vec4Coord = 3) { + return compare4(this.buf, v.buf, o1, o2, o3, o4, this.i, v.i, this.s, v.s); + } + set(v: Readonly) { set4(this.buf, v.buf, this.i, v.i, this.s, v.s); return this; @@ -672,6 +481,90 @@ export class Vec4 implements return this; } + addNew(b: Readonly, out?: Vec4) { + !out && (out = new Vec4([])); + add4o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + subNew(b: Readonly, out?: Vec4) { + !out && (out = new Vec4([])); + sub4o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + mulNew(b: Readonly, out?: Vec4) { + !out && (out = new Vec4([])); + mul4o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + divNew(b: Readonly, out?: Vec4) { + !out && (out = new Vec4([])); + div4o(out.buf, this.buf, b.buf, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + + addNewN(n: number, out?: Vec4) { + !out && (out = new Vec4([])); + addN4o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + subNewN(n: number, out?: Vec4) { + !out && (out = new Vec4([])); + subN4o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + mulNewN(n: number, out?: Vec4) { + !out && (out = new Vec4([])); + mulN4o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + divNewN(n: number, out?: Vec4) { + !out && (out = new Vec4([])); + divN4o(out.buf, this.buf, n, out.i, this.i, out.s, this.s); + return out; + } + + maddNew(b: Readonly, c: Readonly, out?: Vec4) { + out = out ? out.set(this) : this.copy(); + madd4(out.buf, b.buf, c.buf, out.i, b.i, c.i, out.s, b.s, c.s); + return out; + } + + maddNewN(b: Readonly, n: number, out?: Vec4) { + out = out ? out.set(this) : this.copy(); + maddN4(out.buf, b.buf, n, out.i, b.i, out.s, b.s); + return out; + } + + msubNew(b: Readonly, c: Readonly, out?: Vec4) { + out = out ? out.set(this) : this.copy(); + msub4(out.buf, b.buf, c.buf, out.i, b.i, c.i, out.s, b.s, c.s); + return out; + } + + msubNewN(b: Readonly, n: number, out?: Vec4) { + out = out ? out.set(this) : this.copy(); + msubN4(out.buf, b.buf, n, out.i, b.i, out.s, b.s); + return out; + } + + mixNew(b: Readonly, t: Readonly, out?: Vec4) { + !out && (out = new Vec4([])); + mix4o(out.buf, this.buf, b.buf, t.buf, out.i, this.i, b.i, t.i, out.s, this.s, b.s, t.s); + return out; + } + + mixNewN(b: Readonly, n = 0.5, out?: Vec4) { + !out && (out = new Vec4([])); + mixN4o(out.buf, this.buf, b.buf, n, out.i, this.i, b.i, out.s, this.s, b.s); + return out; + } + neg() { mulN4(this.buf, -1, this.i, this.s); return this; @@ -737,12 +630,22 @@ export class Vec4 implements return this; } + msub(b: Readonly, c: Readonly) { + msub4(this.buf, b.buf, c.buf, this.i, b.i, c.i, this.s, b.s, c.s); + return this; + } + + msubN(b: Readonly, n: number) { + msubN4(this.buf, b.buf, n, this.i, b.i, this.s, b.s); + return this; + } + mix(b: Readonly, c: Readonly) { mix4(this.buf, b.buf, c.buf, this.i, b.i, c.i, this.s, b.s, c.s); return this; } - mixN(b: Readonly, n: number) { + mixN(b: Readonly, n = 0.5) { mixN4(this.buf, b.buf, n, this.i, b.i, this.s, b.s); return this; } diff --git a/yarn.lock b/yarn.lock index 236c180185..d97d9820b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,12 +5,41 @@ "@babel/code-frame@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz#bd71d9b192af978df915829d39d4094456439a0c" + integrity sha1-vXHZsZKvl435FYKdOdQJRFZDmgw= dependencies: "@babel/highlight" "7.0.0-beta.51" +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" + integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.2" + "@babel/helpers" "^7.1.2" + "@babel/parser" "^7.1.2" + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.1.2" + convert-source-map "^1.1.0" + debug "^3.1.0" + json5 "^0.5.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.51.tgz#6c7575ffde761d07485e04baedc0392c6d9e30f6" + integrity sha1-bHV1/952HQdIXgS67cA5LG2eMPY= dependencies: "@babel/types" "7.0.0-beta.51" jsesc "^2.5.1" @@ -18,50 +47,633 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.0.0", "@babel/generator@^7.1.2", "@babel/generator@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.3.tgz#2103ec9c42d9bdad9190a6ad5ff2d456fd7b8673" + integrity sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ== + dependencies: + "@babel/types" "^7.1.3" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-builder-react-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" + integrity sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw== + dependencies: + "@babel/types" "^7.0.0" + esutils "^2.0.0" + +"@babel/helper-call-delegate@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" + integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ== + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-define-map@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" + integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-function-name@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz#21b4874a227cf99ecafcc30a90302da5a2640561" + integrity sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE= dependencies: "@babel/helper-get-function-arity" "7.0.0-beta.51" "@babel/template" "7.0.0-beta.51" "@babel/types" "7.0.0-beta.51" +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz#3281b2d045af95c172ce91b20825d85ea4676411" + integrity sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE= dependencies: "@babel/types" "7.0.0-beta.51" +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" + integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" + integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" + integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== + dependencies: + lodash "^4.17.10" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" + integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-split-export-declaration@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz#8a6c3f66c4d265352fc077484f9f6e80a51ab978" + integrity sha1-imw/ZsTSZTUvwHdIT59ugKUauXg= dependencies: "@babel/types" "7.0.0-beta.51" +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-wrap-function@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" + integrity sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helpers@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" + integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA== + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.1.2" + "@babel/highlight@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.51.tgz#e8844ae25a1595ccfd42b89623b4376ca06d225d" + integrity sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0= dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + "@babel/parser@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.51.tgz#27cec2df409df60af58270ed8f6aa55409ea86f6" + integrity sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY= + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" + integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== + +"@babel/plugin-proposal-async-generator-functions@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce" + integrity sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + +"@babel/plugin-proposal-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" + integrity sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.0.0" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" + integrity sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" + integrity sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" + integrity sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.2.0" + +"@babel/plugin-syntax-async-generators@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" + integrity sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" + integrity sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" + integrity sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" + integrity sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" + integrity sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" + integrity sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" + integrity sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" + integrity sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" + integrity sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" + integrity sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.10" + +"@babel/plugin-transform-classes@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" + integrity sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.1.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" + integrity sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" + integrity sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" + integrity sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/plugin-transform-duplicate-keys@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" + integrity sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" + integrity sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01" + integrity sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" + integrity sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" + integrity sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" + integrity sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8" + integrity sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" + integrity sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + +"@babel/plugin-transform-modules-systemjs@^7.0.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz#2119a3e3db612fd74a19d88652efbfe9613a5db0" + integrity sha512-PvTxgjxQAq4pvVUZF3mD5gEtVDuId8NtWkJsZLEJZMZAW3TvgQl1pmydLLN1bM8huHFVVU43lf0uvjQj9FRkKw== + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-umd@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8" + integrity sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-new-target@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" + integrity sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb" + integrity sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + +"@babel/plugin-transform-parameters@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" + integrity sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw== + dependencies: + "@babel/helper-call-delegate" "^7.1.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" + integrity sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ== + dependencies: + "@babel/helper-builder-react-jsx" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" + integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw== + dependencies: + regenerator-transform "^0.13.3" + +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" + integrity sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" + integrity sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" + integrity sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" + integrity sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" + integrity sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" + integrity sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/preset-env@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11" + integrity sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.1.0" + "@babel/plugin-proposal-json-strings" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.1.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.1.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-dotall-regex" "^7.0.0" + "@babel/plugin-transform-duplicate-keys" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.1.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.1.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-amd" "^7.1.0" + "@babel/plugin-transform-modules-commonjs" "^7.1.0" + "@babel/plugin-transform-modules-systemjs" "^7.0.0" + "@babel/plugin-transform-modules-umd" "^7.1.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.1.0" + "@babel/plugin-transform-parameters" "^7.1.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typeof-symbol" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + browserslist "^4.1.0" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + +"@babel/runtime@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.2.tgz#81c89935f4647706fc54541145e6b4ecfef4b8e3" + integrity sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg== + dependencies: + regenerator-runtime "^0.12.0" "@babel/template@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.51.tgz#9602a40aebcf357ae9677e2532ef5fc810f5fbff" + integrity sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8= dependencies: "@babel/code-frame" "7.0.0-beta.51" "@babel/parser" "7.0.0-beta.51" "@babel/types" "7.0.0-beta.51" lodash "^4.17.5" +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" + integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.1.2" + "@babel/types" "^7.1.2" + "@babel/traverse@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.51.tgz#981daf2cec347a6231d3aa1d9e1803b03aaaa4a8" + integrity sha1-mB2vLOw0emIx06odnhgDsDqqpKg= dependencies: "@babel/code-frame" "7.0.0-beta.51" "@babel/generator" "7.0.0-beta.51" @@ -74,22 +686,48 @@ invariant "^2.2.0" lodash "^4.17.5" +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.4.tgz#f4f83b93d649b4b2c91121a9087fa2fa949ec2b4" + integrity sha512-my9mdrAIGdDiSVBuMjpn/oXYpva0/EZwWL3sm3Wcy/AVWO2eXnsoZruOT9jOGNRXU8KbCIu5zsKnXcAJ6PcV6Q== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.3" + "@babel/types" "^7.1.3" + debug "^3.1.0" + globals "^11.1.0" + lodash "^4.17.10" + "@babel/types@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.51.tgz#d802b7b543b5836c778aa691797abf00f3d97ea9" + integrity sha1-2AK3tUO1g2x3iqaReXq/APPZfqk= dependencies: esutils "^2.0.2" lodash "^4.17.5" to-fast-properties "^2.0.0" -"@lerna/add@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.3.2.tgz#767a879ecb117be06414e7e76d4d93bb9934fa57" +"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.3.tgz#3a767004567060c2f40fca49a304712c525ee37d" + integrity sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA== dependencies: - "@lerna/bootstrap" "^3.3.2" + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@lerna/add@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.4.1.tgz#d41068317e30f530df48220d256b5e79690b1877" + integrity sha512-Vf54B42jlD6G52qnv/cAGH70cVQIa+LX//lfsbkxHvzkhIqBl5J4KsnTOPkA9uq3R+zP58ayicCHB9ReiEWGJg== + dependencies: + "@lerna/bootstrap" "^3.4.1" "@lerna/command" "^3.3.0" "@lerna/filter-options" "^3.3.2" - "@lerna/npm-conf" "^3.0.0" + "@lerna/npm-conf" "^3.4.1" "@lerna/validation-error" "^3.0.0" dedent "^0.7.0" npm-package-arg "^6.0.0" @@ -100,23 +738,25 @@ "@lerna/batch-packages@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.1.2.tgz#74b5312a01a8916204cbc71237ffbe93144b99df" + integrity sha512-HAkpptrYeUVlBYbLScXgeCgk6BsNVXxDd53HVWgzzTWpXV4MHpbpeKrByyt7viXlNhW0w73jJbipb/QlFsHIhQ== dependencies: "@lerna/package-graph" "^3.1.2" "@lerna/validation-error" "^3.0.0" npmlog "^4.1.2" -"@lerna/bootstrap@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.3.2.tgz#01e894295dea89dcc0c62ee188f49f78873e08c9" +"@lerna/bootstrap@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.4.1.tgz#10635e9b547fb7d685949ac78e0923f73da2f52a" + integrity sha512-yZDJgNm/KDoRH2klzmQGmpWMg/XMzWgeWvauXkrfW/mj1wwmufOuh5pN4fBFxVmUUa/RFZdfMeaaJt3+W3PPBw== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/command" "^3.3.0" "@lerna/filter-options" "^3.3.2" "@lerna/has-npm-version" "^3.3.0" - "@lerna/npm-conf" "^3.0.0" + "@lerna/npm-conf" "^3.4.1" "@lerna/npm-install" "^3.3.0" "@lerna/rimraf-dir" "^3.3.0" - "@lerna/run-lifecycle" "^3.3.1" + "@lerna/run-lifecycle" "^3.4.1" "@lerna/run-parallel-batches" "^3.0.0" "@lerna/symlink-binary" "^3.3.0" "@lerna/symlink-dependencies" "^3.3.0" @@ -133,19 +773,21 @@ read-package-tree "^5.1.6" semver "^5.5.0" -"@lerna/changed@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.3.2.tgz#679c9fd353a82d00e2a27847c79f061d5abdea67" +"@lerna/changed@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.4.1.tgz#84a049359a53b8812c3a07a664bd41b1768f5938" + integrity sha512-gT7fhl4zQWyGETDO4Yy5wsFnqNlBSsezncS1nkMW1uO6jwnolwYqcr1KbrMR8HdmsZBn/00Y0mRnbtbpPPey8w== dependencies: "@lerna/collect-updates" "^3.3.2" "@lerna/command" "^3.3.0" "@lerna/listable" "^3.0.0" "@lerna/output" "^3.0.0" - "@lerna/version" "^3.3.2" + "@lerna/version" "^3.4.1" "@lerna/check-working-tree@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.3.0.tgz#2118f301f28ccb530812e5b27a341b1e6b3c84e2" + integrity sha512-oeEP1dNhiiKUaO0pmcIi73YXJpaD0n5JczNctvVNZ8fGZmrALZtEnmC28o6Z7JgQaqq5nd2kO7xbnjoitrC51g== dependencies: "@lerna/describe-ref" "^3.3.0" "@lerna/validation-error" "^3.0.0" @@ -153,6 +795,7 @@ "@lerna/child-process@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.3.0.tgz#71184a763105b6c8ece27f43f166498d90fe680f" + integrity sha512-q2d/OPlNX/cBXB6Iz1932RFzOmOHq6ZzPjqebkINNaTojHWuuRpvJJY4Uz3NGpJ3kEtPDvBemkZqUBTSO5wb1g== dependencies: chalk "^2.3.1" execa "^1.0.0" @@ -161,6 +804,7 @@ "@lerna/clean@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.3.2.tgz#9a7e8a1e400e580de260fa124945b2939a025069" + integrity sha512-mvqusgSp2ou5SGqQgTEoTvGJpGfH4+L6XSeN+Ims+eNFGXuMazmKCf+rz2PZBMFufaHJ/Os+JF0vPCcWI1Fzqg== dependencies: "@lerna/command" "^3.3.0" "@lerna/filter-options" "^3.3.2" @@ -173,6 +817,7 @@ "@lerna/cli@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.2.0.tgz#3ed25bcbc0b8f0878bc6a102ee0296f01476cfdf" + integrity sha512-JdbLyTxHqxUlrkI+Ke+ltXbtyA+MPu9zR6kg/n8Fl6uaez/2fZWtReXzYi8MgLxfUFa7+1OHWJv4eAMZlByJ+Q== dependencies: "@lerna/global-options" "^3.1.3" dedent "^0.7.0" @@ -182,6 +827,7 @@ "@lerna/collect-updates@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.3.2.tgz#54df5ce59ca05e8aa04ff8a9299f89cc253a9304" + integrity sha512-9WyBJI2S5sYgEZEScu525Lbi6nknNrdBKop35sCDIC9y6AIGvH6Dr5tkTd+Kg3n1dE+kHwW/xjERkx3+h7th3w== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/describe-ref" "^3.3.0" @@ -192,6 +838,7 @@ "@lerna/command@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.3.0.tgz#e81c4716a676b02dbe9d3f548d5f45b4ba32c25a" + integrity sha512-NTOkLEKlWcBLHSvUr9tzVpV7RJ4GROLeOuZ6RfztGOW/31JPSwVVBD2kPifEXNZunldOx5GVWukR+7+NpAWhsg== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/package-graph" "^3.1.2" @@ -204,15 +851,15 @@ lodash "^4.17.5" npmlog "^4.1.2" -"@lerna/conventional-commits@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.3.0.tgz#68302b6ca58b3ab7e91807664deeda2eac025ab0" +"@lerna/conventional-commits@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.4.1.tgz#0b47f9fc0c4a10951883e949d939188da1b527bc" + integrity sha512-3NETrA58aUkaEW3RdwdJ766Bg9NVpLzb26mtdlsJQcvB5sQBWH5dJSHIVQH1QsGloBeH2pE/mDUEVY8ZJXuR4w== dependencies: "@lerna/validation-error" "^3.0.0" - conventional-changelog-angular "^1.6.6" - conventional-changelog-core "^2.0.5" - conventional-recommended-bump "^2.0.6" - dedent "^0.7.0" + conventional-changelog-angular "^5.0.1" + conventional-changelog-core "^3.1.0" + conventional-recommended-bump "^4.0.1" fs-extra "^7.0.0" get-stream "^4.0.0" npm-package-arg "^6.0.0" @@ -222,18 +869,20 @@ "@lerna/create-symlink@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.3.0.tgz#91de00fd576018ba4251f0c6a5b4b7f768f22a82" + integrity sha512-0lb88Nnq1c/GG+fwybuReOnw3+ah4dB81PuWwWwuqUNPE0n50qUf/M/7FfSb5JEh/93fcdbZI0La8t3iysNW1w== dependencies: cmd-shim "^2.0.2" fs-extra "^7.0.0" npmlog "^4.1.2" -"@lerna/create@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.3.1.tgz#cfd7e0cb30d1f45133691165e103d26318d90ebf" +"@lerna/create@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.4.1.tgz#7cad78a5701d7666a0f5d0fe0e325acd8d8f5b63" + integrity sha512-l+4t2SRO5nvW0MNYY+EWxbaMHsAN8bkWH3nyt7EzhBjs4+TlRAJRIEqd8o9NWznheE3pzwczFz1Qfl3BWbyM5A== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" - "@lerna/npm-conf" "^3.0.0" + "@lerna/npm-conf" "^3.4.1" "@lerna/validation-error" "^3.0.0" camelcase "^4.1.0" dedent "^0.7.0" @@ -251,6 +900,7 @@ "@lerna/describe-ref@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.3.0.tgz#d373adb530d5428ab91e303ccbfcf51a98374a3a" + integrity sha512-4t7M4OupnYMSPNLrLUau8qkS+dgLEi4w+DkRkV0+A+KNYga1W0jVgNLPIIsxta7OHfodPkCNAqZCzNCw/dmAwA== dependencies: "@lerna/child-process" "^3.3.0" npmlog "^4.1.2" @@ -258,6 +908,7 @@ "@lerna/diff@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.3.0.tgz#c8130a5f508b47fad5fec81404498bc3acdf9cb5" + integrity sha512-sIoMjsm3NVxvmt6ofx8Uu/2fxgldQqLl0zmC9X1xW00j831o5hBffx1EoKj9CnmaEvoSP6j/KFjxy2RWjebCIg== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -267,6 +918,7 @@ "@lerna/exec@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.3.2.tgz#95ecaca617fd85abdb91e9a378ed06ec1763d665" + integrity sha512-mN6vGxNir7JOGvWLwKr3DW3LNy1ecCo2ziZj5rO9Mw5Rew3carUu1XLmhF/4judtsvXViUY+rvGIcqHe0vvb+w== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/child-process" "^3.3.0" @@ -278,6 +930,7 @@ "@lerna/filter-options@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.3.2.tgz#ac90702b7876ff4980dcdeaeac049c433dd01773" + integrity sha512-0WHqdDgAnt5WKoByi1q+lFw8HWt5tEKP2DnLlGqWv3YFwVF5DsPRlO7xbzjY9sJgvyJtZcnkMtccdBPFhGGyIQ== dependencies: "@lerna/collect-updates" "^3.3.2" "@lerna/filter-packages" "^3.0.0" @@ -286,6 +939,7 @@ "@lerna/filter-packages@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0.tgz#5eb25ad1610f3e2ab845133d1f8d7d40314e838f" + integrity sha512-zwbY1J4uRjWRZ/FgYbtVkq7I3Nduwsg2V2HwLKSzwV2vPglfGqgovYOVkND6/xqe2BHwDX4IyA2+e7OJmLaLSA== dependencies: "@lerna/validation-error" "^3.0.0" multimatch "^2.1.0" @@ -294,16 +948,19 @@ "@lerna/get-npm-exec-opts@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz#8fc7866e8d8e9a2f2dc385287ba32eb44de8bdeb" + integrity sha512-arcYUm+4xS8J3Palhl+5rRJXnZnFHsLFKHBxznkPIxjwGQeAEw7df38uHdVjEQ+HNeFmHnBgSqfbxl1VIw5DHg== dependencies: npmlog "^4.1.2" "@lerna/global-options@^3.1.3": version "3.1.3" resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.1.3.tgz#cf85e24655a91d04d4efc9a80c1f83fc768d08ae" + integrity sha512-LVeZU/Zgc0XkHdGMRYn+EmHfDmmYNwYRv3ta59iCVFXLVp7FRFWF7oB1ss/WRa9x/pYU0o6L8as/5DomLUGASA== "@lerna/has-npm-version@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz#8a73c2c437a0e1e68a19ccbd0dd3c014d4d39135" + integrity sha512-GX7omRep1eBRZHgjZLRw3MpBJSdA5gPZFz95P7rxhpvsiG384Tdrr/cKFMhm0A09yq27Tk/nuYTaZIj7HsVE6g== dependencies: "@lerna/child-process" "^3.3.0" semver "^5.5.0" @@ -311,6 +968,7 @@ "@lerna/import@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.3.1.tgz#deca8c93c9cc03c5844b975c6da9937dd7530440" + integrity sha512-2OzTQDkYKbBPpyP2iOI1sWfcvMjNLjjHjmREq/uOWJaSIk5J3Ukt71OPpcOHh4V2CBOlXidCcO+Hyb4FVIy8fw== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -323,6 +981,7 @@ "@lerna/init@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.3.0.tgz#998f3497da3d891867c593b808b6db4b8fc4ccb9" + integrity sha512-HvgRLkIG6nDIeAO6ix5sUVIVV+W9UMk2rSSmFT66CDOefRi7S028amiyYnFUK1QkIAaUbVUyOnYaErtbJwICuw== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -333,6 +992,7 @@ "@lerna/link@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.3.0.tgz#c0c05ff52d0f0c659fcf221627edfcd58e477a5c" + integrity sha512-8CeXzGL7okrsVXsy2sHXI2KuBaczw3cblAnA2+FJPUqSKMPNbUTRzeU3bOlCjYtK0LbxC4ngENJTL3jJ8RaYQQ== dependencies: "@lerna/command" "^3.3.0" "@lerna/package-graph" "^3.1.2" @@ -343,6 +1003,7 @@ "@lerna/list@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.3.2.tgz#1412b3cce2a83b1baa4ff6fb962d50b46c28ec98" + integrity sha512-XXEVy7w+i/xx8NeJmGirw4upEoEF9OfD6XPLjISNQc24VgQV+frXdVJ02QcP7Y/PkY1rdIVrOjvo3ipKVLUxaQ== dependencies: "@lerna/command" "^3.3.0" "@lerna/filter-options" "^3.3.2" @@ -352,6 +1013,7 @@ "@lerna/listable@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.0.0.tgz#27209b1382c87abdbc964220e75c247d803d4199" + integrity sha512-HX/9hyx1HLg2kpiKXIUc1EimlkK1T58aKQ7ovO7rQdTx9ForpefoMzyLnHE1n4XrUtEszcSWJIICJ/F898M6Ag== dependencies: chalk "^2.3.1" columnify "^1.5.4" @@ -359,15 +1021,17 @@ "@lerna/log-packed@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.0.4.tgz#6d1f6ce5ca68b9971f2a27f0ecf3c50684be174a" + integrity sha512-vVQHgMagE2wnbxhNY9nFkdu+Cx2TsyWalkJfkxbNzmo6gOCrDsxCBDj9vTEV8Q+4aWx0C0Bsc0sB2Eb8y/+ofA== dependencies: byte-size "^4.0.3" columnify "^1.5.4" has-unicode "^2.0.1" npmlog "^4.1.2" -"@lerna/npm-conf@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.0.0.tgz#7a4b8304a0ecd1e366208f656bd3d7f4dcb3b5e7" +"@lerna/npm-conf@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.4.1.tgz#859e931b0bc9a5eed86309cc09508810c1e7d121" + integrity sha512-i9G6DnbCqiAqxKx2rSXej/n14qxlV/XOebL6QZonxJKzNTB+Q2wglnhTXmfZXTPJfoqimLaY4NfAEtbOXRWOXQ== dependencies: config-chain "^1.1.11" pify "^3.0.0" @@ -375,6 +1039,7 @@ "@lerna/npm-dist-tag@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz#e1c5ab67674216d901266a16846b21cc81ff6afd" + integrity sha512-EtZJXzh3w5tqXEev+EBBPrWKWWn0WgJfxm4FihfS9VgyaAW8udIVZHGkIQ3f+tBtupcAzA9Q8cQNUkGF2efwmA== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -383,6 +1048,7 @@ "@lerna/npm-install@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.3.0.tgz#16d00ffd668d11b2386b3ac68bdac2cf8320e533" + integrity sha512-WoVvKdS8ltROTGSNQwo6NDq0YKnjwhvTG4li1okcN/eHKOS3tL9bxbgPx7No0wOq5DKBpdeS9KhAfee6LFAZ5g== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -395,6 +1061,7 @@ "@lerna/npm-publish@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.3.1.tgz#30384665d7ee387343332ece62ca231207bbabea" + integrity sha512-bVTlWIcBL6Zpyzqvr9C7rxXYcoPw+l7IPz5eqQDNREj1R39Wj18OWB2KTJq8l7LIX7Wf4C2A1uT5hJaEf9BuvA== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -407,6 +1074,7 @@ "@lerna/npm-run-script@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz#3c79601c27c67121155b20e039be53130217db72" + integrity sha512-YqDguWZzp4jIomaE4aWMUP7MIAJAFvRAf6ziQLpqwoQskfWLqK5mW0CcszT1oLjhfb3cY3MMfSTFaqwbdKmICg== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -415,12 +1083,14 @@ "@lerna/output@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0.tgz#4ed4a30ed2f311046b714b3840a090990ba3ce35" + integrity sha512-EFxnSbO0zDEVKkTKpoCUAFcZjc3gn3DwPlyTDxbeqPU7neCfxP4rA4+0a6pcOfTlRS5kLBRMx79F2TRCaMM3DA== dependencies: npmlog "^4.1.2" "@lerna/package-graph@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.1.2.tgz#b70298a3a8c82e12090da33233bf242223a38f20" + integrity sha512-9wIWb49I1IJmyjPdEVZQ13IAi9biGfH/OZHOC04U2zXGA0GLiY+B3CAx6FQvqkZ8xEGfqzmXnv3LvZ0bQfc1aQ== dependencies: "@lerna/validation-error" "^3.0.0" npm-package-arg "^6.0.0" @@ -429,6 +1099,7 @@ "@lerna/package@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0.tgz#14afc9a6cb1f7f7b23c1d7c7aa81bdac7d44c0e5" + integrity sha512-djzEJxzn212wS8d9znBnlXkeRlPL7GqeAYBykAmsuq51YGvaQK67Umh5ejdO0uxexF/4r7yRwgrlRHpQs8Rfqg== dependencies: npm-package-arg "^6.0.0" write-pkg "^3.1.0" @@ -436,6 +1107,7 @@ "@lerna/project@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.0.0.tgz#4320d2a2b4080cabcf95161d9c48475217d8a545" + integrity sha512-XhDFVfqj79jG2Speggd15RpYaE8uiR25UKcQBDmumbmqvTS7xf2cvl2pq2UTvDafaJ0YwFF3xkxQZeZnFMwdkw== dependencies: "@lerna/package" "^3.0.0" "@lerna/validation-error" "^3.0.0" @@ -453,13 +1125,15 @@ "@lerna/prompt@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.3.1.tgz#ec53f9034a7a02a671627241682947f65078ab88" + integrity sha512-eJhofrUCUaItMIH6et8kI7YqHfhjWqGZoTsE+40NRCfAraOMWx+pDzfRfeoAl3qeRAH2HhNj1bkYn70FbUOxuQ== dependencies: inquirer "^6.2.0" npmlog "^4.1.2" -"@lerna/publish@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.4.0.tgz#d2665f7b16eb3b2b8962c47fcf31fe901ff9a288" +"@lerna/publish@^3.4.3": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.4.3.tgz#fb956ca2a871729982022889f90d0e8eb8528340" + integrity sha512-baeRL8xmOR25p86cAaS9mL0jdRzdv4dUo04PlK2Wes+YlL705F55cSXeC9npNie+9rGwFyLzCTQe18WdbZyLuw== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/check-working-tree" "^3.3.0" @@ -468,15 +1142,15 @@ "@lerna/command" "^3.3.0" "@lerna/describe-ref" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" - "@lerna/npm-conf" "^3.0.0" + "@lerna/npm-conf" "^3.4.1" "@lerna/npm-dist-tag" "^3.3.0" "@lerna/npm-publish" "^3.3.1" "@lerna/output" "^3.0.0" "@lerna/prompt" "^3.3.1" - "@lerna/run-lifecycle" "^3.3.1" + "@lerna/run-lifecycle" "^3.4.1" "@lerna/run-parallel-batches" "^3.0.0" "@lerna/validation-error" "^3.0.0" - "@lerna/version" "^3.3.2" + "@lerna/version" "^3.4.1" fs-extra "^7.0.0" libnpmaccess "^3.0.0" npm-package-arg "^6.0.0" @@ -491,6 +1165,7 @@ "@lerna/resolve-symlink@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz#c5d99a60cb17e2ea90b3521a0ba445478d194a44" + integrity sha512-KmoPDcFJ2aOK2inYHbrsiO9SodedUj0L1JDvDgirVNIjMUaQe2Q6Vi4Gh+VCJcyB27JtfHioV9R2NxU72Pk2hg== dependencies: fs-extra "^7.0.0" npmlog "^4.1.2" @@ -499,23 +1174,26 @@ "@lerna/rimraf-dir@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz#687e9bb3668a9e540e281302a52d9a573860f5db" + integrity sha512-vSqOcZ4kZduiSprbt+y40qziyN3VKYh+ygiCdnbBbsaxpdKB6CfrSMUtrLhVFrqUfBHIZRzHIzgjTdtQex1KLw== dependencies: "@lerna/child-process" "^3.3.0" npmlog "^4.1.2" path-exists "^3.0.0" rimraf "^2.6.2" -"@lerna/run-lifecycle@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.3.1.tgz#13a03f353aab6c1639bf8953f58f0c45585785ac" +"@lerna/run-lifecycle@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.4.1.tgz#6d7e44eada31cb4ec78b18ef050da0d86f6c892b" + integrity sha512-N/hi2srM9A4BWEkXccP7vCEbf4MmIuALF00DTBMvc0A/ccItwUpl3XNuM7+ADDRK0mkwE3hDw89lJ3A7f8oUQw== dependencies: - "@lerna/npm-conf" "^3.0.0" + "@lerna/npm-conf" "^3.4.1" npm-lifecycle "^2.0.0" npmlog "^4.1.2" "@lerna/run-parallel-batches@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz#468704934084c74991d3124d80607857d4dfa840" + integrity sha512-Mj1ravlXF7AkkewKd9YFq9BtVrsStNrvVLedD/b2wIVbNqcxp8lS68vehXVOzoL/VWNEDotvqCQtyDBilCodGw== dependencies: p-map "^1.2.0" p-map-series "^1.0.0" @@ -523,6 +1201,7 @@ "@lerna/run@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.3.2.tgz#f521f4a22585c90758f34a584cb1871f8bb2a83e" + integrity sha512-cruwRGZZWnQ5I0M+AqcoT3Xpq2wj3135iVw4n59/Op6dZu50sMFXZNLiTTTZ15k8rTKjydcccJMdPSpTHbH7/A== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/command" "^3.3.0" @@ -536,6 +1215,7 @@ "@lerna/symlink-binary@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz#99ea570b21baabd61ecab27582eeb1d7b2c5f9cf" + integrity sha512-zRo6CimhvH/VJqCFl9T4IC6syjpWyQIxEfO2sBhrapEcfwjtwbhoGgKwucsvt4rIpFazCw63jQ/AXMT27KUIHg== dependencies: "@lerna/create-symlink" "^3.3.0" "@lerna/package" "^3.0.0" @@ -546,6 +1226,7 @@ "@lerna/symlink-dependencies@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz#13bcaed3e37986ab01b13498a459c7f609397dc3" + integrity sha512-IRngSNCmuD5uBKVv23tHMvr7Mplti0lKHilFKcvhbvhAfu6m/Vclxhkfs/uLyHzG+DeRpl/9o86SQET3h4XDhg== dependencies: "@lerna/create-symlink" "^3.3.0" "@lerna/resolve-symlink" "^3.3.0" @@ -558,22 +1239,24 @@ "@lerna/validation-error@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0.tgz#a27e90051c3ba71995e2a800a43d94ad04b3e3f4" + integrity sha512-5wjkd2PszV0kWvH+EOKZJWlHEqCTTKrWsvfHnHhcUaKBe/NagPZFWs+0xlsDPZ3DJt5FNfbAPAnEBQ05zLirFA== dependencies: npmlog "^4.1.2" -"@lerna/version@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.3.2.tgz#b1f4be43f61edf97428efca09dddc47ffd769bb4" +"@lerna/version@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.4.1.tgz#029448cccd3ccefb4d5f666933bd13cfb37edab0" + integrity sha512-oefNaQLBJSI2WLZXw5XxDXk4NyF5/ct0V9ys/J308NpgZthPgwRPjk9ZR0o1IOxW1ABi6z3E317W/dxHDjvAkg== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/check-working-tree" "^3.3.0" "@lerna/child-process" "^3.3.0" "@lerna/collect-updates" "^3.3.2" "@lerna/command" "^3.3.0" - "@lerna/conventional-commits" "^3.3.0" + "@lerna/conventional-commits" "^3.4.1" "@lerna/output" "^3.0.0" "@lerna/prompt" "^3.3.1" - "@lerna/run-lifecycle" "^3.3.1" + "@lerna/run-lifecycle" "^3.4.1" "@lerna/validation-error" "^3.0.0" chalk "^2.3.1" dedent "^0.7.0" @@ -590,6 +1273,7 @@ "@lerna/write-log-file@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0.tgz#2f95fee80c6821fe1ee6ccf8173d2b4079debbd2" + integrity sha512-SfbPp29lMeEVOb/M16lJwn4nnx5y+TwCdd7Uom9umd7KcZP0NOvpnX0PHehdonl7TyHZ1Xx2maklYuCLbQrd/A== dependencies: npmlog "^4.1.2" write-file-atomic "^2.3.0" @@ -597,6 +1281,7 @@ "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" @@ -604,66 +1289,108 @@ "@nodelib/fs.stat@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26" - -"@types/commander@^2.11.0": - version "2.12.2" - resolved "https://registry.yarnpkg.com/@types/commander/-/commander-2.12.2.tgz#183041a23842d4281478fa5d23c5ca78e6fd08ae" - dependencies: - commander "*" + integrity sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw== "@types/events@*": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" + integrity sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA== + +"@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" + integrity sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw== + dependencies: + "@types/node" "*" "@types/fs-extra@^5.0.3": version "5.0.4" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.4.tgz#b971134d162cc0497d221adde3dbb67502225599" + integrity sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g== dependencies: "@types/node" "*" "@types/glob@*": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.0.tgz#55ff6b216e9100b22eccec2cfe2e251ccb09a6ab" + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== dependencies: "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" +"@types/handlebars@4.0.36": + version "4.0.36" + resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.36.tgz#ff57c77fa1ab6713bb446534ddc4d979707a3a79" + integrity sha512-LjNiTX7TY7wtuC6y3QwC93hKMuqYhgV9A1uXBKNvZtVC8ZvyWAjZkJ5BvT0K7RKqORRYRLMrqCxpw5RgS+MdrQ== + "@types/handlebars@^4.0.38": version "4.0.39" resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.39.tgz#961fb54db68030890942e6aeffe9f93a957807bd" + integrity sha512-vjaS7Q0dVqFp85QhyPSZqDKnTTCemcSHNHFvDdalO1s0Ifz5KuE64jQD5xoUkfdWwF4WpqdJEl7LsWH8rzhKJA== + +"@types/highlight.js@9.12.2": + version "9.12.2" + resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.2.tgz#6ee7cd395effe5ec80b515d3ff1699068cd0cd1d" + integrity sha512-y5x0XD/WXDaGSyiTaTcKS4FurULJtSiYbGTeQd0m2LYZGBcZZ/7fM6t5H/DzeUF+kv8y6UfmF6yJABQsHcp9VQ== "@types/highlight.js@^9.12.3": version "9.12.3" resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca" + integrity sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ== + +"@types/lodash@4.14.104": + version "4.14.104" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80" + integrity sha512-ufQcVg4daO8xQ5kopxRHanqFdL4AI7ondQkV+2f+7mz3gvp0LkBx2zBRC6hfs3T87mzQFmf5Fck7Fi145Ul6NQ== "@types/lodash@^4.14.110": - version "4.14.116" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.116.tgz#5ccf215653e3e8c786a58390751033a9adca0eb9" + version "4.14.117" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.117.tgz#695a7f514182771a1e0f4345d189052ee33c8778" + integrity sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw== + +"@types/marked@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.3.0.tgz#583c223dd33385a1dda01aaf77b0cd0411c4b524" + integrity sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg== "@types/marked@^0.4.0": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.4.1.tgz#6595701c4d0dfde9d04894d3be04b8a97a49e0d7" + version "0.4.2" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.4.2.tgz#64a89e53ea37f61cc0f3ee1732c555c2dbf6452f" + integrity sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg== "@types/minimatch@*", "@types/minimatch@3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/mocha@^5.2.5": version "5.2.5" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.5.tgz#8a4accfc403c124a0bafe8a9fc61a05ec1032073" + integrity sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww== -"@types/node@*", "@types/node@^10.5.5": - version "10.10.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.10.3.tgz#09c75a4ad84d6a3d286790bdd9489a4f8ee9906c" +"@types/node@*", "@types/node@^10.11.7", "@types/node@^10.5.5": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.0.tgz#ea6dcbddbc5b584c83f06c60e82736d8fbb0c235" + integrity sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ== -"@types/semver@^5.4.0": +"@types/semver@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" + integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== + +"@types/shelljs@0.7.8": + version "0.7.8" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.8.tgz#4b4d6ee7926e58d7bca448a50ba442fd9f6715bd" + integrity sha512-M2giRw93PxKS7YjU6GZjtdV9HASdB7TWqizBXe4Ju7AqbKlWvTr0gNO92XH56D/gMxqD/jNHLNfC5hA34yGqrQ== + dependencies: + "@types/glob" "*" + "@types/node" "*" "@types/shelljs@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.0.tgz#0caa56b68baae4f68f44e0dd666ab30b098e3632" + integrity sha512-vs1hCC8RxLHRu2bwumNyYRNrU3o8BtZhLysH5A4I98iYmA2APl6R3uNQb5ihl+WiwH0xdC9LLO+vRrXLs/Kyxg== dependencies: "@types/glob" "*" "@types/node" "*" @@ -671,10 +1398,12 @@ "@types/webgl2@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279" + integrity sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw== JSONStream@^1.0.4, JSONStream@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.4.tgz#615bb2adb0cd34c8f4c447b5f6512fa1d8f16a2e" + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -682,26 +1411,31 @@ JSONStream@^1.0.4, JSONStream@^1.3.4: abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn@^5.0.0: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" agentkeepalive@^3.4.1: version "3.5.1" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.1.tgz#4eba75cf2ad258fc09efd506cdb8d8c2971d35a4" + integrity sha512-Cte/sTY9/XcygXjJ0q58v//SnEQ7ViWExKyJpLJlLqomDbQyMLh6Is4KuWJ/wmxzhiwkGRple7Gqv1zf6Syz5w== dependencies: humanize-ms "^1.2.1" ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -711,38 +1445,46 @@ ajv@^5.3.0: alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-to-html@^0.6.4: version "0.6.6" resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.6.tgz#58a8d04b87ec9a85e3ad273c12a5fbc7147b9c42" + integrity sha512-90M/2sZna3OsoOEbSyXK46poFnlClBC53Rx6etNKQK7iShsX5fI5E/M9Ld6FurtLaxAWLuAPi0Jp8p3y5oAkxg== dependencies: entities "^1.1.1" anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" @@ -750,24 +1492,29 @@ anymatch@^2.0.0: append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha1-126/jKlNJ24keja61EpLdKthGZE= dependencies: default-require-extensions "^1.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -775,68 +1522,83 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= 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" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -845,532 +1607,97 @@ asn1.js@^4.0.0: asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.1.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.25.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - 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.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-generator@^6.25.0, 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-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-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - -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-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-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 "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -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-to-generator@^6.22.0: - 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-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.23.0: - 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.23.0: - 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.22.0: - 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.23.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.22.0: - 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.23.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.22.0: - 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.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.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.0: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - 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.23.0: - 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.23.0: - 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.22.0: - 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.23.0: - 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.22.0: - 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" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= dependencies: - babel-runtime "^6.22.0" + util "0.10.3" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - 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" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -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" +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= -babel-plugin-transform-es2015-typeof-symbol@^6.23.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" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - 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" +async@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" + lodash "^4.17.10" -babel-plugin-transform-exponentiation-operator@^6.22.0: - 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" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= dependencies: - regenerator-transform "^0.10.0" + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" -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" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -babel-preset-env@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^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.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-register@^6.26.0: +babel-code-frame@^6.22.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 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" + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" -babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.11.6, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.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: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -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: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.15.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.15.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -1380,30 +1707,31 @@ babel-types@^6.15.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 babylon-walk@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/babylon-walk/-/babylon-walk-1.0.2.tgz#3b15a5ddbb482a78b4ce9c01c8ba181702d9d6ce" + integrity sha1-OxWl3btIKni0zpwByLoYFwLZ1s4= dependencies: babel-runtime "^6.11.6" babel-types "^6.15.0" lodash.clone "^4.5.0" -babylon@^6.17.4, babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1416,12 +1744,14 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" benchmark@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= dependencies: lodash "^4.17.4" platform "^1.3.3" @@ -1429,32 +1759,39 @@ benchmark@^2.1.4: binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" + integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== bindings@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" + integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" bluebird@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" + integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg== 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" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1462,6 +1799,7 @@ brace-expansion@^1.1.7: braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -1470,6 +1808,7 @@ braces@^1.8.2: braces@^2.3.0, braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -1485,6 +1824,7 @@ braces@^2.3.0, braces@^2.3.1: brfs@^1.2.0: version "1.6.1" resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" + integrity sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ== dependencies: quote-stream "^1.0.1" resolve "^1.1.5" @@ -1494,14 +1834,17 @@ brfs@^1.2.0: brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" - resolved "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1513,6 +1856,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -1521,6 +1865,7 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" @@ -1529,7 +1874,8 @@ browserify-des@^1.0.0: browserify-rsa@^4.0.0: version "4.0.1" - resolved "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" @@ -1537,6 +1883,7 @@ browserify-rsa@^4.0.0: browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1549,46 +1896,46 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= dependencies: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - -browserslist@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" +browserslist@^4.0.0, browserslist@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.2.1.tgz#257a24c879d1cd4016348eee5c25de683260b21d" + integrity sha512-1oO0c7Zhejwd+LXihS89WqtKionSbz298rJZKJgfrHIZhrV8AC15gw553VcB0lcEugja7IhWD7iAlrsamfYVPA== dependencies: - caniuse-lite "^1.0.30000884" - electron-to-chromium "^1.3.62" - node-releases "^1.0.0-alpha.11" + caniuse-lite "^1.0.30000890" + electron-to-chromium "^1.3.79" + node-releases "^1.0.0-alpha.14" buffer-equal@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.1" - resolved "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1597,26 +1944,32 @@ buffer@^4.3.0: builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= byte-size@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.3.tgz#b7c095efc68eadf82985fccd9a2df43a74fa2ccd" + integrity sha512-JGC3EV2bCzJH/ENSh3afyJrH4vwxbHTuO5ljLoI5+2iJOcEpMgP8T782jH9b5qGxf2mSUIp1lfGnfKNrRHpvVg== cacache@^11.0.1, cacache@^11.0.2: version "11.2.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.2.0.tgz#617bdc0b02844af56310e411c0878941d5739965" + integrity sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ== dependencies: bluebird "^3.5.1" chownr "^1.0.1" @@ -1636,6 +1989,7 @@ cacache@^11.0.1, cacache@^11.0.2: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1650,6 +2004,7 @@ cache-base@^1.0.1: caching-transform@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" + integrity sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE= dependencies: md5-hex "^1.2.0" mkdirp "^0.5.1" @@ -1658,10 +2013,12 @@ caching-transform@^1.0.0: call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= dependencies: camelcase "^2.0.0" map-obj "^1.0.0" @@ -1669,6 +2026,7 @@ camelcase-keys@^2.0.0: camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: camelcase "^4.1.0" map-obj "^2.0.0" @@ -1677,14 +2035,17 @@ camelcase-keys@^4.0.0: camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= caniuse-api@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= dependencies: browserslist "^1.3.6" caniuse-db "^1.0.30000529" @@ -1694,6 +2055,7 @@ caniuse-api@^1.5.2: caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" caniuse-lite "^1.0.0" @@ -1701,20 +2063,24 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000886" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000886.tgz#a0b962dbaccb6d2fc795541bb9ec524582bf433b" + version "1.0.30000892" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000892.tgz#3a03ecec4283caa5dac49facf024d13113c4499f" + integrity sha512-as/DXjiFJg051+GSJLmkY0hckkVsmTB4nuDUPLwK1sMHk94XsYuocNJuU0wdOpobwI/3sqNeW5ETebvdPGvwBQ== -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000884: - version "1.0.30000886" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000886.tgz#2127186c4f57da10d3ba26fc3e87dce4a5ddd3ae" +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000890: + version "1.0.30000892" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000892.tgz#344d2b51ee3ff5977537da4aa449c90eec40b759" + integrity sha512-X9rxMaWZNbJB5qjkDqPtNv/yfViTeUL6ILk0QJNxLV3OhKC5Acn5vxsuUvllR6B48mog8lmS+whwHq/QIYSL9w== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= chalk@^1.1.3: version "1.1.3" - resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -1725,6 +2091,7 @@ chalk@^1.1.3: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -1733,10 +2100,12 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4 chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -1756,14 +2125,17 @@ chokidar@^2.0.3: chownr@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== ci-info@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -1771,12 +2143,14 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== dependencies: chalk "^1.1.3" class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -1786,20 +2160,24 @@ class-utils@^0.3.5: cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-spinners@^1.1.0: version "1.3.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" + integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -1808,18 +2186,22 @@ cliui@^4.0.0: clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= clones@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/clones/-/clones-1.1.0.tgz#87e904132d6140c5c0b72006c08c0d05bd7b63b3" + integrity sha1-h+kEEy1hQMXAtyAGwIwNBb17Y7M= cmd-shim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + integrity sha1-b8vamUg6j9FdfTChlspp1oii79s= dependencies: graceful-fs "^4.1.2" mkdirp "~0.5.0" @@ -1827,26 +2209,31 @@ cmd-shim@^2.0.2: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= coa@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= dependencies: q "^1.1.2" coa@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" + integrity sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ== dependencies: q "^1.1.2" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -1854,26 +2241,31 @@ collection-visit@^1.0.0: color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= dependencies: color-name "^1.0.0" color-string@^1.5.2: version "1.5.3" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" @@ -1881,14 +2273,16 @@ color-string@^1.5.2: color@^0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= dependencies: clone "^1.0.2" color-convert "^1.3.0" color-string "^0.3.0" color@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" + version "3.1.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" + integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== dependencies: color-convert "^1.9.1" color-string "^1.5.2" @@ -1896,6 +2290,7 @@ color@^3.0.0: colormin@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= dependencies: color "^0.11.0" css-color-names "0.0.4" @@ -1904,49 +2299,59 @@ colormin@^1.0.5: colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= dependencies: strip-ansi "^3.0.0" wcwidth "^1.0.0" combined-stream@1.0.6: version "1.0.6" - resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= dependencies: delayed-stream "~1.0.0" combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== dependencies: delayed-stream "~1.0.0" command-exists@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.7.tgz#16828f0c3ff2b0c58805861ef211b64fc15692a8" - -commander@*, commander@^2.11.0, commander@^2.12.1: - version "2.18.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + version "1.2.8" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" + integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw== commander@2.15.1: version "2.15.1" - resolved "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + +commander@^2.11.0, commander@^2.12.1, commander@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-func@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= dependencies: array-ify "^1.0.0" dot-prop "^3.0.0" @@ -1954,14 +2359,17 @@ compare-func@^1.3.1: component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" @@ -1971,6 +2379,7 @@ concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@~1.6.0: config-chain@^1.1.11, config-chain@~1.1.5: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -1978,35 +2387,40 @@ config-chain@^1.1.11, config-chain@~1.1.5: console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -conventional-changelog-angular@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" +conventional-changelog-angular@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.1.tgz#f96431b76de453333a909decd02b15cb5bd2d364" + integrity sha512-q4ylJ68fWZDdrFC9z4zKcf97HW6hp7Mo2YlqD4owfXhecFKy/PJCU/1oVFF4TqochchChqmZ0Vb0e0g8/MKNlA== dependencies: compare-func "^1.3.1" q "^1.5.1" -conventional-changelog-core@^2.0.5: - version "2.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287" +conventional-changelog-core@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.1.0.tgz#96a81bb3301b4b2a3dc2851cc54c5fb674ac1942" + integrity sha512-bcZkcFXkqVgG2W8m/1wjlp2wn/BKDcrPgw3/mvSEQtzs8Pax8JbAPFpEQReHY92+EKNNXC67wLA8y2xcNx0rDA== dependencies: - conventional-changelog-writer "^3.0.9" - conventional-commits-parser "^2.1.7" + conventional-changelog-writer "^4.0.0" + conventional-commits-parser "^3.0.0" dateformat "^3.0.0" get-pkg-repo "^1.0.0" - git-raw-commits "^1.3.6" + git-raw-commits "^2.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^1.3.6" + git-semver-tags "^2.0.0" lodash "^4.2.1" normalize-package-data "^2.3.5" q "^1.5.1" @@ -2014,16 +2428,18 @@ conventional-changelog-core@^2.0.5: read-pkg-up "^1.0.1" through2 "^2.0.0" -conventional-changelog-preset-loader@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373" +conventional-changelog-preset-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.1.tgz#d134734e0cc1b91b88b30586c5991f31442029f1" + integrity sha512-HiSfhXNzAzG9klIqJaA97MMiNBR4js+53g4Px0k7tgKeCNVXmrDrm+CY+nIqcmG5NVngEPf8rAr7iji1TWW7zg== -conventional-changelog-writer@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz#4aecdfef33ff2a53bb0cf3b8071ce21f0e994634" +conventional-changelog-writer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz#3ed983c8ef6a3aa51fe44e82c9c75e86f1b5aa42" + integrity sha512-hMZPe0AQ6Bi05epeK/7hz80xxk59nPA5z/b63TOHq2wigM0/akreOc8N4Jam5b9nFgKWX1e9PdPv2ewgW6bcfg== dependencies: compare-func "^1.3.1" - conventional-commits-filter "^1.1.6" + conventional-commits-filter "^2.0.0" dateformat "^3.0.0" handlebars "^4.0.2" json-stringify-safe "^5.0.1" @@ -2033,16 +2449,18 @@ conventional-changelog-writer@^3.0.9: split "^1.0.0" through2 "^2.0.0" -conventional-commits-filter@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831" +conventional-commits-filter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz#a0ce1d1ff7a1dd7fab36bee8e8256d348d135651" + integrity sha512-Cfl0j1/NquB/TMVx7Wrmyq7uRM+/rPQbtVVGwzfkhZ6/yH6fcMmP0Q/9044TBZPTNdGzm46vXFXL14wbET0/Mg== dependencies: is-subset "^0.1.1" modify-values "^1.0.0" -conventional-commits-parser@^2.1.7: - version "2.1.7" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e" +conventional-commits-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz#7f604549a50bd8f60443fbe515484b1c2f06a5c4" + integrity sha512-GWh71U26BLWgMykCp+VghZ4s64wVbtseECcKQ/PvcPZR2cUnz+FUc2J9KjxNl7/ZbCxST8R03c9fc+Vi0umS9Q== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" @@ -2052,28 +2470,31 @@ conventional-commits-parser@^2.1.7: through2 "^2.0.0" trim-off-newlines "^1.0.0" -conventional-recommended-bump@^2.0.6: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-2.0.9.tgz#7392421e7d0e3515f3df2040572a23cc73a68a93" +conventional-recommended-bump@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-4.0.1.tgz#304a45a412cfec050a10ea2e7e4a89320eaf3991" + integrity sha512-9waJvW01TUs4HQJ3khwGSSlTlKsY+5u7OrxHL+oWEoGNvaNO/0qL6qqnhS3J0Fq9fNKA9bmlf5cOXjCQoW+I4Q== dependencies: concat-stream "^1.6.0" - conventional-changelog-preset-loader "^1.1.8" - conventional-commits-filter "^1.1.6" - conventional-commits-parser "^2.1.7" - git-raw-commits "^1.3.6" - git-semver-tags "^1.3.6" + conventional-changelog-preset-loader "^2.0.1" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.0" + git-raw-commits "^2.0.0" + git-semver-tags "^2.0.0" meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== dependencies: safe-buffer "~5.1.1" copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -2085,18 +2506,22 @@ copy-concurrently@^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" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== 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" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.0.0, cosmiconfig@^5.0.2: version "5.0.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" @@ -2105,13 +2530,15 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.0.2: create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" - resolved "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -2121,7 +2548,8 @@ create-hash@^1.1.0, create-hash@^1.1.2: create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.7" - resolved "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2133,6 +2561,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= dependencies: lru-cache "^4.0.1" which "^1.2.9" @@ -2140,6 +2569,7 @@ cross-spawn@^4: cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -2148,6 +2578,7 @@ cross-spawn@^5.0.1: cross-spawn@^6.0.0, cross-spawn@^6.0.4: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -2158,6 +2589,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.4: crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -2174,21 +2606,25 @@ crypto-browserify@^3.11.0: css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= -css-declaration-sorter@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-3.0.1.tgz#d0e3056b0fd88dc1ea9dceff435adbe9c702a7f8" +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== dependencies: - postcss "^6.0.0" + postcss "^7.0.1" timsort "^0.3.0" css-select-base-adapter@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz#0102b3d14630df86c3eb9fa9f5456270106cf990" + integrity sha1-AQKz0UYw34bD65+p9UVicBBs+ZA= css-select@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.0.tgz#7aa2921392114831f68db175c0b6a555df74bbd5" + integrity sha512-MGhoq1S9EyPgZIGnts8Yz5WwUOyHmPMdlqeifsYs/xFX7AAm3hY0RJe1dqVlXtYPI66Nsk39R/sa5/ree6L2qg== dependencies: boolbase "^1.0.0" css-what "2.1" @@ -2198,6 +2634,7 @@ css-select@^2.0.0: css-tree@1.0.0-alpha.28: version "1.0.0-alpha.28" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" + integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== dependencies: mdn-data "~1.1.0" source-map "^0.5.3" @@ -2205,6 +2642,7 @@ css-tree@1.0.0-alpha.28: css-tree@1.0.0-alpha.29: version "1.0.0-alpha.29" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== dependencies: mdn-data "~1.1.0" source-map "^0.5.3" @@ -2212,71 +2650,80 @@ css-tree@1.0.0-alpha.29: css-unit-converter@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= css-url-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" + integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= -cssnano-preset-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.0.tgz#c334287b4f7d49fb2d170a92f9214655788e3b6b" - dependencies: - css-declaration-sorter "^3.0.0" - cssnano-util-raw-cache "^4.0.0" - postcss "^6.0.0" - postcss-calc "^6.0.0" - postcss-colormin "^4.0.0" - postcss-convert-values "^4.0.0" - postcss-discard-comments "^4.0.0" - postcss-discard-duplicates "^4.0.0" - postcss-discard-empty "^4.0.0" - postcss-discard-overridden "^4.0.0" - postcss-merge-longhand "^4.0.0" - postcss-merge-rules "^4.0.0" - postcss-minify-font-values "^4.0.0" - postcss-minify-gradients "^4.0.0" - postcss-minify-params "^4.0.0" - postcss-minify-selectors "^4.0.0" - postcss-normalize-charset "^4.0.0" - postcss-normalize-display-values "^4.0.0" - postcss-normalize-positions "^4.0.0" - postcss-normalize-repeat-style "^4.0.0" - postcss-normalize-string "^4.0.0" - postcss-normalize-timing-functions "^4.0.0" - postcss-normalize-unicode "^4.0.0" - postcss-normalize-url "^4.0.0" - postcss-normalize-whitespace "^4.0.0" - postcss-ordered-values "^4.0.0" - postcss-reduce-initial "^4.0.0" - postcss-reduce-transforms "^4.0.0" - postcss-svgo "^4.0.0" - postcss-unique-selectors "^4.0.0" +cssnano-preset-default@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.2.tgz#1de3f27e73b7f0fbf87c1d7fd7a63ae980ac3774" + integrity sha512-zO9PeP84l1E4kbrdyF7NSLtA/JrJY1paX5FHy5+w/ziIXO2kDqDMfJ/mosXkaHHSa3RPiIY3eB6aEgwx3IiGqA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^6.0.2" + postcss-colormin "^4.0.2" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.1" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.6" + postcss-merge-rules "^4.0.2" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.1" + postcss-minify-params "^4.0.1" + postcss-minify-selectors "^4.0.1" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.1" + postcss-normalize-positions "^4.0.1" + postcss-normalize-repeat-style "^4.0.1" + postcss-normalize-string "^4.0.1" + postcss-normalize-timing-functions "^4.0.1" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.1" + postcss-ordered-values "^4.1.1" + postcss-reduce-initial "^4.0.2" + postcss-reduce-transforms "^4.0.1" + postcss-svgo "^4.0.1" + postcss-unique-selectors "^4.0.1" cssnano-util-get-arguments@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= cssnano-util-get-match@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= -cssnano-util-raw-cache@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.0.tgz#be0a2856e25f185f5f7a2bcc0624e28b7f179a9f" +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" cssnano-util-same-parent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.0.tgz#d2a3de1039aa98bc4ec25001fa050330c2a16dac" + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== cssnano@^3.4.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= dependencies: autoprefixer "^6.3.1" decamelize "^1.1.2" @@ -2312,23 +2759,26 @@ cssnano@^3.4.0: postcss-zindex "^2.0.1" cssnano@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.0.tgz#682c37b84b9b7df616450a5a8dc9269b9bd10734" + version "4.1.4" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.4.tgz#55b71e3d8f5451dd3edc7955673415c98795788f" + integrity sha512-wP0wbOM9oqsek14CiNRYrK9N3w3jgadtGZKHXysgC/OMVpy0KZgWVPdNqODSZbz7txO9Gekr9taOfcCgL0pOOw== dependencies: cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.0" + cssnano-preset-default "^4.0.2" is-resolvable "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" csso@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== dependencies: css-tree "1.0.0-alpha.29" csso@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= dependencies: clap "^1.0.9" source-map "^0.5.3" @@ -2336,36 +2786,43 @@ csso@~2.3.1: currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= dependencies: array-find-index "^1.0.1" cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= dependencies: number-is-nan "^1.0.0" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== deasync@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.13.tgz#815c2b69bbd1117cae570152cd895661c09f20ea" + integrity sha512-/6ngYM7AapueqLtvOzjv9+11N2fHDSrkxeMF1YPE20WIfaaawiBg+HZH1E5lHrcJxlKR42t6XPOEmMmqcAsU1g== dependencies: bindings "~1.2.1" nan "^2.0.7" @@ -2373,32 +2830,38 @@ deasync@^0.1.13: debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" debug@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407" + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -2406,62 +2869,74 @@ decamelize-keys@^1.0.0: decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decamelize@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== dependencies: xregexp "4.0.0" 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" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= dependencies: strip-bom "^2.0.0" defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -2469,22 +2944,27 @@ define-property@^2.0.2: defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -2492,24 +2972,22 @@ des.js@^1.0.0: destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" wrappy "1" @@ -2517,10 +2995,12 @@ dezalgo@^1.0.0: diff@3.5.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diffie-hellman@^5.0.0: version "5.0.3" - resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -2529,6 +3009,7 @@ diffie-hellman@^5.0.0: dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== dependencies: arrify "^1.0.1" path-type "^3.0.0" @@ -2536,6 +3017,7 @@ dir-glob@^2.0.0: dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= dependencies: domelementtype "~1.1.1" entities "~1.1.1" @@ -2543,24 +3025,29 @@ dom-serializer@0: domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== dependencies: domelementtype "1" domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" domelementtype "1" @@ -2568,32 +3055,43 @@ domutils@^1.5.1, domutils@^1.7.0: dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= dependencies: is-obj "^1.0.0" dot-prop@^4.1.1, dot-prop@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" +dotenv-expand@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" + integrity sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU= + dotenv@^5.0.0: version "5.0.1" - resolved "http://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" duplexer@^0.1.1: version "0.1.1" - resolved "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + version "3.6.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" + integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -2603,32 +3101,37 @@ duplexify@^3.4.2, duplexify@^3.6.0: ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" editorconfig@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.0.tgz#b6dd4a0b6b9e76ce48e066bdc15381aebb8804fd" + version "0.15.2" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.2.tgz#047be983abb9ab3c2eefe5199cb2b7c5689f0702" + integrity sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ== dependencies: - "@types/commander" "^2.11.0" - "@types/semver" "^5.4.0" - commander "^2.11.0" - lru-cache "^4.1.1" - semver "^5.4.1" + "@types/node" "^10.11.7" + "@types/semver" "^5.5.0" + commander "^2.19.0" + lru-cache "^4.1.3" + semver "^5.6.0" sigmund "^1.0.1" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62: - version "1.3.70" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz#ded377256d92d81b4257d36c65aa890274afcfd2" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.79: + version "1.3.79" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.79.tgz#774718f06284a4bf8f578ac67e74508fe659f13a" + integrity sha512-LQdY3j4PxuUl6xfxiFruTSlCniTrTrzAd8/HfsLEMi0PUpaQ0Iy+Pr4N4VllDYjs0Hyu2lkTbvzqlG+PX9NsNw== elliptic@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2641,36 +3144,43 @@ elliptic@^6.0.0: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" 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" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.5.1, es-abstract@^1.6.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -2679,34 +3189,40 @@ es-abstract@^1.5.1, es-abstract@^1.6.1: is-regex "^1.0.4" 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" + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: - is-callable "^1.1.1" + is-callable "^1.1.4" is-date-object "^1.0.1" - is-symbol "^1.0.1" + is-symbol "^1.0.2" es6-promise@^4.0.3: version "4.2.5" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" + integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg== es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 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" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.8.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -2718,6 +3234,7 @@ escodegen@^1.8.1: escodegen@~1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + integrity sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -2729,34 +3246,42 @@ escodegen@~1.9.0: esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -esutils@^2.0.2: +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= 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" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -2764,6 +3289,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: execa@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== dependencies: cross-spawn "^6.0.0" get-stream "^3.0.0" @@ -2776,6 +3302,7 @@ execa@^0.10.0: execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -2788,6 +3315,7 @@ execa@^0.7.0: execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" @@ -2800,12 +3328,14 @@ execa@^1.0.0: expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -2818,18 +3348,21 @@ expand-brackets@^2.1.4: expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -2837,10 +3370,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" @@ -2849,12 +3384,14 @@ external-editor@^3.0.0: extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -2868,14 +3405,17 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= falafel@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" + integrity sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw= dependencies: acorn "^5.0.0" foreach "^2.0.5" @@ -2885,10 +3425,12 @@ falafel@^2.1.0: fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= fast-glob@^2.0.2, fast-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + version "2.2.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.3.tgz#d09d378e9ef6b0076a0fa1ba7519d9d4d9699c28" + integrity sha512-NiX+JXjnx43RzvVFwRWfPKo4U+1BrK5pJPsHQdKMlLoFHrrGktXglQhHliSihWAq+m1z6fHk3uwGHrtRbS9vLA== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.0.1" @@ -2900,32 +3442,39 @@ fast-glob@^2.0.2, fast-glob@^2.2.2: 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" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= figgy-pudding@^3.1.0, figgy-pudding@^3.2.1, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= filesize@^3.6.0: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -2936,6 +3485,7 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -2945,6 +3495,7 @@ fill-range@^4.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" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= dependencies: commondir "^1.0.1" mkdirp "^0.5.1" @@ -2953,6 +3504,7 @@ find-cache-dir@^0.1.1: find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -2960,22 +3512,26 @@ find-up@^1.0.0: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= 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" + integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== dependencies: inherits "^2.0.1" readable-stream "^2.0.4" @@ -2983,20 +3539,24 @@ flush-write-stream@^1.0.0: 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" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= 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" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= foreground-child@^1.5.3, foreground-child@^1.5.6: version "1.5.6" - resolved "http://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= dependencies: cross-spawn "^4" signal-exit "^3.0.0" @@ -3004,10 +3564,12 @@ foreground-child@^1.5.3, foreground-child@^1.5.6: forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk= dependencies: asynckit "^0.4.0" combined-stream "1.0.6" @@ -3016,23 +3578,36 @@ form-data@~2.3.2: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 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" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" + integrity sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -3041,12 +3616,14 @@ fs-extra@^7.0.0: fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: minipass "^2.2.1" 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" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -3056,10 +3633,12 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== dependencies: nan "^2.9.2" node-pre-gyp "^0.10.0" @@ -3067,25 +3646,29 @@ fsevents@^1.2.2: fstream@^1.0.0, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -fswatcher-child@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fswatcher-child/-/fswatcher-child-1.1.0.tgz#af1650590f897532431731247fd6270f333912ff" +fswatcher-child@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fswatcher-child/-/fswatcher-child-1.1.1.tgz#264dd95f9c4b5f8615327d7d7567884591846b9b" + integrity sha512-FVDjVhR71TkJ+ud6vnRwCHvCgK9drGRdimWcTLqw8iN88uL5tTX+/xrwigJdcuQGrWYo3TRw9gRzk9xqR0UPPQ== dependencies: chokidar "^2.0.3" function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -3099,14 +3682,17 @@ gauge@~2.7.3: genfun@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" + integrity sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E= get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= dependencies: hosted-git-info "^2.1.4" meow "^3.3.0" @@ -3117,34 +3703,41 @@ get-pkg-repo@^1.0.0: get-port@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-stream@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.0.0.tgz#9e074cb898bd2b9ebabb445a1766d7f43576d977" + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" -git-raw-commits@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff" +git-raw-commits@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== dependencies: dargs "^4.0.1" lodash.template "^4.0.2" @@ -3155,13 +3748,15 @@ git-raw-commits@^1.3.6: git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.6.tgz#357ea01f7280794fe0927f2806bee6414d2caba5" +git-semver-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.0.tgz#c218fd895bdf8e8e02f6bde555b2c3893ac73cd7" + integrity sha512-lSgFc3zQTul31nFje2Q8XdNcTOI6B4I3mJRPCgFzHQQLfxfqdWTYzdtCaynkK5Xmb2wQlSJoKolhXJ1VhKROnQ== dependencies: meow "^4.0.0" semver "^5.5.0" @@ -3169,12 +3764,14 @@ git-semver-tags@^1.3.6: gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= dependencies: ini "^1.3.2" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -3182,12 +3779,14 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -3195,10 +3794,12 @@ glob-parent@^3.1.0: glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3210,6 +3811,7 @@ glob@7.1.2: glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3219,16 +3821,14 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: path-is-absolute "^1.0.0" globals@^11.1.0: - version "11.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + version "11.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" + integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA== globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== dependencies: array-union "^1.0.1" dir-glob "^2.0.0" @@ -3241,10 +3841,12 @@ globby@^8.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" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= grapheme-breaker@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz#5b9e6b78c3832452d2ba2bb1cb830f96276410ac" + integrity sha1-W55reMODJFLSuiuxy4MPlidkEKw= dependencies: brfs "^1.2.0" unicode-trie "^0.3.1" @@ -3252,10 +3854,12 @@ grapheme-breaker@^0.3.2: growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: version "4.0.12" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== dependencies: async "^2.5.0" optimist "^0.6.1" @@ -3266,10 +3870,12 @@ handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA== dependencies: ajv "^5.3.0" har-schema "^2.0.0" @@ -3277,28 +3883,34 @@ har-validator@~5.1.0: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -3307,6 +3919,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -3315,10 +3928,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -3326,12 +3941,14 @@ has-values@^1.0.0: has@^1.0.0, has@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -3339,6 +3956,7 @@ hash-base@^3.0.0: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.5" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" + integrity sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" @@ -3346,49 +3964,51 @@ hash.js@^1.0.0, hash.js@^1.0.3: he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== highlight.js@^9.0.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + version "9.13.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.0.tgz#ee96d5c5f4c456e440f2dbdb2752211dff56f671" + integrity sha512-2B90kcNnErqRTmzdZw6IPLEC9CdsiIMhj+r8L3LJKRCgtEJ+LY5yzWuQCVnADTI0wwocQinFzaaL/JjTQNqI/g== hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -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" - hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== hsl-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= hsla-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== htmlnano@^0.1.9: version "0.1.10" resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-0.1.10.tgz#a0a548eb4c76ae2cf2423ec7a25c881734d3dea6" + integrity sha512-eTEUzz8VdWYp+w/KUdb99kwao4reR64epUySyZkQeepcyzPQ2n2EPWzibf6QDxmkGy10Kr+CKxYqI3izSbmhJQ== dependencies: cssnano "^3.4.0" object-assign "^4.0.1" @@ -3400,6 +4020,7 @@ htmlnano@^0.1.9: htmlparser2@^3.9.2: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= dependencies: domelementtype "^1.3.0" domhandler "^2.3.0" @@ -3411,10 +4032,12 @@ htmlparser2@^3.9.2: 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" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-errors@~1.6.2: version "1.6.3" - resolved "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: depd "~1.1.2" inherits "2.0.3" @@ -3424,6 +4047,7 @@ http-errors@~1.6.2: http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: agent-base "4" debug "3.1.0" @@ -3431,6 +4055,7 @@ http-proxy-agent@^2.1.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -3439,10 +4064,12 @@ http-signature@~1.2.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== dependencies: agent-base "^4.1.0" debug "^3.1.0" @@ -3450,36 +4077,43 @@ https-proxy-agent@^2.2.1: humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.4: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: minimatch "^3.0.4" ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== dependencies: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" @@ -3487,28 +4121,34 @@ import-local@^1.0.0: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= 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" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -3516,18 +4156,22 @@ inflight@^1.0.4: 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" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= 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" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== init-package-json@^1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== dependencies: glob "^7.1.1" npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" @@ -3541,6 +4185,7 @@ init-package-json@^1.10.3: inquirer@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -3559,78 +4204,94 @@ inquirer@^6.2.0: interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= invariant@^2.2.0, invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= 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" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-arrayish@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-builtin-module@^1.0.0: version "1.0.0" - resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: +is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== dependencies: ci-info "^1.5.0" is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= dependencies: css-color-names "^0.0.4" hex-color-regex "^1.1.0" @@ -3642,22 +4303,26 @@ is-color-stop@^1.0.0: is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 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" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -3666,6 +4331,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -3674,216 +4340,261 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= 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" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 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" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= 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" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-obj@^1.0.0: version "1.0.1" - resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 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" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= dependencies: html-comment-regex "^1.1.0" is-svg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== dependencies: html-comment-regex "^1.1.0" -is-symbol@^1.0.1: +is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== dependencies: has-symbols "^1.0.0" 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" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-url@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 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" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0, isobject@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== istanbul-lib-coverage@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#2aee0e073ad8c5f6a0b00e0dfbf52b4667472eda" + integrity sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA== istanbul-lib-hook@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== dependencies: append-transform "^0.4.0" istanbul-lib-instrument@^2.1.0: version "2.3.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz#b287cbae2b5f65f3567b05e2e29b275eaf92d25e" + integrity sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q== dependencies: "@babel/generator" "7.0.0-beta.51" "@babel/parser" "7.0.0-beta.51" @@ -3896,6 +4607,7 @@ istanbul-lib-instrument@^2.1.0: istanbul-lib-report@^1.1.3: version "1.1.5" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== dependencies: istanbul-lib-coverage "^1.2.1" mkdirp "^0.5.1" @@ -3905,6 +4617,7 @@ istanbul-lib-report@^1.1.3: istanbul-lib-source-maps@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== dependencies: debug "^3.1.0" istanbul-lib-coverage "^1.2.1" @@ -3915,33 +4628,44 @@ istanbul-lib-source-maps@^1.2.5: istanbul-reports@^1.4.1: version "1.5.1" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== dependencies: handlebars "^4.0.3" js-base64@^2.1.9: version "2.4.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" + integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ== js-beautify@^1.7.5: - version "1.8.6" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.8.6.tgz#6a7e61e47a6e45fb58c5e22499eed350f8607d98" + version "1.8.7" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.8.7.tgz#d87100f714aeb3c388bce9ef011442fc07bda93a" + integrity sha512-yhAMCTv0L9GNg6Gql7i+g4C1z9rQhfHXy4J0TGYFoBzzHR4reWYS573gkRrPuE58dYOH451LmBeAb8L1pLEfdA== dependencies: config-chain "~1.1.5" editorconfig "^0.15.0" mkdirp "~0.5.0" nopt "~4.0.1" +js-levenshtein@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" + integrity sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow== + 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" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.10.0, js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -3949,6 +4673,7 @@ js-yaml@^3.10.0, js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= dependencies: argparse "^1.0.7" esprima "^2.6.0" @@ -3956,58 +4681,66 @@ js-yaml@~3.7.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsesc@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 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" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.1: +json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -4017,60 +4750,68 @@ jsprim@^1.2.2: 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" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: invert-kv "^2.0.0" lerna@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.4.0.tgz#c1403852b4b3fa986072de11d7f549604fd41775" + version "3.4.3" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.4.3.tgz#501454efb453c65c305802d370ee337f7298787e" + integrity sha512-tWq1LvpHqkyB+FaJCmkEweivr88yShDMmauofPVdh0M5gU1cVucszYnIgWafulKYu2LMQ3IfUMUU5Pp3+MvADQ== dependencies: - "@lerna/add" "^3.3.2" - "@lerna/bootstrap" "^3.3.2" - "@lerna/changed" "^3.3.2" + "@lerna/add" "^3.4.1" + "@lerna/bootstrap" "^3.4.1" + "@lerna/changed" "^3.4.1" "@lerna/clean" "^3.3.2" "@lerna/cli" "^3.2.0" - "@lerna/create" "^3.3.1" + "@lerna/create" "^3.4.1" "@lerna/diff" "^3.3.0" "@lerna/exec" "^3.3.2" "@lerna/import" "^3.3.1" "@lerna/init" "^3.3.0" "@lerna/link" "^3.3.0" "@lerna/list" "^3.3.2" - "@lerna/publish" "^3.4.0" + "@lerna/publish" "^3.4.3" "@lerna/run" "^3.3.2" - "@lerna/version" "^3.3.2" + "@lerna/version" "^3.4.1" import-local "^1.0.0" npmlog "^4.1.2" levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -4078,6 +4819,7 @@ levn@~0.3.0: libnpmaccess@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.0.tgz#33cc9c8a5cb53e87d06bf2e547c2eba974f619af" + integrity sha512-SiE4AZAzMpD7pmmXHfgD7rof8QIQGoKaeyAS8exgx2CKA6tzRTbRljq1xM4Tgj8/tIg+KBJPJWkR0ifqKT3irQ== dependencies: aproba "^2.0.0" get-stream "^4.0.0" @@ -4086,7 +4828,8 @@ libnpmaccess@^3.0.0: load-json-file@^1.0.0: version "1.1.0" - resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -4097,6 +4840,7 @@ load-json-file@^1.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -4106,6 +4850,7 @@ load-json-file@^4.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -4113,6 +4858,7 @@ locate-path@^2.0.0: locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" @@ -4120,26 +4866,32 @@ locate-path@^3.0.0: lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= lodash.clone@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" + integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash.template@^4.0.2: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= dependencies: lodash._reinterpolate "~3.0.0" lodash.templatesettings "^4.0.0" @@ -4147,58 +4899,68 @@ lodash.template@^4.0.2: lodash.templatesettings@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= dependencies: lodash._reinterpolate "~3.0.0" lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: +lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" magic-string@^0.22.4: version "0.22.5" - resolved "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== dependencies: vlq "^0.2.2" make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-fetch-happen@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" + integrity sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ== dependencies: agentkeepalive "^3.4.1" cacache "^11.0.1" @@ -4215,69 +4977,89 @@ make-fetch-happen@^4.0.1: map-age-cleaner@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" + integrity sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ== dependencies: p-defer "^1.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" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" +marked@^0.3.17: + version "0.3.19" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" + integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== + marked@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/marked/-/marked-0.4.0.tgz#9ad2c2a7a1791f10a852e0112f77b571dce10c66" + integrity sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw== math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= math-random@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= md5-hex@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" + integrity sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ= dependencies: md5-o-matic "^0.1.1" md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" + integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" mdn-data@~1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" mem@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" + integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA== dependencies: map-age-cleaner "^0.1.1" mimic-fn "^1.0.0" @@ -4286,6 +5068,7 @@ mem@^4.0.0: meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= dependencies: camelcase-keys "^2.0.0" decamelize "^1.1.2" @@ -4301,6 +5084,7 @@ meow@^3.3.0: meow@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== dependencies: camelcase-keys "^4.0.0" decamelize-keys "^1.0.0" @@ -4315,22 +5099,26 @@ meow@^4.0.0: merge-source-map@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" + integrity sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= dependencies: source-map "^0.5.6" merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== dependencies: source-map "^0.6.1" merge2@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + version "1.2.3" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" + integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -4349,6 +5137,7 @@ micromatch@^2.3.11: micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -4367,6 +5156,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" @@ -4374,70 +5164,84 @@ miller-rabin@^4.0.0: mime-db@~1.36.0: version "1.36.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw== mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.20" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A== dependencies: mime-db "~1.36.0" mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" minimist@0.0.8: version "0.0.8" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" - resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@~0.0.1: version "0.0.10" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + version "1.1.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42" + integrity sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg== dependencies: minipass "^2.2.1" mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -4453,19 +5257,22 @@ mississippi@^3.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" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: 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: version "0.5.1" - resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" mocha@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== dependencies: browser-stdout "1.3.1" commander "2.15.1" @@ -4482,10 +5289,12 @@ mocha@^5.2.0: modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -4497,14 +5306,17 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.0.0, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multimatch@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= dependencies: array-differ "^1.0.0" array-union "^1.0.1" @@ -4514,14 +5326,17 @@ multimatch@^2.1.0: mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.0.7, nan@^2.9.2: - version "2.11.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" + version "2.11.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" + integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -4536,8 +5351,9 @@ nanomatch@^1.2.9: to-regex "^3.0.1" needle@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.3.tgz#c1b04da378cd634d8befe2de965dc2cfb0fd65ca" + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== dependencies: debug "^2.1.2" iconv-lite "^0.4.4" @@ -4546,10 +5362,12 @@ needle@^2.2.1: nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== dependencies: encoding "^0.1.11" json-parse-better-errors "^1.0.0" @@ -4558,10 +5376,12 @@ node-fetch-npm@^2.0.2: node-forge@^0.7.1: version "0.7.6" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz#fdf3b418aee1f94f0ef642cd63486c77ca9724ac" + integrity sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw== node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -4579,6 +5399,7 @@ node-gyp@^3.8.0: 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" + integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -4607,6 +5428,7 @@ node-libs-browser@^2.0.0: node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -4619,21 +5441,24 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.0.0-alpha.11: - version "1.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a" +node-releases@^1.0.0-alpha.14: + version "1.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.14.tgz#da9e2780add4bbb59ad890af9e2018a1d9c0034b" + integrity sha512-G8nnF9cP9QPP/jUmYWw/uUUhumHmkm+X/EarCugYFjYm2uXRMFeOD6CVT3RLdoyCvDUNy51nirGfUItKWs/S1g== dependencies: semver "^5.3.0" "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" @@ -4641,6 +5466,7 @@ nopt@^4.0.1, nopt@~4.0.1: normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -4650,16 +5476,19 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- 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" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" @@ -4669,14 +5498,17 @@ normalize-url@^1.4.0: normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== npm-lifecycle@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz#1eda2eedb82db929e3a0c50341ab0aad140ed569" + integrity sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g== dependencies: byline "^5.0.0" graceful-fs "^4.1.11" @@ -4690,6 +5522,7 @@ npm-lifecycle@^2.0.0: "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" + integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== dependencies: hosted-git-info "^2.6.0" osenv "^0.1.5" @@ -4697,8 +5530,9 @@ npm-lifecycle@^2.0.0: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.10, npm-packlist@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + version "1.1.12" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" + integrity sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -4706,6 +5540,7 @@ npm-packlist@^1.1.10, npm-packlist@^1.1.6: npm-pick-manifest@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz#dc381bdd670c35d81655e1d5a94aa3dd4d87fce5" + integrity sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ== dependencies: npm-package-arg "^6.0.0" semver "^5.4.1" @@ -4713,6 +5548,7 @@ npm-pick-manifest@^2.1.0: npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz#aa7d9a7c92aff94f48dba0984bdef4bd131c88cc" + integrity sha512-hrw8UMD+Nob3Kl3h8Z/YjmKamb1gf7D1ZZch2otrIXM3uFLB5vjEY6DhMlq80z/zZet6eETLbOXcuQudCB3Zpw== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -4724,12 +5560,14 @@ npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.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" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -4739,20 +5577,24 @@ npm-run-path@^2.0.0: nth-check@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= dependencies: boolbase "~1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= 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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nyc@^12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/nyc/-/nyc-12.0.2.tgz#8a4a4ed690966c11ec587ff87eea0c12c974ba99" + integrity sha1-ikpO1pCWbBHsWH/4fuoMEsl0upk= dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -4785,14 +5627,17 @@ nyc@^12.0.2: oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -4801,20 +5646,24 @@ object-copy@^0.1.0: object-inspect@~1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" + integrity sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw== object-keys@^1.0.12, object-keys@^1.0.6: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= dependencies: define-properties "^1.1.2" es-abstract "^1.5.1" @@ -4822,6 +5671,7 @@ object.getownpropertydescriptors@^2.0.3: object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" @@ -4829,12 +5679,14 @@ object.omit@^2.0.0: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" object.values@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= dependencies: define-properties "^1.1.2" es-abstract "^1.6.1" @@ -4844,30 +5696,35 @@ object.values@^1.0.4: on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opn@^5.1.0: version "5.4.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" + integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== 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" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -4875,6 +5732,7 @@ optimist@^0.6.1: optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -4886,6 +5744,7 @@ optionator@^0.8.1: ora@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" + integrity sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA== dependencies: chalk "^2.3.1" cli-cursor "^2.1.0" @@ -4897,14 +5756,17 @@ ora@^2.1.0: os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" @@ -4913,18 +5775,21 @@ os-locale@^2.0.0: os-locale@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" + integrity sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw== dependencies: execa "^0.10.0" lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@0, osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -4932,74 +5797,89 @@ osenv@0, osenv@^0.1.4, osenv@^0.1.5: p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 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" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-map-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= dependencies: p-reduce "^1.0.0" p-map@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== p-waterfall@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= dependencies: p-reduce "^1.0.0" pacote@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.1.0.tgz#59810859bbd72984dcb267269259375d32f391e5" + integrity sha512-AFXaSWhOtQf3jHqEvg+ZYH/dfT8TKq6TKspJ4qEFwVVuh5aGvMIk6SNF8vqfzz+cBceDIs9drOcpBbrPai7i+g== dependencies: bluebird "^3.5.1" cacache "^11.0.2" @@ -5032,36 +5912,42 @@ pacote@^9.1.0: pako@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== parallel-transform@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= dependencies: cyclist "~0.2.2" inherits "^2.0.3" readable-stream "^2.1.5" parcel-bundler@^1.9.7: - version "1.9.7" - resolved "https://registry.yarnpkg.com/parcel-bundler/-/parcel-bundler-1.9.7.tgz#5cd00850dea0254d377005d55ab4bf60429ba2bc" - dependencies: + version "1.10.3" + resolved "https://registry.yarnpkg.com/parcel-bundler/-/parcel-bundler-1.10.3.tgz#8502b40d3f23139093b25e82658f6060f025c024" + integrity sha512-Lj31fr5o2AZFbazghL/MrubzvJEXLwx24rd3MiR3lncmqCXbd5q0hgl1kpV6X+vRaN9/cSDR8G0lotmgl5OyZg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/core" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/preset-env" "^7.0.0" + "@babel/runtime" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" ansi-to-html "^0.6.4" - babel-code-frame "^6.26.0" - babel-core "^6.25.0" - babel-generator "^6.25.0" - babel-plugin-transform-es2015-modules-commonjs "^6.26.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-preset-env "^1.7.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.17.4" babylon-walk "^1.0.2" - browserslist "^3.2.6" + browserslist "^4.1.0" chalk "^2.1.0" clone "^2.1.1" command-exists "^1.2.6" @@ -5070,9 +5956,10 @@ parcel-bundler@^1.9.7: cssnano "^4.0.0" deasync "^0.1.13" dotenv "^5.0.0" + dotenv-expand "^4.2.0" fast-glob "^2.2.2" filesize "^3.6.0" - fswatcher-child "^1.0.3" + fswatcher-child "^1.0.5" get-port "^3.2.0" grapheme-breaker "^0.3.2" htmlnano "^0.1.9" @@ -5106,7 +5993,8 @@ parcel-bundler@^1.9.7: parse-asn1@^5.0.0: version "5.1.1" - resolved "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + integrity sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -5117,10 +6005,12 @@ parse-asn1@^5.0.0: parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -5130,12 +6020,14 @@ parse-glob@^3.0.4: parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -5143,44 +6035,54 @@ parse-json@^4.0.0: parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 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" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-parse@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -5189,12 +6091,14 @@ path-type@^1.0.0: path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5204,154 +6108,180 @@ pbkdf2@^3.0.3: pegjs@^0.10.0: version "0.10.0" - resolved "http://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= physical-cpu-count@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660" + integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA= pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= 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" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 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" + integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== 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" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= dependencies: postcss "^5.0.2" postcss-message-helpers "^2.0.0" reduce-css-calc "^1.2.6" -postcss-calc@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-6.0.1.tgz#3d24171bbf6e7629d422a436ebfe6dd9511f4330" +postcss-calc@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-6.0.2.tgz#4d9a43e27dbbf27d095fecb021ac6896e2318337" + integrity sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA== dependencies: css-unit-converter "^1.1.1" - postcss "^6.0.0" + postcss "^7.0.2" postcss-selector-parser "^2.2.2" reduce-css-calc "^2.0.0" postcss-colormin@^2.1.8: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= dependencies: colormin "^1.0.5" postcss "^5.0.13" postcss-value-parser "^3.2.3" -postcss-colormin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.1.tgz#6f1c18a0155bc69613f2ff13843e2e4ae8ff0bbe" +postcss-colormin@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" + integrity sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw== dependencies: browserslist "^4.0.0" color "^3.0.0" has "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-convert-values@^2.3.4: version "2.6.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= dependencies: postcss "^5.0.11" postcss-value-parser "^3.1.2" -postcss-convert-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.0.tgz#77d77d9aed1dc4e6956e651cc349d53305876f62" +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-discard-comments@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= dependencies: postcss "^5.0.14" -postcss-discard-comments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.0.tgz#9684a299e76b3e93263ef8fd2adbf1a1c08fd88d" +postcss-discard-comments@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" + integrity sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-discard-duplicates@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= dependencies: postcss "^5.0.4" -postcss-discard-duplicates@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.0.tgz#42f3c267f85fa909e042c35767ecfd65cb2bd72c" +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-discard-empty@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= dependencies: postcss "^5.0.14" -postcss-discard-empty@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.0.tgz#55e18a59c74128e38c7d2804bcfa4056611fb97f" +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-discard-overridden@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= dependencies: postcss "^5.0.16" -postcss-discard-overridden@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.0.tgz#4a0bf85978784cf1f81ed2c1c1fd9d964a1da1fa" +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-discard-unused@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= dependencies: postcss "^5.0.14" uniqs "^2.0.0" @@ -5359,12 +6289,14 @@ postcss-discard-unused@^2.2.1: postcss-filter-plugins@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== dependencies: postcss "^5.0.4" postcss-merge-idents@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= dependencies: has "^1.0.1" postcss "^5.0.10" @@ -5373,21 +6305,24 @@ postcss-merge-idents@^2.1.5: postcss-merge-longhand@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= dependencies: postcss "^5.0.4" -postcss-merge-longhand@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.5.tgz#00898d72347fc7e40bb564b11bdc08119c599b59" +postcss-merge-longhand@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.6.tgz#2b938fa3529c3d1657e53dc7ff0fd604dbc85ff1" + integrity sha512-JavnI+V4IHWsaUAfOoKeMEiJQGXTraEy1nHM0ILlE6NIQPEZrJDAnPh3lNGZ5HAk2mSSrwp66JoGhvjp6SqShA== dependencies: css-color-names "0.0.4" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" stylehacks "^4.0.0" postcss-merge-rules@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= dependencies: browserslist "^1.5.2" caniuse-api "^1.5.2" @@ -5395,193 +6330,219 @@ postcss-merge-rules@^2.0.3: postcss-selector-parser "^2.2.2" vendors "^1.0.0" -postcss-merge-rules@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.1.tgz#430fd59b3f2ed2e8afcd0b31278eda39854abb10" +postcss-merge-rules@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" + integrity sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" cssnano-util-same-parent "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-selector-parser "^3.0.0" vendors "^1.0.0" postcss-message-helpers@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= postcss-minify-font-values@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= dependencies: object-assign "^4.0.1" postcss "^5.0.4" postcss-value-parser "^3.0.2" -postcss-minify-font-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.0.tgz#4cc33d283d6a81759036e757ef981d92cbd85bed" +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-minify-gradients@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= dependencies: postcss "^5.0.12" postcss-value-parser "^3.3.0" -postcss-minify-gradients@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.0.tgz#3fc3916439d27a9bb8066db7cdad801650eb090e" +postcss-minify-gradients@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" + integrity sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA== dependencies: cssnano-util-get-arguments "^4.0.0" is-color-stop "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-minify-params@^1.0.4: version "1.2.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= dependencies: alphanum-sort "^1.0.1" postcss "^5.0.2" postcss-value-parser "^3.0.2" uniqs "^2.0.0" -postcss-minify-params@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.0.tgz#05e9166ee48c05af651989ce84d39c1b4d790674" +postcss-minify-params@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" + integrity sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg== dependencies: alphanum-sort "^1.0.0" + browserslist "^4.0.0" cssnano-util-get-arguments "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" uniqs "^2.0.0" postcss-minify-selectors@^2.0.4: version "2.1.1" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= dependencies: alphanum-sort "^1.0.2" has "^1.0.1" postcss "^5.0.14" postcss-selector-parser "^2.0.0" -postcss-minify-selectors@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.0.tgz#b1e9f6c463416d3fcdcb26e7b785d95f61578aad" +postcss-minify-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" + integrity sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg== dependencies: alphanum-sort "^1.0.0" has "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-selector-parser "^3.0.0" postcss-normalize-charset@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= dependencies: postcss "^5.0.5" -postcss-normalize-charset@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.0.tgz#24527292702d5e8129eafa3d1de49ed51a6ab730" +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" -postcss-normalize-display-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#950e0c7be3445770a160fffd6b6644c3c0cd8f89" +postcss-normalize-display-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" + integrity sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg== dependencies: cssnano-util-get-match "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-positions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.0.tgz#ee9343ab981b822c63ab72615ecccd08564445a3" +postcss-normalize-positions@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" + integrity sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA== dependencies: cssnano-util-get-arguments "^4.0.0" has "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-repeat-style@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.0.tgz#b711c592cf16faf9ff575e42fa100b6799083eff" +postcss-normalize-repeat-style@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" + integrity sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA== dependencies: cssnano-util-get-arguments "^4.0.0" cssnano-util-get-match "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.0.tgz#718cb6d30a6fac6ac6a830e32c06c07dbc66fe5d" +postcss-normalize-string@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" + integrity sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ== dependencies: has "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-timing-functions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.0.tgz#0351f29886aa981d43d91b2c2bd1aea6d0af6d23" +postcss-normalize-timing-functions@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" + integrity sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w== dependencies: cssnano-util-get-match "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-unicode@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.0.tgz#5acd5d47baea5d17674b2ccc4ae5166fa88cdf97" +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== dependencies: - postcss "^6.0.0" + browserslist "^4.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-normalize-url@^3.0.7: version "3.0.8" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= dependencies: is-absolute-url "^2.0.0" normalize-url "^1.4.0" postcss "^5.0.14" postcss-value-parser "^3.2.3" -postcss-normalize-url@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.0.tgz#b7a9c8ad26cf26694c146eb2d68bd0cf49956f0d" +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== dependencies: is-absolute-url "^2.0.0" normalize-url "^3.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-whitespace@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.0.tgz#1da7e76b10ae63c11827fa04fc3bb4a1efe99cc0" +postcss-normalize-whitespace@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" + integrity sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw== dependencies: - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-ordered-values@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.1" -postcss-ordered-values@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.0.tgz#2c769d5d44aa3c7c907b8be2e997ed19dfd8d50a" +postcss-ordered-values@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" + integrity sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q== dependencies: cssnano-util-get-arguments "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-reduce-idents@^2.2.2: version "2.4.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.2" @@ -5589,38 +6550,43 @@ postcss-reduce-idents@^2.2.2: postcss-reduce-initial@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= dependencies: postcss "^5.0.4" -postcss-reduce-initial@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.1.tgz#f2d58f50cea2b0c5dc1278d6ea5ed0ff5829c293" +postcss-reduce-initial@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" + integrity sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" has "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-reduce-transforms@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= dependencies: has "^1.0.1" postcss "^5.0.8" postcss-value-parser "^3.0.1" -postcss-reduce-transforms@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.0.tgz#f645fc7440c35274f40de8104e14ad7163edf188" +postcss-reduce-transforms@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" + integrity sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA== dependencies: cssnano-util-get-match "^4.0.0" has "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= dependencies: flatten "^1.0.2" indexes-of "^1.0.1" @@ -5629,6 +6595,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: postcss-selector-parser@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= dependencies: dot-prop "^4.1.1" indexes-of "^1.0.1" @@ -5637,44 +6604,50 @@ postcss-selector-parser@^3.0.0: postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= dependencies: is-svg "^2.0.0" postcss "^5.0.14" postcss-value-parser "^3.2.3" svgo "^0.7.0" -postcss-svgo@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.0.tgz#c0bbad02520fc636c9d78b0e8403e2e515c32285" +postcss-svgo@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" + integrity sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw== dependencies: is-svg "^3.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-value-parser "^3.0.0" svgo "^1.0.0" postcss-unique-selectors@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= dependencies: alphanum-sort "^1.0.1" postcss "^5.0.4" uniqs "^2.0.0" -postcss-unique-selectors@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.0.tgz#04c1e9764c75874261303402c41f0e9769fc5501" +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== dependencies: alphanum-sort "^1.0.0" - postcss "^6.0.0" + postcss "^7.0.0" uniqs "^2.0.0" postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== postcss-zindex@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= dependencies: has "^1.0.1" postcss "^5.0.4" @@ -5683,23 +6656,35 @@ postcss-zindex@^2.0.1: postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== dependencies: chalk "^1.1.3" js-base64 "^2.1.9" source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.0, postcss@^6.0.19: +postcss@^6.0.19: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" supports-color "^5.4.0" +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.5.tgz#70e6443e36a6d520b0fd4e7593fcca3635ee9f55" + integrity sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.5.0" + posthtml-parser@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.3.3.tgz#3fe986fca9f00c0f109d731ba590b192f26e776d" + integrity sha512-H/Z/yXGwl49A7hYQLV1iQ3h87NE0aZ/PMZhFwhw3lKeCAN+Ti4idrHvVvh4/GX10I7u77aQw+QB4vV5/Lzvv5A== dependencies: htmlparser2 "^3.9.2" isobject "^2.1.0" @@ -5708,6 +6693,7 @@ posthtml-parser@^0.3.3: posthtml-parser@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.4.1.tgz#95b78fef766fbbe0a6f861b6e95582bc3d1ff933" + integrity sha512-h7vXIQ21Ikz2w5wPClPakNP6mJeJCK6BT0GpqnQrNNABdR7/TchNlFyryL1Bz6Ww53YWCKkr6tdZuHlxY1AVdQ== dependencies: htmlparser2 "^3.9.2" object-assign "^4.1.1" @@ -5715,10 +6701,12 @@ posthtml-parser@^0.4.0: posthtml-render@^1.1.0, posthtml-render@^1.1.3, posthtml-render@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.1.4.tgz#95dac09892f4f183fad5ac823f08f42c0256551e" + integrity sha512-jL6eFIzoN3xUEvbo33OAkSDE2VIKU4JQ1wENOows1DpfnrdapR/K3Q1/fB43Mq7wQlcSgRm23nFrvoioufM7eA== posthtml@^0.11.2, posthtml@^0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.11.3.tgz#17ea2921b0555b7455f33c977bd16d8b8cb74f27" + integrity sha512-quMHnDckt2DQ9lRi6bYLnuyBDnVzK+McHa8+ar4kTdYbWEo/92hREOu3h70ZirudOOp/my2b3r0m5YtxY52yrA== dependencies: object-assign "^4.1.1" posthtml-parser "^0.3.3" @@ -5727,38 +6715,47 @@ posthtml@^0.11.2, posthtml@^0.11.3: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -private@^0.1.6, private@^0.1.8: +private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== 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" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + integrity sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8= promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: err-code "^1.0.0" retry "^0.10.0" @@ -5766,40 +6763,48 @@ promise-retry@^1.1.1: promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: read "1" proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= protoduck@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.0.tgz#752145e6be0ad834cb25716f670a713c860dce70" + integrity sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ== dependencies: genfun "^4.0.1" pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: version "1.1.29" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== public-encrypt@^4.0.0: - version "4.0.2" - resolved "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" create-hash "^1.1.0" parse-asn1 "^5.0.0" randombytes "^2.0.1" + safe-buffer "^5.1.2" pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -5807,6 +6812,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -5814,6 +6820,7 @@ pump@^3.0.0: pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -5822,26 +6829,32 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -5849,18 +6862,22 @@ query-string@^4.1.0: querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= quote-stream@^1.0.1, quote-stream@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" + integrity sha1-hJY/jJwmuULhU/7rU6rnRlK34LI= dependencies: buffer-equal "0.0.1" minimist "^1.1.3" @@ -5869,6 +6886,7 @@ quote-stream@^1.0.1, quote-stream@~1.0.2: randomatic@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" + integrity sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ== dependencies: is-number "^4.0.0" kind-of "^6.0.0" @@ -5877,12 +6895,14 @@ randomatic@^3.0.0: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -5890,10 +6910,12 @@ randomfill@^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" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -5903,12 +6925,14 @@ rc@^1.2.7: 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" + integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= dependencies: graceful-fs "^4.1.2" "read-package-json@1 || 2", read-package-json@^2.0.0: version "2.0.13" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" + integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" @@ -5920,6 +6944,7 @@ read-cmd-shim@^1.0.1: read-package-tree@^5.1.6: version "5.2.1" resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" + integrity sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA== dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -5930,6 +6955,7 @@ read-package-tree@^5.1.6: read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -5937,6 +6963,7 @@ read-pkg-up@^1.0.1: 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" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" @@ -5944,6 +6971,7 @@ read-pkg-up@^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" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -5952,6 +6980,7 @@ read-pkg@^1.0.0, read-pkg@^1.1.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -5960,12 +6989,14 @@ read-pkg@^3.0.0: read@1, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3: version "2.3.6" - resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -5978,6 +7009,7 @@ read@1, read@~1.0.1: readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" + integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -5987,6 +7019,7 @@ readdir-scoped-modules@^1.0.0: readdirp@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" micromatch "^3.1.10" @@ -5995,12 +7028,14 @@ readdirp@^2.0.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: resolve "^1.1.6" redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= dependencies: indent-string "^2.1.0" strip-indent "^1.0.1" @@ -6008,13 +7043,15 @@ redent@^1.0.0: redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: indent-string "^3.0.0" strip-indent "^2.0.0" reduce-css-calc@^1.2.6: version "1.3.0" - resolved "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= dependencies: balanced-match "^0.4.2" math-expression-evaluator "^1.2.14" @@ -6023,6 +7060,7 @@ reduce-css-calc@^1.2.6: reduce-css-calc@^2.0.0: version "2.1.5" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.5.tgz#f283712f0c9708ef952d328f4b16112d57b03714" + integrity sha512-AybiBU03FKbjYzyvJvwkJZY6NLN+80Ufc2EqEs+41yQH+8wqBEslD6eGiS0oIeq5TNLA5PrhBeYHXWdn8gtW7A== dependencies: css-unit-converter "^1.1.1" postcss-value-parser "^3.3.0" @@ -6030,77 +7068,104 @@ reduce-css-calc@^2.0.0: reduce-function-call@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= dependencies: balanced-match "^0.4.2" -regenerate@^1.2.1: +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" + integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + +regenerator-transform@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" + integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA== 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" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 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" +regexpu-core@^4.1.3, regexpu-core@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" + integrity sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + regenerate "^1.4.0" + regenerate-unicode-properties "^7.0.0" + regjsgen "^0.4.0" + regjsparser "^0.3.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" +regjsgen@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" + integrity sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" +regjsparser@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" + integrity sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA== 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" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -6126,42 +7191,51 @@ request@^2.87.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 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" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.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" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.1.5, resolve@^1.1.6, resolve@^1.3.2, resolve@^1.4.0: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== dependencies: path-parse "^1.0.5" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -6169,28 +7243,34 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= rgba-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= rimraf@2, 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" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: glob "^7.0.5" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -6198,56 +7278,67 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 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" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rxjs@^6.1.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f" + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== dependencies: tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== safer-eval@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/safer-eval/-/safer-eval-1.2.3.tgz#73ba74a34bc8a07d6a44135c815fd18a8eebe7a0" + integrity sha512-nDwXOhiheoaBT6op02n8wzsshjLXHhh4YAeqsDEoVmy1k2+lGv/ENLsGaWqkaKArUkUx48VO12/ZPa3sI/OEqQ== dependencies: clones "^1.1.0" sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== dependencies: debug "2.6.9" depd "~1.1.2" @@ -6266,6 +7357,7 @@ send@0.16.2: serialize-to-js@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/serialize-to-js/-/serialize-to-js-1.2.1.tgz#2e87f61f938826d24c463a7cbd0dd2929ec38008" + integrity sha512-TK6d30GNkOLeFDPuP6Jfy1Q1V31GxzppYTt2lzr8KWmIUKomFj+260QP5o4AhHLu0pr6urgyS8i/Z1PqurjBoA== dependencies: js-beautify "^1.7.5" safer-eval "^1.2.3" @@ -6273,6 +7365,7 @@ serialize-to-js@^1.1.1: serve-static@^1.12.4: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -6282,10 +7375,12 @@ serve-static@^1.12.4: 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" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -6295,6 +7390,7 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -6304,14 +7400,17 @@ set-value@^2.0.0: setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -6319,20 +7418,24 @@ sha.js@^2.4.0, sha.js@^2.4.8: shallow-copy@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@^0.8.2: +shelljs@^0.8.1, shelljs@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" + integrity sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -6341,32 +7444,39 @@ shelljs@^0.8.2: sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= dependencies: is-arrayish "^0.3.1" slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= slide@^1.1.5, slide@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= smart-buffer@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" + integrity sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg== snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -6375,12 +7485,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -6394,6 +7506,7 @@ snapdragon@^0.8.1: socks-proxy-agent@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" + integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== dependencies: agent-base "~4.2.0" socks "~2.2.0" @@ -6401,6 +7514,7 @@ socks-proxy-agent@^4.0.0: socks@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9" + integrity sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w== dependencies: ip "^1.1.5" smart-buffer "^4.0.1" @@ -6408,18 +7522,21 @@ socks@~2.2.0: sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: atob "^2.1.1" decode-uri-component "^0.2.0" @@ -6427,15 +7544,10 @@ 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-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -6443,18 +7555,22 @@ source-map-support@~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" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= spawn-wrap@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" + integrity sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg== dependencies: foreground-child "^1.5.6" mkdirp "^0.5.0" @@ -6464,19 +7580,22 @@ spawn-wrap@^1.4.2: which "^1.3.0" spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + version "3.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" + integrity sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -6484,63 +7603,72 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" + integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w== 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" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== dependencies: through2 "^2.0.2" split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + version "1.15.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.1.tgz#b79a089a732e346c6e0714830f36285cd38191a2" + integrity sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - safer-buffer "^2.0.2" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" ssri@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" stable@~0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== static-eval@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.0.tgz#0e821f8926847def7b4b50cda5d55c04a9b13864" + integrity sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw== dependencies: escodegen "^1.8.1" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -6548,6 +7676,7 @@ static-extend@^0.1.1: static-module@^2.2.0: version "2.2.5" resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" + integrity sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ== dependencies: concat-stream "~1.6.0" convert-source-map "^1.5.1" @@ -6567,14 +7696,17 @@ static-module@^2.2.0: "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -6582,6 +7714,7 @@ stream-browserify@^2.0.1: stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -6589,6 +7722,7 @@ stream-each@^1.1.0: stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -6599,14 +7733,17 @@ stream-http@^2.7.2: stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= 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" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -6615,6 +7752,7 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -6622,52 +7760,62 @@ string-width@^1.0.1: string_decoder@^1.0.0, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.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" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: get-stdin "^4.0.1" strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= strong-log-transformer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz#fa6d8e0a9e62b3c168c3cad5ae5d00dc97ba26cc" + integrity sha512-FQmNqAXJgOX8ygOcvPLlGWBNT41mvNJ9ALoYf0GTwVt9t30mGTqpmp/oJx5gLcu52DXK10kS7dVWhx8aPXDTlg== dependencies: byline "^5.0.0" duplexer "^0.1.1" @@ -6675,38 +7823,44 @@ strong-log-transformer@^2.0.0: through "^2.3.4" stylehacks@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.0.tgz#64b323951c4a24e5fc7b2ec06c137bf32d155e8a" + version "4.0.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" + integrity sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w== dependencies: browserslist "^4.0.0" - postcss "^6.0.0" + postcss "^7.0.0" postcss-selector-parser "^3.0.0" supports-color@5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== dependencies: has-flag "^3.0.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= dependencies: coa "~1.0.1" colors "~1.1.2" @@ -6719,6 +7873,7 @@ svgo@^0.7.0: svgo@^1.0.0, svgo@^1.0.5: version "1.1.1" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" + integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== dependencies: coa "~2.0.1" colors "~1.1.2" @@ -6738,6 +7893,7 @@ svgo@^1.0.0, svgo@^1.0.5: tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= dependencies: block-stream "*" fstream "^1.0.2" @@ -6746,6 +7902,7 @@ tar@^2.0.0: tar@^4, tar@^4.4.3: version "4.4.6" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg== dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" @@ -6758,10 +7915,12 @@ tar@^4, tar@^4.4.3: temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= temp-write@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= dependencies: graceful-fs "^4.1.2" is-stream "^1.1.0" @@ -6771,8 +7930,9 @@ temp-write@^3.4.0: uuid "^3.0.1" terser@^3.7.3, terser@^3.8.1, terser@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.8.2.tgz#48b880f949f8d038aca4dfd00a37c53d96ecf9fb" + version "3.10.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.10.1.tgz#59c8cf87262d59e018ded4df30f834b602b1e232" + integrity sha512-GE0ShECt1/dZUZt9Kyr/IC6xXG46pTbm1C1WfzQbbnRB5LhdJlF8p5NBZ38RjspD7hEM9O5ud8aIcOFY6evl4A== dependencies: commander "~2.17.1" source-map "~0.6.1" @@ -6781,6 +7941,7 @@ terser@^3.7.3, terser@^3.8.1, terser@^3.8.2: test-exclude@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -6789,61 +7950,73 @@ test-exclude@^4.2.0: require-main-filename "^1.0.1" text-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.8.0.tgz#6f343c62268843019b21a616a003557bdb952d2b" + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== through2@^2.0.0, through2@^2.0.2, through2@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= dependencies: readable-stream "^2.1.5" xtend "~4.0.1" through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" - resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== dependencies: setimmediate "^1.0.4" timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= tiny-inflate@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.2.tgz#93d9decffc8805bd57eae4310f0b745e9b6fb3a7" + integrity sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c= tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -6851,6 +8024,7 @@ to-regex-range@^2.1.0: to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -6860,14 +8034,17 @@ to-regex@^3.0.1, to-regex@^3.0.2: toml@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb" + integrity sha512-O7L5hhSQHxuufWUdcTRPfuTh3phKfAZ/dqfxZFoxPCj2RYmpaSGLEIs016FCXItQwNr08yefUB5TSjzRYnajTA== tomlify-j0.4@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz#99414d45268c3a3b8bf38be82145b7bba34b7473" + integrity sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ== tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: psl "^1.1.24" punycode "^1.4.1" @@ -6875,32 +8052,39 @@ tough-cookie@~2.4.3: tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== tslint@^5.11.0: version "5.11.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" + integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0= dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@ -6918,40 +8102,71 @@ tslint@^5.11.0: tsutils@^2.27.2: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 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" + integrity sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic= + +typedoc@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.11.1.tgz#9f033887fd2218c769e1045feb88a1efed9f12c9" + integrity sha512-jdNIoHm5wkZqxQTe/g9AQ3LKnZyrzHXqu6A/c9GUOeJyBWLxNr7/Dm3rwFvLksuxRNwTvY/0HRDU9sJTa9WQSg== + dependencies: + "@types/fs-extra" "5.0.1" + "@types/handlebars" "4.0.36" + "@types/highlight.js" "9.12.2" + "@types/lodash" "4.14.104" + "@types/marked" "0.3.0" + "@types/minimatch" "3.0.3" + "@types/shelljs" "0.7.8" + fs-extra "^5.0.0" + handlebars "^4.0.6" + highlight.js "^9.0.0" + 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.2" typedoc@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.12.0.tgz#c5d606f52af29d841658e18d9faa1a72acf0e270" + integrity sha512-dsdlaYZ7Je8JC+jQ3j2Iroe4uyD0GhqzADNUVyBRgLuytQDP/g0dPkAw5PdM/4drnmmJjRzSWW97FkKo+ITqQg== dependencies: "@types/fs-extra" "^5.0.3" "@types/handlebars" "^4.0.38" @@ -6971,13 +8186,25 @@ typedoc@^0.12.0: typedoc-default-themes "^0.5.0" typescript "3.0.x" -typescript@3.0.x, typescript@^3.0.1: +typescript@2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" + integrity sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw== + +typescript@3.0.x: version "3.0.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.3.tgz#4853b3e275ecdaa27f78fda46dc273a7eb7fc1c8" + integrity sha512-kk80vLW9iGtjMnIv11qyxLqZm20UklzuR2tL0QAnDIygIUIemcZMxlMWudl9OOt76H3ntVzcTiddQ1/pAAJMYg== + +typescript@^3.0.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.3.tgz#01b70247a6d3c2467f70c45795ef5ea18ce191d5" + integrity sha512-+81MUSyX+BaSo+u2RbozuQk/UWx6hfG0a5gHu4ANEM4sU96XbuIyAB+rWBW1u70c6a5QuZfuYICn3s2UjuHUpA== uglify-js@^3.1.4: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== dependencies: commander "~2.17.1" source-map "~0.6.1" @@ -6985,14 +8212,40 @@ uglify-js@^3.1.4: uid-number@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= umask@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" + integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== unicode-trie@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-0.3.1.tgz#d671dddd89101a08bac37b6a5161010602052085" + integrity sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU= dependencies: pako "^0.2.5" tiny-inflate "^1.0.0" @@ -7000,6 +8253,7 @@ unicode-trie@^0.3.1: union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -7009,34 +8263,41 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= unique-filename@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== dependencies: imurmurhash "^0.1.4" universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -7044,14 +8305,17 @@ unset-value@^1.0.0: upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" @@ -7059,14 +8323,17 @@ url@^0.11.0: use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" @@ -7074,26 +8341,31 @@ util.promisify@~1.0.0: util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" util@^0.10.3: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== v8-compile-cache@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" + integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw== validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -7101,16 +8373,19 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" vendors@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -7119,26 +8394,31 @@ verror@1.10.0: vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= dependencies: indexof "0.0.1" wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== whatwg-url@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -7147,34 +8427,41 @@ whatwg-url@^7.0.0: whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@1, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: string-width "^1.0.2 || 2" wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wrap-ansi@^2.0.0: version "2.1.0" - resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -7182,10 +8469,12 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^1.1.4: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -7194,6 +8483,7 @@ write-file-atomic@^1.1.4: write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -7202,6 +8492,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: write-json-file@^2.2.0, write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= dependencies: detect-indent "^5.0.0" graceful-fs "^4.1.2" @@ -7213,6 +8504,7 @@ write-json-file@^2.2.0, write-json-file@^2.3.0: write-pkg@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== dependencies: sort-keys "^2.0.0" write-json-file "^2.2.0" @@ -7220,54 +8512,65 @@ write-pkg@^3.1.0: ws@^5.1.1: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== dependencies: async-limiter "~1.0.0" xregexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= yargs-parser@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== dependencies: camelcase "^4.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" + integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== dependencies: camelcase "^4.1.0" yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" yargs@11.1.0: version "11.1.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -7285,6 +8588,7 @@ yargs@11.1.0: yargs@^12.0.1: version "12.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" + integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== dependencies: cliui "^4.0.0" decamelize "^2.0.0"