diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f128150..fbe5267 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -43,6 +43,7 @@ jobs: browser-tests: strategy: + fail-fast: false matrix: command: [development, production, fastboot] launcher: [Chrome, IE, Firefox, Safari] diff --git a/package.json b/package.json index f3e1df7..1e5049e 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "**/@skyrocketjs/schema", "**/@skyrocketjs/compiler", "**/@skyrocketjs/service", - "**/@skyrocketjs/ember" + "**/@skyrocketjs/ember", + "**/regenerator-runtime" ] }, "engines": { diff --git a/packages/compiler/package.json b/packages/compiler/package.json index c06a20a..1ecfcfe 100644 --- a/packages/compiler/package.json +++ b/packages/compiler/package.json @@ -15,13 +15,16 @@ "@babel/plugin-proposal-class-properties": "^7.7.0", "@babel/plugin-proposal-decorators": "^7.7.0", "@babel/plugin-syntax-decorators": "^7.2.0", + "@rollup/plugin-babel": "^5.0.2", "@rollup/plugin-node-resolve": "^8.0.0", "@skyrocketjs/schema": "0.0.1-alpha.3", "@skyrocketjs/worker": "0.0.1-alpha.3", "broccoli-babel-transpiler": "^7.3.0", "broccoli-debug": "^0.6.5", "broccoli-funnel": "^3.0.0", + "broccoli-merge-trees": "^4.2.0", "broccoli-rollup": "^4.1.1", + "regenerator-runtime": "^0.13.5", "tmp": "^0.2.1" }, "devDependencies": { diff --git a/packages/compiler/src/plugin/index.ts b/packages/compiler/src/plugin/index.ts index 4c68107..c5071fc 100644 --- a/packages/compiler/src/plugin/index.ts +++ b/packages/compiler/src/plugin/index.ts @@ -19,24 +19,105 @@ const tmp = require('tmp'); tmp.setGracefulCleanup(); -module.exports = function compile(node: any, options: { projectRoot: string }) { +interface BroccoliSchemaCompilerOptions { + parentRoot: string; + babelOptions?: any; + isProduction?: boolean; + compilerOptions: { + directoryToCompile: string; + node_modules_path: string; + importPaths: string[]; + enableChunks?: boolean; + }; +} + +function configurePlugins(babelOptions: any, plugins: any[]): any { + let babelPlugins = (babelOptions.plugins = babelOptions.plugins || []); + plugins.forEach(plugin => { + let pluginPath = plugin[0]; + let pluginOptions = plugin[1] || {}; + + for (let i = 0; i < babelPlugins.length; i++) { + let existingPlugin = babelPlugins[i]; + if (typeof existingPlugin === 'string') { + if (existingPlugin === pluginPath) { + babelPlugins[i] = plugin; + return; + } + } + if (Array.isArray(existingPlugin) && existingPlugin[0] === pluginPath) { + existingPlugin[1] = Object.assign(existingPlugin[1] || {}, pluginOptions); + return; + } + } + + // plugin not found + babelPlugins.push(plugin); + }); + + let disallowedPlugins = [ + '@babel/plugin-transform-modules-amd', + 'babel-plugin-module-resolver', + 'babel-plugin-ember-modules-api-polyfill', + ]; + + // remove the AMD plugin + for (let i = 0; i < babelPlugins.length; i++) { + let existingPlugin = babelPlugins[i]; + let pluginName = + typeof existingPlugin === 'string' ? existingPlugin : Array.isArray(existingPlugin) ? existingPlugin[0] : ''; + + for (let name of disallowedPlugins) { + if (pluginName.indexOf(name) !== -1) { + babelPlugins.splice(i, 1); + i -= 1; + break; + } + } + } + + return babelOptions; +} + +function enforceTrailingSlash(str: string): string { + if (str.charAt(str.length - 1) !== '/') { + return str + '/'; + } + return str; +} + +module.exports = function compile(options: BroccoliSchemaCompilerOptions) { const tmpobj = tmp.dirSync(); /* - Grab just the files in workers/ for schema parsing + Grab all the other sources for code for workers (other than node_modules) + */ + let baseTree; + if (options.compilerOptions.importPaths.length) { + baseTree = debug( + merge( + options.compilerOptions.importPaths.map(dir => { + return new Funnel(path.join(options.parentRoot, dir), { destDir: dir, allowEmpty: true }); + }) + ), + `compiler-input-trees` + ); + } + + /* + Grab just the files in options.directoryToCompile for schema parsing */ - const schemaTree = debug( - new Funnel(node, { - srcDir: 'workers', - destDir: 'workers', + const workerTree = debug( + new Funnel(path.join(options.parentRoot, options.compilerOptions.directoryToCompile), { + destDir: options.compilerOptions.directoryToCompile, }), - 'schema-tree' + 'worker-files-for-schema-compilation' ); /* Parse out the schema info into tmpobj.name directory */ const parsedSchemas = debug( - babel(schemaTree, { + babel(workerTree, { throwUnlessParallelizable: true, plugins: [ [ @@ -45,15 +126,15 @@ module.exports = function compile(node: any, options: { projectRoot: string }) { schemaSourceFiles: { '@skyrocketjs/worker': true, }, - filePrefix: 'workers/', + filePrefix: enforceTrailingSlash(options.compilerOptions.directoryToCompile), outputPath: tmpobj.name, removeDecorators: true, }, ], - [ParseDecorators, { decoratorsBeforeExport: false }], + [ParseDecorators, { legacy: true }], ], }), - 'babel-schemas' + 'files-post-parsing-for-schema' ); /* @@ -62,9 +143,9 @@ module.exports = function compile(node: any, options: { projectRoot: string }) { const withSchemas = debug( new Formatter({ schemaPath: tmpobj.name, - schemaOutputDirectory: 'workers', + schemaOutputDirectory: options.compilerOptions.directoryToCompile, }), - 'schemas' + 'generated-schema-modules' ); /* @@ -74,36 +155,46 @@ module.exports = function compile(node: any, options: { projectRoot: string }) { new Launchers({ schemaPath: tmpobj.name, }), - 'launchers' + 'generated-launcher-modules' ); /* Our schema scan has to be "pulled" during broccoli compilation in order to run, so we merge it back in. */ - const pullTree = debug(merge([node, parsedSchemas, withSchemas, withLaunchers], { overwrite: true }), 'pull-tree'); + const pullTree = debug( + merge([baseTree, workerTree, parsedSchemas, withSchemas, withLaunchers].filter(Boolean), { overwrite: true }), + 'pull-tree' + ); /* Process our JS from app and workers in advance of rollup because rollup cannot handle decorators or class properties + + TODO use the passed in babel config */ - const parsedForRollup = debug( - babel(pullTree, { - throwUnlessParallelizable: true, - plugins: [[Decorators, { decoratorsBeforeExport: false }], [ClassProps]], - }), - 'babel-rollup' - ); + const babelConfig = configurePlugins(Object.assign(options.babelOptions || {}, { throwUnlessParallelizable: true }), [ + [Decorators, { legacy: true }], + [ClassProps, { loose: true }], + ]); + console.log(babelConfig.presets[0][1].targets.browsers); + const parsedForRollup = debug(babel(pullTree, babelConfig), 'babel-processed-files-for-worker-rollup'); /* Convert our worker files into stand-alone executables with the proper shell to communicate with the @skyrocketjs/service + + TODO enable chunks. Chunks are more efficient for the build pipeline AND + more efficient at runtime; however, they will require rewriting `import` to `importScript` + including accounting for SRI fingerprints in production + + TODO minify rollup output in production */ const rollupTree = debug( rollupLaunchers(parsedForRollup, { cache: true, // likely need to make sure this is keyed to the output of the schemas schemaPath: tmpobj.name, - nodeModulesPath: path.join(options.projectRoot, 'node_modules'), + nodeModulesPath: options.compilerOptions.node_modules_path, rollup: { // these options assigned later input: '', @@ -116,16 +207,27 @@ module.exports = function compile(node: any, options: { projectRoot: string }) { ], }, }), - 'rollup' + 'rollup-built-workers' ); + /* + Workers do not have integrity features (we could maybe build our own SRI solution) + but we do the minimum good thing here by allowing our assets to be revisioned with + a checksum fingerprint. + + This means our worker service on the main thread will need to know these checksums, + so we insert them into the compiled schemas as the first argument. + */ const togetherAgainTree = merge([rollupTree, withSchemas]); - const finalTree = debug( + const finalSchemas = debug( new SchemaSRIGenerator(togetherAgainTree, { schemaPath: tmpobj.name, }), 'schemas-with-sri' ); - return merge([rollupTree, finalTree]); + return { + workers: rollupTree, + schemas: finalSchemas, + }; }; diff --git a/packages/compiler/src/tsconfig.json b/packages/compiler/src/tsconfig.json index 8f4d5e6..07fa981 100644 --- a/packages/compiler/src/tsconfig.json +++ b/packages/compiler/src/tsconfig.json @@ -10,18 +10,13 @@ "noImplicitAny": true, "noEmitOnError": false, "strictNullChecks": true, - "experimentalDecorators": false, + "experimentalDecorators": true, "noEmit": false, "skipLibCheck": true, "inlineSourceMap": true, "inlineSources": true, "outDir": "../build" }, - "files": [ - "plugin/index.ts", - "plugin/rollup.ts", - "plugin/formatter.ts", - "plugin/utils/gather-schemas.ts" - ], + "files": ["plugin/index.ts", "plugin/rollup.ts", "plugin/formatter.ts", "plugin/utils/gather-schemas.ts"], "exclude": ["../node_modules/**", "../../../node_modules/**"] } diff --git a/packages/compiler/tests/fixtures/output/schemas/workers/example-one.js b/packages/compiler/tests/fixtures/output/schemas/workers/example-one.js index 850976a..14202e7 100644 --- a/packages/compiler/tests/fixtures/output/schemas/workers/example-one.js +++ b/packages/compiler/tests/fixtures/output/schemas/workers/example-one.js @@ -1 +1 @@ -export default '["b6d064159b6e0ad721b130300a208e6b",1,"fetchUsers",0,2,"reload",0]'; +export default '["9cc2916bda494a2271dcb24c40ec50bc",1,"fetchUsers",0,2,"reload",0]'; diff --git a/packages/compiler/tests/fixtures/output/schemas/workers/example-two.js b/packages/compiler/tests/fixtures/output/schemas/workers/example-two.js index 0fa306b..8bfa1f0 100644 --- a/packages/compiler/tests/fixtures/output/schemas/workers/example-two.js +++ b/packages/compiler/tests/fixtures/output/schemas/workers/example-two.js @@ -1 +1 @@ -export default '["df825ac81ebcff71433ab0ca3a14a59a",1,"fetchUsers",0,2,"reload",0]'; +export default '["e2ba2d56f43c5ebcb459467640692c87",1,"fetchUsers",0,2,"reload",0]'; diff --git a/packages/compiler/tests/fixtures/output/workers/example_one__launcher.js b/packages/compiler/tests/fixtures/output/workers/example_one__launcher.js index 3438063..0150a91 100644 --- a/packages/compiler/tests/fixtures/output/workers/example_one__launcher.js +++ b/packages/compiler/tests/fixtures/output/workers/example_one__launcher.js @@ -1,12 +1,3 @@ -var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; const SkyrocketMessageIdentifier = '-srwm'; const SkyrocketErrorIdentifier = '-srwme'; function createShell(Global, schema, WorkerMain) { @@ -19,36 +10,34 @@ function createShell(Global, schema, WorkerMain) { const isWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; const worker = new WorkerMain(channel, { isWorker }); let DEF_CACHE = Object.create(null); - function recieve(event) { - return __awaiter(this, arguments, void 0, function* () { - const data = event.data; - if (Array.isArray(data) && data[0] === SkyrocketMessageIdentifier) { - const fieldDef = getFieldDef(data[1]); - switch (fieldDef[0]) { - case 1: // method - try { - const result = yield exec(worker, data[1], data[2]); - return send(result, data[3]); - } - catch (e) { - const result = { - message: e.message, - stack: e.stack, - }; - return send(result, data[3]); - } - case 2: // event - return exec(worker, data[1], data[2]); - case 3: // signal - return exec(worker, data[1], data[2]); - default: - throw new Error(`Unknown field type`); - } - } - else { - channel.onmessage(...arguments); + async function recieve(event) { + const data = event.data; + if (Array.isArray(data) && data[0] === SkyrocketMessageIdentifier) { + const fieldDef = getFieldDef(data[1]); + switch (fieldDef[0]) { + case 1: // method + try { + const result = await exec(worker, data[1], data[2]); + return send(result, data[3]); + } + catch (e) { + const result = { + message: e.message, + stack: e.stack, + }; + return send(result, data[3]); + } + case 2: // event + return exec(worker, data[1], data[2]); + case 3: // signal + return exec(worker, data[1], data[2]); + default: + throw new Error(`Unknown field type`); } - }); + } + else { + channel.onmessage(...arguments); + } } function getFieldDef(name) { let def = DEF_CACHE[name]; diff --git a/packages/compiler/tests/fixtures/output/workers/example_two__launcher.js b/packages/compiler/tests/fixtures/output/workers/example_two__launcher.js index f2e74e5..b6a4527 100644 --- a/packages/compiler/tests/fixtures/output/workers/example_two__launcher.js +++ b/packages/compiler/tests/fixtures/output/workers/example_two__launcher.js @@ -1,12 +1,3 @@ -var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; const SkyrocketMessageIdentifier = '-srwm'; const SkyrocketErrorIdentifier = '-srwme'; function createShell(Global, schema, WorkerMain) { @@ -19,36 +10,34 @@ function createShell(Global, schema, WorkerMain) { const isWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; const worker = new WorkerMain(channel, { isWorker }); let DEF_CACHE = Object.create(null); - function recieve(event) { - return __awaiter(this, arguments, void 0, function* () { - const data = event.data; - if (Array.isArray(data) && data[0] === SkyrocketMessageIdentifier) { - const fieldDef = getFieldDef(data[1]); - switch (fieldDef[0]) { - case 1: // method - try { - const result = yield exec(worker, data[1], data[2]); - return send(result, data[3]); - } - catch (e) { - const result = { - message: e.message, - stack: e.stack, - }; - return send(result, data[3]); - } - case 2: // event - return exec(worker, data[1], data[2]); - case 3: // signal - return exec(worker, data[1], data[2]); - default: - throw new Error(`Unknown field type`); - } - } - else { - channel.onmessage(...arguments); + async function recieve(event) { + const data = event.data; + if (Array.isArray(data) && data[0] === SkyrocketMessageIdentifier) { + const fieldDef = getFieldDef(data[1]); + switch (fieldDef[0]) { + case 1: // method + try { + const result = await exec(worker, data[1], data[2]); + return send(result, data[3]); + } + catch (e) { + const result = { + message: e.message, + stack: e.stack, + }; + return send(result, data[3]); + } + case 2: // event + return exec(worker, data[1], data[2]); + case 3: // signal + return exec(worker, data[1], data[2]); + default: + throw new Error(`Unknown field type`); } - }); + } + else { + channel.onmessage(...arguments); + } } function getFieldDef(name) { let def = DEF_CACHE[name]; diff --git a/packages/compiler/tests/helpers/fixture-builder.js b/packages/compiler/tests/helpers/fixture-builder.js index 6ca1737..a01c929 100644 --- a/packages/compiler/tests/helpers/fixture-builder.js +++ b/packages/compiler/tests/helpers/fixture-builder.js @@ -1,14 +1,20 @@ const path = require('path'); -const Funnel = require('broccoli-funnel'); +const merge = require('broccoli-merge-trees'); const { Builder } = require('broccoli'); const compile = require('../../build/index'); // eslint-disable-line node/no-missing-require module.exports = () => { - const app = new Funnel('tests/fixtures/input'); - const compiledTree = compile(app, { projectRoot: path.resolve('../../') }); - const builder = new Builder(compiledTree); + const compiledTree = compile({ + parentRoot: path.resolve('tests/fixtures/input'), + compilerOptions: { + importPaths: ['app'], + directoryToCompile: 'workers', + node_modules_path: path.resolve('node_modules'), + }, + }); + const builder = new Builder(merge([compiledTree.schemas, compiledTree.workers])); builder.discard = async () => { await builder.cleanup(); diff --git a/packages/ember/index.js b/packages/ember/index.js index db6a605..84f339c 100644 --- a/packages/ember/index.js +++ b/packages/ember/index.js @@ -2,8 +2,7 @@ const fs = require('fs'); const path = require('path'); -const compileSchemas = require('@skyrocketjs/compiler'); -const Funnel = require('broccoli-funnel'); +const compileWorkers = require('@skyrocketjs/compiler'); const merge = require('broccoli-merge-trees'); const BroccoliDebug = require('broccoli-debug'); @@ -14,6 +13,7 @@ module.exports = { this._super.init && this._super.init.apply(this, arguments); this.debugTree = BroccoliDebug.buildDebugCallback(`@skyrocketjs/ember`); this._configuredMinify = false; + this.hasCalculatedForCycle = false; }, included() { @@ -41,41 +41,62 @@ module.exports = { minifyOptions.exclude.push('workers/**__launcher.js'); }, - treeForApp(tree) { - this.treeForPublic(); - if (this.workerTree) { - let schemaTree = this.debugTree( - new Funnel(this.workerTree, { srcDir: 'schemas', destDir: 'schemas', allowEmpty: true }), - 'final-schemas' - ); - return this.debugTree(merge([tree, schemaTree]), 'addon-app-tree'); - } - return tree; + buildWorkerOptions() { + // get babel config from parent + let babelOptions = this.parent.findAddonByName('ember-cli-babel').buildBabelOptions(); + // get worker options from parent + let parentOptions = (this.parent.options = this.parent.options || {}); + let compilerOptions = parentOptions.skyrocketjs || {}; + let parentRoot = this.parent.root; + + compilerOptions.importPaths = compilerOptions.importPaths || []; + compilerOptions.directoryToCompile = compilerOptions.directoryToCompile || 'workers'; + compilerOptions.node_modules_path = compilerOptions.node_modules_path || path.join(parentRoot, 'node_modules'); + + return { + babelOptions, + compilerOptions, + parentRoot, + }; }, - treeForPublic() { + + treeForWorkers() { + // since we call this from both treeForApp and treeForPublic + // we only want to recalc every other time we are called. + if (this.hasCalculatedForCycle === true) { + this.hasCalculatedForCycle = false; + return this.workerTrees; + } + this.hasCalculatedForCycle = true; + + // if the parent project doesn't have workers + // we don't want to pay the cost of this tree let root = this.parent.root; let workersDir = path.join(root, 'workers'); - let appDir = path.join(root, 'app'); - this.workerTree = null; + let hasWorkersDir = fs.existsSync(workersDir); + let hasWorkers = hasWorkersDir && fs.readdirSync(workersDir).length; - if (fs.existsSync(workersDir)) { - let files = fs.readdirSync(workersDir); + if (!hasWorkers) { + this.workerTrees = null; + return; + } + + this.workerTrees = compileWorkers(this.buildWorkerOptions()); + }, - if (files.length) { - let funneled = this.debugTree( - merge([ - new Funnel(appDir, { destDir: 'app', allowEmpty: true }), - new Funnel(workersDir, { destDir: 'workers', allowEmpty: true }), - ]), - 'funneled' - ); - let workerTree = this.debugTree(compileSchemas(funneled, { projectRoot: root }), 'worker-tree'); - this.workerTree = workerTree; - return new Funnel(workerTree, { - srcDir: 'workers', - destDir: 'workers', - }); - } + treeForApp(tree) { + this.treeForWorkers(); + if (this.workerTrees) { + return merge([tree, this.workerTrees.schemas]); + } + return tree; + }, + + treeForPublic() { + this.treeForWorkers(); + if (this.workerTrees) { + return this.workerTrees.workers; } + return; }, }; diff --git a/packages/ember/lib/utils/deep-copy.js b/packages/ember/lib/utils/deep-copy.js new file mode 100644 index 0000000..bb6f7ec --- /dev/null +++ b/packages/ember/lib/utils/deep-copy.js @@ -0,0 +1,53 @@ +module.exports = function deepCopy(obj) { + return _deepCopy(obj, new WeakMap()); +}; + +function isPrimitive(value) { + return typeof value !== 'object' || value === null; +} + +function _deepCopy(oldObject, seen) { + if (Array.isArray(oldObject)) { + return copyArray(oldObject, seen); + } else if (!isPrimitive(oldObject)) { + return copyObject(oldObject, seen); + } else { + return oldObject; + } +} + +function copyObject(oldObject, seen) { + let newObject = {}; + + Object.keys(oldObject).forEach(key => { + let value = oldObject[key]; + let newValue = isPrimitive(value) ? value : seen.get(value); + + if (value && newValue === undefined) { + newValue = newObject[key] = _deepCopy(value, seen); + seen.set(value, newValue); + } + + newObject[key] = newValue; + }); + + return newObject; +} + +function copyArray(oldArray, seen) { + let newArray = []; + + for (let i = 0; i < oldArray.length; i++) { + let value = oldArray[i]; + let newValue = isPrimitive(value) ? value : seen.get(value); + + if (value && newValue === undefined) { + newValue = newArray[i] = _deepCopy(value, seen); + seen.set(value, newValue); + } + + newArray[i] = newValue; + } + + return newArray; +} diff --git a/packages/ember/package.json b/packages/ember/package.json index 3470666..4e1d0a2 100644 --- a/packages/ember/package.json +++ b/packages/ember/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "@skyrocketjs/compiler": "0.0.1-alpha.3", + "@skyrocketjs/service": "0.0.1-alpha.3", "broccoli-debug": "^0.6.5", "broccoli-funnel": "^3.0.3", "broccoli-merge-trees": "^4.2.0", @@ -30,7 +31,6 @@ }, "devDependencies": { "@ember/optional-features": "^1.0.0", - "@skyrocketjs/service": "0.0.1-alpha.3", "broccoli-asset-rev": "^3.0.0", "ember-cli": "~3.18.0", "ember-cli-dependency-checker": "^3.1.0", diff --git a/packages/schema/src/tsconfig.json b/packages/schema/src/tsconfig.json index 4b07826..5953ab4 100644 --- a/packages/schema/src/tsconfig.json +++ b/packages/schema/src/tsconfig.json @@ -10,7 +10,7 @@ "noImplicitAny": true, "noEmitOnError": false, "strictNullChecks": true, - "experimentalDecorators": false, + "experimentalDecorators": true, "noEmit": false, "skipLibCheck": true, "inlineSourceMap": true, diff --git a/packages/service/src/tsconfig.json b/packages/service/src/tsconfig.json index 13415c3..d407121 100644 --- a/packages/service/src/tsconfig.json +++ b/packages/service/src/tsconfig.json @@ -1,16 +1,16 @@ { "compileOnSave": true, "compilerOptions": { - "module": "ES2020", + "module": "ESNext", "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "target": "es6", + "target": "ESNext", "allowJs": false, "moduleResolution": "node", "noImplicitAny": true, "noEmitOnError": false, "strictNullChecks": true, - "experimentalDecorators": false, + "experimentalDecorators": true, "noEmit": false, "skipLibCheck": true, "inlineSourceMap": true, diff --git a/packages/testem-safari-webdriver-launcher/src/driver.js b/packages/testem-safari-webdriver-launcher/src/driver.js index b904af3..1eb5354 100644 --- a/packages/testem-safari-webdriver-launcher/src/driver.js +++ b/packages/testem-safari-webdriver-launcher/src/driver.js @@ -1,11 +1,20 @@ /* eslint-disable no-console */ const { Builder, By, until } = require('selenium-webdriver'); +let exit = process.exit; +process.exit = exitCode => { + console.trace(`Exit Called with exit code ${exitCode}`); + return exit.call(process, exitCode); +}; + async function main() { let driver = await new Builder().forBrowser('safari').build(); let closed = false; - async function close() { + async function close(maybeError) { + if (maybeError) { + console.error(maybeError); + } if (closed) { return; } @@ -13,14 +22,14 @@ async function main() { await driver.sleep(100); await driver.close(); } catch (e) { - console.log('Issue closing driver', e); + console.error(e); } finally { closed = true; } } async function exitHandler(options, exitCode) { - console.log('exit handler called'); + console.log('exit handler called', { options, exitCode }); if (options.cleanup) { await close(); } else if (options.exit) { @@ -29,7 +38,7 @@ async function main() { } //do something when app is closing - process.on('exit', exitHandler.bind(null, { cleanup: true })); + process.on('exit', exitHandler.bind(null, { signal: 'exit', cleanup: true })); [ 'SIGHUP', 'SIGINT', @@ -45,7 +54,7 @@ async function main() { 'SIGTERM', 'uncaughtException', ].forEach(signal => { - process.on(signal, exitHandler.bind(null, { exit: true })); + process.on(signal, exitHandler.bind(null, { signal, exit: true })); }); try { @@ -54,7 +63,7 @@ async function main() { await driver.get(url); await driver.wait( until.elementLocated(By.id('qunit-testresult')), - 5 * 1000, + 60 * 1000, // 1 min 'Timed out waiting for test container', 100 ); @@ -64,26 +73,25 @@ async function main() { try { let result = await driver.findElement(By.id('qunit-testresult')); let text = await result.getText(); - return /[^Running:]/.test(text); + return /[^Running:]/.test(text) && /(\d+) assertions of (\d+) passed, (\d+) failed./.test(text); } catch (e) { return false; } }, - 60 * 60 * 1000, + 60 * 60 * 1000, // 60 min 'Timed Out waiting for test complete', 100 ); await close(); } catch (e) { - console.log('Script Errored', e); - await close(); + await close(e); } } try { main(); } catch (e) { - console.log('Exiting Poorly', e); + console.error(e); process.exit(1); } diff --git a/packages/unpublished_ember-addon-compiler-test/tests/dummy/config/targets.js b/packages/unpublished_ember-addon-compiler-test/tests/dummy/config/targets.js index f143193..dc95733 100644 --- a/packages/unpublished_ember-addon-compiler-test/tests/dummy/config/targets.js +++ b/packages/unpublished_ember-addon-compiler-test/tests/dummy/config/targets.js @@ -1,11 +1,9 @@ 'use strict'; const browsers = ['last 1 Chrome versions', 'last 1 Firefox versions', 'last 1 Safari versions']; +const targetIsIE11 = process.env.TESTEM_CI_LAUNCHER === 'IE'; -const isCI = !!process.env.CI; -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { +if (targetIsIE11) { browsers.push('ie 11'); } diff --git a/packages/unpublished_ember-app-compiler-test/config/targets.js b/packages/unpublished_ember-app-compiler-test/config/targets.js index f143193..dc95733 100644 --- a/packages/unpublished_ember-app-compiler-test/config/targets.js +++ b/packages/unpublished_ember-app-compiler-test/config/targets.js @@ -1,11 +1,9 @@ 'use strict'; const browsers = ['last 1 Chrome versions', 'last 1 Firefox versions', 'last 1 Safari versions']; +const targetIsIE11 = process.env.TESTEM_CI_LAUNCHER === 'IE'; -const isCI = !!process.env.CI; -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { +if (targetIsIE11) { browsers.push('ie 11'); } diff --git a/packages/worker/src/tsconfig.json b/packages/worker/src/tsconfig.json index 7f513b0..dd52898 100644 --- a/packages/worker/src/tsconfig.json +++ b/packages/worker/src/tsconfig.json @@ -1,22 +1,22 @@ { "compileOnSave": true, "compilerOptions": { - "module": "ES2020", + "module": "ESNext", "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "target": "es6", + "target": "ESNext", "allowJs": false, "moduleResolution": "node", "noImplicitAny": true, "noEmitOnError": false, "strictNullChecks": true, - "experimentalDecorators": false, + "experimentalDecorators": true, "noEmit": false, "skipLibCheck": true, "inlineSourceMap": true, "inlineSources": true, "outDir": "../build", - "lib": ["webworker", "es2017", "scripthost", "dom"] + "lib": ["WebWorker", "ESNext", "ScriptHost", "DOM"] }, "files": ["index.ts", "shell/index.ts", "program/index.ts"], "exclude": ["../node_modules/**", "../../../node_modules/**"] diff --git a/yarn.lock b/yarn.lock index e42d28a..b41e690 100644 --- a/yarn.lock +++ b/yarn.lock @@ -144,7 +144,7 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.8.3": +"@babel/helper-module-imports@^7.7.4", "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== @@ -1340,10 +1340,10 @@ is-ci "^2.0.0" npmlog "^4.1.2" -"@lerna/conventional-commits@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" - integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== +"@lerna/conventional-commits@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" + integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== dependencies: "@lerna/validation-error" "3.13.0" conventional-changelog-angular "^5.0.3" @@ -1366,10 +1366,10 @@ fs-extra "^8.1.0" npmlog "^4.1.2" -"@lerna/create@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.21.0.tgz#e813832adf3488728b139e5a75c8b01b1372e62f" - integrity sha512-cRIopzKzE2vXJPmsiwCDMWo4Ct+KTmX3nvvkQLDoQNrrRK7w+3KQT3iiorbj1koD95RsVQA7mS2haWok9SIv0g== +"@lerna/create@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" + integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== dependencies: "@evocateur/pacote" "^9.6.3" "@lerna/child-process" "3.16.5" @@ -1457,13 +1457,13 @@ ssri "^6.0.1" tar "^4.4.8" -"@lerna/github-client@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" - integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== +"@lerna/github-client@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" + integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== dependencies: "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^3.6.1" + "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^16.28.4" git-url-parse "^11.1.2" npmlog "^4.1.2" @@ -1490,10 +1490,10 @@ "@lerna/child-process" "3.16.5" semver "^6.2.0" -"@lerna/import@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.21.0.tgz#87b08f2a2bfeeff7357c6fd8490e638d3cd5b32d" - integrity sha512-aISkL4XD0Dqf5asDaOZWu65jgj8fWUhuQseZWuQe3UfHxav69fTS2YLIngUfencaOSZVOcVCom28YCzp61YDxw== +"@lerna/import@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" + integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== dependencies: "@lerna/child-process" "3.16.5" "@lerna/command" "3.21.0" @@ -1712,10 +1712,10 @@ inquirer "^6.2.0" npmlog "^4.1.2" -"@lerna/publish@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.21.0.tgz#0112393125f000484c3f50caba71a547f91bd7f4" - integrity sha512-JZ+ehZB9UCQ9nqH8Ld/Yqc/If++aK/7XIubkrB9sQ5hf2GeIbmI/BrJpMgLW/e9T5bKrUBZPUvoUN3daVipA5A== +"@lerna/publish@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.0.tgz#7a3fb61026d3b7425f3b9a1849421f67d795c55d" + integrity sha512-8LBeTLBN8NIrCrLGykRu+PKrfrCC16sGCVY0/bzq9TDioR7g6+cY0ZAw653Qt/0Kr7rg3J7XxVNdzj3fvevlwA== dependencies: "@evocateur/libnpmaccess" "^3.1.2" "@evocateur/npm-registry-fetch" "^4.0.0" @@ -1738,7 +1738,7 @@ "@lerna/run-lifecycle" "3.16.2" "@lerna/run-topologically" "3.18.5" "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.21.0" + "@lerna/version" "3.22.0" figgy-pudding "^3.5.1" fs-extra "^8.1.0" npm-package-arg "^6.1.0" @@ -1851,17 +1851,17 @@ dependencies: npmlog "^4.1.2" -"@lerna/version@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.21.0.tgz#5bcc3d2de9eb8f4db18efb0d88973f9a509eccc3" - integrity sha512-nIT3u43fCNj6uSMN1dRxFnF4GhmIiOEqSTkGSjrMU+8kHKwzOqS/6X6TOzklBmCyEZOpF/fLlGqH3BZHnwLDzQ== +"@lerna/version@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.0.tgz#67e1340c1904e9b339becd66429f32dd8ad65a55" + integrity sha512-6uhL6RL7/FeW6u1INEgyKjd5dwO8+IsbLfkfC682QuoVLS7VG6OOB+JmTpCvnuyYWI6fqGh1bRk9ww8kPsj+EA== dependencies: "@lerna/check-working-tree" "3.16.5" "@lerna/child-process" "3.16.5" "@lerna/collect-updates" "3.20.0" "@lerna/command" "3.21.0" - "@lerna/conventional-commits" "3.18.5" - "@lerna/github-client" "3.16.5" + "@lerna/conventional-commits" "3.22.0" + "@lerna/github-client" "3.22.0" "@lerna/gitlab-client" "3.15.0" "@lerna/output" "3.13.0" "@lerna/prerelease-id-from-version" "3.16.0" @@ -1941,10 +1941,10 @@ is-plain-object "^3.0.0" universal-user-agent "^5.0.0" -"@octokit/plugin-enterprise-rest@^3.6.1": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" - integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== "@octokit/plugin-paginate-rest@^1.1.1": version "1.1.2" @@ -2034,6 +2034,14 @@ dependencies: "@types/node" ">= 8" +"@rollup/plugin-babel@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.0.2.tgz#d9351b9545b0c586a193fc99830d4b1a25317ed5" + integrity sha512-GiL7jL+FGppzQ1Sn4y2ER4UYXlgXFFEt+sHm4WJEzQwI76Yf9oy2QDqIvcon6xApZWlik3L8fezRGC6Mj2vRXg== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@rollup/pluginutils" "^3.0.8" + "@rollup/plugin-node-resolve@^8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.0.0.tgz#47cc0775e31b6a531c88a40270377fe899a271cb" @@ -2974,9 +2982,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== babel-code-frame@^6.26.0: version "6.26.0" @@ -4724,9 +4732,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001043: - version "1.0.30001062" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz#d814b648338504b315222ace6f1a533d9a55e390" - integrity sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw== + version "1.0.30001065" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001065.tgz#e8d7fef61cdfd8a7107493ad6bf551a4eb59c68f" + integrity sha512-DDxCLgJ266YnAHQv0jS1wdOaihRFF52Zgmlag39sQJVy2H46oROpJp4hITstqhdB8qnHSrKNoAEkQA9L/oYF9A== capture-exit@^2.0.0: version "2.0.0" @@ -4884,12 +4892,13 @@ clean-css-promise@^0.1.0: clean-css "^3.4.5" pinkie-promise "^2.0.0" -clean-css@4.2.3, clean-css@^3.4.5: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== +clean-css@^3.4.5: + version "3.4.28" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff" + integrity sha1-vxlF6C/ICPVWlebd6uwBQA79A/8= dependencies: - source-map "~0.6.0" + commander "2.8.x" + source-map "0.4.x" clean-up-path@^1.0.0: version "1.0.0" @@ -5058,6 +5067,13 @@ commander@2.12.2: resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" integrity sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA== +commander@2.8.x: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= + dependencies: + graceful-readlink ">= 1.0.0" + commander@^2.20.0, commander@^2.6.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -5888,9 +5904,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.413, electron-to-chromium@^1.3.47: - version "1.3.448" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.448.tgz#682831ecf3ce505231978f7c795a2813740cae7c" - integrity sha512-WOr3SrZ55lUFYugA6sUu3H3ZoxVIH5o3zTSqYS+2DOJJP4hnHmBiD1w432a2YFW/H2G5FIxE6DB06rv+9dUL5g== + version "1.3.451" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.451.tgz#0c075af3e2f06d706670bde0279432802ca8c83f" + integrity sha512-2fvco0F2bBIgqzO8GRP0Jt/91pdrf9KfZ5FsmkYkjERmIJG585cFeFZV4+CO6oTmU3HmCTgfcZuEa7kW8VUh3A== elliptic@^6.0.0, elliptic@^6.5.2: version "6.5.2" @@ -6520,14 +6536,14 @@ ember-source@~3.18.0: silent-error "^1.1.1" ember-template-lint@^2.0.1, ember-template-lint@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-2.7.0.tgz#635653616c613afe2dfe6e42e2fa8a8ac8c2f341" - integrity sha512-UBQNoGMju5sCxAEZDyJwLaIOeavnWBauHajxBafG9IT+zpwwWC9nK/ETiylDqgW+9yvPCTMHLQLxfgTwCJJoPA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-2.8.0.tgz#01ddc6daf9c8497fe5cfcc55cde25f203a7d8bd3" + integrity sha512-tK4aJewdmtVUGSnX/1MR6TuSFAhmIL/CUsUeW33pQsf324l96XzhPP+66G06vjWw8iLW2zK2Rbh5HnEL+IDZsA== dependencies: chalk "^4.0.0" ember-template-recast "^4.1.4" find-up "^4.1.0" - get-stdin "^7.0.0" + get-stdin "^8.0.0" globby "^11.0.0" is-valid-glob "^1.0.0" micromatch "^4.0.2" @@ -7783,10 +7799,10 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" @@ -8100,6 +8116,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -8375,10 +8396,10 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== http-proxy-agent@^2.1.0: version "2.1.0" @@ -8482,9 +8503,9 @@ ignore@^4.0.3, ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1, ignore@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + version "5.1.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.6.tgz#643194ad4bf2712f37852e386b6998eff0db2106" + integrity sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA== immediate@~3.0.5: version "3.0.6" @@ -9061,9 +9082,9 @@ js-tokens@^3.0.2: integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -9265,26 +9286,26 @@ leek@0.0.24: rsvp "^3.0.21" lerna@^3.18.4: - version "3.21.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.21.0.tgz#c81a0f8df45c6b7c9d3fc9fdcd0f846aca2375c6" - integrity sha512-ux8yOwQEgIXOZVUfq+T8nVzPymL19vlIoPbysOP3YA4hcjKlqQIlsjI/1ugBe6b4MF7W4iV5vS3gH9cGqBBc1A== + version "3.22.0" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.0.tgz#da14d08f183ffe6eec566a4ef3f0e11afa621183" + integrity sha512-xWlHdAStcqK/IjKvjsSMHPZjPkBV1lS60PmsIeObU8rLljTepc4Sg/hncw4HWfQxPIewHAUTqhrxPIsqf9L2Eg== dependencies: "@lerna/add" "3.21.0" "@lerna/bootstrap" "3.21.0" "@lerna/changed" "3.21.0" "@lerna/clean" "3.21.0" "@lerna/cli" "3.18.5" - "@lerna/create" "3.21.0" + "@lerna/create" "3.22.0" "@lerna/diff" "3.21.0" "@lerna/exec" "3.21.0" - "@lerna/import" "3.21.0" + "@lerna/import" "3.22.0" "@lerna/info" "3.21.0" "@lerna/init" "3.21.0" "@lerna/link" "3.21.0" "@lerna/list" "3.21.0" - "@lerna/publish" "3.21.0" + "@lerna/publish" "3.22.0" "@lerna/run" "3.21.0" - "@lerna/version" "3.21.0" + "@lerna/version" "3.22.0" import-local "^2.0.0" npmlog "^4.1.2" @@ -11696,7 +11717,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5: version "0.13.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== @@ -11783,9 +11804,9 @@ regjsgen@^0.2.0: integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= regjsgen@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.1.4: version "0.1.5" @@ -12561,7 +12582,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.4.2: +source-map@0.4.x, source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" integrity sha1-66T12pwNyZneaAMti092FzZSA2s= @@ -12573,7 +12594,7 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -12606,9 +12627,9 @@ spawn-args@^0.2.0: integrity sha1-+30L0dcP1DFr2ePew4nmX51jYbs= spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -13858,11 +13879,11 @@ webpack@~4.28: webpack-sources "^1.3.0" websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1"