diff --git a/integration/language_service_plugin/.gitignore b/integration/language_service_plugin/.gitignore index 4c43fe68f6..7420cfbcc3 100644 --- a/integration/language_service_plugin/.gitignore +++ b/integration/language_service_plugin/.gitignore @@ -1 +1,3 @@ -*.js \ No newline at end of file +*.js +tsserver.log +ti-*.log diff --git a/integration/language_service_plugin/fixtures/getCompletions-expected-2.3.json b/integration/language_service_plugin/fixtures/getCompletions-expected-2.3.json deleted file mode 100644 index 3560e80927..0000000000 --- a/integration/language_service_plugin/fixtures/getCompletions-expected-2.3.json +++ /dev/null @@ -1,260 +0,0 @@ -[ - { - "type": "response", - "command": "configure", - "success": true - }, - { - "type": "response", - "command": "compilerOptionsForInferredProjects", - "success": true, - "body": true - }, - { - "type": "response", - "command": "completions", - "success": true, - "body": [ - { - "name": "anchor", - "kind": "method", - "kindModifiers": "", - "sortText": "anchor" - }, - { - "name": "big", - "kind": "method", - "kindModifiers": "", - "sortText": "big" - }, - { - "name": "blink", - "kind": "method", - "kindModifiers": "", - "sortText": "blink" - }, - { - "name": "bold", - "kind": "method", - "kindModifiers": "", - "sortText": "bold" - }, - { - "name": "charAt", - "kind": "method", - "kindModifiers": "", - "sortText": "charAt" - }, - { - "name": "charCodeAt", - "kind": "method", - "kindModifiers": "", - "sortText": "charCodeAt" - }, - { - "name": "codePointAt", - "kind": "method", - "kindModifiers": "", - "sortText": "codePointAt" - }, - { - "name": "concat", - "kind": "method", - "kindModifiers": "", - "sortText": "concat" - }, - { - "name": "endsWith", - "kind": "method", - "kindModifiers": "", - "sortText": "endsWith" - }, - { - "name": "fixed", - "kind": "method", - "kindModifiers": "", - "sortText": "fixed" - }, - { - "name": "fontcolor", - "kind": "method", - "kindModifiers": "", - "sortText": "fontcolor" - }, - { - "name": "fontsize", - "kind": "method", - "kindModifiers": "", - "sortText": "fontsize" - }, - { - "name": "includes", - "kind": "method", - "kindModifiers": "", - "sortText": "includes" - }, - { - "name": "indexOf", - "kind": "method", - "kindModifiers": "", - "sortText": "indexOf" - }, - { - "name": "italics", - "kind": "method", - "kindModifiers": "", - "sortText": "italics" - }, - { - "name": "lastIndexOf", - "kind": "method", - "kindModifiers": "", - "sortText": "lastIndexOf" - }, - { - "name": "length", - "kind": "property", - "kindModifiers": "", - "sortText": "length" - }, - { - "name": "link", - "kind": "method", - "kindModifiers": "", - "sortText": "link" - }, - { - "name": "localeCompare", - "kind": "method", - "kindModifiers": "", - "sortText": "localeCompare" - }, - { - "name": "match", - "kind": "method", - "kindModifiers": "", - "sortText": "match" - }, - { - "name": "normalize", - "kind": "method", - "kindModifiers": "", - "sortText": "normalize" - }, - { - "name": "repeat", - "kind": "method", - "kindModifiers": "", - "sortText": "repeat" - }, - { - "name": "replace", - "kind": "method", - "kindModifiers": "", - "sortText": "replace" - }, - { - "name": "search", - "kind": "method", - "kindModifiers": "", - "sortText": "search" - }, - { - "name": "slice", - "kind": "method", - "kindModifiers": "", - "sortText": "slice" - }, - { - "name": "small", - "kind": "method", - "kindModifiers": "", - "sortText": "small" - }, - { - "name": "split", - "kind": "method", - "kindModifiers": "", - "sortText": "split" - }, - { - "name": "startsWith", - "kind": "method", - "kindModifiers": "", - "sortText": "startsWith" - }, - { - "name": "strike", - "kind": "method", - "kindModifiers": "", - "sortText": "strike" - }, - { - "name": "sub", - "kind": "method", - "kindModifiers": "", - "sortText": "sub" - }, - { - "name": "substr", - "kind": "method", - "kindModifiers": "", - "sortText": "substr" - }, - { - "name": "substring", - "kind": "method", - "kindModifiers": "", - "sortText": "substring" - }, - { - "name": "sup", - "kind": "method", - "kindModifiers": "", - "sortText": "sup" - }, - { - "name": "toLocaleLowerCase", - "kind": "method", - "kindModifiers": "", - "sortText": "toLocaleLowerCase" - }, - { - "name": "toLocaleUpperCase", - "kind": "method", - "kindModifiers": "", - "sortText": "toLocaleUpperCase" - }, - { - "name": "toLowerCase", - "kind": "method", - "kindModifiers": "", - "sortText": "toLowerCase" - }, - { - "name": "toString", - "kind": "method", - "kindModifiers": "", - "sortText": "toString" - }, - { - "name": "toUpperCase", - "kind": "method", - "kindModifiers": "", - "sortText": "toUpperCase" - }, - { - "name": "trim", - "kind": "method", - "kindModifiers": "", - "sortText": "trim" - }, - { - "name": "valueOf", - "kind": "method", - "kindModifiers": "", - "sortText": "valueOf" - } - ] - } -] diff --git a/integration/language_service_plugin/fixtures/getCompletions.json b/integration/language_service_plugin/fixtures/getCompletions.json deleted file mode 100644 index 94be1ebe38..0000000000 --- a/integration/language_service_plugin/fixtures/getCompletions.json +++ /dev/null @@ -1,68 +0,0 @@ -[ - { - "seq": 0, - "type": "request", - "command": "configure", - "arguments": { - "hostInfo": "vscode" - } - }, - { - "seq": 1, - "type": "request", - "command": "compilerOptionsForInferredProjects", - "arguments": { - "options": { - "module": "CommonJS", - "target": "ES6", - "allowSyntheticDefaultImports": true, - "allowNonTsExtensions": true, - "allowJs": true, - "jsx": "Preserve" - } - } - }, - { - "seq": 4, - "type": "request", - "command": "open", - "arguments": { - "file": "$$PWD$$/project/app/app.component.ts", - "fileContent": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'my-app',\n template: `

Hello {{name}}

`,\n})\nexport class AppComponent { name = 'Angular'; }\n" - } - }, - { - "seq": 7, - "type": "request", - "command": "geterr", - "arguments": { - "delay": 0, - "files": [ - "$$PWD$$/project/app/app.component.ts" - ] - } - }, - { - "seq": 12, - "type": "request", - "command": "change", - "arguments": { - "file": "$$PWD$$/project/app/app.component.ts", - "line": 5, - "offset": 30, - "endLine": 5, - "endOffset": 30, - "insertString": "." - } - }, - { - "seq": 13, - "type": "request", - "command": "completions", - "arguments": { - "file": "$$PWD$$/project/app/app.component.ts", - "line": 5, - "offset": 31 - } - } -] \ No newline at end of file diff --git a/integration/language_service_plugin/fixtures/smokeTest.json b/integration/language_service_plugin/fixtures/smokeTest.json deleted file mode 100644 index 7ddc202c9a..0000000000 --- a/integration/language_service_plugin/fixtures/smokeTest.json +++ /dev/null @@ -1,45 +0,0 @@ -[ - { - "seq": 0, - "type": "request", - "command": "configure", - "arguments": { - "hostInfo": "vscode" - } - }, - { - "seq": 1, - "type": "request", - "command": "compilerOptionsForInferredProjects", - "arguments": { - "options": { - "module": "CommonJS", - "target": "ES6", - "allowSyntheticDefaultImports": true, - "allowNonTsExtensions": true, - "allowJs": true, - "jsx": "Preserve" - } - } - }, - { - "seq": 2, - "type": "request", - "command": "open", - "arguments": { - "file": "$$PWD$$/app/app.module.ts", - "fileContent": "" - } - }, - { - "seq": 3, - "type": "request", - "command": "geterr", - "arguments": { - "delay": 0, - "files": [ - "$$PWD$$/app/app.module.ts" - ] - } - } -] \ No newline at end of file diff --git a/integration/language_service_plugin/generate.ts b/integration/language_service_plugin/generate.ts new file mode 100644 index 0000000000..3db7aa54aa --- /dev/null +++ b/integration/language_service_plugin/generate.ts @@ -0,0 +1,22 @@ +/** + * @fileOverview + * This file serves as the entry point for generating goldens file for the + * language service integration test. It expects each golden file that needs + * to be generated to be passed in as command line arguments. + * For example, to generate golden file for the 'configure' request, run + * `yarn golden configure.json`. + * To generate multiple golden files, run + * `yarn golden configure.json completionInfo.json`. + * + * This is different from just running `yarn jasmine test.js` because this + * allows passing in arbitrary arguments. + */ + +import Jasmine = require('jasmine'); + +function main() { + const jasmine = new Jasmine({}); + jasmine.execute(['test.js']); +} + +main() diff --git a/integration/language_service_plugin/fixtures/smokeTest-expected-2.3.json b/integration/language_service_plugin/goldens/compilerOptionsForInferredProjects.json similarity index 56% rename from integration/language_service_plugin/fixtures/smokeTest-expected-2.3.json rename to integration/language_service_plugin/goldens/compilerOptionsForInferredProjects.json index 55645cf60d..38eaa54b68 100644 --- a/integration/language_service_plugin/fixtures/smokeTest-expected-2.3.json +++ b/integration/language_service_plugin/goldens/compilerOptionsForInferredProjects.json @@ -1,13 +1,8 @@ -[ - { - "type": "response", - "command": "configure", - "success": true - }, - { +{ + "seq": 0, "type": "response", "command": "compilerOptionsForInferredProjects", + "request_seq": 1, "success": true, "body": true - } -] +} diff --git a/integration/language_service_plugin/goldens/completionInfo.json b/integration/language_service_plugin/goldens/completionInfo.json new file mode 100644 index 0000000000..3c503000c8 --- /dev/null +++ b/integration/language_service_plugin/goldens/completionInfo.json @@ -0,0 +1,266 @@ +{ + "seq": 0, + "type": "response", + "command": "completionInfo", + "request_seq": 5, + "success": true, + "body": { + "isGlobalCompletion": false, + "isMemberCompletion": false, + "isNewIdentifierLocation": false, + "entries": [ + { + "name": "anchor", + "kind": "method", + "kindModifiers": "", + "sortText": "anchor" + }, + { + "name": "big", + "kind": "method", + "kindModifiers": "", + "sortText": "big" + }, + { + "name": "blink", + "kind": "method", + "kindModifiers": "", + "sortText": "blink" + }, + { + "name": "bold", + "kind": "method", + "kindModifiers": "", + "sortText": "bold" + }, + { + "name": "charAt", + "kind": "method", + "kindModifiers": "", + "sortText": "charAt" + }, + { + "name": "charCodeAt", + "kind": "method", + "kindModifiers": "", + "sortText": "charCodeAt" + }, + { + "name": "codePointAt", + "kind": "method", + "kindModifiers": "", + "sortText": "codePointAt" + }, + { + "name": "concat", + "kind": "method", + "kindModifiers": "", + "sortText": "concat" + }, + { + "name": "endsWith", + "kind": "method", + "kindModifiers": "", + "sortText": "endsWith" + }, + { + "name": "fixed", + "kind": "method", + "kindModifiers": "", + "sortText": "fixed" + }, + { + "name": "fontcolor", + "kind": "method", + "kindModifiers": "", + "sortText": "fontcolor" + }, + { + "name": "fontsize", + "kind": "method", + "kindModifiers": "", + "sortText": "fontsize" + }, + { + "name": "includes", + "kind": "method", + "kindModifiers": "", + "sortText": "includes" + }, + { + "name": "indexOf", + "kind": "method", + "kindModifiers": "", + "sortText": "indexOf" + }, + { + "name": "italics", + "kind": "method", + "kindModifiers": "", + "sortText": "italics" + }, + { + "name": "lastIndexOf", + "kind": "method", + "kindModifiers": "", + "sortText": "lastIndexOf" + }, + { + "name": "length", + "kind": "property", + "kindModifiers": "", + "sortText": "length" + }, + { + "name": "link", + "kind": "method", + "kindModifiers": "", + "sortText": "link" + }, + { + "name": "localeCompare", + "kind": "method", + "kindModifiers": "", + "sortText": "localeCompare" + }, + { + "name": "match", + "kind": "method", + "kindModifiers": "", + "sortText": "match" + }, + { + "name": "normalize", + "kind": "method", + "kindModifiers": "", + "sortText": "normalize" + }, + { + "name": "repeat", + "kind": "method", + "kindModifiers": "", + "sortText": "repeat" + }, + { + "name": "replace", + "kind": "method", + "kindModifiers": "", + "sortText": "replace" + }, + { + "name": "search", + "kind": "method", + "kindModifiers": "", + "sortText": "search" + }, + { + "name": "slice", + "kind": "method", + "kindModifiers": "", + "sortText": "slice" + }, + { + "name": "small", + "kind": "method", + "kindModifiers": "", + "sortText": "small" + }, + { + "name": "split", + "kind": "method", + "kindModifiers": "", + "sortText": "split" + }, + { + "name": "startsWith", + "kind": "method", + "kindModifiers": "", + "sortText": "startsWith" + }, + { + "name": "strike", + "kind": "method", + "kindModifiers": "", + "sortText": "strike" + }, + { + "name": "sub", + "kind": "method", + "kindModifiers": "", + "sortText": "sub" + }, + { + "name": "substr", + "kind": "method", + "kindModifiers": "", + "sortText": "substr" + }, + { + "name": "substring", + "kind": "method", + "kindModifiers": "", + "sortText": "substring" + }, + { + "name": "sup", + "kind": "method", + "kindModifiers": "", + "sortText": "sup" + }, + { + "name": "toLocaleLowerCase", + "kind": "method", + "kindModifiers": "", + "sortText": "toLocaleLowerCase" + }, + { + "name": "toLocaleUpperCase", + "kind": "method", + "kindModifiers": "", + "sortText": "toLocaleUpperCase" + }, + { + "name": "toLowerCase", + "kind": "method", + "kindModifiers": "", + "sortText": "toLowerCase" + }, + { + "name": "toString", + "kind": "method", + "kindModifiers": "", + "sortText": "toString" + }, + { + "name": "toUpperCase", + "kind": "method", + "kindModifiers": "", + "sortText": "toUpperCase" + }, + { + "name": "trim", + "kind": "method", + "kindModifiers": "", + "sortText": "trim" + }, + { + "name": "trimLeft", + "kind": "method", + "kindModifiers": "", + "sortText": "trimLeft" + }, + { + "name": "trimRight", + "kind": "method", + "kindModifiers": "", + "sortText": "trimRight" + }, + { + "name": "valueOf", + "kind": "method", + "kindModifiers": "", + "sortText": "valueOf" + } + ] + } +} \ No newline at end of file diff --git a/integration/language_service_plugin/goldens/configure.json b/integration/language_service_plugin/goldens/configure.json new file mode 100644 index 0000000000..b4a7a6f32b --- /dev/null +++ b/integration/language_service_plugin/goldens/configure.json @@ -0,0 +1,7 @@ +{ + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 0, + "success": true +} diff --git a/integration/language_service_plugin/matcher.ts b/integration/language_service_plugin/matcher.ts new file mode 100644 index 0000000000..b46edbf3bc --- /dev/null +++ b/integration/language_service_plugin/matcher.ts @@ -0,0 +1,32 @@ +import { writeFileSync } from 'fs'; + +const goldens: string[] = process.argv.slice(2); + +export const goldenMatcher: jasmine.CustomMatcherFactories = { + toMatchGolden(util: jasmine.MatchersUtil): jasmine.CustomMatcher { + return { + compare(actual: {command: string}, golden: string): jasmine.CustomMatcherResult { + const expected = require(`./goldens/${golden}`); + const pass = util.equals(actual, expected); + if (!pass && goldens.indexOf(golden) >= 0) { + console.error(`Writing golden file ${golden}`); + writeFileSync(`./goldens/${golden}`, JSON.stringify(actual, null, 2)); + return { pass : true }; + } + return { + pass, + message: `Expected response for '${actual.command}' to match golden file ${golden}.\n` + + `To generate new golden file, run "yarn golden ${golden}".`, + }; + } + }; + }, +}; + +declare global { + namespace jasmine { + interface Matchers { + toMatchGolden(golden: string): void + } + } +} diff --git a/integration/language_service_plugin/package.json b/integration/language_service_plugin/package.json index c6c91f558f..c5036b18a1 100644 --- a/integration/language_service_plugin/package.json +++ b/integration/language_service_plugin/package.json @@ -4,23 +4,16 @@ "license": "MIT", "description": "Angular Language Service plugin integration test", "dependencies": { - "@angular/animations": "file:../../dist/packages-dist/animations", - "@angular/common": "file:../../dist/packages-dist/common", - "@angular/compiler": "file:../../dist/packages-dist/compiler", - "@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli", "@angular/core": "file:../../dist/packages-dist/core", "@angular/language-service": "file:../../dist/packages-dist/language-service", - "@angular/platform-browser": "file:../../dist/packages-dist/platform-browser", - "@angular/platform-server": "file:../../dist/packages-dist/platform-server", - "@types/minimist": "^1.2.0", - "@types/node": "^7.0.5", - "minimist": "^1.2.0", - "rxjs": "file:../../node_modules/rxjs", - "typescript": "file:../../node_modules/typescript", - "zone.js": "file:../../node_modules/zone.js" + "@types/node": "file:../../node_modules/@types/node", + "jasmine": "file:../../node_modules/jasmine", + "typescript": "file:../../node_modules/typescript" }, "scripts": { - "postinstall": "scripts/install.sh", - "test": "tsc -p tools && scripts/test.sh" + "build": "tsc -p tsconfig.json", + "cleanup": "rm -rf ti-*.log tsserver.log", + "golden": "node generate.js", + "test": "yarn cleanup && yarn build && jasmine test.js" } } diff --git a/integration/language_service_plugin/project/tsconfig.json b/integration/language_service_plugin/project/tsconfig.json index 6a81fdd7df..2c7260d1bc 100644 --- a/integration/language_service_plugin/project/tsconfig.json +++ b/integration/language_service_plugin/project/tsconfig.json @@ -8,9 +8,6 @@ "experimentalDecorators": true, "lib": [ "es2015", "dom" ], "noImplicitAny": true, - "suppressImplicitAnyIndexErrors": true, - "plugins": [ - { "name": "@angular/language-service" } - ] + "suppressImplicitAnyIndexErrors": true } } diff --git a/integration/language_service_plugin/scripts/env.sh b/integration/language_service_plugin/scripts/env.sh deleted file mode 100755 index 321f42a45c..0000000000 --- a/integration/language_service_plugin/scripts/env.sh +++ /dev/null @@ -1,2 +0,0 @@ -TYPESCRIPTS=2.3 -FIXTURES="smokeTest getCompletions" diff --git a/integration/language_service_plugin/scripts/install.sh b/integration/language_service_plugin/scripts/install.sh deleted file mode 100755 index d835479259..0000000000 --- a/integration/language_service_plugin/scripts/install.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -ex -o pipefail - -cd `dirname $0` -cd .. -source scripts/env.sh - -# Setup TypeScripts -for TYPESCRIPT in ${TYPESCRIPTS[@]} -do - ( - cd typescripts/$TYPESCRIPT - yarn - ) -done \ No newline at end of file diff --git a/integration/language_service_plugin/scripts/test.sh b/integration/language_service_plugin/scripts/test.sh deleted file mode 100755 index 0721da0c45..0000000000 --- a/integration/language_service_plugin/scripts/test.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -set -ex -o pipefail - -cd `dirname $0` -cd .. -source scripts/env.sh - -HOST="node tools/typescript_host.js" -VALIDATE="node tools/typescript_validator.js" - -# Ensure the languages service can load correctly in node before typescript loads it. -# This verifies its dependencies and emits any exceptions, both of which are only -# emitted to the typescript logs (not the validated output). -node tools/load_test.js - -for TYPESCRIPT in ${TYPESCRIPTS[@]} -do - SERVER="node typescripts/$TYPESCRIPT/node_modules/typescript/lib/tsserver.js" - for FIXTURE_BASE in ${FIXTURES[@]} - do - FIXTURE=fixtures/$FIXTURE_BASE.json - EXPECTED=fixtures/$FIXTURE_BASE-expected-$TYPESCRIPT.json - if [[ ${UPDATE_GOLDEN} == true ]]; then - $HOST --file $FIXTURE --pwd $(pwd) | $SERVER | $VALIDATE --golden > $EXPECTED - else - $HOST --file $FIXTURE --pwd $(pwd) | $SERVER | $VALIDATE --expect $EXPECTED - fi - done -done \ No newline at end of file diff --git a/integration/language_service_plugin/scripts/update_golden.sh b/integration/language_service_plugin/scripts/update_golden.sh deleted file mode 100755 index 4fd0d2484d..0000000000 --- a/integration/language_service_plugin/scripts/update_golden.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -ex -o pipefail - -cd `dirname $0` -cd .. - -UPDATE_GOLDEN=true scripts/test.sh \ No newline at end of file diff --git a/integration/language_service_plugin/test.ts b/integration/language_service_plugin/test.ts new file mode 100644 index 0000000000..0147ed1ebb --- /dev/null +++ b/integration/language_service_plugin/test.ts @@ -0,0 +1,104 @@ +import { fork, ChildProcess } from 'child_process'; +import { join } from 'path'; +import { Client } from './tsclient'; +import { goldenMatcher } from './matcher'; + +describe('Angular Language Service', () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; /* 10 seconds */ + const PWD = process.env.PWD!; + const SERVER_PATH = "./node_modules/typescript/lib/tsserver.js"; + let server: ChildProcess; + let client: Client; + + beforeEach(() => { + jasmine.addMatchers(goldenMatcher); + server = fork(SERVER_PATH, [ + '--globalPlugins', '@angular/language-service', + '--logVerbosity', 'verbose', + '--logFile', join(PWD, 'tsserver.log'), + ], { + stdio: ['pipe', 'pipe', 'inherit', 'ipc'], + }); + client = new Client(server); + client.listen(); + }); + + afterEach(async () => { + client.sendRequest('exit', {}); + + // Give server process some time to flush all messages + await new Promise((resolve) => setTimeout(resolve, 1000)); + }); + + it('should be launched as tsserver plugin', async () => { + let response = await client.sendRequest('configure', { + hostInfo: 'vscode', + }); + expect(response).toMatchGolden('configure.json'); + response = await client.sendRequest('compilerOptionsForInferredProjects', { + "options": { + module: "CommonJS", + target: "ES6", + allowSyntheticDefaultImports: true, + allowNonTsExtensions: true, + allowJs: true, + jsx: "Preserve" + } + }); + expect(response).toMatchGolden('compilerOptionsForInferredProjects.json'); + // Server does not send response to open request + // https://github.com/Microsoft/TypeScript/blob/master/lib/protocol.d.ts#L1055 + client.sendRequest('open', { + file: `${PWD}/project/app/app.module.ts`, + fileContent: "" + }); + // Server does not send response to geterr request + // https://github.com/Microsoft/TypeScript/blob/master/lib/protocol.d.ts#L1770 + client.sendRequest('geterr', { + delay: 0, + files: [`${PWD}/project/app/app.module.ts`] + }); + }); + + it('should perform completions', async () => { + await client.sendRequest('configure', { + hostInfo: 'vscode', + }); + await client.sendRequest('compilerOptionsForInferredProjects', { + "options": { + module: "CommonJS", + target: "ES6", + allowSyntheticDefaultImports: true, + allowNonTsExtensions: true, + allowJs: true, + jsx: "Preserve" + } + }); + + client.sendRequest('open', { + file: `${PWD}/project/app/app.component.ts`, + fileContent: "import { Component } from '@angular/core';\n\n@Component({\n selector: 'my-app',\n template: `

Hello {{name}}

`,\n})\nexport class AppComponent { name = 'Angular'; }\n" + }); + + client.sendRequest('geterr', { + delay: 0, + files: [`${PWD}/project/app/app.component.ts`] + }); + + client.sendRequest('change', { + file: `${PWD}/project/app/app.component.ts`, + line: 5, + offset: 30, + endLine: 5, + endOffset: 30, + insertString: '.', + }); + + const response = await client.sendRequest('completionInfo', { + file: `${PWD}/project/app/app.component.ts`, + line: 5, + offset: 31, + }); + expect(response).toMatchGolden('completionInfo.json'); + }); +}); diff --git a/integration/language_service_plugin/tools/load_test.ts b/integration/language_service_plugin/tools/load_test.ts deleted file mode 100644 index 22090f30f6..0000000000 --- a/integration/language_service_plugin/tools/load_test.ts +++ /dev/null @@ -1,35 +0,0 @@ -const ts = require('typescript'); -const Module = require('module'); - -const existingRequire = Module.prototype.require; - -const recordedRequires: string[] = []; - -function recordingRequire(path: string) { - recordedRequires.push(path); - return existingRequire.call(this, path); -} - -Module.prototype.require = recordingRequire; - -try { - const lsf = require('@angular/language-service'); - const ls = lsf({typescript: ts}); - - // Assert that the only module that should have been required are '@angular/language-service', 'fs', and 'path' - - const allowedLoads = new Set(["@angular/language-service", "fs", "path"]); - - const invalidModules = recordedRequires.filter(m => !allowedLoads.has(m)); - - if (invalidModules.length > 0) { - console.error(`FAILED: Loading the language service required: ${invalidModules.join(', ')}`); - process.exit(1); - } -} catch (e) { - console.error(`FAILED: Loading the language service caused the following exception: ${e.stack || e}`); - process.exit(1); -} - -console.log('SUCCESS: Loading passed') -process.exit(0); \ No newline at end of file diff --git a/integration/language_service_plugin/tools/tsconfig.json b/integration/language_service_plugin/tools/tsconfig.json deleted file mode 100644 index fd844f194c..0000000000 --- a/integration/language_service_plugin/tools/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es5", - "noImplicitAny": true, - "skipLibCheck": true, - "sourceMap": false, - "lib": ["es2015", "dom"], - "types": [ - "node", - "minimist" - ] - }, - "files": [ - "typescript_host.ts", - "typescript_validator.ts", - "load_test.ts" - ] -} \ No newline at end of file diff --git a/integration/language_service_plugin/tools/typescript_host.ts b/integration/language_service_plugin/tools/typescript_host.ts deleted file mode 100644 index 4dc2f415c8..0000000000 --- a/integration/language_service_plugin/tools/typescript_host.ts +++ /dev/null @@ -1,77 +0,0 @@ -import * as fs from 'fs'; -import * as minimist from 'minimist'; - -const RE_PWD = /\$\$PWD\$\$/g; - -let errorsDetected = false; - -function reportError(arg: string): boolean { - console.error(`Unknown argument: ${arg}`); - errorsDetected = true; - return false; -} - -function help() { - console.log('TypeScript Host') - console.log(`${process.argv[1]} --file [--pwd ]`); - console.log(` - Send JSON message using the JSON RPC protocol to stdout. - `) -} - -let args = minimist(process.argv.slice(2), { string: ['file', 'pwd'], unknown: reportError }); - -if (errorsDetected) { - help(); - process.exit(2); -} - -const file = args['file']; -if (!file) { - console.log('stdin form not supported yet.') - process.exit(1); -} - -// Sender -const pending: string[] = []; -let writing = false; - -function writeMessage(message: string) { - writing = true; - process.stdout.write(message + '\n', checkPending); -} - -function checkPending() { - writing = false; - if (pending.length) { - writeMessage(pending.shift()); - } -} - -function send(message: string) { - if (writing) { - pending.push(message); - } else { - writeMessage(message); - } -} - -try { - let content = fs.readFileSync(file, 'utf8'); - if (args['pwd']) { - content = content.replace(RE_PWD, args['pwd']); - } - - const json = JSON.parse(content); - - if (Array.isArray(json)) { - for (const message of json) { - send(JSON.stringify(message)); - } - } else { - throw Error('Expected an array for input messages.') - } -} catch(e) { - console.error(`Error: ${e.message}`); - process.exit(2); -} \ No newline at end of file diff --git a/integration/language_service_plugin/tools/typescript_validator.ts b/integration/language_service_plugin/tools/typescript_validator.ts deleted file mode 100644 index 0bad6a4d07..0000000000 --- a/integration/language_service_plugin/tools/typescript_validator.ts +++ /dev/null @@ -1,164 +0,0 @@ -import * as fs from 'fs'; -import * as minimist from 'minimist'; - -let errorsDetected = false; - -const start = Date.now(); - -function reportError(arg: string): boolean { - console.error(`Unknown argument: ${arg}`); - errorsDetected = true; - return false; -} - -function help() { - console.log('TypeScript Validator') - console.log(`${process.argv[1]} [--expect | --golden] [--pwd ]`); - console.log(` - Validate that the emitted output produces the expect JSON.`) -} - -let args = minimist(process.argv.slice(2), { string: ['expect', 'pwd'], boolean: ['golden'], unknown: reportError }); - -if (!args.golden && !args.expect) { - console.log('Expected -golden or -expect'); - errorsDetected = true; -} - -if (args.golden && args.expect) { - console.log('Expected -golded or -expect but not both'); - errorsDetected = true; -} - -if (errorsDetected) { - help(); - process.exit(2); -} - -var expected: any; -if (args.expect) { - expected = JSON.parse(fs.readFileSync(args.expect, 'utf8')); -} - -// Reader -let pending = Buffer.alloc(0); - -const prefix = 'Content-Length: '; - -function tryReadMessage(cb: (message: any) => void) { - const firstLine = pending.indexOf(10); - if (firstLine >= 1) { - const line = pending.toString('utf8', 0, firstLine); - if (!line.startsWith(prefix)) { - throw Error(`Unexpected input: ${line}`); - } - const length = +line.substring(prefix.length, firstLine - 1); - const dataStart = firstLine + 2; - const messageText = pending.toString('utf8', dataStart, dataStart + length); - const message = JSON.parse(messageText); - pending = pending.slice(dataStart + length + 1); - cb(message); - tryReadMessage(cb); - } -} - -function collect(cb: (error: any, messages: any[]) => void) { - const result: any[] = []; - - function report(error: any, messages: any[]) { - cb(error, messages); - cb = () => {}; - } - - process.stdin.on('error', report); - process.stdin.on('data', (data: Buffer) => { - try { - pending = Buffer.concat([pending, data], pending.length + data.length); - tryReadMessage((message: any) => { - result.push(message); - }); - } catch (e) { - report(e, []); - } - }); - - process.stdin.on('close', () => { - report(null, result); - }); -} - -function sanitize(messages: any[]): any[] { - return messages.filter((message: any) => { - return message && message.type == 'response'; - }).map((message: any) => { - // Only preserve a fixed set of fields. - const result: any = {}; - if (message.type != null) result.type = message.type; - if (message.command != null) result.command = message.command; - if (message.success != null) result.success = message.success; - if (message.body != null) result.body = message.body; - return result; - }); -} - - -function isPrimitive(value: any): boolean { - return Object(value) !== value; -} - -function expectPrimitive(received: any, expected: any) { - if (received !== expected) { - throw new Error(`Expected ${expected} but received ${received}`); - } -} - -function expectArray(received: any, expected: any[]) { - if (!Array.isArray(received)) { - throw new Error(`Expected an array, received ${JSON.stringify(received)}`); - } - if (received.length != expected.length) { - throw new Error(`Expected an array length ${expected.length}, received ${JSON.stringify(received)}`); - } - for (let i = 0; i < expected.length; i++) { - expect(received[i], expected[i]); - } -} - -function expectObject(received: any, expected: any) { - for (const name of Object.getOwnPropertyNames(expected)) { - if (!received.hasOwnProperty(name)) { - throw new Error(`Expected object an object containing a field ${name}, received ${JSON.stringify(expected)}`); - } - expect(received[name], expected[name]); - } -} - -function expect(received: any, expected: any) { - if (isPrimitive(expected)) { - expectPrimitive(received, expected); - } else if (Array.isArray(expected)) { - expectArray(received, expected); - } else { - expectObject(received, expected); - } -} - - -collect((err: any, messages: any[]) => { - if (err) { - console.error(err.message); - process.exit(1); - } - if (args.golden) { - console.log(JSON.stringify(sanitize(messages), null, ' ')); - } else { - try { - expect(sanitize(messages), expected); - console.log('PASSED:', Date.now() - start, 'ms'); - process.exit(0); - } catch(e) { - console.log('FAILED:', e.message); - process.exit(1); - } - } -}); diff --git a/integration/language_service_plugin/tsclient.ts b/integration/language_service_plugin/tsclient.ts new file mode 100644 index 0000000000..05dd3c0e0d --- /dev/null +++ b/integration/language_service_plugin/tsclient.ts @@ -0,0 +1,70 @@ +import { ChildProcess } from "child_process"; +import { EventEmitter } from "events"; + +/** + * Provides a client for tsserver. Tsserver does not use standard JSON-RPC + * protocol thus the need for this custom client. + */ +export class Client { + private data: Buffer|undefined; + private id = 0; + private responseEmitter = new EventEmitter(); + + constructor(private readonly server: ChildProcess) {} + + listen() { + this.server.stdout.on('data', (data: Buffer) => { + this.data = this.data ? Buffer.concat([this.data, data]) : data; + const CONTENT_LENGTH = 'Content-Length: ' + const index = this.data.indexOf(CONTENT_LENGTH); + if (index < 0) { + return; + } + let start = index + CONTENT_LENGTH.length; + let end = this.data.indexOf('\r\n', start); + if (end < start) { + return; + } + const contentLengthStr = this.data.slice(start, end).toString(); + const contentLength = Number(contentLengthStr); + if (isNaN(contentLength) || contentLength < 0) { + return; + } + start = end + 4; + end = start + contentLength; + if (end > this.data.length) { + return; + } + const content = this.data.slice(start, end).toString(); + this.data = this.data.slice(end); + try { + const payload = JSON.parse(content); + if (payload.type === "event") { + return; + } + this.responseEmitter.emit('response', payload); + } + catch (error) { + this.responseEmitter.emit('error', error); + } + }); + } + + async send(type: string, command: string, params: {}) { + const request = { + seq: this.id++, + type, + command, + arguments: params + }; + this.server.stdin.write(JSON.stringify(request) + '\r\n'); + return new Promise((resolve, reject) => { + this.responseEmitter.once('response', resolve); + this.responseEmitter.once('error', reject); + }); + } + + async sendRequest(command: string, params: {}) { + return this.send('request', command, params); + } +} diff --git a/integration/language_service_plugin/tsconfig.json b/integration/language_service_plugin/tsconfig.json index 2c7260d1bc..9730ac2fe3 100644 --- a/integration/language_service_plugin/tsconfig.json +++ b/integration/language_service_plugin/tsconfig.json @@ -1,13 +1,60 @@ { "compilerOptions": { - "target": "es5", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": [ "es2015", "dom" ], - "noImplicitAny": true, - "suppressImplicitAnyIndexErrors": true - } + /* Basic Options */ + "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + }, + "include": ["*.ts"] } diff --git a/integration/language_service_plugin/typescripts/2.3/package.json b/integration/language_service_plugin/typescripts/2.3/package.json deleted file mode 100644 index a76f86606d..0000000000 --- a/integration/language_service_plugin/typescripts/2.3/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "2.3", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "typescript": "2.3.0" - } -} diff --git a/integration/language_service_plugin/typescripts/2.3/yarn.lock b/integration/language_service_plugin/typescripts/2.3/yarn.lock deleted file mode 100644 index 978ea5c25e..0000000000 --- a/integration/language_service_plugin/typescripts/2.3/yarn.lock +++ /dev/null @@ -1,7 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -typescript@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.0.tgz#2e63e09284392bc8158a2444c33e2093795c0418" diff --git a/integration/language_service_plugin/yarn.lock b/integration/language_service_plugin/yarn.lock index 2e3bc312da..73dcc87276 100644 --- a/integration/language_service_plugin/yarn.lock +++ b/integration/language_service_plugin/yarn.lock @@ -2,391 +2,44 @@ # yarn lockfile v1 -"@angular/animations@file:../../dist/packages-dist/animations": - version "6.0.0-beta.7-8203e0365a" - dependencies: - tslib "^1.9.0" - -"@angular/common@file:../../dist/packages-dist/common": - version "6.0.0-beta.7-8203e0365a" - dependencies: - tslib "^1.9.0" - -"@angular/compiler-cli@file:../../dist/packages-dist/compiler-cli": - version "6.0.0-beta.7-8203e0365a" - dependencies: - chokidar "^1.4.2" - minimist "^1.2.0" - reflect-metadata "^0.1.2" - tsickle "^0.27.2" - -"@angular/compiler@file:../../dist/packages-dist/compiler": - version "6.0.0-beta.7-8203e0365a" - dependencies: - tslib "^1.9.0" - "@angular/core@file:../../dist/packages-dist/core": - version "6.0.0-beta.7-8203e0365a" + version "7.2.0" dependencies: tslib "^1.9.0" "@angular/language-service@file:../../dist/packages-dist/language-service": - version "6.0.0-beta.7-8203e0365a" + version "7.2.0" -"@angular/platform-browser@file:../../dist/packages-dist/platform-browser": - version "6.0.0-beta.7-8203e0365a" - dependencies: - tslib "^1.9.0" - -"@angular/platform-server@file:../../dist/packages-dist/platform-server": - version "6.0.0-beta.7-8203e0365a" - dependencies: - domino "^2.0.1" - tslib "^1.9.0" - xhr2 "^0.1.4" - -"@types/minimist@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" - -"@types/node@^7.0.5": - version "7.0.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.52.tgz#8990d3350375542b0c21a83cd0331e6a8fc86716" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +"@types/node@file:../../node_modules/@types/node": + version "10.9.4" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -chokidar@^1.4.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -domino@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domino/-/domino-2.0.1.tgz#9e1d63215d0fe8dcb8202bff07effa1a216db504" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@^7.0.5: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.6: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -395,610 +48,58 @@ glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: +inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" +jasmine-core@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.1.0.tgz#a4785e135d5df65024dfc9224953df585bd2766c" + integrity sha1-pHheE11d9lAk38kiSVPfWFvSdmw= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" +"jasmine@file:../../node_modules/jasmine": + version "3.1.0" dependencies: - binary-extensions "^1.0.0" + glob "^7.0.6" + jasmine-core "~3.1.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -"mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -nan@^2.3.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-path@^2.0.0, normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -once@^1.3.0, once@^1.3.3: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -rc@^1.1.7: - version "1.2.3" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -reflect-metadata@^0.1.2: - version "0.1.10" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.10.tgz#b4f83704416acad89988c9b15635d47e03b9344a" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -"rxjs@file:../../node_modules/rxjs": - version "6.0.0-alpha.4" - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -source-map-support@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" - dependencies: - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tough-cookie@~2.3.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -tsickle@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.27.2.tgz#f33d46d046f73dd5c155a37922e422816e878736" - dependencies: - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map "^0.6.0" - source-map-support "^0.5.0" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= tslib@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== "typescript@file:../../node_modules/typescript": - version "2.7.2" - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -uuid@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" + version "3.2.2" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xhr2@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" - -"zone.js@file:../../node_modules/zone.js": - version "0.8.20" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=