This is an automated email from the ASF dual-hosted git repository. sushuang pushed a commit to branch typescript in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit ba1639f01f5e12b7e5a3fc00543b8b92f9718035 Author: 100pah <sushuang0...@gmail.com> AuthorDate: Sat Feb 15 11:23:08 2020 +0800 make build tool support ts. And update dependencies. --- .gitignore | 4 +- build/build.js | 275 ++++- build/config.js | 118 +- ...-plugin-ec-lang.js => ec-lang-rollup-plugin.js} | 0 build/pre-publish.js | 342 +++++- ...ec-remove-dev.js => remove-dev-babel-plugin.js} | 44 +- ...c-remove-dev.js => remove-dev-rollup-plugin.js} | 14 +- ...ollup-plugin-ec-remove-dev.js => remove-dev.js} | 51 +- package-lock.json | 1222 +++++++++++++++++++- package.json | 20 +- tsconfig.json | 24 + 11 files changed, 1889 insertions(+), 225 deletions(-) diff --git a/.gitignore b/.gitignore index edf6813..4097609 100644 --- a/.gitignore +++ b/.gitignore @@ -173,7 +173,9 @@ map/tool map/raw theme/thumb /lib +/esm +pre-publish-tmp todo **/*.log *.sublime-workspace -*.sublime-project +*.sublime-project \ No newline at end of file diff --git a/build/build.js b/build/build.js index bd252a2..1be3afd 100755 --- a/build/build.js +++ b/build/build.js @@ -21,15 +21,18 @@ const fsExtra = require('fs-extra'); const fs = require('fs'); -const {resolve} = require('path'); +const nodePath = require('path'); const config = require('./config.js'); const commander = require('commander'); -const {build, watch, color} = require('zrender/build/helper'); -const ecLangPlugin = require('./rollup-plugin-ec-lang'); +const chalk = require('chalk'); +const rollup = require('rollup'); +const ecLangPlugin = require('./ec-lang-rollup-plugin'); const prePublish = require('./pre-publish'); -const recheckDEV = require('zrender/build/babel-plugin-transform-remove-dev').recheckDEV; +const recheckDEV = require('./remove-dev').recheckDEV; +const assert = require('assert'); -function run() { + +async function run() { /** * Tips for `commander`: @@ -148,7 +151,7 @@ function run() { watch(config.createECharts(opt)); } else if (isPrePublish) { - prePublish(); + await prePublish(); } else if (isRelease) { let configs = []; @@ -180,21 +183,19 @@ function run() { config.createDataTool(true) ); - build(configs) - .then(function () { - checkCode(configForCheck); - prePublish(); - }).catch(handleBuildError); + await build(configs); + + checkBundleCode(configForCheck); + + await prePublish(); } else { let cfg = config.createECharts(opt); - build([cfg]) - .then(function () { - if (opt.removeDev) { - checkCode(cfg); - } - }) - .catch(handleBuildError); + await build([cfg]); + + if (opt.removeDev) { + checkBundleCode(cfg); + } } } @@ -207,18 +208,14 @@ function normalizeParams(opt) { } } -function handleBuildError(err) { - console.log(err); -} - -function checkCode(singleConfig) { +function checkBundleCode(singleConfig) { // Make sure __DEV__ is eliminated. let code = fs.readFileSync(singleConfig.output.file, {encoding: 'utf-8'}); if (!code) { throw new Error(`${singleConfig.output.file} is empty`); } recheckDEV(code); - console.log(color('fgGreen', 'dim')('Check code: correct.')); + console.log(chalk.green.dim('Check code: correct.')); } function validateIO(input, output) { @@ -249,7 +246,233 @@ function validateLang(lang, output) { * @return {string} Absolute path. */ function getPath(relativePath) { - return resolve(__dirname, '../', relativePath); + return nodePath.resolve(__dirname, '../', relativePath); +} + +/** + * @param {Array.<Object>} configs A list of rollup configs: + * See: <https://rollupjs.org/#big-list-of-options> + * For example: + * [ + * { + * ...inputOptions, + * output: [outputOptions], + * watch: {chokidar, include, exclude} + * }, + * ... + * ] + */ +async function build(configs) { + + ensureZRenderCode.prepare(); + + for (let singleConfig of configs) { + console.log( + chalk.cyan.dim('\nBundles '), + chalk.cyan(singleConfig.input), + chalk.cyan.dim('=>'), + chalk.cyan(singleConfig.output.file), + chalk.cyan.dim(' ...') + ); + + console.time('rollup build'); + const bundle = await rollup.rollup(singleConfig); + console.timeEnd('rollup build'); + + await bundle.write(singleConfig.output); + + console.log( + chalk.green.dim('Created '), + chalk.green(singleConfig.output.file), + chalk.green.dim(' successfully.') + ); + } + + ensureZRenderCode.clear(); +} + +/** + * @param {Object} singleConfig A single rollup config: + * See: <https://rollupjs.org/#big-list-of-options> + * For example: + * { + * ...inputOptions, + * output: [outputOptions], + * watch: {chokidar, include, exclude} + * } + */ +function watch(singleConfig) { + + // FIXME:TS call `ensureZRenderCode` + let watcher = rollup.watch(singleConfig); + + watcher.on('event', function (event) { + // event.code can be one of: + // START — the watcher is (re)starting + // BUNDLE_START — building an individual bundle + // BUNDLE_END — finished building a bundle + // END — finished building all bundles + // ERROR — encountered an error while bundling + // FATAL — encountered an unrecoverable error + if (event.code !== 'START' && event.code !== 'END') { + console.log( + chalk.blue('[' + getTimeString() + ']'), + chalk.blue.dim('build'), + event.code.replace(/_/g, ' ').toLowerCase() + ); + } + if (event.code === 'ERROR' || event.code === 'FATAL') { + printCodeError(event.error); + } + if (event.code === 'BUNDLE_END') { + printWatchResult(event); + } + if (event.code === 'START') { + ensureZRenderCode.prepare(); + } + if (event.code === 'END' || event.code === 'ERROR' || event.code === 'FATAL') { + ensureZRenderCode.clear(); + } + }); +} + +function printWatchResult(event) { + console.log( + chalk.green.dim('Created'), + chalk.green(event.output.join(', ')), + chalk.green.dim('in'), + chalk.green(event.duration), + chalk.green.dim('ms.') + ); +} + +function printCodeError(error) { + console.log('\n' + error.code); + if (error.code === 'PARSE_ERROR') { + console.log( + 'line', + chalk.cyan(error.loc.line), + 'column', + chalk.cyan(error.loc.column), + 'in', + chalk.cyan(error.loc.file) + ); + } + if (error.frame) { + console.log('\n' + chalk.red(error.frame)); + } + console.log(chalk.red.dim('\n' + error.stack)); +} + +function getTimeString() { + return (new Date()).toLocaleString(); +} + + +// Symbol link do not work currently. So have to copy code manually. +// See: https://github.com/ezolenko/rollup-plugin-typescript2/issues/188 +var ensureZRenderCode = (function () { + + const nodeModulesZr = getPath('./node_modules/zrender'); + // const nodeModulesZrDirTmp = getPath('./node_modules/zrender-dir-tmp'); + const nodeModulesZrSymlinkTmp = getPath('./node_modules/zrender-symlink-tmp'); + const nodeModulesZrSrcDir = getPath('./node_modules/zrender/src'); + const zrSrcDir = getPath('../zrender/src') + + let stats = 'cleared'; + + function doClear() { + if (!fs.existsSync(nodeModulesZrSymlinkTmp) + || !fs.lstatSync(nodeModulesZrSymlinkTmp).isSymbolicLink() + ) { + return; + } + + if (fs.existsSync(nodeModulesZr) + && fs.lstatSync(nodeModulesZr).isDirectory() + ) { + console.log(chalk.blue(`rm -rf dir: ${nodeModulesZr}`)); + // ensure save. + assert(nodeModulesZr.includes('node_modules') && nodeModulesZr.includes('zrender')); + fsExtra.removeSync(nodeModulesZr); + } + + // recover the symbollink so that vs code can continue to visit the zrender source code. + console.log(chalk.blue(`mv symbol link: ${nodeModulesZrSymlinkTmp} => ${nodeModulesZr}`)); + fs.renameSync(nodeModulesZrSymlinkTmp, nodeModulesZr); + } + + return { + prepare: function () { + // Calling guard + assert(stats === 'cleared'); + stats = 'prepared'; + + console.time('ensure zr code cost'); + // In case that the last build terminated manually. + doClear(); + + if (!fs.existsSync(nodeModulesZr) + || !fs.lstatSync(nodeModulesZr).isSymbolicLink() + ) { + return; + } + + if (!fs.existsSync(zrSrcDir) + || !fs.lstatSync(zrSrcDir).isDirectory() + ) { + throw new Error(`${zrSrcDir} does not exist.`); + } + + console.log(chalk.blue(`mv symbol link: ${nodeModulesZr} => ${nodeModulesZrSymlinkTmp}`)); + fs.renameSync(nodeModulesZr, nodeModulesZrSymlinkTmp); + + fsExtra.ensureDirSync(nodeModulesZr); + fsExtra.copySync(zrSrcDir, nodeModulesZrSrcDir); + console.log(chalk.blue(`copied: ${nodeModulesZrSrcDir} => ${zrSrcDir}`)); + + console.timeEnd('ensure zr code cost'); + }, + + clear: function () { + // Calling guard + assert(stats === 'prepared'); + stats = 'cleared'; + + doClear(); + } + } +})(); + + +async function main() { + try { + await run(); + } + catch (err) { + + ensureZRenderCode.clear(); + + console.log(chalk.red('BUILD ERROR!')); + + // rollup parse error. + if (err) { + if (err.loc) { + console.warn(chalk.red(`${err.loc.file} (${err.loc.line}:${err.loc.column})`)); + console.warn(chalk.red(err.message)); + } + if (err.frame) { + console.warn(chalk.red(err.frame)); + } + console.log(chalk.red(err ? err.stack : err)); + + err.id != null && console.warn(chalk.red(`id: ${err.id}`)); + err.hook != null && console.warn(chalk.red(`hook: ${err.hook}`)); + err.code != null && console.warn(chalk.red(`code: ${err.code}`)); + err.plugin != null && console.warn(chalk.red(`plugin: ${err.plugin}`)); + } + // console.log(err); + } } -run(); +main(); diff --git a/build/config.js b/build/config.js index 04f6b3f..8cd69bd 100644 --- a/build/config.js +++ b/build/config.js @@ -17,19 +17,37 @@ * under the License. */ -const nodeResolvePlugin = require('rollup-plugin-node-resolve'); +const assert = require('assert'); +// const nodeResolvePlugin = require('rollup-plugin-node-resolve'); const uglifyPlugin = require('rollup-plugin-uglify'); -const ecRemoveDevPlugin = require('./rollup-plugin-ec-remove-dev'); -const ecLangPlugin = require('./rollup-plugin-ec-lang'); -const {resolve} = require('path'); +const ecRemoveDevPlugin = require('./remove-dev-rollup-plugin'); +const ecLangPlugin = require('./ec-lang-rollup-plugin'); +const nodePath = require('path'); const preamble = require('./preamble'); +const ecDir = nodePath.resolve(__dirname, '..'); +const typescriptPlugin = require('rollup-plugin-typescript2'); -function getPathBasedOnECharts(path) { - return resolve(__dirname, '../', path); -} - -function getPlugins({min, lang, sourcemap, removeDev, addBundleVersion}) { - let plugins = []; +function preparePlugins({min, lang, sourcemap, removeDev, addBundleVersion}, {include, exclude}) { + assert(include); + let plugins = [ + // nodeResolvePlugin(), + typescriptPlugin({ + tsconfig: nodePath.resolve(ecDir, 'tsconfig.json'), + tsconfigOverride: { + // See: https://www.typescriptlang.org/docs/handbook/compiler-options.html + compilerOptions: { + // By default: target === "ES3" or "ES5" ? "CommonJS" : "ES6". + // But rollup don't use CommonJS. + module: 'ES2015', + sourceMap: !!sourcemap, + // Use the esm d.ts + declaration: false + }, + include: include, + exclude: exclude || [] + } + }) + ]; removeDev && plugins.push( ecRemoveDevPlugin({sourcemap}) @@ -39,9 +57,9 @@ function getPlugins({min, lang, sourcemap, removeDev, addBundleVersion}) { ecLangPlugin({lang}) ); - plugins.push( - nodeResolvePlugin() - ); + // plugins.push( + // nodeResolvePlugin() + // ); addBundleVersion && plugins.push({ outro: function () { @@ -93,30 +111,57 @@ exports.createECharts = function (opt = {}) { if (input != null || output != null) { // Based on process.cwd(); - input = resolve(input); - output = resolve(output); + input = nodePath.resolve(input); + output = nodePath.resolve(output); } else { - input = getPathBasedOnECharts(`./echarts${srcType}.js`); - output = getPathBasedOnECharts(`dist/echarts${postfixLang}${postfixType}${postfixMin}.js`); + input = nodePath.resolve(ecDir, `echarts${srcType}.ts`); + output = nodePath.resolve(ecDir, `dist/echarts${postfixLang}${postfixType}${postfixMin}.js`); } return { - plugins: getPlugins(opt), + plugins: preparePlugins(opt, { + include: [ + nodePath.resolve(ecDir, 'src/**/*.ts'), + nodePath.resolve(ecDir, 'echarts*.ts'), + // nodePath.resolve(ecDir, '/Users/s/sushuangwork/met/act/tigall/echarts/zrender/src/**/*.ts') + // nodePath.resolve(ecDir, '../zrender/src/**/*.ts') + ] + }), + + // external: ['zrender'], + // external: id => ['zrender'].includes(id), + input: input, - legacy: true, // Support IE8- + // FIXME ??? ie8 support removed since rollup 0.60 + // legacy: true, // Support IE8- + + // onwarn ({loc, frame, message}) { + // if (loc) { + // console.warn(`${loc.file} (${loc.line}:${loc.column}) ${message}`); + // if (frame) { + // console.warn(frame); + // } + // } + // else { + // console.warn(message); + // } + // }, + output: { name: 'echarts', format: format, sourcemap: sourcemap, - legacy: true, // Must be declared both in inputOptions and outputOptions. + // legacy: true, // Must be declared both in inputOptions and outputOptions. file: output }, watch: { include: [ - getPathBasedOnECharts('./src/**'), - getPathBasedOnECharts('./echarts*.js'), - getPathBasedOnECharts('../zrender/src/**') + nodePath.resolve(ecDir, 'src/**'), + nodePath.resolve(ecDir, 'echarts*.ts'), + // FIXME + // zrender code watch is broken until "ensure zr code" can be removed. + // nodePath.resolve(ecDir, '../zrender/src/**/*.ts') ] } }; @@ -127,10 +172,15 @@ exports.createECharts = function (opt = {}) { */ exports.createBMap = function (min) { let postfix = min ? '.min' : ''; + let input = nodePath.resolve(ecDir, `extension-src/bmap/bmap.ts`); return { - plugins: getPlugins({min}), - input: getPathBasedOnECharts(`./extension-src/bmap/bmap.js`), + plugins: preparePlugins({min}, { + include: [ + nodePath.resolve(ecDir, 'extension-src/bmap/**/*.ts') + ] + }), + input: input, legacy: true, // Support IE8- external: ['echarts'], output: { @@ -142,10 +192,10 @@ exports.createBMap = function (min) { // For UMD `global.echarts` echarts: 'echarts' }, - file: getPathBasedOnECharts(`dist/extension/bmap${postfix}.js`) + file: nodePath.resolve(ecDir, `dist/extension/bmap${postfix}.js`) }, watch: { - include: [getPathBasedOnECharts('./extension-src/bmap/**')] + include: [nodePath.resolve(ecDir, 'extension-src/bmap/**')] } }; }; @@ -155,9 +205,15 @@ exports.createBMap = function (min) { */ exports.createDataTool = function (min) { let postfix = min ? '.min' : ''; + let input = nodePath.resolve(ecDir, `extension-src/dataTool/index.ts`); + return { - plugins: getPlugins({min}), - input: getPathBasedOnECharts(`./extension-src/dataTool/index.js`), + plugins: preparePlugins({min}, { + include: [ + nodePath.resolve(ecDir, 'extension-src/dataTool/**/*.ts') + ] + }), + input: input, legacy: true, // Support IE8- external: ['echarts'], output: { @@ -169,10 +225,10 @@ exports.createDataTool = function (min) { // For UMD `global.echarts` echarts: 'echarts' }, - file: getPathBasedOnECharts(`dist/extension/dataTool${postfix}.js`) + file: nodePath.resolve(ecDir, `dist/extension/dataTool${postfix}.js`) }, watch: { - include: [getPathBasedOnECharts('./extension-src/dataTool/**')] + include: [nodePath.resolve(ecDir, 'extension-src/dataTool/**')] } }; }; diff --git a/build/rollup-plugin-ec-lang.js b/build/ec-lang-rollup-plugin.js similarity index 100% rename from build/rollup-plugin-ec-lang.js rename to build/ec-lang-rollup-plugin.js diff --git a/build/pre-publish.js b/build/pre-publish.js index 3b87cdb..1d58395 100644 --- a/build/pre-publish.js +++ b/build/pre-publish.js @@ -18,80 +18,312 @@ */ /** + * [Create CommonJS files]: * Compatible with prevoius folder structure: `echarts/lib` exists in `node_modules` * (1) Build all files to CommonJS to `echarts/lib`. * (2) Remove __DEV__. * (3) Mount `echarts/src/export.js` to `echarts/lib/echarts.js`. + * + * [Create ESModule files]: + * Build all files to CommonJS to `echarts/esm`. */ -const path = require('path'); +const nodePath = require('path'); +const assert = require('assert'); +const fs = require('fs'); const fsExtra = require('fs-extra'); -const {color, travelSrcDir, prePulishSrc} = require('zrender/build/helper'); - -const ecDir = path.resolve(__dirname, '..'); -const srcDir = path.resolve(__dirname, '../src'); -const extensionSrcDir = path.resolve(__dirname, '../extension-src'); -const extensionDir = path.resolve(__dirname, '../extension'); -const libDir = path.resolve(__dirname, '../lib'); +const chalk = require('chalk'); +const ts = require('typescript'); +const globby = require('globby'); +const removeDEVUtil = require('./remove-dev'); const preamble = require('./preamble'); +const {promisify} = require('util'); +const readFileAsync = promisify(fs.readFile); +const writeFileAsync = promisify(fs.writeFile); +const ecDir = nodePath.resolve(__dirname, '..'); +const tmpDir = nodePath.resolve(ecDir, 'pre-publish-tmp'); -module.exports = function () { +const tsConfig = readTSConfig(); - fsExtra.removeSync(libDir); - fsExtra.ensureDirSync(libDir); +const autoGeneratedFileAlert = ` - travelSrcDir(srcDir, ({fileName, relativePath, absolutePath}) => { - prePulishSrc({ - inputPath: absolutePath, - outputPath: path.resolve(libDir, relativePath, fileName), - transform: transform, - preamble: preamble.js - }); - }); +/** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ - travelSrcDir(extensionSrcDir, ({fileName, relativePath, absolutePath}) => { - prePulishSrc({ - inputPath: absolutePath, - outputPath: path.resolve(extensionDir, relativePath, fileName), - transform: transform, - preamble: preamble.js - }); - }); +`; - prePulishSrc({ - inputPath: path.resolve(ecDir, 'echarts.all.js'), - outputPath: path.resolve(ecDir, 'index.js'), - preamble: preamble.js - }); - prePulishSrc({ - inputPath: path.resolve(ecDir, 'echarts.common.js'), - outputPath: path.resolve(ecDir, 'index.common.js'), - preamble: preamble.js - }); - prePulishSrc({ - inputPath: path.resolve(ecDir, 'echarts.simple.js'), - outputPath: path.resolve(ecDir, 'index.simple.js'), - preamble: preamble.js +const mainSrcGlobby = { + patterns: [ + 'src/**/*.ts', + 'echarts.all.ts', + 'echarts.blank.ts', + 'echarts.common.ts', + 'echarts.simple.ts' + ], + cwd: ecDir +}; +const extensionSrcGlobby = { + patterns: [ + 'extension-src/**/*.ts' + ], + cwd: ecDir +}; +const extensionSrcDir = nodePath.resolve(ecDir, 'extension-src'); +const extensionCJSDir = nodePath.resolve(ecDir, 'extension'); +const extensionESMDir = nodePath.resolve(ecDir, 'extension-esm'); + +const compileWorkList = [ + { + logLabel: 'main ts -> js-cjs', + compilerOptionsOverride: { + module: 'CommonJS', + // `rootDir` Only use to control the output + // directory structure with --outDir. + rootDir: ecDir, + outDir: tmpDir + }, + srcGlobby: mainSrcGlobby, + transformOptions: { + filesGlobby: {patterns: ['**/*.js'], cwd: tmpDir}, + preamble: preamble.js, + removeDEV: true, + cjsEntryCompat: cjsEntryCompat + }, + before: async function () { + fsExtra.removeSync(tmpDir); + fsExtra.removeSync(nodePath.resolve(ecDir, 'lib')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'index.js')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'index.blank.js')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'index.common.js')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'index.simple.js')); + }, + after: async function () { + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.all.js'), nodePath.resolve(ecDir, 'index.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.blank.js'), nodePath.resolve(ecDir, 'index.blank.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.common.js'), nodePath.resolve(ecDir, 'index.common.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.simple.js'), nodePath.resolve(ecDir, 'index.simple.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'src'), nodePath.resolve(ecDir, 'lib')); + fsExtra.removeSync(tmpDir); + } + }, + { + logLabel: 'main ts -> js-esm', + compilerOptionsOverride: { + module: 'ES2015', + rootDir: ecDir, + outDir: tmpDir + }, + srcGlobby: mainSrcGlobby, + transformOptions: { + filesGlobby: {patterns: ['**/*.js'], cwd: tmpDir}, + preamble: preamble.js, + // esm do not remove DEV. Keep it them same with + // the previous state before migrate to ts. + removeDEV: false + }, + before: async function () { + fsExtra.removeSync(tmpDir); + fsExtra.removeSync(nodePath.resolve(ecDir, 'esm')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'echarts.all.js')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'echarts.blank.js')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'echarts.common.js')); + fsExtra.removeSync(nodePath.resolve(ecDir, 'echarts.simple.js')); + }, + after: async function () { + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.all.js'), nodePath.resolve(ecDir, 'echarts.all.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.blank.js'), nodePath.resolve(ecDir, 'echarts.blank.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.common.js'), nodePath.resolve(ecDir, 'echarts.common.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'echarts.simple.js'), nodePath.resolve(ecDir, 'echarts.simple.js')); + fs.renameSync(nodePath.resolve(tmpDir, 'src'), nodePath.resolve(ecDir, 'esm')); + fsExtra.removeSync(tmpDir); + } + }, + { + logLabel: 'extension ts -> js-cjs', + compilerOptions: { + module: 'CommonJS', + rootDir: extensionSrcDir, + outDir: extensionCJSDir + }, + srcGlobby: extensionSrcGlobby, + transformOptions: { + filesGlobby: {patterns: ['**/*.js'], cwd: extensionCJSDir}, + preamble: preamble.js, + removeDEV: true, + cjsEntryCompat: cjsEntryCompat + }, + before: async function () { + fsExtra.removeSync(extensionCJSDir); + } + }, + { + logLabel: 'extension ts -> js-esm', + compilerOptions: { + module: 'ES2015', + rootDir: extensionSrcDir, + outDir: extensionESMDir + }, + srcGlobby: extensionSrcGlobby, + transformOptions: { + filesGlobby: {patterns: ['**/*.js'], cwd: extensionESMDir}, + preamble: preamble.js, + removeDEV: false + }, + before: async function () { + fsExtra.removeSync(extensionESMDir); + } + } +]; + + + +/** + * @public + */ +module.exports = async function () { + + for (let { + logLabel, compilerOptionsOverride, srcGlobby, + transformOptions, before, after + } of compileWorkList) { + + process.stdout.write(chalk.green.dim(`[${logLabel}]: compiling ...`)); + + before && await before(); + + let srcPathList = await readFilePaths(srcGlobby); + + await tsCompile(compilerOptionsOverride, srcPathList); + + process.stdout.write(chalk.green.dim(` done \n`)); + + process.stdout.write(chalk.green.dim(`[${logLabel}]: transforming ...`)); + + await transformCode(transformOptions); + + after && await after(); + + process.stdout.write(chalk.green.dim(` done \n`)); + } + + console.log(chalk.green.bright('All done.')); +}; + +async function tsCompile(compilerOptionsOverride, srcPathList) { + assert( + compilerOptionsOverride + && compilerOptionsOverride.module + && compilerOptionsOverride.rootDir + && compilerOptionsOverride.outDir + ); + + let compilerOptions = { + ...tsConfig.compilerOptions, + ...compilerOptionsOverride, + sourceMap: false, + // Use the esm d.ts + declaration: false + }; + + // Must do it. becuase the value in tsconfig.json might be different from the inner representation. + // For example: moduleResolution: "NODE" => moduleResolution: 2 + const {options, errors} = ts.convertCompilerOptionsFromJson(compilerOptions, ecDir); + if (errors.length) { + let errMsg = 'tsconfig parse failed: ' + + errors.map(error => error.messageText).join('. ') + + '\n compilerOptions: \n' + JSON.stringify(compilerOptions, null, 4); + assert(false, errMsg); + } + + // See: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API + let program = ts.createProgram(srcPathList, options); + let emitResult = program.emit(); + + let allDiagnostics = ts + .getPreEmitDiagnostics(program) + .concat(emitResult.diagnostics); + + allDiagnostics.forEach(diagnostic => { + if (diagnostic.file) { + let {line, character} = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start); + let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'); + console.log(chalk.red(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`)); + } + else { + console.log(chalk.red(ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'))); + } }); + assert(!emitResult.emitSkipped, 'ts compile failed.'); +} + +/** + * @param {Object} transformOptions + * @param {Object} transformOptions.filesGlobby {patterns: string[], cwd: string} + * @param {string} [transformOptions.preamble] See './preamble.js' + * @param {Function} [transformOptions.cjsEntryCompat] + * @param {boolean} [transformOptions.removeDEV] + */ +async function transformCode({filesGlobby, preamble, cjsEntryCompat, removeDEV}) { + + let filePaths = readFilePaths(filesGlobby); - function transform({code, inputPath, outputPath}) { - if (inputPath === path.resolve(ecDir, 'src/echarts.js')) { - // Using `echarts/echarts.blank.js` to overwrite `echarts/lib/echarts.js` - // for including exports API. - code += ` + await Promise.all(filePaths.map(async filePath => { + let code = await readFileAsync(filePath, {encoding: 'utf8'}); + + if (removeDEV) { + let result = removeDEVUtil.transform(code, false); + code = result.code; + removeDEVPlugin.recheckDEV(code); + } + + if (cjsEntryCompat) { + code = cjsEntryCompat({code, filePath}); + } + + code = autoGeneratedFileAlert + code; + + if (preamble) { + code = preamble + code; + } + + await writeFileAsync(filePath, code, {encoding: 'utf8'}); + })); +} + +function cjsEntryCompat({code, filePath}) { + if (filePath === nodePath.resolve(ecDir, 'src/echarts.js')) { + // For backward compat. + // Using `echarts/echarts.blank.js` to overwrite `echarts/lib/echarts.js` + // for including exports API. + code += ` var ___ec_export = require("./export"); (function () { - for (var key in ___ec_export) { - if (___ec_export.hasOwnProperty(key)) { - exports[key] = ___ec_export[key]; - } +for (var key in ___ec_export) { + if (___ec_export.hasOwnProperty(key)) { + exports[key] = ___ec_export[key]; } +} })();`; - } - - return code; } - console.log(color('fgGreen', 'bright')('All done.')); -}; + return code; +} + +async function readFilePaths({patterns, cwd}) { + assert(patterns && cwd); + return ( + await globby(patterns, {cwd}) + ).map( + srcPath => nodePath.resolve(cwd, srcPath) + ); +} + +function readTSConfig() { + // tsconfig.json may have comment string, which is invalid if + // using `require('tsconfig.json'). So we use a loose parser. + let filePath = nodePath.resolve(ecDir, 'tsconfig.json'); + const tsConfigText = fs.readFileSync(filePath, {encoding: 'utf8'}); + return (new Function(`return ( ${tsConfigText} )`))(); +} diff --git a/build/rollup-plugin-ec-remove-dev.js b/build/remove-dev-babel-plugin.js similarity index 53% copy from build/rollup-plugin-ec-remove-dev.js copy to build/remove-dev-babel-plugin.js index a38ebbb..884e630 100644 --- a/build/rollup-plugin-ec-remove-dev.js +++ b/build/remove-dev-babel-plugin.js @@ -17,38 +17,20 @@ * under the License. */ -/** - * Remove the code of `if (__DEV__) { ... }`. - * - * Usage: - * - * import ecRemoveDevPlugin from 'echats/build/rollup-plugin-ec-remove-dev'; - * let rollupConfig = { - * plugins: [ - * ecRemoveDevPlugin(), - * ... - * ] - * }; - */ - -const babel = require('@babel/core'); -const removeDEVPlugin = require('zrender/build/babel-plugin-transform-remove-dev'); - -/** - * @param {Object} [opt] - * @param {Object} [opt.sourcemap] - */ -module.exports = function ({sourcemap} = {}) { - +module.exports = function ({types, template}, options) { return { - transform: function (sourceCode) { - - let {code, map} = babel.transform(sourceCode, { - plugins: [removeDEVPlugin], - sourceMaps: sourcemap - }); - - return {code, map}; + visitor: { + IfStatement: { + exit(path) { + removeDEV(path); + } + } } }; }; + +function removeDEV(path) { + if (path.node.test.name === '__DEV__') { + path.remove(); + } +} diff --git a/build/rollup-plugin-ec-remove-dev.js b/build/remove-dev-rollup-plugin.js similarity index 77% copy from build/rollup-plugin-ec-remove-dev.js copy to build/remove-dev-rollup-plugin.js index a38ebbb..f07ff23 100644 --- a/build/rollup-plugin-ec-remove-dev.js +++ b/build/remove-dev-rollup-plugin.js @@ -31,24 +31,18 @@ * }; */ -const babel = require('@babel/core'); -const removeDEVPlugin = require('zrender/build/babel-plugin-transform-remove-dev'); +const removeDEV = require('./remove-dev'); /** * @param {Object} [opt] - * @param {Object} [opt.sourcemap] + * @param {boolean} [opt.sourcemap] */ module.exports = function ({sourcemap} = {}) { return { transform: function (sourceCode) { - - let {code, map} = babel.transform(sourceCode, { - plugins: [removeDEVPlugin], - sourceMaps: sourcemap - }); - - return {code, map}; + return removeDEV.transform(sourceCode, sourcemap); } }; }; + diff --git a/build/rollup-plugin-ec-remove-dev.js b/build/remove-dev.js similarity index 53% rename from build/rollup-plugin-ec-remove-dev.js rename to build/remove-dev.js index a38ebbb..18a1937 100644 --- a/build/rollup-plugin-ec-remove-dev.js +++ b/build/remove-dev.js @@ -17,38 +17,33 @@ * under the License. */ -/** - * Remove the code of `if (__DEV__) { ... }`. - * - * Usage: - * - * import ecRemoveDevPlugin from 'echats/build/rollup-plugin-ec-remove-dev'; - * let rollupConfig = { - * plugins: [ - * ecRemoveDevPlugin(), - * ... - * ] - * }; - */ - const babel = require('@babel/core'); -const removeDEVPlugin = require('zrender/build/babel-plugin-transform-remove-dev'); +const removeDEVBabelPlugin = require('./remove-dev-babel-plugin'); /** - * @param {Object} [opt] - * @param {Object} [opt.sourcemap] + * @param {string} sourceCode + * @param {boolean} sourcemap + * @return {Object} {code: string, map: string} */ -module.exports = function ({sourcemap} = {}) { - - return { - transform: function (sourceCode) { +module.exports.transform = function (sourceCode, sourcemap) { + let {code, map} = babel.transformSync(sourceCode, { + plugins: [removeDEVBabelPlugin], + sourceMaps: sourcemap + }); - let {code, map} = babel.transform(sourceCode, { - plugins: [removeDEVPlugin], - sourceMaps: sourcemap - }); + return {code, map}; +}; - return {code, map}; - } - }; +/** + * @param {string} code + * @throws {Error} If check failed. + */ +module.exports.recheckDEV = function (code) { + let result = code.match(/.if\s*\([^()]*__DEV__/); + if (result + && result[0].indexOf('`if') < 0 + && result[0].indexOf('if (typeof __DEV__') < 0 + ) { + throw new Error('__DEV__ is not removed.'); + } }; diff --git a/package-lock.json b/package-lock.json index f18660a..57c236e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -274,6 +274,28 @@ "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/parser": { @@ -314,11 +336,31 @@ "js-tokens": "^3.0.0" } }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -388,6 +430,28 @@ "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@jest/core": { @@ -424,6 +488,28 @@ "rimraf": "^2.5.4", "slash": "^2.0.0", "strip-ansi": "^5.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@jest/environment": { @@ -478,6 +564,17 @@ "string-length": "^2.0.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -497,6 +594,15 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -566,11 +672,31 @@ "write-file-atomic": "2.4.1" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -585,6 +711,142 @@ "@types/yargs": "^13.0.0" } }, + "@microsoft/api-extractor": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.7.2.tgz", + "integrity": "sha512-W75kcjWlONyB9kQKYAfSMiG3v2JMGlgUihny8PucZqdRatcYADeQiEcX5qE5sWdNRHD/J+5INiwlooZDd82sDQ==", + "dev": true, + "requires": { + "@microsoft/api-extractor-model": "7.7.2", + "@microsoft/node-core-library": "3.18.2", + "@microsoft/ts-command-line": "4.3.7", + "@microsoft/tsdoc": "0.12.14", + "colors": "~1.2.1", + "lodash": "~4.17.15", + "resolve": "1.8.1", + "source-map": "~0.6.1", + "typescript": "~3.7.2" + }, + "dependencies": { + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@microsoft/api-extractor-model": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.7.2.tgz", + "integrity": "sha512-USwWUPV3YLS8ZOS11vFh3nzEWXC2d8OZJ6CGp0nRnCXtbqmKqAq4Jg9J5gs1PCemo7JQEbzbHGGwycC0DbRJqw==", + "dev": true, + "requires": { + "@microsoft/node-core-library": "3.18.2", + "@microsoft/tsdoc": "0.12.14" + } + }, + "@microsoft/node-core-library": { + "version": "3.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.18.2.tgz", + "integrity": "sha512-IRoRmLwNvrR0rTNavYlfNObz9pr4Epo8Hd//0SNptt7adOySd735ur7YBO7SzafeijHsD3/dC4PXLLwhIsMU7Q==", + "dev": true, + "requires": { + "@types/node": "8.10.54", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "jju": "~1.4.0", + "semver": "~5.3.0", + "timsort": "~0.3.0", + "z-schema": "~3.18.3" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "@microsoft/ts-command-line": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@microsoft/ts-command-line/-/ts-command-line-4.3.7.tgz", + "integrity": "sha512-dl7j5E4Ly4vin0dFRNyDEmslpqLTeFkSvWi1Ux2OhTXbORpaRm2qivTQzUgbPSh8Mtc1LSZGekqEMNl0e0OMNw==", + "dev": true, + "requires": { + "@types/argparse": "1.0.33", + "argparse": "~1.0.9", + "colors": "~1.2.1" + } + }, + "@microsoft/tsdoc": { + "version": "0.12.14", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.14.tgz", + "integrity": "sha512-518yewjSga1jLdiLrcmpMFlaba5P+50b0TWNFUpC+SL9Yzf0kMi57qw+bMl+rQ08cGqH1vLx4eg9YFUbZXgZ0Q==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@types/argparse": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.33.tgz", + "integrity": "sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ==", + "dev": true + }, "@types/babel__core": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", @@ -678,6 +940,24 @@ } } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/estree": { + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.42.tgz", + "integrity": "sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", @@ -703,6 +983,18 @@ "@types/istanbul-lib-report": "*" } }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "dev": true + }, + "@types/node": { + "version": "8.10.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz", + "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==", + "dev": true + }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -724,6 +1016,130 @@ "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.15.0.tgz", + "integrity": "sha512-XRJFznI5v4K1WvIrWmjFjBAdQWaUTz4xJEdqR7+wAFsv6Q9dP3mOlE6BMNT3pdlp9eF1+bC5m5LZTmLMqffCVw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.15.0", + "eslint-utils": "^1.4.3", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.15.0.tgz", + "integrity": "sha512-Qkxu5zndY5hqlcQkmA88gfLvqQulMpX/TN91XC7OuXsRf4XG5xLGie0sbpX97o/oeccjeZYRMipIsjKk/tjDHA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.15.0", + "eslint-scope": "^5.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.15.0.tgz", + "integrity": "sha512-L6Pog+w3VZzXkAdyqA0VlwybF8WcwZX+mufso86CMxSdWmcizJ38lgBdpqTbc9bo92iyi0rOvmATKiwl+amjxg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash.unescape": "4.0.1", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.18.0.tgz", + "integrity": "sha512-J6MopKPHuJYmQUkANLip7g9I82ZLe1naCbxZZW3O2sIxTiq/9YYoOELEKY7oPg0hJ0V/AQ225h2z0Yp+RRMXhw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.18.0", + "eslint-scope": "^5.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.18.0.tgz", + "integrity": "sha512-SJJPxFMEYEWkM6pGfcnjLU+NJIPo+Ko1QrCBL+i0+zV30ggLD90huEmMMhKLHBpESWy9lVEeWlQibweNQzyc+A==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.18.0", + "@typescript-eslint/typescript-estree": "2.18.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.18.0.tgz", + "integrity": "sha512-gVHylf7FDb8VSi2ypFuEL3hOtoC4HkZZ5dOjXvVjoyKdRrvXAOPSzpNRnKMfaUUEiSLP8UF9j9X9EDLxC0lfZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "abab": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", @@ -942,6 +1358,12 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -963,15 +1385,6 @@ "safer-buffer": "~2.1.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -1033,6 +1446,28 @@ "babel-preset-jest": "^24.9.0", "chalk": "^2.4.2", "slash": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "babel-plugin-istanbul": { @@ -1326,14 +1761,40 @@ "dev": true }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "chardet": { @@ -1479,6 +1940,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1494,6 +1961,12 @@ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -1770,6 +2243,23 @@ "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2068,11 +2558,31 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "strip-json-comments": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -2368,6 +2878,73 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fast-glob": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", + "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -2389,6 +2966,15 @@ "punycode": "^1.3.2" } }, + "fastq": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", + "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "dev": true, + "requires": { + "reusify": "^1.0.0" + } + }, "fb-watchman": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", @@ -2439,6 +3025,71 @@ } } }, + "find-cache-dir": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", + "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -3221,6 +3872,34 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globby": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", + "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, "graceful-fs": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", @@ -3479,6 +4158,28 @@ "string-width": "^2.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "invariant": { @@ -3862,6 +4563,28 @@ "prompts": "^2.0.1", "realpath-native": "^1.1.0", "yargs": "^13.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" } } } @@ -3912,6 +4635,17 @@ "realpath-native": "^1.1.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -3925,6 +4659,15 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -3938,6 +4681,28 @@ "diff-sequences": "^24.9.0", "jest-get-type": "^24.9.0", "pretty-format": "^24.9.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-docblock": { @@ -3960,6 +4725,28 @@ "jest-get-type": "^24.9.0", "jest-util": "^24.9.0", "pretty-format": "^24.9.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-environment-jsdom": { @@ -4162,6 +4949,28 @@ "jest-util": "^24.9.0", "pretty-format": "^24.9.0", "throat": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-leak-detector": { @@ -4184,6 +4993,28 @@ "jest-diff": "^24.9.0", "jest-get-type": "^24.9.0", "pretty-format": "^24.9.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-message-util": { @@ -4200,6 +5031,28 @@ "micromatch": "^3.1.10", "slash": "^2.0.0", "stack-utils": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-mock": { @@ -4234,6 +5087,28 @@ "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", "realpath-native": "^1.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-resolve-dependencies": { @@ -4272,6 +5147,28 @@ "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-runtime": { @@ -4305,6 +5202,17 @@ "yargs": "^13.3.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -4318,6 +5226,15 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -4358,6 +5275,26 @@ "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -4381,11 +5318,31 @@ "source-map": "^0.6.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -4401,6 +5358,28 @@ "jest-get-type": "^24.9.0", "leven": "^3.1.0", "pretty-format": "^24.9.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-watcher": { @@ -4416,6 +5395,28 @@ "chalk": "^2.0.1", "jest-util": "^24.9.0", "string-length": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest-worker": { @@ -4439,6 +5440,12 @@ } } }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4705,12 +5712,30 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4783,6 +5808,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5471,6 +6502,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -5873,6 +6910,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -5899,10 +6942,23 @@ } }, "rollup": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.50.0.tgz", - "integrity": "sha512-7RqCBQ9iwsOBPkjYgoIaeUij606mSkDMExP0NT7QDI3bqkHYQHrQ83uoNIXwPcQm/vP2VbsUz3kiyZZ1qPlLTQ==", - "dev": true + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.28.0.tgz", + "integrity": "sha512-v2J/DmQi9+Nf6frGqzwZRvbiuTTrqH0yzoUF4Eybf8sONT4UpLZzJYnYzW96Zm9X1+4SJmijfnFBWCzHDAXYnQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + } + } }, "rollup-plugin-commonjs": { "version": "8.4.1", @@ -5929,13 +6985,51 @@ "resolve": "^1.1.6" } }, + "rollup-plugin-typescript2": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.25.3.tgz", + "integrity": "sha512-ADkSaidKBovJmf5VBnZBZe+WzaZwofuvYdzGAKTN/J4hN7QJCFYAq7IrH9caxlru6T5qhX41PNFS1S4HqhsGQg==", + "dev": true, + "requires": { + "find-cache-dir": "^3.0.0", + "fs-extra": "8.1.0", + "resolve": "1.12.0", + "rollup-pluginutils": "2.8.1", + "tslib": "1.10.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, "rollup-plugin-uglify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz", - "integrity": "sha1-Z7N60e/a+9g69MNrQMGJ7khmyWk=", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.4.tgz", + "integrity": "sha512-ddgqkH02klveu34TF0JqygPwZnsbhHVI6t8+hGTcYHngPkQb5MIHI0XiztXIN/d6V9j+efwHAqEL7LspSxQXGw==", "dev": true, "requires": { - "uglify-js": "^3.0.9" + "@babel/code-frame": "^7.0.0", + "jest-worker": "^24.0.0", + "serialize-javascript": "^2.1.2", + "uglify-js": "^3.4.9" } }, "rollup-pluginutils": { @@ -5970,6 +7064,12 @@ "is-promise": "^2.1.0" } }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "rxjs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", @@ -6044,6 +7144,12 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, "serve-handler": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.1.tgz", @@ -6621,12 +7727,20 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + } } }, "symbol-tree": { @@ -6721,6 +7835,12 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -6838,6 +7958,15 @@ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -6862,6 +7991,12 @@ "prelude-ls": "~1.1.2" } }, + "typescript": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", + "dev": true + }, "uglify-js": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", @@ -6898,6 +8033,12 @@ "set-value": "^2.0.1" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -6973,15 +8114,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7020,6 +8152,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "validator": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", + "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -7264,6 +8402,18 @@ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", "dev": true }, + "z-schema": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.4.tgz", + "integrity": "sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw==", + "dev": true, + "requires": { + "commander": "^2.7.1", + "lodash.get": "^4.0.0", + "lodash.isequal": "^4.0.0", + "validator": "^8.0.0" + } + }, "zrender": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/zrender/-/zrender-4.2.0.tgz", diff --git a/package.json b/package.json index 6350fa8..10ccec3 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "url": "https://github.com/apache/incubator-echarts.git" }, "scripts": { - "release": "node build/build.js --release", + "prepublish": "node build/build.js --prepublish", "build": "node build/build.js", - "watch": "node build/build.js -w", + "watch": "node build/build.js --watch", + "release": "node build/build.js --release", "help": "node build/build.js --help", - "prepublish": "node build/build.js --prepublish", "test:visual": "node test/runTest/server.js", "test:visual:report": "node test/runTest/genReport.js", "test": "node build/build.js --prepublish && jest --config test/ut/jest.config.js", @@ -35,8 +35,11 @@ "@babel/helper-simple-access": "7.0.0-beta.31", "@babel/template": "7.0.0-beta.31", "@babel/types": "7.0.0-beta.31", - "assert": "1.4.1", + "@microsoft/api-extractor": "7.7.2", + "@typescript-eslint/eslint-plugin": "^2.15.0", + "@typescript-eslint/parser": "^2.18.0", "canvas": "^2.6.0", + "chalk": "^3.0.0", "commander": "2.11.0", "coordtransform": "2.0.2", "escodegen": "1.8.0", @@ -45,6 +48,7 @@ "estraverse": "4.1.1", "fs-extra": "0.26.7", "glob": "7.0.0", + "globby": "11.0.0", "jest": "^24.9.0", "jest-canvas-mock": "^2.2.0", "jsdom": "^15.2.1", @@ -52,14 +56,16 @@ "open": "6.4.0", "pixelmatch": "5.0.2", "pngjs": "3.4.0", - "rollup": "0.50.0", + "rollup": "1.28.0", "rollup-plugin-commonjs": "8.4.1", "rollup-plugin-node-resolve": "3.0.0", - "rollup-plugin-uglify": "2.0.1", + "rollup-plugin-typescript2": "0.25.3", + "rollup-plugin-uglify": "6.0.4", "seedrandom": "3.0.3", "semver": "6.3.0", "serve-handler": "6.1.1", "slugify": "1.3.4", - "socket.io": "2.2.0" + "socket.io": "2.2.0", + "typescript": "3.7.4" } } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0140bdb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES3", + + "noImplicitAny": true, + "noImplicitThis": true, + "strictBindCallApply": true, + "removeComments": true, + "sourceMap": true, + + // https://github.com/ezolenko/rollup-plugin-typescript2/issues/12#issuecomment-536173372 + "moduleResolution": "Node", + + "declaration": true, + "declarationMap": false, + + "importHelpers": true + }, + "include": [ + "src/**/*.ts", + "echarts.*.ts", + "extension-src/**/*.ts" + ] +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@echarts.apache.org For additional commands, e-mail: commits-h...@echarts.apache.org