mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 09:57:02 +01:00
Build - refactor for bundle factoring and swappable runtime (#11080)
* wip * build - breakout sentry-install bundle * deps - move new build sys deps to published versions * chore: lint fix * clean - remove unused file * clean - remove unsused package script * lavamoat - update build system policy * build - render html to all platforms * development - improve sourcemap debugger output * deps - update lavapack * lint - fix * deps - update lavapack for bugfix * deps - update lavapack for bugfix * deps - bump lavapack for line ending normalization * sourcemap explorer - disable boundary validation * ci - reset normal ci flow * build - re-enable minification on prod * build - remove noisy log about html dest * build - update terser and remove gulp wrapper for sourcemap fix * Revert "sourcemap explorer - disable boundary validation" This reverts commit 94112209ed880a6ebf4ee2ded411e59db6908162. * build - reenable react-devtools in dev mode * wip * build - breakout sentry-install bundle * deps - move new build sys deps to published versions * chore: lint fix * clean - remove unused file * clean - remove unsused package script * lavamoat - update build system policy * build - render html to all platforms * development - improve sourcemap debugger output * deps - update lavapack * lint - fix * deps - update lavapack for bugfix * deps - update lavapack for bugfix * deps - bump lavapack for line ending normalization * sourcemap explorer - disable boundary validation * ci - reset normal ci flow * build - re-enable minification on prod * build - remove noisy log about html dest * build - update terser and remove gulp wrapper for sourcemap fix * Revert "sourcemap explorer - disable boundary validation" This reverts commit 94112209ed880a6ebf4ee2ded411e59db6908162. * build - reenable react-devtools in dev mode * Updating lockfile * lint fix * build/dev - patch watchifys incompatible binary stats output * ui - add comment about conditional import * build - improve comment * Update development/stream-flat-map.js Co-authored-by: Brad Decker <git@braddecker.dev> * Outputting all bundle file links (metamaskbot) Co-authored-by: ryanml <ryanlanese@gmail.com> Co-authored-by: Brad Decker <git@braddecker.dev>
This commit is contained in:
parent
4aab4887d5
commit
9f4820ee98
@ -154,7 +154,7 @@ module.exports = {
|
|||||||
'babel.config.js',
|
'babel.config.js',
|
||||||
'nyc.config.js',
|
'nyc.config.js',
|
||||||
'stylelint.config.js',
|
'stylelint.config.js',
|
||||||
'app/scripts/runLockdown.js',
|
'app/scripts/lockdown-run.js',
|
||||||
'development/**/*.js',
|
'development/**/*.js',
|
||||||
'test/e2e/**/*.js',
|
'test/e2e/**/*.js',
|
||||||
'test/lib/wait-until-called.js',
|
'test/lib/wait-until-called.js',
|
||||||
|
@ -5,11 +5,13 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./initSentry.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runLockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./bg-libs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./background.js" type="text/javascript" charset="utf-8"></script>
|
{{@each(it.jsBundles) => val}}
|
||||||
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/each}}
|
||||||
<script src="./chromereload.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./chromereload.js" type="text/javascript" charset="utf-8"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -11,10 +11,12 @@
|
|||||||
<div id="app-content"></div>
|
<div id="app-content"></div>
|
||||||
<div id="popover-content"></div>
|
<div id="popover-content"></div>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./initSentry.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runLockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./ui-libs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./ui.js" type="text/javascript" charset="utf-8"></script>
|
{{@each(it.jsBundles) => val}}
|
||||||
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/each}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -33,8 +33,8 @@
|
|||||||
"js": [
|
"js": [
|
||||||
"disable-console.js",
|
"disable-console.js",
|
||||||
"globalthis.js",
|
"globalthis.js",
|
||||||
"lockdown.js",
|
"lockdown-install.js",
|
||||||
"runLockdown.js",
|
"lockdown-run.js",
|
||||||
"contentscript.js"
|
"contentscript.js"
|
||||||
],
|
],
|
||||||
"run_at": "document_start",
|
"run_at": "document_start",
|
||||||
|
@ -34,10 +34,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="popover-content"></div>
|
<div id="popover-content"></div>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./initSentry.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runLockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./ui-libs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./ui.js" type="text/javascript" charset="utf-8"></script>
|
{{@each(it.jsBundles) => val}}
|
||||||
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/each}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Ethereum Phishing Detection - MetaMask</title>
|
<title>Ethereum Phishing Detection - MetaMask</title>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runLockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./phishing-detect.js"></script>
|
<script src="./phishing-detect.js"></script>
|
||||||
<link rel="stylesheet" type="text/css" href="./index.css" title="ltr">
|
<link rel="stylesheet" type="text/css" href="./index.css" title="ltr">
|
||||||
<link rel="stylesheet" type="text/css" href="./index-rtl.css" title="rtl" disabled>
|
<link rel="stylesheet" type="text/css" href="./index-rtl.css" title="rtl" disabled>
|
||||||
|
@ -11,10 +11,12 @@
|
|||||||
<div id="app-content"></div>
|
<div id="app-content"></div>
|
||||||
<div id="popover-content"></div>
|
<div id="popover-content"></div>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./initSentry.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runLockdown.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./ui-libs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./ui.js" type="text/javascript" charset="utf-8"></script>
|
{{@each(it.jsBundles) => val}}
|
||||||
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/each}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -14,7 +14,7 @@ try {
|
|||||||
// caught and logged here so that the contentscript still gets injected.
|
// caught and logged here so that the contentscript still gets injected.
|
||||||
// This affects Firefox v56 and Waterfox Classic
|
// This affects Firefox v56 and Waterfox Classic
|
||||||
console.error('Lockdown failed:', error);
|
console.error('Lockdown failed:', error);
|
||||||
if (window.sentry && window.sentry.captureException) {
|
if (globalThis.sentry && globalThis.sentry.captureException) {
|
||||||
window.sentry.captureException(error);
|
globalThis.sentry.captureException(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,6 +2,9 @@
|
|||||||
import 'abortcontroller-polyfill/dist/polyfill-patch-fetch';
|
import 'abortcontroller-polyfill/dist/polyfill-patch-fetch';
|
||||||
import '@formatjs/intl-relativetimeformat/polyfill';
|
import '@formatjs/intl-relativetimeformat/polyfill';
|
||||||
|
|
||||||
|
// dev only, "react-devtools" import is skipped in prod builds
|
||||||
|
import 'react-devtools';
|
||||||
|
|
||||||
import PortStream from 'extension-port-stream';
|
import PortStream from 'extension-port-stream';
|
||||||
import extension from 'extensionizer';
|
import extension from 'extensionizer';
|
||||||
|
|
||||||
|
@ -1,19 +1,29 @@
|
|||||||
|
const { callbackify } = require('util');
|
||||||
|
const path = require('path');
|
||||||
|
const { writeFileSync, readFileSync } = require('fs');
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const gulp = require('gulp');
|
const gulp = require('gulp');
|
||||||
const watch = require('gulp-watch');
|
const watch = require('gulp-watch');
|
||||||
const source = require('vinyl-source-stream');
|
const source = require('vinyl-source-stream');
|
||||||
const buffer = require('vinyl-buffer');
|
const buffer = require('vinyl-buffer');
|
||||||
const log = require('fancy-log');
|
const log = require('fancy-log');
|
||||||
const watchify = require('watchify');
|
|
||||||
const browserify = require('browserify');
|
const browserify = require('browserify');
|
||||||
const envify = require('loose-envify/custom');
|
const watchify = require('watchify');
|
||||||
const sourcemaps = require('gulp-sourcemaps');
|
|
||||||
const terser = require('gulp-terser-js');
|
|
||||||
const babelify = require('babelify');
|
const babelify = require('babelify');
|
||||||
const brfs = require('brfs');
|
const brfs = require('brfs');
|
||||||
|
const envify = require('loose-envify/custom');
|
||||||
|
const sourcemaps = require('gulp-sourcemaps');
|
||||||
|
const applySourceMap = require('vinyl-sourcemaps-apply');
|
||||||
const pify = require('pify');
|
const pify = require('pify');
|
||||||
|
const through = require('through2');
|
||||||
const endOfStream = pify(require('end-of-stream'));
|
const endOfStream = pify(require('end-of-stream'));
|
||||||
const labeledStreamSplicer = require('labeled-stream-splicer').obj;
|
const labeledStreamSplicer = require('labeled-stream-splicer').obj;
|
||||||
|
const wrapInStream = require('pumpify').obj;
|
||||||
|
const Sqrl = require('squirrelly');
|
||||||
|
const lavaPack = require('@lavamoat/lavapack');
|
||||||
|
const terser = require('terser');
|
||||||
|
|
||||||
|
const bifyModuleGroups = require('bify-module-groups');
|
||||||
|
|
||||||
const metamaskrc = require('rc')('metamask', {
|
const metamaskrc = require('rc')('metamask', {
|
||||||
INFURA_PROJECT_ID: process.env.INFURA_PROJECT_ID,
|
INFURA_PROJECT_ID: process.env.INFURA_PROJECT_ID,
|
||||||
@ -25,9 +35,8 @@ const metamaskrc = require('rc')('metamask', {
|
|||||||
'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496',
|
'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496',
|
||||||
});
|
});
|
||||||
|
|
||||||
const { version } = require('../../package.json');
|
const { streamFlatMap } = require('../stream-flat-map.js');
|
||||||
|
const baseManifest = require('../../app/manifest/_base.json');
|
||||||
const packageJSON = require('../../package.json');
|
|
||||||
const {
|
const {
|
||||||
createTask,
|
createTask,
|
||||||
composeParallel,
|
composeParallel,
|
||||||
@ -37,17 +46,6 @@ const {
|
|||||||
|
|
||||||
module.exports = createScriptTasks;
|
module.exports = createScriptTasks;
|
||||||
|
|
||||||
const dependencies = Object.keys(
|
|
||||||
(packageJSON && packageJSON.dependencies) || {},
|
|
||||||
);
|
|
||||||
const materialUIDependencies = ['@material-ui/core'];
|
|
||||||
const reactDepenendencies = dependencies.filter((dep) => dep.match(/react/u));
|
|
||||||
|
|
||||||
const externalDependenciesMap = {
|
|
||||||
background: ['3box', '@ethereumjs/common', 'unicode-confusables'],
|
|
||||||
ui: [...materialUIDependencies, ...reactDepenendencies],
|
|
||||||
};
|
|
||||||
|
|
||||||
function createScriptTasks({ browserPlatforms, livereload }) {
|
function createScriptTasks({ browserPlatforms, livereload }) {
|
||||||
// internal tasks
|
// internal tasks
|
||||||
const core = {
|
const core = {
|
||||||
@ -69,72 +67,43 @@ function createScriptTasks({ browserPlatforms, livereload }) {
|
|||||||
// production
|
// production
|
||||||
prod: createTasksForBuildJsExtension({ taskPrefix: 'scripts:core:prod' }),
|
prod: createTasksForBuildJsExtension({ taskPrefix: 'scripts:core:prod' }),
|
||||||
};
|
};
|
||||||
const deps = {
|
|
||||||
background: createTasksForBuildJsDeps({
|
|
||||||
label: 'bg-libs',
|
|
||||||
key: 'background',
|
|
||||||
}),
|
|
||||||
ui: createTasksForBuildJsDeps({ label: 'ui-libs', key: 'ui' }),
|
|
||||||
};
|
|
||||||
|
|
||||||
// high level tasks
|
// high level tasks
|
||||||
|
|
||||||
const prod = composeParallel(deps.background, deps.ui, core.prod);
|
const { dev, test, testDev, prod } = core;
|
||||||
|
return { dev, test, testDev, prod };
|
||||||
|
|
||||||
const { dev, testDev } = core;
|
function createTasksForBuildJsExtension({ taskPrefix, devMode, testing }) {
|
||||||
|
const standardEntryPoints = ['background', 'ui', 'phishing-detect'];
|
||||||
const test = composeParallel(deps.background, deps.ui, core.test);
|
const standardSubtask = createTask(
|
||||||
|
`${taskPrefix}:standardEntryPoints`,
|
||||||
return { prod, dev, testDev, test };
|
createFactoredBuild({
|
||||||
|
entryFiles: standardEntryPoints.map(
|
||||||
function createTasksForBuildJsDeps({ key, label }) {
|
(label) => `./app/scripts/${label}.js`,
|
||||||
return createTask(
|
),
|
||||||
`scripts:deps:${key}`,
|
devMode,
|
||||||
createNormalBundle({
|
testing,
|
||||||
label,
|
|
||||||
destFilepath: `${label}.js`,
|
|
||||||
modulesToExpose: externalDependenciesMap[key],
|
|
||||||
devMode: false,
|
|
||||||
browserPlatforms,
|
browserPlatforms,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
function createTasksForBuildJsExtension({ taskPrefix, devMode, testing }) {
|
|
||||||
const standardBundles = [
|
|
||||||
'background',
|
|
||||||
'ui',
|
|
||||||
'phishing-detect',
|
|
||||||
'initSentry',
|
|
||||||
];
|
|
||||||
|
|
||||||
const standardSubtasks = standardBundles.map((label) => {
|
|
||||||
let extraEntries;
|
|
||||||
if (devMode && label === 'ui') {
|
|
||||||
extraEntries = ['./development/require-react-devtools.js'];
|
|
||||||
}
|
|
||||||
return createTask(
|
|
||||||
`${taskPrefix}:${label}`,
|
|
||||||
createBundleTaskForBuildJsExtensionNormal({
|
|
||||||
label,
|
|
||||||
devMode,
|
|
||||||
testing,
|
|
||||||
extraEntries,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
// inpage must be built before contentscript
|
// inpage must be built before contentscript
|
||||||
// because inpage bundle result is included inside contentscript
|
// because inpage bundle result is included inside contentscript
|
||||||
const contentscriptSubtask = createTask(
|
const contentscriptSubtask = createTask(
|
||||||
`${taskPrefix}:contentscript`,
|
`${taskPrefix}:contentscript`,
|
||||||
createTaskForBuildJsExtensionContentscript({ devMode, testing }),
|
createTaskForBundleContentscript({ devMode, testing }),
|
||||||
);
|
);
|
||||||
|
|
||||||
// this can run whenever
|
// this can run whenever
|
||||||
const disableConsoleSubtask = createTask(
|
const disableConsoleSubtask = createTask(
|
||||||
`${taskPrefix}:disable-console`,
|
`${taskPrefix}:disable-console`,
|
||||||
createTaskForBuildJsExtensionDisableConsole({ devMode }),
|
createTaskForBundleDisableConsole({ devMode }),
|
||||||
|
);
|
||||||
|
|
||||||
|
// this can run whenever
|
||||||
|
const installSentrySubtask = createTask(
|
||||||
|
`${taskPrefix}:sentry`,
|
||||||
|
createTaskForBundleSentry({ devMode }),
|
||||||
);
|
);
|
||||||
|
|
||||||
// task for initiating browser livereload
|
// task for initiating browser livereload
|
||||||
@ -155,36 +124,16 @@ function createScriptTasks({ browserPlatforms, livereload }) {
|
|||||||
|
|
||||||
// make each bundle run in a separate process
|
// make each bundle run in a separate process
|
||||||
const allSubtasks = [
|
const allSubtasks = [
|
||||||
...standardSubtasks,
|
standardSubtask,
|
||||||
contentscriptSubtask,
|
contentscriptSubtask,
|
||||||
disableConsoleSubtask,
|
disableConsoleSubtask,
|
||||||
|
installSentrySubtask,
|
||||||
].map((subtask) => runInChildProcess(subtask));
|
].map((subtask) => runInChildProcess(subtask));
|
||||||
// const allSubtasks = [...standardSubtasks, contentscriptSubtask].map(subtask => (subtask))
|
|
||||||
// make a parent task that runs each task in a child thread
|
// make a parent task that runs each task in a child thread
|
||||||
return composeParallel(initiateLiveReload, ...allSubtasks);
|
return composeParallel(initiateLiveReload, ...allSubtasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createBundleTaskForBuildJsExtensionNormal({
|
function createTaskForBundleDisableConsole({ devMode }) {
|
||||||
label,
|
|
||||||
devMode,
|
|
||||||
testing,
|
|
||||||
extraEntries,
|
|
||||||
}) {
|
|
||||||
return createNormalBundle({
|
|
||||||
label,
|
|
||||||
entryFilepath: `./app/scripts/${label}.js`,
|
|
||||||
destFilepath: `${label}.js`,
|
|
||||||
extraEntries,
|
|
||||||
externalDependencies: devMode
|
|
||||||
? undefined
|
|
||||||
: externalDependenciesMap[label],
|
|
||||||
devMode,
|
|
||||||
testing,
|
|
||||||
browserPlatforms,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createTaskForBuildJsExtensionDisableConsole({ devMode }) {
|
|
||||||
const label = 'disable-console';
|
const label = 'disable-console';
|
||||||
return createNormalBundle({
|
return createNormalBundle({
|
||||||
label,
|
label,
|
||||||
@ -195,7 +144,19 @@ function createScriptTasks({ browserPlatforms, livereload }) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function createTaskForBuildJsExtensionContentscript({ devMode, testing }) {
|
function createTaskForBundleSentry({ devMode }) {
|
||||||
|
const label = 'sentry-install';
|
||||||
|
return createNormalBundle({
|
||||||
|
label,
|
||||||
|
entryFilepath: `./app/scripts/${label}.js`,
|
||||||
|
destFilepath: `${label}.js`,
|
||||||
|
devMode,
|
||||||
|
browserPlatforms,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// the "contentscript" bundle contains the "inpage" bundle
|
||||||
|
function createTaskForBundleContentscript({ devMode, testing }) {
|
||||||
const inpage = 'inpage';
|
const inpage = 'inpage';
|
||||||
const contentscript = 'contentscript';
|
const contentscript = 'contentscript';
|
||||||
return composeSeries(
|
return composeSeries(
|
||||||
@ -203,9 +164,6 @@ function createScriptTasks({ browserPlatforms, livereload }) {
|
|||||||
label: inpage,
|
label: inpage,
|
||||||
entryFilepath: `./app/scripts/${inpage}.js`,
|
entryFilepath: `./app/scripts/${inpage}.js`,
|
||||||
destFilepath: `${inpage}.js`,
|
destFilepath: `${inpage}.js`,
|
||||||
externalDependencies: devMode
|
|
||||||
? undefined
|
|
||||||
: externalDependenciesMap[inpage],
|
|
||||||
devMode,
|
devMode,
|
||||||
testing,
|
testing,
|
||||||
browserPlatforms,
|
browserPlatforms,
|
||||||
@ -214,9 +172,6 @@ function createScriptTasks({ browserPlatforms, livereload }) {
|
|||||||
label: contentscript,
|
label: contentscript,
|
||||||
entryFilepath: `./app/scripts/${contentscript}.js`,
|
entryFilepath: `./app/scripts/${contentscript}.js`,
|
||||||
destFilepath: `${contentscript}.js`,
|
destFilepath: `${contentscript}.js`,
|
||||||
externalDependencies: devMode
|
|
||||||
? undefined
|
|
||||||
: externalDependenciesMap[contentscript],
|
|
||||||
devMode,
|
devMode,
|
||||||
testing,
|
testing,
|
||||||
browserPlatforms,
|
browserPlatforms,
|
||||||
@ -225,12 +180,8 @@ function createScriptTasks({ browserPlatforms, livereload }) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createNormalBundle({
|
function createFactoredBuild({
|
||||||
destFilepath,
|
entryFiles,
|
||||||
entryFilepath,
|
|
||||||
extraEntries = [],
|
|
||||||
modulesToExpose,
|
|
||||||
externalDependencies,
|
|
||||||
devMode,
|
devMode,
|
||||||
testing,
|
testing,
|
||||||
browserPlatforms,
|
browserPlatforms,
|
||||||
@ -240,10 +191,126 @@ function createNormalBundle({
|
|||||||
const buildConfiguration = createBuildConfiguration();
|
const buildConfiguration = createBuildConfiguration();
|
||||||
const { bundlerOpts, events } = buildConfiguration;
|
const { bundlerOpts, events } = buildConfiguration;
|
||||||
|
|
||||||
|
// devMode options
|
||||||
|
const reloadOnChange = Boolean(devMode);
|
||||||
|
const minify = Boolean(devMode) === false;
|
||||||
|
|
||||||
const envVars = getEnvironmentVariables({ devMode, testing });
|
const envVars = getEnvironmentVariables({ devMode, testing });
|
||||||
setupBundlerDefaults(buildConfiguration, {
|
setupBundlerDefaults(buildConfiguration, {
|
||||||
devMode,
|
devMode,
|
||||||
envVars,
|
envVars,
|
||||||
|
reloadOnChange,
|
||||||
|
minify,
|
||||||
|
});
|
||||||
|
|
||||||
|
// set bundle entries
|
||||||
|
bundlerOpts.entries = [...entryFiles];
|
||||||
|
|
||||||
|
// setup bundle factoring with bify-module-groups plugin
|
||||||
|
Object.assign(bundlerOpts, bifyModuleGroups.plugin.args);
|
||||||
|
bundlerOpts.plugin = [...bundlerOpts.plugin, [bifyModuleGroups.plugin]];
|
||||||
|
|
||||||
|
// instrument pipeline
|
||||||
|
let sizeGroupMap;
|
||||||
|
events.on('configurePipeline', ({ pipeline }) => {
|
||||||
|
// to be populated by the group-by-size transform
|
||||||
|
sizeGroupMap = new Map();
|
||||||
|
pipeline.get('groups').unshift(
|
||||||
|
// factor modules
|
||||||
|
bifyModuleGroups.groupByFactor({
|
||||||
|
entryFileToLabel(filepath) {
|
||||||
|
return path.parse(filepath).name;
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
// cap files at 2 mb
|
||||||
|
bifyModuleGroups.groupBySize({
|
||||||
|
sizeLimit: 2e6,
|
||||||
|
groupingMap: sizeGroupMap,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
pipeline.get('vinyl').unshift(
|
||||||
|
// convert each module group into a stream with a single vinyl file
|
||||||
|
streamFlatMap((moduleGroup) => {
|
||||||
|
const filename = `${moduleGroup.label}.js`;
|
||||||
|
const childStream = wrapInStream(
|
||||||
|
moduleGroup.stream,
|
||||||
|
lavaPack({ raw: true, hasExports: true, includePrelude: false }),
|
||||||
|
source(filename),
|
||||||
|
);
|
||||||
|
return childStream;
|
||||||
|
}),
|
||||||
|
buffer(),
|
||||||
|
);
|
||||||
|
// setup bundle destination
|
||||||
|
browserPlatforms.forEach((platform) => {
|
||||||
|
const dest = `./dist/${platform}/`;
|
||||||
|
pipeline.get('dest').push(gulp.dest(dest));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// wait for bundle completion for postprocessing
|
||||||
|
events.on('bundleDone', () => {
|
||||||
|
const commonSet = sizeGroupMap.get('common');
|
||||||
|
// create entry points for each file
|
||||||
|
for (const [groupLabel, groupSet] of sizeGroupMap.entries()) {
|
||||||
|
// skip "common" group, they are added tp all other groups
|
||||||
|
if (groupSet === commonSet) continue;
|
||||||
|
|
||||||
|
switch (groupLabel) {
|
||||||
|
case 'ui': {
|
||||||
|
renderHtmlFile('popup', groupSet, commonSet, browserPlatforms);
|
||||||
|
renderHtmlFile(
|
||||||
|
'notification',
|
||||||
|
groupSet,
|
||||||
|
commonSet,
|
||||||
|
browserPlatforms,
|
||||||
|
);
|
||||||
|
renderHtmlFile('home', groupSet, commonSet, browserPlatforms);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'phishing-detect': {
|
||||||
|
renderHtmlFile('phishing', groupSet, commonSet, browserPlatforms);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'background': {
|
||||||
|
renderHtmlFile('background', groupSet, commonSet, browserPlatforms);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw new Error(`buildsys - unknown groupLabel "${groupLabel}"`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await bundleIt(buildConfiguration);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function createNormalBundle({
|
||||||
|
destFilepath,
|
||||||
|
entryFilepath,
|
||||||
|
extraEntries = [],
|
||||||
|
modulesToExpose,
|
||||||
|
devMode,
|
||||||
|
testing,
|
||||||
|
browserPlatforms,
|
||||||
|
}) {
|
||||||
|
return async function () {
|
||||||
|
// create bundler setup and apply defaults
|
||||||
|
const buildConfiguration = createBuildConfiguration();
|
||||||
|
const { bundlerOpts, events } = buildConfiguration;
|
||||||
|
|
||||||
|
// devMode options
|
||||||
|
const reloadOnChange = Boolean(devMode);
|
||||||
|
const minify = Boolean(devMode) === false;
|
||||||
|
|
||||||
|
const envVars = getEnvironmentVariables({ devMode, testing });
|
||||||
|
setupBundlerDefaults(buildConfiguration, {
|
||||||
|
devMode,
|
||||||
|
envVars,
|
||||||
|
reloadOnChange,
|
||||||
|
minify,
|
||||||
});
|
});
|
||||||
|
|
||||||
// set bundle entries
|
// set bundle entries
|
||||||
@ -256,14 +323,6 @@ function createNormalBundle({
|
|||||||
bundlerOpts.require = bundlerOpts.require.concat(modulesToExpose);
|
bundlerOpts.require = bundlerOpts.require.concat(modulesToExpose);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalDependencies) {
|
|
||||||
// there doesnt seem to be a standard bify option for this
|
|
||||||
// so we'll put it here but manually call it after bundle
|
|
||||||
bundlerOpts.manualExternal = bundlerOpts.manualExternal.concat(
|
|
||||||
externalDependencies,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// instrument pipeline
|
// instrument pipeline
|
||||||
events.on('configurePipeline', ({ pipeline }) => {
|
events.on('configurePipeline', ({ pipeline }) => {
|
||||||
// convert bundle stream to gulp vinyl stream
|
// convert bundle stream to gulp vinyl stream
|
||||||
@ -288,17 +347,18 @@ function createBuildConfiguration() {
|
|||||||
transform: [],
|
transform: [],
|
||||||
plugin: [],
|
plugin: [],
|
||||||
require: [],
|
require: [],
|
||||||
// not a standard bify option
|
// non-standard bify options
|
||||||
manualExternal: [],
|
manualExternal: [],
|
||||||
|
manualIgnore: [],
|
||||||
};
|
};
|
||||||
return { bundlerOpts, events };
|
return { bundlerOpts, events };
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupBundlerDefaults(buildConfiguration, { devMode, envVars }) {
|
function setupBundlerDefaults(
|
||||||
|
buildConfiguration,
|
||||||
|
{ devMode, envVars, reloadOnChange, minify },
|
||||||
|
) {
|
||||||
const { bundlerOpts } = buildConfiguration;
|
const { bundlerOpts } = buildConfiguration;
|
||||||
// devMode options
|
|
||||||
const reloadOnChange = Boolean(devMode);
|
|
||||||
const minify = Boolean(devMode) === false;
|
|
||||||
|
|
||||||
Object.assign(bundlerOpts, {
|
Object.assign(bundlerOpts, {
|
||||||
// source transforms
|
// source transforms
|
||||||
@ -314,6 +374,11 @@ function setupBundlerDefaults(buildConfiguration, { devMode, envVars }) {
|
|||||||
debug: true,
|
debug: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ensure react-devtools are not included in non-dev builds
|
||||||
|
if (!devMode) {
|
||||||
|
bundlerOpts.manualIgnore.push('react-devtools');
|
||||||
|
}
|
||||||
|
|
||||||
// inject environment variables via node-style `process.env`
|
// inject environment variables via node-style `process.env`
|
||||||
if (envVars) {
|
if (envVars) {
|
||||||
bundlerOpts.transform.push([envify(envVars), { global: true }]);
|
bundlerOpts.transform.push([envify(envVars), { global: true }]);
|
||||||
@ -351,17 +416,33 @@ function setupReloadOnChange({ bundlerOpts, events }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setupMinification(buildConfiguration) {
|
function setupMinification(buildConfiguration) {
|
||||||
|
const minifyOpts = {
|
||||||
|
mangle: {
|
||||||
|
reserved: ['MetamaskInpageProvider'],
|
||||||
|
},
|
||||||
|
};
|
||||||
const { events } = buildConfiguration;
|
const { events } = buildConfiguration;
|
||||||
events.on('configurePipeline', ({ pipeline }) => {
|
events.on('configurePipeline', ({ pipeline }) => {
|
||||||
pipeline.get('minify').push(
|
pipeline.get('minify').push(
|
||||||
terser({
|
// this is the "gulp-terser-js" wrapper around the latest version of terser
|
||||||
mangle: {
|
through.obj(
|
||||||
reserved: ['MetamaskInpageProvider'],
|
callbackify(async (file, _enc) => {
|
||||||
},
|
const input = {
|
||||||
sourceMap: {
|
[file.sourceMap.file]: file.contents.toString(),
|
||||||
content: true,
|
};
|
||||||
},
|
const opts = {
|
||||||
}),
|
sourceMap: {
|
||||||
|
filename: file.sourceMap.file,
|
||||||
|
content: file.sourceMap,
|
||||||
|
},
|
||||||
|
...minifyOpts,
|
||||||
|
};
|
||||||
|
const res = await terser.minify(input, opts);
|
||||||
|
file.contents = Buffer.from(res.code);
|
||||||
|
applySourceMap(file, res.map);
|
||||||
|
return file;
|
||||||
|
}),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -385,18 +466,22 @@ function setupSourcemaps(buildConfiguration, { devMode }) {
|
|||||||
async function bundleIt(buildConfiguration) {
|
async function bundleIt(buildConfiguration) {
|
||||||
const { bundlerOpts, events } = buildConfiguration;
|
const { bundlerOpts, events } = buildConfiguration;
|
||||||
const bundler = browserify(bundlerOpts);
|
const bundler = browserify(bundlerOpts);
|
||||||
// manually apply non-standard option
|
// manually apply non-standard options
|
||||||
bundler.external(bundlerOpts.manualExternal);
|
bundler.external(bundlerOpts.manualExternal);
|
||||||
|
bundler.ignore(bundlerOpts.manualIgnore);
|
||||||
// output build logs to terminal
|
// output build logs to terminal
|
||||||
bundler.on('log', log);
|
bundler.on('log', log);
|
||||||
// forward update event (used by watchify)
|
// forward update event (used by watchify)
|
||||||
bundler.on('update', () => performBundle());
|
bundler.on('update', () => performBundle());
|
||||||
|
|
||||||
await performBundle();
|
await performBundle();
|
||||||
|
|
||||||
async function performBundle() {
|
async function performBundle() {
|
||||||
// this pipeline is created for every bundle
|
// this pipeline is created for every bundle
|
||||||
// the labels are all the steps you can hook into
|
// the labels are all the steps you can hook into
|
||||||
const pipeline = labeledStreamSplicer([
|
const pipeline = labeledStreamSplicer([
|
||||||
|
'groups',
|
||||||
|
[],
|
||||||
'vinyl',
|
'vinyl',
|
||||||
[],
|
[],
|
||||||
'sourcemaps:init',
|
'sourcemaps:init',
|
||||||
@ -415,7 +500,11 @@ async function bundleIt(buildConfiguration) {
|
|||||||
bundleStream.pipe(pipeline);
|
bundleStream.pipe(pipeline);
|
||||||
// nothing will consume pipeline, so let it flow
|
// nothing will consume pipeline, so let it flow
|
||||||
pipeline.resume();
|
pipeline.resume();
|
||||||
|
|
||||||
await endOfStream(pipeline);
|
await endOfStream(pipeline);
|
||||||
|
|
||||||
|
// call the completion event to handle any post-processing
|
||||||
|
events.emit('bundleDone');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -427,7 +516,7 @@ function getEnvironmentVariables({ devMode, testing }) {
|
|||||||
return {
|
return {
|
||||||
METAMASK_DEBUG: devMode,
|
METAMASK_DEBUG: devMode,
|
||||||
METAMASK_ENVIRONMENT: environment,
|
METAMASK_ENVIRONMENT: environment,
|
||||||
METAMASK_VERSION: version,
|
METAMASK_VERSION: baseManifest.version,
|
||||||
NODE_ENV: devMode ? 'development' : 'production',
|
NODE_ENV: devMode ? 'development' : 'production',
|
||||||
IN_TEST: testing ? 'true' : false,
|
IN_TEST: testing ? 'true' : false,
|
||||||
PUBNUB_SUB_KEY: process.env.PUBNUB_SUB_KEY || '',
|
PUBNUB_SUB_KEY: process.env.PUBNUB_SUB_KEY || '',
|
||||||
@ -478,6 +567,20 @@ function getEnvironment({ devMode, testing }) {
|
|||||||
return 'other';
|
return 'other';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderHtmlFile(htmlName, groupSet, commonSet, browserPlatforms) {
|
||||||
|
const htmlFilePath = `./app/${htmlName}.html`;
|
||||||
|
const htmlTemplate = readFileSync(htmlFilePath, 'utf8');
|
||||||
|
const jsBundles = [...commonSet.values(), ...groupSet.values()].map(
|
||||||
|
(label) => `./${label}.js`,
|
||||||
|
);
|
||||||
|
const htmlOutput = Sqrl.render(htmlTemplate, { jsBundles });
|
||||||
|
browserPlatforms.forEach((platform) => {
|
||||||
|
const dest = `./dist/${platform}/${htmlName}.html`;
|
||||||
|
// we dont have a way of creating async events atm
|
||||||
|
writeFileSync(dest, htmlOutput);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function beep() {
|
function beep() {
|
||||||
process.stdout.write('\x07');
|
process.stdout.write('\x07');
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,8 @@ const copyTargets = [
|
|||||||
dest: ``,
|
dest: ``,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: `./app/`,
|
src: `./app/loading.html`,
|
||||||
pattern: `*.html`,
|
dest: `loading.html`,
|
||||||
dest: ``,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: `./node_modules/globalthis/dist/browser.js`,
|
src: `./node_modules/globalthis/dist/browser.js`,
|
||||||
@ -50,12 +49,16 @@ const copyTargets = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: `./node_modules/ses/dist/lockdown.cjs`,
|
src: `./node_modules/ses/dist/lockdown.cjs`,
|
||||||
dest: `lockdown.js`,
|
dest: `lockdown-install.js`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: `./app/scripts/`,
|
src: `./app/scripts/lockdown-run.js`,
|
||||||
pattern: `runLockdown.js`,
|
dest: `lockdown-run.js`,
|
||||||
dest: ``,
|
},
|
||||||
|
{
|
||||||
|
// eslint-disable-next-line node/no-extraneous-require
|
||||||
|
src: require.resolve('@lavamoat/lavapack/src/runtime-cjs.js'),
|
||||||
|
dest: `runtime-cjs.js`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -71,8 +71,9 @@ function runInChildProcess(task) {
|
|||||||
let childProcess;
|
let childProcess;
|
||||||
// don't run subprocesses in lavamoat for dev mode if main process not run in lavamoat
|
// don't run subprocesses in lavamoat for dev mode if main process not run in lavamoat
|
||||||
if (
|
if (
|
||||||
taskName.includes('scripts:core:dev') &&
|
process.env.npm_lifecycle_event === 'build:dev' ||
|
||||||
!process.argv[0].includes('lavamoat')
|
(taskName.includes('scripts:core:dev') &&
|
||||||
|
!process.argv[0].includes('lavamoat'))
|
||||||
) {
|
) {
|
||||||
childProcess = spawn('yarn', ['build:dev', taskName, '--skip-stats'], {
|
childProcess = spawn('yarn', ['build:dev', taskName, '--skip-stats'], {
|
||||||
env: process.env,
|
env: process.env,
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
const { promises: fs } = require('fs');
|
const { promises: fs } = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fetch = require('node-fetch');
|
const fetch = require('node-fetch');
|
||||||
|
const glob = require('fast-glob');
|
||||||
const VERSION = require('../dist/chrome/manifest.json').version; // eslint-disable-line import/no-unresolved
|
const VERSION = require('../dist/chrome/manifest.json').version; // eslint-disable-line import/no-unresolved
|
||||||
|
|
||||||
start().catch(console.error);
|
start().catch(console.error);
|
||||||
@ -39,19 +40,15 @@ async function start() {
|
|||||||
.join(', ');
|
.join(', ');
|
||||||
|
|
||||||
// links to bundle browser builds
|
// links to bundle browser builds
|
||||||
const bundles = [
|
const fileType = '.html';
|
||||||
'background',
|
const sourceMapRoot = '/build-artifacts/source-map-explorer/';
|
||||||
'ui',
|
const bundleFiles = await glob(`.${sourceMapRoot}*${fileType}`);
|
||||||
'inpage',
|
const bundleLinks = bundleFiles
|
||||||
'contentscript',
|
.map((bundleFile) => {
|
||||||
'ui-libs',
|
const fileName = bundleFile.split(sourceMapRoot)[1];
|
||||||
'bg-libs',
|
const bundleName = fileName.split(fileType)[0];
|
||||||
'phishing-detect',
|
const url = `${BUILD_LINK_BASE}${sourceMapRoot}${fileName}`;
|
||||||
];
|
return `<a href="${url}">${bundleName}</a>`;
|
||||||
const bundleLinks = bundles
|
|
||||||
.map((bundle) => {
|
|
||||||
const url = `${BUILD_LINK_BASE}/build-artifacts/source-map-explorer/${bundle}.html`;
|
|
||||||
return `<a href="${url}">${bundle}</a>`;
|
|
||||||
})
|
})
|
||||||
.join(', ');
|
.join(', ');
|
||||||
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
require('react-devtools');
|
|
@ -2,6 +2,7 @@ const fs = require('fs');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { SourceMapConsumer } = require('source-map');
|
const { SourceMapConsumer } = require('source-map');
|
||||||
const pify = require('pify');
|
const pify = require('pify');
|
||||||
|
const { codeFrameColumns } = require('@babel/code-frame');
|
||||||
|
|
||||||
const fsAsync = pify(fs);
|
const fsAsync = pify(fs);
|
||||||
|
|
||||||
@ -20,13 +21,12 @@ start().catch((error) => {
|
|||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
const targetFiles = [
|
const targetFiles = [
|
||||||
`background.js`,
|
`common-0.js`,
|
||||||
// `bg-libs`, skipped because source maps are invalid due to browserify bug: https://github.com/browserify/browserify/issues/1971
|
`background-0.js`,
|
||||||
|
`ui-0.js`,
|
||||||
|
'phishing-detect-0.js',
|
||||||
// `contentscript.js`, skipped because the validator is erroneously sampling the inlined `inpage.js` script
|
// `contentscript.js`, skipped because the validator is erroneously sampling the inlined `inpage.js` script
|
||||||
`inpage.js`,
|
`inpage.js`,
|
||||||
'phishing-detect.js',
|
|
||||||
`ui.js`,
|
|
||||||
// `ui-libs.js`, skipped because source maps are invalid due to browserify bug: https://github.com/browserify/browserify/issues/1971
|
|
||||||
];
|
];
|
||||||
let valid = true;
|
let valid = true;
|
||||||
|
|
||||||
@ -102,7 +102,6 @@ async function validateSourcemapForFile({ buildName }) {
|
|||||||
|
|
||||||
const buildLines = rawBuild.split('\n');
|
const buildLines = rawBuild.split('\n');
|
||||||
const targetString = 'new Error';
|
const targetString = 'new Error';
|
||||||
// const targetString = 'null'
|
|
||||||
const matchesPerLine = buildLines.map((line) =>
|
const matchesPerLine = buildLines.map((line) =>
|
||||||
indicesOf(targetString, line),
|
indicesOf(targetString, line),
|
||||||
);
|
);
|
||||||
@ -114,26 +113,35 @@ async function validateSourcemapForFile({ buildName }) {
|
|||||||
// warn if source content is missing
|
// warn if source content is missing
|
||||||
if (!result.source) {
|
if (!result.source) {
|
||||||
valid = false;
|
valid = false;
|
||||||
console.warn(
|
const location = {
|
||||||
`!! missing source for position: ${JSON.stringify(position)}`,
|
start: { line: position.line, column: position.column + 1 },
|
||||||
|
};
|
||||||
|
const codeSample = codeFrameColumns(rawBuild, location, {
|
||||||
|
message: `missing source for position`,
|
||||||
|
highlightCode: true,
|
||||||
|
});
|
||||||
|
console.error(
|
||||||
|
`missing source for position, in bundle "${buildName}"\n${codeSample}`,
|
||||||
);
|
);
|
||||||
// const buildLine = buildLines[position.line - 1]
|
|
||||||
console.warn(` origin in build:`);
|
|
||||||
console.warn(` ${buildLines[position.line - 2]}`);
|
|
||||||
console.warn(`-> ${buildLines[position.line - 1]}`);
|
|
||||||
console.warn(` ${buildLines[position.line - 0]}`);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const sourceContent = consumer.sourceContentFor(result.source);
|
const sourceContent = consumer.sourceContentFor(result.source);
|
||||||
const sourceLines = sourceContent.split('\n');
|
const sourceLines = sourceContent.split('\n');
|
||||||
const line = sourceLines[result.line - 1];
|
const sourceLine = sourceLines[result.line - 1];
|
||||||
// this sometimes includes the whole line though we tried to match somewhere in the middle
|
// this sometimes includes the whole line though we tried to match somewhere in the middle
|
||||||
const portion = line.slice(result.column);
|
const portion = sourceLine.slice(result.column);
|
||||||
const isMaybeValid = portion.includes(targetString);
|
const foundValidSource = portion.includes(targetString);
|
||||||
if (!isMaybeValid) {
|
if (!foundValidSource) {
|
||||||
valid = false;
|
valid = false;
|
||||||
|
const location = {
|
||||||
|
start: { line: result.line + 1, column: result.column + 1 },
|
||||||
|
};
|
||||||
|
const codeSample = codeFrameColumns(sourceContent, location, {
|
||||||
|
message: `expected to see ${JSON.stringify(targetString)}`,
|
||||||
|
highlightCode: true,
|
||||||
|
});
|
||||||
console.error(
|
console.error(
|
||||||
`Sourcemap seems invalid:\n${getFencedCode(result.source, line)}`,
|
`Sourcemap seems invalid, ${result.source}\n${codeSample}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -142,27 +150,6 @@ async function validateSourcemapForFile({ buildName }) {
|
|||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
const CODE_FENCE_LENGTH = 80;
|
|
||||||
const TITLE_PADDING_LENGTH = 1;
|
|
||||||
|
|
||||||
function getFencedCode(filename, code) {
|
|
||||||
const title = `${' '.repeat(TITLE_PADDING_LENGTH)}${filename}${' '.repeat(
|
|
||||||
TITLE_PADDING_LENGTH,
|
|
||||||
)}`;
|
|
||||||
const openingFenceLength = Math.max(
|
|
||||||
CODE_FENCE_LENGTH - (filename.length + TITLE_PADDING_LENGTH * 2),
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
const startOpeningFenceLength = Math.floor(openingFenceLength / 2);
|
|
||||||
const endOpeningFenceLength = Math.ceil(openingFenceLength / 2);
|
|
||||||
const openingFence = `${'='.repeat(
|
|
||||||
startOpeningFenceLength,
|
|
||||||
)}${title}${'='.repeat(endOpeningFenceLength)}`;
|
|
||||||
const closingFence = '='.repeat(CODE_FENCE_LENGTH);
|
|
||||||
|
|
||||||
return `${openingFence}\n${code}\n${closingFence}\n`;
|
|
||||||
}
|
|
||||||
|
|
||||||
function indicesOf(substring, string) {
|
function indicesOf(substring, string) {
|
||||||
const a = [];
|
const a = [];
|
||||||
let i = -1;
|
let i = -1;
|
||||||
|
43
development/stream-flat-map.js
Normal file
43
development/stream-flat-map.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
const { PassThrough: ThroughStream } = require('stream');
|
||||||
|
// eslint-ignore-next-line node/no-extraneous-require
|
||||||
|
const duplexify = require('duplexify').obj;
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
streamFlatMap,
|
||||||
|
asyncGeneratorToStream,
|
||||||
|
};
|
||||||
|
|
||||||
|
// returns an async generator that maps each chunk to a stream with the specified
|
||||||
|
// "entryToStream" mapping fn, and forwards child streams out
|
||||||
|
// useable with streams.pipeline
|
||||||
|
function streamFlatMap(entryToStream) {
|
||||||
|
const duplex = asyncGeneratorToStream(flatMapGenerator);
|
||||||
|
return duplex;
|
||||||
|
|
||||||
|
async function* flatMapGenerator(source) {
|
||||||
|
for await (const entry of source) {
|
||||||
|
const subStream = entryToStream(entry);
|
||||||
|
yield* subStream;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// this stupid utility turns an async iterator factory into a duplex stream
|
||||||
|
function asyncGeneratorToStream(factoryFn) {
|
||||||
|
const writableStream = new ThroughStream({ objectMode: true });
|
||||||
|
const readableStream = new ThroughStream({ objectMode: true });
|
||||||
|
const duplex = duplexify(writableStream, readableStream);
|
||||||
|
const asyncIter = factoryFn(writableStream);
|
||||||
|
// drain iterator into readable stream
|
||||||
|
process.nextTick(async () => {
|
||||||
|
try {
|
||||||
|
for await (const item of asyncIter) {
|
||||||
|
readableStream.write(item);
|
||||||
|
}
|
||||||
|
readableStream.end();
|
||||||
|
} catch (err) {
|
||||||
|
readableStream.destroy(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return duplex;
|
||||||
|
}
|
@ -223,11 +223,6 @@
|
|||||||
"js-tokens": true
|
"js-tokens": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
|
||||||
"globals": {
|
|
||||||
"BigInt": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@babel/plugin-proposal-async-generator-functions": {
|
"@babel/plugin-proposal-async-generator-functions": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"@babel/core": true,
|
"@babel/core": true,
|
||||||
@ -805,6 +800,26 @@
|
|||||||
"through2": true
|
"through2": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@lavamoat/lavapack": {
|
||||||
|
"builtin": {
|
||||||
|
"assert": true,
|
||||||
|
"buffer.Buffer.from": true,
|
||||||
|
"path.join": true,
|
||||||
|
"path.relative": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"__dirname": true,
|
||||||
|
"process.cwd": true
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"JSONStream": true,
|
||||||
|
"combine-source-map": true,
|
||||||
|
"convert-source-map": true,
|
||||||
|
"json-stable-stringify": true,
|
||||||
|
"through2": true,
|
||||||
|
"umd": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"@nodelib/fs.scandir": {
|
"@nodelib/fs.scandir": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"fs.lstat": true,
|
"fs.lstat": true,
|
||||||
@ -874,7 +889,6 @@
|
|||||||
},
|
},
|
||||||
"acorn": {
|
"acorn": {
|
||||||
"globals": {
|
"globals": {
|
||||||
"BigInt": true,
|
|
||||||
"define": true
|
"define": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -884,9 +898,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"acorn-node": {
|
"acorn-node": {
|
||||||
"globals": {
|
|
||||||
"BigInt": true
|
|
||||||
},
|
|
||||||
"packages": {
|
"packages": {
|
||||||
"acorn": true,
|
"acorn": true,
|
||||||
"acorn-dynamic-import": true,
|
"acorn-dynamic-import": true,
|
||||||
@ -959,16 +970,6 @@
|
|||||||
"buffer-equal": true
|
"buffer-equal": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"are-we-there-yet": {
|
|
||||||
"builtin": {
|
|
||||||
"events.EventEmitter": true,
|
|
||||||
"util.inherits": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"delegates": true,
|
|
||||||
"readable-stream": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"arr-diff": {
|
"arr-diff": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"arr-flatten": true,
|
"arr-flatten": true,
|
||||||
@ -1091,6 +1092,13 @@
|
|||||||
"pascalcase": true
|
"pascalcase": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"bify-module-groups": {
|
||||||
|
"packages": {
|
||||||
|
"pify": true,
|
||||||
|
"pump": true,
|
||||||
|
"through2": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"bl": {
|
"bl": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"util.inherits": true
|
"util.inherits": true
|
||||||
@ -1321,7 +1329,6 @@
|
|||||||
"anymatch": true,
|
"anymatch": true,
|
||||||
"async-each": true,
|
"async-each": true,
|
||||||
"braces": true,
|
"braces": true,
|
||||||
"fsevents": true,
|
|
||||||
"glob-parent": true,
|
"glob-parent": true,
|
||||||
"inherits": true,
|
"inherits": true,
|
||||||
"is-binary-path": true,
|
"is-binary-path": true,
|
||||||
@ -1573,16 +1580,6 @@
|
|||||||
"through2": true
|
"through2": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detect-libc": {
|
|
||||||
"builtin": {
|
|
||||||
"child_process.spawnSync": true,
|
|
||||||
"fs.readdirSync": true,
|
|
||||||
"os.platform": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"process.env": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"detective": {
|
"detective": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"acorn-node": true,
|
"acorn-node": true,
|
||||||
@ -1670,10 +1667,7 @@
|
|||||||
"es-abstract": {
|
"es-abstract": {
|
||||||
"globals": {
|
"globals": {
|
||||||
"AggregateError": true,
|
"AggregateError": true,
|
||||||
"Atomics": true,
|
|
||||||
"BigInt": true,
|
|
||||||
"FinalizationRegistry": true,
|
"FinalizationRegistry": true,
|
||||||
"SharedArrayBuffer": true,
|
|
||||||
"WeakRef": true
|
"WeakRef": true
|
||||||
},
|
},
|
||||||
"packages": {
|
"packages": {
|
||||||
@ -2026,45 +2020,6 @@
|
|||||||
"process.version": true
|
"process.version": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fsevents": {
|
|
||||||
"builtin": {
|
|
||||||
"events.EventEmitter": true,
|
|
||||||
"fs.stat": true,
|
|
||||||
"path.join": true,
|
|
||||||
"util.inherits": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"__dirname": true,
|
|
||||||
"process.nextTick": true,
|
|
||||||
"process.platform": true,
|
|
||||||
"setImmediate": true
|
|
||||||
},
|
|
||||||
"native": true,
|
|
||||||
"packages": {
|
|
||||||
"node-pre-gyp": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gauge": {
|
|
||||||
"builtin": {
|
|
||||||
"util.format": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"clearInterval": true,
|
|
||||||
"process": true,
|
|
||||||
"setImmediate": true,
|
|
||||||
"setInterval": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"aproba": true,
|
|
||||||
"console-control-strings": true,
|
|
||||||
"has-unicode": true,
|
|
||||||
"object-assign": true,
|
|
||||||
"signal-exit": true,
|
|
||||||
"string-width": true,
|
|
||||||
"strip-ansi": true,
|
|
||||||
"wide-align": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"get-assigned-identifiers": {
|
"get-assigned-identifiers": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"assert.equal": true
|
"assert.equal": true
|
||||||
@ -2375,26 +2330,6 @@
|
|||||||
"through2": true
|
"through2": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gulp-terser-js": {
|
|
||||||
"builtin": {
|
|
||||||
"fs.readFileSync": true,
|
|
||||||
"path.basename": true,
|
|
||||||
"path.resolve": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"Buffer.from": true,
|
|
||||||
"console.error": true,
|
|
||||||
"console.log": true,
|
|
||||||
"process.stdout.columns": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"plugin-error": true,
|
|
||||||
"source-map": true,
|
|
||||||
"terser": true,
|
|
||||||
"through2": true,
|
|
||||||
"vinyl-sourcemaps-apply": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gulp-watch": {
|
"gulp-watch": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"path.dirname": true,
|
"path.dirname": true,
|
||||||
@ -2445,16 +2380,6 @@
|
|||||||
"process.argv": true
|
"process.argv": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"has-unicode": {
|
|
||||||
"builtin": {
|
|
||||||
"os.type": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"process.env.LANG": true,
|
|
||||||
"process.env.LC_ALL": true,
|
|
||||||
"process.env.LC_CTYPE": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"has-value": {
|
"has-value": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"get-value": true,
|
"get-value": true,
|
||||||
@ -2608,11 +2533,6 @@
|
|||||||
"is-plain-object": true
|
"is-plain-object": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"is-fullwidth-code-point": {
|
|
||||||
"packages": {
|
|
||||||
"number-is-nan": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-glob": {
|
"is-glob": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"is-extglob": true
|
"is-extglob": true
|
||||||
@ -2997,56 +2917,6 @@
|
|||||||
"setTimeout": true
|
"setTimeout": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-pre-gyp": {
|
|
||||||
"builtin": {
|
|
||||||
"events.EventEmitter": true,
|
|
||||||
"fs.existsSync": true,
|
|
||||||
"fs.readFileSync": true,
|
|
||||||
"fs.renameSync": true,
|
|
||||||
"path.dirname": true,
|
|
||||||
"path.existsSync": true,
|
|
||||||
"path.join": true,
|
|
||||||
"path.resolve": true,
|
|
||||||
"url.parse": true,
|
|
||||||
"url.resolve": true,
|
|
||||||
"util.inherits": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"__dirname": true,
|
|
||||||
"console.log": true,
|
|
||||||
"process.arch": true,
|
|
||||||
"process.cwd": true,
|
|
||||||
"process.env": true,
|
|
||||||
"process.platform": true,
|
|
||||||
"process.version.substr": true,
|
|
||||||
"process.versions": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"detect-libc": true,
|
|
||||||
"nopt": true,
|
|
||||||
"npmlog": true,
|
|
||||||
"rimraf": true,
|
|
||||||
"semver": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nopt": {
|
|
||||||
"builtin": {
|
|
||||||
"path": true,
|
|
||||||
"stream.Stream": true,
|
|
||||||
"url": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"console": true,
|
|
||||||
"process.argv": true,
|
|
||||||
"process.env.DEBUG_NOPT": true,
|
|
||||||
"process.env.NOPT_DEBUG": true,
|
|
||||||
"process.platform": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"abbrev": true,
|
|
||||||
"osenv": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"normalize-path": {
|
"normalize-path": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"remove-trailing-separator": true
|
"remove-trailing-separator": true
|
||||||
@ -3062,22 +2932,6 @@
|
|||||||
"once": true
|
"once": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"npmlog": {
|
|
||||||
"builtin": {
|
|
||||||
"events.EventEmitter": true,
|
|
||||||
"util": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"process.nextTick": true,
|
|
||||||
"process.stderr": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"are-we-there-yet": true,
|
|
||||||
"console-control-strings": true,
|
|
||||||
"gauge": true,
|
|
||||||
"set-blocking": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"object-copy": {
|
"object-copy": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"copy-descriptor": true,
|
"copy-descriptor": true,
|
||||||
@ -3090,7 +2944,6 @@
|
|||||||
"util.inspect": true
|
"util.inspect": true
|
||||||
},
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"BigInt": true,
|
|
||||||
"HTMLElement": true
|
"HTMLElement": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3145,54 +2998,6 @@
|
|||||||
"readable-stream": true
|
"readable-stream": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"os-homedir": {
|
|
||||||
"builtin": {
|
|
||||||
"os.homedir": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"process.env": true,
|
|
||||||
"process.getuid": true,
|
|
||||||
"process.platform": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"os-tmpdir": {
|
|
||||||
"globals": {
|
|
||||||
"process.env.SystemRoot": true,
|
|
||||||
"process.env.TEMP": true,
|
|
||||||
"process.env.TMP": true,
|
|
||||||
"process.env.TMPDIR": true,
|
|
||||||
"process.env.windir": true,
|
|
||||||
"process.platform": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"osenv": {
|
|
||||||
"builtin": {
|
|
||||||
"child_process.exec": true,
|
|
||||||
"path": true
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"process.env.COMPUTERNAME": true,
|
|
||||||
"process.env.ComSpec": true,
|
|
||||||
"process.env.EDITOR": true,
|
|
||||||
"process.env.HOSTNAME": true,
|
|
||||||
"process.env.PATH": true,
|
|
||||||
"process.env.PROMPT": true,
|
|
||||||
"process.env.PS1": true,
|
|
||||||
"process.env.Path": true,
|
|
||||||
"process.env.SHELL": true,
|
|
||||||
"process.env.USER": true,
|
|
||||||
"process.env.USERDOMAIN": true,
|
|
||||||
"process.env.USERNAME": true,
|
|
||||||
"process.env.VISUAL": true,
|
|
||||||
"process.env.path": true,
|
|
||||||
"process.nextTick": true,
|
|
||||||
"process.platform": true
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"os-homedir": true,
|
|
||||||
"os-tmpdir": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parent-module": {
|
"parent-module": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"callsites": true
|
"callsites": true
|
||||||
@ -3775,12 +3580,6 @@
|
|||||||
"process": true
|
"process": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"set-blocking": {
|
|
||||||
"globals": {
|
|
||||||
"process.stderr": true,
|
|
||||||
"process.stdout": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"set-value": {
|
"set-value": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"extend-shallow": true,
|
"extend-shallow": true,
|
||||||
@ -3910,6 +3709,15 @@
|
|||||||
"extend-shallow": true
|
"extend-shallow": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"squirrelly": {
|
||||||
|
"builtin": {
|
||||||
|
"fs.existsSync": true,
|
||||||
|
"fs.readFileSync": true,
|
||||||
|
"path.dirname": true,
|
||||||
|
"path.extname": true,
|
||||||
|
"path.resolve": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"static-eval": {
|
"static-eval": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"escodegen": true
|
"escodegen": true
|
||||||
@ -3974,7 +3782,6 @@
|
|||||||
},
|
},
|
||||||
"string-width": {
|
"string-width": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"code-point-at": true,
|
|
||||||
"emoji-regex": true,
|
"emoji-regex": true,
|
||||||
"is-fullwidth-code-point": true,
|
"is-fullwidth-code-point": true,
|
||||||
"strip-ansi": true
|
"strip-ansi": true
|
||||||
@ -4130,9 +3937,19 @@
|
|||||||
"Buffer.from": true,
|
"Buffer.from": true,
|
||||||
"atob": true,
|
"atob": true,
|
||||||
"btoa": true,
|
"btoa": true,
|
||||||
"define": true
|
"console.log": true,
|
||||||
|
"console.warn": true,
|
||||||
|
"define": true,
|
||||||
|
"process.argv": true,
|
||||||
|
"process.exit": true,
|
||||||
|
"process.platform": true,
|
||||||
|
"process.stderr.write": true,
|
||||||
|
"process.stdin.on": true,
|
||||||
|
"process.stdin.resume": true,
|
||||||
|
"process.stdin.setEncoding": true
|
||||||
},
|
},
|
||||||
"packages": {
|
"packages": {
|
||||||
|
"acorn": true,
|
||||||
"source-map": true
|
"source-map": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -4531,11 +4348,6 @@
|
|||||||
"isexe": true
|
"isexe": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wide-align": {
|
|
||||||
"packages": {
|
|
||||||
"string-width": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"write": {
|
"write": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"fs.createWriteStream": true,
|
"fs.createWriteStream": true,
|
||||||
|
16
package.json
16
package.json
@ -9,7 +9,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"setup": "yarn install && yarn setup:postinstall",
|
"setup": "yarn install && yarn setup:postinstall",
|
||||||
"setup:postinstall": "yarn patch-package && yarn allow-scripts",
|
"setup:postinstall": "yarn patch-package && yarn allow-scripts",
|
||||||
"start": "node development/build/index.js dev",
|
"start": "yarn build:dev dev",
|
||||||
"start:lavamoat": "yarn build dev",
|
"start:lavamoat": "yarn build dev",
|
||||||
"dist": "yarn build prod",
|
"dist": "yarn build prod",
|
||||||
"build": "lavamoat development/build/index.js",
|
"build": "lavamoat development/build/index.js",
|
||||||
@ -191,6 +191,7 @@
|
|||||||
"readable-stream": "^2.3.3",
|
"readable-stream": "^2.3.3",
|
||||||
"redux": "^4.0.5",
|
"redux": "^4.0.5",
|
||||||
"redux-thunk": "^2.3.0",
|
"redux-thunk": "^2.3.0",
|
||||||
|
"requirejs": "^2.3.6",
|
||||||
"reselect": "^3.0.1",
|
"reselect": "^3.0.1",
|
||||||
"rpc-cap": "^3.2.1",
|
"rpc-cap": "^3.2.1",
|
||||||
"safe-event-emitter": "^1.0.1",
|
"safe-event-emitter": "^1.0.1",
|
||||||
@ -204,6 +205,7 @@
|
|||||||
"web3-stream-provider": "^4.0.0"
|
"web3-stream-provider": "^4.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@babel/code-frame": "^7.12.13",
|
||||||
"@babel/core": "^7.12.1",
|
"@babel/core": "^7.12.1",
|
||||||
"@babel/eslint-parser": "^7.13.14",
|
"@babel/eslint-parser": "^7.13.14",
|
||||||
"@babel/eslint-plugin": "^7.12.1",
|
"@babel/eslint-plugin": "^7.12.1",
|
||||||
@ -216,6 +218,7 @@
|
|||||||
"@babel/preset-react": "^7.0.0",
|
"@babel/preset-react": "^7.0.0",
|
||||||
"@babel/register": "^7.5.5",
|
"@babel/register": "^7.5.5",
|
||||||
"@lavamoat/allow-scripts": "^1.0.6",
|
"@lavamoat/allow-scripts": "^1.0.6",
|
||||||
|
"@lavamoat/lavapack": "^1.0.4",
|
||||||
"@metamask/auto-changelog": "^2.1.0",
|
"@metamask/auto-changelog": "^2.1.0",
|
||||||
"@metamask/eslint-config": "^6.0.0",
|
"@metamask/eslint-config": "^6.0.0",
|
||||||
"@metamask/eslint-config-jest": "^6.0.0",
|
"@metamask/eslint-config-jest": "^6.0.0",
|
||||||
@ -237,7 +240,10 @@
|
|||||||
"@types/react": "^16.9.53",
|
"@types/react": "^16.9.53",
|
||||||
"addons-linter": "1.14.0",
|
"addons-linter": "1.14.0",
|
||||||
"babelify": "^10.0.0",
|
"babelify": "^10.0.0",
|
||||||
|
"bify-module-groups": "^1.0.0",
|
||||||
|
"bify-vinyl-gator": "^1.0.0",
|
||||||
"brfs": "^2.0.2",
|
"brfs": "^2.0.2",
|
||||||
|
"browser-pack": "^6.1.0",
|
||||||
"browserify": "^16.5.1",
|
"browserify": "^16.5.1",
|
||||||
"chalk": "^3.0.0",
|
"chalk": "^3.0.0",
|
||||||
"chromedriver": "^79.0.0",
|
"chromedriver": "^79.0.0",
|
||||||
@ -247,6 +253,7 @@
|
|||||||
"css-loader": "^2.1.1",
|
"css-loader": "^2.1.1",
|
||||||
"css-to-xpath": "^0.1.0",
|
"css-to-xpath": "^0.1.0",
|
||||||
"del": "^3.0.0",
|
"del": "^3.0.0",
|
||||||
|
"duplexify": "^4.1.1",
|
||||||
"enzyme": "^3.10.0",
|
"enzyme": "^3.10.0",
|
||||||
"enzyme-adapter-react-16": "^1.15.1",
|
"enzyme-adapter-react-16": "^1.15.1",
|
||||||
"eslint": "^7.23.0",
|
"eslint": "^7.23.0",
|
||||||
@ -273,7 +280,6 @@
|
|||||||
"gulp-rtlcss": "^1.4.0",
|
"gulp-rtlcss": "^1.4.0",
|
||||||
"gulp-sourcemaps": "^2.6.0",
|
"gulp-sourcemaps": "^2.6.0",
|
||||||
"gulp-stylelint": "^13.0.0",
|
"gulp-stylelint": "^13.0.0",
|
||||||
"gulp-terser-js": "^5.2.2",
|
|
||||||
"gulp-watch": "^5.0.1",
|
"gulp-watch": "^5.0.1",
|
||||||
"gulp-zip": "^4.0.0",
|
"gulp-zip": "^4.0.0",
|
||||||
"history": "^5.0.0",
|
"history": "^5.0.0",
|
||||||
@ -293,6 +299,7 @@
|
|||||||
"prettier": "^2.2.1",
|
"prettier": "^2.2.1",
|
||||||
"prettier-plugin-sort-json": "^0.0.1",
|
"prettier-plugin-sort-json": "^0.0.1",
|
||||||
"proxyquire": "^2.1.3",
|
"proxyquire": "^2.1.3",
|
||||||
|
"pumpify": "^2.0.1",
|
||||||
"randomcolor": "^0.5.4",
|
"randomcolor": "^0.5.4",
|
||||||
"rc": "^1.2.8",
|
"rc": "^1.2.8",
|
||||||
"react-devtools": "^4.10.1",
|
"react-devtools": "^4.10.1",
|
||||||
@ -308,13 +315,16 @@
|
|||||||
"sinon": "^9.0.0",
|
"sinon": "^9.0.0",
|
||||||
"source-map": "^0.7.2",
|
"source-map": "^0.7.2",
|
||||||
"source-map-explorer": "^2.4.2",
|
"source-map-explorer": "^2.4.2",
|
||||||
|
"squirrelly": "^8.0.8",
|
||||||
"string.prototype.matchall": "^4.0.2",
|
"string.prototype.matchall": "^4.0.2",
|
||||||
"style-loader": "^0.21.0",
|
"style-loader": "^0.21.0",
|
||||||
"stylelint": "^13.6.1",
|
"stylelint": "^13.6.1",
|
||||||
"through2": "^2.0.3",
|
"terser": "^5.7.0",
|
||||||
|
"through2": "^4.0.2",
|
||||||
"ttest": "^2.1.1",
|
"ttest": "^2.1.1",
|
||||||
"vinyl-buffer": "^1.0.1",
|
"vinyl-buffer": "^1.0.1",
|
||||||
"vinyl-source-stream": "^2.0.0",
|
"vinyl-source-stream": "^2.0.0",
|
||||||
|
"vinyl-sourcemaps-apply": "^0.2.1",
|
||||||
"watchify": "^3.11.1",
|
"watchify": "^3.11.1",
|
||||||
"webpack": "^4.41.6",
|
"webpack": "^4.41.6",
|
||||||
"yargs": "^17.0.1"
|
"yargs": "^17.0.1"
|
||||||
|
13
patches/squirrelly+8.0.8.patch
Normal file
13
patches/squirrelly+8.0.8.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/node_modules/squirrelly/dist/squirrelly.cjs.js b/node_modules/squirrelly/dist/squirrelly.cjs.js
|
||||||
|
index 7908a34..044e348 100644
|
||||||
|
--- a/node_modules/squirrelly/dist/squirrelly.cjs.js
|
||||||
|
+++ b/node_modules/squirrelly/dist/squirrelly.cjs.js
|
||||||
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
// TODO: allow '-' to trim up until newline. Use [^\S\n\r] instead of \s
|
||||||
|
// TODO: only include trimLeft polyfill if not in ES6
|
||||||
|
/* END TYPES */
|
||||||
|
-var promiseImpl = new Function('return this')().Promise;
|
||||||
|
+var promiseImpl = globalThis.Promise;
|
||||||
|
var asyncFunc = false;
|
||||||
|
try {
|
||||||
|
asyncFunc = new Function('return (async function(){}).constructor')();
|
38
patches/watchify+3.11.1.patch
Normal file
38
patches/watchify+3.11.1.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
diff --git a/node_modules/watchify/index.js b/node_modules/watchify/index.js
|
||||||
|
index 0753b9f..4fea9e1 100644
|
||||||
|
--- a/node_modules/watchify/index.js
|
||||||
|
+++ b/node_modules/watchify/index.js
|
||||||
|
@@ -58,33 +58,6 @@ function watchify (b, opts) {
|
||||||
|
if (pkgcache) pkgcache[file] = pkg;
|
||||||
|
});
|
||||||
|
|
||||||
|
- b.on('reset', reset);
|
||||||
|
- reset();
|
||||||
|
-
|
||||||
|
- function reset () {
|
||||||
|
- var time = null;
|
||||||
|
- var bytes = 0;
|
||||||
|
- b.pipeline.get('record').on('end', function () {
|
||||||
|
- time = Date.now();
|
||||||
|
- });
|
||||||
|
-
|
||||||
|
- b.pipeline.get('wrap').push(through(write, end));
|
||||||
|
- function write (buf, enc, next) {
|
||||||
|
- bytes += buf.length;
|
||||||
|
- this.push(buf);
|
||||||
|
- next();
|
||||||
|
- }
|
||||||
|
- function end () {
|
||||||
|
- var delta = Date.now() - time;
|
||||||
|
- b.emit('time', delta);
|
||||||
|
- b.emit('bytes', bytes);
|
||||||
|
- b.emit('log', bytes + ' bytes written ('
|
||||||
|
- + (delta / 1000).toFixed(2) + ' seconds)'
|
||||||
|
- );
|
||||||
|
- this.push(null);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
var fwatchers = {};
|
||||||
|
var fwatcherFiles = {};
|
||||||
|
var ignoredFiles = {};
|
@ -1,7 +1,7 @@
|
|||||||
// Should occur before anything else
|
// Should occur before anything else
|
||||||
import './globalPatch';
|
import './globalPatch';
|
||||||
import 'ses/lockdown';
|
import 'ses/lockdown';
|
||||||
import '../../app/scripts/runLockdown';
|
import '../../app/scripts/lockdown-run';
|
||||||
import { strict as assert } from 'assert'; /* eslint-disable-line import/first,import/order */
|
import { strict as assert } from 'assert'; /* eslint-disable-line import/first,import/order */
|
||||||
|
|
||||||
describe('Promise global is immutable', function () {
|
describe('Promise global is immutable', function () {
|
||||||
|
133
yarn.lock
133
yarn.lock
@ -2567,6 +2567,18 @@
|
|||||||
semver "^7.3.4"
|
semver "^7.3.4"
|
||||||
yargs "^16.2.0"
|
yargs "^16.2.0"
|
||||||
|
|
||||||
|
"@lavamoat/lavapack@^1.0.4":
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@lavamoat/lavapack/-/lavapack-1.0.4.tgz#e72d6b29fa70da8236a127c1d95cb581cda6941e"
|
||||||
|
integrity sha512-Zhcn+eJyHIS4AAmN9IIjs8WCh12Q7NpFXXz0pI3Y54uknTdx5TPlwr3ARKf0jEXDOWNok/TuK2uPld54BSG/FQ==
|
||||||
|
dependencies:
|
||||||
|
JSONStream "^1.3.5"
|
||||||
|
combine-source-map "^0.8.0"
|
||||||
|
convert-source-map "^1.7.0"
|
||||||
|
json-stable-stringify "^1.0.1"
|
||||||
|
through2 "^4.0.2"
|
||||||
|
umd "^3.0.3"
|
||||||
|
|
||||||
"@lavamoat/preinstall-always-fail@^1.0.0":
|
"@lavamoat/preinstall-always-fail@^1.0.0":
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@lavamoat/preinstall-always-fail/-/preinstall-always-fail-1.0.0.tgz#e78a6e3d9e212a4fef869ec37d4f5fb498dea373"
|
resolved "https://registry.yarnpkg.com/@lavamoat/preinstall-always-fail/-/preinstall-always-fail-1.0.0.tgz#e78a6e3d9e212a4fef869ec37d4f5fb498dea373"
|
||||||
@ -4299,7 +4311,7 @@
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
text-encoding "^0.6.4"
|
text-encoding "^0.6.4"
|
||||||
|
|
||||||
JSONStream@^1.0.3:
|
JSONStream@^1.0.3, JSONStream@^1.3.5:
|
||||||
version "1.3.5"
|
version "1.3.5"
|
||||||
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
|
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
|
||||||
integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
|
integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
|
||||||
@ -6435,6 +6447,33 @@ better-opn@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
open "^7.0.3"
|
open "^7.0.3"
|
||||||
|
|
||||||
|
bify-module-groups@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bify-module-groups/-/bify-module-groups-1.0.0.tgz#6fba8f96a8b0f9e8f0b04035650fd56249b6119d"
|
||||||
|
integrity sha512-JAAkE9L5vZoALCEqawXipQNlDn3D0nUyjt0cHgRXj0Kce2RNLQsBxA6wTmnYpQDna6g6VVyC8IUi3n02ppmbhA==
|
||||||
|
dependencies:
|
||||||
|
bify-packagedata-stream "1.0.0"
|
||||||
|
pump "^3.0.0"
|
||||||
|
through2 "^3.0.1"
|
||||||
|
|
||||||
|
bify-packagedata-stream@1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bify-packagedata-stream/-/bify-packagedata-stream-1.0.0.tgz#a6dbdcba64f9bf1c87bdc02ba9586fff7b94ccb3"
|
||||||
|
integrity sha512-ckOCceDpAOySFrt89saOShpVbP/iQbmZeWlYSxZV2e3HPTPhcd3JSudMJZhpsihQTyZut39efDo4+8aOb4vo2w==
|
||||||
|
dependencies:
|
||||||
|
module-name-from-path "git+https://git@github.com/kumavis/module-name-from-path.git"
|
||||||
|
resolve-package-path "^1.2.7"
|
||||||
|
through2 "^3.0.0"
|
||||||
|
|
||||||
|
bify-vinyl-gator@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bify-vinyl-gator/-/bify-vinyl-gator-1.0.0.tgz#aa1ce5c6a5829c75250fea6b04ec6a45c558efde"
|
||||||
|
integrity sha512-mGR/U+veqIrMWRWV1TUayNEmSIhaGDggYLwIBwDA7v2bTSHrEZcyyLs6FN3cF2cuyCzvpV1w4eH6P/So0nhCbA==
|
||||||
|
dependencies:
|
||||||
|
requirejs "^2.3.6"
|
||||||
|
through2 "^4.0.2"
|
||||||
|
vinyl "^2.2.1"
|
||||||
|
|
||||||
big-integer@1.6.36:
|
big-integer@1.6.36:
|
||||||
version "1.6.36"
|
version "1.6.36"
|
||||||
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36"
|
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36"
|
||||||
@ -6792,7 +6831,7 @@ brorand@^1.0.1, brorand@^1.0.5, brorand@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
||||||
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
||||||
|
|
||||||
browser-pack@^6.0.1:
|
browser-pack@^6.0.1, browser-pack@^6.1.0:
|
||||||
version "6.1.0"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774"
|
resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774"
|
||||||
integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==
|
integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==
|
||||||
@ -9556,6 +9595,16 @@ duplexify@^3.1.2, duplexify@^3.4.2:
|
|||||||
readable-stream "^2.0.0"
|
readable-stream "^2.0.0"
|
||||||
stream-shift "^1.0.0"
|
stream-shift "^1.0.0"
|
||||||
|
|
||||||
|
duplexify@^4.1.1:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61"
|
||||||
|
integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==
|
||||||
|
dependencies:
|
||||||
|
end-of-stream "^1.4.1"
|
||||||
|
inherits "^2.0.3"
|
||||||
|
readable-stream "^3.1.1"
|
||||||
|
stream-shift "^1.0.0"
|
||||||
|
|
||||||
each-props@^1.3.0:
|
each-props@^1.3.0:
|
||||||
version "1.3.2"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333"
|
resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333"
|
||||||
@ -13225,17 +13274,6 @@ gulp-stylelint@^13.0.0:
|
|||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
through2 "^3.0.1"
|
through2 "^3.0.1"
|
||||||
|
|
||||||
gulp-terser-js@^5.2.2:
|
|
||||||
version "5.2.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/gulp-terser-js/-/gulp-terser-js-5.2.2.tgz#3d93db9b2b83f35dfcc5b209af6b1762756eb6a3"
|
|
||||||
integrity sha512-4ull0HzTWeWjRPiGmAFmdhRcEDOG+r7aXivNHOBQzElLzMaeVKQwmCPDi2juBzUUkjAkPkKb1jHVoJN/PKTvcA==
|
|
||||||
dependencies:
|
|
||||||
plugin-error "^1.0.1"
|
|
||||||
source-map "^0.7.3"
|
|
||||||
terser "^4.6.12"
|
|
||||||
through2 "^3.0.1"
|
|
||||||
vinyl-sourcemaps-apply "^0.2.1"
|
|
||||||
|
|
||||||
gulp-watch@^5.0.1:
|
gulp-watch@^5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/gulp-watch/-/gulp-watch-5.0.1.tgz#83d378752f5bfb46da023e73c17ed1da7066215d"
|
resolved "https://registry.yarnpkg.com/gulp-watch/-/gulp-watch-5.0.1.tgz#83d378752f5bfb46da023e73c17ed1da7066215d"
|
||||||
@ -18548,6 +18586,10 @@ module-deps@^6.0.0:
|
|||||||
through2 "^2.0.0"
|
through2 "^2.0.0"
|
||||||
xtend "^4.0.0"
|
xtend "^4.0.0"
|
||||||
|
|
||||||
|
"module-name-from-path@git+https://git@github.com/kumavis/module-name-from-path.git":
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "git+https://git@github.com/kumavis/module-name-from-path.git#fd9c592663a1af6cc48b1be7b8045ea547fca79a"
|
||||||
|
|
||||||
module-not-found-error@^1.0.1:
|
module-not-found-error@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0"
|
resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0"
|
||||||
@ -21605,6 +21647,15 @@ pumpify@^1.3.3, pumpify@^1.3.5:
|
|||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
pump "^1.0.0"
|
pump "^1.0.0"
|
||||||
|
|
||||||
|
pumpify@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e"
|
||||||
|
integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==
|
||||||
|
dependencies:
|
||||||
|
duplexify "^4.1.1"
|
||||||
|
inherits "^2.0.3"
|
||||||
|
pump "^3.0.0"
|
||||||
|
|
||||||
punycode@1.3.2:
|
punycode@1.3.2:
|
||||||
version "1.3.2"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
|
||||||
@ -22354,7 +22405,7 @@ readable-stream@1.1.x, readable-stream@^1.0.33:
|
|||||||
isarray "0.0.1"
|
isarray "0.0.1"
|
||||||
string_decoder "~0.10.x"
|
string_decoder "~0.10.x"
|
||||||
|
|
||||||
"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.0.5, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
|
"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.0.5, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
||||||
@ -22919,6 +22970,11 @@ require-uncached@^1.0.2:
|
|||||||
caller-path "^0.1.0"
|
caller-path "^0.1.0"
|
||||||
resolve-from "^1.0.0"
|
resolve-from "^1.0.0"
|
||||||
|
|
||||||
|
requirejs@^2.3.6:
|
||||||
|
version "2.3.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9"
|
||||||
|
integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==
|
||||||
|
|
||||||
reselect@^3.0.1:
|
reselect@^3.0.1:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
|
resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
|
||||||
@ -22971,6 +23027,14 @@ resolve-options@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
value-or-function "^3.0.0"
|
value-or-function "^3.0.0"
|
||||||
|
|
||||||
|
resolve-package-path@^1.2.7:
|
||||||
|
version "1.2.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e"
|
||||||
|
integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==
|
||||||
|
dependencies:
|
||||||
|
path-root "^0.1.1"
|
||||||
|
resolve "^1.10.0"
|
||||||
|
|
||||||
resolve-pathname@^3.0.0:
|
resolve-pathname@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
|
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
|
||||||
@ -24188,7 +24252,7 @@ source-map-support@^0.4.15:
|
|||||||
dependencies:
|
dependencies:
|
||||||
source-map "^0.5.6"
|
source-map "^0.5.6"
|
||||||
|
|
||||||
source-map-support@^0.5.11, source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.4:
|
source-map-support@^0.5.11, source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19, source-map-support@~0.5.4:
|
||||||
version "0.5.19"
|
version "0.5.19"
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
||||||
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
||||||
@ -24206,7 +24270,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc
|
|||||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||||
|
|
||||||
source-map@0.X, source-map@^0.7.2, source-map@^0.7.3:
|
source-map@0.X, source-map@^0.7.2, source-map@^0.7.3, source-map@~0.7.2:
|
||||||
version "0.7.3"
|
version "0.7.3"
|
||||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
|
||||||
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
|
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
|
||||||
@ -24313,6 +24377,11 @@ sprintf-js@~1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||||
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
||||||
|
|
||||||
|
squirrelly@^8.0.8:
|
||||||
|
version "8.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/squirrelly/-/squirrelly-8.0.8.tgz#d6704650b2170b8040d5de5bff9fa69cb62b5e0f"
|
||||||
|
integrity sha512-7dyZJ9Gw86MmH0dYLiESsjGOTj6KG8IWToTaqBuB6LwPI+hyNb6mbQaZwrfnAQ4cMDnSWMUvX/zAYDLTSWLk/w==
|
||||||
|
|
||||||
sshpk@^1.7.0:
|
sshpk@^1.7.0:
|
||||||
version "1.16.1"
|
version "1.16.1"
|
||||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
||||||
@ -25257,7 +25326,7 @@ terser-webpack-plugin@^3.0.0:
|
|||||||
terser "^4.8.0"
|
terser "^4.8.0"
|
||||||
webpack-sources "^1.4.3"
|
webpack-sources "^1.4.3"
|
||||||
|
|
||||||
terser@^4.1.2, terser@^4.6.12, terser@^4.6.3, terser@^4.8.0:
|
terser@^4.1.2, terser@^4.6.3, terser@^4.8.0:
|
||||||
version "4.8.0"
|
version "4.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
|
resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
|
||||||
integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
|
integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
|
||||||
@ -25266,6 +25335,15 @@ terser@^4.1.2, terser@^4.6.12, terser@^4.6.3, terser@^4.8.0:
|
|||||||
source-map "~0.6.1"
|
source-map "~0.6.1"
|
||||||
source-map-support "~0.5.12"
|
source-map-support "~0.5.12"
|
||||||
|
|
||||||
|
terser@^5.7.0:
|
||||||
|
version "5.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693"
|
||||||
|
integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==
|
||||||
|
dependencies:
|
||||||
|
commander "^2.20.0"
|
||||||
|
source-map "~0.7.2"
|
||||||
|
source-map-support "~0.5.19"
|
||||||
|
|
||||||
test-exclude@^6.0.0:
|
test-exclude@^6.0.0:
|
||||||
version "6.0.0"
|
version "6.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
|
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
|
||||||
@ -25323,6 +25401,13 @@ through2@^3.0.0, through2@^3.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "2 || 3"
|
readable-stream "2 || 3"
|
||||||
|
|
||||||
|
through2@^4.0.2:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
|
||||||
|
integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
|
||||||
|
dependencies:
|
||||||
|
readable-stream "3"
|
||||||
|
|
||||||
through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4, through@~2.3.8:
|
through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4, through@~2.3.8:
|
||||||
version "2.3.8"
|
version "2.3.8"
|
||||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
@ -25868,7 +25953,7 @@ typical@^5.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/typical/-/typical-5.1.0.tgz#7116ca103caf2574985fc84fbaa8fd0ee5ea1684"
|
resolved "https://registry.yarnpkg.com/typical/-/typical-5.1.0.tgz#7116ca103caf2574985fc84fbaa8fd0ee5ea1684"
|
||||||
integrity sha512-t5Ik8UAwBal1P1XzuVE4dc+RYQZicLUGJdvqr/vdqsED7SQECgsGBylldSsfWZL7RQjxT3xhQcKHWhLaVSR6YQ==
|
integrity sha512-t5Ik8UAwBal1P1XzuVE4dc+RYQZicLUGJdvqr/vdqsED7SQECgsGBylldSsfWZL7RQjxT3xhQcKHWhLaVSR6YQ==
|
||||||
|
|
||||||
umd@^3.0.0:
|
umd@^3.0.0, umd@^3.0.3:
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf"
|
resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf"
|
||||||
integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==
|
integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==
|
||||||
@ -26566,6 +26651,18 @@ vinyl@^2.0.0, vinyl@^2.1.0, vinyl@^2.2.0:
|
|||||||
remove-trailing-separator "^1.0.1"
|
remove-trailing-separator "^1.0.1"
|
||||||
replace-ext "^1.0.0"
|
replace-ext "^1.0.0"
|
||||||
|
|
||||||
|
vinyl@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974"
|
||||||
|
integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==
|
||||||
|
dependencies:
|
||||||
|
clone "^2.1.1"
|
||||||
|
clone-buffer "^1.0.0"
|
||||||
|
clone-stats "^1.0.0"
|
||||||
|
cloneable-readable "^1.0.0"
|
||||||
|
remove-trailing-separator "^1.0.1"
|
||||||
|
replace-ext "^1.0.0"
|
||||||
|
|
||||||
vm-browserify@^1.0.0, vm-browserify@^1.0.1:
|
vm-browserify@^1.0.0, vm-browserify@^1.0.1:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||||
|
Loading…
Reference in New Issue
Block a user