diff --git a/packages/babel-compiler/babel-compiler.js b/packages/babel-compiler/babel-compiler.js
index 9824821746..1327083781 100644
--- a/packages/babel-compiler/babel-compiler.js
+++ b/packages/babel-compiler/babel-compiler.js
@@ -914,8 +914,10 @@ function isExcludedConfig(name, excludeList = [], startsWith) {
});
}
+const disableTextColors = Boolean(JSON.parse(process.env.METEOR_DISABLE_COLORS || "false"));
+
function color(text, code) {
- return `\x1b[${code}m${text}\x1b[0m`;
+ return disableTextColors ? text : `\x1b[${code}m${text}\x1b[0m`;
}
function logTranspilation({
diff --git a/tools/fs/safe-watcher-legacy.ts b/tools/fs/safe-watcher-legacy.ts
index f5461f4965..f9f108afc8 100644
--- a/tools/fs/safe-watcher-legacy.ts
+++ b/tools/fs/safe-watcher-legacy.ts
@@ -405,7 +405,7 @@ function maybeSuggestRaisingWatchLimit(error: Error & { errno: number }) {
}
export const watch = Profile(
- "safeWatcher.watch",
+ "safeWatcher.watchLegacy",
(absPath: string, callback: EntryCallback) => {
const entry = acquireWatcher(absPath, callback);
return {
diff --git a/tools/fs/safe-watcher.ts b/tools/fs/safe-watcher.ts
index fbb7d432f2..3e9bda0ab4 100644
--- a/tools/fs/safe-watcher.ts
+++ b/tools/fs/safe-watcher.ts
@@ -375,17 +375,23 @@ function startNewEntry(absPath: string): Entry {
* This registers the callback on the internally managed entry and
* ensures that a Parcel watcher is subscribed to a covering directory.
*/
-export const watch = Profile(
- "safeWatcher.watch",
+export function watch (absPath: string, callback: ChangeCallback): SafeWatcher {
+ // @ts-ignore
+ if (!global.modernWatcher) {
+ // @ts-ignore
+ return watchLegacy(absPath, callback);
+ }
+ // @ts-ignore
+ return watchModern(absPath, callback);
+};
+
+const watchModern =
+ Profile(
+ "safeWatcher.watchModern",
(
absPath: string,
callback: ChangeCallback
): SafeWatcher => {
- // @ts-ignore
- if (!global.modernWatcher) {
- // @ts-ignore
- return watchLegacy(absPath, callback);
- }
absPath = toPosixPath(absPath);
// If the path should be ignored, immediately return a noop SafeWatcher.
diff --git a/tools/tests/apps/modern/.gitignore b/tools/tests/apps/modern/.gitignore
new file mode 100644
index 0000000000..40b878db5b
--- /dev/null
+++ b/tools/tests/apps/modern/.gitignore
@@ -0,0 +1 @@
+node_modules/
\ No newline at end of file
diff --git a/tools/tests/apps/modern/.meteor/.finished-upgraders b/tools/tests/apps/modern/.meteor/.finished-upgraders
new file mode 100644
index 0000000000..c07b6ff75a
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/.finished-upgraders
@@ -0,0 +1,19 @@
+# This file contains information which helps Meteor properly upgrade your
+# app when you run 'meteor update'. You should check it into version control
+# with your project.
+
+notices-for-0.9.0
+notices-for-0.9.1
+0.9.4-platform-file
+notices-for-facebook-graph-api-2
+1.2.0-standard-minifiers-package
+1.2.0-meteor-platform-split
+1.2.0-cordova-changes
+1.2.0-breaking-changes
+1.3.0-split-minifiers-package
+1.4.0-remove-old-dev-bundle-link
+1.4.1-add-shell-server-package
+1.4.3-split-account-service-packages
+1.5-add-dynamic-import-package
+1.7-split-underscore-from-meteor-base
+1.8.3-split-jquery-from-blaze
diff --git a/tools/tests/apps/modern/.meteor/.gitignore b/tools/tests/apps/modern/.meteor/.gitignore
new file mode 100644
index 0000000000..4083037423
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/.gitignore
@@ -0,0 +1 @@
+local
diff --git a/tools/tests/apps/modern/.meteor/.id b/tools/tests/apps/modern/.meteor/.id
new file mode 100644
index 0000000000..b92c6c71e9
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/.id
@@ -0,0 +1,7 @@
+# This file contains a token that is unique to your project.
+# Check it into your repository along with the rest of this directory.
+# It can be used for purposes such as:
+# - ensuring you don't accidentally deploy one app on top of another
+# - providing package authors with aggregated statistics
+
+xh4qomttjyd.znxg6je45aan
diff --git a/tools/tests/apps/modern/.meteor/packages b/tools/tests/apps/modern/.meteor/packages
new file mode 100644
index 0000000000..341bbfc93a
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/packages
@@ -0,0 +1,15 @@
+# Meteor packages used by this project, one per line.
+# Check this file (and the other files in this directory) into your repository.
+#
+# 'meteor add' and 'meteor remove' will edit this file for you,
+# but you can also edit it by hand.
+
+meteor # Shared foundation for all Meteor packages
+static-html # Define static page content in .html files
+standard-minifier-css # CSS minifier run for production mode
+standard-minifier-js # JS minifier run for production mode
+es5-shim # ECMAScript 5 compatibility for older browsers
+ecmascript # Enable ECMAScript2015+ syntax in app code
+shell-server # Server-side component of the `meteor shell` command
+webapp # Serves a Meteor app over HTTP
+server-render # Support for server-side rendering
diff --git a/tools/tests/apps/modern/.meteor/platforms b/tools/tests/apps/modern/.meteor/platforms
new file mode 100644
index 0000000000..efeba1b50c
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/platforms
@@ -0,0 +1,2 @@
+server
+browser
diff --git a/tools/tests/apps/modern/.meteor/release b/tools/tests/apps/modern/.meteor/release
new file mode 100644
index 0000000000..621e94f0ec
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/release
@@ -0,0 +1 @@
+none
diff --git a/tools/tests/apps/modern/.meteor/versions b/tools/tests/apps/modern/.meteor/versions
new file mode 100644
index 0000000000..91b9af05b0
--- /dev/null
+++ b/tools/tests/apps/modern/.meteor/versions
@@ -0,0 +1,39 @@
+babel-compiler@7.2.4
+babel-runtime@1.3.0
+base64@1.0.11
+blaze-tools@1.0.10
+boilerplate-generator@1.6.0
+caching-compiler@1.2.1
+caching-html-compiler@1.1.3
+dynamic-import@0.5.1
+ecmascript@0.12.4
+ecmascript-runtime@0.7.0
+ecmascript-runtime-client@0.8.0
+ecmascript-runtime-server@0.7.1
+ejson@1.1.0
+es5-shim@4.8.0
+fetch@0.1.0
+html-tools@1.0.11
+htmljs@1.0.11
+inter-process-messaging@0.1.0
+logging@1.1.20
+meteor@1.9.3
+minifier-css@1.4.1
+minifier-js@2.4.0
+modern-browsers@0.1.4-beta181.16
+modules@0.13.0
+modules-runtime@0.10.3
+promise@0.11.2
+random@1.1.0
+routepolicy@1.1.0
+server-render@0.3.1
+shell-server@0.4.0
+spacebars-compiler@1.1.3
+standard-minifier-css@1.5.2
+standard-minifier-js@2.4.0
+static-html@1.2.2
+templating-tools@1.1.2
+tracker@1.2.1
+underscore@1.0.11
+webapp@1.7.3-beta181.16
+webapp-hashing@1.0.9
diff --git a/tools/tests/apps/modern/.swcrc b/tools/tests/apps/modern/.swcrc
new file mode 100644
index 0000000000..e859928b67
--- /dev/null
+++ b/tools/tests/apps/modern/.swcrc
@@ -0,0 +1,8 @@
+{
+ "jsc": {
+ "baseUrl": "./",
+ "paths": {
+ "@swcAlias/*": ["swcAlias/*"]
+ }
+ }
+}
diff --git a/tools/tests/apps/modern/client/main.css b/tools/tests/apps/modern/client/main.css
new file mode 100644
index 0000000000..7f354f0fa7
--- /dev/null
+++ b/tools/tests/apps/modern/client/main.css
@@ -0,0 +1,4 @@
+body {
+ padding: 10px;
+ font-family: sans-serif;
+}
diff --git a/tools/tests/apps/modern/client/main.html b/tools/tests/apps/modern/client/main.html
new file mode 100644
index 0000000000..19789db4de
--- /dev/null
+++ b/tools/tests/apps/modern/client/main.html
@@ -0,0 +1,21 @@
+
+ Minimal Meteor app
+
+
+
+ Minimal Meteor app
+
+ This Meteor app uses as few Meteor packages as possible, to keep the
+ client JavaScript bundle as small as possible.
+
+
+
+
+ Learn Meteor!
+
+
diff --git a/tools/tests/apps/modern/client/main.js b/tools/tests/apps/modern/client/main.js
new file mode 100644
index 0000000000..ce4d5b3750
--- /dev/null
+++ b/tools/tests/apps/modern/client/main.js
@@ -0,0 +1 @@
+Meteor.startup(() => {});
diff --git a/tools/tests/apps/modern/package-lock.json b/tools/tests/apps/modern/package-lock.json
new file mode 100644
index 0000000000..b21affb1c2
--- /dev/null
+++ b/tools/tests/apps/modern/package-lock.json
@@ -0,0 +1,1119 @@
+{
+ "name": "modern",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz",
+ "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==",
+ "requires": {
+ "regenerator-runtime": "^0.14.0"
+ }
+ },
+ "@types/mime-types": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz",
+ "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM="
+ },
+ "agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g=="
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "extract-zip": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
+ "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
+ "requires": {
+ "concat-stream": "^1.6.2",
+ "debug": "^2.6.9",
+ "mkdirp": "^0.5.4",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "requires": {
+ "agent-base": "5",
+ "debug": "4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "meteor-node-stubs": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.9.tgz",
+ "integrity": "sha512-EKRezc1/PblYtYiK4BOT3h5geWDo9AFBBSYNamPNh8AC5msUbVCcg8kekzAa7r7JPzBX8nZWaXEQVar4t8q/Hg==",
+ "requires": {
+ "@meteorjs/crypto-browserify": "^3.12.1",
+ "assert": "^2.1.0",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^5.7.1",
+ "console-browserify": "^1.2.0",
+ "constants-browserify": "^1.0.0",
+ "domain-browser": "^4.23.0",
+ "elliptic": "^6.5.4",
+ "events": "^3.3.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "^1.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.4.1",
+ "querystring-es3": "^0.2.1",
+ "readable-stream": "^3.6.2",
+ "stream-browserify": "^3.0.0",
+ "stream-http": "^3.2.0",
+ "string_decoder": "^1.3.0",
+ "timers-browserify": "^2.0.12",
+ "tty-browserify": "0.0.1",
+ "url": "^0.11.3",
+ "util": "^0.12.5",
+ "vm-browserify": "^1.1.2"
+ },
+ "dependencies": {
+ "@meteorjs/crypto-browserify": {
+ "version": "3.12.1",
+ "bundled": true,
+ "requires": {
+ "browserify-cipher": "^1.0.1",
+ "browserify-sign": "^4.2.3",
+ "create-ecdh": "^4.0.4",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "diffie-hellman": "^5.0.3",
+ "hash-base": "~3.0.4",
+ "inherits": "^2.0.4",
+ "pbkdf2": "^3.1.2",
+ "public-encrypt": "^4.0.3",
+ "randombytes": "^2.1.0",
+ "randomfill": "^1.0.4"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "bundled": true
+ }
+ }
+ },
+ "assert": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "bundled": true
+ },
+ "bn.js": {
+ "version": "5.2.0",
+ "bundled": true
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.2.3",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^5.2.1",
+ "browserify-rsa": "^4.1.0",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.5",
+ "hash-base": "~3.0",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.7",
+ "readable-stream": "^2.3.8",
+ "safe-buffer": "^5.2.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "5.2.1",
+ "bundled": true
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "bundled": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "bundled": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "call-bind": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "bundled": true
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "bundled": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "define-data-property": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "bundled": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "4.23.0",
+ "bundled": true
+ },
+ "elliptic": {
+ "version": "6.5.5",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "bundled": true
+ }
+ }
+ },
+ "events": {
+ "version": "3.3.0",
+ "bundled": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "bundled": true,
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ }
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "has-property-descriptors": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "get-intrinsic": "^1.2.2"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hasown": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "function-bind": "^1.1.2"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "bundled": true
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true
+ },
+ "is-arguments": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "bundled": true
+ },
+ "is-generator-function": {
+ "version": "1.0.10",
+ "bundled": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-nan": {
+ "version": "1.3.2",
+ "bundled": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.12",
+ "bundled": true,
+ "requires": {
+ "which-typed-array": "^1.1.11"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "bundled": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "bundled": true
+ }
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "object-inspect": {
+ "version": "1.13.1",
+ "bundled": true
+ },
+ "object-is": {
+ "version": "1.1.5",
+ "bundled": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "bundled": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "bundled": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "bundled": true
+ },
+ "parse-asn1": {
+ "version": "5.1.7",
+ "bundled": true,
+ "requires": {
+ "asn1.js": "^4.10.1",
+ "browserify-aes": "^1.2.0",
+ "evp_bytestokey": "^1.0.3",
+ "hash-base": "~3.0",
+ "pbkdf2": "^3.1.2",
+ "safe-buffer": "^5.2.1"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "path-browserify": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "pbkdf2": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "bundled": true
+ }
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "qs": {
+ "version": "6.11.2",
+ "bundled": true,
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "bundled": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "bundled": true
+ },
+ "set-function-length": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "stream-browserify": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "~2.0.4",
+ "readable-stream": "^3.5.0"
+ }
+ },
+ "stream-http": {
+ "version": "3.2.0",
+ "bundled": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.12",
+ "bundled": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "url": {
+ "version": "0.11.3",
+ "bundled": true,
+ "requires": {
+ "punycode": "^1.4.1",
+ "qs": "^6.11.2"
+ }
+ },
+ "util": {
+ "version": "0.12.5",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "which-typed-array": {
+ "version": "1.1.13",
+ "bundled": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.4",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "mime": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
+ },
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "puppeteer": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz",
+ "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==",
+ "requires": {
+ "@types/mime-types": "^2.1.0",
+ "debug": "^4.1.0",
+ "extract-zip": "^1.6.6",
+ "https-proxy-agent": "^4.0.0",
+ "mime": "^2.0.3",
+ "mime-types": "^2.1.25",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^2.6.1",
+ "ws": "^6.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ }
+ }
+}
diff --git a/tools/tests/apps/modern/package.json b/tools/tests/apps/modern/package.json
new file mode 100644
index 0000000000..a7fe68949f
--- /dev/null
+++ b/tools/tests/apps/modern/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "modern",
+ "private": true,
+ "scripts": {
+ "start": "meteor run"
+ },
+ "dependencies": {
+ "@babel/runtime": "^7.23.5",
+ "meteor-node-stubs": "^1.2.12",
+ "react": "^18.3.1"
+ },
+ "meteor": {
+ "mainModule": {
+ "client": "client/main.js",
+ "server": "server/main.js"
+ },
+ "testModule": "tests/main.js"
+ }
+}
diff --git a/tools/tests/apps/modern/server/alias.js b/tools/tests/apps/modern/server/alias.js
new file mode 100644
index 0000000000..acf0a92d2a
--- /dev/null
+++ b/tools/tests/apps/modern/server/alias.js
@@ -0,0 +1 @@
+import '@swcAlias/main';
diff --git a/tools/tests/apps/modern/server/custom-component.js b/tools/tests/apps/modern/server/custom-component.js
new file mode 100644
index 0000000000..ac52d8c243
--- /dev/null
+++ b/tools/tests/apps/modern/server/custom-component.js
@@ -0,0 +1,5 @@
+import React from 'react';
+
+console.log('custom-component.js');
+
+export default <>>;
diff --git a/tools/tests/apps/modern/server/javascript-component.jsx b/tools/tests/apps/modern/server/javascript-component.jsx
new file mode 100644
index 0000000000..6b3976b857
--- /dev/null
+++ b/tools/tests/apps/modern/server/javascript-component.jsx
@@ -0,0 +1,5 @@
+import React from 'react';
+
+console.log('javascript-component.jsx');
+
+export default <>>;
diff --git a/tools/tests/apps/modern/server/javascript.js b/tools/tests/apps/modern/server/javascript.js
new file mode 100644
index 0000000000..23fb2816d6
--- /dev/null
+++ b/tools/tests/apps/modern/server/javascript.js
@@ -0,0 +1,3 @@
+console.log('javascript.js');
+
+export default {};
diff --git a/tools/tests/apps/modern/server/main.js b/tools/tests/apps/modern/server/main.js
new file mode 100644
index 0000000000..12ffcf4012
--- /dev/null
+++ b/tools/tests/apps/modern/server/main.js
@@ -0,0 +1,10 @@
+import { Meteor } from "meteor/meteor";
+
+Meteor.startup(() => {});
+
+try {
+ const errorStack = new Error().stack;
+ console.log(errorStack);
+} catch (e) {
+ console.log(e);
+}
diff --git a/tools/tests/apps/modern/server/typescript-component.tsx b/tools/tests/apps/modern/server/typescript-component.tsx
new file mode 100644
index 0000000000..9535cc475d
--- /dev/null
+++ b/tools/tests/apps/modern/server/typescript-component.tsx
@@ -0,0 +1,5 @@
+import React from 'react';
+
+console.log('typescript-component.tsx');
+
+export default <>>;
diff --git a/tools/tests/apps/modern/server/typescript.ts b/tools/tests/apps/modern/server/typescript.ts
new file mode 100644
index 0000000000..05ed0e8932
--- /dev/null
+++ b/tools/tests/apps/modern/server/typescript.ts
@@ -0,0 +1,3 @@
+console.log('typescript.ts');
+
+export default {};
diff --git a/tools/tests/apps/modern/swcAlias/main.js b/tools/tests/apps/modern/swcAlias/main.js
new file mode 100644
index 0000000000..65ebe218b3
--- /dev/null
+++ b/tools/tests/apps/modern/swcAlias/main.js
@@ -0,0 +1 @@
+console.log('swcAlias/main.js alias resolved');
diff --git a/tools/tests/apps/modern/tests/main.js b/tools/tests/apps/modern/tests/main.js
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tools/tests/modern.js b/tools/tests/modern.js
new file mode 100644
index 0000000000..946215ec84
--- /dev/null
+++ b/tools/tests/modern.js
@@ -0,0 +1,359 @@
+var selftest = require('../tool-testing/selftest.js');
+var Sandbox = selftest.Sandbox;
+
+// No need for a high value since the asserts already wait long enough to pass tests
+const waitToStart = 5;
+
+async function writeModernConfig(s, modernConfig) {
+ const json = JSON.parse(s.read("package.json"));
+
+ json.meteor = {
+ ...json.meteor,
+ modern: modernConfig,
+ };
+
+ s.write("package.json", JSON.stringify(json, null, 2) + "\n");
+
+}
+
+selftest.define("modern build stack - legacy", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ s.set("METEOR_PROFILE", "0");
+
+ await writeModernConfig(s, false);
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* check legacy stack */
+ await run.match(/Babel\.compile/, false, true);
+ await run.match(/safeWatcher\.watchLegacy/, false, true);
+ await run.match(/_findSources for web\.browser.legacy/, false, true);
+
+ /* check debug stack */
+ await run.match(/server\/main\.js:6:22/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ s.set("METEOR_PROFILE", "0");
+
+ await writeModernConfig(s, true);
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* check modern stack */
+ await run.match(/SWC\.compile/, false, true);
+ await run.match(/safeWatcher\.watchModern/, false, true);
+ await run.match(/_findSources for web\.browser/, false, true);
+
+ run.forbid(/Babel\.compile/, false, true);
+ run.forbid(/_findSources for web\.browser\.legacy/, false, true);
+
+ /* check debug stack */
+ await run.match(/server\/main\.js:6:22/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack - disable transpiler", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ s.set("METEOR_PROFILE", "0");
+
+ await writeModernConfig(s, { transpiler: false });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* disable transpiler */
+ run.forbid(/SWC\.compile/, false, true);
+ await run.match(/Babel\.compile/, false, true);
+
+ /* Keep rest of modern build stack */
+ await run.match(/safeWatcher\.watchModern/, false, true);
+ await run.match(/_findSources for web\.browser/, false, true);
+ run.forbid(/_findSources for web\.browser\.legacy/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack - disable watcher", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ s.set("METEOR_PROFILE", "0");
+
+ await writeModernConfig(s, { watcher: false });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* disable watcher */
+ run.forbid(/safeWatcher\.watchModern/, false, true);
+ await run.match(/safeWatcher\.watchLegacy/, false, true);
+
+ /* Keep rest of modern build stack */
+ await run.match(/SWC\.compile/, false, true);
+ await run.match(/_findSources for web\.browser/, false, true);
+ run.forbid(/_findSources for web\.browser\.legacy/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack - disable webArchOnly", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ s.set("METEOR_PROFILE", "0");
+
+ await writeModernConfig(s, { webArchOnly: false });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* disable webArchOnly */
+ await run.match(/_findSources for web\.browser/, false, true);
+ await run.match(/_findSources for web\.browser\.legacy/, false, true);
+
+ /* Keep rest of modern build stack */
+ await run.match(/safeWatcher\.watchModern/, false, true);
+ await run.match(/SWC\.compile/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack - transpiler boolean-like options", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ process.env.METEOR_DISABLE_COLORS = true;
+
+ await writeModernConfig(s, {
+ transpiler: {
+ verbose: true,
+ },
+ });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* check transpiler options */
+ await run.match(/\[Transpiler] Used SWC.*\(app\)/, false, true);
+ await run.match(/\[Transpiler] Used SWC.*\(package\)/, false, true);
+
+ await writeModernConfig(s, {
+ transpiler: {
+ verbose: true,
+ excludeApp: true,
+ },
+ });
+ await run.match(/\[Transpiler] Used Babel.*\(app\)/, false, true);
+
+ await writeModernConfig(s, {
+ transpiler: {
+ verbose: true,
+ excludePackages: true,
+ },
+ });
+ await run.match(/\[Transpiler] Used Babel.*\(package\)/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack - transpiler string-like options", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ process.env.METEOR_DISABLE_COLORS = true;
+
+ await writeModernConfig(s, {
+ transpiler: {
+ verbose: true,
+ },
+ });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* check transpiler options */
+ await run.match(/\[Transpiler] Used SWC.*\(app\)/, false, true);
+ await run.match(/\[Transpiler] Used SWC.*\(package\)/, false, true);
+
+ await writeModernConfig(s, {
+ transpiler: {
+ verbose: true,
+ excludeApp: ['main.js'],
+ },
+ });
+ await run.match(/\[Transpiler] Used Babel.*\(app\)/, false, true);
+
+ await writeModernConfig(s, {
+ transpiler: {
+ verbose: true,
+ excludePackages: ['ejson'],
+ },
+ });
+ await run.match(/\[Transpiler] Used Babel.*\(package\)/, false, true);
+
+ await run.stop();
+});
+
+async function writConfig(s, config) {
+ const json = JSON.parse(s.read("package.json"));
+
+ json.meteor = {
+ ...json.meteor,
+ ...config,
+ };
+
+ s.write("package.json", JSON.stringify(json, null, 2) + "\n");
+}
+
+async function writeSwcrcConfig(s, config) {
+ let json = JSON.parse(s.read("package.json"));
+ json = {
+ ...json,
+ ...config,
+ };
+ s.write(".swcrc", JSON.stringify(json, null, 2) + "\n");
+}
+
+selftest.define("modern build stack - transpiler custom .swcrc", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ await writConfig(s, {
+ modern: true,
+ mainModule: {
+ client: 'client/main.js',
+ server: 'server/alias.js',
+ },
+ });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ /* custom .swcrc and alias resolution */
+ await run.match(/alias resolved/, false, true);
+
+ await run.stop();
+});
+
+selftest.define("modern build stack - transpiler files", async function () {
+ const s = new Sandbox();
+ await s.init();
+
+ await s.createApp("modern", "modern");
+ await s.cd("modern");
+
+ await writConfig(s, {
+ modern: true,
+ mainModule: {
+ client: 'client/main.js',
+ server: 'server/javascript.js',
+ },
+ });
+
+ const run = s.run();
+
+ run.waitSecs(waitToStart);
+ await run.match("App running at");
+
+ await run.match(/javascript\.js/, false, true);
+
+ await writConfig(s, {
+ modern: true,
+ mainModule: {
+ client: 'client/main.js',
+ server: 'server/javascript-component.jsx',
+ },
+ });
+ await run.match(/javascript-component\.jsx/, false, true);
+
+ await writConfig(s, {
+ modern: true,
+ mainModule: {
+ client: 'client/main.js',
+ server: 'server/typescript.ts',
+ },
+ });
+ await run.match(/typescript\.ts/, false, true);
+
+ await writConfig(s, {
+ modern: true,
+ mainModule: {
+ client: 'client/main.js',
+ server: 'server/typescript-component.tsx',
+ },
+ });
+ await run.match(/typescript-component\.tsx/, false, true);
+
+ await writeSwcrcConfig(s, {
+ jsc: {
+ parser: {
+ syntax: 'typescript',
+ tsx: true,
+ jsx: true,
+ },
+ },
+ });
+ await writConfig(s, {
+ modern: true,
+ mainModule: {
+ client: 'client/main.js',
+ server: 'server/custom-component.js',
+ },
+ });
+ await run.match(/custom-component\.js/, false, true);
+
+ await run.stop();
+});
diff --git a/tools/tool-testing/run.js b/tools/tool-testing/run.js
index b15df2db70..3d05b1001d 100644
--- a/tools/tool-testing/run.js
+++ b/tools/tool-testing/run.js
@@ -184,13 +184,20 @@ export default class Run {
// may be a regular expression or a string. Consume stdout up to
// that point. If this pattern does not appear after a timeout (or
// the program exits before emitting the pattern), fail.
- match(pattern, _strict) {
+ match(pattern, _strict, fullBuffer) {
this._ensureStarted();
let timeout = this.baseTimeout + this.extraTime;
timeout *= timeoutScaleFactor;
this.extraTime = 0;
Console.simpleDebug('match', pattern);
+ if (fullBuffer) {
+ return this.stdoutMatcher.matchAsync(pattern, {
+ timeout,
+ strict: _strict,
+ matchFullBuffer: fullBuffer,
+ });
+ }
return this.stdoutMatcher.match(pattern, timeout, _strict);
}