├── .gitignore ├── .npmignore ├── .travis.yml ├── LICENSE.txt ├── README.md ├── cache.js ├── index.js ├── modern-versions.js ├── options.js ├── package-lock.json ├── package.json ├── packages └── helpers │ ├── index.js │ └── package.json ├── parser.js ├── plugins ├── async-await.js ├── inline-node-env.js ├── named-function-expressions.js └── sanitize-for-in-objects.js ├── register.js ├── runtime.js ├── scripts └── update-versions ├── test ├── class-properties.ts ├── class.ts ├── decorators.js ├── export-default-from.js ├── export-value-a.js ├── export-value-b.js ├── index.html ├── mocha.css ├── mocha.js ├── not-transformed.js ├── obj-without-props.js ├── react.tsx ├── register.js ├── run.sh ├── runtime-double-pass.js ├── test-module.js ├── tests.js ├── typescript │ ├── child.js │ └── parent.ts └── undeclared-export.js └── util.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | 29 | # Cache of JSON results previously compiled by Babel. 30 | test/.cache 31 | 32 | .idea/ 33 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /test 3 | /packages 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | os: linux 3 | dist: xenial 4 | node_js: 5 | - "16" 6 | - "14" 7 | - "12" 8 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | ======================================== 2 | Meteor is licensed under the MIT License 3 | ======================================== 4 | 5 | Copyright (C) 2011--2015 Meteor Development Group 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | 13 | 14 | ==================================================================== 15 | This license applies to all code in Meteor that is not an externally 16 | maintained library. Externally maintained libraries have their own 17 | licenses, included in the LICENSES directory. 18 | ==================================================================== 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @meteorjs/babel [![Build Status](https://travis-ci.com/meteor/babel.svg)](https://travis-ci.com/meteor/babel) 2 | 3 | [Babel](https://babeljs.io/) wrapper package for use with [Meteor](https://github.com/meteor/meteor). 4 | 5 | > This repository has been merged into Meteor main repository. You can [find it there](https://github.com/meteor/meteor/tree/devel/npm-packages/meteor-babel). 6 | -------------------------------------------------------------------------------- /cache.js: -------------------------------------------------------------------------------- 1 | var assert = require("assert"); 2 | var path = require("path"); 3 | var fs = require("fs"); 4 | var util = require("./util.js"); 5 | var meteorBabelVersion = require("./package.json").version; 6 | var reifyVersion = require("reify/package.json").version; 7 | var hasOwn = Object.prototype.hasOwnProperty; 8 | 9 | function Cache(fillFn, cacheDir) { 10 | assert.ok(this instanceof Cache); 11 | assert.strictEqual(typeof fillFn, "function"); 12 | 13 | this.fillFn = fillFn; 14 | this.dir = ensureCacheDir(cacheDir); 15 | this.cache = this.loadCacheFromDisk(this.dir); 16 | } 17 | 18 | module.exports = Cache; 19 | 20 | var Cp = Cache.prototype; 21 | 22 | function ensureCacheDir(cacheDir) { 23 | cacheDir = path.resolve( 24 | cacheDir || 25 | process.env.BABEL_CACHE_DIR || 26 | path.join( 27 | process.env.HOME || process.env.USERPROFILE || __dirname, 28 | ".babel-cache" 29 | ) 30 | ); 31 | 32 | try { 33 | util.mkdirp(cacheDir); 34 | } catch (error) { 35 | if (error.code !== "EEXIST") { 36 | throw error; 37 | } 38 | } 39 | 40 | return cacheDir; 41 | } 42 | 43 | Cp.loadCacheFromDisk = function () { 44 | var cache = {}; 45 | 46 | fs.readdirSync(this.dir).forEach(function (cacheFile) { 47 | if (/\.json$/.test(cacheFile)) { 48 | // Avoid actually reading the files until we know we need their 49 | // contents, but record the filename so that we can quickly check 50 | // whether a cached file exists on disk or not. 51 | cache[cacheFile] = true; 52 | } 53 | }); 54 | 55 | return cache; 56 | }; 57 | 58 | Cp.get = function (source, options, deps) { 59 | var cacheHash; 60 | if (deps && deps.sourceHash) { 61 | cacheHash = util.deepHash( 62 | meteorBabelVersion, reifyVersion, 63 | options, deps 64 | ); 65 | } else { 66 | cacheHash = util.deepHash( 67 | meteorBabelVersion, reifyVersion, 68 | source, options, deps 69 | ); 70 | } 71 | 72 | var cacheFile = cacheHash + ".json"; 73 | var fullCacheFile = path.join(this.dir, cacheFile); 74 | var result; 75 | 76 | if (hasOwn.call(this.cache, cacheFile)) { 77 | result = this.cache[cacheFile]; 78 | 79 | if (result === true) { 80 | try { 81 | result = this.cache[cacheFile] = require(fullCacheFile); 82 | } catch (error) { 83 | fs.unlinkSync(fullCacheFile); 84 | result = this.cache[cacheFile] = false; 85 | 86 | if (/Unexpected end of (JSON )?input/.test(error.message)) { 87 | // The cache file was not written completely, probably because 88 | // we use the asynchronous version of fs.writeFile, and the 89 | // program exited too soon. Fall through to transform again. 90 | } else { 91 | // Some other problem occurred that we should know about. 92 | console.error(error.stack); 93 | } 94 | } 95 | } 96 | } 97 | 98 | if (typeof result === "object") { 99 | result.hash = cacheHash; 100 | } else { 101 | result = this.fillFn.call(null, source, options); 102 | if (! result) { 103 | return null; 104 | } 105 | 106 | this.cache[cacheFile] = result; 107 | result.hash = cacheHash; 108 | 109 | // Use the asynchronous version of fs.writeFile so that we don't slow 110 | // down require by waiting for cache files to be written. 111 | fs.writeFile( 112 | fullCacheFile, 113 | JSON.stringify(result) + "\n", 114 | { encoding: "utf8", flag: "wx" }, 115 | function (error) { 116 | if (! error || error.code === "EEXIST") { 117 | // Opening the file with the exclusive (x) flag failed because 118 | // the file already existed, which is not a problem. 119 | return; 120 | } 121 | 122 | // Errors encountered while persisting cache files to disk will 123 | // not prevent the program from working, so should not be fatal. 124 | console.error(error.stack); 125 | } 126 | ); 127 | } 128 | 129 | return result; 130 | }; 131 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const assert = require("assert"); 4 | const Cache = require("./cache.js"); 5 | const util = require("./util.js"); 6 | const cachesByDir = Object.create(null); 7 | const BABEL_CACHE_DIR = process.env.BABEL_CACHE_DIR; 8 | let options; // Lazily initialized. 9 | 10 | // Make sure that module.importSync and module.export are defined in the 11 | // current Node process. 12 | const Module = module.constructor; 13 | require("reify/lib/runtime").enable(Module.prototype); 14 | 15 | // Options passed to compile will completely replace the default options, 16 | // so if you only want to modify the default options, call this function 17 | // first, modify the result, and then pass those options to compile. 18 | function getDefaultOptions(features) { 19 | options = options || require("./options.js"); 20 | return options.getDefaults(features); 21 | } 22 | exports.getDefaultOptions = getDefaultOptions; 23 | 24 | function getMinifierOptions(features) { 25 | options = options || require("./options.js"); 26 | return options.getMinifierDefaults(features); 27 | } 28 | exports.getMinifierOptions = getMinifierOptions; 29 | 30 | // If you have already imported meteor-babel as a package, and this file 31 | // (index.js) has been evaluated, then there is very little additional 32 | // cost to calling meteorBabel.getMinimumModernBrowserVersions. However, 33 | // if you want to avoid importing meteor-babel, but need to know the 34 | // minimum browser versions, you should import the modern-versions.js 35 | // module directly: require("meteor-babel/modern-versions.js").get(). 36 | exports.getMinimumModernBrowserVersions = function () { 37 | return require("./modern-versions.js").get(); 38 | }; 39 | 40 | const parse = exports.parse = require("./parser").parse; 41 | 42 | let didWarnAboutNoCache = false; 43 | 44 | exports.compile = function (source, babelOptions, cacheOptions) { 45 | babelOptions = babelOptions || getDefaultOptions(); 46 | 47 | if (cacheOptions !== false) { 48 | if (cacheOptions && 49 | typeof cacheOptions.cacheDirectory === "string") { 50 | return getOrCreateCache( 51 | cacheOptions.cacheDirectory 52 | ).get(source, babelOptions, cacheOptions.cacheDeps); 53 | } 54 | 55 | // If cacheOptions.cacheDirectory was not provided, and cacheOptions 56 | // does not have a cacheDeps property, use the whole cacheOptions object 57 | // as cacheDeps when computing the cache key. 58 | const cacheDeps = cacheOptions && cacheOptions.cacheDeps || cacheOptions; 59 | 60 | // If no babelOptions.cacheDir was provided, but the BABEL_CACHE_DIR 61 | // environment variable is set, then respect that. 62 | if (BABEL_CACHE_DIR) { 63 | return getOrCreateCache(BABEL_CACHE_DIR) 64 | .get(source, babelOptions, cacheDeps); 65 | } 66 | 67 | // If neither babelOptions.cacheDir nor BABEL_CACHE_DIR were provided, 68 | // use the first cache directory registered so far. 69 | for (var cacheDirectory in cachesByDir) { 70 | return getOrCreateCache(cacheDirectory) 71 | .get(source, babelOptions, cacheDeps); 72 | } 73 | 74 | // Otherwise fall back to compiling without a cache. 75 | if (! didWarnAboutNoCache) { 76 | console.warn("Compiling " + babelOptions.filename + 77 | " with @meteorjs/babel without a cache"); 78 | console.trace(); 79 | didWarnAboutNoCache = true; 80 | } 81 | } 82 | 83 | return compile(source, babelOptions); 84 | }; 85 | 86 | function compile(source, options) { 87 | const babelCore = require("@babel/core"); 88 | let result = { code: source }; 89 | 90 | const optionsCopy = util.deepClone(options); 91 | const { ast, plugins, presets } = optionsCopy; 92 | delete optionsCopy.plugins; 93 | delete optionsCopy.typescript; 94 | optionsCopy.ast = true; 95 | 96 | if (options.typescript) { 97 | precompileTypeScript(result, options); 98 | } 99 | 100 | function transform(presets) { 101 | optionsCopy.plugins = [{ 102 | parserOverride: parse 103 | }]; 104 | 105 | optionsCopy.presets = presets; 106 | optionsCopy.sourceMaps = options.sourceMap !== false && options.sourceMaps !== false; 107 | if (optionsCopy.sourceMaps && result.map) { 108 | optionsCopy.inputSourceMap = result.map; 109 | } 110 | 111 | if (result.ast) { 112 | result = babelCore.transformFromAstSync( 113 | result.ast, 114 | result.code, 115 | optionsCopy 116 | ); 117 | } else { 118 | result = babelCore.transformSync(result.code, optionsCopy); 119 | } 120 | 121 | if (ast === false) { 122 | delete result.ast; 123 | } 124 | } 125 | 126 | if (plugins && plugins.length > 0) { 127 | const presetOfPlugins = { plugins }; 128 | transform([presetOfPlugins]); 129 | } 130 | 131 | if (presets) { 132 | transform(presets); 133 | } 134 | 135 | return result; 136 | } 137 | 138 | function precompileTypeScript(result, options) { 139 | const fileName = options.filename || options.sourceFileName; 140 | if (fileName && ! fileName.endsWith(".ts") && ! fileName.endsWith(".tsx")) { 141 | return; 142 | } 143 | 144 | const ts = require("typescript"); 145 | let tsResult; 146 | try { 147 | tsResult = ts.transpileModule(result.code, { 148 | fileName, 149 | compilerOptions: { 150 | target: ts.ScriptTarget.ESNext, 151 | // Leave module syntax intact so that Babel/Reify can handle it. 152 | module: ts.ModuleKind.ESNext, 153 | // This used to be false by default, but appears to have become 154 | // true by default around the release of typescript@3.7. It's 155 | // important to disable this option because enabling it allows 156 | // TypeScript to use helpers like __importDefault, which are much 157 | // better handled by Babel/Reify later in the pipeline. 158 | esModuleInterop: false, 159 | sourceMap: true, 160 | inlineSources: true, 161 | experimentalDecorators: true, 162 | emitDecoratorMetadata: true, 163 | } 164 | }); 165 | } catch (e) { 166 | e.message = "While compiling " + fileName + ": " + e.message; 167 | throw e; 168 | } 169 | 170 | result.code = tsResult.outputText.replace( 171 | /\/\/# sourceMappingURL=.*?(\n|$)/g, 172 | "$1" // preserve trailing \n characters 173 | ); 174 | 175 | result.map = JSON.parse(tsResult.sourceMapText); 176 | if (fileName) { 177 | result.map.file = fileName; 178 | result.map.sources = [fileName]; 179 | } 180 | } 181 | 182 | exports.minify = function minify(source, options) { 183 | // We are not compiling the code in this step, only minifying, so reify 184 | // is not used. 185 | return require("@babel/core").transformFromAst( 186 | parse(source), 187 | source, 188 | options || getMinifierOptions() 189 | ); 190 | } 191 | 192 | function getOrCreateCache(cacheDir) { 193 | return cachesByDir[cacheDir] || ( 194 | cachesByDir[cacheDir] = new Cache(compile, cacheDir) 195 | ); 196 | } 197 | exports.setCacheDir = getOrCreateCache; 198 | 199 | exports.runtime = // Legacy name; prefer installRuntime. 200 | exports.installRuntime = function installRuntime() { 201 | return require("./runtime.js"); 202 | }; 203 | 204 | exports.defineHelpers = function defineHelpers() { 205 | return require("meteor-babel-helpers"); 206 | }; 207 | -------------------------------------------------------------------------------- /modern-versions.js: -------------------------------------------------------------------------------- 1 | // This module exists so that it can be accessed directly via 2 | // require("meteor-babel/modern-versions.js").get() without importing any 3 | // other modules, which can be expensive (10s of ms). Note that the 4 | // babel-preset-meteor/modern module has no top-level require calls, so 5 | // importing it should be very cheap. 6 | exports.get = function () { 7 | return require("babel-preset-meteor/modern").minimumVersions; 8 | }; 9 | -------------------------------------------------------------------------------- /options.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const getESModule = require("reify/lib/runtime/utils.js").getESModule; 4 | const nodeRequire = require; 5 | require = function require(id) { 6 | const exports = nodeRequire(id); 7 | return getESModule(exports) && exports.default || exports; 8 | }; 9 | 10 | const babelRuntimeVersion = require("@babel/runtime/package.json").version; 11 | const babelPresetMeteor = require("babel-preset-meteor"); 12 | const babelPresetMeteorModern = require("babel-preset-meteor/modern"); 13 | const reifyPlugin = require("reify/plugins/babel"); 14 | 15 | function getReifyPlugin(features) { 16 | return [reifyPlugin, getReifyOptions(features)]; 17 | } 18 | 19 | function getReifyOptions(features) { 20 | const reifyOptions = { 21 | avoidModernSyntax: true, 22 | enforceStrictMode: false, 23 | dynamicImport: true 24 | }; 25 | 26 | if (features) { 27 | if (features.modernBrowsers || 28 | features.nodeMajorVersion >= 8) { 29 | reifyOptions.avoidModernSyntax = false; 30 | reifyOptions.generateLetDeclarations = true; 31 | } 32 | 33 | if (features.compileForShell) { 34 | // If we're compiling code to run in the Node REPL; we never want to 35 | // wrap it with a function to rename the `module` identifier. 36 | reifyOptions.moduleAlias = "module"; 37 | } 38 | } 39 | 40 | return reifyOptions; 41 | } 42 | 43 | exports.getDefaults = function getDefaults(features) { 44 | if (features) { 45 | if (features.nodeMajorVersion >= 8) { 46 | return getDefaultsForNode8(features); 47 | } 48 | 49 | if (features.modernBrowsers) { 50 | return getDefaultsForModernBrowsers(features); 51 | } 52 | } 53 | 54 | const combined = { 55 | presets: [], 56 | plugins: [getReifyPlugin(features)] 57 | }; 58 | 59 | const compileModulesOnly = features && features.compileModulesOnly; 60 | if (! compileModulesOnly) { 61 | combined.presets.push(babelPresetMeteor); 62 | 63 | const rt = getRuntimeTransform(features); 64 | if (rt) { 65 | combined.plugins.push(rt); 66 | } 67 | 68 | maybeAddReactPlugins(features, combined); 69 | 70 | if (features && features.jscript) { 71 | combined.plugins.push( 72 | require("./plugins/named-function-expressions.js"), 73 | require("./plugins/sanitize-for-in-objects.js") 74 | ); 75 | } 76 | } 77 | 78 | return finish(features, [combined]); 79 | }; 80 | 81 | function maybeAddReactPlugins(features, options) { 82 | if (features && features.react) { 83 | options.presets.push(require("@babel/preset-react")); 84 | options.plugins.push( 85 | [require("@babel/plugin-proposal-class-properties"), { 86 | loose: true 87 | }] 88 | ); 89 | } 90 | } 91 | 92 | function getDefaultsForModernBrowsers(features) { 93 | const combined = { 94 | presets: [], 95 | plugins: [getReifyPlugin(features)] 96 | }; 97 | 98 | const compileModulesOnly = features && features.compileModulesOnly; 99 | if (! compileModulesOnly) { 100 | combined.presets.push(babelPresetMeteorModern.getPreset); 101 | 102 | const rt = getRuntimeTransform(features); 103 | if (rt) { 104 | combined.plugins.push(rt); 105 | } 106 | 107 | maybeAddReactPlugins(features, combined); 108 | } 109 | 110 | return finish(features, [combined]); 111 | } 112 | 113 | const parserOpts = require("reify/lib/parsers/babel.js").options; 114 | const util = require("./util.js"); 115 | 116 | function finish(features, presets) { 117 | const options = { 118 | compact: false, 119 | sourceMaps: false, 120 | ast: false, 121 | // Disable .babelrc lookup and processing. 122 | babelrc: false, 123 | // Disable babel.config.js lookup and processing. 124 | configFile: false, 125 | parserOpts: util.deepClone(parserOpts), 126 | presets: presets 127 | }; 128 | 129 | if (features && features.typescript) { 130 | // This additional option will be consumed by the meteorBabel.compile 131 | // function before the options are passed to Babel. 132 | options.typescript = true; 133 | } 134 | 135 | return options; 136 | } 137 | 138 | function isObject(value) { 139 | return value !== null && typeof value === "object"; 140 | } 141 | 142 | function getRuntimeTransform(features) { 143 | if (isObject(features)) { 144 | if (features.runtime === false) { 145 | return null; 146 | } 147 | } 148 | 149 | // Import helpers from the babel-runtime package rather than redefining 150 | // them at the top of each module. 151 | return [require("@babel/plugin-transform-runtime"), { 152 | // Necessary to enable importing helpers like objectSpread: 153 | // https://github.com/babel/babel/pull/10170#issuecomment-508936150 154 | version: babelRuntimeVersion, 155 | // Use @babel/runtime/helpers/*.js: 156 | helpers: true, 157 | // Do not use @babel/runtime/helpers/esm/*.js: 158 | useESModules: false, 159 | // Do not import from @babel/runtime-corejs2 160 | // or @babel/runtime-corejs3: 161 | corejs: false, 162 | }]; 163 | } 164 | 165 | function getDefaultsForNode8(features) { 166 | const combined = { 167 | presets: [], 168 | plugins: [getReifyPlugin(features)] 169 | }; 170 | 171 | const compileModulesOnly = features.compileModulesOnly; 172 | if (! compileModulesOnly) { 173 | combined.presets.push(babelPresetMeteorModern.getPreset); 174 | 175 | const rt = getRuntimeTransform(features); 176 | if (rt) { 177 | combined.plugins.push(rt); 178 | } 179 | 180 | // Not fully supported in Node 8 without the --harmony flag. 181 | combined.plugins.push( 182 | require("@babel/plugin-syntax-object-rest-spread"), 183 | require("@babel/plugin-proposal-object-rest-spread") 184 | ); 185 | 186 | // Ensure that async functions run in a Fiber, while also taking 187 | // full advantage of native async/await support in Node 8. 188 | combined.plugins.push([require("./plugins/async-await.js"), { 189 | // Do not transform `await x` to `Promise.await(x)`, since Node 190 | // 8 has native support for await expressions. 191 | useNativeAsyncAwait: false 192 | }]); 193 | 194 | // Enable async generator functions proposal. 195 | combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); 196 | } 197 | 198 | if (! compileModulesOnly) { 199 | maybeAddReactPlugins(features, combined); 200 | } 201 | 202 | return finish(features, [combined]); 203 | } 204 | 205 | exports.getMinifierDefaults = function getMinifierDefaults(features) { 206 | const inlineNodeEnv = features && features.inlineNodeEnv; 207 | const keepFnName = !! (features && features.keepFnName); 208 | const options = { 209 | // Generate code in loose mode 210 | compact: false, 211 | // Don't generate a source map, we do that during compilation 212 | sourceMaps: false, 213 | // Necessary after https://github.com/babel/minify/pull/855 214 | comments: false, 215 | // We don't need to generate AST code 216 | ast: false, 217 | // Do not honor babelrc settings, would conflict with compilation 218 | babelrc: false, 219 | // May be modified according to provided features below. 220 | plugins: [], 221 | // Only include the minifier plugins, since we've already compiled all 222 | // the ECMAScript syntax we want. 223 | presets: [ 224 | [require("babel-preset-minify"), { 225 | keepClassName: keepFnName, 226 | keepFnName 227 | }] 228 | ] 229 | }; 230 | 231 | if (inlineNodeEnv) { 232 | options.plugins.push([ 233 | require("./plugins/inline-node-env.js"), 234 | { nodeEnv: inlineNodeEnv } 235 | ]); 236 | } 237 | 238 | return options; 239 | }; 240 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@meteorjs/babel", 3 | "version": "7.13.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.14.5", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 10 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 11 | "requires": { 12 | "@babel/highlight": "^7.14.5" 13 | } 14 | }, 15 | "@babel/compat-data": { 16 | "version": "7.14.9", 17 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", 18 | "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==" 19 | }, 20 | "@babel/core": { 21 | "version": "7.15.0", 22 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", 23 | "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", 24 | "requires": { 25 | "@babel/code-frame": "^7.14.5", 26 | "@babel/generator": "^7.15.0", 27 | "@babel/helper-compilation-targets": "^7.15.0", 28 | "@babel/helper-module-transforms": "^7.15.0", 29 | "@babel/helpers": "^7.14.8", 30 | "@babel/parser": "^7.15.0", 31 | "@babel/template": "^7.14.5", 32 | "@babel/traverse": "^7.15.0", 33 | "@babel/types": "^7.15.0", 34 | "convert-source-map": "^1.7.0", 35 | "debug": "^4.1.0", 36 | "gensync": "^1.0.0-beta.2", 37 | "json5": "^2.1.2", 38 | "semver": "^6.3.0", 39 | "source-map": "^0.5.0" 40 | }, 41 | "dependencies": { 42 | "@babel/compat-data": { 43 | "version": "7.15.0", 44 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", 45 | "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" 46 | }, 47 | "@babel/helper-compilation-targets": { 48 | "version": "7.15.0", 49 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", 50 | "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", 51 | "requires": { 52 | "@babel/compat-data": "^7.15.0", 53 | "@babel/helper-validator-option": "^7.14.5", 54 | "browserslist": "^4.16.6", 55 | "semver": "^6.3.0" 56 | } 57 | }, 58 | "source-map": { 59 | "version": "0.5.7", 60 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 61 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 62 | } 63 | } 64 | }, 65 | "@babel/generator": { 66 | "version": "7.15.0", 67 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", 68 | "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", 69 | "requires": { 70 | "@babel/types": "^7.15.0", 71 | "jsesc": "^2.5.1", 72 | "source-map": "^0.5.0" 73 | }, 74 | "dependencies": { 75 | "source-map": { 76 | "version": "0.5.7", 77 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 78 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 79 | } 80 | } 81 | }, 82 | "@babel/helper-annotate-as-pure": { 83 | "version": "7.14.5", 84 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", 85 | "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", 86 | "requires": { 87 | "@babel/types": "^7.14.5" 88 | } 89 | }, 90 | "@babel/helper-builder-binary-assignment-operator-visitor": { 91 | "version": "7.14.5", 92 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", 93 | "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", 94 | "requires": { 95 | "@babel/helper-explode-assignable-expression": "^7.14.5", 96 | "@babel/types": "^7.14.5" 97 | } 98 | }, 99 | "@babel/helper-compilation-targets": { 100 | "version": "7.14.5", 101 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", 102 | "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", 103 | "requires": { 104 | "@babel/compat-data": "^7.14.5", 105 | "@babel/helper-validator-option": "^7.14.5", 106 | "browserslist": "^4.16.6", 107 | "semver": "^6.3.0" 108 | } 109 | }, 110 | "@babel/helper-create-class-features-plugin": { 111 | "version": "7.14.8", 112 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", 113 | "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", 114 | "requires": { 115 | "@babel/helper-annotate-as-pure": "^7.14.5", 116 | "@babel/helper-function-name": "^7.14.5", 117 | "@babel/helper-member-expression-to-functions": "^7.14.7", 118 | "@babel/helper-optimise-call-expression": "^7.14.5", 119 | "@babel/helper-replace-supers": "^7.14.5", 120 | "@babel/helper-split-export-declaration": "^7.14.5" 121 | } 122 | }, 123 | "@babel/helper-create-regexp-features-plugin": { 124 | "version": "7.14.5", 125 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", 126 | "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", 127 | "requires": { 128 | "@babel/helper-annotate-as-pure": "^7.14.5", 129 | "regexpu-core": "^4.7.1" 130 | } 131 | }, 132 | "@babel/helper-define-polyfill-provider": { 133 | "version": "0.2.3", 134 | "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", 135 | "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", 136 | "requires": { 137 | "@babel/helper-compilation-targets": "^7.13.0", 138 | "@babel/helper-module-imports": "^7.12.13", 139 | "@babel/helper-plugin-utils": "^7.13.0", 140 | "@babel/traverse": "^7.13.0", 141 | "debug": "^4.1.1", 142 | "lodash.debounce": "^4.0.8", 143 | "resolve": "^1.14.2", 144 | "semver": "^6.1.2" 145 | } 146 | }, 147 | "@babel/helper-explode-assignable-expression": { 148 | "version": "7.14.5", 149 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", 150 | "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", 151 | "requires": { 152 | "@babel/types": "^7.14.5" 153 | } 154 | }, 155 | "@babel/helper-function-name": { 156 | "version": "7.14.5", 157 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", 158 | "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", 159 | "requires": { 160 | "@babel/helper-get-function-arity": "^7.14.5", 161 | "@babel/template": "^7.14.5", 162 | "@babel/types": "^7.14.5" 163 | } 164 | }, 165 | "@babel/helper-get-function-arity": { 166 | "version": "7.14.5", 167 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", 168 | "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", 169 | "requires": { 170 | "@babel/types": "^7.14.5" 171 | } 172 | }, 173 | "@babel/helper-hoist-variables": { 174 | "version": "7.14.5", 175 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", 176 | "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", 177 | "requires": { 178 | "@babel/types": "^7.14.5" 179 | } 180 | }, 181 | "@babel/helper-member-expression-to-functions": { 182 | "version": "7.14.7", 183 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", 184 | "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", 185 | "requires": { 186 | "@babel/types": "^7.14.5" 187 | } 188 | }, 189 | "@babel/helper-module-imports": { 190 | "version": "7.14.5", 191 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", 192 | "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", 193 | "requires": { 194 | "@babel/types": "^7.14.5" 195 | } 196 | }, 197 | "@babel/helper-module-transforms": { 198 | "version": "7.15.0", 199 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", 200 | "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", 201 | "requires": { 202 | "@babel/helper-module-imports": "^7.14.5", 203 | "@babel/helper-replace-supers": "^7.15.0", 204 | "@babel/helper-simple-access": "^7.14.8", 205 | "@babel/helper-split-export-declaration": "^7.14.5", 206 | "@babel/helper-validator-identifier": "^7.14.9", 207 | "@babel/template": "^7.14.5", 208 | "@babel/traverse": "^7.15.0", 209 | "@babel/types": "^7.15.0" 210 | }, 211 | "dependencies": { 212 | "@babel/helper-member-expression-to-functions": { 213 | "version": "7.15.0", 214 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", 215 | "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", 216 | "requires": { 217 | "@babel/types": "^7.15.0" 218 | } 219 | }, 220 | "@babel/helper-replace-supers": { 221 | "version": "7.15.0", 222 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", 223 | "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", 224 | "requires": { 225 | "@babel/helper-member-expression-to-functions": "^7.15.0", 226 | "@babel/helper-optimise-call-expression": "^7.14.5", 227 | "@babel/traverse": "^7.15.0", 228 | "@babel/types": "^7.15.0" 229 | } 230 | } 231 | } 232 | }, 233 | "@babel/helper-optimise-call-expression": { 234 | "version": "7.14.5", 235 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", 236 | "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", 237 | "requires": { 238 | "@babel/types": "^7.14.5" 239 | } 240 | }, 241 | "@babel/helper-plugin-utils": { 242 | "version": "7.14.5", 243 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", 244 | "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" 245 | }, 246 | "@babel/helper-remap-async-to-generator": { 247 | "version": "7.14.5", 248 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", 249 | "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", 250 | "requires": { 251 | "@babel/helper-annotate-as-pure": "^7.14.5", 252 | "@babel/helper-wrap-function": "^7.14.5", 253 | "@babel/types": "^7.14.5" 254 | } 255 | }, 256 | "@babel/helper-replace-supers": { 257 | "version": "7.14.5", 258 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", 259 | "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", 260 | "requires": { 261 | "@babel/helper-member-expression-to-functions": "^7.14.5", 262 | "@babel/helper-optimise-call-expression": "^7.14.5", 263 | "@babel/traverse": "^7.14.5", 264 | "@babel/types": "^7.14.5" 265 | } 266 | }, 267 | "@babel/helper-simple-access": { 268 | "version": "7.14.8", 269 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", 270 | "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", 271 | "requires": { 272 | "@babel/types": "^7.14.8" 273 | } 274 | }, 275 | "@babel/helper-skip-transparent-expression-wrappers": { 276 | "version": "7.14.5", 277 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", 278 | "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", 279 | "requires": { 280 | "@babel/types": "^7.14.5" 281 | } 282 | }, 283 | "@babel/helper-split-export-declaration": { 284 | "version": "7.14.5", 285 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", 286 | "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", 287 | "requires": { 288 | "@babel/types": "^7.14.5" 289 | } 290 | }, 291 | "@babel/helper-validator-identifier": { 292 | "version": "7.14.9", 293 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 294 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" 295 | }, 296 | "@babel/helper-validator-option": { 297 | "version": "7.14.5", 298 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", 299 | "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" 300 | }, 301 | "@babel/helper-wrap-function": { 302 | "version": "7.14.5", 303 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", 304 | "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", 305 | "requires": { 306 | "@babel/helper-function-name": "^7.14.5", 307 | "@babel/template": "^7.14.5", 308 | "@babel/traverse": "^7.14.5", 309 | "@babel/types": "^7.14.5" 310 | } 311 | }, 312 | "@babel/helpers": { 313 | "version": "7.15.3", 314 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", 315 | "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", 316 | "requires": { 317 | "@babel/template": "^7.14.5", 318 | "@babel/traverse": "^7.15.0", 319 | "@babel/types": "^7.15.0" 320 | } 321 | }, 322 | "@babel/highlight": { 323 | "version": "7.14.5", 324 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 325 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 326 | "requires": { 327 | "@babel/helper-validator-identifier": "^7.14.5", 328 | "chalk": "^2.0.0", 329 | "js-tokens": "^4.0.0" 330 | } 331 | }, 332 | "@babel/parser": { 333 | "version": "7.15.3", 334 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", 335 | "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" 336 | }, 337 | "@babel/plugin-proposal-async-generator-functions": { 338 | "version": "7.14.9", 339 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", 340 | "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", 341 | "requires": { 342 | "@babel/helper-plugin-utils": "^7.14.5", 343 | "@babel/helper-remap-async-to-generator": "^7.14.5", 344 | "@babel/plugin-syntax-async-generators": "^7.8.4" 345 | } 346 | }, 347 | "@babel/plugin-proposal-class-properties": { 348 | "version": "7.14.5", 349 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", 350 | "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", 351 | "requires": { 352 | "@babel/helper-create-class-features-plugin": "^7.14.5", 353 | "@babel/helper-plugin-utils": "^7.14.5" 354 | } 355 | }, 356 | "@babel/plugin-proposal-decorators": { 357 | "version": "7.14.5", 358 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", 359 | "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", 360 | "dev": true, 361 | "requires": { 362 | "@babel/helper-create-class-features-plugin": "^7.14.5", 363 | "@babel/helper-plugin-utils": "^7.14.5", 364 | "@babel/plugin-syntax-decorators": "^7.14.5" 365 | } 366 | }, 367 | "@babel/plugin-proposal-logical-assignment-operators": { 368 | "version": "7.14.5", 369 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", 370 | "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", 371 | "requires": { 372 | "@babel/helper-plugin-utils": "^7.14.5", 373 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" 374 | } 375 | }, 376 | "@babel/plugin-proposal-nullish-coalescing-operator": { 377 | "version": "7.14.5", 378 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", 379 | "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", 380 | "requires": { 381 | "@babel/helper-plugin-utils": "^7.14.5", 382 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" 383 | } 384 | }, 385 | "@babel/plugin-proposal-object-rest-spread": { 386 | "version": "7.14.7", 387 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", 388 | "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", 389 | "requires": { 390 | "@babel/compat-data": "^7.14.7", 391 | "@babel/helper-compilation-targets": "^7.14.5", 392 | "@babel/helper-plugin-utils": "^7.14.5", 393 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3", 394 | "@babel/plugin-transform-parameters": "^7.14.5" 395 | } 396 | }, 397 | "@babel/plugin-proposal-optional-catch-binding": { 398 | "version": "7.14.5", 399 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", 400 | "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", 401 | "requires": { 402 | "@babel/helper-plugin-utils": "^7.14.5", 403 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" 404 | } 405 | }, 406 | "@babel/plugin-proposal-optional-chaining": { 407 | "version": "7.14.5", 408 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", 409 | "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", 410 | "requires": { 411 | "@babel/helper-plugin-utils": "^7.14.5", 412 | "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", 413 | "@babel/plugin-syntax-optional-chaining": "^7.8.3" 414 | } 415 | }, 416 | "@babel/plugin-syntax-async-generators": { 417 | "version": "7.8.4", 418 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 419 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 420 | "requires": { 421 | "@babel/helper-plugin-utils": "^7.8.0" 422 | } 423 | }, 424 | "@babel/plugin-syntax-class-properties": { 425 | "version": "7.12.13", 426 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", 427 | "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", 428 | "requires": { 429 | "@babel/helper-plugin-utils": "^7.12.13" 430 | } 431 | }, 432 | "@babel/plugin-syntax-decorators": { 433 | "version": "7.14.5", 434 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", 435 | "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", 436 | "dev": true, 437 | "requires": { 438 | "@babel/helper-plugin-utils": "^7.14.5" 439 | } 440 | }, 441 | "@babel/plugin-syntax-dynamic-import": { 442 | "version": "7.8.3", 443 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 444 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 445 | "requires": { 446 | "@babel/helper-plugin-utils": "^7.8.0" 447 | } 448 | }, 449 | "@babel/plugin-syntax-jsx": { 450 | "version": "7.14.5", 451 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", 452 | "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", 453 | "requires": { 454 | "@babel/helper-plugin-utils": "^7.14.5" 455 | } 456 | }, 457 | "@babel/plugin-syntax-logical-assignment-operators": { 458 | "version": "7.10.4", 459 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 460 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 461 | "requires": { 462 | "@babel/helper-plugin-utils": "^7.10.4" 463 | } 464 | }, 465 | "@babel/plugin-syntax-nullish-coalescing-operator": { 466 | "version": "7.8.3", 467 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 468 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 469 | "requires": { 470 | "@babel/helper-plugin-utils": "^7.8.0" 471 | } 472 | }, 473 | "@babel/plugin-syntax-object-rest-spread": { 474 | "version": "7.8.3", 475 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 476 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 477 | "requires": { 478 | "@babel/helper-plugin-utils": "^7.8.0" 479 | } 480 | }, 481 | "@babel/plugin-syntax-optional-catch-binding": { 482 | "version": "7.8.3", 483 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 484 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 485 | "requires": { 486 | "@babel/helper-plugin-utils": "^7.8.0" 487 | } 488 | }, 489 | "@babel/plugin-syntax-optional-chaining": { 490 | "version": "7.8.3", 491 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 492 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 493 | "requires": { 494 | "@babel/helper-plugin-utils": "^7.8.0" 495 | } 496 | }, 497 | "@babel/plugin-transform-arrow-functions": { 498 | "version": "7.14.5", 499 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", 500 | "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", 501 | "requires": { 502 | "@babel/helper-plugin-utils": "^7.14.5" 503 | } 504 | }, 505 | "@babel/plugin-transform-async-to-generator": { 506 | "version": "7.14.5", 507 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", 508 | "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", 509 | "requires": { 510 | "@babel/helper-module-imports": "^7.14.5", 511 | "@babel/helper-plugin-utils": "^7.14.5", 512 | "@babel/helper-remap-async-to-generator": "^7.14.5" 513 | } 514 | }, 515 | "@babel/plugin-transform-block-scoped-functions": { 516 | "version": "7.14.5", 517 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", 518 | "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", 519 | "requires": { 520 | "@babel/helper-plugin-utils": "^7.14.5" 521 | } 522 | }, 523 | "@babel/plugin-transform-block-scoping": { 524 | "version": "7.14.5", 525 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", 526 | "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", 527 | "requires": { 528 | "@babel/helper-plugin-utils": "^7.14.5" 529 | } 530 | }, 531 | "@babel/plugin-transform-classes": { 532 | "version": "7.14.9", 533 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", 534 | "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", 535 | "requires": { 536 | "@babel/helper-annotate-as-pure": "^7.14.5", 537 | "@babel/helper-function-name": "^7.14.5", 538 | "@babel/helper-optimise-call-expression": "^7.14.5", 539 | "@babel/helper-plugin-utils": "^7.14.5", 540 | "@babel/helper-replace-supers": "^7.14.5", 541 | "@babel/helper-split-export-declaration": "^7.14.5", 542 | "globals": "^11.1.0" 543 | } 544 | }, 545 | "@babel/plugin-transform-computed-properties": { 546 | "version": "7.14.5", 547 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", 548 | "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", 549 | "requires": { 550 | "@babel/helper-plugin-utils": "^7.14.5" 551 | } 552 | }, 553 | "@babel/plugin-transform-destructuring": { 554 | "version": "7.14.7", 555 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", 556 | "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", 557 | "requires": { 558 | "@babel/helper-plugin-utils": "^7.14.5" 559 | } 560 | }, 561 | "@babel/plugin-transform-exponentiation-operator": { 562 | "version": "7.14.5", 563 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", 564 | "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", 565 | "requires": { 566 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", 567 | "@babel/helper-plugin-utils": "^7.14.5" 568 | } 569 | }, 570 | "@babel/plugin-transform-for-of": { 571 | "version": "7.14.5", 572 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", 573 | "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", 574 | "requires": { 575 | "@babel/helper-plugin-utils": "^7.14.5" 576 | } 577 | }, 578 | "@babel/plugin-transform-literals": { 579 | "version": "7.14.5", 580 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", 581 | "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", 582 | "requires": { 583 | "@babel/helper-plugin-utils": "^7.14.5" 584 | } 585 | }, 586 | "@babel/plugin-transform-modules-commonjs": { 587 | "version": "7.15.0", 588 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", 589 | "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", 590 | "requires": { 591 | "@babel/helper-module-transforms": "^7.15.0", 592 | "@babel/helper-plugin-utils": "^7.14.5", 593 | "@babel/helper-simple-access": "^7.14.8", 594 | "babel-plugin-dynamic-import-node": "^2.3.3" 595 | } 596 | }, 597 | "@babel/plugin-transform-object-super": { 598 | "version": "7.14.5", 599 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", 600 | "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", 601 | "requires": { 602 | "@babel/helper-plugin-utils": "^7.14.5", 603 | "@babel/helper-replace-supers": "^7.14.5" 604 | } 605 | }, 606 | "@babel/plugin-transform-parameters": { 607 | "version": "7.14.5", 608 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", 609 | "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", 610 | "requires": { 611 | "@babel/helper-plugin-utils": "^7.14.5" 612 | } 613 | }, 614 | "@babel/plugin-transform-property-literals": { 615 | "version": "7.14.5", 616 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", 617 | "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", 618 | "requires": { 619 | "@babel/helper-plugin-utils": "^7.14.5" 620 | } 621 | }, 622 | "@babel/plugin-transform-react-display-name": { 623 | "version": "7.14.5", 624 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", 625 | "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", 626 | "requires": { 627 | "@babel/helper-plugin-utils": "^7.14.5" 628 | } 629 | }, 630 | "@babel/plugin-transform-react-jsx": { 631 | "version": "7.14.9", 632 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", 633 | "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", 634 | "requires": { 635 | "@babel/helper-annotate-as-pure": "^7.14.5", 636 | "@babel/helper-module-imports": "^7.14.5", 637 | "@babel/helper-plugin-utils": "^7.14.5", 638 | "@babel/plugin-syntax-jsx": "^7.14.5", 639 | "@babel/types": "^7.14.9" 640 | } 641 | }, 642 | "@babel/plugin-transform-react-jsx-development": { 643 | "version": "7.14.5", 644 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", 645 | "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", 646 | "requires": { 647 | "@babel/plugin-transform-react-jsx": "^7.14.5" 648 | } 649 | }, 650 | "@babel/plugin-transform-react-pure-annotations": { 651 | "version": "7.14.5", 652 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", 653 | "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", 654 | "requires": { 655 | "@babel/helper-annotate-as-pure": "^7.14.5", 656 | "@babel/helper-plugin-utils": "^7.14.5" 657 | } 658 | }, 659 | "@babel/plugin-transform-regenerator": { 660 | "version": "7.14.5", 661 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", 662 | "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", 663 | "requires": { 664 | "regenerator-transform": "^0.14.2" 665 | } 666 | }, 667 | "@babel/plugin-transform-runtime": { 668 | "version": "7.15.0", 669 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz", 670 | "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==", 671 | "requires": { 672 | "@babel/helper-module-imports": "^7.14.5", 673 | "@babel/helper-plugin-utils": "^7.14.5", 674 | "babel-plugin-polyfill-corejs2": "^0.2.2", 675 | "babel-plugin-polyfill-corejs3": "^0.2.2", 676 | "babel-plugin-polyfill-regenerator": "^0.2.2", 677 | "semver": "^6.3.0" 678 | } 679 | }, 680 | "@babel/plugin-transform-shorthand-properties": { 681 | "version": "7.14.5", 682 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", 683 | "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", 684 | "requires": { 685 | "@babel/helper-plugin-utils": "^7.14.5" 686 | } 687 | }, 688 | "@babel/plugin-transform-spread": { 689 | "version": "7.14.6", 690 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", 691 | "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", 692 | "requires": { 693 | "@babel/helper-plugin-utils": "^7.14.5", 694 | "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" 695 | } 696 | }, 697 | "@babel/plugin-transform-sticky-regex": { 698 | "version": "7.14.5", 699 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", 700 | "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", 701 | "requires": { 702 | "@babel/helper-plugin-utils": "^7.14.5" 703 | } 704 | }, 705 | "@babel/plugin-transform-template-literals": { 706 | "version": "7.14.5", 707 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", 708 | "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", 709 | "requires": { 710 | "@babel/helper-plugin-utils": "^7.14.5" 711 | } 712 | }, 713 | "@babel/plugin-transform-typeof-symbol": { 714 | "version": "7.14.5", 715 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", 716 | "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", 717 | "requires": { 718 | "@babel/helper-plugin-utils": "^7.14.5" 719 | } 720 | }, 721 | "@babel/plugin-transform-unicode-regex": { 722 | "version": "7.14.5", 723 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", 724 | "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", 725 | "requires": { 726 | "@babel/helper-create-regexp-features-plugin": "^7.14.5", 727 | "@babel/helper-plugin-utils": "^7.14.5" 728 | } 729 | }, 730 | "@babel/preset-react": { 731 | "version": "7.14.5", 732 | "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", 733 | "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", 734 | "requires": { 735 | "@babel/helper-plugin-utils": "^7.14.5", 736 | "@babel/helper-validator-option": "^7.14.5", 737 | "@babel/plugin-transform-react-display-name": "^7.14.5", 738 | "@babel/plugin-transform-react-jsx": "^7.14.5", 739 | "@babel/plugin-transform-react-jsx-development": "^7.14.5", 740 | "@babel/plugin-transform-react-pure-annotations": "^7.14.5" 741 | } 742 | }, 743 | "@babel/runtime": { 744 | "version": "7.15.3", 745 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", 746 | "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", 747 | "requires": { 748 | "regenerator-runtime": "^0.13.4" 749 | } 750 | }, 751 | "@babel/template": { 752 | "version": "7.14.5", 753 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", 754 | "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", 755 | "requires": { 756 | "@babel/code-frame": "^7.14.5", 757 | "@babel/parser": "^7.14.5", 758 | "@babel/types": "^7.14.5" 759 | } 760 | }, 761 | "@babel/traverse": { 762 | "version": "7.15.0", 763 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", 764 | "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", 765 | "requires": { 766 | "@babel/code-frame": "^7.14.5", 767 | "@babel/generator": "^7.15.0", 768 | "@babel/helper-function-name": "^7.14.5", 769 | "@babel/helper-hoist-variables": "^7.14.5", 770 | "@babel/helper-split-export-declaration": "^7.14.5", 771 | "@babel/parser": "^7.15.0", 772 | "@babel/types": "^7.15.0", 773 | "debug": "^4.1.0", 774 | "globals": "^11.1.0" 775 | } 776 | }, 777 | "@babel/types": { 778 | "version": "7.15.0", 779 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", 780 | "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", 781 | "requires": { 782 | "@babel/helper-validator-identifier": "^7.14.9", 783 | "to-fast-properties": "^2.0.0" 784 | } 785 | }, 786 | "acorn": { 787 | "version": "6.4.2", 788 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", 789 | "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" 790 | }, 791 | "acorn-dynamic-import": { 792 | "version": "4.0.0", 793 | "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", 794 | "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" 795 | }, 796 | "ansi-colors": { 797 | "version": "3.2.3", 798 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", 799 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 800 | "dev": true 801 | }, 802 | "ansi-regex": { 803 | "version": "3.0.0", 804 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 805 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 806 | "dev": true 807 | }, 808 | "ansi-styles": { 809 | "version": "3.2.1", 810 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 811 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 812 | "requires": { 813 | "color-convert": "^1.9.0" 814 | } 815 | }, 816 | "argparse": { 817 | "version": "1.0.10", 818 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 819 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 820 | "dev": true, 821 | "requires": { 822 | "sprintf-js": "~1.0.2" 823 | } 824 | }, 825 | "asap": { 826 | "version": "2.0.6", 827 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 828 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", 829 | "dev": true 830 | }, 831 | "babel-helper-evaluate-path": { 832 | "version": "0.5.0", 833 | "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", 834 | "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" 835 | }, 836 | "babel-helper-flip-expressions": { 837 | "version": "0.4.3", 838 | "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", 839 | "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" 840 | }, 841 | "babel-helper-is-nodes-equiv": { 842 | "version": "0.0.1", 843 | "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", 844 | "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" 845 | }, 846 | "babel-helper-is-void-0": { 847 | "version": "0.4.3", 848 | "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", 849 | "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" 850 | }, 851 | "babel-helper-mark-eval-scopes": { 852 | "version": "0.4.3", 853 | "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", 854 | "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" 855 | }, 856 | "babel-helper-remove-or-void": { 857 | "version": "0.4.3", 858 | "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", 859 | "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" 860 | }, 861 | "babel-helper-to-multiple-sequence-expressions": { 862 | "version": "0.5.0", 863 | "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", 864 | "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" 865 | }, 866 | "babel-plugin-dynamic-import-node": { 867 | "version": "2.3.3", 868 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 869 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 870 | "requires": { 871 | "object.assign": "^4.1.0" 872 | } 873 | }, 874 | "babel-plugin-minify-builtins": { 875 | "version": "0.5.0", 876 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", 877 | "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" 878 | }, 879 | "babel-plugin-minify-constant-folding": { 880 | "version": "0.5.0", 881 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", 882 | "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", 883 | "requires": { 884 | "babel-helper-evaluate-path": "^0.5.0" 885 | } 886 | }, 887 | "babel-plugin-minify-dead-code-elimination": { 888 | "version": "0.5.1", 889 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", 890 | "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", 891 | "requires": { 892 | "babel-helper-evaluate-path": "^0.5.0", 893 | "babel-helper-mark-eval-scopes": "^0.4.3", 894 | "babel-helper-remove-or-void": "^0.4.3", 895 | "lodash": "^4.17.11" 896 | } 897 | }, 898 | "babel-plugin-minify-flip-comparisons": { 899 | "version": "0.4.3", 900 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", 901 | "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", 902 | "requires": { 903 | "babel-helper-is-void-0": "^0.4.3" 904 | } 905 | }, 906 | "babel-plugin-minify-guarded-expressions": { 907 | "version": "0.4.4", 908 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", 909 | "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", 910 | "requires": { 911 | "babel-helper-evaluate-path": "^0.5.0", 912 | "babel-helper-flip-expressions": "^0.4.3" 913 | } 914 | }, 915 | "babel-plugin-minify-infinity": { 916 | "version": "0.4.3", 917 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", 918 | "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" 919 | }, 920 | "babel-plugin-minify-mangle-names": { 921 | "version": "0.5.0", 922 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", 923 | "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", 924 | "requires": { 925 | "babel-helper-mark-eval-scopes": "^0.4.3" 926 | } 927 | }, 928 | "babel-plugin-minify-numeric-literals": { 929 | "version": "0.4.3", 930 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", 931 | "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" 932 | }, 933 | "babel-plugin-minify-replace": { 934 | "version": "0.5.0", 935 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", 936 | "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" 937 | }, 938 | "babel-plugin-minify-simplify": { 939 | "version": "0.5.1", 940 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", 941 | "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", 942 | "requires": { 943 | "babel-helper-evaluate-path": "^0.5.0", 944 | "babel-helper-flip-expressions": "^0.4.3", 945 | "babel-helper-is-nodes-equiv": "^0.0.1", 946 | "babel-helper-to-multiple-sequence-expressions": "^0.5.0" 947 | } 948 | }, 949 | "babel-plugin-minify-type-constructors": { 950 | "version": "0.4.3", 951 | "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", 952 | "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", 953 | "requires": { 954 | "babel-helper-is-void-0": "^0.4.3" 955 | } 956 | }, 957 | "babel-plugin-polyfill-corejs2": { 958 | "version": "0.2.2", 959 | "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", 960 | "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", 961 | "requires": { 962 | "@babel/compat-data": "^7.13.11", 963 | "@babel/helper-define-polyfill-provider": "^0.2.2", 964 | "semver": "^6.1.1" 965 | } 966 | }, 967 | "babel-plugin-polyfill-corejs3": { 968 | "version": "0.2.4", 969 | "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", 970 | "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", 971 | "requires": { 972 | "@babel/helper-define-polyfill-provider": "^0.2.2", 973 | "core-js-compat": "^3.14.0" 974 | } 975 | }, 976 | "babel-plugin-polyfill-regenerator": { 977 | "version": "0.2.2", 978 | "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", 979 | "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", 980 | "requires": { 981 | "@babel/helper-define-polyfill-provider": "^0.2.2" 982 | } 983 | }, 984 | "babel-plugin-transform-inline-consecutive-adds": { 985 | "version": "0.4.3", 986 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", 987 | "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" 988 | }, 989 | "babel-plugin-transform-member-expression-literals": { 990 | "version": "6.9.4", 991 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", 992 | "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" 993 | }, 994 | "babel-plugin-transform-merge-sibling-variables": { 995 | "version": "6.9.4", 996 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", 997 | "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" 998 | }, 999 | "babel-plugin-transform-minify-booleans": { 1000 | "version": "6.9.4", 1001 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", 1002 | "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" 1003 | }, 1004 | "babel-plugin-transform-property-literals": { 1005 | "version": "6.9.4", 1006 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", 1007 | "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", 1008 | "requires": { 1009 | "esutils": "^2.0.2" 1010 | } 1011 | }, 1012 | "babel-plugin-transform-regexp-constructors": { 1013 | "version": "0.4.3", 1014 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", 1015 | "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" 1016 | }, 1017 | "babel-plugin-transform-remove-console": { 1018 | "version": "6.9.4", 1019 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", 1020 | "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" 1021 | }, 1022 | "babel-plugin-transform-remove-debugger": { 1023 | "version": "6.9.4", 1024 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", 1025 | "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" 1026 | }, 1027 | "babel-plugin-transform-remove-undefined": { 1028 | "version": "0.5.0", 1029 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", 1030 | "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", 1031 | "requires": { 1032 | "babel-helper-evaluate-path": "^0.5.0" 1033 | } 1034 | }, 1035 | "babel-plugin-transform-simplify-comparison-operators": { 1036 | "version": "6.9.4", 1037 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", 1038 | "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" 1039 | }, 1040 | "babel-plugin-transform-undefined-to-void": { 1041 | "version": "6.9.4", 1042 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", 1043 | "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" 1044 | }, 1045 | "babel-preset-meteor": { 1046 | "version": "7.10.0", 1047 | "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", 1048 | "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", 1049 | "requires": { 1050 | "@babel/plugin-proposal-async-generator-functions": "^7.13.15", 1051 | "@babel/plugin-proposal-class-properties": "^7.13.0", 1052 | "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", 1053 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", 1054 | "@babel/plugin-proposal-object-rest-spread": "^7.13.8", 1055 | "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", 1056 | "@babel/plugin-proposal-optional-chaining": "^7.13.12", 1057 | "@babel/plugin-syntax-async-generators": "^7.8.4", 1058 | "@babel/plugin-syntax-class-properties": "^7.12.13", 1059 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", 1060 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3", 1061 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", 1062 | "@babel/plugin-syntax-optional-chaining": "^7.8.3", 1063 | "@babel/plugin-transform-arrow-functions": "^7.13.0", 1064 | "@babel/plugin-transform-async-to-generator": "^7.13.0", 1065 | "@babel/plugin-transform-block-scoped-functions": "^7.12.13", 1066 | "@babel/plugin-transform-block-scoping": "^7.13.16", 1067 | "@babel/plugin-transform-classes": "^7.13.0", 1068 | "@babel/plugin-transform-computed-properties": "^7.13.0", 1069 | "@babel/plugin-transform-destructuring": "^7.13.17", 1070 | "@babel/plugin-transform-exponentiation-operator": "^7.12.13", 1071 | "@babel/plugin-transform-for-of": "^7.13.0", 1072 | "@babel/plugin-transform-literals": "^7.12.13", 1073 | "@babel/plugin-transform-object-super": "^7.12.13", 1074 | "@babel/plugin-transform-parameters": "^7.13.0", 1075 | "@babel/plugin-transform-property-literals": "^7.12.13", 1076 | "@babel/plugin-transform-regenerator": "^7.13.15", 1077 | "@babel/plugin-transform-shorthand-properties": "^7.12.13", 1078 | "@babel/plugin-transform-spread": "^7.13.0", 1079 | "@babel/plugin-transform-sticky-regex": "^7.12.13", 1080 | "@babel/plugin-transform-template-literals": "^7.13.0", 1081 | "@babel/plugin-transform-typeof-symbol": "^7.12.13", 1082 | "@babel/plugin-transform-unicode-regex": "^7.12.13" 1083 | } 1084 | }, 1085 | "babel-preset-minify": { 1086 | "version": "0.5.1", 1087 | "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", 1088 | "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", 1089 | "requires": { 1090 | "babel-plugin-minify-builtins": "^0.5.0", 1091 | "babel-plugin-minify-constant-folding": "^0.5.0", 1092 | "babel-plugin-minify-dead-code-elimination": "^0.5.1", 1093 | "babel-plugin-minify-flip-comparisons": "^0.4.3", 1094 | "babel-plugin-minify-guarded-expressions": "^0.4.4", 1095 | "babel-plugin-minify-infinity": "^0.4.3", 1096 | "babel-plugin-minify-mangle-names": "^0.5.0", 1097 | "babel-plugin-minify-numeric-literals": "^0.4.3", 1098 | "babel-plugin-minify-replace": "^0.5.0", 1099 | "babel-plugin-minify-simplify": "^0.5.1", 1100 | "babel-plugin-minify-type-constructors": "^0.4.3", 1101 | "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", 1102 | "babel-plugin-transform-member-expression-literals": "^6.9.4", 1103 | "babel-plugin-transform-merge-sibling-variables": "^6.9.4", 1104 | "babel-plugin-transform-minify-booleans": "^6.9.4", 1105 | "babel-plugin-transform-property-literals": "^6.9.4", 1106 | "babel-plugin-transform-regexp-constructors": "^0.4.3", 1107 | "babel-plugin-transform-remove-console": "^6.9.4", 1108 | "babel-plugin-transform-remove-debugger": "^6.9.4", 1109 | "babel-plugin-transform-remove-undefined": "^0.5.0", 1110 | "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", 1111 | "babel-plugin-transform-undefined-to-void": "^6.9.4", 1112 | "lodash": "^4.17.11" 1113 | } 1114 | }, 1115 | "balanced-match": { 1116 | "version": "1.0.2", 1117 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1118 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1119 | "dev": true 1120 | }, 1121 | "brace-expansion": { 1122 | "version": "1.1.11", 1123 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1124 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1125 | "dev": true, 1126 | "requires": { 1127 | "balanced-match": "^1.0.0", 1128 | "concat-map": "0.0.1" 1129 | } 1130 | }, 1131 | "browser-stdout": { 1132 | "version": "1.3.1", 1133 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 1134 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 1135 | "dev": true 1136 | }, 1137 | "browserslist": { 1138 | "version": "4.16.6", 1139 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", 1140 | "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", 1141 | "requires": { 1142 | "caniuse-lite": "^1.0.30001219", 1143 | "colorette": "^1.2.2", 1144 | "electron-to-chromium": "^1.3.723", 1145 | "escalade": "^3.1.1", 1146 | "node-releases": "^1.1.71" 1147 | } 1148 | }, 1149 | "call-bind": { 1150 | "version": "1.0.2", 1151 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1152 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1153 | "requires": { 1154 | "function-bind": "^1.1.1", 1155 | "get-intrinsic": "^1.0.2" 1156 | } 1157 | }, 1158 | "camelcase": { 1159 | "version": "5.3.1", 1160 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1161 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1162 | "dev": true 1163 | }, 1164 | "caniuse-lite": { 1165 | "version": "1.0.30001248", 1166 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", 1167 | "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==" 1168 | }, 1169 | "chalk": { 1170 | "version": "2.4.2", 1171 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1172 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1173 | "requires": { 1174 | "ansi-styles": "^3.2.1", 1175 | "escape-string-regexp": "^1.0.5", 1176 | "supports-color": "^5.3.0" 1177 | } 1178 | }, 1179 | "cliui": { 1180 | "version": "5.0.0", 1181 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 1182 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 1183 | "dev": true, 1184 | "requires": { 1185 | "string-width": "^3.1.0", 1186 | "strip-ansi": "^5.2.0", 1187 | "wrap-ansi": "^5.1.0" 1188 | }, 1189 | "dependencies": { 1190 | "ansi-regex": { 1191 | "version": "4.1.0", 1192 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1193 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1194 | "dev": true 1195 | }, 1196 | "string-width": { 1197 | "version": "3.1.0", 1198 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1199 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1200 | "dev": true, 1201 | "requires": { 1202 | "emoji-regex": "^7.0.1", 1203 | "is-fullwidth-code-point": "^2.0.0", 1204 | "strip-ansi": "^5.1.0" 1205 | } 1206 | }, 1207 | "strip-ansi": { 1208 | "version": "5.2.0", 1209 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1210 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1211 | "dev": true, 1212 | "requires": { 1213 | "ansi-regex": "^4.1.0" 1214 | } 1215 | } 1216 | } 1217 | }, 1218 | "color-convert": { 1219 | "version": "1.9.3", 1220 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1221 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1222 | "requires": { 1223 | "color-name": "1.1.3" 1224 | } 1225 | }, 1226 | "color-name": { 1227 | "version": "1.1.3", 1228 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1229 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1230 | }, 1231 | "colorette": { 1232 | "version": "1.2.2", 1233 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 1234 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" 1235 | }, 1236 | "commander": { 1237 | "version": "2.20.3", 1238 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1239 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1240 | "dev": true 1241 | }, 1242 | "concat-map": { 1243 | "version": "0.0.1", 1244 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1245 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1246 | "dev": true 1247 | }, 1248 | "convert-source-map": { 1249 | "version": "1.8.0", 1250 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 1251 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 1252 | "requires": { 1253 | "safe-buffer": "~5.1.1" 1254 | } 1255 | }, 1256 | "core-js-compat": { 1257 | "version": "3.16.1", 1258 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.1.tgz", 1259 | "integrity": "sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ==", 1260 | "requires": { 1261 | "browserslist": "^4.16.7", 1262 | "semver": "7.0.0" 1263 | }, 1264 | "dependencies": { 1265 | "browserslist": { 1266 | "version": "4.16.7", 1267 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", 1268 | "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", 1269 | "requires": { 1270 | "caniuse-lite": "^1.0.30001248", 1271 | "colorette": "^1.2.2", 1272 | "electron-to-chromium": "^1.3.793", 1273 | "escalade": "^3.1.1", 1274 | "node-releases": "^1.1.73" 1275 | } 1276 | }, 1277 | "semver": { 1278 | "version": "7.0.0", 1279 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1280 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" 1281 | } 1282 | } 1283 | }, 1284 | "d3": { 1285 | "version": "4.13.0", 1286 | "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", 1287 | "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", 1288 | "dev": true, 1289 | "requires": { 1290 | "d3-array": "1.2.1", 1291 | "d3-axis": "1.0.8", 1292 | "d3-brush": "1.0.4", 1293 | "d3-chord": "1.0.4", 1294 | "d3-collection": "1.0.4", 1295 | "d3-color": "1.0.3", 1296 | "d3-dispatch": "1.0.3", 1297 | "d3-drag": "1.2.1", 1298 | "d3-dsv": "1.0.8", 1299 | "d3-ease": "1.0.3", 1300 | "d3-force": "1.1.0", 1301 | "d3-format": "1.2.2", 1302 | "d3-geo": "1.9.1", 1303 | "d3-hierarchy": "1.1.5", 1304 | "d3-interpolate": "1.1.6", 1305 | "d3-path": "1.0.5", 1306 | "d3-polygon": "1.0.3", 1307 | "d3-quadtree": "1.0.3", 1308 | "d3-queue": "3.0.7", 1309 | "d3-random": "1.1.0", 1310 | "d3-request": "1.0.6", 1311 | "d3-scale": "1.0.7", 1312 | "d3-selection": "1.3.0", 1313 | "d3-shape": "1.2.0", 1314 | "d3-time": "1.0.8", 1315 | "d3-time-format": "2.1.1", 1316 | "d3-timer": "1.0.7", 1317 | "d3-transition": "1.1.1", 1318 | "d3-voronoi": "1.1.2", 1319 | "d3-zoom": "1.7.1" 1320 | } 1321 | }, 1322 | "d3-array": { 1323 | "version": "1.2.1", 1324 | "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", 1325 | "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", 1326 | "dev": true 1327 | }, 1328 | "d3-axis": { 1329 | "version": "1.0.8", 1330 | "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", 1331 | "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", 1332 | "dev": true 1333 | }, 1334 | "d3-brush": { 1335 | "version": "1.0.4", 1336 | "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", 1337 | "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", 1338 | "dev": true, 1339 | "requires": { 1340 | "d3-dispatch": "1", 1341 | "d3-drag": "1", 1342 | "d3-interpolate": "1", 1343 | "d3-selection": "1", 1344 | "d3-transition": "1" 1345 | } 1346 | }, 1347 | "d3-chord": { 1348 | "version": "1.0.4", 1349 | "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", 1350 | "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", 1351 | "dev": true, 1352 | "requires": { 1353 | "d3-array": "1", 1354 | "d3-path": "1" 1355 | } 1356 | }, 1357 | "d3-collection": { 1358 | "version": "1.0.4", 1359 | "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", 1360 | "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", 1361 | "dev": true 1362 | }, 1363 | "d3-color": { 1364 | "version": "1.0.3", 1365 | "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", 1366 | "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", 1367 | "dev": true 1368 | }, 1369 | "d3-dispatch": { 1370 | "version": "1.0.3", 1371 | "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", 1372 | "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", 1373 | "dev": true 1374 | }, 1375 | "d3-drag": { 1376 | "version": "1.2.1", 1377 | "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", 1378 | "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", 1379 | "dev": true, 1380 | "requires": { 1381 | "d3-dispatch": "1", 1382 | "d3-selection": "1" 1383 | } 1384 | }, 1385 | "d3-dsv": { 1386 | "version": "1.0.8", 1387 | "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", 1388 | "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", 1389 | "dev": true, 1390 | "requires": { 1391 | "commander": "2", 1392 | "iconv-lite": "0.4", 1393 | "rw": "1" 1394 | } 1395 | }, 1396 | "d3-ease": { 1397 | "version": "1.0.3", 1398 | "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", 1399 | "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", 1400 | "dev": true 1401 | }, 1402 | "d3-force": { 1403 | "version": "1.1.0", 1404 | "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", 1405 | "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", 1406 | "dev": true, 1407 | "requires": { 1408 | "d3-collection": "1", 1409 | "d3-dispatch": "1", 1410 | "d3-quadtree": "1", 1411 | "d3-timer": "1" 1412 | } 1413 | }, 1414 | "d3-format": { 1415 | "version": "1.2.2", 1416 | "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", 1417 | "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", 1418 | "dev": true 1419 | }, 1420 | "d3-geo": { 1421 | "version": "1.9.1", 1422 | "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", 1423 | "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", 1424 | "dev": true, 1425 | "requires": { 1426 | "d3-array": "1" 1427 | } 1428 | }, 1429 | "d3-hierarchy": { 1430 | "version": "1.1.5", 1431 | "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", 1432 | "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", 1433 | "dev": true 1434 | }, 1435 | "d3-interpolate": { 1436 | "version": "1.1.6", 1437 | "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", 1438 | "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", 1439 | "dev": true, 1440 | "requires": { 1441 | "d3-color": "1" 1442 | } 1443 | }, 1444 | "d3-path": { 1445 | "version": "1.0.5", 1446 | "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", 1447 | "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", 1448 | "dev": true 1449 | }, 1450 | "d3-polygon": { 1451 | "version": "1.0.3", 1452 | "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", 1453 | "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", 1454 | "dev": true 1455 | }, 1456 | "d3-quadtree": { 1457 | "version": "1.0.3", 1458 | "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", 1459 | "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", 1460 | "dev": true 1461 | }, 1462 | "d3-queue": { 1463 | "version": "3.0.7", 1464 | "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", 1465 | "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", 1466 | "dev": true 1467 | }, 1468 | "d3-random": { 1469 | "version": "1.1.0", 1470 | "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", 1471 | "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", 1472 | "dev": true 1473 | }, 1474 | "d3-request": { 1475 | "version": "1.0.6", 1476 | "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", 1477 | "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", 1478 | "dev": true, 1479 | "requires": { 1480 | "d3-collection": "1", 1481 | "d3-dispatch": "1", 1482 | "d3-dsv": "1", 1483 | "xmlhttprequest": "1" 1484 | } 1485 | }, 1486 | "d3-scale": { 1487 | "version": "1.0.7", 1488 | "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", 1489 | "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", 1490 | "dev": true, 1491 | "requires": { 1492 | "d3-array": "^1.2.0", 1493 | "d3-collection": "1", 1494 | "d3-color": "1", 1495 | "d3-format": "1", 1496 | "d3-interpolate": "1", 1497 | "d3-time": "1", 1498 | "d3-time-format": "2" 1499 | } 1500 | }, 1501 | "d3-selection": { 1502 | "version": "1.3.0", 1503 | "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", 1504 | "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", 1505 | "dev": true 1506 | }, 1507 | "d3-shape": { 1508 | "version": "1.2.0", 1509 | "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", 1510 | "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", 1511 | "dev": true, 1512 | "requires": { 1513 | "d3-path": "1" 1514 | } 1515 | }, 1516 | "d3-time": { 1517 | "version": "1.0.8", 1518 | "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", 1519 | "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", 1520 | "dev": true 1521 | }, 1522 | "d3-time-format": { 1523 | "version": "2.1.1", 1524 | "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", 1525 | "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", 1526 | "dev": true, 1527 | "requires": { 1528 | "d3-time": "1" 1529 | } 1530 | }, 1531 | "d3-timer": { 1532 | "version": "1.0.7", 1533 | "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", 1534 | "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", 1535 | "dev": true 1536 | }, 1537 | "d3-transition": { 1538 | "version": "1.1.1", 1539 | "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", 1540 | "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", 1541 | "dev": true, 1542 | "requires": { 1543 | "d3-color": "1", 1544 | "d3-dispatch": "1", 1545 | "d3-ease": "1", 1546 | "d3-interpolate": "1", 1547 | "d3-selection": "^1.1.0", 1548 | "d3-timer": "1" 1549 | } 1550 | }, 1551 | "d3-voronoi": { 1552 | "version": "1.1.2", 1553 | "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", 1554 | "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", 1555 | "dev": true 1556 | }, 1557 | "d3-zoom": { 1558 | "version": "1.7.1", 1559 | "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", 1560 | "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", 1561 | "dev": true, 1562 | "requires": { 1563 | "d3-dispatch": "1", 1564 | "d3-drag": "1", 1565 | "d3-interpolate": "1", 1566 | "d3-selection": "1", 1567 | "d3-transition": "1" 1568 | } 1569 | }, 1570 | "debug": { 1571 | "version": "4.3.2", 1572 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1573 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1574 | "requires": { 1575 | "ms": "2.1.2" 1576 | } 1577 | }, 1578 | "decamelize": { 1579 | "version": "1.2.0", 1580 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1581 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 1582 | "dev": true 1583 | }, 1584 | "define-properties": { 1585 | "version": "1.1.3", 1586 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1587 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1588 | "requires": { 1589 | "object-keys": "^1.0.12" 1590 | } 1591 | }, 1592 | "detect-libc": { 1593 | "version": "1.0.3", 1594 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 1595 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", 1596 | "dev": true 1597 | }, 1598 | "diff": { 1599 | "version": "3.5.0", 1600 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 1601 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 1602 | "dev": true 1603 | }, 1604 | "electron-to-chromium": { 1605 | "version": "1.3.793", 1606 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", 1607 | "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" 1608 | }, 1609 | "emoji-regex": { 1610 | "version": "7.0.3", 1611 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1612 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 1613 | "dev": true 1614 | }, 1615 | "es-abstract": { 1616 | "version": "1.18.5", 1617 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", 1618 | "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", 1619 | "dev": true, 1620 | "requires": { 1621 | "call-bind": "^1.0.2", 1622 | "es-to-primitive": "^1.2.1", 1623 | "function-bind": "^1.1.1", 1624 | "get-intrinsic": "^1.1.1", 1625 | "has": "^1.0.3", 1626 | "has-symbols": "^1.0.2", 1627 | "internal-slot": "^1.0.3", 1628 | "is-callable": "^1.2.3", 1629 | "is-negative-zero": "^2.0.1", 1630 | "is-regex": "^1.1.3", 1631 | "is-string": "^1.0.6", 1632 | "object-inspect": "^1.11.0", 1633 | "object-keys": "^1.1.1", 1634 | "object.assign": "^4.1.2", 1635 | "string.prototype.trimend": "^1.0.4", 1636 | "string.prototype.trimstart": "^1.0.4", 1637 | "unbox-primitive": "^1.0.1" 1638 | } 1639 | }, 1640 | "es-to-primitive": { 1641 | "version": "1.2.1", 1642 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1643 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1644 | "dev": true, 1645 | "requires": { 1646 | "is-callable": "^1.1.4", 1647 | "is-date-object": "^1.0.1", 1648 | "is-symbol": "^1.0.2" 1649 | } 1650 | }, 1651 | "escalade": { 1652 | "version": "3.1.1", 1653 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1654 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1655 | }, 1656 | "escape-string-regexp": { 1657 | "version": "1.0.5", 1658 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1659 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1660 | }, 1661 | "esprima": { 1662 | "version": "4.0.1", 1663 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1664 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1665 | "dev": true 1666 | }, 1667 | "esutils": { 1668 | "version": "2.0.3", 1669 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1670 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 1671 | }, 1672 | "fibers": { 1673 | "version": "5.0.0", 1674 | "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", 1675 | "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", 1676 | "dev": true, 1677 | "requires": { 1678 | "detect-libc": "^1.0.3" 1679 | } 1680 | }, 1681 | "find-up": { 1682 | "version": "3.0.0", 1683 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1684 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1685 | "dev": true, 1686 | "requires": { 1687 | "locate-path": "^3.0.0" 1688 | } 1689 | }, 1690 | "flat": { 1691 | "version": "4.1.1", 1692 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", 1693 | "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", 1694 | "dev": true, 1695 | "requires": { 1696 | "is-buffer": "~2.0.3" 1697 | } 1698 | }, 1699 | "fs.realpath": { 1700 | "version": "1.0.0", 1701 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1702 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1703 | "dev": true 1704 | }, 1705 | "function-bind": { 1706 | "version": "1.1.1", 1707 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1708 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1709 | }, 1710 | "gensync": { 1711 | "version": "1.0.0-beta.2", 1712 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1713 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" 1714 | }, 1715 | "get-caller-file": { 1716 | "version": "2.0.5", 1717 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1718 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1719 | "dev": true 1720 | }, 1721 | "get-intrinsic": { 1722 | "version": "1.1.1", 1723 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1724 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1725 | "requires": { 1726 | "function-bind": "^1.1.1", 1727 | "has": "^1.0.3", 1728 | "has-symbols": "^1.0.1" 1729 | } 1730 | }, 1731 | "glob": { 1732 | "version": "7.1.3", 1733 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1734 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1735 | "dev": true, 1736 | "requires": { 1737 | "fs.realpath": "^1.0.0", 1738 | "inflight": "^1.0.4", 1739 | "inherits": "2", 1740 | "minimatch": "^3.0.4", 1741 | "once": "^1.3.0", 1742 | "path-is-absolute": "^1.0.0" 1743 | } 1744 | }, 1745 | "globals": { 1746 | "version": "11.12.0", 1747 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1748 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" 1749 | }, 1750 | "growl": { 1751 | "version": "1.10.5", 1752 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1753 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1754 | "dev": true 1755 | }, 1756 | "has": { 1757 | "version": "1.0.3", 1758 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1759 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1760 | "requires": { 1761 | "function-bind": "^1.1.1" 1762 | } 1763 | }, 1764 | "has-bigints": { 1765 | "version": "1.0.1", 1766 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 1767 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", 1768 | "dev": true 1769 | }, 1770 | "has-flag": { 1771 | "version": "3.0.0", 1772 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1773 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1774 | }, 1775 | "has-symbols": { 1776 | "version": "1.0.2", 1777 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1778 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 1779 | }, 1780 | "he": { 1781 | "version": "1.2.0", 1782 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1783 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1784 | "dev": true 1785 | }, 1786 | "iconv-lite": { 1787 | "version": "0.4.24", 1788 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1789 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1790 | "dev": true, 1791 | "requires": { 1792 | "safer-buffer": ">= 2.1.2 < 3" 1793 | } 1794 | }, 1795 | "inflight": { 1796 | "version": "1.0.6", 1797 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1798 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1799 | "dev": true, 1800 | "requires": { 1801 | "once": "^1.3.0", 1802 | "wrappy": "1" 1803 | } 1804 | }, 1805 | "inherits": { 1806 | "version": "2.0.4", 1807 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1808 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1809 | "dev": true 1810 | }, 1811 | "internal-slot": { 1812 | "version": "1.0.3", 1813 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", 1814 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", 1815 | "dev": true, 1816 | "requires": { 1817 | "get-intrinsic": "^1.1.0", 1818 | "has": "^1.0.3", 1819 | "side-channel": "^1.0.4" 1820 | } 1821 | }, 1822 | "is-bigint": { 1823 | "version": "1.0.2", 1824 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", 1825 | "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", 1826 | "dev": true 1827 | }, 1828 | "is-boolean-object": { 1829 | "version": "1.1.1", 1830 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", 1831 | "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", 1832 | "dev": true, 1833 | "requires": { 1834 | "call-bind": "^1.0.2" 1835 | } 1836 | }, 1837 | "is-buffer": { 1838 | "version": "2.0.5", 1839 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", 1840 | "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", 1841 | "dev": true 1842 | }, 1843 | "is-callable": { 1844 | "version": "1.2.3", 1845 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 1846 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", 1847 | "dev": true 1848 | }, 1849 | "is-core-module": { 1850 | "version": "2.5.0", 1851 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", 1852 | "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", 1853 | "requires": { 1854 | "has": "^1.0.3" 1855 | } 1856 | }, 1857 | "is-date-object": { 1858 | "version": "1.0.4", 1859 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", 1860 | "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", 1861 | "dev": true 1862 | }, 1863 | "is-fullwidth-code-point": { 1864 | "version": "2.0.0", 1865 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1866 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1867 | "dev": true 1868 | }, 1869 | "is-negative-zero": { 1870 | "version": "2.0.1", 1871 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 1872 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", 1873 | "dev": true 1874 | }, 1875 | "is-number-object": { 1876 | "version": "1.0.5", 1877 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", 1878 | "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", 1879 | "dev": true 1880 | }, 1881 | "is-regex": { 1882 | "version": "1.1.3", 1883 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", 1884 | "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", 1885 | "dev": true, 1886 | "requires": { 1887 | "call-bind": "^1.0.2", 1888 | "has-symbols": "^1.0.2" 1889 | } 1890 | }, 1891 | "is-string": { 1892 | "version": "1.0.6", 1893 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", 1894 | "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", 1895 | "dev": true 1896 | }, 1897 | "is-symbol": { 1898 | "version": "1.0.4", 1899 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1900 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1901 | "dev": true, 1902 | "requires": { 1903 | "has-symbols": "^1.0.2" 1904 | } 1905 | }, 1906 | "isexe": { 1907 | "version": "2.0.0", 1908 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1909 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1910 | "dev": true 1911 | }, 1912 | "js-tokens": { 1913 | "version": "4.0.0", 1914 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1915 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1916 | }, 1917 | "js-yaml": { 1918 | "version": "3.13.1", 1919 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1920 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1921 | "dev": true, 1922 | "requires": { 1923 | "argparse": "^1.0.7", 1924 | "esprima": "^4.0.0" 1925 | } 1926 | }, 1927 | "jsesc": { 1928 | "version": "2.5.2", 1929 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1930 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" 1931 | }, 1932 | "json5": { 1933 | "version": "2.2.0", 1934 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 1935 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 1936 | "requires": { 1937 | "minimist": "^1.2.5" 1938 | } 1939 | }, 1940 | "locate-path": { 1941 | "version": "3.0.0", 1942 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1943 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1944 | "dev": true, 1945 | "requires": { 1946 | "p-locate": "^3.0.0", 1947 | "path-exists": "^3.0.0" 1948 | } 1949 | }, 1950 | "lodash": { 1951 | "version": "4.17.21", 1952 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1953 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1954 | }, 1955 | "lodash.debounce": { 1956 | "version": "4.0.8", 1957 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 1958 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" 1959 | }, 1960 | "log-symbols": { 1961 | "version": "2.2.0", 1962 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 1963 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 1964 | "dev": true, 1965 | "requires": { 1966 | "chalk": "^2.0.1" 1967 | } 1968 | }, 1969 | "magic-string": { 1970 | "version": "0.25.7", 1971 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1972 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1973 | "requires": { 1974 | "sourcemap-codec": "^1.4.4" 1975 | } 1976 | }, 1977 | "meteor-babel-helpers": { 1978 | "version": "0.0.3", 1979 | "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", 1980 | "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" 1981 | }, 1982 | "meteor-promise": { 1983 | "version": "0.9.0", 1984 | "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", 1985 | "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", 1986 | "dev": true 1987 | }, 1988 | "minimatch": { 1989 | "version": "3.0.4", 1990 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1991 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1992 | "dev": true, 1993 | "requires": { 1994 | "brace-expansion": "^1.1.7" 1995 | } 1996 | }, 1997 | "minimist": { 1998 | "version": "1.2.5", 1999 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 2000 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 2001 | }, 2002 | "mkdirp": { 2003 | "version": "0.5.4", 2004 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", 2005 | "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", 2006 | "dev": true, 2007 | "requires": { 2008 | "minimist": "^1.2.5" 2009 | } 2010 | }, 2011 | "mocha": { 2012 | "version": "6.2.3", 2013 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", 2014 | "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", 2015 | "dev": true, 2016 | "requires": { 2017 | "ansi-colors": "3.2.3", 2018 | "browser-stdout": "1.3.1", 2019 | "debug": "3.2.6", 2020 | "diff": "3.5.0", 2021 | "escape-string-regexp": "1.0.5", 2022 | "find-up": "3.0.0", 2023 | "glob": "7.1.3", 2024 | "growl": "1.10.5", 2025 | "he": "1.2.0", 2026 | "js-yaml": "3.13.1", 2027 | "log-symbols": "2.2.0", 2028 | "minimatch": "3.0.4", 2029 | "mkdirp": "0.5.4", 2030 | "ms": "2.1.1", 2031 | "node-environment-flags": "1.0.5", 2032 | "object.assign": "4.1.0", 2033 | "strip-json-comments": "2.0.1", 2034 | "supports-color": "6.0.0", 2035 | "which": "1.3.1", 2036 | "wide-align": "1.1.3", 2037 | "yargs": "13.3.2", 2038 | "yargs-parser": "13.1.2", 2039 | "yargs-unparser": "1.6.0" 2040 | }, 2041 | "dependencies": { 2042 | "debug": { 2043 | "version": "3.2.6", 2044 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 2045 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 2046 | "dev": true, 2047 | "requires": { 2048 | "ms": "^2.1.1" 2049 | } 2050 | }, 2051 | "ms": { 2052 | "version": "2.1.1", 2053 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 2054 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 2055 | "dev": true 2056 | }, 2057 | "object.assign": { 2058 | "version": "4.1.0", 2059 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 2060 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 2061 | "dev": true, 2062 | "requires": { 2063 | "define-properties": "^1.1.2", 2064 | "function-bind": "^1.1.1", 2065 | "has-symbols": "^1.0.0", 2066 | "object-keys": "^1.0.11" 2067 | } 2068 | }, 2069 | "supports-color": { 2070 | "version": "6.0.0", 2071 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 2072 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 2073 | "dev": true, 2074 | "requires": { 2075 | "has-flag": "^3.0.0" 2076 | } 2077 | } 2078 | } 2079 | }, 2080 | "ms": { 2081 | "version": "2.1.2", 2082 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2083 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2084 | }, 2085 | "node-environment-flags": { 2086 | "version": "1.0.5", 2087 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", 2088 | "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", 2089 | "dev": true, 2090 | "requires": { 2091 | "object.getownpropertydescriptors": "^2.0.3", 2092 | "semver": "^5.7.0" 2093 | }, 2094 | "dependencies": { 2095 | "semver": { 2096 | "version": "5.7.1", 2097 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2098 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2099 | "dev": true 2100 | } 2101 | } 2102 | }, 2103 | "node-releases": { 2104 | "version": "1.1.73", 2105 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", 2106 | "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" 2107 | }, 2108 | "object-inspect": { 2109 | "version": "1.11.0", 2110 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", 2111 | "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", 2112 | "dev": true 2113 | }, 2114 | "object-keys": { 2115 | "version": "1.1.1", 2116 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2117 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 2118 | }, 2119 | "object.assign": { 2120 | "version": "4.1.2", 2121 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2122 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2123 | "requires": { 2124 | "call-bind": "^1.0.0", 2125 | "define-properties": "^1.1.3", 2126 | "has-symbols": "^1.0.1", 2127 | "object-keys": "^1.1.1" 2128 | } 2129 | }, 2130 | "object.getownpropertydescriptors": { 2131 | "version": "2.1.2", 2132 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", 2133 | "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", 2134 | "dev": true, 2135 | "requires": { 2136 | "call-bind": "^1.0.2", 2137 | "define-properties": "^1.1.3", 2138 | "es-abstract": "^1.18.0-next.2" 2139 | } 2140 | }, 2141 | "once": { 2142 | "version": "1.4.0", 2143 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2144 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2145 | "dev": true, 2146 | "requires": { 2147 | "wrappy": "1" 2148 | } 2149 | }, 2150 | "p-limit": { 2151 | "version": "2.3.0", 2152 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2153 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2154 | "dev": true, 2155 | "requires": { 2156 | "p-try": "^2.0.0" 2157 | } 2158 | }, 2159 | "p-locate": { 2160 | "version": "3.0.0", 2161 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2162 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2163 | "dev": true, 2164 | "requires": { 2165 | "p-limit": "^2.0.0" 2166 | } 2167 | }, 2168 | "p-try": { 2169 | "version": "2.2.0", 2170 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2171 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2172 | "dev": true 2173 | }, 2174 | "path-exists": { 2175 | "version": "3.0.0", 2176 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2177 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2178 | "dev": true 2179 | }, 2180 | "path-is-absolute": { 2181 | "version": "1.0.1", 2182 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2183 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2184 | "dev": true 2185 | }, 2186 | "path-parse": { 2187 | "version": "1.0.7", 2188 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2189 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 2190 | }, 2191 | "promise": { 2192 | "version": "8.1.0", 2193 | "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", 2194 | "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", 2195 | "dev": true, 2196 | "requires": { 2197 | "asap": "~2.0.6" 2198 | } 2199 | }, 2200 | "regenerate": { 2201 | "version": "1.4.2", 2202 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", 2203 | "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" 2204 | }, 2205 | "regenerate-unicode-properties": { 2206 | "version": "8.2.0", 2207 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", 2208 | "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", 2209 | "requires": { 2210 | "regenerate": "^1.4.0" 2211 | } 2212 | }, 2213 | "regenerator-runtime": { 2214 | "version": "0.13.9", 2215 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", 2216 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 2217 | }, 2218 | "regenerator-transform": { 2219 | "version": "0.14.5", 2220 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", 2221 | "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", 2222 | "requires": { 2223 | "@babel/runtime": "^7.8.4" 2224 | } 2225 | }, 2226 | "regexpu-core": { 2227 | "version": "4.7.1", 2228 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", 2229 | "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", 2230 | "requires": { 2231 | "regenerate": "^1.4.0", 2232 | "regenerate-unicode-properties": "^8.2.0", 2233 | "regjsgen": "^0.5.1", 2234 | "regjsparser": "^0.6.4", 2235 | "unicode-match-property-ecmascript": "^1.0.4", 2236 | "unicode-match-property-value-ecmascript": "^1.2.0" 2237 | } 2238 | }, 2239 | "regjsgen": { 2240 | "version": "0.5.2", 2241 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", 2242 | "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" 2243 | }, 2244 | "regjsparser": { 2245 | "version": "0.6.9", 2246 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", 2247 | "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", 2248 | "requires": { 2249 | "jsesc": "~0.5.0" 2250 | }, 2251 | "dependencies": { 2252 | "jsesc": { 2253 | "version": "0.5.0", 2254 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2255 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" 2256 | } 2257 | } 2258 | }, 2259 | "reify": { 2260 | "version": "0.22.0", 2261 | "resolved": "https://registry.npmjs.org/reify/-/reify-0.22.0.tgz", 2262 | "integrity": "sha512-UrQ9IOSz6/dDRrvCZ6thk/c0b6uD8W7O8FWG4X6/t1bThvVdu+ppiOFaNRUwiVOAOoeMwKPdUiWZsJ7bIrBP8A==", 2263 | "requires": { 2264 | "acorn": "^6.1.1", 2265 | "acorn-dynamic-import": "^4.0.0", 2266 | "magic-string": "^0.25.3", 2267 | "semver": "^5.4.1" 2268 | }, 2269 | "dependencies": { 2270 | "semver": { 2271 | "version": "5.7.1", 2272 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2273 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 2274 | } 2275 | } 2276 | }, 2277 | "require-directory": { 2278 | "version": "2.1.1", 2279 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2280 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2281 | "dev": true 2282 | }, 2283 | "require-main-filename": { 2284 | "version": "2.0.0", 2285 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2286 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2287 | "dev": true 2288 | }, 2289 | "resolve": { 2290 | "version": "1.20.0", 2291 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 2292 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 2293 | "requires": { 2294 | "is-core-module": "^2.2.0", 2295 | "path-parse": "^1.0.6" 2296 | } 2297 | }, 2298 | "rw": { 2299 | "version": "1.3.3", 2300 | "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 2301 | "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", 2302 | "dev": true 2303 | }, 2304 | "safe-buffer": { 2305 | "version": "5.1.2", 2306 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2307 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2308 | }, 2309 | "safer-buffer": { 2310 | "version": "2.1.2", 2311 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2312 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2313 | "dev": true 2314 | }, 2315 | "semver": { 2316 | "version": "6.3.0", 2317 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2318 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 2319 | }, 2320 | "set-blocking": { 2321 | "version": "2.0.0", 2322 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2323 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2324 | "dev": true 2325 | }, 2326 | "side-channel": { 2327 | "version": "1.0.4", 2328 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2329 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2330 | "dev": true, 2331 | "requires": { 2332 | "call-bind": "^1.0.0", 2333 | "get-intrinsic": "^1.0.2", 2334 | "object-inspect": "^1.9.0" 2335 | } 2336 | }, 2337 | "source-map": { 2338 | "version": "0.6.1", 2339 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2340 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2341 | "dev": true 2342 | }, 2343 | "sourcemap-codec": { 2344 | "version": "1.4.8", 2345 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 2346 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 2347 | }, 2348 | "sprintf-js": { 2349 | "version": "1.0.3", 2350 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2351 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2352 | "dev": true 2353 | }, 2354 | "string-width": { 2355 | "version": "2.1.1", 2356 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2357 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2358 | "dev": true, 2359 | "requires": { 2360 | "is-fullwidth-code-point": "^2.0.0", 2361 | "strip-ansi": "^4.0.0" 2362 | } 2363 | }, 2364 | "string.prototype.trimend": { 2365 | "version": "1.0.4", 2366 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 2367 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 2368 | "dev": true, 2369 | "requires": { 2370 | "call-bind": "^1.0.2", 2371 | "define-properties": "^1.1.3" 2372 | } 2373 | }, 2374 | "string.prototype.trimstart": { 2375 | "version": "1.0.4", 2376 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 2377 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 2378 | "dev": true, 2379 | "requires": { 2380 | "call-bind": "^1.0.2", 2381 | "define-properties": "^1.1.3" 2382 | } 2383 | }, 2384 | "strip-ansi": { 2385 | "version": "4.0.0", 2386 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2387 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2388 | "dev": true, 2389 | "requires": { 2390 | "ansi-regex": "^3.0.0" 2391 | } 2392 | }, 2393 | "strip-json-comments": { 2394 | "version": "2.0.1", 2395 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2396 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2397 | "dev": true 2398 | }, 2399 | "supports-color": { 2400 | "version": "5.5.0", 2401 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2402 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2403 | "requires": { 2404 | "has-flag": "^3.0.0" 2405 | } 2406 | }, 2407 | "to-fast-properties": { 2408 | "version": "2.0.0", 2409 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2410 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 2411 | }, 2412 | "typescript": { 2413 | "version": "4.3.5", 2414 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 2415 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" 2416 | }, 2417 | "unbox-primitive": { 2418 | "version": "1.0.1", 2419 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 2420 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 2421 | "dev": true, 2422 | "requires": { 2423 | "function-bind": "^1.1.1", 2424 | "has-bigints": "^1.0.1", 2425 | "has-symbols": "^1.0.2", 2426 | "which-boxed-primitive": "^1.0.2" 2427 | } 2428 | }, 2429 | "unicode-canonical-property-names-ecmascript": { 2430 | "version": "1.0.4", 2431 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 2432 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" 2433 | }, 2434 | "unicode-match-property-ecmascript": { 2435 | "version": "1.0.4", 2436 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 2437 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 2438 | "requires": { 2439 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 2440 | "unicode-property-aliases-ecmascript": "^1.0.4" 2441 | } 2442 | }, 2443 | "unicode-match-property-value-ecmascript": { 2444 | "version": "1.2.0", 2445 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", 2446 | "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" 2447 | }, 2448 | "unicode-property-aliases-ecmascript": { 2449 | "version": "1.1.0", 2450 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", 2451 | "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" 2452 | }, 2453 | "which": { 2454 | "version": "1.3.1", 2455 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2456 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2457 | "dev": true, 2458 | "requires": { 2459 | "isexe": "^2.0.0" 2460 | } 2461 | }, 2462 | "which-boxed-primitive": { 2463 | "version": "1.0.2", 2464 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 2465 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 2466 | "dev": true, 2467 | "requires": { 2468 | "is-bigint": "^1.0.1", 2469 | "is-boolean-object": "^1.1.0", 2470 | "is-number-object": "^1.0.4", 2471 | "is-string": "^1.0.5", 2472 | "is-symbol": "^1.0.3" 2473 | } 2474 | }, 2475 | "which-module": { 2476 | "version": "2.0.0", 2477 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2478 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 2479 | "dev": true 2480 | }, 2481 | "wide-align": { 2482 | "version": "1.1.3", 2483 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2484 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2485 | "dev": true, 2486 | "requires": { 2487 | "string-width": "^1.0.2 || 2" 2488 | } 2489 | }, 2490 | "wrap-ansi": { 2491 | "version": "5.1.0", 2492 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2493 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 2494 | "dev": true, 2495 | "requires": { 2496 | "ansi-styles": "^3.2.0", 2497 | "string-width": "^3.0.0", 2498 | "strip-ansi": "^5.0.0" 2499 | }, 2500 | "dependencies": { 2501 | "ansi-regex": { 2502 | "version": "4.1.0", 2503 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2504 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2505 | "dev": true 2506 | }, 2507 | "string-width": { 2508 | "version": "3.1.0", 2509 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2510 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2511 | "dev": true, 2512 | "requires": { 2513 | "emoji-regex": "^7.0.1", 2514 | "is-fullwidth-code-point": "^2.0.0", 2515 | "strip-ansi": "^5.1.0" 2516 | } 2517 | }, 2518 | "strip-ansi": { 2519 | "version": "5.2.0", 2520 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2521 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2522 | "dev": true, 2523 | "requires": { 2524 | "ansi-regex": "^4.1.0" 2525 | } 2526 | } 2527 | } 2528 | }, 2529 | "wrappy": { 2530 | "version": "1.0.2", 2531 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2532 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2533 | "dev": true 2534 | }, 2535 | "xmlhttprequest": { 2536 | "version": "1.8.0", 2537 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 2538 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", 2539 | "dev": true 2540 | }, 2541 | "y18n": { 2542 | "version": "4.0.3", 2543 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 2544 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", 2545 | "dev": true 2546 | }, 2547 | "yargs": { 2548 | "version": "13.3.2", 2549 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 2550 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 2551 | "dev": true, 2552 | "requires": { 2553 | "cliui": "^5.0.0", 2554 | "find-up": "^3.0.0", 2555 | "get-caller-file": "^2.0.1", 2556 | "require-directory": "^2.1.1", 2557 | "require-main-filename": "^2.0.0", 2558 | "set-blocking": "^2.0.0", 2559 | "string-width": "^3.0.0", 2560 | "which-module": "^2.0.0", 2561 | "y18n": "^4.0.0", 2562 | "yargs-parser": "^13.1.2" 2563 | }, 2564 | "dependencies": { 2565 | "ansi-regex": { 2566 | "version": "4.1.0", 2567 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2568 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2569 | "dev": true 2570 | }, 2571 | "string-width": { 2572 | "version": "3.1.0", 2573 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2574 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2575 | "dev": true, 2576 | "requires": { 2577 | "emoji-regex": "^7.0.1", 2578 | "is-fullwidth-code-point": "^2.0.0", 2579 | "strip-ansi": "^5.1.0" 2580 | } 2581 | }, 2582 | "strip-ansi": { 2583 | "version": "5.2.0", 2584 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2585 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2586 | "dev": true, 2587 | "requires": { 2588 | "ansi-regex": "^4.1.0" 2589 | } 2590 | } 2591 | } 2592 | }, 2593 | "yargs-parser": { 2594 | "version": "13.1.2", 2595 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 2596 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 2597 | "dev": true, 2598 | "requires": { 2599 | "camelcase": "^5.0.0", 2600 | "decamelize": "^1.2.0" 2601 | } 2602 | }, 2603 | "yargs-unparser": { 2604 | "version": "1.6.0", 2605 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", 2606 | "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", 2607 | "dev": true, 2608 | "requires": { 2609 | "flat": "^4.1.0", 2610 | "lodash": "^4.17.15", 2611 | "yargs": "^13.3.0" 2612 | } 2613 | } 2614 | } 2615 | } 2616 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@meteorjs/babel", 3 | "author": "Meteor ", 4 | "version": "7.13.0", 5 | "license": "MIT", 6 | "description": "Babel wrapper package for use with Meteor", 7 | "keywords": [ 8 | "meteor", 9 | "babel", 10 | "es6", 11 | "es7", 12 | "transpiler", 13 | "transpilation", 14 | "compilation", 15 | "transform", 16 | "syntax", 17 | "ast" 18 | ], 19 | "main": "index.js", 20 | "scripts": { 21 | "test": "test/run.sh", 22 | "update-versions": "bash scripts/update-versions" 23 | }, 24 | "homepage": "https://github.com/meteor/babel", 25 | "repository": { 26 | "type": "git", 27 | "url": "https://github.com/meteor/babel.git" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/meteor/babel/issues" 31 | }, 32 | "dependencies": { 33 | "@babel/core": "^7.15.0", 34 | "@babel/parser": "^7.15.3", 35 | "@babel/plugin-proposal-class-properties": "^7.14.5", 36 | "@babel/plugin-syntax-dynamic-import": "^7.8.3", 37 | "@babel/plugin-transform-modules-commonjs": "^7.15.0", 38 | "@babel/plugin-transform-runtime": "^7.15.0", 39 | "@babel/preset-react": "^7.14.5", 40 | "@babel/runtime": "^7.15.3", 41 | "@babel/template": "^7.14.5", 42 | "@babel/traverse": "^7.15.0", 43 | "@babel/types": "^7.15.0", 44 | "babel-preset-meteor": "^7.10.0", 45 | "babel-preset-minify": "^0.5.1", 46 | "convert-source-map": "^1.6.0", 47 | "lodash": "^4.17.21", 48 | "meteor-babel-helpers": "0.0.3", 49 | "reify": "^0.22.0", 50 | "typescript": "^4.3.5" 51 | }, 52 | "devDependencies": { 53 | "@babel/plugin-proposal-decorators": "7.14.5", 54 | "@babel/plugin-syntax-decorators": "7.14.5", 55 | "d3": "4.13.0", 56 | "fibers": "5.0.0", 57 | "meteor-promise": "0.9.0", 58 | "mocha": "6.2.3", 59 | "promise": "8.1.0", 60 | "source-map": "0.6.1" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /packages/helpers/index.js: -------------------------------------------------------------------------------- 1 | function canDefineNonEnumerableProperties() { 2 | var testObj = {}; 3 | var testPropName = "t"; 4 | 5 | try { 6 | Object.defineProperty(testObj, testPropName, { 7 | enumerable: false, 8 | value: testObj 9 | }); 10 | 11 | for (var k in testObj) { 12 | if (k === testPropName) { 13 | return false; 14 | } 15 | } 16 | } catch (e) { 17 | return false; 18 | } 19 | 20 | return testObj[testPropName] === testObj; 21 | } 22 | 23 | function sanitizeEasy(value) { 24 | return value; 25 | } 26 | 27 | function sanitizeHard(obj) { 28 | if (Array.isArray(obj)) { 29 | var newObj = {}; 30 | var keys = Object.keys(obj); 31 | var keyCount = keys.length; 32 | for (var i = 0; i < keyCount; ++i) { 33 | var key = keys[i]; 34 | newObj[key] = obj[key]; 35 | } 36 | return newObj; 37 | } 38 | 39 | return obj; 40 | } 41 | 42 | meteorBabelHelpers = module.exports = { 43 | // Meteor-specific runtime helper for wrapping the object of for-in 44 | // loops, so that inherited Array methods defined by es5-shim can be 45 | // ignored in browsers where they cannot be defined as non-enumerable. 46 | sanitizeForInObject: canDefineNonEnumerableProperties() 47 | ? sanitizeEasy 48 | : sanitizeHard, 49 | 50 | // Exposed so that we can test sanitizeForInObject in environments that 51 | // support defining non-enumerable properties. 52 | _sanitizeForInObjectHard: sanitizeHard 53 | }; 54 | -------------------------------------------------------------------------------- /packages/helpers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meteor-babel-helpers", 3 | "version": "0.0.3", 4 | "description": "Independent helpers package for @meteorjs/babel.", 5 | "author": "Ben Newman ", 6 | "main": "index.js", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/meteor/babel/tree/master/packages/helpers" 10 | }, 11 | "keywords": [ 12 | "meteor", 13 | "babel", 14 | "helpers", 15 | "runtime" 16 | ], 17 | "license": "MIT" 18 | } 19 | -------------------------------------------------------------------------------- /parser.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const babelParser = require("@babel/parser"); 4 | const defaultParserOptions = require("reify/lib/parsers/babel.js").options; 5 | 6 | function parse(code, parserOptions) { 7 | return babelParser.parse(code, parserOptions || defaultParserOptions); 8 | } 9 | 10 | exports.parse = parse; 11 | -------------------------------------------------------------------------------- /plugins/async-await.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports = function (babel) { 4 | const t = babel.types; 5 | 6 | return { 7 | name: "transform-meteor-async-await", 8 | visitor: { 9 | Function: { 10 | exit: function (path) { 11 | const node = path.node; 12 | if (! node.async) { 13 | return; 14 | } 15 | 16 | // The original function becomes a non-async function that 17 | // returns a Promise. 18 | node.async = false; 19 | 20 | // The inner function should inherit lexical environment items 21 | // like `this`, `super`, and `arguments` from the outer 22 | // function, and arrow functions provide exactly that behavior. 23 | const innerFn = t.arrowFunctionExpression( 24 | // The inner function has no parameters of its own, but can 25 | // refer to the outer parameters of the original function. 26 | [], 27 | node.body, 28 | // The inner function called by Promise.asyncApply should be 29 | // async if we have native async/await support. 30 | !! this.opts.useNativeAsyncAwait 31 | ); 32 | 33 | const promiseResultExpression = t.callExpression( 34 | t.memberExpression( 35 | t.identifier("Promise"), 36 | t.identifier("asyncApply"), 37 | false 38 | ), [innerFn] 39 | ); 40 | 41 | // Calling the async function with Promise.asyncApply is 42 | // important to ensure that the part before the first await 43 | // expression runs synchronously in its own Fiber, even when 44 | // there is native support for async/await. 45 | if (node.type === "ArrowFunctionExpression") { 46 | node.body = promiseResultExpression; 47 | } else { 48 | node.body = t.blockStatement([ 49 | t.returnStatement(promiseResultExpression) 50 | ]); 51 | } 52 | } 53 | }, 54 | 55 | AwaitExpression: function (path) { 56 | if (this.opts.useNativeAsyncAwait) { 57 | // No need to transform await expressions if we have native 58 | // support for them. 59 | return; 60 | } 61 | 62 | const node = path.node; 63 | path.replaceWith(t.callExpression( 64 | t.memberExpression( 65 | t.identifier("Promise"), 66 | t.identifier(node.all ? "awaitAll" : "await"), 67 | false 68 | ), 69 | [node.argument] 70 | )); 71 | } 72 | } 73 | }; 74 | }; 75 | -------------------------------------------------------------------------------- /plugins/inline-node-env.js: -------------------------------------------------------------------------------- 1 | module.exports = function (babel) { 2 | var t = babel.types; 3 | return { 4 | name: "meteor-babel-inline-node-env", 5 | visitor: { 6 | MemberExpression: function (path, state) { 7 | if (typeof state.opts.nodeEnv === "string" && 8 | path.get("object").matchesPattern("process.env")) { 9 | var key = path.toComputedKey(); 10 | if (t.isStringLiteral(key) && key.value === "NODE_ENV") { 11 | path.replaceWith(t.valueToNode(state.opts.nodeEnv)); 12 | } 13 | } 14 | } 15 | } 16 | }; 17 | }; 18 | -------------------------------------------------------------------------------- /plugins/named-function-expressions.js: -------------------------------------------------------------------------------- 1 | module.exports = function (babel) { 2 | var t = babel.types; 3 | 4 | return { 5 | visitor: { 6 | // From https://github.com/babel-plugins/babel-plugin-jscript 7 | // Solves http://kiro.me/blog/nfe_dilemma.html 8 | FunctionExpression: { 9 | exit: function (path) { 10 | var node = path.node; 11 | if (! node.id) return; 12 | node._ignoreUserWhitespace = true; 13 | 14 | path.replaceWith(t.callExpression( 15 | t.functionExpression(null, [], t.blockStatement([ 16 | t.toStatement(node), 17 | t.returnStatement(node.id) 18 | ])), 19 | [] 20 | )); 21 | } 22 | } 23 | } 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /plugins/sanitize-for-in-objects.js: -------------------------------------------------------------------------------- 1 | module.exports = function (babel) { 2 | var t = babel.types; 3 | 4 | return { 5 | visitor: { 6 | // In browsers that do not support defining non-enumerable 7 | // properties, defining any new methods on Array.prototype means 8 | // those methods will become visible to for-in loops. This transform 9 | // solves that problem by wrapping the object expression of every 10 | // for-in loop with a call to babelHelpers.sanitizeForInObject. 11 | ForInStatement: function (path) { 12 | var rightPath = path.get("right"); 13 | 14 | if (t.isCallExpression(rightPath.node) && 15 | t.isMemberExpression(rightPath.node.callee) && 16 | t.isIdentifier(rightPath.node.callee.property) && 17 | rightPath.node.callee.property.name === "sanitizeForInObject") { 18 | return; 19 | } 20 | 21 | rightPath.replaceWith(t.callExpression( 22 | t.memberExpression( 23 | t.identifier("meteorBabelHelpers"), 24 | t.identifier("sanitizeForInObject"), 25 | false 26 | ), 27 | [rightPath.node] 28 | )); 29 | } 30 | } 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /register.js: -------------------------------------------------------------------------------- 1 | var assert = require("assert"); 2 | var path = require("path"); 3 | var fs = require("fs"); 4 | var hasOwn = Object.hasOwnProperty; 5 | var convertSourceMap = require("convert-source-map"); 6 | var meteorBabel = require("./index.js"); 7 | var util = require("./util.js"); 8 | 9 | var Module = module.constructor; 10 | require("reify/lib/runtime").enable(Module.prototype); 11 | 12 | var config = { 13 | sourceMapRootPath: null, 14 | cacheDirectory: process.env.BABEL_CACHE_DIR, 15 | allowedDirectories: Object.create(null), 16 | excludedFiles: Object.create(null), 17 | babelOptions: null 18 | }; 19 | 20 | function setBabelOptions(options) { 21 | config.babelOptions = util.deepClone(options); 22 | // Overrides for default options: 23 | config.babelOptions.sourceMaps = true; 24 | return exports; 25 | } 26 | 27 | // Set default config.babelOptions. 28 | setBabelOptions(require("./options.js").getDefaults({ 29 | nodeMajorVersion: parseInt(process.versions.node) 30 | })); 31 | 32 | exports.setBabelOptions = setBabelOptions; 33 | 34 | exports.setSourceMapRootPath = function (smrp) { 35 | config.sourceMapRootPath = smrp; 36 | return exports; 37 | }; 38 | 39 | exports.setCacheDirectory = function (dir) { 40 | config.cacheDirectory = dir; 41 | return exports; 42 | }; 43 | 44 | exports.allowDirectory = function (dir) { 45 | config.allowedDirectories[dir] = true; 46 | // Sometimes the filename passed to the require.extensions handler is a 47 | // real path, and thus may not appear to be contained by an allowed 48 | // directory, even though it should be. 49 | config.allowedDirectories[fs.realpathSync(dir)] = true; 50 | return exports; 51 | }; 52 | 53 | exports.excludeFile = function (path) { 54 | config.excludedFiles[fs.realpathSync(path)] = true; 55 | return exports; 56 | }; 57 | 58 | var defaultJsHandler = require.extensions[".js"]; 59 | function enableExtension(ext) { 60 | const defaultHandler = require.extensions[ext] || defaultJsHandler; 61 | require.extensions[ext] = function(module, filename) { 62 | if (shouldNotTransform(filename)) { 63 | defaultHandler(module, filename); 64 | } else { 65 | module._compile( 66 | getBabelResult(filename).code, 67 | filename 68 | ); 69 | 70 | // As of version 0.10.0, the Reify require.extensions[".js"] handler 71 | // is responsible for running parent setters after the module has 72 | // finished loading for the first time, so we need to call that 73 | // method here because we are not calling the defaultHandler. 74 | module.runSetters(); 75 | } 76 | }; 77 | } 78 | enableExtension(".js"); 79 | enableExtension(".ts"); 80 | 81 | exports.retrieveSourceMap = function(filename) { 82 | if (shouldNotTransform(filename)) { 83 | return null; 84 | } 85 | 86 | const babelCore = require("@babel/core"); 87 | if (typeof babelCore.transformFromAst !== "function") { 88 | // The retrieveSourceMap function can be called as a result of 89 | // importing @babel/core for the first time, at a point in time before 90 | // babelCore.transformFromAst has been defined. The absence of that 91 | // function will cause meteorBabel.compile to fail if we try to call 92 | // getBabelResult here. Fortunately, we can just return null instead, 93 | // which means we couldn't retrieve a source map, which is fine. 94 | return null; 95 | } 96 | 97 | var result = getBabelResult(filename); 98 | var map = null; 99 | 100 | if (result) { 101 | if (result.map) { 102 | map = result.map; 103 | } else { 104 | var converted = convertSourceMap.fromSource(result.code); 105 | map = converted && converted.toJSON(); 106 | } 107 | } 108 | 109 | return map && { 110 | url: map.file, 111 | map: map 112 | } || null; 113 | }; 114 | 115 | function shouldNotTransform(filename) { 116 | if (filename.endsWith(".d.ts")) { 117 | // The official TypeScript compiler's transpileModule function fails for 118 | // .d.ts declaration files with the cryptic error "Error: Debug Failure. 119 | // Output generation failed". 120 | return true; 121 | } 122 | 123 | if (path.resolve(filename) !== 124 | path.normalize(filename)) { 125 | // If the filename is not absolute, then it's a file in a core Node 126 | // module, and should not be transformed. 127 | return true; 128 | } 129 | 130 | // Check if we have explicitly excluded this file. 131 | if (config.excludedFiles[filename] === true) { 132 | return true; 133 | } 134 | 135 | var dirs = Object.keys(config.allowedDirectories); 136 | var allowed = dirs.some(function (dir) { 137 | var relPath = path.relative(dir, filename); 138 | if (relPath.slice(0, 2) === "..") { 139 | // Ignore files that are not contained by an allowed directory. 140 | return false; 141 | } 142 | 143 | if (relPath.split(path.sep).indexOf("node_modules") >= 0) { 144 | // Ignore files that are contained by a node_modules directory that 145 | // is itself contained by the allowed dir. 146 | return false; 147 | } 148 | 149 | return true; 150 | }); 151 | 152 | return ! allowed; 153 | } 154 | 155 | function getBabelResult(filename) { 156 | var source = fs.readFileSync(filename, "utf8"); 157 | 158 | var babelOptions = {}; 159 | for (var key in config.babelOptions) { 160 | if (hasOwn.call(config.babelOptions, key)) { 161 | babelOptions[key] = config.babelOptions[key]; 162 | } 163 | } 164 | 165 | if (babelOptions.sourceMaps) { 166 | if (config.sourceMapRootPath) { 167 | var relativePath = path.relative( 168 | config.sourceMapRootPath, 169 | filename 170 | ); 171 | 172 | if (relativePath.slice(0, 2) !== "..") { 173 | // If the given filename is a path contained within 174 | // config.sourceMapRootPath, use the relative path but prepend 175 | // path.sep so that source maps work more reliably. 176 | filename = path.sep + relativePath; 177 | } 178 | } 179 | 180 | babelOptions.sourceFileName = filename; 181 | } 182 | 183 | babelOptions.filename = filename; 184 | 185 | return meteorBabel.compile(source, babelOptions, { 186 | cacheDirectory: config.cacheDirectory 187 | }); 188 | } 189 | -------------------------------------------------------------------------------- /runtime.js: -------------------------------------------------------------------------------- 1 | require("meteor-babel-helpers"); 2 | 3 | var Module = module.constructor; 4 | 5 | // The Reify runtime now requires a working implementation of 6 | // module.resolve, which should return a canonical absolute module 7 | // identifier string, like require.resolve(id). 8 | Module.prototype.resolve = function (id) { 9 | return Module._resolveFilename(id, this); 10 | }; 11 | 12 | require("reify/lib/runtime").enable(Module.prototype); 13 | 14 | require("meteor-promise").makeCompatible( 15 | global.Promise = global.Promise || 16 | require("promise/lib/es6-extensions"), 17 | require("fibers") 18 | ); 19 | 20 | // If Promise.asyncApply is defined, use it to wrap calls to 21 | // regeneratorRuntime.async so that the entire async function will run in 22 | // its own Fiber, not just the code that comes after the first await. 23 | if (typeof Promise.asyncApply === "function") { 24 | var regeneratorRuntime = require("@babel/runtime/regenerator"); 25 | var realAsync = regeneratorRuntime.async; 26 | regeneratorRuntime.async = function (innerFn) { 27 | return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /scripts/update-versions: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash -eux 2 | 3 | cd $(dirname $0)/.. 4 | 5 | # Update dependencies that start with @babel/ or babel- 6 | npm i $(node -p 'Object.keys(require("./package.json").dependencies).filter(d => d.startsWith("@babel/") || d.startsWith("babel-")).map(d => d + "@latest").join(" ")') 7 | 8 | # Update devDependencies that start with @babel/ 9 | npm i --save-dev --save-exact $(node -p 'Object.keys(require("./package.json").devDependencies).filter(d => d.startsWith("@babel/")).map(d => d + "@latest").join(" ")') 10 | 11 | git add package.json 12 | git commit -m "Update eligible dependencies to latest versions." 13 | 14 | git rm -f package-lock.json 15 | rm -rf node_modules 16 | npm i 17 | git add package-lock.json 18 | git commit -m "Update package-lock.json." 19 | -------------------------------------------------------------------------------- /test/class-properties.ts: -------------------------------------------------------------------------------- 1 | const enum TestResult { PASS, FAIL } 2 | 3 | export class Test { 4 | public property: number = 1234; 5 | public result = TestResult.PASS; 6 | constructor(public value: string) {} 7 | } 8 | -------------------------------------------------------------------------------- /test/class.ts: -------------------------------------------------------------------------------- 1 | export class TSClass { 2 | constructor(public name: string) {} 3 | } 4 | -------------------------------------------------------------------------------- /test/decorators.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import assert from "assert"; 4 | import meteorBabel from "../index.js"; 5 | 6 | describe("@decorators", function () { 7 | it("legacy @decorators in legacy browsers", function () { 8 | const babelOptions = meteorBabel.getDefaultOptions({ 9 | react: true, 10 | }); 11 | 12 | babelOptions.plugins = babelOptions.plugins || []; 13 | babelOptions.plugins.push( 14 | [require("@babel/plugin-proposal-decorators"), { 15 | legacy: true 16 | }] 17 | ); 18 | 19 | const legacyResult = meteorBabel.compile( 20 | "@dec class A {}", 21 | babelOptions 22 | ); 23 | 24 | assert.ok(legacyResult.options.parserOpts.plugins 25 | .includes("decorators-legacy")); 26 | 27 | assert.ok(legacyResult.options.plugins.some(function (plugin) { 28 | return plugin.key === "regenerator-transform"; 29 | })); 30 | 31 | assert.strictEqual(legacyResult.code.trim(), [ 32 | "var _class;", 33 | "", 34 | "var A = dec(_class = function A() {}) || _class;", 35 | ].join("\n")); 36 | }); 37 | 38 | it("legacy @decorators in modern browsers", function () { 39 | const babelOptions = meteorBabel.getDefaultOptions({ 40 | react: true, 41 | modernBrowsers: true 42 | }); 43 | 44 | babelOptions.plugins = babelOptions.plugins || []; 45 | babelOptions.plugins.push( 46 | [require("@babel/plugin-proposal-decorators"), { 47 | legacy: true 48 | }] 49 | ); 50 | 51 | const legacyResult = meteorBabel.compile( 52 | "@dec class A {}", 53 | babelOptions 54 | ); 55 | 56 | assert.ok(legacyResult.options.parserOpts.plugins 57 | .includes("decorators-legacy")); 58 | 59 | assert.ok(legacyResult.options.plugins.every(function (plugin) { 60 | return plugin.key !== "regenerator-transform"; 61 | })); 62 | 63 | assert.strictEqual(legacyResult.code.trim(), [ 64 | "var _class;", 65 | "", 66 | "let A = dec(_class = class A {}) || _class;", 67 | ].join("\n")); 68 | }); 69 | 70 | it("legacy @decorators in Node 8", function () { 71 | const babelOptions = meteorBabel.getDefaultOptions({ 72 | react: true, 73 | nodeMajorVersion: 8 74 | }); 75 | 76 | babelOptions.plugins = babelOptions.plugins || []; 77 | babelOptions.plugins.push( 78 | [require("@babel/plugin-proposal-decorators"), { 79 | legacy: true 80 | }] 81 | ); 82 | 83 | const legacyResult = meteorBabel.compile( 84 | "@dec class A {}", 85 | babelOptions 86 | ); 87 | 88 | assert.ok(legacyResult.options.parserOpts.plugins 89 | .includes("decorators-legacy")); 90 | 91 | assert.ok(legacyResult.options.plugins.every(function (plugin) { 92 | return plugin.key !== "regenerator-transform"; 93 | })); 94 | 95 | assert.ok(legacyResult.options.plugins.some(function (plugin) { 96 | return plugin.key === "transform-meteor-async-await"; 97 | })); 98 | 99 | assert.strictEqual(legacyResult.code.trim(), [ 100 | "var _class;", 101 | "", 102 | "let A = dec(_class = class A {}) || _class;", 103 | ].join("\n")); 104 | }); 105 | }); 106 | -------------------------------------------------------------------------------- /test/export-default-from.js: -------------------------------------------------------------------------------- 1 | export a from "./export-value-a.js"; 2 | export * as aNs from "./export-value-a.js"; 3 | -------------------------------------------------------------------------------- /test/export-value-a.js: -------------------------------------------------------------------------------- 1 | export const value = "a"; 2 | export default "value: " + value; 3 | -------------------------------------------------------------------------------- /test/export-value-b.js: -------------------------------------------------------------------------------- 1 | export const value = "b"; 2 | export default "value: " + value; 3 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Mocha 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /test/mocha.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | body { 4 | margin:0; 5 | } 6 | 7 | #mocha { 8 | font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; 9 | margin: 60px 50px; 10 | } 11 | 12 | #mocha ul, 13 | #mocha li { 14 | margin: 0; 15 | padding: 0; 16 | } 17 | 18 | #mocha ul { 19 | list-style: none; 20 | } 21 | 22 | #mocha h1, 23 | #mocha h2 { 24 | margin: 0; 25 | } 26 | 27 | #mocha h1 { 28 | margin-top: 15px; 29 | font-size: 1em; 30 | font-weight: 200; 31 | } 32 | 33 | #mocha h1 a { 34 | text-decoration: none; 35 | color: inherit; 36 | } 37 | 38 | #mocha h1 a:hover { 39 | text-decoration: underline; 40 | } 41 | 42 | #mocha .suite .suite h1 { 43 | margin-top: 0; 44 | font-size: .8em; 45 | } 46 | 47 | #mocha .hidden { 48 | display: none; 49 | } 50 | 51 | #mocha h2 { 52 | font-size: 12px; 53 | font-weight: normal; 54 | cursor: pointer; 55 | } 56 | 57 | #mocha .suite { 58 | margin-left: 15px; 59 | } 60 | 61 | #mocha .test { 62 | margin-left: 15px; 63 | overflow: hidden; 64 | } 65 | 66 | #mocha .test.pending:hover h2::after { 67 | content: '(pending)'; 68 | font-family: arial, sans-serif; 69 | } 70 | 71 | #mocha .test.pass.medium .duration { 72 | background: #c09853; 73 | } 74 | 75 | #mocha .test.pass.slow .duration { 76 | background: #b94a48; 77 | } 78 | 79 | #mocha .test.pass::before { 80 | content: '✓'; 81 | font-size: 12px; 82 | display: block; 83 | float: left; 84 | margin-right: 5px; 85 | color: #00d6b2; 86 | } 87 | 88 | #mocha .test.pass .duration { 89 | font-size: 9px; 90 | margin-left: 5px; 91 | padding: 2px 5px; 92 | color: #fff; 93 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); 94 | -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2); 95 | box-shadow: inset 0 1px 1px rgba(0,0,0,.2); 96 | -webkit-border-radius: 5px; 97 | -moz-border-radius: 5px; 98 | -ms-border-radius: 5px; 99 | -o-border-radius: 5px; 100 | border-radius: 5px; 101 | } 102 | 103 | #mocha .test.pass.fast .duration { 104 | display: none; 105 | } 106 | 107 | #mocha .test.pending { 108 | color: #0b97c4; 109 | } 110 | 111 | #mocha .test.pending::before { 112 | content: '◦'; 113 | color: #0b97c4; 114 | } 115 | 116 | #mocha .test.fail { 117 | color: #c00; 118 | } 119 | 120 | #mocha .test.fail pre { 121 | color: black; 122 | } 123 | 124 | #mocha .test.fail::before { 125 | content: '✖'; 126 | font-size: 12px; 127 | display: block; 128 | float: left; 129 | margin-right: 5px; 130 | color: #c00; 131 | } 132 | 133 | #mocha .test pre.error { 134 | color: #c00; 135 | max-height: 300px; 136 | overflow: auto; 137 | } 138 | 139 | /** 140 | * (1): approximate for browsers not supporting calc 141 | * (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border) 142 | * ^^ seriously 143 | */ 144 | #mocha .test pre { 145 | display: block; 146 | float: left; 147 | clear: left; 148 | font: 12px/1.5 monaco, monospace; 149 | margin: 5px; 150 | padding: 15px; 151 | border: 1px solid #eee; 152 | max-width: 85%; /*(1)*/ 153 | max-width: calc(100% - 42px); /*(2)*/ 154 | word-wrap: break-word; 155 | border-bottom-color: #ddd; 156 | -webkit-border-radius: 3px; 157 | -webkit-box-shadow: 0 1px 3px #eee; 158 | -moz-border-radius: 3px; 159 | -moz-box-shadow: 0 1px 3px #eee; 160 | border-radius: 3px; 161 | } 162 | 163 | #mocha .test h2 { 164 | position: relative; 165 | } 166 | 167 | #mocha .test a.replay { 168 | position: absolute; 169 | top: 3px; 170 | right: 0; 171 | text-decoration: none; 172 | vertical-align: middle; 173 | display: block; 174 | width: 15px; 175 | height: 15px; 176 | line-height: 15px; 177 | text-align: center; 178 | background: #eee; 179 | font-size: 15px; 180 | -moz-border-radius: 15px; 181 | border-radius: 15px; 182 | -webkit-transition: opacity 200ms; 183 | -moz-transition: opacity 200ms; 184 | transition: opacity 200ms; 185 | opacity: 0.3; 186 | color: #888; 187 | } 188 | 189 | #mocha .test:hover a.replay { 190 | opacity: 1; 191 | } 192 | 193 | #mocha-report.pass .test.fail { 194 | display: none; 195 | } 196 | 197 | #mocha-report.fail .test.pass { 198 | display: none; 199 | } 200 | 201 | #mocha-report.pending .test.pass, 202 | #mocha-report.pending .test.fail { 203 | display: none; 204 | } 205 | #mocha-report.pending .test.pass.pending { 206 | display: block; 207 | } 208 | 209 | #mocha-error { 210 | color: #c00; 211 | font-size: 1.5em; 212 | font-weight: 100; 213 | letter-spacing: 1px; 214 | } 215 | 216 | #mocha-stats { 217 | position: fixed; 218 | top: 15px; 219 | right: 10px; 220 | font-size: 12px; 221 | margin: 0; 222 | color: #888; 223 | z-index: 1; 224 | } 225 | 226 | #mocha-stats .progress { 227 | float: right; 228 | padding-top: 0; 229 | } 230 | 231 | #mocha-stats em { 232 | color: black; 233 | } 234 | 235 | #mocha-stats a { 236 | text-decoration: none; 237 | color: inherit; 238 | } 239 | 240 | #mocha-stats a:hover { 241 | border-bottom: 1px solid #eee; 242 | } 243 | 244 | #mocha-stats li { 245 | display: inline-block; 246 | margin: 0 5px; 247 | list-style: none; 248 | padding-top: 11px; 249 | } 250 | 251 | #mocha-stats canvas { 252 | width: 40px; 253 | height: 40px; 254 | } 255 | 256 | #mocha code .comment { color: #ddd; } 257 | #mocha code .init { color: #2f6fad; } 258 | #mocha code .string { color: #5890ad; } 259 | #mocha code .keyword { color: #8a6343; } 260 | #mocha code .number { color: #2f6fad; } 261 | 262 | @media screen and (max-device-width: 480px) { 263 | #mocha { 264 | margin: 60px 0px; 265 | } 266 | 267 | #mocha #stats { 268 | position: absolute; 269 | } 270 | } 271 | -------------------------------------------------------------------------------- /test/not-transformed.js: -------------------------------------------------------------------------------- 1 | // This file is excluded from transformation in ./register.js. 2 | const rawCode = String(arguments.callee); 3 | exports.getCodeAsync = async function () { 4 | return await rawCode.slice( 5 | rawCode.indexOf("{") + 1, 6 | rawCode.lastIndexOf("}"), 7 | ).replace(/^\s+|\s+$/g, ""); 8 | }; 9 | -------------------------------------------------------------------------------- /test/obj-without-props.js: -------------------------------------------------------------------------------- 1 | class Test { 2 | constructor({ 3 | left, 4 | right, 5 | ...rest 6 | }) { 7 | Object.assign(this, { left, right, rest }); 8 | } 9 | } 10 | 11 | exports.Test = Test; 12 | -------------------------------------------------------------------------------- /test/react.tsx: -------------------------------------------------------------------------------- 1 | export function Component() { 2 | return
oyez
; 3 | } 4 | -------------------------------------------------------------------------------- /test/register.js: -------------------------------------------------------------------------------- 1 | var path = require("path"); 2 | var meteorBabelTestPath = __dirname; 3 | var meteorBabelPath = path.dirname(meteorBabelTestPath); 4 | var features = { 5 | react: true, 6 | typescript: true, 7 | jscript: true 8 | }; 9 | 10 | if (! process.env.IGNORE_NODE_MAJOR_VERSION) { 11 | features.nodeMajorVersion = parseInt(process.versions.node); 12 | } 13 | 14 | if (process.env.COMPILE_FOR_MODERN_BROWSERS) { 15 | features.modernBrowsers = true; 16 | } 17 | 18 | var babelOptions = require("../options").getDefaults(features); 19 | 20 | require("../register") 21 | .setCacheDirectory(process.env.BABEL_CACHE_DIR) 22 | .setSourceMapRootPath(meteorBabelPath) 23 | .allowDirectory(meteorBabelTestPath) 24 | // Needed by the d3 test in ../test/tests.js: 25 | .allowDirectory(path.join(meteorBabelPath, "node_modules", "d3")) 26 | .excludeFile(path.join(meteorBabelTestPath, "./not-transformed.js")) 27 | .setBabelOptions(babelOptions); 28 | -------------------------------------------------------------------------------- /test/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Fail the entire test suite if any runTests command fails: 4 | set -e 5 | 6 | cd $(dirname $0) 7 | TEST_DIR=$(pwd) 8 | 9 | BABEL_CACHE_DIR=${TEST_DIR}/.cache 10 | export BABEL_CACHE_DIR 11 | 12 | runTests() { 13 | mocha \ 14 | --reporter spec \ 15 | --full-trace \ 16 | --require ../runtime.js \ 17 | --require ${TEST_DIR}/register.js \ 18 | tests.js 19 | } 20 | 21 | runTests 22 | 23 | if [ $(node -p "parseInt(process.versions.node)") -ge "8" ] 24 | then 25 | echo "Running tests again with default options..." 26 | echo 27 | export IGNORE_NODE_MAJOR_VERSION=1 28 | runTests 29 | 30 | echo "Running tests again with modern browser options..." 31 | echo 32 | export COMPILE_FOR_MODERN_BROWSERS=1 33 | runTests 34 | fi 35 | -------------------------------------------------------------------------------- /test/runtime-double-pass.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | 3 | export let value = 0; 4 | 5 | export function check({ a, b, ...rest }) { 6 | value = a + b; 7 | assert.deepEqual(rest, {}); 8 | assert.strictEqual(value, eval("a + b")); 9 | } 10 | -------------------------------------------------------------------------------- /test/test-module.js: -------------------------------------------------------------------------------- 1 | export default function() { 2 | return "default"; 3 | } 4 | 5 | export function helper() { 6 | return "helper"; 7 | } 8 | -------------------------------------------------------------------------------- /test/tests.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | import path from "path"; 3 | import { readFileSync } from "fs"; 4 | import { transform } from "@babel/core"; 5 | import { SourceMapConsumer } from "source-map"; 6 | import { 7 | default as testDefault, 8 | helper as testHelper, 9 | } from "./test-module"; 10 | 11 | const hasOwn = Object.prototype.hasOwnProperty; 12 | 13 | const isLegacy = 14 | process.env.IGNORE_NODE_MAJOR_VERSION && 15 | !process.env.COMPILE_FOR_MODERN_BROWSERS; 16 | 17 | const isNode8OrLater = 18 | !isLegacy && parseInt(process.versions.node) >= 8; 19 | 20 | function removeBlankLines(string) { 21 | return string.split("\n").filter(Boolean).join("\n"); 22 | } 23 | 24 | function count(string, substring) { 25 | return string.split(substring).length - 1; 26 | } 27 | 28 | describe("@meteorjs/babel", () => { 29 | import meteorBabel from "../index.js"; 30 | 31 | it("should be able to parse non-standard syntax", () => { 32 | const ast = meteorBabel.parse("const copy = {...obj};"); 33 | const prop = ast.program.body[0].declarations[0].init.properties[0]; 34 | assert.strictEqual(prop.type, "SpreadElement"); 35 | }); 36 | 37 | it("should not force strict mode", () => { 38 | var sloppy = meteorBabel.compile("export var foo = 42;").code; 39 | assert.strictEqual(sloppy.indexOf("strict mode"), -1); 40 | 41 | // Of course the developer should still be able to add "use strict" 42 | // explicitly to her code. 43 | var strict = meteorBabel.compile([ 44 | '"use strict";', 45 | "console.log(arguments.callee);" 46 | ].join("\n")).code; 47 | assert.strictEqual(strict.indexOf("use strict"), 1); 48 | }); 49 | 50 | it("should minify the code provided", function() { 51 | const code = [ 52 | "class Mangler {", 53 | " constructor(program) {", 54 | " this.program = program;", 55 | " }", 56 | "}", 57 | "", 58 | "// need this since otherwise Mangler isn't used", 59 | "new Mangler();" 60 | ].join("\n"); 61 | 62 | assert.strictEqual( 63 | meteorBabel.minify(code).code, 64 | "class Mangler{constructor(a){this.program=a}}new Mangler;" 65 | ); 66 | }); 67 | 68 | it("should inline process.env.NODE_ENV", function () { 69 | const code = "console.log(process.env.NODE_ENV);" 70 | assert.strictEqual( 71 | meteorBabel.minify(code, meteorBabel.getMinifierOptions({ 72 | inlineNodeEnv: "oyez" 73 | })).code, 74 | 'console.log("oyez");' 75 | ); 76 | }); 77 | 78 | it("should compose source maps correctly", function () { 79 | const source = [ 80 | "const fn = ( x) => {", 81 | "", 82 | " return x + 1", 83 | "};" 84 | ].join("\n"); 85 | 86 | const expected = [ 87 | "var fn = function (x) {", 88 | " return x + 1;", 89 | "};" 90 | ].join("\n"); 91 | 92 | const babelOptions = meteorBabel.getDefaultOptions(); 93 | babelOptions.plugins = [ 94 | require("@babel/plugin-transform-arrow-functions"), 95 | ]; 96 | babelOptions.sourceMaps = true; 97 | 98 | const result = meteorBabel.compile(source, babelOptions); 99 | 100 | assert.strictEqual(result.code, expected); 101 | 102 | assert.strictEqual(result.map.sourcesContent.length, 1); 103 | assert.strictEqual(result.map.sourcesContent[0], source); 104 | 105 | const smc = new SourceMapConsumer(result.map); 106 | 107 | function checkPos(generated, expectedOriginal) { 108 | const actualOriginal = smc.originalPositionFor(generated); 109 | assert.strictEqual(actualOriginal.line, expectedOriginal.line); 110 | assert.strictEqual(actualOriginal.column, expectedOriginal.column); 111 | } 112 | 113 | // |fn 114 | checkPos({ line: 1, column: 4 }, 115 | { line: 1, column: 6 }); 116 | 117 | // fn| 118 | checkPos({ line: 1, column: 6 }, 119 | { line: 1, column: 8 }); 120 | 121 | // |return 122 | checkPos({ line: 2, column: 2 }, 123 | { line: 3, column: 2 }); 124 | 125 | // |x + 1 126 | checkPos({ line: 2, column: 9 }, 127 | { line: 3, column: 11 }); 128 | 129 | // x| + 1 130 | checkPos({ line: 2, column: 10 }, 131 | { line: 3, column: 12 }); 132 | }); 133 | 134 | it("should tolerate exported declarations named `module`", function () { 135 | const absId = require.resolve("d3/build/package.js"); 136 | const source = readFileSync(absId, "utf8"); 137 | const { code } = meteorBabel.compile(source); 138 | 139 | // Make sure the generated code uses a renamed module1 reference. 140 | assert.ok(/\bmodule1\.export\(/.test(code)); 141 | 142 | // The d3/build/package.js file exports an identifier named module, so 143 | // we need to make sure Reify didn't mangle its name. 144 | assert.strictEqual(require("d3/build/package").module, "index"); 145 | }); 146 | 147 | it("can compile just module syntax and nothing else", function () { 148 | const source = [ 149 | 'import register from "./registry";', 150 | "register(async (a, b) => (await a) + (await b));", 151 | ].join("\n"); 152 | 153 | const everythingResult = meteorBabel.compile( 154 | source, 155 | meteorBabel.getDefaultOptions({ 156 | compileModulesOnly: false 157 | }) 158 | ); 159 | 160 | assert.ok( 161 | /\bmodule\.link\(/.test(everythingResult.code), 162 | everythingResult.code 163 | ); 164 | 165 | assert.ok( 166 | /regeneratorRuntime.async\(/.test(everythingResult.code), 167 | everythingResult.code 168 | ); 169 | 170 | const justModulesLegacy = meteorBabel.compile( 171 | source, 172 | meteorBabel.getDefaultOptions({ 173 | compileModulesOnly: true 174 | }) 175 | ); 176 | 177 | assert.strictEqual(removeBlankLines(justModulesLegacy.code), [ 178 | "var register;", 179 | 'module.link("./registry", {', 180 | " default: function (v) {", 181 | " register = v;", 182 | " }", 183 | "}, 0);", 184 | "register(async (a, b) => (await a) + (await b));", 185 | ].join("\n")); 186 | 187 | const justModulesModern = meteorBabel.compile( 188 | source, 189 | meteorBabel.getDefaultOptions({ 190 | modernBrowsers: true, 191 | compileModulesOnly: true 192 | }) 193 | ); 194 | 195 | assert.strictEqual(removeBlankLines(justModulesModern.code), [ 196 | "let register;", 197 | 'module.link("./registry", {', 198 | " default(v) {", 199 | " register = v;", 200 | " }", 201 | "}, 0);", 202 | "register(async (a, b) => (await a) + (await b));", 203 | ].join("\n")); 204 | }); 205 | 206 | it("should import appropriate runtime helpers", function () { 207 | const absId = require.resolve("./obj-without-props.js"); 208 | const { Test } = require(absId); 209 | 210 | const code = String(Test.prototype.constructor); 211 | assert.ok(/objectWithoutProperties/.test(code), code); 212 | 213 | const test = new Test({ 214 | left: "asdf", 215 | right: "ghjk", 216 | middle: "zxcv", 217 | top: "qwer", 218 | }); 219 | 220 | assert.strictEqual(test.left, "asdf"); 221 | assert.strictEqual(test.right, "ghjk"); 222 | assert.deepEqual(test.rest, { 223 | middle: "zxcv", 224 | top: "qwer", 225 | }); 226 | 227 | const source = readFileSync(absId, "utf8"); 228 | const result = meteorBabel.compile(source); 229 | 230 | assert.ok( 231 | /objectWithoutProperties\(/.test(result.code), 232 | result.code 233 | ); 234 | 235 | assert.ok( 236 | /@babel\/runtime\/helpers\/objectWithoutProperties/.test(result.code), 237 | result.code 238 | ); 239 | }); 240 | 241 | it("should be tolerant of exporting undeclared identifiers", () => { 242 | import { GlobalArray } from "./undeclared-export.js"; 243 | assert.strictEqual(GlobalArray, Array); 244 | }); 245 | 246 | it("should not double-wrap module.runSetters expressions", () => { 247 | import { value, check } from "./runtime-double-pass"; 248 | 249 | assert.strictEqual(value, 0); 250 | const a = 12, b = 34; 251 | check({ a, b }); 252 | assert.strictEqual(value, a + b); 253 | 254 | const absId = require.resolve("./runtime-double-pass"); 255 | const source = readFileSync(absId, "utf8"); 256 | 257 | const defaultResult = meteorBabel.compile(source); 258 | assert.strictEqual( 259 | count(defaultResult.code, "runSetters"), 2, 260 | defaultResult.code 261 | ); 262 | 263 | const modernResult = meteorBabel.compile( 264 | source, 265 | meteorBabel.getDefaultOptions({ 266 | modernBrowsers: true 267 | }) 268 | ); 269 | 270 | assert.strictEqual( 271 | count(modernResult.code, "runSetters"), 2, 272 | modernResult.code 273 | ); 274 | }); 275 | 276 | it("should support compiling for a REPL", () => { 277 | const options = meteorBabel.getDefaultOptions({ 278 | nodeMajorVersion: 8, 279 | compileForShell: true 280 | }); 281 | const source = "console.log(module.constructor.prototype);"; 282 | assert.strictEqual( 283 | meteorBabel.compile(source, options).code, 284 | source 285 | ); 286 | }); 287 | 288 | it("should support class properties", () => { 289 | import { Test } from "./class-properties.ts"; 290 | const tsTest = new Test("asdf"); 291 | assert.strictEqual(tsTest.property, 1234); 292 | assert.strictEqual(tsTest.value, "asdf"); 293 | assert.strictEqual(typeof tsTest.result, "number"); 294 | const jsTest = new (class { foo = 42 }); 295 | assert.strictEqual(jsTest.foo, 42); 296 | }); 297 | 298 | it("can compile TypeScript syntax", () => { 299 | const options = meteorBabel.getDefaultOptions({ 300 | typescript: true, 301 | }); 302 | 303 | assert.strictEqual(options.typescript, true); 304 | 305 | const result = meteorBabel.compile([ 306 | "export namespace Test {", 307 | " export const enabled = true;", 308 | "}", 309 | ].join("\n"), options); 310 | 311 | assert.strictEqual(result.code, [ 312 | "module.export({", 313 | " Test: function () {", 314 | " return Test;", 315 | " }", 316 | "});", 317 | "var Test;", 318 | "", 319 | "(function (Test) {", 320 | " Test.enabled = true;", 321 | "})(Test || module.runSetters(Test = {}));", 322 | ].join("\n")); 323 | }); 324 | 325 | it("can compile TypeScript with import/export syntax", () => { 326 | import * as tsParent from "./typescript/parent"; 327 | 328 | // The stringify/parse is necessary to remove Symbols. 329 | assert.deepEqual(JSON.parse(JSON.stringify(tsParent)), { 330 | def: "oyez", 331 | child: { 332 | default: "oyez", 333 | onoz: "onoz", 334 | }, 335 | }); 336 | 337 | const parentPath = path.join(__dirname, "typescript", "parent.ts"); 338 | const parentSource = readFileSync(parentPath, "utf8"); 339 | 340 | const options = meteorBabel.getDefaultOptions({ 341 | typescript: true, 342 | }); 343 | 344 | const result = meteorBabel.compile(parentSource, options); 345 | 346 | assert.strictEqual(result.code, [ 347 | 'module.export({', 348 | ' def: function () {', 349 | ' return def;', 350 | ' },', 351 | ' child: function () {', 352 | ' return child;', 353 | ' }', 354 | '});', 355 | 'var def;', 356 | 'module.link("./child", {', 357 | ' "default": function (v) {', 358 | ' def = v;', 359 | ' }', 360 | '}, 0);', 361 | 'var child;', 362 | 'module.link("./child", {', 363 | ' "*": function (v) {', 364 | ' child = v;', 365 | ' }', 366 | '}, 1);', 367 | ].join("\n")); 368 | }); 369 | 370 | it("can handle JSX syntax in .tsx files", () => { 371 | const { Component } = require("./react.tsx"); 372 | assert.strictEqual(typeof Component, "function"); 373 | assert.strictEqual(String(Component), [ 374 | 'function Component() {', 375 | ' return /*#__PURE__*/React.createElement("div", null, "oyez");', 376 | '}', 377 | ].join("\n")); 378 | }); 379 | 380 | it("imports @babel/runtime/helpers/objectSpread when appropriate", () => { 381 | const result = meteorBabel.compile( 382 | "console.log({ a, ...bs, c, ...ds, e })", 383 | meteorBabel.getDefaultOptions(), 384 | ); 385 | assert.notStrictEqual( 386 | result.code.indexOf('module.link("@babel/runtime/helpers/objectSpread'), 387 | -1, 388 | result.code, 389 | ); 390 | }); 391 | 392 | it("should support meteorBabel.excludeFile", async () => { 393 | import { getCodeAsync } from "./not-transformed.js"; 394 | assert.strictEqual(await getCodeAsync(), [ 395 | '// This file is excluded from transformation in ./register.js.', 396 | 'const rawCode = String(arguments.callee);', 397 | 'exports.getCodeAsync = async function () {', 398 | ' return await rawCode.slice(', 399 | ' rawCode.indexOf("{") + 1,', 400 | ' rawCode.lastIndexOf("}"),', 401 | ' ).replace(/^\\s+|\\s+$/g, "");', 402 | '};', 403 | ].join("\n")) 404 | }); 405 | }); 406 | 407 | describe("Babel", function() { 408 | (isNode8OrLater ? xit : it) 409 | ("es3.propertyLiterals", () => { 410 | function getCatch(value) { 411 | let obj = { catch: value }; 412 | return obj.catch; 413 | } 414 | 415 | assert.strictEqual(getCatch(42), 42); 416 | assert.ok(getCatch.toString().indexOf("obj.catch") >= 0); 417 | assert.ok(getCatch.toString().indexOf('"catch":') >= 0); 418 | }); 419 | 420 | let self = this; 421 | it("es6.arrowFunctions", () => { 422 | // This assertion will only pass if `this` is implicitly bound to the 423 | // same value as `self` above. 424 | assert.strictEqual(this, self); 425 | }); 426 | 427 | it("es6.literals", () => { 428 | assert.strictEqual(0o777, 511); 429 | }); 430 | 431 | it(`es6.templateLiterals`, () => { 432 | let second = 2; 433 | 434 | function strip(strings, ...values) { 435 | values.push(""); 436 | return strings.map( 437 | (s, i) => s.replace(/ /g, "") + values[i] 438 | ).join(""); 439 | } 440 | 441 | assert.strictEqual( 442 | strip`first 443 | ${second} 444 | third`, 445 | "first\n2\nthird" 446 | ); 447 | }); 448 | 449 | it("es6.classes", () => { 450 | let Base = class { 451 | constructor(arg) { 452 | this.value = arg; 453 | } 454 | }; 455 | 456 | class Derived extends Base { 457 | constructor(arg) { 458 | super(arg + 1); 459 | } 460 | } 461 | 462 | let d = new Derived(1); 463 | 464 | assert.ok(d instanceof Derived); 465 | assert.ok(d instanceof Base); 466 | 467 | assert.strictEqual(d.value, 2); 468 | }); 469 | 470 | it("es6.constants", function () { 471 | let code = ` 472 | const val = "oyez"; 473 | val = "zxcv";`; 474 | 475 | try { 476 | Function(transform(code, { presets: ["meteor"] }).code)(); 477 | } catch (error) { 478 | assert.ok(/"val" is read-only/.test(error.message)); 479 | return; 480 | } 481 | 482 | assert.ok(false, "should have returned from the catch block"); 483 | }); 484 | 485 | it("es6.blockScoping", () => { 486 | let thunks = []; 487 | 488 | for (let i = 0; i < 10; ++i) { 489 | thunks.push(() => i); 490 | } 491 | 492 | assert.deepEqual( 493 | thunks.map(t => t()), 494 | [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 495 | ); 496 | }); 497 | 498 | it("es6.properties.shorthand", () => { 499 | let x = 1; 500 | let y = 2; 501 | 502 | assert.deepEqual({ x, y }, { x: 1, y: 2 }); 503 | }); 504 | 505 | it("es6.properties.computed", () => { 506 | let method = "asdf"; 507 | 508 | let obj = { 509 | [method]() { 510 | return this; 511 | } 512 | }; 513 | 514 | assert.strictEqual(obj.asdf(), obj); 515 | }); 516 | 517 | it("es6.parameters.rest", () => { 518 | function f(a, b, ...cd) { 519 | return [a, b, cd[0], cd[1]]; 520 | } 521 | 522 | assert.deepEqual( 523 | f(1, 2, 3, 4, 5, 6, 7, 8), 524 | [1, 2, 3, 4] 525 | ); 526 | 527 | function g(convert, h, ...rest) { 528 | rest[0] = convert(rest[0]); 529 | return h(...rest); 530 | } 531 | 532 | assert.strictEqual(g(x => x + 1, y => y << 1, 3), 8); 533 | }); 534 | 535 | it("es6.parameters.default", () => { 536 | function f(a, b = a + 1) { 537 | return a + b; 538 | } 539 | 540 | assert.strictEqual(f(2, 4), 6); 541 | assert.strictEqual(f(2), 5); 542 | assert.strictEqual(f(2, void 0), 5); 543 | }); 544 | 545 | it("es6.spread", () => { 546 | class Summer { 547 | constructor(...args) { 548 | this.value = 0; 549 | args.forEach(arg => this.value += arg); 550 | } 551 | } 552 | 553 | let numbers = []; 554 | let limit = 10; 555 | for (let i = 0; i < limit; ++i) { 556 | numbers.push(i); 557 | } 558 | 559 | let s = new Summer(...numbers); 560 | assert.strictEqual(s.value, limit * (limit - 1) / 2); 561 | }); 562 | 563 | it("es6.forOf", () => { 564 | let sum = 0; 565 | for (let n of [1, 2, 3, 4, 5]) { 566 | sum += n; 567 | } 568 | assert.strictEqual(sum, 15); 569 | }); 570 | 571 | it("es7.objectRestSpread", () => { 572 | let original = { a: 1, b: 2 }; 573 | 574 | let { ...copy1 } = original; 575 | assert.deepEqual(copy1, original); 576 | 577 | let copy2 = { ...original }; 578 | assert.deepEqual(copy2, original); 579 | }); 580 | 581 | it("es6.destructuring", () => { 582 | let { x, y: [z, ...rest], ...objRest } = { 583 | x: "asdf", 584 | y: [1, 2, 3, 4], 585 | z: "zxcv" 586 | }; 587 | 588 | assert.strictEqual(x, "asdf"); 589 | assert.strictEqual(z, 1); 590 | assert.deepEqual(rest, [2, 3, 4]); 591 | assert.deepEqual(objRest, { z: "zxcv" }); 592 | }); 593 | 594 | it("es6.modules", () => { 595 | assert.strictEqual(testDefault(), "default"); 596 | assert.strictEqual(testHelper(), "helper"); 597 | }); 598 | 599 | it("es7.trailingFunctionCommas", () => { 600 | // TODO Shouldn't this work for arrow functions too? 601 | function add3(a, b, c,) { return a + b + c; } 602 | assert.strictEqual(add3(1, 2, 3), 6); 603 | }); 604 | 605 | it("react", function react() { 606 | let calledCreateClass = false; 607 | let calledCreateElement = false; 608 | 609 | const React = { 610 | createClass(spec) { 611 | assert.strictEqual(spec.displayName, "Oyez"); 612 | calledCreateClass = true; 613 | spec.render(); 614 | }, 615 | 616 | createElement(name) { 617 | assert.strictEqual(name, "div"); 618 | calledCreateElement = true; 619 | } 620 | } 621 | 622 | var Oyez = React.createClass({ 623 | render() { 624 | return
; 625 | } 626 | }); 627 | 628 | assert.strictEqual(calledCreateClass, true); 629 | assert.strictEqual(calledCreateElement, true); 630 | }); 631 | 632 | it("class properties", function () { 633 | class Bork { 634 | instanceProperty = "bork"; 635 | boundFunction = () => { 636 | return this.instanceProperty; 637 | } 638 | 639 | static staticProperty = "blep"; 640 | static staticFunction = function() { 641 | return this.staticProperty; 642 | } 643 | } 644 | 645 | const bork = new Bork; 646 | 647 | assert.strictEqual(hasOwn.call(bork, "boundFunction"), true); 648 | assert.strictEqual( 649 | hasOwn.call(Bork.prototype, "boundFunction"), 650 | false 651 | ); 652 | 653 | assert.strictEqual((0, bork.boundFunction)(), "bork"); 654 | 655 | assert.strictEqual(Bork.staticProperty, "blep"); 656 | assert.strictEqual(Bork.staticFunction(), Bork.staticProperty); 657 | }); 658 | 659 | it("async class methods", async function () { 660 | class C { 661 | async run(arg) { 662 | return (await arg) + 1; 663 | } 664 | } 665 | 666 | assert.strictEqual( 667 | await new C().run(Promise.resolve(1234)), 668 | 1235 669 | ); 670 | 671 | class D extends C { 672 | async go(arg) { 673 | return (await super.run(arg)) + 1; 674 | } 675 | } 676 | 677 | assert.strictEqual( 678 | await new D().run(Promise.resolve(3)), 679 | 4 680 | ); 681 | 682 | assert.strictEqual( 683 | await new D().go(Promise.resolve(3)), 684 | 5 685 | ); 686 | }); 687 | 688 | const expectedFns = [ 689 | "function jscript(", 690 | "function (", // Wrapper IIFE for f. 691 | "function f(", 692 | "function (", // Wrapper IIFE for C. 693 | "function C(" 694 | ]; 695 | 696 | (isNode8OrLater ? xit : it) 697 | ("jscript", function jscript() { 698 | let f = function f() { 699 | return f; 700 | }; 701 | 702 | assert.strictEqual(f, f()); 703 | 704 | const C = class C {}; 705 | 706 | var code = jscript.toString(); 707 | var fns = code.match(/\bfunction[^(]*\(/gm); 708 | 709 | assert.deepEqual(fns, expectedFns); 710 | }); 711 | 712 | (isNode8OrLater ? xit : it) 713 | ("for-in loop sanitization", function loop() { 714 | Array.prototype.dummy = () => {}; 715 | 716 | // Use the full version of sanitizeForInObject even though these tests 717 | // are almost certainly running in an environment that supports 718 | // defining non-enumerable properties. 719 | meteorBabelHelpers.sanitizeForInObject = 720 | meteorBabelHelpers._sanitizeForInObjectHard; 721 | 722 | let sparseArray = []; 723 | sparseArray[2] = "c"; 724 | sparseArray[0] = "a"; 725 | 726 | let keys = []; 727 | for (let index in sparseArray) { 728 | keys.push(index); 729 | } 730 | 731 | assert.deepEqual(keys, [0, 2]); 732 | 733 | delete Array.prototype.dummy; 734 | }); 735 | 736 | it("TypeScript", () => { 737 | import { TSClass } from "./class"; 738 | const tsObj = new TSClass("oyez"); 739 | assert.strictEqual(tsObj.name, "oyez"); 740 | }); 741 | 742 | it("async/await", async () => { 743 | var two = Promise.resolve(2); 744 | var three = Promise.resolve(3); 745 | var ten = await new Promise(resolve => resolve(10)); 746 | 747 | assert.strictEqual( 748 | (await two) + (await three) + ten, 749 | await 15 750 | ); 751 | }); 752 | 753 | it("async generator functions", async () => { 754 | async function *natRange(limit) { 755 | for (let x = 1; x <= limit; x = await addOne(x)) { 756 | yield x; 757 | } 758 | } 759 | 760 | async function addOne(n) { 761 | return n + 1; 762 | } 763 | 764 | let sum = 0; 765 | let limit = 10; 766 | let iter = natRange(limit); 767 | 768 | // Alas, an actual for-await loop won't work here until this issue is 769 | // resolved: https://github.com/babel/babel/issues/4969 770 | let info; 771 | while (! (info = await iter.next()).done) { 772 | sum += info.value; 773 | } 774 | 775 | assert.strictEqual(sum, limit * (limit + 1) / 2); 776 | }); 777 | 778 | it("Promise.await", () => { 779 | var markers = []; 780 | 781 | async function f() { 782 | markers.push("before"); 783 | if (require("fibers").current) { 784 | assert.strictEqual( 785 | Promise.await(Promise.resolve(1234)), 786 | 1234 787 | ); 788 | } else { 789 | assert.strictEqual( 790 | await Promise.resolve(1234), 791 | 1234 792 | ); 793 | } 794 | markers.push("after"); 795 | return "done"; 796 | } 797 | 798 | assert.deepEqual(markers, []); 799 | 800 | var promise = f(); 801 | 802 | // The async function should execute synchronously up to the first 803 | // Promise.await or await expression, but no further. 804 | assert.deepEqual(markers, ["before"]); 805 | 806 | return promise.then(result => { 807 | assert.strictEqual(result, "done"); 808 | assert.deepEqual(markers, ["before", "after"]); 809 | }); 810 | }); 811 | 812 | it("async arrow functions", async function () { 813 | const addOneAsync = async arg => (await arg) + 1; 814 | const sum = await addOneAsync(2345); 815 | assert.strictEqual(sum, 2346); 816 | 817 | const self = this; 818 | assert.strictEqual(self.isSelf, true); 819 | const checkThis = async () => assert.strictEqual(this, self); 820 | await checkThis(); 821 | await checkThis.call({}); 822 | await checkThis.call(null); 823 | await checkThis.call(); 824 | }.bind({ 825 | isSelf: true 826 | })); 827 | 828 | it("object ...spread works", function () { 829 | const versions = { ...process.versions }; 830 | assert.strictEqual(versions.node, process.versions.node); 831 | }); 832 | 833 | it("exponentiation operator", function () { 834 | assert.strictEqual(2 ** 13, Math.pow(2, 13)); 835 | }); 836 | 837 | it("optional chaining", function () { 838 | const a = { 839 | b: { 840 | c: { 841 | d: "abcd", 842 | }, 843 | }, 844 | }; 845 | assert.strictEqual(a?.b?.c?.d, "abcd"); 846 | 847 | assert.strictEqual( 848 | { 849 | foo: { 850 | bar: { 851 | baz: true 852 | } 853 | } 854 | }.foo.barf?.baz, 855 | void 0, 856 | ); 857 | 858 | const api = { 859 | method() { 860 | return "yay"; 861 | }, 862 | }; 863 | 864 | assert.strictEqual(api.method?.(), "yay"); 865 | assert.strictEqual(api.schmethod?.(), void 0); 866 | }); 867 | 868 | it("nullish coalescing", function () { 869 | assert.strictEqual(0 ?? 1234, 0); 870 | assert.strictEqual(null ?? 2345, 2345); 871 | assert.strictEqual(void 0 ?? 3456, 3456); 872 | }); 873 | 874 | it("optional catch parameter", function () { 875 | let caught = false; 876 | try { 877 | throw "expected"; 878 | } catch { 879 | caught = true; 880 | } 881 | assert.strictEqual(caught, true); 882 | }); 883 | }); 884 | 885 | require("./decorators.js"); 886 | 887 | describe("Reify", function () { 888 | (isLegacy || !isNode8OrLater ? xit : it) 889 | ("should declare imported symbols with block scope", function () { 890 | import def, { value } from "./export-value-a.js"; 891 | assert.strictEqual(def, "value: a"); 892 | 893 | if (value === "a") { 894 | import def, { value as bVal } from "./export-value-b.js"; 895 | assert.strictEqual(def, "value: b"); 896 | assert.strictEqual(bVal, "b"); 897 | assert.strictEqual(value, "a"); 898 | } 899 | 900 | assert.strictEqual(def, "value: a"); 901 | assert.strictEqual(value, "a"); 902 | }); 903 | 904 | it("should support export-default-from syntax", function () { 905 | import { a, aNs as aNsReexported } from "./export-default-from.js"; 906 | import * as aNsOriginal from "./export-value-a.js"; 907 | assert.strictEqual(a, "value: a"); 908 | assert.strictEqual(aNsOriginal, aNsReexported); 909 | }); 910 | 911 | it("should work for imports in generator functions", function () { 912 | function *g() { 913 | { 914 | import { value } from "./export-value-a.js"; 915 | yield value; 916 | } 917 | 918 | { 919 | import { value } from "./export-value-b.js"; 920 | yield value; 921 | } 922 | } 923 | 924 | var gen = g(); 925 | assert.deepEqual(gen.next(), { value: "a", done: false }); 926 | assert.deepEqual(gen.next(), { value: "b", done: false }); 927 | assert.deepEqual(gen.next(), { value: void 0, done: true }); 928 | }); 929 | 930 | it("should work after await in async functions", function () { 931 | return async function () { 932 | import { value } from "./export-value-a.js"; 933 | 934 | assert.strictEqual( 935 | await Promise.resolve("asdf"), 936 | "asdf" 937 | ); 938 | 939 | assert.strictEqual(value, "a"); 940 | }(); 941 | }); 942 | }); 943 | 944 | export const instance = new (class { 945 | run() { 946 | import assert from "assert"; 947 | return assert; 948 | } 949 | }); 950 | 951 | describe("Meteor bug #8595", function () { 952 | it("should be fixed", function () { 953 | assert.strictEqual(instance.run(), require("assert")); 954 | }); 955 | }); 956 | 957 | describe("dynamic import(...)", function () { 958 | import meteorBabel from "../index.js"; 959 | 960 | it("should compile to module.dynamicImport(...)", function () { 961 | const code = 'wait(import("meteor/dynamic-import"));'; 962 | assert.strictEqual( 963 | meteorBabel.compile(code).code, 964 | code.replace("import", "module.dynamicImport") 965 | ); 966 | }); 967 | }); 968 | -------------------------------------------------------------------------------- /test/typescript/child.js: -------------------------------------------------------------------------------- 1 | export default "oyez"; 2 | export const onoz = "onoz"; 3 | -------------------------------------------------------------------------------- /test/typescript/parent.ts: -------------------------------------------------------------------------------- 1 | import def from "./child"; 2 | import * as child from "./child"; 3 | export { def, child } 4 | -------------------------------------------------------------------------------- /test/undeclared-export.js: -------------------------------------------------------------------------------- 1 | export { Array as GlobalArray } 2 | -------------------------------------------------------------------------------- /util.js: -------------------------------------------------------------------------------- 1 | var fs = require("fs"); 2 | var path = require("path"); 3 | var createHash = require("crypto").createHash; 4 | var assert = require("assert"); 5 | 6 | exports.mkdirp = function mkdirp(dir) { 7 | if (! fs.existsSync(dir)) { 8 | var parentDir = path.dirname(dir); 9 | if (parentDir !== dir) { 10 | mkdirp(parentDir); 11 | } 12 | 13 | try { 14 | fs.mkdirSync(dir); 15 | } catch (error) { 16 | if (error.code !== "EEXIST") { 17 | throw error; 18 | } 19 | } 20 | } 21 | 22 | return dir; 23 | }; 24 | 25 | exports.deepClone = function (val) { 26 | return deepCloneHelper(val, new Map); 27 | }; 28 | 29 | function deepCloneHelper(val, seen) { 30 | if (seen.has(val)) { 31 | return seen.get(val); 32 | } 33 | 34 | if (Array.isArray(val)) { 35 | const copy = new Array(val.length); 36 | seen.set(val, copy); 37 | val.forEach(function (child, i) { 38 | copy[i] = deepCloneHelper(child, seen); 39 | }); 40 | return copy; 41 | } 42 | 43 | if (val !== null && typeof val === "object") { 44 | const copy = Object.create(Object.getPrototypeOf(val)); 45 | seen.set(val, copy); 46 | 47 | const handleKey = function (key) { 48 | const desc = Object.getOwnPropertyDescriptor(val, key); 49 | desc.value = deepCloneHelper(val[key], seen); 50 | Object.defineProperty(copy, key, desc); 51 | }; 52 | 53 | Object.getOwnPropertyNames(val).forEach(handleKey); 54 | Object.getOwnPropertySymbols(val).forEach(handleKey); 55 | 56 | return copy; 57 | } 58 | 59 | return val; 60 | } 61 | 62 | function deepHash(val) { 63 | return createHash("sha1").update( 64 | JSON.stringify(val, function (key, value) { 65 | switch (typeof value) { 66 | case "function": return String(value); 67 | default: return value; 68 | } 69 | }) 70 | ).digest("hex"); 71 | } 72 | 73 | exports.deepHash = function (val) { 74 | var argc = arguments.length; 75 | if (argc === 1) { 76 | return deepHash(val); 77 | } 78 | 79 | var args = new Array(argc); 80 | for (var i = 0; i < argc; ++i) { 81 | args[i] = arguments[i]; 82 | } 83 | 84 | return deepHash(args); 85 | }; 86 | --------------------------------------------------------------------------------