From b646a55df193e5138a3464214bc1f077939aa965 Mon Sep 17 00:00:00 2001 From: Ika Date: Sun, 20 May 2018 15:57:47 +0800 Subject: [PATCH] feat: initial implementation --- .editorconfig | 8 + .gitattributes | 2 + .gitignore | 3 + .npmignore | 0 .travis.yml | 23 + LICENSE | 21 + README.md | 42 + jest.config.js | 19 + package.json | 54 + src/helpers.ts | 145 + src/index.ts | 2 + src/parse.ts | 25 + src/transform.ts | 125 + .../__snapshots__/alias.test.ts.snap | 8 + .../__snapshots__/blockFolded.test.ts.snap | 103 + .../__snapshots__/blockLiteral.test.ts.snap | 103 + .../__snapshots__/directive.test.ts.snap | 10 + .../__snapshots__/document.test.ts.snap | 753 ++++ .../__snapshots__/flowMap.test.ts.snap | 681 +++ .../__snapshots__/flowSeq.test.ts.snap | 384 ++ src/transforms/__snapshots__/map.test.ts.snap | 403 ++ .../__snapshots__/plain.test.ts.snap | 8 + .../__snapshots__/quoteDouble.test.ts.snap | 8 + .../__snapshots__/quoteSingle.test.ts.snap | 8 + src/transforms/__snapshots__/seq.test.ts.snap | 77 + src/transforms/alias.test.ts | 3 + src/transforms/alias.ts | 21 + src/transforms/blockFolded.test.ts | 10 + src/transforms/blockFolded.ts | 15 + src/transforms/blockLiteral.test.ts | 10 + src/transforms/blockLiteral.ts | 15 + src/transforms/blockValue.ts | 35 + src/transforms/comment.ts | 16 + src/transforms/directive.test.ts | 5 + src/transforms/directive.ts | 17 + src/transforms/document.test.ts | 32 + src/transforms/document.ts | 71 + src/transforms/flowCollection.ts | 415 ++ src/transforms/flowMap.test.ts | 42 + src/transforms/flowMap.ts | 17 + src/transforms/flowSeq.test.ts | 29 + src/transforms/flowSeq.ts | 15 + src/transforms/map.test.ts | 46 + src/transforms/map.ts | 121 + src/transforms/null.ts | 11 + src/transforms/offset.ts | 13 + src/transforms/plain.test.ts | 3 + src/transforms/plain.ts | 25 + src/transforms/quoteDouble.test.ts | 3 + src/transforms/quoteDouble.ts | 15 + src/transforms/quoteSingle.test.ts | 3 + src/transforms/quoteSingle.ts | 15 + src/transforms/quoteValue.ts | 19 + src/transforms/range.ts | 22 + src/transforms/seq.test.ts | 16 + src/transforms/seq.ts | 52 + src/types.ts | 193 + src/utils.ts | 13 + tsconfig.build.json | 8 + tsconfig.json | 12 + tslint.json | 16 + types/yaml/index.d.ts | 144 + types/yaml/package.json | 4 + yarn.lock | 3807 +++++++++++++++++ 64 files changed, 8344 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 jest.config.js create mode 100644 package.json create mode 100644 src/helpers.ts create mode 100644 src/index.ts create mode 100644 src/parse.ts create mode 100644 src/transform.ts create mode 100644 src/transforms/__snapshots__/alias.test.ts.snap create mode 100644 src/transforms/__snapshots__/blockFolded.test.ts.snap create mode 100644 src/transforms/__snapshots__/blockLiteral.test.ts.snap create mode 100644 src/transforms/__snapshots__/directive.test.ts.snap create mode 100644 src/transforms/__snapshots__/document.test.ts.snap create mode 100644 src/transforms/__snapshots__/flowMap.test.ts.snap create mode 100644 src/transforms/__snapshots__/flowSeq.test.ts.snap create mode 100644 src/transforms/__snapshots__/map.test.ts.snap create mode 100644 src/transforms/__snapshots__/plain.test.ts.snap create mode 100644 src/transforms/__snapshots__/quoteDouble.test.ts.snap create mode 100644 src/transforms/__snapshots__/quoteSingle.test.ts.snap create mode 100644 src/transforms/__snapshots__/seq.test.ts.snap create mode 100644 src/transforms/alias.test.ts create mode 100644 src/transforms/alias.ts create mode 100644 src/transforms/blockFolded.test.ts create mode 100644 src/transforms/blockFolded.ts create mode 100644 src/transforms/blockLiteral.test.ts create mode 100644 src/transforms/blockLiteral.ts create mode 100644 src/transforms/blockValue.ts create mode 100644 src/transforms/comment.ts create mode 100644 src/transforms/directive.test.ts create mode 100644 src/transforms/directive.ts create mode 100644 src/transforms/document.test.ts create mode 100644 src/transforms/document.ts create mode 100644 src/transforms/flowCollection.ts create mode 100644 src/transforms/flowMap.test.ts create mode 100644 src/transforms/flowMap.ts create mode 100644 src/transforms/flowSeq.test.ts create mode 100644 src/transforms/flowSeq.ts create mode 100644 src/transforms/map.test.ts create mode 100644 src/transforms/map.ts create mode 100644 src/transforms/null.ts create mode 100644 src/transforms/offset.ts create mode 100644 src/transforms/plain.test.ts create mode 100644 src/transforms/plain.ts create mode 100644 src/transforms/quoteDouble.test.ts create mode 100644 src/transforms/quoteDouble.ts create mode 100644 src/transforms/quoteSingle.test.ts create mode 100644 src/transforms/quoteSingle.ts create mode 100644 src/transforms/quoteValue.ts create mode 100644 src/transforms/range.ts create mode 100644 src/transforms/seq.test.ts create mode 100644 src/transforms/seq.ts create mode 100644 src/types.ts create mode 100644 src/utils.ts create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json create mode 100644 tslint.json create mode 100644 types/yaml/index.d.ts create mode 100644 types/yaml/package.json create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..dd7255e8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..d0c0c4c1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text eol=lf +*.png binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a8bff3bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +coverage/ +lib/ +node_modules/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..e69de29b diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..948cb30e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +language: node_js + +node_js: +- 4 +- stable + +before_install: +- yarn global add codecov + +script: +- yarn run lint +- yarn run test + +after_script: +- codecov + +cache: + yarn: true + directories: + - node_modules + +matrix: + fast_finish: true diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..a3ae447e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Ika (https://github.com/ikatyang) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..ebb4945e --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# yaml-unist-parser + +[![npm](https://img.shields.io/npm/v/yaml-unist-parser.svg)](https://www.npmjs.com/package/yaml-unist-parser) +[![build](https://img.shields.io/travis/ikatyang/yaml-unist-parser/master.svg)](https://travis-ci.org/ikatyang/yaml-unist-parser/builds) +[![coverage](https://img.shields.io/codecov/c/github/ikatyang/yaml-unist-parser/master.svg)](https://codecov.io/gh/ikatyang/yaml-unist-parser) + +A YAML parser that produces output compatible with Unist + +[Changelog](https://github.com/ikatyang/yaml-unist-parser/blob/master/CHANGELOG.md) + +## Install + +```sh +# using npm +npm install --save yaml-unist-parser + +# using yarn +yarn add yaml-unist-parser +``` + +## Usage + +```ts +// sample code +``` + +## Development + +```sh +# lint +yarn run lint + +# build +yarn run build + +# test +yarn run test +``` + +## License + +MIT © [Ika](https://github.com/ikatyang) diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..91f9392b --- /dev/null +++ b/jest.config.js @@ -0,0 +1,19 @@ +module.exports = { + testEnvironment: 'node', + moduleFileExtensions: ['ts', 'js', 'json'], + testMatch: ['**/tests/**/*.ts', '**/*.test.ts'], + transform: { '\\.ts$': 'ts-jest/preprocessor' }, + mapCoverage: true, + coverageReporters: ['lcov', 'text-summary'], + collectCoverage: !!process.env.CI, + collectCoverageFrom: ['src/**/*.ts'], + coveragePathIgnorePatterns: ["src/types.ts"], + coverageThreshold: { + global: { + branches: 100, + functions: 100, + lines: 100, + statements: 100, + }, + }, +}; diff --git a/package.json b/package.json new file mode 100644 index 00000000..e0f8b0fc --- /dev/null +++ b/package.json @@ -0,0 +1,54 @@ +{ + "name": "yaml-unist-parser", + "version": "1.0.0", + "description": "A YAML parser that produces output compatible with Unist", + "keywords": [ + "unist", + "yaml" + ], + "main": "lib/index.js", + "types": "lib/index.d.ts", + "repository": "https://github.com/ikatyang/yaml-unist-parser", + "homepage": "https://github.com/ikatyang/yaml-unist-parser#readme", + "author": { + "name": "Ika", + "email": "ikatyang@gmail.com", + "url": "https://github.com/ikatyang" + }, + "license": "MIT", + "scripts": { + "prepublish": "yarn run build", + "lint": "tslint -p ./tsconfig.json", + "test": "jest", + "prebuild": "rm -rf ./lib", + "build": "tsc -p ./tsconfig.build.json", + "release": "standard-version" + }, + "dependencies": { + "lines-and-columns": "^1.1.6", + "tslib": "^1.9.1" + }, + "devDependencies": { + "@types/jest": "21.1.10", + "@types/node": "4.2.23", + "@types/yaml": "file:types/yaml", + "jest": "21.2.1", + "prettier": "1.12.1", + "standard-version": "4.3.0", + "ts-jest": "21.2.4", + "tslint": "5.10.0", + "tslint-config-prettier": "1.12.0", + "tslint-plugin-prettier": "1.3.0", + "typescript": "2.8.3", + "yaml": "1.0.0-beta.5" + }, + "peerDependencies": { + "yaml": "^1.0.0-beta.5" + }, + "engines": { + "node": ">= 4" + }, + "files": [ + "/lib/**/*" + ] +} diff --git a/src/helpers.ts b/src/helpers.ts new file mode 100644 index 00000000..0fceb1e4 --- /dev/null +++ b/src/helpers.ts @@ -0,0 +1,145 @@ +import { parse } from "./parse"; +import { Node, Position, Root, YamlUnistNode } from "./types"; + +const RAW = Symbol("raw"); + +expect.addSnapshotSerializer({ + test: value => typeof value[RAW] === "string", + print: value => value[RAW].replace(/ +$/gm, ""), +}); + +export type TestCase = TestCaseSingle | TestCaseMulti; +export type TestCaseSelector = (root: Root) => YamlUnistNode | Node; + +export type TestCaseSingle = [string, TestCaseSelector]; +export type TestCaseMulti = [string, TestCaseSelector[]]; + +export function getFirstContent() { + return (root: Root) => root.children[0].children[1].children[0] as T; +} + +export function testCases(cases: TestCase[]) { + cases.forEach(testCase => { + const [text, selector] = testCase; + const selectNodes = ([] as TestCaseSelector[]).concat(selector); + selectNodes.forEach(selectNode => { + test(`${JSON.stringify(text)}`, () => { + expect({ [RAW]: snapshotNode(text, selectNode) }).toMatchSnapshot(); + }); + }); + }); +} + +function snapshotNode( + text: string, + selectNode: (root: Root) => YamlUnistNode | Node, +) { + const root = parse(text); + const node = selectNode(root); + return ( + `${node.type} (` + + `${node.position.start.line}:${node.position.start.column} ~ ` + + `${node.position.end.line}:${node.position.end.column}` + + ")\n" + + codeFrameColumns(text, node.position) + + "\n" + + stringifyNode(node) + ); +} + +function stringifyNode(node: YamlUnistNode | Node): string { + const attributes = Object.keys(node) + .filter(key => { + switch (key) { + case "type": + case "position": + case "children": + case "leadingComments": + case "trailingComments": + return false; + default: + return true; + } + }) + .map(key => `${key}=${JSON.stringify(node[key as keyof typeof node])}`) + .sort() + .map((attribute, index) => (index === 0 ? " " + attribute : attribute)) + .join(" "); + const comments = + "leadingComments" in node + ? ([] as string[]).concat( + node.leadingComments.map( + comment => + ``, + ), + node.trailingComments.map( + comment => + ``, + ), + ) + : []; + return "children" in node + ? `<${node.type}${attributes}>\n${indent( + comments + .concat((node.children as YamlUnistNode[]).map(stringifyNode)) + .join("\n"), + )}\n` + : `<${node.type}${attributes} />`; +} + +function indent(text: string) { + return text + .split("\n") + .map(line => " " + line) + .join("\n"); +} + +function codeFrameColumns(text: string, position: Position) { + const lines = text.split("\n").map(line => `${line}¶`); + const markerLines = lines.map((line, index) => { + if (index < position.start.line - 1 || index > position.end.line - 1) { + return ""; + } + if (index === position.start.line - 1) { + return ( + " ".repeat(position.start.column - 1) + + (index === position.end.line - 1 && + position.start.column === position.end.column + ? "~" + : "^".repeat( + (index === position.end.line - 1 + ? position.end.column - 1 + : line.length) - + (position.start.column - 1), + )) + ); + } else if (index === position.end.line - 1) { + return position.end.column === 1 && line === "¶" + ? "^" + : "^".repeat(position.end.column - 1); + } else { + return "^".repeat(line.length); + } + }); + + const gutterWidth = Math.floor(Math.log10(lines.length)) + 1; + + return lines + .reduce( + (reduced, line, index) => { + const gutter = leftpad(`${index + 1}`, gutterWidth); + return reduced.concat( + `${gutter} | ${line.replace(/ /g, "·")}`, + markerLines[index] + ? `${" ".repeat(gutterWidth)} | ${markerLines[index]}` + : [], + ); + }, + [] as string[], + ) + .join("\n"); +} + +function leftpad(text: string, width: number) { + return " ".repeat(Math.max(0, width - text.length)) + text; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 00000000..e94edcef --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from "./parse"; +export * from "./types"; diff --git a/src/parse.ts b/src/parse.ts new file mode 100644 index 00000000..e2f43fa1 --- /dev/null +++ b/src/parse.ts @@ -0,0 +1,25 @@ +import LinesAndColumns from "lines-and-columns"; +import parseAST from "yaml/dist/ast/parse"; +import { Context, transformNode, transformNodes } from "./transform"; +import { transformRange } from "./transforms/range"; +import { Comment, Root } from "./types"; + +export function parse(text: string): Root { + const documents = parseAST(text); + const locator = new LinesAndColumns(text); + const comments: Comment[] = []; + + const context: Context = { + text, + locator, + comments, + transformNode: node => transformNode(node, context), + transformNodes: nodes => transformNodes(nodes, context), + }; + + return { + type: "root", + position: transformRange({ start: 0, end: text.length }, context), + children: context.transformNodes(documents), + }; +} diff --git a/src/transform.ts b/src/transform.ts new file mode 100644 index 00000000..2687956a --- /dev/null +++ b/src/transform.ts @@ -0,0 +1,125 @@ +import LinesAndColumns from "lines-and-columns"; +import { tranformAlias } from "./transforms/alias"; +import { tranformBlockFolded } from "./transforms/blockFolded"; +import { tranformBlockLiteral } from "./transforms/blockLiteral"; +import { transformComment } from "./transforms/comment"; +import { transformDirective } from "./transforms/directive"; +import { transformDocument } from "./transforms/document"; +import { transformFlowMap } from "./transforms/flowMap"; +import { transformFlowSeq } from "./transforms/flowSeq"; +import { transformMap } from "./transforms/map"; +import { transformNull } from "./transforms/null"; +import { transformPlain } from "./transforms/plain"; +import { transformQuoteDouble } from "./transforms/quoteDouble"; +import { transformQuoteSingle } from "./transforms/quoteSingle"; +import { transformSeq } from "./transforms/seq"; +import { + Alias, + BlockFolded, + BlockLiteral, + Comment, + Directive, + Document, + FlowMapping, + FlowSequence, + Mapping, + Null, + Plain, + QuoteDouble, + QuoteSingle, + Sequence, + YamlUnistNode, +} from "./types"; + +export type YamlNode = + | null + | yaml.Alias + | yaml.BlockValue + | yaml.Comment + | yaml.Directive + | yaml.Document + | yaml.FlowCollection + | yaml.Map + | yaml.PlainValue + | yaml.QuoteValue + | yaml.Seq; + +// prettier-ignore +export type YamlToUnist = + T extends null ? Null : + T extends yaml.Alias ? Alias : + T extends yaml.BlockValue ? BlockLiteral | BlockFolded : + T extends yaml.Comment ? Comment : + T extends yaml.Directive ? Directive : + T extends yaml.Document ? Document : + T extends yaml.FlowCollection ? FlowMapping | FlowSequence : + T extends yaml.Map ? Mapping : + T extends yaml.PlainValue ? Plain : + T extends yaml.QuoteValue ? QuoteDouble | QuoteSingle : + T extends yaml.Seq ? Sequence : + never; + +export interface Context { + text: string; + comments: Comment[]; + locator: LinesAndColumns; + transformNode: (node: T) => YamlToUnist; + transformNodes: ( + nodes: T[], + ) => Array, Comment>>; +} + +export function transformNode( + node: T, + context: Context, +): YamlToUnist; +export function transformNode(node: YamlNode, context: Context): YamlUnistNode { + if (node === null) { + return transformNull(); + } + + // TODO: error + // TODO: anchor and tag + // TODO: comment + + // prettier-ignore + switch (node.type) { + case "ALIAS": return tranformAlias(node, context); + case "BLOCK_FOLDED": return tranformBlockFolded(node, context); + case "BLOCK_LITERAL": return tranformBlockLiteral(node, context); + case "COMMENT": return transformComment(node, context); + case "DIRECTIVE": return transformDirective(node, context); + case "DOCUMENT": return transformDocument(node, context); + case "FLOW_MAP": return transformFlowMap(node, context); + case "FLOW_SEQ": return transformFlowSeq(node, context); + case "MAP": return transformMap(node, context); + case "PLAIN": return transformPlain(node, context); + case "QUOTE_DOUBLE": return transformQuoteDouble(node, context); + case "QUOTE_SINGLE": return transformQuoteSingle(node, context); + case "SEQ": return transformSeq(node, context); + // istanbul ignore next + default: throw new Error(`Unexpected node type ${(node as yaml.Node).type}`); + } +} + +/** + * transform `YamlNode`s to `YamlUnistNode`s and extract `Comment`s to `context.comments`. + */ +export function transformNodes( + nodes: T[], + context: Context, +): Array, Comment>> { + return nodes.reduce( + (reduced, node) => + node && node.type === "COMMENT" + ? (context.comments.push( + transformComment(node as yaml.Comment, context), + ), + reduced) + : reduced.concat( + // @ts-ignore: not assignable due to unknown reason + transformNode(node as Exclude, context), + ), + [] as Array, Comment>>, + ); +} diff --git a/src/transforms/__snapshots__/alias.test.ts.snap b/src/transforms/__snapshots__/alias.test.ts.snap new file mode 100644 index 00000000..ae57894d --- /dev/null +++ b/src/transforms/__snapshots__/alias.test.ts.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`" *123 " 1`] = ` +alias (1:3 ~ 1:7) +1 | ··*123··¶ + | ^^^^ + +`; diff --git a/src/transforms/__snapshots__/blockFolded.test.ts.snap b/src/transforms/__snapshots__/blockFolded.test.ts.snap new file mode 100644 index 00000000..ed71ec66 --- /dev/null +++ b/src/transforms/__snapshots__/blockFolded.test.ts.snap @@ -0,0 +1,103 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`">+\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockFolded (1:1 ~ 6:1) +1 | >+¶ + | ^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`">\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockFolded (1:1 ~ 6:1) +1 | >¶ + | ^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`">-\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockFolded (1:1 ~ 6:1) +1 | >-¶ + | ^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`">1+\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockFolded (1:1 ~ 6:1) +1 | >1+¶ + | ^^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`">1\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockFolded (1:1 ~ 6:1) +1 | >1¶ + | ^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`">1-\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockFolded (1:1 ~ 6:1) +1 | >1-¶ + | ^^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; diff --git a/src/transforms/__snapshots__/blockLiteral.test.ts.snap b/src/transforms/__snapshots__/blockLiteral.test.ts.snap new file mode 100644 index 00000000..12a0f311 --- /dev/null +++ b/src/transforms/__snapshots__/blockLiteral.test.ts.snap @@ -0,0 +1,103 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`"|+\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockLiteral (1:1 ~ 6:1) +1 | |+¶ + | ^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`"|\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockLiteral (1:1 ~ 6:1) +1 | |¶ + | ^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`"|-\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockLiteral (1:1 ~ 6:1) +1 | |-¶ + | ^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`"|1+\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockLiteral (1:1 ~ 6:1) +1 | |1+¶ + | ^^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`"|1\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockLiteral (1:1 ~ 6:1) +1 | |1¶ + | ^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; + +exports[`"|1-\\n 123\\n 456\\n\\n\\n" 1`] = ` +blockLiteral (1:1 ~ 6:1) +1 | |1-¶ + | ^^^^ +2 | ··123¶ + | ^^^^^^ +3 | ··456¶ + | ^^^^^^ +4 | ¶ + | ^ +5 | ¶ + | ^ +6 | ¶ + | ^ + +`; diff --git a/src/transforms/__snapshots__/directive.test.ts.snap b/src/transforms/__snapshots__/directive.test.ts.snap new file mode 100644 index 00000000..4d8647e3 --- /dev/null +++ b/src/transforms/__snapshots__/directive.test.ts.snap @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`"%TEST aaa bbb\\n---\\n" 1`] = ` +directive (1:1 ~ 1:14) +1 | %TEST·aaa·bbb¶ + | ^^^^^^^^^^^^^ +2 | ---¶ +3 | ¶ + +`; diff --git a/src/transforms/__snapshots__/document.test.ts.snap b/src/transforms/__snapshots__/document.test.ts.snap new file mode 100644 index 00000000..85529b79 --- /dev/null +++ b/src/transforms/__snapshots__/document.test.ts.snap @@ -0,0 +1,753 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n%BBB\\n---\\n\\n456\\n\\n" 1`] = ` +document (2:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^^ + 4 | 123¶ + | ^^^^ + 5 | ¶ + | ^ + 6 | ...¶ + | ^^^ + 7 | ¶ + 8 | %BBB¶ + 9 | ---¶ +10 | ¶ +11 | 456¶ +12 | ¶ +13 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n%BBB\\n---\\n\\n456\\n\\n" 2`] = ` +document (8:1 ~ 11:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | %BBB¶ + | ^^^^^ + 9 | ---¶ + | ^^^^ +10 | ¶ + | ^ +11 | 456¶ + | ^^^ +12 | ¶ +13 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n%BBB\\n---\\n\\n456\\n\\n" 3`] = ` +documentHead (2:1 ~ 3:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | %BBB¶ + 9 | ---¶ +10 | ¶ +11 | 456¶ +12 | ¶ +13 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n%BBB\\n---\\n\\n456\\n\\n" 4`] = ` +documentHead (8:1 ~ 9:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | %BBB¶ + | ^^^^^ + 9 | ---¶ + | ^^^ +10 | ¶ +11 | 456¶ +12 | ¶ +13 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n%BBB\\n---\\n\\n456\\n\\n" 5`] = ` +documentBody (4:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + | ^^^^ + 5 | ¶ + | ^ + 6 | ...¶ + | ^^^ + 7 | ¶ + 8 | %BBB¶ + 9 | ---¶ +10 | ¶ +11 | 456¶ +12 | ¶ +13 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n%BBB\\n---\\n\\n456\\n\\n" 6`] = ` +documentBody (11:1 ~ 11:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | %BBB¶ + 9 | ---¶ +10 | ¶ +11 | 456¶ + | ^^^ +12 | ¶ +13 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n---\\n\\n456\\n\\n" 1`] = ` +document (2:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^^ + 4 | 123¶ + | ^^^^ + 5 | ¶ + | ^ + 6 | ...¶ + | ^^^ + 7 | ¶ + 8 | ---¶ + 9 | ¶ +10 | 456¶ +11 | ¶ +12 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n---\\n\\n456\\n\\n" 2`] = ` +document (8:1 ~ 10:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | ---¶ + | ^^^^ + 9 | ¶ + | ^ +10 | 456¶ + | ^^^ +11 | ¶ +12 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n---\\n\\n456\\n\\n" 3`] = ` +documentHead (2:1 ~ 3:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | ---¶ + 9 | ¶ +10 | 456¶ +11 | ¶ +12 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n---\\n\\n456\\n\\n" 4`] = ` +documentHead (8:1 ~ 8:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | ---¶ + | ^^^ + 9 | ¶ +10 | 456¶ +11 | ¶ +12 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n---\\n\\n456\\n\\n" 5`] = ` +documentBody (4:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + | ^^^^ + 5 | ¶ + | ^ + 6 | ...¶ + | ^^^ + 7 | ¶ + 8 | ---¶ + 9 | ¶ +10 | 456¶ +11 | ¶ +12 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n---\\n\\n456\\n\\n" 6`] = ` +documentBody (10:1 ~ 10:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | ---¶ + 9 | ¶ +10 | 456¶ + | ^^^ +11 | ¶ +12 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n456\\n\\n" 1`] = ` +document (2:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^^ + 4 | 123¶ + | ^^^^ + 5 | ¶ + | ^ + 6 | ...¶ + | ^^^ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n456\\n\\n" 2`] = ` +document (8:1 ~ 8:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | 456¶ + | ^^^ + 9 | ¶ +10 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n456\\n\\n" 3`] = ` +documentHead (2:1 ~ 3:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n456\\n\\n" 4`] = ` +documentHead (8:1 ~ 8:1) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | 456¶ + | ~ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n456\\n\\n" 5`] = ` +documentBody (4:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + | ^^^^ + 5 | ¶ + | ^ + 6 | ...¶ + | ^^^ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n...\\n\\n456\\n\\n" 6`] = ` +documentBody (8:1 ~ 8:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ...¶ + 7 | ¶ + 8 | 456¶ + | ^^^ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n---\\n\\n456\\n\\n" 1`] = ` +document (2:1 ~ 4:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^^ + 4 | 123¶ + | ^^^ + 5 | ¶ + 6 | ---¶ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n---\\n\\n456\\n\\n" 2`] = ` +document (6:1 ~ 8:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ---¶ + | ^^^^ + 7 | ¶ + | ^ + 8 | 456¶ + | ^^^ + 9 | ¶ +10 | ¶ + + + + + + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n---\\n\\n456\\n\\n" 3`] = ` +documentHead (2:1 ~ 3:4) + 1 | ¶ + 2 | %AAA¶ + | ^^^^^ + 3 | ---¶ + | ^^^ + 4 | 123¶ + 5 | ¶ + 6 | ---¶ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n---\\n\\n456\\n\\n" 4`] = ` +documentHead (6:1 ~ 6:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ---¶ + | ^^^ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n---\\n\\n456\\n\\n" 5`] = ` +documentBody (4:1 ~ 4:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + | ^^^ + 5 | ¶ + 6 | ---¶ + 7 | ¶ + 8 | 456¶ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n%AAA\\n---\\n123\\n\\n---\\n\\n456\\n\\n" 6`] = ` +documentBody (8:1 ~ 8:4) + 1 | ¶ + 2 | %AAA¶ + 3 | ---¶ + 4 | 123¶ + 5 | ¶ + 6 | ---¶ + 7 | ¶ + 8 | 456¶ + | ^^^ + 9 | ¶ +10 | ¶ + + + +`; + +exports[`"\\n123\\n\\n...\\n\\n456\\n\\n" 1`] = ` +document (2:1 ~ 4:4) +1 | ¶ +2 | 123¶ + | ^^^^ +3 | ¶ + | ^ +4 | ...¶ + | ^^^ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + + + + + + +`; + +exports[`"\\n123\\n\\n...\\n\\n456\\n\\n" 2`] = ` +document (6:1 ~ 6:4) +1 | ¶ +2 | 123¶ +3 | ¶ +4 | ...¶ +5 | ¶ +6 | 456¶ + | ^^^ +7 | ¶ +8 | ¶ + + + + + + + + +`; + +exports[`"\\n123\\n\\n...\\n\\n456\\n\\n" 3`] = ` +documentHead (2:1 ~ 2:1) +1 | ¶ +2 | 123¶ + | ~ +3 | ¶ +4 | ...¶ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n...\\n\\n456\\n\\n" 4`] = ` +documentHead (6:1 ~ 6:1) +1 | ¶ +2 | 123¶ +3 | ¶ +4 | ...¶ +5 | ¶ +6 | 456¶ + | ~ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n...\\n\\n456\\n\\n" 5`] = ` +documentBody (2:1 ~ 4:4) +1 | ¶ +2 | 123¶ + | ^^^^ +3 | ¶ + | ^ +4 | ...¶ + | ^^^ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n...\\n\\n456\\n\\n" 6`] = ` +documentBody (6:1 ~ 6:4) +1 | ¶ +2 | 123¶ +3 | ¶ +4 | ...¶ +5 | ¶ +6 | 456¶ + | ^^^ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n---\\n\\n456\\n\\n" 1`] = ` +document (2:1 ~ 2:4) +1 | ¶ +2 | 123¶ + | ^^^ +3 | ¶ +4 | ---¶ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + + + + + + +`; + +exports[`"\\n123\\n\\n---\\n\\n456\\n\\n" 2`] = ` +document (4:1 ~ 6:4) +1 | ¶ +2 | 123¶ +3 | ¶ +4 | ---¶ + | ^^^^ +5 | ¶ + | ^ +6 | 456¶ + | ^^^ +7 | ¶ +8 | ¶ + + + + + + + + +`; + +exports[`"\\n123\\n\\n---\\n\\n456\\n\\n" 3`] = ` +documentHead (2:1 ~ 2:1) +1 | ¶ +2 | 123¶ + | ~ +3 | ¶ +4 | ---¶ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n---\\n\\n456\\n\\n" 4`] = ` +documentHead (4:1 ~ 4:4) +1 | ¶ +2 | 123¶ +3 | ¶ +4 | ---¶ + | ^^^ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n---\\n\\n456\\n\\n" 5`] = ` +documentBody (2:1 ~ 2:4) +1 | ¶ +2 | 123¶ + | ^^^ +3 | ¶ +4 | ---¶ +5 | ¶ +6 | 456¶ +7 | ¶ +8 | ¶ + + + +`; + +exports[`"\\n123\\n\\n---\\n\\n456\\n\\n" 6`] = ` +documentBody (6:1 ~ 6:4) +1 | ¶ +2 | 123¶ +3 | ¶ +4 | ---¶ +5 | ¶ +6 | 456¶ + | ^^^ +7 | ¶ +8 | ¶ + + + +`; diff --git a/src/transforms/__snapshots__/flowMap.test.ts.snap b/src/transforms/__snapshots__/flowMap.test.ts.snap new file mode 100644 index 00000000..cb2b8f01 --- /dev/null +++ b/src/transforms/__snapshots__/flowMap.test.ts.snap @@ -0,0 +1,681 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`" { , } " 1`] = ` +flowMapping (1:3 ~ 1:8) +1 | ··{·,·}··¶ + | ^^^^^ + + + + + + + + + + +`; + +exports[`" { , } " 2`] = ` +mappingItem (1:5 ~ 1:5) +1 | ··{·,·}··¶ + | ~ + + + + + + + + +`; + +exports[`" { , } " 3`] = ` +mappingKey (1:5 ~ 1:5) +1 | ··{·,·}··¶ + | ~ + + + +`; + +exports[`" { , } " 4`] = ` +mappingValue (1:5 ~ 1:5) +1 | ··{·,·}··¶ + | ~ + + + +`; + +exports[`" { : } " 1`] = ` +flowMapping (1:3 ~ 1:8) +1 | ··{·:·}··¶ + | ^^^^^ + + + + + + + + + + +`; + +exports[`" { : } " 2`] = ` +mappingItem (1:5 ~ 1:6) +1 | ··{·:·}··¶ + | ^ + + + + + + + + +`; + +exports[`" { : } " 3`] = ` +mappingKey (1:5 ~ 1:5) +1 | ··{·:·}··¶ + | ~ + + + +`; + +exports[`" { : } " 4`] = ` +mappingValue (1:5 ~ 1:6) +1 | ··{·:·}··¶ + | ^ + + + +`; + +exports[`" { : 123 } " 1`] = ` +flowMapping (1:3 ~ 1:12) +1 | ··{·:·123·}··¶ + | ^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { : 123 } " 2`] = ` +mappingItem (1:5 ~ 1:10) +1 | ··{·:·123·}··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`" { : 123 } " 3`] = ` +mappingKey (1:5 ~ 1:5) +1 | ··{·:·123·}··¶ + | ~ + + + +`; + +exports[`" { : 123 } " 4`] = ` +mappingValue (1:5 ~ 1:10) +1 | ··{·:·123·}··¶ + | ^^^^^ + + + +`; + +exports[`" { ? : } " 1`] = ` +flowMapping (1:3 ~ 1:10) +1 | ··{·?·:·}··¶ + | ^^^^^^^ + + + + + + + + + + +`; + +exports[`" { ? : } " 2`] = ` +mappingItem (1:5 ~ 1:8) +1 | ··{·?·:·}··¶ + | ^^^ + + + + + + + + +`; + +exports[`" { ? : } " 3`] = ` +mappingKey (1:5 ~ 1:6) +1 | ··{·?·:·}··¶ + | ^ + + + +`; + +exports[`" { ? : } " 4`] = ` +mappingValue (1:7 ~ 1:8) +1 | ··{·?·:·}··¶ + | ^ + + + +`; + +exports[`" { ? : 123 } " 1`] = ` +flowMapping (1:3 ~ 1:14) +1 | ··{·?·:·123·}··¶ + | ^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { ? : 123 } " 2`] = ` +mappingItem (1:5 ~ 1:12) +1 | ··{·?·:·123·}··¶ + | ^^^^^^^ + + + + + + + + +`; + +exports[`" { ? : 123 } " 3`] = ` +mappingKey (1:5 ~ 1:6) +1 | ··{·?·:·123·}··¶ + | ^ + + + +`; + +exports[`" { ? : 123 } " 4`] = ` +mappingValue (1:7 ~ 1:12) +1 | ··{·?·:·123·}··¶ + | ^^^^^ + + + +`; + +exports[`" { ? } " 1`] = ` +flowMapping (1:3 ~ 1:8) +1 | ··{·?·}··¶ + | ^^^^^ + + + + + + + + + + +`; + +exports[`" { ? } " 2`] = ` +mappingItem (1:5 ~ 1:6) +1 | ··{·?·}··¶ + | ^ + + + + + + + + +`; + +exports[`" { ? } " 3`] = ` +mappingKey (1:5 ~ 1:6) +1 | ··{·?·}··¶ + | ^ + + + +`; + +exports[`" { ? } " 4`] = ` +mappingValue (1:6 ~ 1:6) +1 | ··{·?·}··¶ + | ~ + + + +`; + +exports[`" { ? 123 : } " 1`] = ` +flowMapping (1:3 ~ 1:14) +1 | ··{·?·123·:·}··¶ + | ^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { ? 123 : } " 2`] = ` +mappingItem (1:5 ~ 1:12) +1 | ··{·?·123·:·}··¶ + | ^^^^^^^ + + + + + + + + +`; + +exports[`" { ? 123 : } " 3`] = ` +mappingKey (1:5 ~ 1:10) +1 | ··{·?·123·:·}··¶ + | ^^^^^ + + + +`; + +exports[`" { ? 123 : } " 4`] = ` +mappingValue (1:11 ~ 1:12) +1 | ··{·?·123·:·}··¶ + | ^ + + + +`; + +exports[`" { ? 123 : 456 } " 1`] = ` +flowMapping (1:3 ~ 1:18) +1 | ··{·?·123·:·456·}··¶ + | ^^^^^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { ? 123 : 456 } " 2`] = ` +mappingItem (1:5 ~ 1:16) +1 | ··{·?·123·:·456·}··¶ + | ^^^^^^^^^^^ + + + + + + + + +`; + +exports[`" { ? 123 : 456 } " 3`] = ` +mappingKey (1:5 ~ 1:10) +1 | ··{·?·123·:·456·}··¶ + | ^^^^^ + + + +`; + +exports[`" { ? 123 : 456 } " 4`] = ` +mappingValue (1:11 ~ 1:16) +1 | ··{·?·123·:·456·}··¶ + | ^^^^^ + + + +`; + +exports[`" { ? 123 } " 1`] = ` +flowMapping (1:3 ~ 1:12) +1 | ··{·?·123·}··¶ + | ^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { ? 123 } " 2`] = ` +mappingItem (1:5 ~ 1:10) +1 | ··{·?·123·}··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`" { ? 123 } " 3`] = ` +mappingKey (1:5 ~ 1:10) +1 | ··{·?·123·}··¶ + | ^^^^^ + + + +`; + +exports[`" { ? 123 } " 4`] = ` +mappingValue (1:10 ~ 1:10) +1 | ··{·?·123·}··¶ + | ~ + + + +`; + +exports[`" { 123 : } " 1`] = ` +flowMapping (1:3 ~ 1:12) +1 | ··{·123·:·}··¶ + | ^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { 123 : } " 2`] = ` +mappingItem (1:5 ~ 1:10) +1 | ··{·123·:·}··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`" { 123 : } " 3`] = ` +mappingKey (1:5 ~ 1:8) +1 | ··{·123·:·}··¶ + | ^^^ + + + +`; + +exports[`" { 123 : } " 4`] = ` +mappingValue (1:9 ~ 1:10) +1 | ··{·123·:·}··¶ + | ^ + + + +`; + +exports[`" { 123 : 456 } " 1`] = ` +flowMapping (1:3 ~ 1:16) +1 | ··{·123·:·456·}··¶ + | ^^^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { 123 : 456 } " 2`] = ` +mappingItem (1:5 ~ 1:14) +1 | ··{·123·:·456·}··¶ + | ^^^^^^^^^ + + + + + + + + +`; + +exports[`" { 123 : 456 } " 3`] = ` +mappingKey (1:5 ~ 1:8) +1 | ··{·123·:·456·}··¶ + | ^^^ + + + +`; + +exports[`" { 123 : 456 } " 4`] = ` +mappingValue (1:9 ~ 1:14) +1 | ··{·123·:·456·}··¶ + | ^^^^^ + + + +`; + +exports[`" { 123 } " 1`] = ` +flowMapping (1:3 ~ 1:10) +1 | ··{·123·}··¶ + | ^^^^^^^ + + + + + + + + + + +`; + +exports[`" { 123 } " 2`] = ` +mappingItem (1:5 ~ 1:8) +1 | ··{·123·}··¶ + | ^^^ + + + + + + + + +`; + +exports[`" { 123 } " 3`] = ` +mappingKey (1:5 ~ 1:8) +1 | ··{·123·}··¶ + | ^^^ + + + +`; + +exports[`" { 123 } " 4`] = ` +mappingValue (1:8 ~ 1:8) +1 | ··{·123·}··¶ + | ~ + + + +`; + +exports[`" { 123, } " 1`] = ` +flowMapping (1:3 ~ 1:11) +1 | ··{·123,·}··¶ + | ^^^^^^^^ + + + + + + + + + + +`; + +exports[`" { 123, } " 2`] = ` +mappingItem (1:5 ~ 1:8) +1 | ··{·123,·}··¶ + | ^^^ + + + + + + + + +`; + +exports[`" { 123, } " 3`] = ` +mappingKey (1:5 ~ 1:8) +1 | ··{·123,·}··¶ + | ^^^ + + + +`; + +exports[`" { 123, } " 4`] = ` +mappingValue (1:8 ~ 1:8) +1 | ··{·123,·}··¶ + | ~ + + + +`; + +exports[`" { 123,, } " 1`] = ` +flowMapping (1:3 ~ 1:12) +1 | ··{·123,,·}··¶ + | ^^^^^^^^^ + + + + + + + + + + + + + + + + + + +`; + +exports[`" { 123,, } " 2`] = ` +mappingItem (1:5 ~ 1:8) +1 | ··{·123,,·}··¶ + | ^^^ + + + + + + + + +`; + +exports[`" { 123,, } " 3`] = ` +mappingKey (1:5 ~ 1:8) +1 | ··{·123,,·}··¶ + | ^^^ + + + +`; + +exports[`" { 123,, } " 4`] = ` +mappingValue (1:8 ~ 1:8) +1 | ··{·123,,·}··¶ + | ~ + + + +`; diff --git a/src/transforms/__snapshots__/flowSeq.test.ts.snap b/src/transforms/__snapshots__/flowSeq.test.ts.snap new file mode 100644 index 00000000..dd6fa516 --- /dev/null +++ b/src/transforms/__snapshots__/flowSeq.test.ts.snap @@ -0,0 +1,384 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`" [ , ] " 1`] = ` +flowSequence (1:3 ~ 1:8) +1 | ··[·,·]··¶ + | ^^^^^ + + + + + +`; + +exports[`" [ , ] " 2`] = ` +sequenceItem (1:5 ~ 1:5) +1 | ··[·,·]··¶ + | ~ + + + +`; + +exports[`" [ : ] " 1`] = ` +flowSequence (1:3 ~ 1:8) +1 | ··[·:·]··¶ + | ^^^^^ + + + + + + + + + + +`; + +exports[`" [ : ] " 2`] = ` +mappingItem (1:5 ~ 1:6) +1 | ··[·:·]··¶ + | ^ + + + + + + + + +`; + +exports[`" [ : 123 ] " 1`] = ` +flowSequence (1:3 ~ 1:12) +1 | ··[·:·123·]··¶ + | ^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ : 123 ] " 2`] = ` +mappingItem (1:5 ~ 1:10) +1 | ··[·:·123·]··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`" [ ? : ] " 1`] = ` +flowSequence (1:3 ~ 1:10) +1 | ··[·?·:·]··¶ + | ^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ ? : ] " 2`] = ` +mappingItem (1:5 ~ 1:8) +1 | ··[·?·:·]··¶ + | ^^^ + + + + + + + + +`; + +exports[`" [ ? : 123 ] " 1`] = ` +flowSequence (1:3 ~ 1:14) +1 | ··[·?·:·123·]··¶ + | ^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ ? : 123 ] " 2`] = ` +mappingItem (1:5 ~ 1:12) +1 | ··[·?·:·123·]··¶ + | ^^^^^^^ + + + + + + + + +`; + +exports[`" [ ? ] " 1`] = ` +flowSequence (1:3 ~ 1:8) +1 | ··[·?·]··¶ + | ^^^^^ + + + + + + + + + + +`; + +exports[`" [ ? ] " 2`] = ` +mappingItem (1:5 ~ 1:6) +1 | ··[·?·]··¶ + | ^ + + + + + + + + +`; + +exports[`" [ ? 123 : ] " 1`] = ` +flowSequence (1:3 ~ 1:14) +1 | ··[·?·123·:·]··¶ + | ^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ ? 123 : ] " 2`] = ` +mappingItem (1:5 ~ 1:12) +1 | ··[·?·123·:·]··¶ + | ^^^^^^^ + + + + + + + + +`; + +exports[`" [ ? 123 : 456 ] " 1`] = ` +flowSequence (1:3 ~ 1:18) +1 | ··[·?·123·:·456·]··¶ + | ^^^^^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ ? 123 : 456 ] " 2`] = ` +mappingItem (1:5 ~ 1:16) +1 | ··[·?·123·:·456·]··¶ + | ^^^^^^^^^^^ + + + + + + + + +`; + +exports[`" [ ? 123 ] " 1`] = ` +flowSequence (1:3 ~ 1:12) +1 | ··[·?·123·]··¶ + | ^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ ? 123 ] " 2`] = ` +mappingItem (1:5 ~ 1:10) +1 | ··[·?·123·]··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`" [ 123 : ] " 1`] = ` +flowSequence (1:3 ~ 1:12) +1 | ··[·123·:·]··¶ + | ^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ 123 : ] " 2`] = ` +mappingItem (1:5 ~ 1:10) +1 | ··[·123·:·]··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`" [ 123 : 456 ] " 1`] = ` +flowSequence (1:3 ~ 1:16) +1 | ··[·123·:·456·]··¶ + | ^^^^^^^^^^^^^ + + + + + + + + + + +`; + +exports[`" [ 123 : 456 ] " 2`] = ` +mappingItem (1:5 ~ 1:14) +1 | ··[·123·:·456·]··¶ + | ^^^^^^^^^ + + + + + + + + +`; + +exports[`" [ 123 ] " 1`] = ` +flowSequence (1:3 ~ 1:10) +1 | ··[·123·]··¶ + | ^^^^^^^ + + + + + +`; + +exports[`" [ 123 ] " 2`] = ` +sequenceItem (1:5 ~ 1:8) +1 | ··[·123·]··¶ + | ^^^ + + + +`; + +exports[`" [ 123, ] " 1`] = ` +flowSequence (1:3 ~ 1:11) +1 | ··[·123,·]··¶ + | ^^^^^^^^ + + + + + +`; + +exports[`" [ 123, ] " 2`] = ` +sequenceItem (1:5 ~ 1:8) +1 | ··[·123,·]··¶ + | ^^^ + + + +`; + +exports[`" [ 123,, ] " 1`] = ` +flowSequence (1:3 ~ 1:12) +1 | ··[·123,,·]··¶ + | ^^^^^^^^^ + + + + + + + + +`; + +exports[`" [ 123,, ] " 2`] = ` +sequenceItem (1:5 ~ 1:8) +1 | ··[·123,,·]··¶ + | ^^^ + + + +`; diff --git a/src/transforms/__snapshots__/map.test.ts.snap b/src/transforms/__snapshots__/map.test.ts.snap new file mode 100644 index 00000000..9a4b1279 --- /dev/null +++ b/src/transforms/__snapshots__/map.test.ts.snap @@ -0,0 +1,403 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`": " 1`] = ` +mapping (1:1 ~ 1:2) +1 | :···¶ + | ^ + + + + + + + + + + +`; + +exports[`": " 2`] = ` +mappingItem (1:1 ~ 1:2) +1 | :···¶ + | ^ + + + + + + + + +`; + +exports[`": " 3`] = ` +mappingKey (1:1 ~ 1:1) +1 | :···¶ + | ~ + + + +`; + +exports[`": " 4`] = ` +mappingValue (1:1 ~ 1:2) +1 | :···¶ + | ^ + + + +`; + +exports[`": 123 " 1`] = ` +mapping (1:1 ~ 1:6) +1 | :·123··¶ + | ^^^^^ + + + + + + + + + + +`; + +exports[`": 123 " 2`] = ` +mappingItem (1:1 ~ 1:6) +1 | :·123··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`": 123 " 3`] = ` +mappingKey (1:1 ~ 1:1) +1 | :·123··¶ + | ~ + + + +`; + +exports[`": 123 " 4`] = ` +mappingValue (1:1 ~ 1:6) +1 | :·123··¶ + | ^^^^^ + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 1`] = ` +mapping (1:1 ~ 4:6) +1 | ?·a··¶ + | ^^^^^^ +2 | :·123··¶ + | ^^^^^^^^ +3 | ?·b··¶ + | ^^^^^^ +4 | :·456··¶ + | ^^^^^ + + + + + + + + + + + + + + + + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 2`] = ` +mappingItem (1:1 ~ 2:6) +1 | ?·a··¶ + | ^^^^^^ +2 | :·123··¶ + | ^^^^^ +3 | ?·b··¶ +4 | :·456··¶ + + + + + + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 3`] = ` +mappingItem (3:1 ~ 4:6) +1 | ?·a··¶ +2 | :·123··¶ +3 | ?·b··¶ + | ^^^^^^ +4 | :·456··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 4`] = ` +mappingKey (1:1 ~ 1:4) +1 | ?·a··¶ + | ^^^ +2 | :·123··¶ +3 | ?·b··¶ +4 | :·456··¶ + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 5`] = ` +mappingKey (3:1 ~ 3:4) +1 | ?·a··¶ +2 | :·123··¶ +3 | ?·b··¶ + | ^^^ +4 | :·456··¶ + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 6`] = ` +mappingValue (2:1 ~ 2:6) +1 | ?·a··¶ +2 | :·123··¶ + | ^^^^^ +3 | ?·b··¶ +4 | :·456··¶ + + + +`; + +exports[`"? a \\n: 123 \\n? b \\n: 456 " 7`] = ` +mappingValue (4:1 ~ 4:6) +1 | ?·a··¶ +2 | :·123··¶ +3 | ?·b··¶ +4 | :·456··¶ + | ^^^^^ + + + +`; + +exports[`"a: " 1`] = ` +mapping (1:1 ~ 1:3) +1 | a:···¶ + | ^^ + + + + + + + + + + +`; + +exports[`"a: " 2`] = ` +mappingItem (1:1 ~ 1:3) +1 | a:···¶ + | ^^ + + + + + + + + +`; + +exports[`"a: " 3`] = ` +mappingKey (1:1 ~ 1:2) +1 | a:···¶ + | ^ + + + +`; + +exports[`"a: " 4`] = ` +mappingValue (1:2 ~ 1:3) +1 | a:···¶ + | ^ + + + +`; + +exports[`"a: 123 " 1`] = ` +mapping (1:1 ~ 1:7) +1 | a:·123··¶ + | ^^^^^^ + + + + + + + + + + +`; + +exports[`"a: 123 " 2`] = ` +mappingItem (1:1 ~ 1:7) +1 | a:·123··¶ + | ^^^^^^ + + + + + + + + +`; + +exports[`"a: 123 " 3`] = ` +mappingKey (1:1 ~ 1:2) +1 | a:·123··¶ + | ^ + + + +`; + +exports[`"a: 123 " 4`] = ` +mappingValue (1:2 ~ 1:7) +1 | a:·123··¶ + | ^^^^^ + + + +`; + +exports[`"a: 123 \\nb: 456 " 1`] = ` +mapping (1:1 ~ 2:7) +1 | a:·123··¶ + | ^^^^^^^^^ +2 | b:·456··¶ + | ^^^^^^ + + + + + + + + + + + + + + + + + + +`; + +exports[`"a: 123 \\nb: 456 " 2`] = ` +mappingItem (1:1 ~ 1:7) +1 | a:·123··¶ + | ^^^^^^ +2 | b:·456··¶ + + + + + + + + +`; + +exports[`"a: 123 \\nb: 456 " 3`] = ` +mappingItem (2:1 ~ 2:7) +1 | a:·123··¶ +2 | b:·456··¶ + | ^^^^^^ + + + + + + + + +`; + +exports[`"a: 123 \\nb: 456 " 4`] = ` +mappingKey (1:1 ~ 1:2) +1 | a:·123··¶ + | ^ +2 | b:·456··¶ + + + +`; + +exports[`"a: 123 \\nb: 456 " 5`] = ` +mappingKey (2:1 ~ 2:2) +1 | a:·123··¶ +2 | b:·456··¶ + | ^ + + + +`; + +exports[`"a: 123 \\nb: 456 " 6`] = ` +mappingValue (1:2 ~ 1:7) +1 | a:·123··¶ + | ^^^^^ +2 | b:·456··¶ + + + +`; + +exports[`"a: 123 \\nb: 456 " 7`] = ` +mappingValue (2:2 ~ 2:7) +1 | a:·123··¶ +2 | b:·456··¶ + | ^^^^^ + + + +`; diff --git a/src/transforms/__snapshots__/plain.test.ts.snap b/src/transforms/__snapshots__/plain.test.ts.snap new file mode 100644 index 00000000..f18c52d7 --- /dev/null +++ b/src/transforms/__snapshots__/plain.test.ts.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`" 123 " 1`] = ` +plain (1:4 ~ 1:7) +1 | ···123···¶ + | ^^^ + +`; diff --git a/src/transforms/__snapshots__/quoteDouble.test.ts.snap b/src/transforms/__snapshots__/quoteDouble.test.ts.snap new file mode 100644 index 00000000..78f3c6c6 --- /dev/null +++ b/src/transforms/__snapshots__/quoteDouble.test.ts.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`" \\"123 \\" " 1`] = ` +quoteDouble (1:4 ~ 1:10) +1 | ···"123·"··¶ + | ^^^^^^ + +`; diff --git a/src/transforms/__snapshots__/quoteSingle.test.ts.snap b/src/transforms/__snapshots__/quoteSingle.test.ts.snap new file mode 100644 index 00000000..3079f65e --- /dev/null +++ b/src/transforms/__snapshots__/quoteSingle.test.ts.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`" '123 ' " 1`] = ` +quoteSingle (1:4 ~ 1:10) +1 | ···'123·'··¶ + | ^^^^^^ + +`; diff --git a/src/transforms/__snapshots__/seq.test.ts.snap b/src/transforms/__snapshots__/seq.test.ts.snap new file mode 100644 index 00000000..c3eacfec --- /dev/null +++ b/src/transforms/__snapshots__/seq.test.ts.snap @@ -0,0 +1,77 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`"- " 1`] = ` +sequence (1:1 ~ 1:2) +1 | -···¶ + | ^ + + + + + +`; + +exports[`"- " 2`] = ` +sequenceItem (1:1 ~ 1:2) +1 | -···¶ + | ^ + + + +`; + +exports[`"- 123 " 1`] = ` +sequence (1:1 ~ 1:6) +1 | -·123··¶ + | ^^^^^ + + + + + +`; + +exports[`"- 123 " 2`] = ` +sequenceItem (1:1 ~ 1:6) +1 | -·123··¶ + | ^^^^^ + + + +`; + +exports[`"- 123 \\n- 456 " 1`] = ` +sequence (1:1 ~ 2:6) +1 | -·123··¶ + | ^^^^^^^^ +2 | -·456··¶ + | ^^^^^ + + + + + + + + +`; + +exports[`"- 123 \\n- 456 " 2`] = ` +sequenceItem (1:1 ~ 1:6) +1 | -·123··¶ + | ^^^^^ +2 | -·456··¶ + + + +`; + +exports[`"- 123 \\n- 456 " 3`] = ` +sequenceItem (2:1 ~ 2:6) +1 | -·123··¶ +2 | -·456··¶ + | ^^^^^ + + + +`; diff --git a/src/transforms/alias.test.ts b/src/transforms/alias.test.ts new file mode 100644 index 00000000..c2de3278 --- /dev/null +++ b/src/transforms/alias.test.ts @@ -0,0 +1,3 @@ +import { getFirstContent, testCases } from "../helpers"; + +testCases([[" *123 ", getFirstContent()]]); diff --git a/src/transforms/alias.ts b/src/transforms/alias.ts new file mode 100644 index 00000000..9935e37f --- /dev/null +++ b/src/transforms/alias.ts @@ -0,0 +1,21 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Alias } from "../types"; +import { transformRange } from "./range"; + +export function tranformAlias(alias: yaml.Alias, context: Context): Alias { + assert(alias.valueRange !== null); + return { + type: "alias", + position: transformRange( + { + start: alias.valueRange!.start - 1, // * + end: alias.valueRange!.end, + }, + context, + ), + value: alias.rawValue, + leadingComments: [], + trailingComments: [], + }; +} diff --git a/src/transforms/blockFolded.test.ts b/src/transforms/blockFolded.test.ts new file mode 100644 index 00000000..748bb5c4 --- /dev/null +++ b/src/transforms/blockFolded.test.ts @@ -0,0 +1,10 @@ +import { getFirstContent, testCases } from "../helpers"; + +testCases([ + [">\n 123\n 456\n\n\n", getFirstContent()], + [">+\n 123\n 456\n\n\n", getFirstContent()], + [">-\n 123\n 456\n\n\n", getFirstContent()], + [">1\n 123\n 456\n\n\n", getFirstContent()], + [">1+\n 123\n 456\n\n\n", getFirstContent()], + [">1-\n 123\n 456\n\n\n", getFirstContent()], +]); diff --git a/src/transforms/blockFolded.ts b/src/transforms/blockFolded.ts new file mode 100644 index 00000000..d507d2e9 --- /dev/null +++ b/src/transforms/blockFolded.ts @@ -0,0 +1,15 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { BlockFolded } from "../types"; +import { tranformBlockValue } from "./blockValue"; + +export function tranformBlockFolded( + blockFolded: yaml.BlockValue, + context: Context, +): BlockFolded { + assert(blockFolded.type === "BLOCK_FOLDED"); + return { + ...tranformBlockValue(blockFolded, context), + type: "blockFolded", + }; +} diff --git a/src/transforms/blockLiteral.test.ts b/src/transforms/blockLiteral.test.ts new file mode 100644 index 00000000..da90f4b6 --- /dev/null +++ b/src/transforms/blockLiteral.test.ts @@ -0,0 +1,10 @@ +import { getFirstContent, testCases } from "../helpers"; + +testCases([ + ["|\n 123\n 456\n\n\n", getFirstContent()], + ["|+\n 123\n 456\n\n\n", getFirstContent()], + ["|-\n 123\n 456\n\n\n", getFirstContent()], + ["|1\n 123\n 456\n\n\n", getFirstContent()], + ["|1+\n 123\n 456\n\n\n", getFirstContent()], + ["|1-\n 123\n 456\n\n\n", getFirstContent()], +]); diff --git a/src/transforms/blockLiteral.ts b/src/transforms/blockLiteral.ts new file mode 100644 index 00000000..8c30c0cd --- /dev/null +++ b/src/transforms/blockLiteral.ts @@ -0,0 +1,15 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { BlockLiteral } from "../types"; +import { tranformBlockValue } from "./blockValue"; + +export function tranformBlockLiteral( + blockLiteral: yaml.BlockValue, + context: Context, +): BlockLiteral { + assert(blockLiteral.type === "BLOCK_LITERAL"); + return { + ...tranformBlockValue(blockLiteral, context), + type: "blockLiteral", + }; +} diff --git a/src/transforms/blockValue.ts b/src/transforms/blockValue.ts new file mode 100644 index 00000000..87117141 --- /dev/null +++ b/src/transforms/blockValue.ts @@ -0,0 +1,35 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { BlockValue } from "../types"; +import { transformRange } from "./range"; + +enum Chomping { + CLIP = "clip", + STRIP = "strip", + KEEP = "keep", +} + +export function tranformBlockValue( + blockValue: yaml.BlockValue, + context: Context, +): BlockValue { + assert(blockValue.range !== null); + assert(blockValue.strValue !== null); + + const indicatorLength = 1; // | or > + const chompingLength = blockValue.chomping === "CLIP" ? 0 : 1; + const hasExplicitBlockIndent = + blockValue.header.length - indicatorLength - chompingLength !== 0; + + assert(!hasExplicitBlockIndent || blockValue.blockIndent !== null); + + return { + type: "blockBase", + position: transformRange(blockValue.range!, context), + chomping: Chomping[blockValue.chomping], + indent: hasExplicitBlockIndent ? blockValue.blockIndent! : undefined, + value: blockValue.strValue!, + leadingComments: [], + trailingComments: [], + }; +} diff --git a/src/transforms/comment.ts b/src/transforms/comment.ts new file mode 100644 index 00000000..2b41eafb --- /dev/null +++ b/src/transforms/comment.ts @@ -0,0 +1,16 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Comment } from "../types"; +import { transformRange } from "./range"; + +export function transformComment( + comment: yaml.Comment, + context: Context, +): Comment { + assert(comment.range !== null); + return { + type: "comment", + position: transformRange(comment.range!, context), + value: comment.comment, + }; +} diff --git a/src/transforms/directive.test.ts b/src/transforms/directive.test.ts new file mode 100644 index 00000000..0457ce3f --- /dev/null +++ b/src/transforms/directive.test.ts @@ -0,0 +1,5 @@ +import { testCases } from "../helpers"; + +testCases([ + ["%TEST aaa bbb\n---\n", root => root.children[0].children[0].children[0]], +]); diff --git a/src/transforms/directive.ts b/src/transforms/directive.ts new file mode 100644 index 00000000..b8d74f67 --- /dev/null +++ b/src/transforms/directive.ts @@ -0,0 +1,17 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Directive } from "../types"; +import { transformRange } from "./range"; + +export function transformDirective( + directive: yaml.Directive, + context: Context, +): Directive { + assert(directive.range !== null); + return { + type: "directive", + name: directive.name, + parameters: directive.parameters, + position: transformRange(directive.range!, context), + }; +} diff --git a/src/transforms/document.test.ts b/src/transforms/document.test.ts new file mode 100644 index 00000000..3ce3e84d --- /dev/null +++ b/src/transforms/document.test.ts @@ -0,0 +1,32 @@ +import { testCases } from "../helpers"; +import { Root } from "../types"; + +const selectors = [ + getDocument(0), + getDocument(1), + getDocumentHead(0), + getDocumentHead(1), + getDocumentBody(0), + getDocumentBody(1), +]; + +testCases([ + ["\n123\n\n---\n\n456\n\n", selectors], + ["\n123\n\n...\n\n456\n\n", selectors], + ["\n%AAA\n---\n123\n\n...\n\n456\n\n", selectors], + ["\n%AAA\n---\n123\n\n---\n\n456\n\n", selectors], + ["\n%AAA\n---\n123\n\n...\n\n---\n\n456\n\n", selectors], + ["\n%AAA\n---\n123\n\n...\n\n%BBB\n---\n\n456\n\n", selectors], +]); + +function getDocument(documentIndex: number) { + return (root: Root) => root.children[documentIndex]; +} + +function getDocumentHead(documentIndex: number) { + return (root: Root) => getDocument(documentIndex)(root).children[0]; +} + +function getDocumentBody(documentIndex: number) { + return (root: Root) => getDocument(documentIndex)(root).children[1]; +} diff --git a/src/transforms/document.ts b/src/transforms/document.ts new file mode 100644 index 00000000..4de42546 --- /dev/null +++ b/src/transforms/document.ts @@ -0,0 +1,71 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Document, Position } from "../types"; +import { cloneObject, getFirst, getLast } from "../utils"; +import { transformRange } from "./range"; + +export function transformDocument( + document: yaml.Document, + context: Context, +): Document { + assert(document.valueRange !== null); + + const directives = context.transformNodes(document.directives); + const contents = context.transformNodes(document.contents); + + const headPosition: Position = (text => { + const match = text.match(/(^|\n)---\s*$/); + const marker = "---"; + const markerIndex = match ? context.text.indexOf(marker, match.index) : -1; + const start = + directives.length !== 0 + ? directives[0].position.start.offset + : !match + ? document.valueRange!.start + : markerIndex; + const end = match + ? markerIndex + marker.length + : document.valueRange!.start; + return transformRange({ start, end }, context); + })(context.text.slice(0, document.valueRange!.start)); + + const bodyPosition: Position = (text => { + const match = text.match(/^\s*\.\.\.(\s*\n|$)/); + const marker = "..."; + const markerIndex = match + ? context.text.indexOf(marker, document.valueRange!.end + match.index!) + : -1; + const start = + contents.length !== 0 + ? contents[0].position.start.offset + : document.valueRange!.start; + const end = match + ? markerIndex + marker.length + : contents.length !== 0 + ? getLast(contents)!.position.end.offset + : document.valueRange!.start; + return transformRange({ start, end }, context); + })(context.text.slice(document.valueRange!.end)); + + const position = cloneObject({ + start: headPosition.start, + end: bodyPosition.end, + }); + + return { + type: "document", + position, + children: [ + { + type: "documentHead", + children: directives, + position: headPosition, + }, + { + type: "documentBody", + children: contents, + position: bodyPosition, + }, + ], + }; +} diff --git a/src/transforms/flowCollection.ts b/src/transforms/flowCollection.ts new file mode 100644 index 00000000..c2bab1b4 --- /dev/null +++ b/src/transforms/flowCollection.ts @@ -0,0 +1,415 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { + ContentNode, + FlowCollection, + MappingItem, + MappingKey, + MappingValue, + Position, + SequenceItem, +} from "../types"; +import { cloneObject, getLast } from "../utils"; +import { transformComment } from "./comment"; +import { transformNull } from "./null"; +import { transformOffset } from "./offset"; +import { transformRange } from "./range"; + +type ItemBuffer = Array<"," | "?" | ":" | ContentNode>; +type RangeBuffer = Array<{ start: number; end: number }>; + +export function transformFlowCollection( + flowCollection: yaml.FlowCollection, + context: Context, +): FlowCollection { + assert(flowCollection.valueRange !== null); + + // at least open marker and close marker + assert(flowCollection.items.length >= 2); + + assert( + flowCollection.type === "FLOW_MAP" + ? flowCollection.items[0] === "{" && + getLast(flowCollection.items)! === "}" + : flowCollection.items[0] === "[" && + getLast(flowCollection.items)! === "]", + ); + + let hasColon = false; + let hasQuestion = false; + + const children: Array = []; + + let itemBuffer: ItemBuffer = []; + let rangeBuffer: RangeBuffer = []; + + let lastItemStartOffset = flowCollection.valueRange!.start; // start marker + let lastItemEndOffset = lastItemStartOffset + 1; + + const lastIndex = flowCollection.items.length - 2; + for (let i = 1; i <= lastIndex; i++) { + const item = flowCollection.items[i]; + + if (item === "{" || item === "}" || item === "[" || item === "]") { + assert(true); + continue; // convince control flow analysis + } else if (typeof item === "object" && item.type === "COMMENT") { + const comment = transformComment(item, context); + context.comments.push(comment); + lastItemStartOffset = comment.position.start.offset; + lastItemEndOffset = comment.position.end.offset; + } else { + if (item === ":") { + assert(!hasColon); + hasColon = true; + } else if (item === "?") { + assert(!hasColon); + assert(!hasQuestion); + hasQuestion = true; + } + pushBuffer(typeof item === "string" ? item : context.transformNode(item)); + } + + if (item === "," || i === lastIndex) { + children.push( + transformFlowCollectionItems( + flowCollection.type, + itemBuffer, + rangeBuffer, + context, + ), + ); + itemBuffer = []; + rangeBuffer = []; + hasColon = false; + hasQuestion = false; + } + } + + return { + type: "flowCollection", + children, + position: transformRange(flowCollection.valueRange!, context), + leadingComments: [], + trailingComments: [], + }; + + function pushBuffer(item: ItemBuffer[number]) { + if (typeof item === "string") { + lastItemStartOffset = context.text.indexOf(item, lastItemEndOffset); + lastItemEndOffset = lastItemStartOffset + item.length; + } else { + lastItemStartOffset = item.position.start.offset; + lastItemEndOffset = item.position.end.offset; + } + + assert(lastItemStartOffset !== -1 && lastItemEndOffset !== -1); + + itemBuffer.push(item); + rangeBuffer.push({ + start: lastItemStartOffset, + end: lastItemEndOffset, + }); + } +} + +function transformFlowCollectionItems( + type: yaml.FlowCollection["type"], + itemBuffer: ItemBuffer, + rangeBuffer: RangeBuffer, + context: Context, +): MappingItem | SequenceItem { + assert(itemBuffer.length === rangeBuffer.length); + + const commaIndex = itemBuffer.indexOf(","); + assert(commaIndex === -1 || commaIndex === itemBuffer.length - 1); + + const itemBufferWithoutComma = (commaIndex === -1 + ? itemBuffer + : itemBuffer.slice(0, -1)) as Array< + Exclude<(typeof itemBuffer)[number], ","> + >; + + assert(itemBufferWithoutComma.length <= 4); + + if (itemBufferWithoutComma.length === 0) { + // [ , ] or { , } + assert(itemBuffer.length === 1); + const beforeCommaPosition = transformRange(rangeBuffer[0].start, context); + return type === "FLOW_MAP" + ? createMappingItem( + createMappingKey(transformNull(), cloneObject(beforeCommaPosition)), + createMappingValue(transformNull(), cloneObject(beforeCommaPosition)), + beforeCommaPosition, + ) + : createSequenceItem(transformNull(), beforeCommaPosition); + } else if (itemBufferWithoutComma.length === 1) { + const item = itemBufferWithoutComma[0]; + if (typeof item === "string") { + // [ ? ] or [ : ] + // { ? } or { : } + const range = rangeBuffer[0]; + const position = transformRange(range, context); + + const keyPosition = transformRange( + item === "?" ? range : range.start, + context, + ); + const valuePosition = transformRange( + item === ":" ? range : range.end, + context, + ); + return createMappingItem( + createMappingKey(transformNull(), keyPosition), + createMappingValue(transformNull(), valuePosition), + position, + ); + } else { + // [ 123 ] or { 123 } + return type === "FLOW_MAP" + ? createMappingItem( + createMappingKey(item, cloneObject(item.position)), + createMappingValue( + transformNull(), + transformRange(item.position.end.offset, context), + ), + cloneObject(item.position), + ) + : createSequenceItem(item, cloneObject(item.position)); + } + } + + const colonIndex = itemBuffer.indexOf(":"); + const questionIndex = itemBuffer.indexOf("?"); + + if (itemBufferWithoutComma.length === 2) { + if (questionIndex !== -1 && colonIndex !== -1) { + // [ ? : ] or { ? : } + const questionRange = rangeBuffer[0]; + const colonRange = rangeBuffer[1]; + return createMappingItem( + createMappingKey( + transformNull(), + transformRange(questionRange, context), + ), + createMappingValue( + transformNull(), + transformRange(colonRange, context), + ), + transformRange( + { + start: questionRange.start, + end: colonRange.end, + }, + context, + ), + ); + } else if (questionIndex !== -1) { + // [ ? 123 ] or { ? 123 } + assert(questionIndex === 0); + const questionRange = rangeBuffer[0]; + const key = itemBufferWithoutComma[1] as ContentNode; + const keyPosition = { + start: transformOffset(questionRange.start, context), + end: cloneObject(key.position.end), + }; + return createMappingItem( + createMappingKey(key, keyPosition), + createMappingValue( + transformNull(), + transformRange(key.position.end.offset, context), + ), + cloneObject(keyPosition), + ); + } else if (colonIndex === 0) { + // [ : 123 ] or { : 123 } + const colonRange = rangeBuffer[0]; + const value = itemBufferWithoutComma[1] as ContentNode; + const valuePosition = { + start: transformOffset(colonRange.start, context), + end: cloneObject(value.position.end), + }; + return createMappingItem( + createMappingKey( + transformNull(), + transformRange(colonRange.start, context), + ), + createMappingValue(value, valuePosition), + cloneObject(valuePosition), + ); + } else { + // [ 123 : ] or { 123 : } + assert(colonIndex === 1); + const colonRange = rangeBuffer[1]; + const key = itemBufferWithoutComma[0] as ContentNode; + return createMappingItem( + createMappingKey(key, cloneObject(key.position)), + createMappingValue( + transformNull(), + transformRange(colonRange, context), + ), + { + start: cloneObject(key.position.start), + end: transformOffset(colonRange.end, context), + }, + ); + } + } else if (itemBufferWithoutComma.length === 3) { + if (questionIndex === -1) { + // [ 123 : 123 ] or { 123 : 123 } + assert(colonIndex === 1); + const colonRange = rangeBuffer[1]; + const key = itemBufferWithoutComma[0] as ContentNode; + const value = itemBufferWithoutComma[2] as ContentNode; + return createMappingItem( + createMappingKey(key, cloneObject(key.position)), + createMappingValue( + value, + transformRange( + { + start: colonRange.start, + end: value.position.end.offset, + }, + context, + ), + ), + transformRange( + { + start: key.position.start.offset, + end: value.position.end.offset, + }, + context, + ), + ); + } else { + assert(questionIndex === 0); + if (colonIndex === 1) { + // [ ? : 123 ] or { ? : 123 } + const questionRange = rangeBuffer[0]; + const colonRange = rangeBuffer[1]; + const value = itemBufferWithoutComma[2] as ContentNode; + return createMappingItem( + createMappingKey( + transformNull(), + transformRange(questionRange, context), + ), + createMappingValue( + value, + transformRange( + { start: colonRange.start, end: value.position.end.offset }, + context, + ), + ), + transformRange( + { start: questionRange.start, end: value.position.end.offset }, + context, + ), + ); + } else { + // [ ? 123 : ] or { ? 123 : } + const questionRange = rangeBuffer[0]; + const colonRange = rangeBuffer[2]; + const key = itemBufferWithoutComma[1] as ContentNode; + return createMappingItem( + createMappingKey( + key, + transformRange( + { start: questionRange.start, end: key.position.end.offset }, + context, + ), + ), + createMappingValue( + transformNull(), + transformRange(colonRange, context), + ), + transformRange( + { start: questionRange.start, end: colonRange.end }, + context, + ), + ); + } + } + } else { + // [ ? 123 : 123 ] + assert(questionIndex === 0 && colonIndex === 2); + + const questionRange = rangeBuffer[0]; + const colonRange = rangeBuffer[2]; + const key = itemBufferWithoutComma[1] as ContentNode; + const value = itemBufferWithoutComma[3] as ContentNode; + + return createMappingItem( + createMappingKey( + key, + transformRange( + { start: questionRange.start, end: key.position.end.offset }, + context, + ), + ), + createMappingValue( + value, + transformRange( + { start: colonRange.start, end: value.position.end.offset }, + context, + ), + ), + transformRange( + { start: questionRange.start, end: value.position.end.offset }, + context, + ), + ); + } +} + +function createMappingKey( + node: MappingKey["children"][0], + position: Position, +): MappingKey { + return { + type: "mappingKey", + children: [node], + position, + leadingComments: [], + trailingComments: [], + }; +} + +function createMappingValue( + node: MappingValue["children"][0], + position: Position, +): MappingValue { + return { + type: "mappingValue", + children: [node], + position, + leadingComments: [], + trailingComments: [], + }; +} + +function createMappingItem( + key: MappingKey, + value: MappingValue, + position: Position, +): MappingItem { + return { + type: "mappingItem", + children: [key, value], + position, + leadingComments: [], + trailingComments: [], + }; +} + +function createSequenceItem( + node: SequenceItem["children"][0], + position: Position, +): SequenceItem { + return { + type: "sequenceItem", + children: [node], + position, + leadingComments: [], + trailingComments: [], + }; +} diff --git a/src/transforms/flowMap.test.ts b/src/transforms/flowMap.test.ts new file mode 100644 index 00000000..730c431c --- /dev/null +++ b/src/transforms/flowMap.test.ts @@ -0,0 +1,42 @@ +import { getFirstContent, testCases } from "../helpers"; +import { FlowMapping, Root } from "../types"; + +const selectors = [ + getFlowMapping(), + getFlowMappingItem(0), + getFlowMappingKey(0), + getFlowMappingValue(0), +]; + +testCases([ + [" { , } ", selectors], + [" { ? } ", selectors], + [" { : } ", selectors], + [" { ? : } ", selectors], + [" { 123 } ", selectors], + [" { ? : 123 } ", selectors], + [" { ? 123 : } ", selectors], + [" { ? 123 : 456 } ", selectors], + [" { ? 123 } ", selectors], + [" { 123 : } ", selectors], + [" { : 123 } ", selectors], + [" { 123 : 456 } ", selectors], + [" { 123, } ", selectors], + [" { 123,, } ", selectors], +]); + +function getFlowMapping() { + return getFirstContent(); +} + +function getFlowMappingItem(itemIndex: number) { + return (root: Root) => getFlowMapping()(root).children[itemIndex]; +} + +function getFlowMappingKey(itemIndex: number) { + return (root: Root) => getFlowMappingItem(itemIndex)(root).children[0]; +} + +function getFlowMappingValue(itemIndex: number) { + return (root: Root) => getFlowMappingItem(itemIndex)(root).children[1]; +} diff --git a/src/transforms/flowMap.ts b/src/transforms/flowMap.ts new file mode 100644 index 00000000..62eaf3ee --- /dev/null +++ b/src/transforms/flowMap.ts @@ -0,0 +1,17 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { FlowMapping, MappingItem } from "../types"; +import { transformFlowCollection } from "./flowCollection"; + +export function transformFlowMap( + flowCollection: yaml.FlowCollection, + context: Context, +): FlowMapping { + assert(flowCollection.type === "FLOW_MAP"); + const transformed = transformFlowCollection(flowCollection, context); + assert(transformed.children.every(item => item.type === "mappingItem")); + return { + ...(transformed as (typeof transformed) & { children: MappingItem[] }), + type: "flowMapping", + }; +} diff --git a/src/transforms/flowSeq.test.ts b/src/transforms/flowSeq.test.ts new file mode 100644 index 00000000..daee0085 --- /dev/null +++ b/src/transforms/flowSeq.test.ts @@ -0,0 +1,29 @@ +import { getFirstContent, testCases } from "../helpers"; +import { FlowSequence, Root } from "../types"; + +const selectors = [getFlowSequence(), getFlowSequenceItem(0)]; + +testCases([ + [" [ , ] ", selectors], + [" [ ? ] ", selectors], + [" [ : ] ", selectors], + [" [ ? : ] ", selectors], + [" [ 123 ] ", selectors], + [" [ ? : 123 ] ", selectors], + [" [ ? 123 : ] ", selectors], + [" [ ? 123 : 456 ] ", selectors], + [" [ ? 123 ] ", selectors], + [" [ 123 : ] ", selectors], + [" [ : 123 ] ", selectors], + [" [ 123 : 456 ] ", selectors], + [" [ 123, ] ", selectors], + [" [ 123,, ] ", selectors], +]); + +function getFlowSequence() { + return getFirstContent(); +} + +function getFlowSequenceItem(itemIndex: number) { + return (root: Root) => getFlowSequence()(root).children[itemIndex]; +} diff --git a/src/transforms/flowSeq.ts b/src/transforms/flowSeq.ts new file mode 100644 index 00000000..23de8f48 --- /dev/null +++ b/src/transforms/flowSeq.ts @@ -0,0 +1,15 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { FlowSequence } from "../types"; +import { transformFlowCollection } from "./flowCollection"; + +export function transformFlowSeq( + flowCollection: yaml.FlowCollection, + context: Context, +): FlowSequence { + assert(flowCollection.type === "FLOW_SEQ"); + return { + ...transformFlowCollection(flowCollection, context), + type: "flowSequence", + }; +} diff --git a/src/transforms/map.test.ts b/src/transforms/map.test.ts new file mode 100644 index 00000000..8c3b55c9 --- /dev/null +++ b/src/transforms/map.test.ts @@ -0,0 +1,46 @@ +import { getFirstContent, TestCase, testCases } from "../helpers"; +import { Mapping, Root } from "../types"; + +testCases([ + ...createTestCases(": "), + ...createTestCases(": 123 "), + ...createTestCases("a: "), + ...createTestCases("a: 123 "), + ...createTestCases("a: 123 \nb: 456 ", true), + ...createTestCases("? a \n: 123 \n? b \n: 456 ", true), +]); + +function createTestCases(text: string, hasSecondItem = false): TestCase[] { + return !hasSecondItem + ? [ + [text, getMapping()], + [text, getMappingItem(0)], + [text, getMappingKey(0)], + [text, getMappingValue(0)], + ] + : [ + [text, getMapping()], + [text, getMappingItem(0)], + [text, getMappingItem(1)], + [text, getMappingKey(0)], + [text, getMappingKey(1)], + [text, getMappingValue(0)], + [text, getMappingValue(1)], + ]; +} + +function getMapping() { + return getFirstContent(); +} + +function getMappingItem(itemIndex: number) { + return (root: Root) => getMapping()(root).children[itemIndex]; +} + +function getMappingKey(itemIndex: number) { + return (root: Root) => getMappingItem(itemIndex)(root).children[0]; +} + +function getMappingValue(itemIndex: number) { + return (root: Root) => getMappingItem(itemIndex)(root).children[1]; +} diff --git a/src/transforms/map.ts b/src/transforms/map.ts new file mode 100644 index 00000000..deb59588 --- /dev/null +++ b/src/transforms/map.ts @@ -0,0 +1,121 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Mapping, MappingItem, MappingKey, MappingValue } from "../types"; +import { cloneObject, getLast } from "../utils"; +import { transformComment } from "./comment"; +import { transformNull } from "./null"; +import { transformOffset } from "./offset"; + +export function transformMap(map: yaml.Map, context: Context): Mapping { + assert(map.valueRange !== null); + const children = transformMapItems(map.items, context); + return { + type: "mapping", + position: cloneObject({ + start: children[0].position.start, + end: getLast(children)!.position.end, + }), + children, + leadingComments: [], + trailingComments: [], + }; +} + +function transformMapItems( + items: yaml.Map["items"], + context: Context, +): MappingItem[] { + const itemsWithoutComments = items.filter(item => { + if (item.type === "COMMENT") { + context.comments.push(transformComment(item, context)); + return false; + } + return true; + }) as Array>; + + const buffer: MappingKey[] = []; + return itemsWithoutComments.reduce( + (reduced, item, index) => { + if (item.type !== "MAP_VALUE") { + assert(index !== itemsWithoutComments.length - 1); + assert( + item.type !== "MAP_KEY" || + (item.node === null || item.node.type !== "COMMENT"), + ); + + const key = context.transformNode( + item.type === "MAP_KEY" + ? (item.node as Exclude) + : (item as Exclude), + ); + + assert(item.type !== "MAP_KEY" || item.valueRange !== null); + + buffer.push({ + type: "mappingKey", + position: + item.type === "MAP_KEY" + ? { + start: transformOffset(item.valueRange!.start, context), + end: cloneObject(key.position.end), + } + : cloneObject(key.position), + children: [key], + leadingComments: [], + trailingComments: [], + }); + + return reduced; + } + + assert(item.valueRange !== null); + assert(item.node === null || item.node.type !== "COMMENT"); + + const mappingValueNode = context.transformNode(item.node as Exclude< + typeof item.node, + yaml.Comment + >); + const mappingValue: MappingValue = { + type: "mappingValue", + position: cloneObject({ + start: transformOffset(item.valueRange!.start, context), + end: + mappingValueNode.type === "null" + ? transformOffset(item.valueRange!.start + 1, context) + : mappingValueNode.position.end, + }), + children: [mappingValueNode], + leadingComments: [], + trailingComments: [], + }; + + assert(buffer.length <= 1); + + const mappingKey: MappingKey = + buffer.length !== 0 + ? buffer.pop()! + : { + type: "mappingKey", + children: [transformNull()], + position: { + start: cloneObject(mappingValue.position.start), + end: cloneObject(mappingValue.position.start), + }, + leadingComments: [], + trailingComments: [], + }; + + return reduced.concat({ + type: "mappingItem", + children: [mappingKey, mappingValue], + position: { + start: cloneObject(mappingKey.position.start), + end: cloneObject(mappingValue.position.end), + }, + leadingComments: [], + trailingComments: [], + }); + }, + [] as MappingItem[], + ); +} diff --git a/src/transforms/null.ts b/src/transforms/null.ts new file mode 100644 index 00000000..99e85c18 --- /dev/null +++ b/src/transforms/null.ts @@ -0,0 +1,11 @@ +import { Null } from "../types"; + +export function transformNull(): Null { + return { + type: "null", + position: { + start: { line: -1, column: -1, offset: -1 }, + end: { line: -1, column: -1, offset: -1 }, + }, + }; +} diff --git a/src/transforms/offset.ts b/src/transforms/offset.ts new file mode 100644 index 00000000..4d61d142 --- /dev/null +++ b/src/transforms/offset.ts @@ -0,0 +1,13 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Point } from "../types"; + +export function transformOffset(offset: number, context: Context): Point { + const location = context.locator.locationForIndex(offset); + assert(location !== null); + return { + line: location!.line + 1, + column: location!.column + 1, + offset, + }; +} diff --git a/src/transforms/plain.test.ts b/src/transforms/plain.test.ts new file mode 100644 index 00000000..8da25bd8 --- /dev/null +++ b/src/transforms/plain.test.ts @@ -0,0 +1,3 @@ +import { getFirstContent, testCases } from "../helpers"; + +testCases([[" 123 ", getFirstContent()]]); diff --git a/src/transforms/plain.ts b/src/transforms/plain.ts new file mode 100644 index 00000000..4b4258c1 --- /dev/null +++ b/src/transforms/plain.ts @@ -0,0 +1,25 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Plain } from "../types"; +import { transformRange } from "./range"; + +export function transformPlain( + plain: yaml.PlainValue, + context: Context, +): Plain { + assert(plain.strValue !== null); + assert(plain.valueRange !== null); + return { + type: "plain", + value: plain.strValue!, + position: transformRange( + { + start: plain.valueRange!.start, + end: plain.valueRange!.start + plain.strValue!.length, + }, + context, + ), + leadingComments: [], + trailingComments: [], + }; +} diff --git a/src/transforms/quoteDouble.test.ts b/src/transforms/quoteDouble.test.ts new file mode 100644 index 00000000..f02bcba2 --- /dev/null +++ b/src/transforms/quoteDouble.test.ts @@ -0,0 +1,3 @@ +import { getFirstContent, testCases } from "../helpers"; + +testCases([[' "123 " ', getFirstContent()]]); diff --git a/src/transforms/quoteDouble.ts b/src/transforms/quoteDouble.ts new file mode 100644 index 00000000..e66de9c3 --- /dev/null +++ b/src/transforms/quoteDouble.ts @@ -0,0 +1,15 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { QuoteDouble } from "../types"; +import { transformQuoteValue } from "./quoteValue"; + +export function transformQuoteDouble( + quoteDouble: yaml.QuoteValue, + context: Context, +): QuoteDouble { + assert(quoteDouble.type === "QUOTE_DOUBLE"); + return { + ...transformQuoteValue(quoteDouble, context), + type: "quoteDouble", + }; +} diff --git a/src/transforms/quoteSingle.test.ts b/src/transforms/quoteSingle.test.ts new file mode 100644 index 00000000..aad857c5 --- /dev/null +++ b/src/transforms/quoteSingle.test.ts @@ -0,0 +1,3 @@ +import { getFirstContent, testCases } from "../helpers"; + +testCases([[" '123 ' ", getFirstContent()]]); diff --git a/src/transforms/quoteSingle.ts b/src/transforms/quoteSingle.ts new file mode 100644 index 00000000..6396be79 --- /dev/null +++ b/src/transforms/quoteSingle.ts @@ -0,0 +1,15 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { QuoteSingle } from "../types"; +import { transformQuoteValue } from "./quoteValue"; + +export function transformQuoteSingle( + quoteSingle: yaml.QuoteValue, + context: Context, +): QuoteSingle { + assert(quoteSingle.type === "QUOTE_SINGLE"); + return { + ...transformQuoteValue(quoteSingle, context), + type: "quoteSingle", + }; +} diff --git a/src/transforms/quoteValue.ts b/src/transforms/quoteValue.ts new file mode 100644 index 00000000..20291c10 --- /dev/null +++ b/src/transforms/quoteValue.ts @@ -0,0 +1,19 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { QuoteValue } from "../types"; +import { transformRange } from "./range"; + +export function transformQuoteValue( + quoteValue: yaml.QuoteValue, + context: Context, +): QuoteValue { + assert(quoteValue.valueRange !== null); + assert(typeof quoteValue.strValue === "string"); + return { + type: "quoteBase", + value: quoteValue.strValue as string, + position: transformRange(quoteValue.valueRange!, context), + leadingComments: [], + trailingComments: [], + }; +} diff --git a/src/transforms/range.ts b/src/transforms/range.ts new file mode 100644 index 00000000..53213ada --- /dev/null +++ b/src/transforms/range.ts @@ -0,0 +1,22 @@ +import { Context } from "../transform"; +import { Position } from "../types"; +import { cloneObject } from "../utils"; +import { transformOffset } from "./offset"; + +export function transformRange( + range: number | { start: number; end: number }, + context: Context, +): Position { + if (typeof range === "number") { + const point = transformOffset(range, context); + return { + start: point, + end: cloneObject(point), + }; + } else { + return { + start: transformOffset(range.start, context), + end: transformOffset(range.end, context), + }; + } +} diff --git a/src/transforms/seq.test.ts b/src/transforms/seq.test.ts new file mode 100644 index 00000000..d4e7292b --- /dev/null +++ b/src/transforms/seq.test.ts @@ -0,0 +1,16 @@ +import { getFirstContent, testCases } from "../helpers"; +import { Root, Sequence } from "../types"; + +testCases([ + ["- ", [getSequence(), getSequenceItem(0)]], + ["- 123 ", [getSequence(), getSequenceItem(0)]], + ["- 123 \n- 456 ", [getSequence(), getSequenceItem(0), getSequenceItem(1)]], +]); + +function getSequence() { + return getFirstContent(); +} + +function getSequenceItem(itemIndex: number) { + return (root: Root) => getSequence()(root).children[itemIndex]; +} diff --git a/src/transforms/seq.ts b/src/transforms/seq.ts new file mode 100644 index 00000000..50e9ec7f --- /dev/null +++ b/src/transforms/seq.ts @@ -0,0 +1,52 @@ +import assert = require("assert"); +import { Context } from "../transform"; +import { Sequence, SequenceItem } from "../types"; +import { cloneObject, getLast } from "../utils"; +import { transformComment } from "./comment"; +import { transformOffset } from "./offset"; + +export function transformSeq(seq: yaml.Seq, context: Context): Sequence { + const itemsWithoutComments = seq.items.filter(item => { + if (item.type === "COMMENT") { + context.comments.push(transformComment(item, context)); + return false; + } + return true; + }) as yaml.SeqItem[]; + + const sequenceItems = itemsWithoutComments.map((item): SequenceItem => { + assert(item.valueRange !== null); + assert(item.node === null || item.node.type !== "COMMENT"); + + const node = context.transformNode(item.node as Exclude< + typeof item.node, + yaml.Comment + >); + return { + type: "sequenceItem", + position: { + start: transformOffset(item.valueRange!.start, context), + end: + node.type === "null" + ? transformOffset(item.valueRange!.start + 1, context) + : cloneObject(node.position.end), + }, + children: [node], + leadingComments: [], + trailingComments: [], + }; + }); + + assert(seq.valueRange !== null); + + return { + type: "sequence", + position: cloneObject({ + start: sequenceItems[0].position.start, + end: getLast(sequenceItems)!.position.end, + }), + children: sequenceItems, + leadingComments: [], + trailingComments: [], + }; +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 00000000..7e781ecc --- /dev/null +++ b/src/types.ts @@ -0,0 +1,193 @@ +export interface Point { + /** 1-based */ + line: number; + /** 1-based */ + column: number; + /** 0-based */ + offset: number; +} + +export interface Position { + start: Point; + end: Point; +} + +export interface Node { + type: string; + position: Position; +} + +export interface Parent extends Node { + children: Node[]; +} + +// ----------------------------------------------------------------------------- + +export interface Content { + anchor?: string; + tag?: { verbatim: string } | { handle: string; suffix: string }; +} + +export interface CommentAttachable { + leadingComments: Comment[]; + trailingComments: Comment[]; +} + +export interface YAMLSyntaxError extends SyntaxError { + source: string; + position: Position; +} + +export type YamlUnistNode = + | Comment + | Root + | Document + | DocumentHead + | DocumentBody + | Directive + | Alias + | BlockLiteral + | BlockFolded + | Plain + | QuoteSingle + | QuoteDouble + | Mapping + | MappingItem + | Sequence + | SequenceItem + | FlowMapping + | FlowSequence + | Null; + +export type ContentNode = + | Alias + | BlockLiteral + | BlockFolded + | Plain + | QuoteSingle + | QuoteDouble + | Mapping + | Sequence + | FlowMapping + | FlowSequence + | Null; + +// ----------------------------------------------------------------------------- + +export interface Null extends Node { + type: "null"; + /** always -1 */ + position: Position; +} + +export interface Comment extends Node { + type: "comment"; + value: string; +} + +export interface Root extends Parent { + type: "root"; + children: Document[]; +} + +export interface Document extends Parent { + type: "document"; + children: [DocumentHead, DocumentBody]; +} + +export interface DocumentHead extends Parent { + type: "documentHead"; + children: Array; +} + +export interface DocumentBody extends Parent { + type: "documentBody"; + children: Array; +} + +export interface Directive extends Node { + type: "directive"; + name: string; + parameters: string[]; +} + +export interface Alias extends Node, CommentAttachable { + type: "alias"; + value: string; +} + +export interface BlockValue extends Node, Content, CommentAttachable { + chomping: "clip" | "keep" | "strip"; + indent?: number; + value: string; +} + +export interface BlockLiteral extends BlockValue { + type: "blockLiteral"; +} + +export interface BlockFolded extends BlockValue { + type: "blockFolded"; +} + +export interface Plain extends Node, Content, CommentAttachable { + type: "plain"; + value: string; +} + +export interface QuoteValue extends Node, Content, CommentAttachable { + value: string; +} + +export interface QuoteSingle extends QuoteValue { + type: "quoteSingle"; +} + +export interface QuoteDouble extends QuoteValue { + type: "quoteDouble"; +} + +export interface Mapping extends Parent, Content, CommentAttachable { + type: "mapping"; + children: MappingItem[]; +} + +export interface MappingItem extends Parent, CommentAttachable { + type: "mappingItem"; + /** key-value pair */ + children: [MappingKey, MappingValue]; +} + +export interface MappingKey extends Parent, CommentAttachable { + type: "mappingKey"; + children: [ContentNode]; +} + +export interface MappingValue extends Parent, CommentAttachable { + type: "mappingValue"; + children: [ContentNode]; +} + +export interface Sequence extends Parent, Content, CommentAttachable { + type: "sequence"; + children: SequenceItem[]; +} + +export interface SequenceItem extends Parent, CommentAttachable { + type: "sequenceItem"; + children: [ContentNode]; +} + +export interface FlowCollection extends Parent, Content, CommentAttachable { + children: Array; +} + +export interface FlowMapping extends FlowCollection { + type: "flowMapping"; + children: MappingItem[]; +} + +export interface FlowSequence extends FlowCollection { + type: "flowSequence"; + children: Array; +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 00000000..d7dcbf91 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,13 @@ +export function cloneObject(x: T): T { + const newObject: Partial = {}; + for (const key of Object.keys(x)) { + const value = x[key]; + newObject[key] = + value && typeof value === "object" ? cloneObject(value) : value; + } + return newObject as T; +} + +export function getLast(array: T[]) { + return array[array.length - 1] as T | undefined; +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..101ad79f --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/index.ts"], + "compilerOptions": { + "rootDir": "src", + "outDir": "lib" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..78562f60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "strict": true, + "lib": ["es6"], + "module": "commonjs", + "declaration": true, + "importHelpers": true, + "noUnusedLocals": true, + "noUnusedParameters": true + }, + "include": ["src/**/*.ts", "tests/**/*.ts"] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..41e78018 --- /dev/null +++ b/tslint.json @@ -0,0 +1,16 @@ +{ + "rulesDirectory": ["tslint-plugin-prettier"], + "extends": ["tslint:recommended", "tslint-config-prettier"], + "rules": { + "prettier": [true, { "trailingComma": "all" }], + "object-literal-sort-keys": false, + "interface-name": false, + "variable-name": [ + true, + "check-format", + "ban-keywords", + "allow-leading-underscore" + ], + "no-duplicate-switch-case": true + } +} diff --git a/types/yaml/index.d.ts b/types/yaml/index.d.ts new file mode 100644 index 00000000..c728bede --- /dev/null +++ b/types/yaml/index.d.ts @@ -0,0 +1,144 @@ +declare module "yaml/dist/ast/parse" { + export default function(str: string): yaml.Document[]; +} + +declare namespace yaml { + interface Range { + start: number; + end: number; + readonly length: number; + readonly isEmpty: boolean; + } + + interface ParseContext { + /** Node starts at beginning of line */ + atLineStart: boolean; + /** true if currently in a collection context */ + inCollection: boolean; + /** true if currently in a flow context */ + inFlow: boolean; + /** Current level of indentation */ + indent: number; + /** Start of the current line */ + lineStart: number; + /** The parent of the node */ + parent: Node; + /** Source of the YAML document */ + src: string; + } + + interface Node { + context: ParseContext | null; + /** if not null, indicates a parser failure */ + error: YAMLSyntaxError | null; + /** span of context.src parsed into this node */ + range: Range | null; + valueRange: Range | null; + /** anchors, tags and comments */ + props: Range[]; + /** specific node type */ + type: string; + /** if non-null, overrides source value */ + value: string | null; + + readonly anchor: string | null; + readonly comment: string | null; + readonly hasComment: boolean; + readonly hasProps: boolean; + readonly jsonLike: boolean; + readonly rawValue: string | null; + readonly tag: + | null + | { verbatim: string } + | { handle: string; suffix: string }; + readonly valueRangeContainsNewline: boolean; + } + + interface Alias extends Node { + type: "ALIAS"; + /** contain the anchor without the * prefix */ + readonly rawValue: string; + } + + type Scalar = BlockValue | PlainValue | QuoteValue; + + interface BlockValue extends Node { + type: "BLOCK_FOLDED" | "BLOCK_LITERAL"; + chomping: "CLIP" | "KEEP" | "STRIP"; + blockIndent: number | null; + header: Range; + readonly strValue: string | null; + } + + interface PlainValue extends Node { + type: "PLAIN"; + readonly strValue: string | null; + } + + interface QuoteValue extends Node { + type: "QUOTE_DOUBLE" | "QUOTE_SINGLE"; + readonly strValue: + | null + | string + | { str: string; errors: YAMLSyntaxError[] }; + } + + interface Comment extends Node { + type: "COMMENT"; + readonly anchor: null; + readonly comment: string; + readonly rawValue: null; + readonly tag: null; + } + + interface MapItem extends Node { + type: "MAP_KEY" | "MAP_VALUE"; + node: ContentNode | null; + } + + interface Map extends Node { + type: "MAP"; + /** implicit keys are not wrapped */ + items: Array; + } + + interface SeqItem extends Node { + type: "SEQ_ITEM"; + node: ContentNode | null; + } + + interface Seq extends Node { + type: "SEQ"; + items: Array; + } + + type FlowChar = "{" | "}" | "[" | "]" | "," | "?" | ":"; + + interface FlowCollection extends Node { + type: "FLOW_MAP" | "FLOW_SEQ"; + items: Array; + } + + type ContentNode = Comment | Alias | Scalar | Map | Seq | FlowCollection; + + interface Directive extends Node { + type: "DIRECTIVE"; + name: string; + readonly anchor: null; + readonly parameters: string[]; + readonly tag: null; + } + + interface Document extends Node { + type: "DOCUMENT"; + directives: Array; + contents: ContentNode[]; + readonly anchor: null; + readonly comment: null; + readonly tag: null; + } + + interface YAMLSyntaxError extends SyntaxError { + source: string; + } +} diff --git a/types/yaml/package.json b/types/yaml/package.json new file mode 100644 index 00000000..95e9674a --- /dev/null +++ b/types/yaml/package.json @@ -0,0 +1,4 @@ +{ + "name": "@types/yaml", + "version": "1.0.0-beta.4.2" +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..aee48ff9 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3807 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/jest@21.1.10": + version "21.1.10" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-21.1.10.tgz#dcacb5217ddf997a090cc822bba219b4b2fd7984" + +"@types/node@4.2.23": + version "4.2.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-4.2.23.tgz#9241f00d64eb91084f68367746ef10d5fb2f2fc4" + +"@types/yaml@file:types/yaml": + version "1.0.0-beta.4.2" + +JSONStream@^1.0.4: + version "1.3.2" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +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" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +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.1" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" + +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.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" + +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.0.0, babel-core@^6.24.1, 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.18.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-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-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e" + dependencies: + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^21.2.0" + +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-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4: + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" + +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + 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-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" + dependencies: + babel-plugin-jest-hoist "^21.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.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.18.0, 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.18.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + +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" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.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" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1, chalk@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +ci-info@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +combined-stream@1.0.6, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + +compare-versions@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.2.1.tgz#a49eb7689d4caaf0b6db5220173fd279614000f7" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.10: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +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" + +content-type-parser@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + +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" + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-atom@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz#8037693455990e3256f297320a45fa47ee553a14" + dependencies: + q "^1.5.1" + +conventional-changelog-codemirror@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz#a1982c8291f4ee4d6f2f62817c6b2ecd2c4b7b47" + dependencies: + q "^1.5.1" + +conventional-changelog-core@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287" + dependencies: + conventional-changelog-writer "^3.0.9" + conventional-commits-parser "^2.1.7" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "^1.3.6" + git-remote-origin-url "^2.0.0" + git-semver-tags "^1.3.6" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^1.1.0" + read-pkg-up "^1.0.1" + through2 "^2.0.0" + +conventional-changelog-ember@^0.3.12: + version "0.3.12" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz#b7d31851756d0fcb49b031dffeb6afa93b202400" + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz#b13cc7e4b472c819450ede031ff1a75c0e3d07d3" + dependencies: + q "^1.5.1" + +conventional-changelog-express@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz#4a6295cb11785059fb09202180d0e59c358b9c2c" + dependencies: + q "^1.5.1" + +conventional-changelog-jquery@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510" + dependencies: + q "^1.4.1" + +conventional-changelog-jscs@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c" + dependencies: + q "^1.4.1" + +conventional-changelog-jshint@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz#9051c1ac0767abaf62a31f74d2fe8790e8acc6c8" + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +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-writer@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz#4aecdfef33ff2a53bb0cf3b8071ce21f0e994634" + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^1.1.6" + dateformat "^3.0.0" + handlebars "^4.0.2" + json-stringify-safe "^5.0.1" + lodash "^4.2.1" + meow "^4.0.0" + semver "^5.5.0" + split "^1.0.0" + through2 "^2.0.0" + +conventional-changelog@^1.1.0: + version "1.1.24" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.24.tgz#3d94c29c960f5261c002678315b756cdd3d7d1f0" + dependencies: + conventional-changelog-angular "^1.6.6" + conventional-changelog-atom "^0.2.8" + conventional-changelog-codemirror "^0.3.8" + conventional-changelog-core "^2.0.11" + conventional-changelog-ember "^0.3.12" + conventional-changelog-eslint "^1.0.9" + conventional-changelog-express "^0.3.6" + conventional-changelog-jquery "^0.1.0" + conventional-changelog-jscs "^0.1.0" + conventional-changelog-jshint "^0.3.8" + conventional-changelog-preset-loader "^1.1.8" + +conventional-commits-filter@^1.1.1, 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" + dependencies: + is-subset "^0.1.1" + modify-values "^1.0.0" + +conventional-commits-parser@^2.1.1, 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" + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.0" + lodash "^4.2.1" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz#1b7137efb5091f99fe009e2fe9ddb7cc490e9375" + dependencies: + concat-stream "^1.4.10" + conventional-commits-filter "^1.1.1" + conventional-commits-parser "^2.1.1" + git-raw-commits "^1.3.0" + git-semver-tags "^1.3.0" + meow "^3.3.0" + object-assign "^4.0.1" + +convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.6" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.6.tgz#0fe6d45bf3cac3ac364a9d72de7576f4eb221b9d" + +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" + +cpx@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" + dependencies: + babel-runtime "^6.9.2" + chokidar "^1.6.0" + duplexer "^0.1.1" + glob "^7.0.5" + glob2base "^0.0.12" + minimatch "^3.0.2" + mkdirp "^0.5.1" + resolve "^1.1.7" + safe-buffer "^5.0.1" + shell-quote "^1.6.1" + subarg "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + 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" + dependencies: + assert-plus "^1.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + 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" + dependencies: + ms "2.0.0" + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^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" + +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" + +deep-extend@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +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" + dependencies: + strip-bom "^2.0.0" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + 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" + 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" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-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" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + dependencies: + is-obj "^1.0.0" + +dotgitignore@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-1.0.3.tgz#a442cbde7dc20dff51cdb849e4c5a64568c07923" + dependencies: + find-up "^2.1.0" + minimatch "^3.0.4" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +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" + +escodegen@^1.6.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-plugin-prettier@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^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" + 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" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expect@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^21.2.1" + jest-get-type "^21.2.0" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-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" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +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" + +fast-diff@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + +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" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +figures@^1.5.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.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" + dependencies: + locate-path "^2.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" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + dependencies: + null-check "^1.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0, fsevents@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +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" + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +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" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^1.3.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" + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +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" + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^1.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" + dependencies: + meow "^4.0.0" + semver "^5.5.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + 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" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +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" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.2, handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + 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" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.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" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + +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: + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + +html-encoding-sniffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +iconv-lite@^0.4.4: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + 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" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.2, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + 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" + +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" + 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" + 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" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-ci@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^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" + 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" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.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" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + 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" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + 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" + 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" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +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" + 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" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + +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" + 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" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + dependencies: + async "^2.1.4" + compare-versions "^3.1.0" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-hook "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-report "^1.1.4" + istanbul-lib-source-maps "^1.2.4" + istanbul-reports "^1.3.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" + +istanbul-lib-hook@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.4.2: + version "1.10.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" + dependencies: + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.1.2" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-lib-source-maps@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29" + dependencies: + throat "^4.0.0" + +jest-cli@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^21.2.0" + jest-config "^21.2.1" + jest-environment-jsdom "^21.2.1" + jest-haste-map "^21.2.0" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + jest-resolve-dependencies "^21.2.0" + jest-runner "^21.2.1" + jest-runtime "^21.2.1" + jest-snapshot "^21.2.1" + jest-util "^21.2.1" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^3.0.0" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^9.0.0" + +jest-config@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^21.2.1" + jest-environment-node "^21.2.1" + jest-get-type "^21.2.0" + jest-jasmine2 "^21.2.1" + jest-regex-util "^21.2.0" + jest-resolve "^21.2.0" + jest-util "^21.2.1" + jest-validate "^21.2.1" + pretty-format "^21.2.1" + +jest-diff@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + +jest-docblock@^21.0.0, jest-docblock@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + +jest-environment-jsdom@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4" + dependencies: + jest-mock "^21.2.0" + jest-util "^21.2.1" + jsdom "^9.12.0" + +jest-environment-node@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8" + dependencies: + jest-mock "^21.2.0" + jest-util "^21.2.1" + +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + +jest-haste-map@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^21.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + worker-farm "^1.3.1" + +jest-jasmine2@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592" + dependencies: + chalk "^2.0.1" + expect "^21.2.1" + graceful-fs "^4.1.11" + jest-diff "^21.2.1" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-snapshot "^21.2.1" + p-cancelable "^0.3.0" + +jest-matcher-utils@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + +jest-message-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" + dependencies: + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f" + +jest-regex-util@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" + +jest-resolve-dependencies@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09" + dependencies: + jest-regex-util "^21.2.0" + +jest-resolve@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + is-builtin-module "^1.0.0" + +jest-runner@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467" + dependencies: + jest-config "^21.2.1" + jest-docblock "^21.2.0" + jest-haste-map "^21.2.0" + jest-jasmine2 "^21.2.1" + jest-message-util "^21.2.1" + jest-runtime "^21.2.1" + jest-util "^21.2.1" + pify "^3.0.0" + throat "^4.0.0" + worker-farm "^1.3.1" + +jest-runtime@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e" + dependencies: + babel-core "^6.0.0" + babel-jest "^21.2.0" + babel-plugin-istanbul "^4.0.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^21.2.1" + jest-haste-map "^21.2.0" + jest-regex-util "^21.2.0" + jest-resolve "^21.2.0" + jest-util "^21.2.1" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^9.0.0" + +jest-snapshot@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0" + dependencies: + chalk "^2.0.1" + jest-diff "^21.2.1" + jest-matcher-utils "^21.2.1" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^21.2.1" + +jest-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + jest-message-util "^21.2.1" + jest-mock "^21.2.0" + jest-validate "^21.2.1" + mkdirp "^0.5.1" + +jest-validate@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + leven "^2.1.0" + pretty-format "^21.2.1" + +jest@21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1" + dependencies: + jest-cli "^21.2.1" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +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" + +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" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1, 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" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +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" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +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" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.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" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.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" + dependencies: + p-locate "^2.0.0" + path-exists "^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" + +lodash.template@^4.0.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + dependencies: + lodash._reinterpolate "~3.0.0" + +lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.1: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.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" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +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" + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.17: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.2.4: + version "2.3.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.0.tgz#2e11b1c46df7fe7f1afbe9a490280add21ffe384" + dependencies: + safe-buffer "^5.1.1" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +needle@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.0.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.0" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.1.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + +npm-packlist@^1.1.6: + version "1.1.10" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +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" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + +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" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" + +oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.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" + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +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" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + 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" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + 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" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.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" + dependencies: + pify "^3.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + 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" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +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" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +prettier@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325" + +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +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" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.4.1, q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@~6.5.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + +randomatic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +rc@^1.1.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" + dependencies: + deep-extend "^0.5.1" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +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" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^1.0.0, read-pkg@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +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" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.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" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.86.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.86.0.tgz#2b9497f449b0a32654c081a5cf426bbfb5bf5b69" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +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" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.7, resolve@^1.3.2: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + +safe-buffer@^5.0.1, 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" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sane@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sax@^1.2.1, sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +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" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + 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" + +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.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" + 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" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +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" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + 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.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +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" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + 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" + +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" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +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" + 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" + 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" + 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" + +sshpk@^1.7.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +standard-version@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-4.3.0.tgz#41006cfee4eeab7c0ff3a47eecaa4c7506ed2e3f" + dependencies: + chalk "^1.1.3" + conventional-changelog "^1.1.0" + conventional-recommended-bump "^1.0.0" + dotgitignore "^1.0.3" + figures "^1.5.0" + fs-access "^1.0.0" + semver "^5.1.0" + yargs "^8.0.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.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" + 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" + 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" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + 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" + +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" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +tar@^4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.2.4" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +test-exclude@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" + dependencies: + arrify "^1.0.1" + micromatch "^3.1.8" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-extensions@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + +through2@^2.0.0, through2@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +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" + +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" + 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" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +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" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^2.3.2, tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + +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" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +ts-jest@21.2.4: + version "21.2.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-21.2.4.tgz#8fbcfbfbf0c58cced10dcc34a5190acc8c5312ef" + dependencies: + babel-core "^6.24.1" + babel-plugin-istanbul "^4.1.4" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-preset-jest "^21.2.0" + cpx "^1.5.0" + fs-extra "^4.0.2" + jest-config "^21.2.1" + pkg-dir "^2.0.0" + source-map-support "^0.5.0" + yargs "^10.0.3" + +tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.1.tgz#a5d1f0532a49221c87755cfcc89ca37197242ba7" + +tslint-config-prettier@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.12.0.tgz#bc8504f286ecf42b906f3d1126a093114f5729cc" + +tslint-plugin-prettier@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-1.3.0.tgz#7eb65d19ea786a859501a42491b78c5de2031a3f" + dependencies: + eslint-plugin-prettier "^2.2.0" + tslib "^1.7.1" + +tslint@5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.10.0.tgz#11e26bccb88afa02dd0d9956cae3d4540b5f54c3" + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.12.1" + +tsutils@^2.12.1: + version "2.27.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.0.tgz#9efb252b188eaa0ca3ade41dc410d6ce7eaab816" + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + 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" + +typescript@2.8.3: + version "2.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" + dependencies: + kind-of "^6.0.2" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +whatwg-encoding@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.12, which@^1.2.9, which@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +worker-farm@^1.3.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + +yaml@1.0.0-beta.5: + version "1.0.0-beta.5" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.0.0-beta.5.tgz#17ac674c225f72d74a9eeecfc81d30ec369ed1b6" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + +yargs@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"