aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--code/.gitignore6
-rw-r--r--code/.npmrc4
-rw-r--r--code/.vscode/launch.json19
-rw-r--r--code/.vscode/settings.json10
-rw-r--r--code/.vscode/tasks.json31
-rw-r--r--code/common.ts278
-rw-r--r--code/native/Cargo.toml19
-rw-r--r--code/native/build.rs7
-rw-r--r--code/native/src/lib.rs80
-rw-r--r--code/package-lock.json3027
-rw-r--r--code/package.json52
-rw-r--r--code/src/main.ts193
-rw-r--r--code/tsconfig.json11
-rw-r--r--src/ast.rs30
-rw-r--r--src/lib.rs4
-rw-r--r--src/yellow/mod.rs4
16 files changed, 3772 insertions, 3 deletions
diff --git a/code/.gitignore b/code/.gitignore
new file mode 100644
index 000000000..c3f44bc49
--- /dev/null
+++ b/code/.gitignore
@@ -0,0 +1,6 @@
1target
2index.node
3artifacts.json
4*.vsix
5out/*
6node_modules/*
diff --git a/code/.npmrc b/code/.npmrc
new file mode 100644
index 000000000..ac8f24bde
--- /dev/null
+++ b/code/.npmrc
@@ -0,0 +1,4 @@
1runtime = electron
2target = 1.7.9
3target_arch = x64
4disturl = https://atom.io/download/atom-shell
diff --git a/code/.vscode/launch.json b/code/.vscode/launch.json
new file mode 100644
index 000000000..5d75a92e8
--- /dev/null
+++ b/code/.vscode/launch.json
@@ -0,0 +1,19 @@
1{
2 // Use IntelliSense to learn about possible attributes.
3 // Hover to view descriptions of existing attributes.
4 // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 "version": "0.2.0",
6 "configurations": [
7 {
8 "name": "Launch Extension",
9 "type": "extensionHost",
10 "request": "launch",
11 "runtimeExecutable": "${execPath}",
12 "args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
13 "stopOnEntry": false,
14 "sourceMaps": true,
15 "outFiles": [ "${workspaceRoot}/out/src/**/*.js" ],
16 "preLaunchTask": "npm"
17 },
18 ]
19}
diff --git a/code/.vscode/settings.json b/code/.vscode/settings.json
new file mode 100644
index 000000000..580db9c6a
--- /dev/null
+++ b/code/.vscode/settings.json
@@ -0,0 +1,10 @@
1// Place your settings in this file to overwrite default and user settings.
2{
3 "files.exclude": {
4 "out": true,
5 "node_modules": true
6 },
7 "search.exclude": {
8 "out": true // set this to false to include "out" folder in search results
9 }
10} \ No newline at end of file
diff --git a/code/.vscode/tasks.json b/code/.vscode/tasks.json
new file mode 100644
index 000000000..8e5a8b9ef
--- /dev/null
+++ b/code/.vscode/tasks.json
@@ -0,0 +1,31 @@
1
2// Available variables which can be used inside of strings.
3// ${workspaceRoot}: the root folder of the team
4// ${file}: the current opened file
5// ${fileBasename}: the current opened file's basename
6// ${fileDirname}: the current opened file's dirname
7// ${fileExtname}: the current opened file's extension
8// ${cwd}: the current working directory of the spawned process
9
10// A task runner that calls a custom npm script that compiles the extension.
11{
12 "version": "0.2.0",
13
14 // we want to run npm
15 "command": "npm",
16
17 // the command is a shell script
18 "isShellCommand": true,
19
20 // show the output window only if unrecognized errors occur.
21 "showOutput": "silent",
22
23 // we run the custom script "compile" as defined in package.json
24 "args": ["run", "compile", "--loglevel", "silent"],
25
26 // The tsc compiler is started in watching mode
27 "isBackground": true,
28
29 // use the standard tsc in watch mode problem matcher to find compile problems in the output.
30 "problemMatcher": "$tsc-watch"
31}
diff --git a/code/common.ts b/code/common.ts
new file mode 100644
index 000000000..dfd49833d
--- /dev/null
+++ b/code/common.ts
@@ -0,0 +1,278 @@
1import * as vscode from 'vscode'
2import { log } from 'util'
3
4export function createPlugin(
5 backend,
6 fileExtension: string,
7 disposables: vscode.Disposable[],
8 doHighlighting: boolean = false,
9 diganosticCollection: vscode.DiagnosticCollection | null = null
10) {
11 let uris = {
12 syntaxTree: vscode.Uri.parse(`fall-${fileExtension}://syntaxtree`),
13 metrics: vscode.Uri.parse(`fall-${fileExtension}://metrics`)
14 }
15
16 function updateActiveEditor() {
17 let editor = vscode.window.activeTextEditor
18 if (editor == null) return
19 let file = currentFile()
20 if (file == null) return
21 if (doHighlighting) {
22 setHighlights(editor, file.highlight())
23 }
24 if (diganosticCollection != null) {
25 diganosticCollection.clear()
26 diganosticCollection.set(
27 editor.document.uri,
28 file.diagnostics()
29 )
30 }
31 }
32
33
34 function currentFile(): EditorFile | null {
35 let editor = vscode.window.activeTextEditor
36 if (editor == null) return
37 let doc = editor.document
38 return getFile(doc)
39 }
40
41 vscode.window.onDidChangeActiveTextEditor(updateActiveEditor)
42 let cmd = vscode.commands.registerCommand(`fall-${fileExtension}.applyContextAction`, (range, id) => {
43 let file = currentFile()
44 if (file == null) return
45 return file.applyContextAction(range, id)
46 })
47 disposables.push(cmd)
48
49 return {
50 getFile: getFile,
51 showSyntaxTree: () => {
52 let file = currentFile()
53 if (file == null) return
54 return openDoc(uris.syntaxTree)
55 },
56 metrics: () => {
57 let file = currentFile()
58 if (file == null) return
59 return openDoc(uris.metrics)
60 },
61 extendSelection: () => {
62 let editor = vscode.window.activeTextEditor
63 let file = currentFile()
64 if (editor == null || file == null) return
65 editor.selections = editor.selections.map((s) => {
66 let range = file.extendSelection(s)
67 return new vscode.Selection(range.start, range.end)
68 })
69 },
70 documentSymbolsProvider: new DocumentSymbolProvider(getFile),
71 documentFormattingEditProvider: new DocumentFormattingEditProvider(getFile),
72 codeActionProvider: new CodeActionProvider(getFile, fileExtension)
73 }
74}
75
76
77export interface FileStructureNode {
78 name: string
79 range: [number, number]
80 children: [FileStructureNode]
81}
82
83export interface FallDiagnostic {
84 range: [number, number]
85 severity: string
86 message: string
87}
88
89export class EditorFile {
90 backend;
91 imp;
92 doc: vscode.TextDocument;
93
94 constructor(backend, imp, doc: vscode.TextDocument) {
95 this.backend = backend
96 this.imp = imp
97 this.doc = doc
98 }
99
100 metrics(): string { return this.call("metrics") }
101 syntaxTree(): string { return this.call("syntaxTree") }
102 extendSelection(range_: vscode.Range): vscode.Range | null {
103 let range = fromVsRange(this.doc, range_)
104 let exp = this.call("extendSelection", range)
105 if (exp == null) return null
106 return toVsRange(this.doc, exp)
107 }
108
109 structure(): Array<FileStructureNode> { return this.call("structure") }
110 reformat(): Array<vscode.TextEdit> {
111 let edits = this.call("reformat")
112 return toVsEdits(this.doc, edits)
113 }
114
115 highlight(): Array<[[number, number], string]> { return this.call("highlight") }
116 diagnostics(): Array<vscode.Diagnostic> {
117 return this.call("diagnostics").map((d) => {
118 let range = toVsRange(this.doc, d.range)
119 let severity = d.severity == "Error"
120 ? vscode.DiagnosticSeverity.Error
121 : vscode.DiagnosticSeverity.Warning
122
123 return new vscode.Diagnostic(range, d.message, severity)
124 })
125 }
126
127 contextActions(range_: vscode.Range): Array<string> {
128 let range = fromVsRange(this.doc, range_)
129 let result = this.call("contextActions", range)
130 return result
131 }
132
133 applyContextAction(range_: vscode.Range, id: string) {
134 let range = fromVsRange(this.doc, range_)
135 let edits = this.call("applyContextAction", range, id)
136 let editor = vscode.window.activeTextEditor
137 return editor.edit((builder) => {
138 for (let op of edits) {
139 builder.replace(toVsRange(this.doc, op.delete), op.insert)
140 }
141 })
142 }
143
144 call(method: string, ...args) {
145 let result = this.backend[method](this.imp, ...args)
146 return result
147 }
148}
149
150function documentToFile(backend, fileExtension: string, disposables: vscode.Disposable[], onChange) {
151 let docs = {}
152 function update(doc: vscode.TextDocument, file) {
153 let key = doc.uri.toString()
154 if (file == null) {
155 delete docs[key]
156 } else {
157 docs[key] = file
158 }
159 onChange(doc)
160 }
161 function get(doc: vscode.TextDocument) {
162 return docs[doc.uri.toString()]
163 }
164
165 function isKnownDoc(doc: vscode.TextDocument) {
166 return doc.fileName.endsWith(`.${fileExtension}`)
167 }
168
169 vscode.workspace.onDidChangeTextDocument((event: vscode.TextDocumentChangeEvent) => {
170 let doc = event.document
171 if (!isKnownDoc(event.document)) return
172 let tree = get(doc)
173 if (event.contentChanges.length == 1 && tree) {
174 let edits = event.contentChanges.map((change) => {
175 let start = doc.offsetAt(change.range.start)
176 return {
177 "delete": [start, start + change.rangeLength],
178 "insert": change.text
179 }
180 })
181 update(doc, backend.edit(tree, edits))
182 return
183 }
184 update(doc, null)
185 }, null, disposables)
186
187 vscode.workspace.onDidOpenTextDocument((doc: vscode.TextDocument) => {
188 if (!isKnownDoc(doc)) return
189 update(doc, backend.parse(doc.getText()))
190 }, null, disposables)
191
192 vscode.workspace.onDidCloseTextDocument((doc: vscode.TextDocument) => {
193 update(doc, null)
194 }, null, disposables)
195
196 return (doc: vscode.TextDocument) => {
197 if (!isKnownDoc(doc)) return null
198
199 if (!get(doc)) {
200 update(doc, backend.parse(doc.getText()))
201 }
202 let imp = get(doc)
203 return new EditorFile(backend, imp, doc)
204 }
205}
206
207export class DocumentSymbolProvider implements vscode.DocumentSymbolProvider {
208 getFile: (doc: vscode.TextDocument) => EditorFile | null;
209 constructor(getFile) {
210 this.getFile = getFile
211 }
212
213 provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken) {
214 let file = this.getFile(document)
215 if (file == null) return null
216 return file.structure().map((node) => {
217 return new vscode.SymbolInformation(
218 node.name,
219 vscode.SymbolKind.Function,
220 toVsRange(document, node.range),
221 null,
222 null
223 )
224 })
225 }
226}
227
228export class DocumentFormattingEditProvider implements vscode.DocumentFormattingEditProvider {
229 getFile: (doc: vscode.TextDocument) => EditorFile | null;
230 constructor(getFile) { this.getFile = getFile }
231
232 provideDocumentFormattingEdits(
233 document: vscode.TextDocument,
234 options: vscode.FormattingOptions,
235 token: vscode.CancellationToken
236 ): vscode.TextEdit[] {
237 let file = this.getFile(document)
238 if (file == null) return []
239 return file.reformat()
240 }
241}
242
243export class CodeActionProvider implements vscode.CodeActionProvider {
244 fileExtension: string
245 getFile: (doc: vscode.TextDocument) => EditorFile | null;
246 constructor(getFile, fileExtension) {
247 this.getFile = getFile
248 this.fileExtension = fileExtension
249 }
250
251 provideCodeActions(
252 document: vscode.TextDocument,
253 range: vscode.Range,
254 context: vscode.CodeActionContext,
255 token: vscode.CancellationToken
256 ): vscode.Command[] {
257 let file = this.getFile(document)
258 if (file == null) return
259 let actions = file.contextActions(range)
260 return actions.map((id) => {
261 return {
262 title: id,
263 command: `fall-${this.fileExtension}.applyContextAction`,
264 arguments: [range, id]
265 }
266 })
267 }
268}
269
270
271export function toVsEdits(doc: vscode.TextDocument, edits): Array<vscode.TextEdit> {
272 return edits.map((op) => vscode.TextEdit.replace(toVsRange(doc, op.delete), op.insert))
273}
274
275async function openDoc(uri: vscode.Uri) {
276 let document = await vscode.workspace.openTextDocument(uri)
277 vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true)
278}
diff --git a/code/native/Cargo.toml b/code/native/Cargo.toml
new file mode 100644
index 000000000..1648dfb33
--- /dev/null
+++ b/code/native/Cargo.toml
@@ -0,0 +1,19 @@
1[package]
2name = "backend"
3version = "0.1.0"
4authors = ["Aleksey Kladov <[email protected]>"]
5license = "MIT"
6build = "build.rs"
7exclude = ["artifacts.json", "index.node"]
8[workspace]
9
10[lib]
11name = "backend"
12crate-type = ["dylib"]
13
14[build-dependencies]
15neon-build = "0.2.0"
16
17[dependencies]
18neon = "0.2.0"
19libsyntax2 = { path = "../../" }
diff --git a/code/native/build.rs b/code/native/build.rs
new file mode 100644
index 000000000..687a66194
--- /dev/null
+++ b/code/native/build.rs
@@ -0,0 +1,7 @@
1extern crate neon_build;
2
3fn main() {
4 neon_build::setup(); // must be called in build.rs
5
6 // add project-specific build logic here...
7}
diff --git a/code/native/src/lib.rs b/code/native/src/lib.rs
new file mode 100644
index 000000000..dcf478cf5
--- /dev/null
+++ b/code/native/src/lib.rs
@@ -0,0 +1,80 @@
1#[macro_use]
2extern crate neon;
3extern crate libsyntax2;
4
5use libsyntax2::{
6 TextRange,
7 File,
8 utils::dump_tree,
9 SyntaxKind::*,
10};
11use neon::prelude::*;
12
13pub struct Wrapper {
14 inner: File,
15}
16
17impl Wrapper {
18 fn highlight(&self) -> Vec<(TextRange, &'static str)> {
19 let mut res = Vec::new();
20 self.inner.for_each_node(|node| {
21 if node.kind() == ERROR {
22 res.push((node.range(), "error"))
23 }
24 });
25 res
26 }
27}
28
29
30
31declare_types! {
32 /// A class for generating greeting strings.
33 pub class RustFile for Wrapper {
34 init(mut cx) {
35 let text = cx.argument::<JsString>(0)?.value();
36 Ok(Wrapper {
37 inner: File::parse(&text)
38 })
39 }
40
41 method syntaxTree(mut cx) {
42 let this = cx.this();
43 let tree = {
44 let guard = cx.lock();
45 let wrapper = this.borrow(&guard);
46 dump_tree(&wrapper.inner.syntax())
47 };
48 Ok(cx.string(tree.as_str()).upcast())
49 }
50
51 method highlight(mut cx) {
52 let this = cx.this();
53 let highlights = {
54 let guard = cx.lock();
55 let wrapper = this.borrow(&guard);
56 wrapper.highlight()
57 };
58 let res = cx.empty_array();
59 for (i, (range, tag)) in highlights.into_iter().enumerate() {
60 let start: u32 = range.start().into();
61 let end: u32 = range.end().into();
62 let start = cx.number(start);
63 let end = cx.number(end);
64 let tag = cx.string(tag);
65 let hl = cx.empty_array();
66 hl.set(&mut cx, 0, start)?;
67 hl.set(&mut cx, 1, end)?;
68 hl.set(&mut cx, 2, tag)?;
69 res.set(&mut cx, i as u32, hl)?;
70 }
71
72 Ok(res.upcast())
73 }
74 }
75
76}
77
78register_module!(mut cx, {
79 cx.export_class::<RustFile>("RustFile")
80});
diff --git a/code/package-lock.json b/code/package-lock.json
new file mode 100644
index 000000000..1c9a815d8
--- /dev/null
+++ b/code/package-lock.json
@@ -0,0 +1,3027 @@
1{
2 "name": "libsyntax-rust",
3 "version": "0.0.1",
4 "lockfileVersion": 1,
5 "requires": true,
6 "dependencies": {
7 "@types/node": {
8 "version": "6.0.114",
9 "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.114.tgz",
10 "integrity": "sha512-5ViC9dwf1VIAtrOFTvOuN04lJgw28eKjuy0Vg2Bd/fSlxKP2feCSkIw04ZgOENL2ywdWrtbkthp1XVLEjJmouw==",
11 "dev": true
12 },
13 "ajv": {
14 "version": "5.5.2",
15 "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
16 "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
17 "dev": true,
18 "requires": {
19 "co": "4.6.0",
20 "fast-deep-equal": "1.1.0",
21 "fast-json-stable-stringify": "2.0.0",
22 "json-schema-traverse": "0.3.1"
23 }
24 },
25 "align-text": {
26 "version": "0.1.4",
27 "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
28 "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
29 "dev": true,
30 "requires": {
31 "kind-of": "3.2.2",
32 "longest": "1.0.1",
33 "repeat-string": "1.6.1"
34 }
35 },
36 "amdefine": {
37 "version": "1.0.1",
38 "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
39 "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
40 "dev": true
41 },
42 "ansi-cyan": {
43 "version": "0.1.1",
44 "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
45 "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
46 "dev": true,
47 "requires": {
48 "ansi-wrap": "0.1.0"
49 }
50 },
51 "ansi-escape-sequences": {
52 "version": "4.0.0",
53 "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
54 "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
55 "dev": true,
56 "requires": {
57 "array-back": "2.0.0"
58 }
59 },
60 "ansi-escapes": {
61 "version": "3.1.0",
62 "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
63 "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
64 "dev": true
65 },
66 "ansi-red": {
67 "version": "0.1.1",
68 "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
69 "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
70 "dev": true,
71 "requires": {
72 "ansi-wrap": "0.1.0"
73 }
74 },
75 "ansi-regex": {
76 "version": "3.0.0",
77 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
78 "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
79 "dev": true
80 },
81 "ansi-styles": {
82 "version": "3.2.1",
83 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
84 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
85 "dev": true,
86 "requires": {
87 "color-convert": "1.9.2"
88 }
89 },
90 "ansi-wrap": {
91 "version": "0.1.0",
92 "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
93 "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
94 "dev": true
95 },
96 "argparse": {
97 "version": "1.0.10",
98 "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
99 "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
100 "dev": true,
101 "requires": {
102 "sprintf-js": "1.0.3"
103 }
104 },
105 "arr-diff": {
106 "version": "1.1.0",
107 "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
108 "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
109 "dev": true,
110 "requires": {
111 "arr-flatten": "1.1.0",
112 "array-slice": "0.2.3"
113 }
114 },
115 "arr-flatten": {
116 "version": "1.1.0",
117 "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
118 "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
119 "dev": true
120 },
121 "arr-union": {
122 "version": "2.1.0",
123 "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
124 "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
125 "dev": true
126 },
127 "array-back": {
128 "version": "2.0.0",
129 "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
130 "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
131 "dev": true,
132 "requires": {
133 "typical": "2.6.1"
134 }
135 },
136 "array-differ": {
137 "version": "1.0.0",
138 "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
139 "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
140 "dev": true
141 },
142 "array-slice": {
143 "version": "0.2.3",
144 "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
145 "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
146 "dev": true
147 },
148 "array-union": {
149 "version": "1.0.2",
150 "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
151 "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
152 "dev": true,
153 "requires": {
154 "array-uniq": "1.0.3"
155 }
156 },
157 "array-uniq": {
158 "version": "1.0.3",
159 "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
160 "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
161 "dev": true
162 },
163 "array-unique": {
164 "version": "0.2.1",
165 "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
166 "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
167 "dev": true
168 },
169 "arrify": {
170 "version": "1.0.1",
171 "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
172 "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
173 "dev": true
174 },
175 "asn1": {
176 "version": "0.2.3",
177 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
178 "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
179 "dev": true
180 },
181 "assert-plus": {
182 "version": "1.0.0",
183 "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
184 "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
185 "dev": true
186 },
187 "async": {
188 "version": "1.5.2",
189 "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
190 "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
191 "dev": true
192 },
193 "asynckit": {
194 "version": "0.4.0",
195 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
196 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
197 "dev": true
198 },
199 "aws-sign2": {
200 "version": "0.7.0",
201 "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
202 "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
203 "dev": true
204 },
205 "aws4": {
206 "version": "1.7.0",
207 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
208 "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
209 "dev": true
210 },
211 "balanced-match": {
212 "version": "1.0.0",
213 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
214 "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
215 "dev": true
216 },
217 "bcrypt-pbkdf": {
218 "version": "1.0.2",
219 "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
220 "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
221 "dev": true,
222 "optional": true,
223 "requires": {
224 "tweetnacl": "0.14.5"
225 }
226 },
227 "block-stream": {
228 "version": "0.0.9",
229 "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
230 "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
231 "dev": true,
232 "requires": {
233 "inherits": "2.0.3"
234 }
235 },
236 "boolbase": {
237 "version": "1.0.0",
238 "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
239 "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
240 "dev": true
241 },
242 "brace-expansion": {
243 "version": "1.1.11",
244 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
245 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
246 "dev": true,
247 "requires": {
248 "balanced-match": "1.0.0",
249 "concat-map": "0.0.1"
250 }
251 },
252 "braces": {
253 "version": "1.8.5",
254 "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
255 "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
256 "dev": true,
257 "requires": {
258 "expand-range": "1.8.2",
259 "preserve": "0.2.0",
260 "repeat-element": "1.1.2"
261 }
262 },
263 "browser-stdout": {
264 "version": "1.3.0",
265 "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
266 "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
267 "dev": true
268 },
269 "buffer-crc32": {
270 "version": "0.2.13",
271 "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
272 "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
273 "dev": true
274 },
275 "buffer-from": {
276 "version": "1.1.0",
277 "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
278 "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
279 "dev": true
280 },
281 "builtins": {
282 "version": "1.0.3",
283 "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
284 "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
285 "dev": true
286 },
287 "camelcase": {
288 "version": "1.2.1",
289 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
290 "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
291 "dev": true,
292 "optional": true
293 },
294 "caseless": {
295 "version": "0.12.0",
296 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
297 "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
298 "dev": true
299 },
300 "center-align": {
301 "version": "0.1.3",
302 "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
303 "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
304 "dev": true,
305 "optional": true,
306 "requires": {
307 "align-text": "0.1.4",
308 "lazy-cache": "1.0.4"
309 }
310 },
311 "chalk": {
312 "version": "2.1.0",
313 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
314 "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
315 "dev": true,
316 "requires": {
317 "ansi-styles": "3.2.1",
318 "escape-string-regexp": "1.0.5",
319 "supports-color": "4.5.0"
320 }
321 },
322 "chardet": {
323 "version": "0.4.2",
324 "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
325 "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
326 "dev": true
327 },
328 "cheerio": {
329 "version": "1.0.0-rc.2",
330 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
331 "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
332 "dev": true,
333 "requires": {
334 "css-select": "1.2.0",
335 "dom-serializer": "0.1.0",
336 "entities": "1.1.1",
337 "htmlparser2": "3.9.2",
338 "lodash": "4.17.10",
339 "parse5": "3.0.3"
340 }
341 },
342 "cli-cursor": {
343 "version": "2.1.0",
344 "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
345 "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
346 "dev": true,
347 "requires": {
348 "restore-cursor": "2.0.0"
349 }
350 },
351 "cli-width": {
352 "version": "2.2.0",
353 "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
354 "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
355 "dev": true
356 },
357 "cliui": {
358 "version": "2.1.0",
359 "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
360 "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
361 "dev": true,
362 "optional": true,
363 "requires": {
364 "center-align": "0.1.3",
365 "right-align": "0.1.3",
366 "wordwrap": "0.0.2"
367 },
368 "dependencies": {
369 "wordwrap": {
370 "version": "0.0.2",
371 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
372 "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
373 "dev": true,
374 "optional": true
375 }
376 }
377 },
378 "clone": {
379 "version": "0.2.0",
380 "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
381 "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
382 "dev": true
383 },
384 "clone-buffer": {
385 "version": "1.0.0",
386 "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
387 "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
388 "dev": true
389 },
390 "clone-stats": {
391 "version": "0.0.1",
392 "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
393 "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
394 "dev": true
395 },
396 "cloneable-readable": {
397 "version": "1.1.2",
398 "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
399 "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
400 "dev": true,
401 "requires": {
402 "inherits": "2.0.3",
403 "process-nextick-args": "2.0.0",
404 "readable-stream": "2.3.6"
405 }
406 },
407 "co": {
408 "version": "4.6.0",
409 "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
410 "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
411 "dev": true
412 },
413 "color-convert": {
414 "version": "1.9.2",
415 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
416 "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
417 "dev": true,
418 "requires": {
419 "color-name": "1.1.1"
420 }
421 },
422 "color-name": {
423 "version": "1.1.1",
424 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
425 "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
426 "dev": true
427 },
428 "combined-stream": {
429 "version": "1.0.6",
430 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
431 "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
432 "dev": true,
433 "requires": {
434 "delayed-stream": "1.0.0"
435 }
436 },
437 "command-line-args": {
438 "version": "4.0.7",
439 "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz",
440 "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==",
441 "dev": true,
442 "requires": {
443 "array-back": "2.0.0",
444 "find-replace": "1.0.3",
445 "typical": "2.6.1"
446 }
447 },
448 "command-line-commands": {
449 "version": "2.0.1",
450 "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-2.0.1.tgz",
451 "integrity": "sha512-m8c2p1DrNd2ruIAggxd/y6DgygQayf6r8RHwchhXryaLF8I6koYjoYroVP+emeROE9DXN5b9sP1Gh+WtvTTdtQ==",
452 "dev": true,
453 "requires": {
454 "array-back": "2.0.0"
455 }
456 },
457 "command-line-usage": {
458 "version": "4.1.0",
459 "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
460 "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
461 "dev": true,
462 "requires": {
463 "ansi-escape-sequences": "4.0.0",
464 "array-back": "2.0.0",
465 "table-layout": "0.4.4",
466 "typical": "2.6.1"
467 }
468 },
469 "commander": {
470 "version": "2.16.0",
471 "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
472 "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
473 "dev": true
474 },
475 "concat-map": {
476 "version": "0.0.1",
477 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
478 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
479 "dev": true
480 },
481 "convert-source-map": {
482 "version": "1.5.1",
483 "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
484 "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
485 "dev": true
486 },
487 "core-util-is": {
488 "version": "1.0.2",
489 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
490 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
491 "dev": true
492 },
493 "css-select": {
494 "version": "1.2.0",
495 "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
496 "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
497 "dev": true,
498 "requires": {
499 "boolbase": "1.0.0",
500 "css-what": "2.1.0",
501 "domutils": "1.5.1",
502 "nth-check": "1.0.1"
503 }
504 },
505 "css-what": {
506 "version": "2.1.0",
507 "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
508 "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
509 "dev": true
510 },
511 "dashdash": {
512 "version": "1.14.1",
513 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
514 "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
515 "dev": true,
516 "requires": {
517 "assert-plus": "1.0.0"
518 }
519 },
520 "debug": {
521 "version": "3.1.0",
522 "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
523 "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
524 "dev": true,
525 "requires": {
526 "ms": "2.0.0"
527 }
528 },
529 "decamelize": {
530 "version": "1.2.0",
531 "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
532 "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
533 "dev": true,
534 "optional": true
535 },
536 "deep-assign": {
537 "version": "1.0.0",
538 "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz",
539 "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=",
540 "dev": true,
541 "requires": {
542 "is-obj": "1.0.1"
543 }
544 },
545 "deep-extend": {
546 "version": "0.6.0",
547 "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
548 "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
549 "dev": true
550 },
551 "delayed-stream": {
552 "version": "1.0.0",
553 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
554 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
555 "dev": true
556 },
557 "denodeify": {
558 "version": "1.2.1",
559 "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
560 "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=",
561 "dev": true
562 },
563 "diff": {
564 "version": "3.3.1",
565 "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
566 "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==",
567 "dev": true
568 },
569 "dom-serializer": {
570 "version": "0.1.0",
571 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
572 "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
573 "dev": true,
574 "requires": {
575 "domelementtype": "1.1.3",
576 "entities": "1.1.1"
577 },
578 "dependencies": {
579 "domelementtype": {
580 "version": "1.1.3",
581 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
582 "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
583 "dev": true
584 }
585 }
586 },
587 "domelementtype": {
588 "version": "1.3.0",
589 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
590 "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
591 "dev": true
592 },
593 "domhandler": {
594 "version": "2.4.2",
595 "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
596 "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
597 "dev": true,
598 "requires": {
599 "domelementtype": "1.3.0"
600 }
601 },
602 "domutils": {
603 "version": "1.5.1",
604 "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
605 "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
606 "dev": true,
607 "requires": {
608 "dom-serializer": "0.1.0",
609 "domelementtype": "1.3.0"
610 }
611 },
612 "duplexer": {
613 "version": "0.1.1",
614 "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
615 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
616 "dev": true
617 },
618 "duplexify": {
619 "version": "3.6.0",
620 "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
621 "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
622 "dev": true,
623 "requires": {
624 "end-of-stream": "1.4.1",
625 "inherits": "2.0.3",
626 "readable-stream": "2.3.6",
627 "stream-shift": "1.0.0"
628 }
629 },
630 "ecc-jsbn": {
631 "version": "0.1.2",
632 "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
633 "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
634 "dev": true,
635 "optional": true,
636 "requires": {
637 "jsbn": "0.1.1",
638 "safer-buffer": "2.1.2"
639 }
640 },
641 "end-of-stream": {
642 "version": "1.4.1",
643 "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
644 "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
645 "dev": true,
646 "requires": {
647 "once": "1.4.0"
648 }
649 },
650 "entities": {
651 "version": "1.1.1",
652 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
653 "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
654 "dev": true
655 },
656 "escape-string-regexp": {
657 "version": "1.0.5",
658 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
659 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
660 "dev": true
661 },
662 "event-stream": {
663 "version": "3.3.4",
664 "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
665 "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
666 "dev": true,
667 "requires": {
668 "duplexer": "0.1.1",
669 "from": "0.1.7",
670 "map-stream": "0.1.0",
671 "pause-stream": "0.0.11",
672 "split": "0.3.3",
673 "stream-combiner": "0.0.4",
674 "through": "2.3.8"
675 }
676 },
677 "expand-brackets": {
678 "version": "0.1.5",
679 "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
680 "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
681 "dev": true,
682 "requires": {
683 "is-posix-bracket": "0.1.1"
684 }
685 },
686 "expand-range": {
687 "version": "1.8.2",
688 "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
689 "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
690 "dev": true,
691 "requires": {
692 "fill-range": "2.2.4"
693 }
694 },
695 "extend": {
696 "version": "3.0.2",
697 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
698 "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
699 "dev": true
700 },
701 "extend-shallow": {
702 "version": "1.1.4",
703 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
704 "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
705 "dev": true,
706 "requires": {
707 "kind-of": "1.1.0"
708 },
709 "dependencies": {
710 "kind-of": {
711 "version": "1.1.0",
712 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
713 "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
714 "dev": true
715 }
716 }
717 },
718 "external-editor": {
719 "version": "2.2.0",
720 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
721 "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
722 "dev": true,
723 "requires": {
724 "chardet": "0.4.2",
725 "iconv-lite": "0.4.23",
726 "tmp": "0.0.33"
727 }
728 },
729 "extglob": {
730 "version": "0.3.2",
731 "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
732 "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
733 "dev": true,
734 "requires": {
735 "is-extglob": "1.0.0"
736 },
737 "dependencies": {
738 "is-extglob": {
739 "version": "1.0.0",
740 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
741 "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
742 "dev": true
743 }
744 }
745 },
746 "extsprintf": {
747 "version": "1.3.0",
748 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
749 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
750 "dev": true
751 },
752 "fast-deep-equal": {
753 "version": "1.1.0",
754 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
755 "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
756 "dev": true
757 },
758 "fast-json-stable-stringify": {
759 "version": "2.0.0",
760 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
761 "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
762 "dev": true
763 },
764 "fd-slicer": {
765 "version": "1.1.0",
766 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
767 "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
768 "dev": true,
769 "requires": {
770 "pend": "1.2.0"
771 }
772 },
773 "figures": {
774 "version": "2.0.0",
775 "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
776 "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
777 "dev": true,
778 "requires": {
779 "escape-string-regexp": "1.0.5"
780 }
781 },
782 "filename-regex": {
783 "version": "2.0.1",
784 "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
785 "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
786 "dev": true
787 },
788 "fill-range": {
789 "version": "2.2.4",
790 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
791 "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
792 "dev": true,
793 "requires": {
794 "is-number": "2.1.0",
795 "isobject": "2.1.0",
796 "randomatic": "3.0.0",
797 "repeat-element": "1.1.2",
798 "repeat-string": "1.6.1"
799 }
800 },
801 "find-replace": {
802 "version": "1.0.3",
803 "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
804 "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
805 "dev": true,
806 "requires": {
807 "array-back": "1.0.4",
808 "test-value": "2.1.0"
809 },
810 "dependencies": {
811 "array-back": {
812 "version": "1.0.4",
813 "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
814 "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
815 "dev": true,
816 "requires": {
817 "typical": "2.6.1"
818 }
819 }
820 }
821 },
822 "first-chunk-stream": {
823 "version": "1.0.0",
824 "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
825 "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
826 "dev": true
827 },
828 "for-in": {
829 "version": "1.0.2",
830 "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
831 "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
832 "dev": true
833 },
834 "for-own": {
835 "version": "0.1.5",
836 "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
837 "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
838 "dev": true,
839 "requires": {
840 "for-in": "1.0.2"
841 }
842 },
843 "forever-agent": {
844 "version": "0.6.1",
845 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
846 "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
847 "dev": true
848 },
849 "form-data": {
850 "version": "2.3.2",
851 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
852 "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
853 "dev": true,
854 "requires": {
855 "asynckit": "0.4.0",
856 "combined-stream": "1.0.6",
857 "mime-types": "2.1.19"
858 }
859 },
860 "from": {
861 "version": "0.1.7",
862 "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
863 "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
864 "dev": true
865 },
866 "fs.realpath": {
867 "version": "1.0.0",
868 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
869 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
870 "dev": true
871 },
872 "fstream": {
873 "version": "1.0.11",
874 "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
875 "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
876 "dev": true,
877 "requires": {
878 "graceful-fs": "4.1.11",
879 "inherits": "2.0.3",
880 "mkdirp": "0.5.1",
881 "rimraf": "2.6.2"
882 }
883 },
884 "getpass": {
885 "version": "0.1.7",
886 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
887 "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
888 "dev": true,
889 "requires": {
890 "assert-plus": "1.0.0"
891 }
892 },
893 "git-config": {
894 "version": "0.0.7",
895 "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz",
896 "integrity": "sha1-qcij7wendsPXImE1bYtye2IgKyg=",
897 "dev": true,
898 "requires": {
899 "iniparser": "1.0.5"
900 }
901 },
902 "glob": {
903 "version": "7.1.2",
904 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
905 "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
906 "dev": true,
907 "requires": {
908 "fs.realpath": "1.0.0",
909 "inflight": "1.0.6",
910 "inherits": "2.0.3",
911 "minimatch": "3.0.4",
912 "once": "1.4.0",
913 "path-is-absolute": "1.0.1"
914 }
915 },
916 "glob-base": {
917 "version": "0.3.0",
918 "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
919 "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
920 "dev": true,
921 "requires": {
922 "glob-parent": "2.0.0",
923 "is-glob": "2.0.1"
924 },
925 "dependencies": {
926 "glob-parent": {
927 "version": "2.0.0",
928 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
929 "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
930 "dev": true,
931 "requires": {
932 "is-glob": "2.0.1"
933 }
934 },
935 "is-extglob": {
936 "version": "1.0.0",
937 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
938 "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
939 "dev": true
940 },
941 "is-glob": {
942 "version": "2.0.1",
943 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
944 "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
945 "dev": true,
946 "requires": {
947 "is-extglob": "1.0.0"
948 }
949 }
950 }
951 },
952 "glob-parent": {
953 "version": "3.1.0",
954 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
955 "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
956 "dev": true,
957 "requires": {
958 "is-glob": "3.1.0",
959 "path-dirname": "1.0.2"
960 }
961 },
962 "glob-stream": {
963 "version": "5.3.5",
964 "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
965 "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
966 "dev": true,
967 "requires": {
968 "extend": "3.0.2",
969 "glob": "5.0.15",
970 "glob-parent": "3.1.0",
971 "micromatch": "2.3.11",
972 "ordered-read-streams": "0.3.0",
973 "through2": "0.6.5",
974 "to-absolute-glob": "0.1.1",
975 "unique-stream": "2.2.1"
976 },
977 "dependencies": {
978 "glob": {
979 "version": "5.0.15",
980 "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
981 "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
982 "dev": true,
983 "requires": {
984 "inflight": "1.0.6",
985 "inherits": "2.0.3",
986 "minimatch": "3.0.4",
987 "once": "1.4.0",
988 "path-is-absolute": "1.0.1"
989 }
990 },
991 "isarray": {
992 "version": "0.0.1",
993 "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
994 "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
995 "dev": true
996 },
997 "readable-stream": {
998 "version": "1.0.34",
999 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
1000 "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
1001 "dev": true,
1002 "requires": {
1003 "core-util-is": "1.0.2",
1004 "inherits": "2.0.3",
1005 "isarray": "0.0.1",
1006 "string_decoder": "0.10.31"
1007 }
1008 },
1009 "string_decoder": {
1010 "version": "0.10.31",
1011 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
1012 "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
1013 "dev": true
1014 },
1015 "through2": {
1016 "version": "0.6.5",
1017 "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
1018 "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
1019 "dev": true,
1020 "requires": {
1021 "readable-stream": "1.0.34",
1022 "xtend": "4.0.1"
1023 }
1024 }
1025 }
1026 },
1027 "graceful-fs": {
1028 "version": "4.1.11",
1029 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
1030 "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
1031 "dev": true
1032 },
1033 "growl": {
1034 "version": "1.10.3",
1035 "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
1036 "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",
1037 "dev": true
1038 },
1039 "gulp-chmod": {
1040 "version": "2.0.0",
1041 "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz",
1042 "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=",
1043 "dev": true,
1044 "requires": {
1045 "deep-assign": "1.0.0",
1046 "stat-mode": "0.2.2",
1047 "through2": "2.0.3"
1048 }
1049 },
1050 "gulp-filter": {
1051 "version": "5.1.0",
1052 "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz",
1053 "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=",
1054 "dev": true,
1055 "requires": {
1056 "multimatch": "2.1.0",
1057 "plugin-error": "0.1.2",
1058 "streamfilter": "1.0.7"
1059 }
1060 },
1061 "gulp-gunzip": {
1062 "version": "1.0.0",
1063 "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz",
1064 "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=",
1065 "dev": true,
1066 "requires": {
1067 "through2": "0.6.5",
1068 "vinyl": "0.4.6"
1069 },
1070 "dependencies": {
1071 "isarray": {
1072 "version": "0.0.1",
1073 "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
1074 "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
1075 "dev": true
1076 },
1077 "readable-stream": {
1078 "version": "1.0.34",
1079 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
1080 "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
1081 "dev": true,
1082 "requires": {
1083 "core-util-is": "1.0.2",
1084 "inherits": "2.0.3",
1085 "isarray": "0.0.1",
1086 "string_decoder": "0.10.31"
1087 }
1088 },
1089 "string_decoder": {
1090 "version": "0.10.31",
1091 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
1092 "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
1093 "dev": true
1094 },
1095 "through2": {
1096 "version": "0.6.5",
1097 "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
1098 "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
1099 "dev": true,
1100 "requires": {
1101 "readable-stream": "1.0.34",
1102 "xtend": "4.0.1"
1103 }
1104 }
1105 }
1106 },
1107 "gulp-remote-src-vscode": {
1108 "version": "0.5.0",
1109 "resolved": "https://registry.npmjs.org/gulp-remote-src-vscode/-/gulp-remote-src-vscode-0.5.0.tgz",
1110 "integrity": "sha512-/9vtSk9eI9DEWCqzGieglPqmx0WUQ9pwPHyHFpKmfxqdgqGJC2l0vFMdYs54hLdDsMDEZFLDL2J4ikjc4hQ5HQ==",
1111 "dev": true,
1112 "requires": {
1113 "event-stream": "3.3.4",
1114 "node.extend": "1.1.6",
1115 "request": "2.87.0",
1116 "through2": "2.0.3",
1117 "vinyl": "2.2.0"
1118 },
1119 "dependencies": {
1120 "clone": {
1121 "version": "2.1.1",
1122 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
1123 "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
1124 "dev": true
1125 },
1126 "clone-stats": {
1127 "version": "1.0.0",
1128 "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
1129 "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
1130 "dev": true
1131 },
1132 "vinyl": {
1133 "version": "2.2.0",
1134 "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
1135 "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
1136 "dev": true,
1137 "requires": {
1138 "clone": "2.1.1",
1139 "clone-buffer": "1.0.0",
1140 "clone-stats": "1.0.0",
1141 "cloneable-readable": "1.1.2",
1142 "remove-trailing-separator": "1.1.0",
1143 "replace-ext": "1.0.0"
1144 }
1145 }
1146 }
1147 },
1148 "gulp-sourcemaps": {
1149 "version": "1.6.0",
1150 "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
1151 "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
1152 "dev": true,
1153 "requires": {
1154 "convert-source-map": "1.5.1",
1155 "graceful-fs": "4.1.11",
1156 "strip-bom": "2.0.0",
1157 "through2": "2.0.3",
1158 "vinyl": "1.2.0"
1159 },
1160 "dependencies": {
1161 "clone": {
1162 "version": "1.0.4",
1163 "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
1164 "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
1165 "dev": true
1166 },
1167 "replace-ext": {
1168 "version": "0.0.1",
1169 "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
1170 "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
1171 "dev": true
1172 },
1173 "vinyl": {
1174 "version": "1.2.0",
1175 "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
1176 "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
1177 "dev": true,
1178 "requires": {
1179 "clone": "1.0.4",
1180 "clone-stats": "0.0.1",
1181 "replace-ext": "0.0.1"
1182 }
1183 }
1184 }
1185 },
1186 "gulp-symdest": {
1187 "version": "1.1.0",
1188 "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.1.0.tgz",
1189 "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=",
1190 "dev": true,
1191 "requires": {
1192 "event-stream": "3.3.4",
1193 "mkdirp": "0.5.1",
1194 "queue": "3.1.0",
1195 "vinyl-fs": "2.4.4"
1196 }
1197 },
1198 "gulp-untar": {
1199 "version": "0.0.7",
1200 "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.7.tgz",
1201 "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==",
1202 "dev": true,
1203 "requires": {
1204 "event-stream": "3.3.4",
1205 "streamifier": "0.1.1",
1206 "tar": "2.2.1",
1207 "through2": "2.0.3",
1208 "vinyl": "1.2.0"
1209 },
1210 "dependencies": {
1211 "clone": {
1212 "version": "1.0.4",
1213 "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
1214 "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
1215 "dev": true
1216 },
1217 "replace-ext": {
1218 "version": "0.0.1",
1219 "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
1220 "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
1221 "dev": true
1222 },
1223 "vinyl": {
1224 "version": "1.2.0",
1225 "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
1226 "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
1227 "dev": true,
1228 "requires": {
1229 "clone": "1.0.4",
1230 "clone-stats": "0.0.1",
1231 "replace-ext": "0.0.1"
1232 }
1233 }
1234 }
1235 },
1236 "gulp-vinyl-zip": {
1237 "version": "2.1.0",
1238 "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz",
1239 "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=",
1240 "dev": true,
1241 "requires": {
1242 "event-stream": "3.3.4",
1243 "queue": "4.4.2",
1244 "through2": "2.0.3",
1245 "vinyl": "2.2.0",
1246 "vinyl-fs": "2.4.4",
1247 "yauzl": "2.10.0",
1248 "yazl": "2.4.3"
1249 },
1250 "dependencies": {
1251 "clone": {
1252 "version": "2.1.1",
1253 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
1254 "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
1255 "dev": true
1256 },
1257 "clone-stats": {
1258 "version": "1.0.0",
1259 "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
1260 "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
1261 "dev": true
1262 },
1263 "queue": {
1264 "version": "4.4.2",
1265 "resolved": "https://registry.npmjs.org/queue/-/queue-4.4.2.tgz",
1266 "integrity": "sha512-fSMRXbwhMwipcDZ08enW2vl+YDmAmhcNcr43sCJL8DIg+CFOsoRLG23ctxA+fwNk1w55SePSiS7oqQQSgQoVJQ==",
1267 "dev": true,
1268 "requires": {
1269 "inherits": "2.0.3"
1270 }
1271 },
1272 "vinyl": {
1273 "version": "2.2.0",
1274 "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
1275 "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
1276 "dev": true,
1277 "requires": {
1278 "clone": "2.1.1",
1279 "clone-buffer": "1.0.0",
1280 "clone-stats": "1.0.0",
1281 "cloneable-readable": "1.1.2",
1282 "remove-trailing-separator": "1.1.0",
1283 "replace-ext": "1.0.0"
1284 }
1285 }
1286 }
1287 },
1288 "handlebars": {
1289 "version": "4.0.11",
1290 "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
1291 "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
1292 "dev": true,
1293 "requires": {
1294 "async": "1.5.2",
1295 "optimist": "0.6.1",
1296 "source-map": "0.4.4",
1297 "uglify-js": "2.8.29"
1298 }
1299 },
1300 "har-schema": {
1301 "version": "2.0.0",
1302 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1303 "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
1304 "dev": true
1305 },
1306 "har-validator": {
1307 "version": "5.0.3",
1308 "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
1309 "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
1310 "dev": true,
1311 "requires": {
1312 "ajv": "5.5.2",
1313 "har-schema": "2.0.0"
1314 }
1315 },
1316 "has-flag": {
1317 "version": "2.0.0",
1318 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
1319 "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
1320 "dev": true
1321 },
1322 "he": {
1323 "version": "1.1.1",
1324 "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
1325 "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
1326 "dev": true
1327 },
1328 "htmlparser2": {
1329 "version": "3.9.2",
1330 "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
1331 "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
1332 "dev": true,
1333 "requires": {
1334 "domelementtype": "1.3.0",
1335 "domhandler": "2.4.2",
1336 "domutils": "1.5.1",
1337 "entities": "1.1.1",
1338 "inherits": "2.0.3",
1339 "readable-stream": "2.3.6"
1340 }
1341 },
1342 "http-signature": {
1343 "version": "1.2.0",
1344 "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1345 "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1346 "dev": true,
1347 "requires": {
1348 "assert-plus": "1.0.0",
1349 "jsprim": "1.4.1",
1350 "sshpk": "1.14.2"
1351 }
1352 },
1353 "iconv-lite": {
1354 "version": "0.4.23",
1355 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
1356 "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
1357 "dev": true,
1358 "requires": {
1359 "safer-buffer": "2.1.2"
1360 }
1361 },
1362 "inflight": {
1363 "version": "1.0.6",
1364 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1365 "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1366 "dev": true,
1367 "requires": {
1368 "once": "1.4.0",
1369 "wrappy": "1.0.2"
1370 }
1371 },
1372 "inherits": {
1373 "version": "2.0.3",
1374 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1375 "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1376 "dev": true
1377 },
1378 "iniparser": {
1379 "version": "1.0.5",
1380 "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz",
1381 "integrity": "sha1-g21r7+bfv87gvM8c+fKsxwJ/eD0=",
1382 "dev": true
1383 },
1384 "inquirer": {
1385 "version": "3.3.0",
1386 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
1387 "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
1388 "dev": true,
1389 "requires": {
1390 "ansi-escapes": "3.1.0",
1391 "chalk": "2.1.0",
1392 "cli-cursor": "2.1.0",
1393 "cli-width": "2.2.0",
1394 "external-editor": "2.2.0",
1395 "figures": "2.0.0",
1396 "lodash": "4.17.10",
1397 "mute-stream": "0.0.7",
1398 "run-async": "2.3.0",
1399 "rx-lite": "4.0.8",
1400 "rx-lite-aggregates": "4.0.8",
1401 "string-width": "2.1.1",
1402 "strip-ansi": "4.0.0",
1403 "through": "2.3.8"
1404 }
1405 },
1406 "is": {
1407 "version": "3.2.1",
1408 "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
1409 "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=",
1410 "dev": true
1411 },
1412 "is-buffer": {
1413 "version": "1.1.6",
1414 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1415 "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
1416 "dev": true
1417 },
1418 "is-dotfile": {
1419 "version": "1.0.3",
1420 "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
1421 "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
1422 "dev": true
1423 },
1424 "is-equal-shallow": {
1425 "version": "0.1.3",
1426 "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
1427 "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
1428 "dev": true,
1429 "requires": {
1430 "is-primitive": "2.0.0"
1431 }
1432 },
1433 "is-extendable": {
1434 "version": "0.1.1",
1435 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1436 "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1437 "dev": true
1438 },
1439 "is-extglob": {
1440 "version": "2.1.1",
1441 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1442 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1443 "dev": true
1444 },
1445 "is-fullwidth-code-point": {
1446 "version": "2.0.0",
1447 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1448 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1449 "dev": true
1450 },
1451 "is-glob": {
1452 "version": "3.1.0",
1453 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
1454 "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
1455 "dev": true,
1456 "requires": {
1457 "is-extglob": "2.1.1"
1458 }
1459 },
1460 "is-number": {
1461 "version": "2.1.0",
1462 "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
1463 "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
1464 "dev": true,
1465 "requires": {
1466 "kind-of": "3.2.2"
1467 }
1468 },
1469 "is-obj": {
1470 "version": "1.0.1",
1471 "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
1472 "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
1473 "dev": true
1474 },
1475 "is-posix-bracket": {
1476 "version": "0.1.1",
1477 "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
1478 "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
1479 "dev": true
1480 },
1481 "is-primitive": {
1482 "version": "2.0.0",
1483 "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
1484 "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
1485 "dev": true
1486 },
1487 "is-promise": {
1488 "version": "2.1.0",
1489 "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
1490 "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
1491 "dev": true
1492 },
1493 "is-stream": {
1494 "version": "1.1.0",
1495 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
1496 "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
1497 "dev": true
1498 },
1499 "is-typedarray": {
1500 "version": "1.0.0",
1501 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1502 "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1503 "dev": true
1504 },
1505 "is-utf8": {
1506 "version": "0.2.1",
1507 "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
1508 "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
1509 "dev": true
1510 },
1511 "is-valid-glob": {
1512 "version": "0.3.0",
1513 "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
1514 "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
1515 "dev": true
1516 },
1517 "isarray": {
1518 "version": "1.0.0",
1519 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1520 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1521 "dev": true
1522 },
1523 "isobject": {
1524 "version": "2.1.0",
1525 "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1526 "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1527 "dev": true,
1528 "requires": {
1529 "isarray": "1.0.0"
1530 }
1531 },
1532 "isstream": {
1533 "version": "0.1.2",
1534 "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1535 "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
1536 "dev": true
1537 },
1538 "jsbn": {
1539 "version": "0.1.1",
1540 "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1541 "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
1542 "dev": true,
1543 "optional": true
1544 },
1545 "json-schema": {
1546 "version": "0.2.3",
1547 "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1548 "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
1549 "dev": true
1550 },
1551 "json-schema-traverse": {
1552 "version": "0.3.1",
1553 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
1554 "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
1555 "dev": true
1556 },
1557 "json-stable-stringify": {
1558 "version": "1.0.1",
1559 "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
1560 "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
1561 "dev": true,
1562 "requires": {
1563 "jsonify": "0.0.0"
1564 }
1565 },
1566 "json-stringify-safe": {
1567 "version": "5.0.1",
1568 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1569 "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1570 "dev": true
1571 },
1572 "jsonify": {
1573 "version": "0.0.0",
1574 "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
1575 "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
1576 "dev": true
1577 },
1578 "jsprim": {
1579 "version": "1.4.1",
1580 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1581 "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1582 "dev": true,
1583 "requires": {
1584 "assert-plus": "1.0.0",
1585 "extsprintf": "1.3.0",
1586 "json-schema": "0.2.3",
1587 "verror": "1.10.0"
1588 }
1589 },
1590 "kind-of": {
1591 "version": "3.2.2",
1592 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1593 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1594 "dev": true,
1595 "requires": {
1596 "is-buffer": "1.1.6"
1597 }
1598 },
1599 "lazy-cache": {
1600 "version": "1.0.4",
1601 "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
1602 "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
1603 "dev": true,
1604 "optional": true
1605 },
1606 "lazystream": {
1607 "version": "1.0.0",
1608 "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
1609 "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
1610 "dev": true,
1611 "requires": {
1612 "readable-stream": "2.3.6"
1613 }
1614 },
1615 "linkify-it": {
1616 "version": "2.0.3",
1617 "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
1618 "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
1619 "dev": true,
1620 "requires": {
1621 "uc.micro": "1.0.5"
1622 }
1623 },
1624 "lodash": {
1625 "version": "4.17.10",
1626 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
1627 "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
1628 "dev": true
1629 },
1630 "lodash.isequal": {
1631 "version": "4.5.0",
1632 "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
1633 "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
1634 "dev": true
1635 },
1636 "lodash.padend": {
1637 "version": "4.6.1",
1638 "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
1639 "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
1640 "dev": true
1641 },
1642 "longest": {
1643 "version": "1.0.1",
1644 "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
1645 "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
1646 "dev": true
1647 },
1648 "map-stream": {
1649 "version": "0.1.0",
1650 "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1651 "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
1652 "dev": true
1653 },
1654 "markdown-it": {
1655 "version": "8.4.2",
1656 "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
1657 "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
1658 "dev": true,
1659 "requires": {
1660 "argparse": "1.0.10",
1661 "entities": "1.1.1",
1662 "linkify-it": "2.0.3",
1663 "mdurl": "1.0.1",
1664 "uc.micro": "1.0.5"
1665 }
1666 },
1667 "math-random": {
1668 "version": "1.0.1",
1669 "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
1670 "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
1671 "dev": true
1672 },
1673 "mdurl": {
1674 "version": "1.0.1",
1675 "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
1676 "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
1677 "dev": true
1678 },
1679 "merge-stream": {
1680 "version": "1.0.1",
1681 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
1682 "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
1683 "dev": true,
1684 "requires": {
1685 "readable-stream": "2.3.6"
1686 }
1687 },
1688 "micromatch": {
1689 "version": "2.3.11",
1690 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
1691 "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
1692 "dev": true,
1693 "requires": {
1694 "arr-diff": "2.0.0",
1695 "array-unique": "0.2.1",
1696 "braces": "1.8.5",
1697 "expand-brackets": "0.1.5",
1698 "extglob": "0.3.2",
1699 "filename-regex": "2.0.1",
1700 "is-extglob": "1.0.0",
1701 "is-glob": "2.0.1",
1702 "kind-of": "3.2.2",
1703 "normalize-path": "2.1.1",
1704 "object.omit": "2.0.1",
1705 "parse-glob": "3.0.4",
1706 "regex-cache": "0.4.4"
1707 },
1708 "dependencies": {
1709 "arr-diff": {
1710 "version": "2.0.0",
1711 "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
1712 "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
1713 "dev": true,
1714 "requires": {
1715 "arr-flatten": "1.1.0"
1716 }
1717 },
1718 "is-extglob": {
1719 "version": "1.0.0",
1720 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1721 "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1722 "dev": true
1723 },
1724 "is-glob": {
1725 "version": "2.0.1",
1726 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1727 "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1728 "dev": true,
1729 "requires": {
1730 "is-extglob": "1.0.0"
1731 }
1732 }
1733 }
1734 },
1735 "mime": {
1736 "version": "1.6.0",
1737 "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1738 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1739 "dev": true
1740 },
1741 "mime-db": {
1742 "version": "1.35.0",
1743 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
1744 "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
1745 "dev": true
1746 },
1747 "mime-types": {
1748 "version": "2.1.19",
1749 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
1750 "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
1751 "dev": true,
1752 "requires": {
1753 "mime-db": "1.35.0"
1754 }
1755 },
1756 "mimic-fn": {
1757 "version": "1.2.0",
1758 "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
1759 "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
1760 "dev": true
1761 },
1762 "minimatch": {
1763 "version": "3.0.4",
1764 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1765 "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1766 "dev": true,
1767 "requires": {
1768 "brace-expansion": "1.1.11"
1769 }
1770 },
1771 "minimist": {
1772 "version": "0.0.10",
1773 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
1774 "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
1775 "dev": true
1776 },
1777 "mkdirp": {
1778 "version": "0.5.1",
1779 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1780 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1781 "dev": true,
1782 "requires": {
1783 "minimist": "0.0.8"
1784 },
1785 "dependencies": {
1786 "minimist": {
1787 "version": "0.0.8",
1788 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1789 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1790 "dev": true
1791 }
1792 }
1793 },
1794 "mocha": {
1795 "version": "4.1.0",
1796 "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz",
1797 "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==",
1798 "dev": true,
1799 "requires": {
1800 "browser-stdout": "1.3.0",
1801 "commander": "2.11.0",
1802 "debug": "3.1.0",
1803 "diff": "3.3.1",
1804 "escape-string-regexp": "1.0.5",
1805 "glob": "7.1.2",
1806 "growl": "1.10.3",
1807 "he": "1.1.1",
1808 "mkdirp": "0.5.1",
1809 "supports-color": "4.4.0"
1810 },
1811 "dependencies": {
1812 "commander": {
1813 "version": "2.11.0",
1814 "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
1815 "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
1816 "dev": true
1817 },
1818 "supports-color": {
1819 "version": "4.4.0",
1820 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
1821 "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
1822 "dev": true,
1823 "requires": {
1824 "has-flag": "2.0.0"
1825 }
1826 }
1827 }
1828 },
1829 "ms": {
1830 "version": "2.0.0",
1831 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1832 "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1833 "dev": true
1834 },
1835 "multimatch": {
1836 "version": "2.1.0",
1837 "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
1838 "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
1839 "dev": true,
1840 "requires": {
1841 "array-differ": "1.0.0",
1842 "array-union": "1.0.2",
1843 "arrify": "1.0.1",
1844 "minimatch": "3.0.4"
1845 }
1846 },
1847 "mute-stream": {
1848 "version": "0.0.7",
1849 "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
1850 "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
1851 "dev": true
1852 },
1853 "neon-cli": {
1854 "version": "0.2.0",
1855 "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.2.0.tgz",
1856 "integrity": "sha512-IsrxCyUcuAyWiq4Z+JnTXrjurj2SAL2VtWnCXS8iBYGJeIs1NIhFuLaM6fe7+rOyFfDcqUUTWGxZmkvUqwweRA==",
1857 "dev": true,
1858 "requires": {
1859 "chalk": "2.1.0",
1860 "command-line-args": "4.0.7",
1861 "command-line-commands": "2.0.1",
1862 "command-line-usage": "4.1.0",
1863 "git-config": "0.0.7",
1864 "handlebars": "4.0.11",
1865 "inquirer": "3.3.0",
1866 "mkdirp": "0.5.1",
1867 "quickly-copy-file": "1.0.0",
1868 "rimraf": "2.6.2",
1869 "rsvp": "4.8.3",
1870 "semver": "5.5.0",
1871 "toml": "2.3.3",
1872 "ts-typed-json": "0.2.2",
1873 "validate-npm-package-license": "3.0.3",
1874 "validate-npm-package-name": "3.0.0"
1875 }
1876 },
1877 "node.extend": {
1878 "version": "1.1.6",
1879 "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz",
1880 "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=",
1881 "dev": true,
1882 "requires": {
1883 "is": "3.2.1"
1884 }
1885 },
1886 "normalize-path": {
1887 "version": "2.1.1",
1888 "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1889 "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1890 "dev": true,
1891 "requires": {
1892 "remove-trailing-separator": "1.1.0"
1893 }
1894 },
1895 "nth-check": {
1896 "version": "1.0.1",
1897 "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
1898 "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
1899 "dev": true,
1900 "requires": {
1901 "boolbase": "1.0.0"
1902 }
1903 },
1904 "oauth-sign": {
1905 "version": "0.8.2",
1906 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
1907 "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
1908 "dev": true
1909 },
1910 "object-assign": {
1911 "version": "4.1.1",
1912 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1913 "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1914 "dev": true
1915 },
1916 "object.omit": {
1917 "version": "2.0.1",
1918 "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
1919 "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
1920 "dev": true,
1921 "requires": {
1922 "for-own": "0.1.5",
1923 "is-extendable": "0.1.1"
1924 }
1925 },
1926 "once": {
1927 "version": "1.4.0",
1928 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1929 "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1930 "dev": true,
1931 "requires": {
1932 "wrappy": "1.0.2"
1933 }
1934 },
1935 "onetime": {
1936 "version": "2.0.1",
1937 "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
1938 "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
1939 "dev": true,
1940 "requires": {
1941 "mimic-fn": "1.2.0"
1942 }
1943 },
1944 "optimist": {
1945 "version": "0.6.1",
1946 "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1947 "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1948 "dev": true,
1949 "requires": {
1950 "minimist": "0.0.10",
1951 "wordwrap": "0.0.3"
1952 }
1953 },
1954 "ordered-read-streams": {
1955 "version": "0.3.0",
1956 "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
1957 "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
1958 "dev": true,
1959 "requires": {
1960 "is-stream": "1.1.0",
1961 "readable-stream": "2.3.6"
1962 }
1963 },
1964 "os-homedir": {
1965 "version": "1.0.2",
1966 "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1967 "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1968 "dev": true
1969 },
1970 "os-tmpdir": {
1971 "version": "1.0.2",
1972 "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1973 "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1974 "dev": true
1975 },
1976 "osenv": {
1977 "version": "0.1.5",
1978 "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
1979 "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
1980 "dev": true,
1981 "requires": {
1982 "os-homedir": "1.0.2",
1983 "os-tmpdir": "1.0.2"
1984 }
1985 },
1986 "parse-glob": {
1987 "version": "3.0.4",
1988 "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
1989 "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
1990 "dev": true,
1991 "requires": {
1992 "glob-base": "0.3.0",
1993 "is-dotfile": "1.0.3",
1994 "is-extglob": "1.0.0",
1995 "is-glob": "2.0.1"
1996 },
1997 "dependencies": {
1998 "is-extglob": {
1999 "version": "1.0.0",
2000 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
2001 "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
2002 "dev": true
2003 },
2004 "is-glob": {
2005 "version": "2.0.1",
2006 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
2007 "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
2008 "dev": true,
2009 "requires": {
2010 "is-extglob": "1.0.0"
2011 }
2012 }
2013 }
2014 },
2015 "parse-semver": {
2016 "version": "1.1.1",
2017 "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
2018 "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=",
2019 "dev": true,
2020 "requires": {
2021 "semver": "5.5.0"
2022 }
2023 },
2024 "parse5": {
2025 "version": "3.0.3",
2026 "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
2027 "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
2028 "dev": true,
2029 "requires": {
2030 "@types/node": "6.0.114"
2031 }
2032 },
2033 "path-dirname": {
2034 "version": "1.0.2",
2035 "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
2036 "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
2037 "dev": true
2038 },
2039 "path-is-absolute": {
2040 "version": "1.0.1",
2041 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2042 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2043 "dev": true
2044 },
2045 "pause-stream": {
2046 "version": "0.0.11",
2047 "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
2048 "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
2049 "dev": true,
2050 "requires": {
2051 "through": "2.3.8"
2052 }
2053 },
2054 "pend": {
2055 "version": "1.2.0",
2056 "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
2057 "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
2058 "dev": true
2059 },
2060 "performance-now": {
2061 "version": "2.1.0",
2062 "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2063 "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
2064 "dev": true
2065 },
2066 "plugin-error": {
2067 "version": "0.1.2",
2068 "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
2069 "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
2070 "dev": true,
2071 "requires": {
2072 "ansi-cyan": "0.1.1",
2073 "ansi-red": "0.1.1",
2074 "arr-diff": "1.1.0",
2075 "arr-union": "2.1.0",
2076 "extend-shallow": "1.1.4"
2077 }
2078 },
2079 "preserve": {
2080 "version": "0.2.0",
2081 "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
2082 "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
2083 "dev": true
2084 },
2085 "process-nextick-args": {
2086 "version": "2.0.0",
2087 "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
2088 "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
2089 "dev": true
2090 },
2091 "punycode": {
2092 "version": "1.4.1",
2093 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
2094 "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
2095 "dev": true
2096 },
2097 "q": {
2098 "version": "1.5.1",
2099 "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
2100 "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
2101 "dev": true
2102 },
2103 "qs": {
2104 "version": "6.5.2",
2105 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
2106 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
2107 "dev": true
2108 },
2109 "querystringify": {
2110 "version": "2.0.0",
2111 "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz",
2112 "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==",
2113 "dev": true
2114 },
2115 "queue": {
2116 "version": "3.1.0",
2117 "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz",
2118 "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=",
2119 "dev": true,
2120 "requires": {
2121 "inherits": "2.0.3"
2122 }
2123 },
2124 "quickly-copy-file": {
2125 "version": "1.0.0",
2126 "resolved": "https://registry.npmjs.org/quickly-copy-file/-/quickly-copy-file-1.0.0.tgz",
2127 "integrity": "sha1-n4/wZiMFEO50IrASFHKwk6hpCFk=",
2128 "dev": true,
2129 "requires": {
2130 "mkdirp": "0.5.1"
2131 }
2132 },
2133 "randomatic": {
2134 "version": "3.0.0",
2135 "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
2136 "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
2137 "dev": true,
2138 "requires": {
2139 "is-number": "4.0.0",
2140 "kind-of": "6.0.2",
2141 "math-random": "1.0.1"
2142 },
2143 "dependencies": {
2144 "is-number": {
2145 "version": "4.0.0",
2146 "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
2147 "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
2148 "dev": true
2149 },
2150 "kind-of": {
2151 "version": "6.0.2",
2152 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
2153 "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
2154 "dev": true
2155 }
2156 }
2157 },
2158 "read": {
2159 "version": "1.0.7",
2160 "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
2161 "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
2162 "dev": true,
2163 "requires": {
2164 "mute-stream": "0.0.7"
2165 }
2166 },
2167 "readable-stream": {
2168 "version": "2.3.6",
2169 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2170 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2171 "dev": true,
2172 "requires": {
2173 "core-util-is": "1.0.2",
2174 "inherits": "2.0.3",
2175 "isarray": "1.0.0",
2176 "process-nextick-args": "2.0.0",
2177 "safe-buffer": "5.1.2",
2178 "string_decoder": "1.1.1",
2179 "util-deprecate": "1.0.2"
2180 }
2181 },
2182 "reduce-flatten": {
2183 "version": "1.0.1",
2184 "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
2185 "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
2186 "dev": true
2187 },
2188 "regex-cache": {
2189 "version": "0.4.4",
2190 "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
2191 "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
2192 "dev": true,
2193 "requires": {
2194 "is-equal-shallow": "0.1.3"
2195 }
2196 },
2197 "remove-trailing-separator": {
2198 "version": "1.1.0",
2199 "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
2200 "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
2201 "dev": true
2202 },
2203 "repeat-element": {
2204 "version": "1.1.2",
2205 "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
2206 "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
2207 "dev": true
2208 },
2209 "repeat-string": {
2210 "version": "1.6.1",
2211 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2212 "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
2213 "dev": true
2214 },
2215 "replace-ext": {
2216 "version": "1.0.0",
2217 "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
2218 "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
2219 "dev": true
2220 },
2221 "request": {
2222 "version": "2.87.0",
2223 "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
2224 "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
2225 "dev": true,
2226 "requires": {
2227 "aws-sign2": "0.7.0",
2228 "aws4": "1.7.0",
2229 "caseless": "0.12.0",
2230 "combined-stream": "1.0.6",
2231 "extend": "3.0.2",
2232 "forever-agent": "0.6.1",
2233 "form-data": "2.3.2",
2234 "har-validator": "5.0.3",
2235 "http-signature": "1.2.0",
2236 "is-typedarray": "1.0.0",
2237 "isstream": "0.1.2",
2238 "json-stringify-safe": "5.0.1",
2239 "mime-types": "2.1.19",
2240 "oauth-sign": "0.8.2",
2241 "performance-now": "2.1.0",
2242 "qs": "6.5.2",
2243 "safe-buffer": "5.1.2",
2244 "tough-cookie": "2.3.4",
2245 "tunnel-agent": "0.6.0",
2246 "uuid": "3.3.2"
2247 }
2248 },
2249 "requires-port": {
2250 "version": "1.0.0",
2251 "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
2252 "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
2253 "dev": true
2254 },
2255 "restore-cursor": {
2256 "version": "2.0.0",
2257 "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
2258 "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
2259 "dev": true,
2260 "requires": {
2261 "onetime": "2.0.1",
2262 "signal-exit": "3.0.2"
2263 }
2264 },
2265 "right-align": {
2266 "version": "0.1.3",
2267 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
2268 "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
2269 "dev": true,
2270 "optional": true,
2271 "requires": {
2272 "align-text": "0.1.4"
2273 }
2274 },
2275 "rimraf": {
2276 "version": "2.6.2",
2277 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
2278 "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
2279 "dev": true,
2280 "requires": {
2281 "glob": "7.1.2"
2282 }
2283 },
2284 "rsvp": {
2285 "version": "4.8.3",
2286 "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.3.tgz",
2287 "integrity": "sha512-/OlbK31XtkPnLD2ktmZXj4g/v6q1boTDr6/3lFuDTgxVsrA3h7PH5eYyAxIvDMjRHr/DoOlzNicqDwBEo9xU7g==",
2288 "dev": true
2289 },
2290 "run-async": {
2291 "version": "2.3.0",
2292 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
2293 "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
2294 "dev": true,
2295 "requires": {
2296 "is-promise": "2.1.0"
2297 }
2298 },
2299 "rx-lite": {
2300 "version": "4.0.8",
2301 "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
2302 "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
2303 "dev": true
2304 },
2305 "rx-lite-aggregates": {
2306 "version": "4.0.8",
2307 "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
2308 "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
2309 "dev": true,
2310 "requires": {
2311 "rx-lite": "4.0.8"
2312 }
2313 },
2314 "safe-buffer": {
2315 "version": "5.1.2",
2316 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2317 "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2318 "dev": true
2319 },
2320 "safer-buffer": {
2321 "version": "2.1.2",
2322 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2323 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2324 "dev": true
2325 },
2326 "semver": {
2327 "version": "5.5.0",
2328 "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
2329 "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
2330 "dev": true
2331 },
2332 "signal-exit": {
2333 "version": "3.0.2",
2334 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
2335 "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2336 "dev": true
2337 },
2338 "source-map": {
2339 "version": "0.4.4",
2340 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
2341 "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
2342 "dev": true,
2343 "requires": {
2344 "amdefine": "1.0.1"
2345 }
2346 },
2347 "source-map-support": {
2348 "version": "0.5.6",
2349 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz",
2350 "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==",
2351 "dev": true,
2352 "requires": {
2353 "buffer-from": "1.1.0",
2354 "source-map": "0.6.1"
2355 },
2356 "dependencies": {
2357 "source-map": {
2358 "version": "0.6.1",
2359 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2360 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2361 "dev": true
2362 }
2363 }
2364 },
2365 "spdx-correct": {
2366 "version": "3.0.0",
2367 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
2368 "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
2369 "dev": true,
2370 "requires": {
2371 "spdx-expression-parse": "3.0.0",
2372 "spdx-license-ids": "3.0.0"
2373 }
2374 },
2375 "spdx-exceptions": {
2376 "version": "2.1.0",
2377 "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
2378 "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
2379 "dev": true
2380 },
2381 "spdx-expression-parse": {
2382 "version": "3.0.0",
2383 "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
2384 "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
2385 "dev": true,
2386 "requires": {
2387 "spdx-exceptions": "2.1.0",
2388 "spdx-license-ids": "3.0.0"
2389 }
2390 },
2391 "spdx-license-ids": {
2392 "version": "3.0.0",
2393 "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
2394 "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
2395 "dev": true
2396 },
2397 "split": {
2398 "version": "0.3.3",
2399 "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
2400 "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
2401 "dev": true,
2402 "requires": {
2403 "through": "2.3.8"
2404 }
2405 },
2406 "sprintf-js": {
2407 "version": "1.0.3",
2408 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2409 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2410 "dev": true
2411 },
2412 "sshpk": {
2413 "version": "1.14.2",
2414 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
2415 "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
2416 "dev": true,
2417 "requires": {
2418 "asn1": "0.2.3",
2419 "assert-plus": "1.0.0",
2420 "bcrypt-pbkdf": "1.0.2",
2421 "dashdash": "1.14.1",
2422 "ecc-jsbn": "0.1.2",
2423 "getpass": "0.1.7",
2424 "jsbn": "0.1.1",
2425 "safer-buffer": "2.1.2",
2426 "tweetnacl": "0.14.5"
2427 }
2428 },
2429 "stat-mode": {
2430 "version": "0.2.2",
2431 "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
2432 "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
2433 "dev": true
2434 },
2435 "stream-combiner": {
2436 "version": "0.0.4",
2437 "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
2438 "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
2439 "dev": true,
2440 "requires": {
2441 "duplexer": "0.1.1"
2442 }
2443 },
2444 "stream-shift": {
2445 "version": "1.0.0",
2446 "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
2447 "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
2448 "dev": true
2449 },
2450 "streamfilter": {
2451 "version": "1.0.7",
2452 "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz",
2453 "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==",
2454 "dev": true,
2455 "requires": {
2456 "readable-stream": "2.3.6"
2457 }
2458 },
2459 "streamifier": {
2460 "version": "0.1.1",
2461 "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz",
2462 "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=",
2463 "dev": true
2464 },
2465 "string-width": {
2466 "version": "2.1.1",
2467 "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
2468 "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
2469 "dev": true,
2470 "requires": {
2471 "is-fullwidth-code-point": "2.0.0",
2472 "strip-ansi": "4.0.0"
2473 }
2474 },
2475 "string_decoder": {
2476 "version": "1.1.1",
2477 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2478 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2479 "dev": true,
2480 "requires": {
2481 "safe-buffer": "5.1.2"
2482 }
2483 },
2484 "strip-ansi": {
2485 "version": "4.0.0",
2486 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
2487 "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
2488 "dev": true,
2489 "requires": {
2490 "ansi-regex": "3.0.0"
2491 }
2492 },
2493 "strip-bom": {
2494 "version": "2.0.0",
2495 "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
2496 "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
2497 "dev": true,
2498 "requires": {
2499 "is-utf8": "0.2.1"
2500 }
2501 },
2502 "strip-bom-stream": {
2503 "version": "1.0.0",
2504 "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
2505 "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
2506 "dev": true,
2507 "requires": {
2508 "first-chunk-stream": "1.0.0",
2509 "strip-bom": "2.0.0"
2510 }
2511 },
2512 "supports-color": {
2513 "version": "4.5.0",
2514 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
2515 "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
2516 "dev": true,
2517 "requires": {
2518 "has-flag": "2.0.0"
2519 }
2520 },
2521 "table-layout": {
2522 "version": "0.4.4",
2523 "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz",
2524 "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==",
2525 "dev": true,
2526 "requires": {
2527 "array-back": "2.0.0",
2528 "deep-extend": "0.6.0",
2529 "lodash.padend": "4.6.1",
2530 "typical": "2.6.1",
2531 "wordwrapjs": "3.0.0"
2532 }
2533 },
2534 "tar": {
2535 "version": "2.2.1",
2536 "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
2537 "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
2538 "dev": true,
2539 "requires": {
2540 "block-stream": "0.0.9",
2541 "fstream": "1.0.11",
2542 "inherits": "2.0.3"
2543 }
2544 },
2545 "test-value": {
2546 "version": "2.1.0",
2547 "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
2548 "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
2549 "dev": true,
2550 "requires": {
2551 "array-back": "1.0.4",
2552 "typical": "2.6.1"
2553 },
2554 "dependencies": {
2555 "array-back": {
2556 "version": "1.0.4",
2557 "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
2558 "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
2559 "dev": true,
2560 "requires": {
2561 "typical": "2.6.1"
2562 }
2563 }
2564 }
2565 },
2566 "through": {
2567 "version": "2.3.8",
2568 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2569 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2570 "dev": true
2571 },
2572 "through2": {
2573 "version": "2.0.3",
2574 "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2575 "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2576 "dev": true,
2577 "requires": {
2578 "readable-stream": "2.3.6",
2579 "xtend": "4.0.1"
2580 }
2581 },
2582 "through2-filter": {
2583 "version": "2.0.0",
2584 "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
2585 "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
2586 "dev": true,
2587 "requires": {
2588 "through2": "2.0.3",
2589 "xtend": "4.0.1"
2590 }
2591 },
2592 "tmp": {
2593 "version": "0.0.33",
2594 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2595 "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2596 "dev": true,
2597 "requires": {
2598 "os-tmpdir": "1.0.2"
2599 }
2600 },
2601 "to-absolute-glob": {
2602 "version": "0.1.1",
2603 "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
2604 "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
2605 "dev": true,
2606 "requires": {
2607 "extend-shallow": "2.0.1"
2608 },
2609 "dependencies": {
2610 "extend-shallow": {
2611 "version": "2.0.1",
2612 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
2613 "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
2614 "dev": true,
2615 "requires": {
2616 "is-extendable": "0.1.1"
2617 }
2618 }
2619 }
2620 },
2621 "toml": {
2622 "version": "2.3.3",
2623 "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.3.tgz",
2624 "integrity": "sha512-O7L5hhSQHxuufWUdcTRPfuTh3phKfAZ/dqfxZFoxPCj2RYmpaSGLEIs016FCXItQwNr08yefUB5TSjzRYnajTA==",
2625 "dev": true
2626 },
2627 "tough-cookie": {
2628 "version": "2.3.4",
2629 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
2630 "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
2631 "dev": true,
2632 "requires": {
2633 "punycode": "1.4.1"
2634 }
2635 },
2636 "ts-typed-json": {
2637 "version": "0.2.2",
2638 "resolved": "https://registry.npmjs.org/ts-typed-json/-/ts-typed-json-0.2.2.tgz",
2639 "integrity": "sha1-UxhL7ok+RZkbc8jEY6OLWeJ81H4=",
2640 "dev": true,
2641 "requires": {
2642 "rsvp": "3.6.2"
2643 },
2644 "dependencies": {
2645 "rsvp": {
2646 "version": "3.6.2",
2647 "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
2648 "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
2649 "dev": true
2650 }
2651 }
2652 },
2653 "tunnel": {
2654 "version": "0.0.4",
2655 "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
2656 "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=",
2657 "dev": true
2658 },
2659 "tunnel-agent": {
2660 "version": "0.6.0",
2661 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
2662 "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
2663 "dev": true,
2664 "requires": {
2665 "safe-buffer": "5.1.2"
2666 }
2667 },
2668 "tweetnacl": {
2669 "version": "0.14.5",
2670 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
2671 "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
2672 "dev": true,
2673 "optional": true
2674 },
2675 "typed-rest-client": {
2676 "version": "0.9.0",
2677 "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz",
2678 "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=",
2679 "dev": true,
2680 "requires": {
2681 "tunnel": "0.0.4",
2682 "underscore": "1.8.3"
2683 },
2684 "dependencies": {
2685 "underscore": {
2686 "version": "1.8.3",
2687 "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
2688 "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
2689 "dev": true
2690 }
2691 }
2692 },
2693 "typescript": {
2694 "version": "2.9.2",
2695 "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
2696 "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
2697 "dev": true
2698 },
2699 "typical": {
2700 "version": "2.6.1",
2701 "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
2702 "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
2703 "dev": true
2704 },
2705 "uc.micro": {
2706 "version": "1.0.5",
2707 "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz",
2708 "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==",
2709 "dev": true
2710 },
2711 "uglify-js": {
2712 "version": "2.8.29",
2713 "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
2714 "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
2715 "dev": true,
2716 "optional": true,
2717 "requires": {
2718 "source-map": "0.5.7",
2719 "uglify-to-browserify": "1.0.2",
2720 "yargs": "3.10.0"
2721 },
2722 "dependencies": {
2723 "source-map": {
2724 "version": "0.5.7",
2725 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2726 "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2727 "dev": true,
2728 "optional": true
2729 }
2730 }
2731 },
2732 "uglify-to-browserify": {
2733 "version": "1.0.2",
2734 "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
2735 "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
2736 "dev": true,
2737 "optional": true
2738 },
2739 "underscore": {
2740 "version": "1.9.1",
2741 "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
2742 "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
2743 "dev": true
2744 },
2745 "unique-stream": {
2746 "version": "2.2.1",
2747 "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
2748 "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
2749 "dev": true,
2750 "requires": {
2751 "json-stable-stringify": "1.0.1",
2752 "through2-filter": "2.0.0"
2753 }
2754 },
2755 "url-join": {
2756 "version": "1.1.0",
2757 "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz",
2758 "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=",
2759 "dev": true
2760 },
2761 "url-parse": {
2762 "version": "1.4.3",
2763 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz",
2764 "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==",
2765 "dev": true,
2766 "requires": {
2767 "querystringify": "2.0.0",
2768 "requires-port": "1.0.0"
2769 }
2770 },
2771 "util-deprecate": {
2772 "version": "1.0.2",
2773 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2774 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2775 "dev": true
2776 },
2777 "uuid": {
2778 "version": "3.3.2",
2779 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
2780 "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
2781 "dev": true
2782 },
2783 "vali-date": {
2784 "version": "1.0.0",
2785 "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
2786 "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
2787 "dev": true
2788 },
2789 "validate-npm-package-license": {
2790 "version": "3.0.3",
2791 "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
2792 "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
2793 "dev": true,
2794 "requires": {
2795 "spdx-correct": "3.0.0",
2796 "spdx-expression-parse": "3.0.0"
2797 }
2798 },
2799 "validate-npm-package-name": {
2800 "version": "3.0.0",
2801 "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz",
2802 "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=",
2803 "dev": true,
2804 "requires": {
2805 "builtins": "1.0.3"
2806 }
2807 },
2808 "verror": {
2809 "version": "1.10.0",
2810 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
2811 "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
2812 "dev": true,
2813 "requires": {
2814 "assert-plus": "1.0.0",
2815 "core-util-is": "1.0.2",
2816 "extsprintf": "1.3.0"
2817 }
2818 },
2819 "vinyl": {
2820 "version": "0.4.6",
2821 "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
2822 "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
2823 "dev": true,
2824 "requires": {
2825 "clone": "0.2.0",
2826 "clone-stats": "0.0.1"
2827 }
2828 },
2829 "vinyl-fs": {
2830 "version": "2.4.4",
2831 "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
2832 "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
2833 "dev": true,
2834 "requires": {
2835 "duplexify": "3.6.0",
2836 "glob-stream": "5.3.5",
2837 "graceful-fs": "4.1.11",
2838 "gulp-sourcemaps": "1.6.0",
2839 "is-valid-glob": "0.3.0",
2840 "lazystream": "1.0.0",
2841 "lodash.isequal": "4.5.0",
2842 "merge-stream": "1.0.1",
2843 "mkdirp": "0.5.1",
2844 "object-assign": "4.1.1",
2845 "readable-stream": "2.3.6",
2846 "strip-bom": "2.0.0",
2847 "strip-bom-stream": "1.0.0",
2848 "through2": "2.0.3",
2849 "through2-filter": "2.0.0",
2850 "vali-date": "1.0.0",
2851 "vinyl": "1.2.0"
2852 },
2853 "dependencies": {
2854 "clone": {
2855 "version": "1.0.4",
2856 "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
2857 "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
2858 "dev": true
2859 },
2860 "replace-ext": {
2861 "version": "0.0.1",
2862 "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
2863 "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
2864 "dev": true
2865 },
2866 "vinyl": {
2867 "version": "1.2.0",
2868 "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
2869 "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
2870 "dev": true,
2871 "requires": {
2872 "clone": "1.0.4",
2873 "clone-stats": "0.0.1",
2874 "replace-ext": "0.0.1"
2875 }
2876 }
2877 }
2878 },
2879 "vinyl-source-stream": {
2880 "version": "1.1.2",
2881 "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz",
2882 "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=",
2883 "dev": true,
2884 "requires": {
2885 "through2": "2.0.3",
2886 "vinyl": "0.4.6"
2887 }
2888 },
2889 "vsce": {
2890 "version": "1.44.0",
2891 "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.44.0.tgz",
2892 "integrity": "sha512-JK8jLwXgfcxo9aNBKBLNbCF4tEOiB8QdhVaXaGiqpadXLgqKBRNsq24KUzBYlmqZEIq0kdW5n2CtXLBozVPCrg==",
2893 "dev": true,
2894 "requires": {
2895 "cheerio": "1.0.0-rc.2",
2896 "commander": "2.16.0",
2897 "denodeify": "1.2.1",
2898 "glob": "7.1.2",
2899 "lodash": "4.17.10",
2900 "markdown-it": "8.4.2",
2901 "mime": "1.6.0",
2902 "minimatch": "3.0.4",
2903 "osenv": "0.1.5",
2904 "parse-semver": "1.1.1",
2905 "read": "1.0.7",
2906 "semver": "5.5.0",
2907 "tmp": "0.0.29",
2908 "url-join": "1.1.0",
2909 "vso-node-api": "6.1.2-preview",
2910 "yauzl": "2.10.0",
2911 "yazl": "2.4.3"
2912 },
2913 "dependencies": {
2914 "tmp": {
2915 "version": "0.0.29",
2916 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
2917 "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
2918 "dev": true,
2919 "requires": {
2920 "os-tmpdir": "1.0.2"
2921 }
2922 }
2923 }
2924 },
2925 "vscode": {
2926 "version": "1.1.18",
2927 "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.18.tgz",
2928 "integrity": "sha512-SyDw4qFwZ+WthZX7RWp71PNiWLF7VhpM65j2oryY/6jtSORd8qH6J8vclwWZJ6Jvu0EH7JamO2RWNfBfsMR9Zw==",
2929 "dev": true,
2930 "requires": {
2931 "glob": "7.1.2",
2932 "gulp-chmod": "2.0.0",
2933 "gulp-filter": "5.1.0",
2934 "gulp-gunzip": "1.0.0",
2935 "gulp-remote-src-vscode": "0.5.0",
2936 "gulp-symdest": "1.1.0",
2937 "gulp-untar": "0.0.7",
2938 "gulp-vinyl-zip": "2.1.0",
2939 "mocha": "4.1.0",
2940 "request": "2.87.0",
2941 "semver": "5.5.0",
2942 "source-map-support": "0.5.6",
2943 "url-parse": "1.4.3",
2944 "vinyl-source-stream": "1.1.2"
2945 }
2946 },
2947 "vso-node-api": {
2948 "version": "6.1.2-preview",
2949 "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz",
2950 "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=",
2951 "dev": true,
2952 "requires": {
2953 "q": "1.5.1",
2954 "tunnel": "0.0.4",
2955 "typed-rest-client": "0.9.0",
2956 "underscore": "1.9.1"
2957 }
2958 },
2959 "window-size": {
2960 "version": "0.1.0",
2961 "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
2962 "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
2963 "dev": true,
2964 "optional": true
2965 },
2966 "wordwrap": {
2967 "version": "0.0.3",
2968 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
2969 "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
2970 "dev": true
2971 },
2972 "wordwrapjs": {
2973 "version": "3.0.0",
2974 "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
2975 "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
2976 "dev": true,
2977 "requires": {
2978 "reduce-flatten": "1.0.1",
2979 "typical": "2.6.1"
2980 }
2981 },
2982 "wrappy": {
2983 "version": "1.0.2",
2984 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2985 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2986 "dev": true
2987 },
2988 "xtend": {
2989 "version": "4.0.1",
2990 "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
2991 "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2992 "dev": true
2993 },
2994 "yargs": {
2995 "version": "3.10.0",
2996 "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
2997 "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
2998 "dev": true,
2999 "optional": true,
3000 "requires": {
3001 "camelcase": "1.2.1",
3002 "cliui": "2.1.0",
3003 "decamelize": "1.2.0",
3004 "window-size": "0.1.0"
3005 }
3006 },
3007 "yauzl": {
3008 "version": "2.10.0",
3009 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
3010 "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
3011 "dev": true,
3012 "requires": {
3013 "buffer-crc32": "0.2.13",
3014 "fd-slicer": "1.1.0"
3015 }
3016 },
3017 "yazl": {
3018 "version": "2.4.3",
3019 "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz",
3020 "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=",
3021 "dev": true,
3022 "requires": {
3023 "buffer-crc32": "0.2.13"
3024 }
3025 }
3026 }
3027}
diff --git a/code/package.json b/code/package.json
new file mode 100644
index 000000000..2f97bb5c0
--- /dev/null
+++ b/code/package.json
@@ -0,0 +1,52 @@
1{
2 "name": "libsyntax-rust",
3 "displayName": "libsyntax-rust",
4 "description": "An experimental Rust plugin for VS Code based on libsyntax2",
5 "license": "MIT",
6 "repository": "http://github.com/matklad/libsyntax2/",
7 "version": "0.0.1",
8 "publisher": "matklad",
9 "engines": {
10 "vscode": "^1.18.0"
11 },
12 "devDependencies": {
13 "@types/node": "^6.0.112",
14 "neon-cli": "^0.2.0",
15 "typescript": "^2.9.1",
16 "vsce": "^1.42.0",
17 "vscode": "^1.1.18"
18 },
19 "scripts": {
20 "vscode:prepublish": "tsc -p ./",
21 "compile": "tsc -watch -p ./",
22 "install": "neon build",
23 "postinstall": "node ./node_modules/vscode/bin/install"
24 },
25 "main": "./out/src/main",
26 "contributes": {
27 "languages": [
28 {
29 "id": "rust",
30 "extensions": [
31 ".rs"
32 ]
33 }
34 ],
35 "commands": [
36 {
37 "command": "libsyntax-rust.syntaxTree",
38 "title": "Show Rust syntax tree"
39 }
40 ],
41 "keybindings": [
42 {
43 "command": "libsyntax-rust.semanticSelection",
44 "key": "ctrl+w",
45 "when": "editorTextFocus && editorLangId == rust"
46 }
47 ]
48 },
49 "activationEvents": [
50 "onLanguage:rust"
51 ]
52}
diff --git a/code/src/main.ts b/code/src/main.ts
new file mode 100644
index 000000000..dfb005c09
--- /dev/null
+++ b/code/src/main.ts
@@ -0,0 +1,193 @@
1'use strict'
2import * as vscode from 'vscode'
3
4const backend = require("../../native")
5
6let docToSyntax;
7
8let uris = {
9 syntaxTree: vscode.Uri.parse('libsyntax-rust://syntaxtree')
10}
11
12
13export function activate(context: vscode.ExtensionContext) {
14 let textDocumentContentProvider = new TextDocumentContentProvider()
15
16 let dispose = (disposable) => {
17 context.subscriptions.push(disposable);
18 }
19
20 let registerCommand = (name, f) => {
21 dispose(vscode.commands.registerCommand(name, f))
22 }
23
24 docToSyntax = documentToFile(context.subscriptions, () => {
25 let emitter = textDocumentContentProvider.eventEmitter
26 emitter.fire(uris.syntaxTree)
27 let syntax = activeSyntax()
28 console.log(syntax.highlight());
29 setHighlights(vscode.window.activeTextEditor, syntax.highlight())
30 })
31
32
33 dispose(vscode.workspace.registerTextDocumentContentProvider(
34 'libsyntax-rust',
35 textDocumentContentProvider
36 ))
37
38 registerCommand('libsyntax-rust.syntaxTree', () => openDoc(uris.syntaxTree))
39}
40
41export function deactivate() { }
42
43export class Syntax {
44 imp;
45 doc: vscode.TextDocument;
46
47 constructor(imp, doc: vscode.TextDocument) {
48 this.imp = imp
49 this.doc = doc
50 }
51
52 syntaxTree(): string { return this.imp.syntaxTree() }
53 highlight(): Array<[number, number, string]> { return this.imp.highlight() }
54}
55
56
57function activeDoc() {
58 return vscode.window.activeTextEditor.document
59}
60
61function activeSyntax(): Syntax {
62 let doc = activeDoc()
63 if (doc == null) return null
64 return docToSyntax(doc)
65}
66
67async function openDoc(uri: vscode.Uri) {
68 let document = await vscode.workspace.openTextDocument(uri)
69 return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true)
70}
71
72function documentToFile(disposables: vscode.Disposable[], onChange) {
73 let docs = {}
74 function update(doc: vscode.TextDocument, file) {
75 let key = doc.uri.toString()
76 if (file == null) {
77 delete docs[key]
78 } else {
79 docs[key] = file
80 }
81 onChange(doc)
82 }
83 function get(doc: vscode.TextDocument) {
84 return docs[doc.uri.toString()]
85 }
86
87 function isKnownDoc(doc: vscode.TextDocument) {
88 return doc.fileName.endsWith('.rs')
89 }
90
91 function createFile(text: String) {
92 return new backend.RustFile(text)
93 }
94
95 vscode.workspace.onDidChangeTextDocument((event: vscode.TextDocumentChangeEvent) => {
96 let doc = event.document
97 if (!isKnownDoc(event.document)) return
98 update(doc, null)
99 }, null, disposables)
100
101 vscode.workspace.onDidOpenTextDocument((doc: vscode.TextDocument) => {
102 if (!isKnownDoc(doc)) return
103 update(doc, createFile(doc.getText()))
104 }, null, disposables)
105
106 vscode.workspace.onDidCloseTextDocument((doc: vscode.TextDocument) => {
107 update(doc, null)
108 }, null, disposables)
109
110 return (doc: vscode.TextDocument) => {
111 if (!isKnownDoc(doc)) return null
112
113 if (!get(doc)) {
114 update(doc, createFile(doc.getText()))
115 }
116 let imp = get(doc)
117 return new Syntax(imp, doc)
118 }
119}
120
121export class TextDocumentContentProvider implements vscode.TextDocumentContentProvider {
122 public eventEmitter = new vscode.EventEmitter<vscode.Uri>()
123 public syntaxTree: string = "Not available"
124
125 public provideTextDocumentContent(uri: vscode.Uri): vscode.ProviderResult<string> {
126 let syntax = activeSyntax()
127 if (syntax == null) return
128 if (uri.toString() == uris.syntaxTree.toString()) {
129 return syntax.syntaxTree()
130 }
131 }
132
133 get onDidChange(): vscode.Event<vscode.Uri> {
134 return this.eventEmitter.event
135 }
136}
137
138const decorations = (() => {
139 const decor = (obj) => vscode.window.createTextEditorDecorationType({ color: obj })
140 return {
141 background: decor("#3F3F3F"),
142 error: vscode.window.createTextEditorDecorationType({
143 borderColor: "red",
144 borderStyle: "none none dashed none",
145 }),
146 comment: decor("#7F9F7F"),
147 string: decor("#CC9393"),
148 keyword: decor("#F0DFAF"),
149 function: decor("#93E0E3"),
150 parameter: decor("#94BFF3"),
151 builtin: decor("#DD6718"),
152 text: decor("#DCDCCC"),
153 attribute: decor("#BFEBBF"),
154 literal: decor("#DFAF8F"),
155 }
156})()
157
158function setHighlights(
159 editor: vscode.TextEditor,
160 highlihgs: Array<[number, number, string]>
161) {
162 console.log("setHighlight");
163 let byTag = {}
164 for (let tag in decorations) {
165 byTag[tag] = []
166 }
167
168 for (let [start, end, tag] of highlihgs) {
169 if (!byTag[tag]) {
170 console.log(`unknown tag ${tag}`)
171 continue
172 }
173 let range = toVsRange(editor.document, [start, end])
174 byTag[tag].push(range)
175 }
176
177 for (let tag in byTag) {
178 let dec = decorations[tag]
179 let ranges = byTag[tag]
180 editor.setDecorations(dec, ranges)
181 }
182}
183
184export function toVsRange(doc: vscode.TextDocument, range: [number, number]): vscode.Range {
185 return new vscode.Range(
186 doc.positionAt(range[0]),
187 doc.positionAt(range[1]),
188 )
189}
190
191function fromVsRange(doc: vscode.TextDocument, range: vscode.Range): [number, number] {
192 return [doc.offsetAt(range.start), doc.offsetAt(range.end)]
193}
diff --git a/code/tsconfig.json b/code/tsconfig.json
new file mode 100644
index 000000000..053bd1c70
--- /dev/null
+++ b/code/tsconfig.json
@@ -0,0 +1,11 @@
1{
2 "compilerOptions": {
3 "module": "commonjs",
4 "target": "es6",
5 "outDir": "out",
6 "lib": [ "es6" ],
7 "sourceMap": true,
8 "rootDir": "."
9 },
10 "include": [ "src/*.ts" ]
11} \ No newline at end of file
diff --git a/src/ast.rs b/src/ast.rs
new file mode 100644
index 000000000..3a9287466
--- /dev/null
+++ b/src/ast.rs
@@ -0,0 +1,30 @@
1use std::sync::Arc;
2use {SyntaxNode, TreeRoot, SyntaxRoot, SyntaxNodeRef};
3
4#[derive(Debug)]
5pub struct File<R: TreeRoot = Arc<SyntaxRoot>> {
6 syntax: SyntaxNode<R>
7}
8
9impl File<Arc<SyntaxRoot>> {
10 pub fn parse(text: &str) -> Self {
11 File { syntax: ::parse(text.to_owned()) }
12 }
13}
14
15impl<R: TreeRoot> File<R> {
16 pub fn syntax(&self) -> SyntaxNode<R> {
17 self.syntax.clone()
18 }
19
20 pub fn for_each_node(&self, mut f: impl FnMut(SyntaxNodeRef)) {
21 let syntax = self.syntax();
22 let syntax = syntax.borrow();
23 go(syntax, &mut f);
24
25 fn go(syntax: SyntaxNodeRef, f: &mut FnMut(SyntaxNodeRef)) {
26 f(syntax);
27 syntax.children().into_iter().for_each(f)
28 }
29 }
30}
diff --git a/src/lib.rs b/src/lib.rs
index f85ee1eef..3a8e6fa64 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -29,12 +29,14 @@ mod syntax_kinds;
29mod yellow; 29mod yellow;
30/// Utilities for simple uses of the parser. 30/// Utilities for simple uses of the parser.
31pub mod utils; 31pub mod utils;
32pub mod ast;
32 33
33pub use { 34pub use {
34 lexer::{tokenize, Token}, 35 lexer::{tokenize, Token},
35 syntax_kinds::SyntaxKind, 36 syntax_kinds::SyntaxKind,
36 text_unit::{TextRange, TextUnit}, 37 text_unit::{TextRange, TextUnit},
37 yellow::{SyntaxNode, SyntaxNodeRef}, 38 yellow::{SyntaxNode, SyntaxNodeRef, TreeRoot, SyntaxRoot},
39 ast::File,
38}; 40};
39 41
40pub(crate) use yellow::SyntaxError; 42pub(crate) use yellow::SyntaxError;
diff --git a/src/yellow/mod.rs b/src/yellow/mod.rs
index cada65d2f..0cc90adbd 100644
--- a/src/yellow/mod.rs
+++ b/src/yellow/mod.rs
@@ -3,10 +3,10 @@ mod green;
3mod red; 3mod red;
4mod syntax; 4mod syntax;
5 5
6pub use self::syntax::{SyntaxNode, SyntaxNodeRef}; 6pub use self::syntax::{SyntaxNode, SyntaxNodeRef, SyntaxRoot, TreeRoot};
7pub(crate) use self::{ 7pub(crate) use self::{
8 builder::GreenBuilder, 8 builder::GreenBuilder,
9 green::{GreenNode, GreenNodeBuilder}, 9 green::{GreenNode, GreenNodeBuilder},
10 red::RedNode, 10 red::RedNode,
11 syntax::{SyntaxError, SyntaxRoot}, 11 syntax::{SyntaxError},
12}; 12};