diff --git a/.github/workflows/test-react-packages.yml b/.github/workflows/test-react-packages.yml
new file mode 100644
index 00000000..6db9f59e
--- /dev/null
+++ b/.github/workflows/test-react-packages.yml
@@ -0,0 +1,44 @@
+name: Meteor CI
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ name: Meteor react-packages tests
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Cache Meteor
+ uses: actions/cache@v4
+ with:
+ path: ~/.meteor
+ key: meteor-cache
+
+ - name: Setup Meteor
+ uses: meteorengineer/setup-meteor@v2
+ with:
+ meteor-release: '3.1.2'
+
+ - name: Prepare mtest
+ run: |
+ meteor npm i -g @zodern/mtest
+
+ - name: Install and test in react-meteor-data
+ working-directory: tests/react-meteor-data-harness
+ run: |
+ meteor npm install
+ meteor npm run test:ci
+
+ - name: Install and test in react-meteor-accounts-harness
+ working-directory: tests/react-meteor-accounts-harness
+ run: |
+ meteor npm install
+ meteor npm run test:ci
diff --git a/README.md b/README.md
index deaa328c..1e7acfd7 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,30 @@
# Meteor react-packages (npm)
+
> This is a npm-published fork of the official Meteor [`react-packages`](https://github.com/meteor/react-packages) repository.
-> This allows us leave bundling of React up to Vite, instead of relying on Meteor's bundling system. Giving a little
+> This allows us leave bundling of React up to Vite, instead of relying on Meteor's bundling system. Giving a little
> bit more flexibility in terms of configuration through Vite.
->
+>
> See [`meteor-vite`](https://github.com/JorgenVatle/meteor-vite) for more details and examples.
## Installation
+
```shell
meteor npm i @meteor-vite/react-meteor-data
```
## Usage
+
The API is exactly the same as Meteor's [`react-meteor-data`](https://github.com/meteor/react-packages/tree/master/packages/react-meteor-data) package.
Just replace your `meteor/react-meteor-data` imports with `@meteor-vite/react-meteor-data`
```tsx
-import { Meteor } from 'meteor/meteor';
-import { useTracker } from '@meteor-vite/react-meteor-data';
+import { Meteor } from "meteor/meteor";
+import { useTracker } from "@meteor-vite/react-meteor-data";
export function UserID() {
- const user = useTracker(() => Meteor.user(), []);
- return (
User ID: { user._id }
)
+ const user = useTracker(() => Meteor.user(), []);
+ return User ID: {user._id}
;
}
```
+
+To run tests for a Meteor react package, navigate to its `tests/*` app and execute `npm test`.
diff --git a/package-lock.json b/package-lock.json
index 6cf66959..f08cb72d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -22,11 +22,15 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz",
- "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
+ "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
+ "license": "MIT",
"dependencies": {
- "regenerator-runtime": "^0.13.4"
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
"node_modules/@babel/runtime-corejs3": {
@@ -38,6 +42,12 @@
"regenerator-runtime": "^0.13.4"
}
},
+ "node_modules/@babel/runtime/node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
"node_modules/@eslint/eslintrc": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz",
diff --git a/packages/react-meteor-accounts/package.json b/packages/react-meteor-accounts/package.json
index 4f38b650..236591c1 100644
--- a/packages/react-meteor-accounts/package.json
+++ b/packages/react-meteor-accounts/package.json
@@ -2,16 +2,5 @@
"name": "meteor-react-accounts",
"scripts": {
"make-types": "npx typescript react-accounts.tsx --jsx preserve --declaration --emitDeclarationOnly --esModuleInterop --outDir types --strict"
- },
- "devDependencies": {
- "@testing-library/react": "^10.0.2",
- "@testing-library/react-hooks": "^7.0.2",
- "@tsconfig/recommended": "^1.0.1",
- "@types/meteor": "^1.4.42",
- "@types/react": "^16.9.34",
- "react": "16.13.1",
- "react-dom": "16.13.1",
- "react-test-renderer": "16.13.1",
- "typescript": "^4.0.3"
}
}
diff --git a/packages/react-meteor-accounts/react-accounts.tests.tsx b/packages/react-meteor-accounts/react-accounts.tests.tsx
index 834c8798..f85213f4 100644
--- a/packages/react-meteor-accounts/react-accounts.tests.tsx
+++ b/packages/react-meteor-accounts/react-accounts.tests.tsx
@@ -22,8 +22,8 @@ import {
// Prepare method for clearing DB (doesn't need to be isomorphic).
if (Meteor.isServer) {
Meteor.methods({
- reset() {
- Meteor.users.remove({});
+ async reset() {
+ await Meteor.users.removeAsync({});
},
});
}
@@ -54,19 +54,9 @@ if (Meteor.isClient) {
// common test arrangements
async function beforeEach() {
// reset DB; must complete before creation to avoid potential overlap
- await new Promise((resolve, reject) => {
- Meteor.call("reset", (error, result) => {
- if (error) reject(error);
- else resolve(result);
- });
- });
+ await Meteor.callAsync("reset");
// prepare sample user
- await new Promise((resolve, reject) => {
- Accounts.createUser({ username, password }, (error) => {
- if (error) reject(error);
- else resolve();
- });
- });
+ await Accounts.createUserAsync({ username, password });
// logout since `createUser` auto-logs-in
await logout();
}
diff --git a/packages/react-meteor-data/.npm/package/npm-shrinkwrap.json b/packages/react-meteor-data/.npm/package/npm-shrinkwrap.json
index 8dffe844..b0da3142 100644
--- a/packages/react-meteor-data/.npm/package/npm-shrinkwrap.json
+++ b/packages/react-meteor-data/.npm/package/npm-shrinkwrap.json
@@ -5,11 +5,6 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
- },
- "lodash.remove": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.remove/-/lodash.remove-4.7.0.tgz",
- "integrity": "sha512-GnwkSsEXGXirSxh3YI+jc/qvptE2DV8ZjA4liK0NT1MJ3mNDMFhX3bY+4Wr8onlNItYuPp7/4u19Fi55mvzkTw=="
}
}
}
diff --git a/packages/react-meteor-data/.versions b/packages/react-meteor-data/.versions
index d259338c..9acbb7d7 100644
--- a/packages/react-meteor-data/.versions
+++ b/packages/react-meteor-data/.versions
@@ -1,5 +1,5 @@
-allow-deny@2.0.0
-babel-compiler@7.11.1
+allow-deny@2.1.0
+babel-compiler@7.11.3
babel-runtime@1.5.2
base64@1.0.13
binary-heap@1.0.12
@@ -9,50 +9,52 @@ callback-hook@1.6.0
check@1.4.4
core-runtime@1.0.0
ddp@1.4.2
-ddp-client@3.0.2
+ddp-client@3.1.0
ddp-common@1.4.4
-ddp-server@3.0.2
+ddp-server@3.1.2
diff-sequence@1.1.3
dynamic-import@0.7.4
-ecmascript@0.16.9
+ecmascript@0.16.10
ecmascript-runtime@0.8.3
-ecmascript-runtime-client@0.12.2
+ecmascript-runtime-client@0.12.3
ecmascript-runtime-server@0.11.1
ejson@1.1.4
facts-base@1.0.2
-fetch@0.1.5
+fetch@0.1.6
geojson-utils@1.0.12
htmljs@2.0.1
id-map@1.2.0
inter-process-messaging@0.1.2
-local-test:react-meteor-data@3.0.3
-logging@1.3.5
-meteor@2.0.1
-minimongo@2.0.1
-modern-browsers@0.1.11
-modules@0.20.2
+jquery@3.0.2
+local-test:react-meteor-data@4.0.0
+logging@1.3.6
+meteor@2.1.0
+minimongo@2.0.2
+modern-browsers@0.2.1
+modules@0.20.3
modules-runtime@0.13.2
-mongo@2.0.2
-mongo-decimal@0.1.4-beta300.7
+mongo@2.1.1
+mongo-decimal@0.2.0
mongo-dev-server@1.1.1
mongo-id@1.0.9
-npm-mongo@4.17.4
+npm-mongo@6.10.2
observe-sequence@2.0.0
ordered-dict@1.2.0
promise@1.0.0
random@1.2.2
react-fast-refresh@0.2.9
-react-meteor-data@3.0.3
+react-meteor-data@4.0.0
reactive-dict@1.3.2
reactive-var@1.0.13
reload@1.3.2
retry@1.1.1
routepolicy@1.1.2
-socket-stream-client@0.5.3
-test-helpers@2.0.1
-tinytest@1.3.0
+socket-stream-client@0.6.0
+test-helpers@2.0.3
+tinytest@1.3.1
tracker@1.3.4
-typescript@5.4.3
+typescript@5.6.3
underscore@1.6.4
-webapp@2.0.3
+webapp@2.0.6
webapp-hashing@1.1.2
+zodern:types@1.0.13
diff --git a/packages/react-meteor-data/index.js b/packages/react-meteor-data/index.ts
similarity index 88%
rename from packages/react-meteor-data/index.js
rename to packages/react-meteor-data/index.ts
index fe6e73ef..db683db7 100644
--- a/packages/react-meteor-data/index.js
+++ b/packages/react-meteor-data/index.ts
@@ -9,6 +9,6 @@ if (Meteor.isDevelopment) {
}
export { useTracker } from './useTracker';
-export { withTracker } from './withTracker.tsx';
+export { withTracker } from './withTracker';
export { useFind } from './useFind';
export { useSubscribe } from './useSubscribe';
\ No newline at end of file
diff --git a/packages/react-meteor-data/package-lock.json b/packages/react-meteor-data/package-lock.json
index ca63882a..5be2c825 100644
--- a/packages/react-meteor-data/package-lock.json
+++ b/packages/react-meteor-data/package-lock.json
@@ -8,13 +8,9 @@
"name": "@meteor-vite/react-meteor-data",
"version": "1.1.0",
"dependencies": {
- "fast-deep-equal": "^3.1.3",
- "lodash.isequal": "^4.5.0",
- "lodash.remove": "^4.7.0"
+ "fast-equals": "^5.2.2"
},
"devDependencies": {
- "@types/lodash.isequal": "^4.5.4",
- "@types/lodash.remove": "^4.7.5",
"@types/meteor": "^1.4.76",
"@types/react": "^17.0.16",
"picocolors": "^1.1.1",
@@ -707,30 +703,6 @@
"@types/sizzle": "*"
}
},
- "node_modules/@types/lodash": {
- "version": "4.14.202",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
- "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
- "dev": true
- },
- "node_modules/@types/lodash.isequal": {
- "version": "4.5.8",
- "resolved": "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.8.tgz",
- "integrity": "sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==",
- "dev": true,
- "dependencies": {
- "@types/lodash": "*"
- }
- },
- "node_modules/@types/lodash.remove": {
- "version": "4.7.9",
- "resolved": "https://registry.npmjs.org/@types/lodash.remove/-/lodash.remove-4.7.9.tgz",
- "integrity": "sha512-XmhQAGBgjDwQ4qX3/2bzukBJzS35Xk+FoggEHCHoAemvefm1AnSq+4PjxrZSTmxrly8I4WAqViTY8i1Cn7K83w==",
- "dev": true,
- "dependencies": {
- "@types/lodash": "*"
- }
- },
"node_modules/@types/meteor": {
"version": "1.4.87",
"resolved": "https://registry.npmjs.org/@types/meteor/-/meteor-1.4.87.tgz",
@@ -1092,10 +1064,13 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ "node_modules/fast-equals": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz",
+ "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
"node_modules/fast-glob": {
"version": "3.3.2",
@@ -1389,16 +1364,6 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
- "node_modules/lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
- },
- "node_modules/lodash.remove": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.remove/-/lodash.remove-4.7.0.tgz",
- "integrity": "sha512-GnwkSsEXGXirSxh3YI+jc/qvptE2DV8ZjA4liK0NT1MJ3mNDMFhX3bY+4Wr8onlNItYuPp7/4u19Fi55mvzkTw=="
- },
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
diff --git a/packages/react-meteor-data/package-types.json b/packages/react-meteor-data/package-types.json
new file mode 100644
index 00000000..49fdeff6
--- /dev/null
+++ b/packages/react-meteor-data/package-types.json
@@ -0,0 +1,6 @@
+{
+ "typesEntry": "react-meteor-data.d.ts",
+ "modules": {
+ "suspense": "./suspense/react-meteor-data.d.ts"
+ }
+}
\ No newline at end of file
diff --git a/packages/react-meteor-data/package.js b/packages/react-meteor-data/package.js
index 18b011fd..0f4e0b11 100644
--- a/packages/react-meteor-data/package.js
+++ b/packages/react-meteor-data/package.js
@@ -3,14 +3,13 @@
Package.describe({
name: 'react-meteor-data',
summary: 'React hook for reactively tracking Meteor data',
- version: '3.0.3',
+ version: '4.0.0',
documentation: 'README.md',
git: 'https://github.com/meteor/react-packages'
})
Npm.depends({
- 'lodash.isequal': '4.5.0',
- 'lodash.remove': '4.7.0'
+ 'fast-equals': '5.2.2'
})
Package.onUse((api) => {
@@ -18,15 +17,16 @@ Package.onUse((api) => {
api.use('tracker')
api.use('ecmascript')
api.use('typescript')
- api.addAssets('react-meteor-data.d.ts', 'server')
- api.addAssets('suspense/react-meteor-data.d.ts', 'server')
+ api.use('zodern:types@1.0.13', 'server')
- api.mainModule('index.js', ['client', 'server'], { lazy: true })
+ api.mainModule('index.ts', ['client', 'server'], { lazy: true })
})
Package.onTest((api) => {
api.use(['ecmascript', 'typescript', 'reactive-dict', 'reactive-var', 'tracker', 'tinytest', 'underscore', 'mongo'])
api.use('test-helpers')
api.use('react-meteor-data')
- api.mainModule('tests.js')
+ api.use('jquery@3.0.0', 'client');
+
+ api.mainModule('tests.js');
})
diff --git a/packages/react-meteor-data/package.json b/packages/react-meteor-data/package.json
index 182ce3a6..2e9514fd 100644
--- a/packages/react-meteor-data/package.json
+++ b/packages/react-meteor-data/package.json
@@ -36,17 +36,13 @@
},
"types": "react-meteor-data.d.ts",
"dependencies": {
- "fast-deep-equal": "^3.1.3",
- "lodash.isequal": "^4.5.0",
- "lodash.remove": "^4.7.0"
+ "fast-equals": "^5.2.2"
},
"peerDependencies": {
"react": ">=18",
"react-dom": ">=18"
},
"devDependencies": {
- "@types/lodash.isequal": "^4.5.4",
- "@types/lodash.remove": "^4.7.5",
"@types/meteor": "^1.4.76",
"@types/react": "^17.0.16",
"picocolors": "^1.1.1",
diff --git a/packages/react-meteor-data/suspense/useFind.tests.js b/packages/react-meteor-data/suspense/useFind.tests.js
new file mode 100644
index 00000000..92995ff6
--- /dev/null
+++ b/packages/react-meteor-data/suspense/useFind.tests.js
@@ -0,0 +1,201 @@
+/* global Meteor, Tinytest */
+import React, { Suspense } from 'react';
+import { renderToString } from 'react-dom/server';
+import { Mongo } from 'meteor/mongo';
+import { renderHook } from '@testing-library/react';
+import { useFindSuspenseClient, useFindSuspenseServer } from './useFind';
+
+/**
+ * Test for useFindSuspenseClient
+ */
+if (Meteor.isClient) {
+ Tinytest.addAsync(
+ 'suspense/useFindSuspenseClient - Verify reference stability between rerenders',
+ async (test) => {
+ const TestDocs = new Mongo.Collection(null);
+
+ TestDocs.insert({ id: 0, updated: 0 });
+ TestDocs.insert({ id: 1, updated: 0 });
+
+ const { result, rerender } = renderHook(() =>
+ useFindSuspenseClient(TestDocs, [{}])
+ );
+
+ test.equal(
+ result.current.length,
+ 2,
+ '2 items should have rendered, only 2, no more.'
+ );
+
+ await TestDocs.updateAsync({ id: 1 }, { $inc: { updated: 1 } });
+
+ rerender();
+
+ test.equal(
+ result.current.length,
+ 2,
+ '2 items should have rendered - only 1 of the items should have been matched by the reconciler after a single change.'
+ );
+ }
+ );
+
+ Tinytest.addAsync(
+ 'suspense/useFindSuspenseClient - null return is allowed',
+ async (test) => {
+ const TestDocs = new Mongo.Collection(null);
+
+ TestDocs.insertAsync({ id: 0, updated: 0 });
+
+ const { result } = renderHook(() =>
+ useFindSuspenseClient(TestDocs, null)
+ );
+
+ test.isNull(
+ result.current,
+ 'Return value should be null when the factory returns null'
+ );
+ }
+ );
+}
+
+/**
+ * Test for useFindSuspenseServer
+ */
+if (Meteor.isServer) {
+ Tinytest.addAsync(
+ 'suspense/useFindSuspenseServer - Data query validation',
+ async function (test) {
+ const TestDocs = new Mongo.Collection(null);
+
+ TestDocs.insertAsync({ id: 0, updated: 0 });
+
+ let returnValue;
+
+ const Test = () => {
+ returnValue = useFindSuspenseServer(TestDocs, [{}]);
+
+ return null;
+ };
+ const TestSuspense = () => {
+ return (
+ Loading...}>
+
+
+ );
+ };
+
+ // first return promise
+ renderToString();
+ test.isUndefined(
+ returnValue,
+ 'Return value should be undefined as find promise unresolved'
+ );
+ // wait promise
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ // return data
+ renderToString();
+
+ test.equal(
+ returnValue.length,
+ 1,
+ 'Return value should be an array with one document'
+ );
+ }
+ );
+
+ Tinytest.addAsync(
+ 'suspense/useFindSuspenseServer - Test proper cache invalidation',
+ async function (test) {
+ const TestDocs = new Mongo.Collection(null);
+
+ TestDocs.insertAsync({ id: 0, updated: 0 });
+
+ let returnValue;
+
+ const Test = () => {
+ returnValue = useFindSuspenseServer(TestDocs, [{}]);
+
+ return null;
+ };
+ const TestSuspense = () => {
+ return (
+ Loading...}>
+
+
+ );
+ };
+
+ // first return promise
+ renderToString();
+
+ test.isUndefined(
+ returnValue,
+ 'Return value should be undefined as find promise unresolved'
+ );
+ // wait promise
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ // return data
+ renderToString();
+
+ test.equal(
+ returnValue[0].updated,
+ 0,
+ 'Return value should be an array with initial value as find promise resolved'
+ );
+
+ TestDocs.updateAsync({ id: 0 }, { $inc: { updated: 1 } });
+ await new Promise((resolve) => setTimeout(resolve, 100));
+
+ // second return promise
+ renderToString();
+
+ test.equal(
+ returnValue[0].updated,
+ 0,
+ 'Return value should still not updated as second find promise unresolved'
+ );
+
+ // wait promise
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ // return data
+ renderToString();
+
+ test.equal(
+ returnValue[0].updated,
+ 1,
+ 'Return value should be an array with one document with value updated'
+ );
+ }
+ );
+
+ Tinytest.addAsync(
+ 'suspense/useFindSuspenseServer - null return is allowed',
+ async function (test) {
+ const TestDocs = new Mongo.Collection(null);
+
+ TestDocs.insertAsync({ id: 0, updated: 0 });
+
+ let returnValue;
+
+ const Test = () => {
+ returnValue = useFindSuspenseServer(TestDocs, null);
+
+ return null;
+ };
+ const TestSuspense = () => {
+ return (
+ Loading...}>
+
+
+ );
+ };
+
+ renderToString();
+
+ test.isNull(
+ returnValue,
+ 'Return value should be null when the factory returns null'
+ );
+ }
+ );
+}
diff --git a/packages/react-meteor-data/suspense/useFind.ts b/packages/react-meteor-data/suspense/useFind.ts
index 7ca4f915..38df66c4 100644
--- a/packages/react-meteor-data/suspense/useFind.ts
+++ b/packages/react-meteor-data/suspense/useFind.ts
@@ -1,56 +1,190 @@
import { Meteor } from 'meteor/meteor'
-import { type Mongo } from 'meteor/mongo'
+import { EJSON } from 'meteor/ejson'
+import { Mongo } from 'meteor/mongo'
import type React from 'react'
-import { useEffect } from 'react'
-import { useFind as useFindClient } from '../useFind'
-import isEqual from 'lodash.isequal'
-import remove from 'lodash.remove'
-export const cacheMap = new Map, Entry[]>()
-
-interface Entry {
- findArgs: Parameters['find']>
- promise: Promise
- result?: unknown
- error?: unknown
- counter: number
+import { useReducer, useMemo, useEffect, type Reducer, type DependencyList, useRef } from 'react'
+import { Tracker } from 'meteor/tracker'
+
+type useFindActions =
+ | { type: 'refresh', data: T[] }
+ | { type: 'addedAt', document: T, atIndex: number }
+ | { type: 'changedAt', document: T, atIndex: number }
+ | { type: 'removedAt', atIndex: number }
+ | { type: 'movedTo', fromIndex: number, toIndex: number }
+
+const useFindReducer = (data: T[], action: useFindActions): T[] => {
+ switch (action.type) {
+ case 'refresh':
+ return action.data
+ case 'addedAt':
+ return [
+ ...data.slice(0, action.atIndex),
+ action.document,
+ ...data.slice(action.atIndex)
+ ]
+ case 'changedAt':
+ return [
+ ...data.slice(0, action.atIndex),
+ action.document,
+ ...data.slice(action.atIndex + 1)
+ ]
+ case 'removedAt':
+ return [
+ ...data.slice(0, action.atIndex),
+ ...data.slice(action.atIndex + 1)
+ ]
+ case 'movedTo':
+ const doc = data[action.fromIndex]
+ const copy = [
+ ...data.slice(0, action.fromIndex),
+ ...data.slice(action.fromIndex + 1)
+ ]
+ copy.splice(action.toIndex, 0, doc)
+ return copy
+ }
+}
+// Check for valid Cursor or null.
+// On client, we should have a Mongo.Cursor (defined in
+// https://github.com/meteor/meteor/blob/devel/packages/minimongo/cursor.js and
+// https://github.com/meteor/meteor/blob/devel/packages/mongo/collection.js).
+// On server, however, we instead get a private Cursor type from
+// https://github.com/meteor/meteor/blob/devel/packages/mongo/mongo_driver.js
+// which has fields _mongo and _cursorDescription.
+const checkCursor = (
+ cursor:
+ | Mongo.Cursor
+ | Partial<{ _mongo: any, _cursorDescription: any }>
+ | undefined
+ | null
+) => {
+ if (
+ cursor !== null &&
+ cursor !== undefined &&
+ !(cursor instanceof Mongo.Cursor) &&
+ !(cursor._mongo && cursor._cursorDescription)
+ ) {
+ console.warn(
+ 'Warning: useFind requires an instance of Mongo.Cursor. ' +
+ 'Make sure you do NOT call .fetch() on your cursor.'
+ )
+ }
}
-const removeNullCaches =
- (cacheMap: Map, Entry[]>) => {
- for (const cache of cacheMap.values()) {
- remove(cache, c => c.counter === 0)
+// Synchronous data fetch. It uses cursor observing instead of cursor.fetch() because synchronous fetch will be deprecated.
+const fetchData = (cursor: Mongo.Cursor) => {
+ const data: T[] = []
+ const observer = cursor.observe({
+ addedAt(document, atIndex, before) {
+ data.splice(atIndex, 0, document)
}
- }
-const useFindSuspense = (
+ })
+ observer.stop()
+ return data
+}
+
+export const useFindSuspenseClient = (
collection: Mongo.Collection,
findArgs: Parameters['find']> | null,
- deps: React.DependencyList = []
+ deps: DependencyList = []
) => {
+ const findArgsKey = EJSON.stringify(findArgs)
+
+ const cursor = useMemo(() => {
+ // To avoid creating side effects in render, opt out
+ // of Tracker integration altogether.
+ const cursor = Tracker.nonreactive(() => findArgs && collection.find(...findArgs))
+ if (Meteor.isDevelopment) {
+ checkCursor(cursor)
+ }
+ return cursor
+ }, [findArgsKey, ...deps])
+
+ const [data, dispatch] = useReducer>, null>(
+ useFindReducer,
+ null,
+ () => {
+ if (!(cursor instanceof Mongo.Cursor)) {
+ return []
+ }
+
+ return fetchData(cursor)
+ }
+ )
+
+ // Store information about mounting the component.
+ // It will be used to run code only if the component is updated.
+ const didMount = useRef(false)
+
useEffect(() => {
- const cachedEntries = cacheMap.get(collection)
- const entry = cachedEntries?.find(x => isEqual(x.findArgs, findArgs))
- if (entry) ++entry.counter
+ // Fetch intitial data if cursor was changed.
+ if (didMount.current) {
+ if (!(cursor instanceof Mongo.Cursor)) {
+ return
+ }
+
+ const data = fetchData(cursor)
+ dispatch({ type: 'refresh', data })
+ } else {
+ didMount.current = true
+ }
- removeNullCaches(cacheMap)
- return () => {
- setTimeout(() => {
- const cachedEntries = cacheMap.get(collection)
- const entry = cachedEntries?.find(x => isEqual(x.findArgs, findArgs))
+ if (!(cursor instanceof Mongo.Cursor)) {
+ return
+ }
- if (entry) --entry.counter
+ const observer = cursor.observe({
+ addedAt(document, atIndex, before) {
+ dispatch({ type: 'addedAt', document, atIndex })
+ },
+ changedAt(newDocument, oldDocument, atIndex) {
+ dispatch({ type: 'changedAt', document: newDocument, atIndex })
+ },
+ removedAt(oldDocument, atIndex) {
+ dispatch({ type: 'removedAt', atIndex })
+ },
+ movedTo(document, fromIndex, toIndex, before) {
+ dispatch({ type: 'movedTo', fromIndex, toIndex })
+ },
+ // @ts-expect-error
+ _suppress_initial: true
+ })
- removeNullCaches(cacheMap)
- }, 0)
+ return () => {
+ observer.stop()
}
- }, [findArgs, collection, ...deps])
+ }, [cursor])
+
+ return cursor ? data : cursor
+}
+
+interface Entry {
+ findArgs: Parameters['find']>
+ promise: Promise
+ result?: unknown
+ error?: unknown
+}
+
+const cacheMap = new Map, Map>()
+export const useFindSuspenseServer = (
+ collection: Mongo.Collection,
+ findArgs: Parameters['find']> | null,
+ deps: React.DependencyList = []
+) => {
if (findArgs === null) return null
const cachedEntries = cacheMap.get(collection)
- const cachedEntry = cachedEntries?.find(x => isEqual(x.findArgs, findArgs))
+ const findArgsKey = EJSON.stringify(findArgs)
+ const cachedEntry = cachedEntries?.get(findArgsKey)
if (cachedEntry != null) {
+ if ('error' in cachedEntry || 'result' in cachedEntry) {
+ setTimeout(() => {
+ if (cachedEntries) cachedEntries.delete(findArgsKey)
+ else cacheMap.delete(collection)
+ }, 0)
+ }
if ('error' in cachedEntry) throw cachedEntry.error
if ('result' in cachedEntry) return cachedEntry.result as T[]
throw cachedEntry.promise
@@ -67,25 +201,19 @@ const useFindSuspense = (
},
error => {
entry.error = error
- }),
- counter: 0
+ }
+ )
}
- if (cachedEntries != null) cachedEntries.push(entry)
- else cacheMap.set(collection, [entry])
+ if (!cachedEntries) cacheMap.set(collection, new Map([[findArgsKey, entry]]))
+ else cachedEntries.set(findArgsKey, entry)
throw entry.promise
}
-export { useFindSuspense }
-
-export const useFind = Meteor.isClient
- ? (
- collection: Mongo.Collection,
- findArgs: Parameters["find"]> | null,
- deps?: React.DependencyList
- ) => useFindClient(() => findArgs && collection.find(...findArgs), deps)
- : useFindSuspense;
+export const useFind = Meteor.isServer
+ ? useFindSuspenseServer
+ : useFindSuspenseClient
function useFindDev(
collection: Mongo.Collection,
@@ -94,8 +222,8 @@ function useFindDev(
) {
function warn(expects: string, pos: string, arg: string, type: string) {
console.warn(
- `Warning: useFind expected a ${expects} in it\'s ${pos} argument ` +
- `(${arg}), but got type of \`${type}\`.`
+ `Warning: useFind expected a ${expects} in it\'s ${pos} argument ` +
+ `(${arg}), but got type of \`${type}\`.`
)
}
@@ -103,7 +231,7 @@ function useFindDev(
warn('Mongo Collection', '1st', 'reactiveFn', collection)
}
- return useFindSuspense(collection, findArgs, deps)
+ return useFind(collection, findArgs, deps)
}
export default Meteor.isDevelopment
diff --git a/packages/react-meteor-data/suspense/useSubscribe.tests.js b/packages/react-meteor-data/suspense/useSubscribe.tests.js
new file mode 100644
index 00000000..82e9910a
--- /dev/null
+++ b/packages/react-meteor-data/suspense/useSubscribe.tests.js
@@ -0,0 +1,153 @@
+import React, { Suspense } from 'react';
+import { waitFor, render, renderHook } from '@testing-library/react';
+
+import { useSubscribeSuspense } from './useSubscribe';
+
+if (Meteor.isServer) {
+ Meteor.publish('testUseSubscribe', function () {
+ this.added('testCollection', 0, { name: 'nameA' });
+ this.ready();
+ });
+} else {
+ Tinytest.addAsync(
+ 'suspense/useSubscribe - Verified data returned successfully',
+ async (test) => {
+ const TestCollection = new Mongo.Collection('testCollection');
+
+ const Test = () => {
+ useSubscribeSuspense('testUseSubscribe');
+
+ const doc = TestCollection.findOne();
+
+ return {doc.name}
;
+ };
+ const TestSuspense = () => {
+ return (
+ Loading...}>
+
+
+ );
+ };
+
+ const { queryByText, findByText, unmount } = render(, {
+ container: document.createElement('container'),
+ });
+
+ test.isNotNull(
+ queryByText('Loading...'),
+ 'Throw Promise as needed to trigger the fallback.'
+ );
+
+ test.isTrue(await findByText('nameA'), 'Need to return data');
+
+ unmount();
+ }
+ );
+
+ Tinytest.addAsync(
+ 'suspense/useSubscribe - Simulate running in strict mode',
+ async (test) => {
+ // Repeated runs of this block should consistently pass without failures.
+ for (let i = 0; i < 10; i++) {
+ const { result, rerender, unmount } = renderHook(
+ () => {
+ try {
+ return useSubscribeSuspense('testUseSubscribe');
+ } catch (promise) {
+ return promise;
+ }
+ },
+ {
+ reactStrictMode: true,
+ }
+ );
+
+ await result.current;
+
+ rerender();
+
+ test.isNull(
+ result.current,
+ 'Should be null after rerender (this indicates the data has been read)'
+ );
+
+ unmount();
+ }
+ }
+ );
+
+ Tinytest.addAsync(
+ 'suspense/useSubscribe - when multiple subscriptions are active, cleaning one preserves others',
+ async (test) => {
+ // Run in both normal mode and strict mode respectively.
+ for (const reactStrictMode of [false, true]) {
+ const {
+ result: resultA,
+ rerender: rerenderA,
+ unmount: unmountA,
+ } = renderHook(
+ () => {
+ try {
+ return useSubscribeSuspense('testUseSubscribe');
+ } catch (promise) {
+ return promise;
+ }
+ },
+ { reactStrictMode }
+ );
+
+ await resultA.current;
+ rerenderA();
+
+ const { result: resultB, unmount: unmountB } = renderHook(
+ () => {
+ try {
+ return useSubscribeSuspense('testUseSubscribe');
+ } catch (promise) {
+ return promise;
+ }
+ },
+ { reactStrictMode }
+ );
+
+ test.isNull(
+ resultB.current,
+ 'Should be null after subscribeA (this indicates the data has been cached)'
+ );
+
+ unmountB();
+ await waitFor(() => {});
+
+ rerenderA();
+
+ test.isNull(
+ resultA.current,
+ 'Should be null (this indicates the data has been cached)'
+ );
+
+ unmountA();
+ await waitFor(() => {});
+
+ const { result: resultA2, unmount: unmountA2 } = renderHook(
+ () => {
+ try {
+ return useSubscribeSuspense('testUseSubscribe');
+ } catch (promise) {
+ return promise;
+ }
+ },
+ { reactStrictMode }
+ );
+
+ test.instanceOf(
+ resultA2.current,
+ Promise,
+ 'Should be a promise (this indicates the data has been cleaned)'
+ );
+
+ await resultA2.current;
+ unmountA2();
+ }
+ }
+ );
+}
diff --git a/packages/react-meteor-data/suspense/useSubscribe.ts b/packages/react-meteor-data/suspense/useSubscribe.ts
index a08701c5..e3190018 100644
--- a/packages/react-meteor-data/suspense/useSubscribe.ts
+++ b/packages/react-meteor-data/suspense/useSubscribe.ts
@@ -1,10 +1,8 @@
-import { useEffect } from 'react'
+import { useEffect, useRef } from 'react'
import { EJSON } from 'meteor/ejson'
import { Meteor } from 'meteor/meteor'
-import isEqual from 'lodash.isequal'
-import remove from 'lodash.remove'
-const cachedSubscriptions: Entry[] = []
+const cachedSubscriptions = new Map()
interface Entry {
params: EJSON[]
@@ -13,26 +11,47 @@ interface Entry {
promise: Promise
result?: null
error?: unknown
+ counter: number
}
const useSubscribeSuspenseClient = (name: string, ...params: EJSON[]) => {
- const cachedSubscription =
- cachedSubscriptions.find(x => x.name === name && isEqual(x.params, params))
+ const subscribeKey = EJSON.stringify([name, params])
+ const cachedSubscription = cachedSubscriptions.get(subscribeKey)
+ const cleanupTimoutIdRefs = useRef(new Map())
- useEffect(() =>
- () => {
- setTimeout(() => {
- const cachedSubscription =
- cachedSubscriptions.find(x => x.name === name && isEqual(x.params, params))
- if (cachedSubscription) {
- cachedSubscription.handle?.stop()
- remove(cachedSubscriptions,
- x =>
- x.name === cachedSubscription.name &&
- isEqual(x.params, cachedSubscription.params))
- }
- }, 0)
- }, [name, EJSON.stringify(params)])
+ useEffect(() => {
+ /**
+ * In strict mode (development only), `useEffect` may run 1-2 times.
+ * Throwing a promise outside can cause premature cleanup of subscriptions and cachedSubscription before unmount.
+ * To avoid this, check the `timeout` to ensure cleanup only occurs after unmount.
+ */
+ if (cleanupTimoutIdRefs.current.has(subscribeKey)) {
+ clearTimeout(cleanupTimoutIdRefs.current.get(subscribeKey))
+ cleanupTimoutIdRefs.current.delete(subscribeKey)
+ } else {
+ const cachedSubscription = cachedSubscriptions.get(subscribeKey)
+ if (cachedSubscription) cachedSubscription.counter++
+ }
+
+ return () => {
+ cleanupTimoutIdRefs.current.set(
+ subscribeKey,
+ setTimeout(() => {
+ const cachedSubscription = cachedSubscriptions.get(subscribeKey)
+
+ if (cachedSubscription) {
+ cachedSubscription.counter--
+
+ if (cachedSubscription.counter === 0) {
+ cachedSubscription.handle?.stop()
+ cachedSubscriptions.delete(subscribeKey)
+ cleanupTimoutIdRefs.current.delete(subscribeKey)
+ }
+ }
+ }, 0)
+ )
+ }
+ }, [subscribeKey])
if (cachedSubscription != null) {
if ('error' in cachedSubscription) throw cachedSubscription.error
@@ -56,18 +75,19 @@ const useSubscribeSuspenseClient = (name: string, ...params: EJSON[]) => {
reject(error)
}
})
- })
+ }),
+ counter: 0
}
- cachedSubscriptions.push(subscription)
+ cachedSubscriptions.set(subscribeKey, subscription)
throw subscription.promise
}
-const useSubscribeSuspenseServer = (name?: string, ...args: any[]) => undefined;
+const useSubscribeSuspenseServer = (name?: string, ...args: any[]) => undefined
export const useSubscribeSuspense = Meteor.isServer
-? useSubscribeSuspenseServer
-: useSubscribeSuspenseClient
+ ? useSubscribeSuspenseServer
+ : useSubscribeSuspenseClient
export const useSubscribe = useSubscribeSuspense
diff --git a/packages/react-meteor-data/suspense/useTracker.ts b/packages/react-meteor-data/suspense/useTracker.ts
index 0ae01e75..3867a0c9 100644
--- a/packages/react-meteor-data/suspense/useTracker.ts
+++ b/packages/react-meteor-data/suspense/useTracker.ts
@@ -1,4 +1,4 @@
-import isEqual from 'lodash.isequal'
+import { strictDeepEqual } from 'fast-equals'
import { Tracker } from 'meteor/tracker'
import { type EJSON } from 'meteor/ejson'
import { type DependencyList, useEffect, useMemo, useReducer, useRef } from 'react'
@@ -55,7 +55,7 @@ function resolveAsync(key: string, promise: Promise | null, deps: Dependen
useEffect(() =>
() => {
setTimeout(() => {
- if (cached !== undefined && isEqual(cached.deps, deps)) cacheMap.delete(key)
+ if (cached !== undefined && strictDeepEqual(cached.deps, deps)) cacheMap.delete(key)
}, 0)
}, [cached, key, ...deps])
diff --git a/packages/react-meteor-data/tests.js b/packages/react-meteor-data/tests.js
index 4a6aab3a..13539827 100644
--- a/packages/react-meteor-data/tests.js
+++ b/packages/react-meteor-data/tests.js
@@ -1,3 +1,5 @@
-import './useTracker.tests.js';
-import './withTracker.tests.js';
-import './useFind.tests.js';
+import './useTracker.tests.js'
+import './withTracker.tests.js'
+import './useFind.tests.js'
+import './suspense/useSubscribe.tests.js'
+import './suspense/useFind.tests.js'
diff --git a/packages/react-meteor-data/tsconfig.json b/packages/react-meteor-data/tsconfig.json
index 99e4a0f2..49d4ea26 100644
--- a/packages/react-meteor-data/tsconfig.json
+++ b/packages/react-meteor-data/tsconfig.json
@@ -11,7 +11,7 @@
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
- "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
+ "target": "es2022" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
@@ -25,9 +25,9 @@
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
- "module": "es2022", /* Specify what module code is generated. */
+ "module": "es2022" /* Specify what module code is generated. */,
// "rootDir": "./", /* Specify the root folder within your source files. */
- "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
+ "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
@@ -44,7 +44,7 @@
// "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
- "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */,
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
@@ -55,9 +55,9 @@
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- "outDir": "./dist", /* Specify an output folder for all emitted files. */
+ "outDir": "./dist" /* Specify an output folder for all emitted files. */,
// "removeComments": true, /* Disable emitting comments. */
- "noEmit": true, /* Disable emitting files from a compilation. */
+ "noEmit": true /* Disable emitting files from a compilation. */,
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
@@ -77,12 +77,12 @@
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
+ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
+ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
/* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
+ "strict": true /* Enable all strict type-checking options. */,
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
@@ -104,7 +104,7 @@
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"files": [
"index.js",
diff --git a/packages/react-meteor-data/tsup.config.ts b/packages/react-meteor-data/tsup.config.ts
index 71d88511..acccecdc 100644
--- a/packages/react-meteor-data/tsup.config.ts
+++ b/packages/react-meteor-data/tsup.config.ts
@@ -3,7 +3,7 @@ import { defineConfig } from 'tsup';
import pc from 'picocolors';
export default defineConfig({
- entry: ['index.js', "suspense/index.js"],
+ entry: ['index.ts', "suspense/index.js"],
outDir: 'dist',
format: ['esm', 'cjs'],
external: ['meteor/meteor', 'meteor/mongo', 'meteor/tracker'],
diff --git a/packages/react-meteor-data/useFind.tests.js b/packages/react-meteor-data/useFind.tests.js
index 7c8114c3..37f27e89 100644
--- a/packages/react-meteor-data/useFind.tests.js
+++ b/packages/react-meteor-data/useFind.tests.js
@@ -57,13 +57,11 @@ if (Meteor.isClient) {
await waitFor(() => {}, { container, timeout: 250 })
- test.equal(renders, 10, '10 items should have rendered - the initial list is always tossed.')
-
await waitFor(() => {
TestDocs.update({ id: 2 }, { $inc: { updated: 1 } })
}, { container, timeout: 250 })
- test.equal(renders, 11, '11 items should have rendered - only 1 of the items should have been matched by the reconciler after a single change.')
+ test.equal(renders, 6, '6 items should have rendered - only 1 of the items should have been matched by the reconciler after a single change.')
completed()
})
@@ -104,11 +102,54 @@ if (Meteor.isClient) {
setReturnNull(false)
await waitFor(() => {}, { container, timeout: 250 })
- test.isNotNull(returnValue, 'Return value should be null when the factory returns null')
+ test.equal(returnValue.length, 1, 'Return value should be an array with one document')
completed()
})
-
+ // Test that catches the issue reported on https://github.com/meteor/react-packages/issues/418
+ Tinytest.addAsync(
+ 'useFind - Immediate update before effect registration (race condition test)',
+ async function (test, completed) {
+ const container = document.createElement('div');
+ document.body.appendChild(container);
+
+ const TestDocs = new Mongo.Collection(null);
+ // Insert a single document.
+ TestDocs.insert({ id: 1, val: 'initial' });
+
+ const Test = () => {
+ const docs = useFind(() => TestDocs.find(), []);
+ return (
+
+ {docs && docs[0] && docs[0].val}
+
+ );
+ };
+
+ // Render the component.
+ ReactDOM.render(, container);
+
+ // Immediately update the document (this should occur
+ // after the synchronous fetch in the old code but before the effect attaches).
+ TestDocs.update({ id: 1 }, { $set: { val: 'updated' } });
+
+ // Wait until the rendered output reflects the update.
+ await waitFor(() => {
+ const node = container.querySelector('[data-testid="doc-value"]');
+ if (!node || !node.textContent.includes('updated')) {
+ throw new Error('Updated value not rendered yet');
+ }
+ }, { container, timeout: 500 });
+
+ test.ok(
+ container.innerHTML.includes('updated'),
+ 'Document should display updated value; the old code would fail to capture this update.'
+ );
+
+ document.body.removeChild(container);
+ completed();
+ }
+ );
} else {
}
diff --git a/packages/react-meteor-data/useFind.ts b/packages/react-meteor-data/useFind.ts
index 429cf025..59244e3d 100644
--- a/packages/react-meteor-data/useFind.ts
+++ b/packages/react-meteor-data/useFind.ts
@@ -71,6 +71,24 @@ const fetchData = (cursor: Mongo.Cursor) => {
return data
}
+const useSyncEffect = (effect, deps) => {
+ const [cleanup, timeoutId] = useMemo(
+ () => {
+ const cleanup = effect();
+ const timeoutId = setTimeout(cleanup, 1000);
+ return [cleanup, timeoutId];
+ },
+ deps
+ );
+
+ useEffect(() => {
+ clearTimeout(timeoutId);
+
+ return cleanup;
+ }, [cleanup]);
+};
+
+
const useFindClient = (factory: () => (Mongo.Cursor | undefined | null), deps: DependencyList = []) => {
const cursor = useMemo(() => {
// To avoid creating side effects in render, opt out
@@ -94,38 +112,25 @@ const useFindClient = (factory: () => (Mongo.Cursor | undefined | nu
}
)
- // Store information about mounting the component.
- // It will be used to run code only if the component is updated.
- const didMount = useRef(false)
-
- useEffect(() => {
- // Fetch intitial data if cursor was changed.
- if (didMount.current) {
- if (!(cursor instanceof Mongo.Cursor)) {
- return
- }
-
- const data = fetchData(cursor)
- dispatch({ type: 'refresh', data })
- } else {
- didMount.current = true
- }
-
+ useSyncEffect(() => {
if (!(cursor instanceof Mongo.Cursor)) {
return
}
+ const initialData = fetchData(cursor);
+ dispatch({ type: 'refresh', data: initialData });
+
const observer = cursor.observe({
- addedAt (document, atIndex, before) {
+ addedAt(document, atIndex, before) {
dispatch({ type: 'addedAt', document, atIndex })
},
- changedAt (newDocument, oldDocument, atIndex) {
+ changedAt(newDocument, oldDocument, atIndex) {
dispatch({ type: 'changedAt', document: newDocument, atIndex })
},
- removedAt (oldDocument, atIndex) {
+ removedAt(oldDocument, atIndex) {
dispatch({ type: 'removedAt', atIndex })
},
- movedTo (document, fromIndex, toIndex, before) {
+ movedTo(document, fromIndex, toIndex, before) {
dispatch({ type: 'movedTo', fromIndex, toIndex })
},
// @ts-ignore
@@ -135,7 +140,7 @@ const useFindClient = (factory: () => (Mongo.Cursor | undefined | nu
return () => {
observer.stop()
}
- }, [cursor])
+ }, [cursor]);
return cursor ? data : cursor
}
diff --git a/tests/react-template-helper-harness/.meteor/.finished-upgraders b/tests/react-meteor-accounts-harness/.meteor/.finished-upgraders
similarity index 66%
rename from tests/react-template-helper-harness/.meteor/.finished-upgraders
rename to tests/react-meteor-accounts-harness/.meteor/.finished-upgraders
index dacc2c0d..c07b6ff7 100644
--- a/tests/react-template-helper-harness/.meteor/.finished-upgraders
+++ b/tests/react-meteor-accounts-harness/.meteor/.finished-upgraders
@@ -11,3 +11,9 @@ notices-for-facebook-graph-api-2
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/tests/react-template-helper-harness/.meteor/.gitignore b/tests/react-meteor-accounts-harness/.meteor/.gitignore
similarity index 100%
rename from tests/react-template-helper-harness/.meteor/.gitignore
rename to tests/react-meteor-accounts-harness/.meteor/.gitignore
diff --git a/tests/react-template-helper-harness/.meteor/.id b/tests/react-meteor-accounts-harness/.meteor/.id
similarity index 92%
rename from tests/react-template-helper-harness/.meteor/.id
rename to tests/react-meteor-accounts-harness/.meteor/.id
index 184d350a..ae46412b 100644
--- a/tests/react-template-helper-harness/.meteor/.id
+++ b/tests/react-meteor-accounts-harness/.meteor/.id
@@ -4,4 +4,4 @@
# - ensuring you don't accidentally deploy one app on top of another
# - providing package authors with aggregated statistics
-193gboe1tus04g9q8fl2
+xi4ob9zualf.vxwytungbgj
diff --git a/tests/react-meteor-accounts-harness/.meteor/packages b/tests/react-meteor-accounts-harness/.meteor/packages
new file mode 100644
index 00000000..bf663eda
--- /dev/null
+++ b/tests/react-meteor-accounts-harness/.meteor/packages
@@ -0,0 +1,19 @@
+# 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-base@1.5.2 # Packages every Meteor app needs to have
+mobile-experience@1.1.2 # Packages for a great mobile UX
+mongo@2.1.0 # The database Meteor supports right now
+static-html@1.4.0 # Define static page content in .html files
+reactive-var@1.0.13 # Reactive variable for tracker
+tracker@1.3.4 # Meteor's client-side reactive programming library
+
+standard-minifier-css@1.9.3 # CSS minifier run for production mode
+standard-minifier-js@3.0.0 # JS minifier run for production mode
+es5-shim@4.8.1 # ECMAScript 5 compatibility for older browsers
+ecmascript@0.16.10 # Enable ECMAScript2015+ syntax in app code
+typescript@5.6.3 # Enable TypeScript syntax in .ts and .tsx modules
+shell-server@0.6.1 # Server-side component of the `meteor shell` command
diff --git a/tests/react-template-helper-harness/.meteor/platforms b/tests/react-meteor-accounts-harness/.meteor/platforms
similarity index 100%
rename from tests/react-template-helper-harness/.meteor/platforms
rename to tests/react-meteor-accounts-harness/.meteor/platforms
diff --git a/tests/react-meteor-accounts-harness/.meteor/release b/tests/react-meteor-accounts-harness/.meteor/release
new file mode 100644
index 00000000..5f228927
--- /dev/null
+++ b/tests/react-meteor-accounts-harness/.meteor/release
@@ -0,0 +1 @@
+METEOR@3.1.2
diff --git a/tests/react-meteor-accounts-harness/.meteor/versions b/tests/react-meteor-accounts-harness/.meteor/versions
new file mode 100644
index 00000000..b241e972
--- /dev/null
+++ b/tests/react-meteor-accounts-harness/.meteor/versions
@@ -0,0 +1,64 @@
+allow-deny@2.1.0
+autoupdate@2.0.0
+babel-compiler@7.11.3
+babel-runtime@1.5.2
+base64@1.0.13
+binary-heap@1.0.12
+boilerplate-generator@2.0.0
+caching-compiler@2.0.1
+callback-hook@1.6.0
+check@1.4.4
+core-runtime@1.0.0
+ddp@1.4.2
+ddp-client@3.1.0
+ddp-common@1.4.4
+ddp-server@3.1.0
+diff-sequence@1.1.3
+dynamic-import@0.7.4
+ecmascript@0.16.10
+ecmascript-runtime@0.8.3
+ecmascript-runtime-client@0.12.2
+ecmascript-runtime-server@0.11.1
+ejson@1.1.4
+es5-shim@4.8.1
+facts-base@1.0.2
+fetch@0.1.5
+geojson-utils@1.0.12
+hot-code-push@1.0.5
+id-map@1.2.0
+inter-process-messaging@0.1.2
+launch-screen@2.0.1
+logging@1.3.5
+meteor@2.1.0
+meteor-base@1.5.2
+minifier-css@2.0.0
+minifier-js@3.0.1
+minimongo@2.0.2
+mobile-experience@1.1.2
+mobile-status-bar@1.1.1
+modern-browsers@0.2.0
+modules@0.20.3
+modules-runtime@0.13.2
+mongo@2.1.0
+mongo-decimal@0.2.0
+mongo-dev-server@1.1.1
+mongo-id@1.0.9
+npm-mongo@6.10.2
+ordered-dict@1.2.0
+promise@1.0.0
+random@1.2.2
+react-fast-refresh@0.2.9
+reactive-var@1.0.13
+reload@1.3.2
+retry@1.1.1
+routepolicy@1.1.2
+shell-server@0.6.1
+socket-stream-client@0.6.0
+standard-minifier-css@1.9.3
+standard-minifier-js@3.0.0
+static-html@1.4.0
+static-html-tools@1.0.0
+tracker@1.3.4
+typescript@5.6.3
+webapp@2.0.5
+webapp-hashing@1.1.2
diff --git a/tests/react-meteor-accounts-harness/package-lock.json b/tests/react-meteor-accounts-harness/package-lock.json
new file mode 100644
index 00000000..6525100b
--- /dev/null
+++ b/tests/react-meteor-accounts-harness/package-lock.json
@@ -0,0 +1,2663 @@
+{
+ "name": "react-meteor-accounts-harness",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react-meteor-accounts-harness",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@testing-library/react": "16.2.0",
+ "@testing-library/react-hooks": "^7.0.2",
+ "meteor-node-stubs": "^1.2.13",
+ "react": "18.3.1",
+ "react-dom": "18.3.1"
+ },
+ "devDependencies": {
+ "puppeteer": "^24.4.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz",
+ "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@puppeteer/browsers": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.8.0.tgz",
+ "integrity": "sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "extract-zip": "^2.0.1",
+ "progress": "^2.0.3",
+ "proxy-agent": "^6.5.0",
+ "semver": "^7.7.1",
+ "tar-fs": "^3.0.8",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "browsers": "lib/cjs/main-cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
+ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/react": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz",
+ "integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": "^10.0.0",
+ "@types/react": "^18.0.0 || ^19.0.0",
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@testing-library/react-hooks": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz",
+ "integrity": "sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "@types/react": ">=16.9.0",
+ "@types/react-dom": ">=16.9.0",
+ "@types/react-test-renderer": ">=16.9.0",
+ "react-error-boundary": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0",
+ "react-test-renderer": ">=16.9.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-test-renderer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/node": {
+ "version": "22.13.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
+ "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
+ "node_modules/@types/react": {
+ "version": "19.0.10",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz",
+ "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz",
+ "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.0.0"
+ }
+ },
+ "node_modules/@types/react-test-renderer": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-19.0.0.tgz",
+ "integrity": "sha512-qDVnNybqFm2eZKJ4jD34EvRd6VHD67KjgnWaEMM0Id9L22EpWe3nOSVKHWL1XWRCxUWe3lhXwlEeCKD1BlJCQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
+ "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/bare-events": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true
+ },
+ "node_modules/bare-fs": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz",
+ "integrity": "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-events": "^2.0.0",
+ "bare-path": "^3.0.0",
+ "bare-stream": "^2.0.0"
+ },
+ "engines": {
+ "bare": ">=1.7.0"
+ }
+ },
+ "node_modules/bare-os": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.0.tgz",
+ "integrity": "sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "bare": ">=1.14.0"
+ }
+ },
+ "node_modules/bare-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
+ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-os": "^3.0.1"
+ }
+ },
+ "node_modules/bare-stream": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz",
+ "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "streamx": "^2.21.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*",
+ "bare-events": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ },
+ "bare-events": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/basic-ftp": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
+ "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chromium-bidi": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-2.1.2.tgz",
+ "integrity": "sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "mitt": "^3.0.1",
+ "zod": "^3.24.1"
+ },
+ "peerDependencies": {
+ "devtools-protocol": "*"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/devtools-protocol": {
+ "version": "0.0.1413902",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1413902.tgz",
+ "integrity": "sha512-yRtvFD8Oyk7C9Os3GmnFZLu53yAfsnyw1s+mLmHHUK0GQEc9zthHWvS1r67Zqzm5t7v56PILHIVZ7kmFMaL2yQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-uri": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz",
+ "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.2",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/meteor-node-stubs": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.13.tgz",
+ "integrity": "sha512-K7uaHEyg+TQEMtYOnyt+/ECtg48xYowo0ErnvOg59ffe6WXwD7gdfp0EK1DhOG6lpb0P4S+OoFf1eUaTaNOleg==",
+ "bundleDependencies": [
+ "@meteorjs/crypto-browserify",
+ "assert",
+ "browserify-zlib",
+ "buffer",
+ "console-browserify",
+ "constants-browserify",
+ "domain-browser",
+ "events",
+ "https-browserify",
+ "os-browserify",
+ "path-browserify",
+ "process",
+ "punycode",
+ "querystring-es3",
+ "readable-stream",
+ "stream-browserify",
+ "stream-http",
+ "string_decoder",
+ "timers-browserify",
+ "tty-browserify",
+ "url",
+ "util",
+ "vm-browserify"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@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.6.1",
+ "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.4",
+ "util": "^0.12.5",
+ "vm-browserify": "^1.1.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/@meteorjs/crypto-browserify": {
+ "version": "3.12.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/@meteorjs/crypto-browserify/node_modules/hash-base": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/asn1.js": {
+ "version": "4.10.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/assert": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/base64-js": {
+ "version": "1.5.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/bn.js": {
+ "version": "5.2.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/brorand": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-des": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-rsa": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign": {
+ "version": "4.2.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/bn.js": {
+ "version": "5.2.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/hash-base": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/buffer": {
+ "version": "5.7.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/call-bind": {
+ "version": "1.0.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/cipher-base": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/console-browserify": {
+ "version": "1.2.0",
+ "inBundle": true
+ },
+ "node_modules/meteor-node-stubs/node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/core-util-is": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-hash": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-hmac": {
+ "version": "1.1.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/define-data-property": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/define-properties": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/des.js": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/domain-browser": {
+ "version": "4.23.0",
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/elliptic": {
+ "version": "6.6.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/es-define-property": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/es-errors": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/events": {
+ "version": "3.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/for-each": {
+ "version": "0.3.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/function-bind": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/gopd": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-proto": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-symbols": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hash-base": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hash.js": {
+ "version": "1.1.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hasown": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/https-browserify": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/ieee754": {
+ "version": "1.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/meteor-node-stubs/node_modules/inherits": {
+ "version": "2.0.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-arguments": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-callable": {
+ "version": "1.2.7",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-nan": {
+ "version": "1.3.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-typed-array": {
+ "version": "1.1.12",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/isarray": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/md5.js": {
+ "version": "1.3.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/meteor-node-stubs/node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/object-inspect": {
+ "version": "1.13.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/object-is": {
+ "version": "1.1.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/object-keys": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/object.assign": {
+ "version": "4.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/os-browserify": {
+ "version": "0.3.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/pako": {
+ "version": "1.0.11",
+ "inBundle": true,
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/meteor-node-stubs/node_modules/parse-asn1": {
+ "version": "5.1.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/parse-asn1/node_modules/hash-base": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/path-browserify": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/process": {
+ "version": "0.11.10",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/punycode": {
+ "version": "1.4.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/qs": {
+ "version": "6.13.0",
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "inBundle": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/randombytes": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/randomfill": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/ripemd160": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/set-function-length": {
+ "version": "1.2.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/setimmediate": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/sha.js": {
+ "version": "2.4.11",
+ "inBundle": true,
+ "license": "(MIT AND BSD-3-Clause)",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/side-channel": {
+ "version": "1.0.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/stream-browserify": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.4",
+ "readable-stream": "^3.5.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/stream-http": {
+ "version": "3.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/timers-browserify": {
+ "version": "2.0.12",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "setimmediate": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/tty-browserify": {
+ "version": "0.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/url": {
+ "version": "0.11.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.12.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/util": {
+ "version": "0.12.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/which-typed-array": {
+ "version": "1.1.13",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/xtend": {
+ "version": "4.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/pac-proxy-agent": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz",
+ "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.6",
+ "pac-resolver": "^7.0.1",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/pac-resolver": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "degenerator": "^5.0.0",
+ "netmask": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/proxy-agent": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
+ "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.6",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.1.0",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/puppeteer": {
+ "version": "24.4.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.4.0.tgz",
+ "integrity": "sha512-E4JhJzjS8AAI+6N/b+Utwarhz6zWl3+MR725fal+s3UlOlX2eWdsvYYU+Q5bXMjs9eZEGkNQroLkn7j11s2k1Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@puppeteer/browsers": "2.8.0",
+ "chromium-bidi": "2.1.2",
+ "cosmiconfig": "^9.0.0",
+ "devtools-protocol": "0.0.1413902",
+ "puppeteer-core": "24.4.0",
+ "typed-query-selector": "^2.12.0"
+ },
+ "bin": {
+ "puppeteer": "lib/cjs/puppeteer/node/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/puppeteer-core": {
+ "version": "24.4.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.4.0.tgz",
+ "integrity": "sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@puppeteer/browsers": "2.8.0",
+ "chromium-bidi": "2.1.2",
+ "debug": "^4.4.0",
+ "devtools-protocol": "0.0.1413902",
+ "typed-query-selector": "^2.12.0",
+ "ws": "^8.18.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-error-boundary": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz",
+ "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "react": ">=16.13.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz",
+ "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^9.0.5",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/streamx": {
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
+ "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ },
+ "optionalDependencies": {
+ "bare-events": "^2.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz",
+ "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ },
+ "optionalDependencies": {
+ "bare-fs": "^4.0.1",
+ "bare-path": "^3.0.0"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/typed-query-selector": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
+ "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.24.2",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
+ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/tests/react-meteor-accounts-harness/package.json b/tests/react-meteor-accounts-harness/package.json
new file mode 100644
index 00000000..aea00a60
--- /dev/null
+++ b/tests/react-meteor-accounts-harness/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "react-meteor-accounts-harness",
+ "private": true,
+ "scripts": {
+ "test": "METEOR_PACKAGE_DIRS=../../packages meteor test-packages react-meteor-accounts --driver-package test-in-browser",
+ "test:ci": "METEOR_PACKAGE_DIRS=../../packages meteor npx mtest --package react-meteor-accounts --once"
+ },
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@testing-library/react": "16.2.0",
+ "@testing-library/react-hooks": "^7.0.2",
+ "meteor-node-stubs": "^1.2.13",
+ "react": "18.3.1",
+ "react-dom": "18.3.1"
+ },
+ "devDependencies": {
+ "puppeteer": "^24.4.0"
+ }
+}
diff --git a/tests/react-meteor-data-harness/.meteor/.finished-upgraders b/tests/react-meteor-data-harness/.meteor/.finished-upgraders
index dacc2c0d..c07b6ff7 100644
--- a/tests/react-meteor-data-harness/.meteor/.finished-upgraders
+++ b/tests/react-meteor-data-harness/.meteor/.finished-upgraders
@@ -11,3 +11,9 @@ notices-for-facebook-graph-api-2
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/tests/react-meteor-data-harness/.meteor/.id b/tests/react-meteor-data-harness/.meteor/.id
index 184d350a..ae46412b 100644
--- a/tests/react-meteor-data-harness/.meteor/.id
+++ b/tests/react-meteor-data-harness/.meteor/.id
@@ -4,4 +4,4 @@
# - ensuring you don't accidentally deploy one app on top of another
# - providing package authors with aggregated statistics
-193gboe1tus04g9q8fl2
+xi4ob9zualf.vxwytungbgj
diff --git a/tests/react-meteor-data-harness/.meteor/packages b/tests/react-meteor-data-harness/.meteor/packages
index 5414f54c..bf663eda 100644
--- a/tests/react-meteor-data-harness/.meteor/packages
+++ b/tests/react-meteor-data-harness/.meteor/packages
@@ -4,22 +4,16 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
-meteor-base # Packages every Meteor app needs to have
-mobile-experience # Packages for a great mobile UX
-mongo # The database Meteor supports right now
-blaze-html-templates # Compile .html files into Meteor Blaze views
-reactive-var # Reactive variable for tracker
-jquery # Helpful client-side library
-tracker # Meteor's client-side reactive programming library
+meteor-base@1.5.2 # Packages every Meteor app needs to have
+mobile-experience@1.1.2 # Packages for a great mobile UX
+mongo@2.1.0 # The database Meteor supports right now
+static-html@1.4.0 # Define static page content in .html files
+reactive-var@1.0.13 # Reactive variable for tracker
+tracker@1.3.4 # Meteor's client-side reactive programming library
-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
-
-autopublish # Publish all data to the clients (for prototyping)
-insecure # Allow all DB writes from clients (for prototyping)
-tinytest
-test-helpers
-test-in-browser
-react-meteor-data
+standard-minifier-css@1.9.3 # CSS minifier run for production mode
+standard-minifier-js@3.0.0 # JS minifier run for production mode
+es5-shim@4.8.1 # ECMAScript 5 compatibility for older browsers
+ecmascript@0.16.10 # Enable ECMAScript2015+ syntax in app code
+typescript@5.6.3 # Enable TypeScript syntax in .ts and .tsx modules
+shell-server@0.6.1 # Server-side component of the `meteor shell` command
diff --git a/tests/react-meteor-data-harness/.meteor/release b/tests/react-meteor-data-harness/.meteor/release
index 4fd7a934..5f228927 100644
--- a/tests/react-meteor-data-harness/.meteor/release
+++ b/tests/react-meteor-data-harness/.meteor/release
@@ -1 +1 @@
-METEOR@1.3
+METEOR@3.1.2
diff --git a/tests/react-meteor-data-harness/.meteor/versions b/tests/react-meteor-data-harness/.meteor/versions
index 7c7f6ced..b241e972 100644
--- a/tests/react-meteor-data-harness/.meteor/versions
+++ b/tests/react-meteor-data-harness/.meteor/versions
@@ -1,77 +1,64 @@
-allow-deny@1.0.2
-autopublish@1.0.5
-autoupdate@1.2.6
-babel-compiler@6.5.2
-babel-runtime@0.1.6
-base64@1.0.6
-binary-heap@1.0.6
-blaze@2.1.5
-blaze-html-templates@1.0.2
-blaze-tools@1.0.6
-boilerplate-generator@1.0.6
-bootstrap@1.0.1
-caching-compiler@1.0.2
-caching-html-compiler@1.0.4
-callback-hook@1.0.6
-check@1.1.2
-ddp@1.2.3
-ddp-client@1.2.3
-ddp-common@1.2.3
-ddp-server@1.2.4
-deps@1.0.10
-diff-sequence@1.0.3
-ecmascript@0.4.1
-ecmascript-runtime@0.2.8
-ejson@1.0.9
-es5-shim@4.5.8
-fastclick@1.0.9
-geojson-utils@1.0.6
-hot-code-push@1.0.2
-html-tools@1.0.7
-htmljs@1.0.7
-http@1.1.3
-id-map@1.0.5
-insecure@1.0.5
-jquery@1.11.6
-launch-screen@1.0.8
-livedata@1.0.16
-logging@1.0.10
-meteor@1.1.12
-meteor-base@1.0.2
-minifier-css@1.1.9
-minifier-js@1.1.9
-minimongo@1.0.12
-mobile-experience@1.0.2
-mobile-status-bar@1.0.10
-modules@0.5.1
-modules-runtime@0.6.1
-mongo@1.1.5
-mongo-id@1.0.2
-npm-mongo@1.4.41
-observe-sequence@1.0.9
-ordered-dict@1.0.5
-promise@0.6.5
-random@1.0.7
-react-meteor-data@0.2.8
-reactive-dict@1.1.5
-reactive-var@1.0.7
-reload@1.1.6
-retry@1.0.5
-routepolicy@1.0.8
-session@1.1.3
-spacebars@1.0.9
-spacebars-compiler@1.0.9
-standard-minifier-css@1.0.4
-standard-minifier-js@1.0.4
-templating@1.1.7
-templating-tools@1.0.2
-test-helpers@1.0.7
-test-in-browser@1.0.10
-tinytest@1.0.8
-tmeasday:check-npm-versions@0.3.2
-tracker@1.0.11
-ui@1.0.9
-underscore@1.0.6
-url@1.0.7
-webapp@1.2.6
-webapp-hashing@1.0.7
+allow-deny@2.1.0
+autoupdate@2.0.0
+babel-compiler@7.11.3
+babel-runtime@1.5.2
+base64@1.0.13
+binary-heap@1.0.12
+boilerplate-generator@2.0.0
+caching-compiler@2.0.1
+callback-hook@1.6.0
+check@1.4.4
+core-runtime@1.0.0
+ddp@1.4.2
+ddp-client@3.1.0
+ddp-common@1.4.4
+ddp-server@3.1.0
+diff-sequence@1.1.3
+dynamic-import@0.7.4
+ecmascript@0.16.10
+ecmascript-runtime@0.8.3
+ecmascript-runtime-client@0.12.2
+ecmascript-runtime-server@0.11.1
+ejson@1.1.4
+es5-shim@4.8.1
+facts-base@1.0.2
+fetch@0.1.5
+geojson-utils@1.0.12
+hot-code-push@1.0.5
+id-map@1.2.0
+inter-process-messaging@0.1.2
+launch-screen@2.0.1
+logging@1.3.5
+meteor@2.1.0
+meteor-base@1.5.2
+minifier-css@2.0.0
+minifier-js@3.0.1
+minimongo@2.0.2
+mobile-experience@1.1.2
+mobile-status-bar@1.1.1
+modern-browsers@0.2.0
+modules@0.20.3
+modules-runtime@0.13.2
+mongo@2.1.0
+mongo-decimal@0.2.0
+mongo-dev-server@1.1.1
+mongo-id@1.0.9
+npm-mongo@6.10.2
+ordered-dict@1.2.0
+promise@1.0.0
+random@1.2.2
+react-fast-refresh@0.2.9
+reactive-var@1.0.13
+reload@1.3.2
+retry@1.1.1
+routepolicy@1.1.2
+shell-server@0.6.1
+socket-stream-client@0.6.0
+standard-minifier-css@1.9.3
+standard-minifier-js@3.0.0
+static-html@1.4.0
+static-html-tools@1.0.0
+tracker@1.3.4
+typescript@5.6.3
+webapp@2.0.5
+webapp-hashing@1.1.2
diff --git a/tests/react-meteor-data-harness/package-lock.json b/tests/react-meteor-data-harness/package-lock.json
new file mode 100644
index 00000000..5ce196fd
--- /dev/null
+++ b/tests/react-meteor-data-harness/package-lock.json
@@ -0,0 +1,2731 @@
+{
+ "name": "harness",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "harness",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@testing-library/react": "16.2.0",
+ "meteor-node-stubs": "^1.2.13",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "react-test-renderer": "18.3.1"
+ },
+ "devDependencies": {
+ "puppeteer": "^24.4.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz",
+ "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@puppeteer/browsers": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.8.0.tgz",
+ "integrity": "sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "extract-zip": "^2.0.1",
+ "progress": "^2.0.3",
+ "proxy-agent": "^6.5.0",
+ "semver": "^7.7.1",
+ "tar-fs": "^3.0.8",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "browsers": "lib/cjs/main-cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
+ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/react": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz",
+ "integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": "^10.0.0",
+ "@types/react": "^18.0.0 || ^19.0.0",
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/node": {
+ "version": "22.13.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
+ "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
+ "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/bare-events": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true
+ },
+ "node_modules/bare-fs": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz",
+ "integrity": "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-events": "^2.0.0",
+ "bare-path": "^3.0.0",
+ "bare-stream": "^2.0.0"
+ },
+ "engines": {
+ "bare": ">=1.7.0"
+ }
+ },
+ "node_modules/bare-os": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.0.tgz",
+ "integrity": "sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "bare": ">=1.14.0"
+ }
+ },
+ "node_modules/bare-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
+ "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "bare-os": "^3.0.1"
+ }
+ },
+ "node_modules/bare-stream": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz",
+ "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "streamx": "^2.21.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*",
+ "bare-events": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ },
+ "bare-events": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/basic-ftp": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
+ "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/chalk/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/chalk/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chromium-bidi": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-2.1.2.tgz",
+ "integrity": "sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "mitt": "^3.0.1",
+ "zod": "^3.24.1"
+ },
+ "peerDependencies": {
+ "devtools-protocol": "*"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/devtools-protocol": {
+ "version": "0.0.1413902",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1413902.tgz",
+ "integrity": "sha512-yRtvFD8Oyk7C9Os3GmnFZLu53yAfsnyw1s+mLmHHUK0GQEc9zthHWvS1r67Zqzm5t7v56PILHIVZ7kmFMaL2yQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-uri": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz",
+ "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.2",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/meteor-node-stubs": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.13.tgz",
+ "integrity": "sha512-K7uaHEyg+TQEMtYOnyt+/ECtg48xYowo0ErnvOg59ffe6WXwD7gdfp0EK1DhOG6lpb0P4S+OoFf1eUaTaNOleg==",
+ "bundleDependencies": [
+ "@meteorjs/crypto-browserify",
+ "assert",
+ "browserify-zlib",
+ "buffer",
+ "console-browserify",
+ "constants-browserify",
+ "domain-browser",
+ "events",
+ "https-browserify",
+ "os-browserify",
+ "path-browserify",
+ "process",
+ "punycode",
+ "querystring-es3",
+ "readable-stream",
+ "stream-browserify",
+ "stream-http",
+ "string_decoder",
+ "timers-browserify",
+ "tty-browserify",
+ "url",
+ "util",
+ "vm-browserify"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@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.6.1",
+ "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.4",
+ "util": "^0.12.5",
+ "vm-browserify": "^1.1.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/@meteorjs/crypto-browserify": {
+ "version": "3.12.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/@meteorjs/crypto-browserify/node_modules/hash-base": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/asn1.js": {
+ "version": "4.10.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/assert": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/base64-js": {
+ "version": "1.5.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/bn.js": {
+ "version": "5.2.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/brorand": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-des": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-rsa": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign": {
+ "version": "4.2.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/bn.js": {
+ "version": "5.2.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/hash-base": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/buffer": {
+ "version": "5.7.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/call-bind": {
+ "version": "1.0.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/cipher-base": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/console-browserify": {
+ "version": "1.2.0",
+ "inBundle": true
+ },
+ "node_modules/meteor-node-stubs/node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/core-util-is": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-hash": {
+ "version": "1.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/create-hmac": {
+ "version": "1.1.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/define-data-property": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/define-properties": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/des.js": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/domain-browser": {
+ "version": "4.23.0",
+ "inBundle": true,
+ "license": "Artistic-2.0",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/elliptic": {
+ "version": "6.6.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/es-define-property": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/es-errors": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/events": {
+ "version": "3.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/for-each": {
+ "version": "0.3.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/function-bind": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/gopd": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-proto": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-symbols": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hash-base": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hash.js": {
+ "version": "1.1.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hasown": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/https-browserify": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/ieee754": {
+ "version": "1.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/meteor-node-stubs/node_modules/inherits": {
+ "version": "2.0.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-arguments": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-callable": {
+ "version": "1.2.7",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-nan": {
+ "version": "1.3.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/is-typed-array": {
+ "version": "1.1.12",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/isarray": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/md5.js": {
+ "version": "1.3.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/meteor-node-stubs/node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/object-inspect": {
+ "version": "1.13.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/object-is": {
+ "version": "1.1.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/object-keys": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/object.assign": {
+ "version": "4.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/os-browserify": {
+ "version": "0.3.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/pako": {
+ "version": "1.0.11",
+ "inBundle": true,
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/meteor-node-stubs/node_modules/parse-asn1": {
+ "version": "5.1.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/parse-asn1/node_modules/hash-base": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/path-browserify": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/process": {
+ "version": "0.11.10",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/punycode": {
+ "version": "1.4.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/qs": {
+ "version": "6.13.0",
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "inBundle": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/randombytes": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/randomfill": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/ripemd160": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/set-function-length": {
+ "version": "1.2.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/setimmediate": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/sha.js": {
+ "version": "2.4.11",
+ "inBundle": true,
+ "license": "(MIT AND BSD-3-Clause)",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/side-channel": {
+ "version": "1.0.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/stream-browserify": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.4",
+ "readable-stream": "^3.5.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/stream-http": {
+ "version": "3.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/timers-browserify": {
+ "version": "2.0.12",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "setimmediate": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/tty-browserify": {
+ "version": "0.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/url": {
+ "version": "0.11.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.12.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/util": {
+ "version": "0.12.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/meteor-node-stubs/node_modules/which-typed-array": {
+ "version": "1.1.13",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/meteor-node-stubs/node_modules/xtend": {
+ "version": "4.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/pac-proxy-agent": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz",
+ "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.6",
+ "pac-resolver": "^7.0.1",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/pac-resolver": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "degenerator": "^5.0.0",
+ "netmask": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/proxy-agent": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
+ "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.6",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.1.0",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/puppeteer": {
+ "version": "24.4.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.4.0.tgz",
+ "integrity": "sha512-E4JhJzjS8AAI+6N/b+Utwarhz6zWl3+MR725fal+s3UlOlX2eWdsvYYU+Q5bXMjs9eZEGkNQroLkn7j11s2k1Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@puppeteer/browsers": "2.8.0",
+ "chromium-bidi": "2.1.2",
+ "cosmiconfig": "^9.0.0",
+ "devtools-protocol": "0.0.1413902",
+ "puppeteer-core": "24.4.0",
+ "typed-query-selector": "^2.12.0"
+ },
+ "bin": {
+ "puppeteer": "lib/cjs/puppeteer/node/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/puppeteer-core": {
+ "version": "24.4.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.4.0.tgz",
+ "integrity": "sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@puppeteer/browsers": "2.8.0",
+ "chromium-bidi": "2.1.2",
+ "debug": "^4.4.0",
+ "devtools-protocol": "0.0.1413902",
+ "typed-query-selector": "^2.12.0",
+ "ws": "^8.18.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
+ },
+ "node_modules/react-shallow-renderer": {
+ "version": "16.15.0",
+ "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
+ "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-test-renderer": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
+ "integrity": "sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-is": "^18.3.1",
+ "react-shallow-renderer": "^16.15.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-test-renderer/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz",
+ "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^9.0.5",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/streamx": {
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
+ "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ },
+ "optionalDependencies": {
+ "bare-events": "^2.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz",
+ "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ },
+ "optionalDependencies": {
+ "bare-fs": "^4.0.1",
+ "bare-path": "^3.0.0"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/typed-query-selector": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
+ "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.24.2",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
+ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/tests/react-meteor-data-harness/package.json b/tests/react-meteor-data-harness/package.json
index 8caeb4c1..fc656b0a 100644
--- a/tests/react-meteor-data-harness/package.json
+++ b/tests/react-meteor-data-harness/package.json
@@ -1,13 +1,19 @@
{
- "name": "react-meteor-data-harness",
+ "name": "harness",
"private": true,
"scripts": {
- "test": "PACKAGE_DIRS=../../packages meteor test --driver-package test-in-browser"
+ "test": "METEOR_PACKAGE_DIRS=../../packages meteor test-packages react-meteor-data --driver-package test-in-browser",
+ "test:ci": "METEOR_PACKAGE_DIRS=../../packages meteor npx mtest --package react-meteor-data --once"
},
"dependencies": {
- "meteor-node-stubs": "~0.2.0",
- "react": "^15.0.0",
- "react-addons-pure-render-mixin": "^15.0.0",
- "react-dom": "^15.0.0"
+ "@babel/runtime": "^7.26.10",
+ "@testing-library/react": "16.2.0",
+ "meteor-node-stubs": "^1.2.13",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "react-test-renderer": "18.3.1"
+ },
+ "devDependencies": {
+ "puppeteer": "^24.4.0"
}
}
diff --git a/tests/react-meteor-data-harness/react-meteor-data.tests.jsx b/tests/react-meteor-data-harness/react-meteor-data.tests.jsx
deleted file mode 100644
index 46dad779..00000000
--- a/tests/react-meteor-data-harness/react-meteor-data.tests.jsx
+++ /dev/null
@@ -1,308 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-getInnerHtml = function (elem) {
- // clean up elem.innerHTML and strip data-reactid attributes too
- return canonicalizeHtml(elem.innerHTML).replace(/ data-reactroot=".*?"/g, '');
-};
-
-if (Meteor.isClient) {
- Tinytest.add('react-meteor-data - basic track', function (test) {
- var div = document.createElement("DIV");
-
- var x = new ReactiveVar('aaa');
-
- var Foo = React.createClass({
- mixins: [ReactMeteorData],
- getMeteorData() {
- return {
- x: x.get()
- };
- },
- render() {
- return {this.data.x};
- }
- });
-
- ReactDOM.render(, div);
- test.equal(getInnerHtml(div), 'aaa');
-
- x.set('bbb');
- Tracker.flush({_throwFirstError: true});
- test.equal(getInnerHtml(div), 'bbb');
-
- test.equal(x._numListeners(), 1);
-
- ReactDOM.unmountComponentAtNode(div);
-
- test.equal(x._numListeners(), 0);
- });
-
- // Make sure that calling ReactDOM.render() from an autorun doesn't
- // associate that autorun with the mixin's autorun. When autoruns are
- // nested, invalidating the outer one stops the inner one, unless
- // Tracker.nonreactive is used. This test tests for the use of
- // Tracker.nonreactive around the mixin's autorun.
- Tinytest.add('react-meteor-data - render in autorun', function (test) {
- var div = document.createElement("DIV");
-
- var x = new ReactiveVar('aaa');
-
- var Foo = React.createClass({
- mixins: [ReactMeteorData],
- getMeteorData() {
- return {
- x: x.get()
- };
- },
- render() {
- return {this.data.x};
- }
- });
-
- Tracker.autorun(function (c) {
- ReactDOM.render(, div);
- // Stopping this autorun should not affect the mixin's autorun.
- c.stop();
- });
- test.equal(getInnerHtml(div), 'aaa');
-
- x.set('bbb');
- Tracker.flush({_throwFirstError: true});
- test.equal(getInnerHtml(div), 'bbb');
-
- ReactDOM.unmountComponentAtNode(div);
- });
-
- Tinytest.add('react-meteor-data - track based on props and state', function (test) {
- var div = document.createElement("DIV");
-
- var xs = [new ReactiveVar('aaa'),
- new ReactiveVar('bbb'),
- new ReactiveVar('ccc')];
-
- var Foo = React.createClass({
- mixins: [ReactMeteorData],
- getMeteorData() {
- return {
- x: xs[this.state.m + this.props.n].get()
- };
- },
- getInitialState() {
- return { m: 0 };
- },
- render() {
- return {this.data.x};
- }
- });
-
- var comp = ReactDOM.render(, div);
-
- test.equal(getInnerHtml(div), 'aaa');
- xs[0].set('AAA');
- test.equal(getInnerHtml(div), 'aaa');
- Tracker.flush({_throwFirstError: true});
- test.equal(getInnerHtml(div), 'AAA');
-
- {
- let comp2 = ReactDOM.render(, div);
- test.isTrue(comp === comp2);
- }
-
- test.equal(getInnerHtml(div), 'bbb');
- xs[1].set('BBB');
- Tracker.flush({_throwFirstError: true});
- test.equal(getInnerHtml(div), 'BBB');
-
- comp.setState({m: 1});
- test.equal(getInnerHtml(div), 'ccc');
- xs[2].set('CCC');
- Tracker.flush({_throwFirstError: true});
- test.equal(getInnerHtml(div), 'CCC');
-
- ReactDOM.render(, div);
- comp.setState({m: 0});
- test.equal(getInnerHtml(div), 'AAA');
-
- ReactDOM.unmountComponentAtNode(div);
- });
-
- function waitFor(func, callback) {
- Tracker.autorun(function (c) {
- if (func()) {
- c.stop();
- callback();
- }
- });
- };
-
- testAsyncMulti('react-meteor-data - resubscribe', [
- function (test, expect) {
- var self = this;
- self.div = document.createElement("DIV");
- self.collection = new Mongo.Collection("react-meteor-data-mixin-coll");
- self.num = new ReactiveVar(1);
- self.someOtherVar = new ReactiveVar('foo');
- self.Foo = React.createClass({
- mixins: [ReactMeteorData],
- getMeteorData() {
- this.handle =
- Meteor.subscribe("react-meteor-data-mixin-sub",
- self.num.get());
-
- return {
- v: self.someOtherVar.get(),
- docs: self.collection.find().fetch()
- };
- },
- render() {
- return {
- _.map(this.data.docs, (doc) => {doc._id})
- }
;
- }
- });
-
- self.component = ReactDOM.render(, self.div);
- test.equal(getInnerHtml(self.div), '');
-
- var handle = self.component.handle;
- test.isFalse(handle.ready());
-
- waitFor(() => handle.ready(),
- expect());
- },
- function (test, expect) {
- var self = this;
- test.isTrue(self.component.handle.ready());
- test.equal(getInnerHtml(self.div), 'id1
');
-
- self.someOtherVar.set('bar');
- self.oldHandle1 = self.component.handle;
-
- // can't call Tracker.flush() here (we are in a Tracker.flush already)
- Tracker.afterFlush(expect());
- },
- function (test, expect) {
- var self = this;
- var oldHandle = self.oldHandle1;
- var newHandle = self.component.handle;
- test.notEqual(oldHandle, newHandle); // new handle
- test.equal(newHandle.subscriptionId, oldHandle.subscriptionId); // same sub
- test.isTrue(newHandle.ready()); // doesn't become unready
- // no change to the content
- test.equal(getInnerHtml(self.div), 'id1
');
-
- // ok, now change the `num` argument to the subscription
- self.num.set(2);
- self.oldHandle2 = newHandle;
- Tracker.afterFlush(expect());
- },
- function (test, expect) {
- var self = this;
- // data is still there
- test.equal(getInnerHtml(self.div), 'id1
');
- // handle is no longer ready
- var handle = self.component.handle;
- test.isFalse(handle.ready());
- // different sub ID
- test.isTrue(self.oldHandle2.subscriptionId);
- test.isTrue(handle.subscriptionId);
- test.notEqual(handle.subscriptionId, self.oldHandle2.subscriptionId);
-
- waitFor(() => handle.ready(),
- expect());
- },
- function (test, expect) {
- var self = this;
- // now we see the new data! (and maybe the old data, because
- // when a subscription goes away, its data doesn't disappear right
- // away; the server has to tell the client which documents or which
- // properties to remove, and this is not easy to wait for either; see
- // https://github.com/meteor/meteor/issues/2440)
- test.equal(getInnerHtml(self.div).replace('id1', ''),
- 'id2
');
-
- self.someOtherVar.set('baz');
- self.oldHandle3 = self.component.handle;
-
- Tracker.afterFlush(expect());
- },
- function (test, expect) {
- var self = this;
- test.equal(self.component.data.v, 'baz');
- test.notEqual(self.oldHandle3, self.component.handle);
- test.equal(self.oldHandle3.subscriptionId,
- self.component.handle.subscriptionId);
- test.isTrue(self.component.handle.ready());
- },
- function (test, expect) {
- ReactDOM.unmountComponentAtNode(this.div);
- // break out of flush time, so we don't call the test's
- // onComplete from within Tracker.flush
- Meteor.defer(expect());
- }
- ]);
-
- Tinytest.add(
- "react-meteor-data - can't call setState in getMeteorData",
- function (test) {
- var Foo = React.createClass({
- mixins: [ReactMeteorData],
- getMeteorData() {
- this.setState({bar: 1});
- return {};
- },
- render() {
- return ;
- }
- });
-
- test.throws(function () {
- ReactDOM.render(, document.createElement('div'));
- }, /Can't call `setState`/);
- });
-
- Tinytest.add(
- "react-meteor-data - print warning if return cursor from getMeteorData",
- function (test) {
- var coll = new Mongo.Collection(null);
- var ComponentWithCursor = React.createClass({
- mixins: [ReactMeteorData],
- getMeteorData() {
- return {
- theCursor: coll.find()
- };
- },
- render() {
- return ;
- }
- });
-
- // Check if we print a warning to console about props
- // You can be sure this test is correct because we have an identical one in
- // react-runtime-dev
- let warning;
- try {
- var oldWarn = console.warn;
- console.warn = function specialWarn(message) {
- warning = message;
- };
-
- var div = document.createElement("DIV");
- ReactDOM.render(, div);
-
- test.matches(warning, /cursor from getMeteorData/);
- } finally {
- console.warn = oldWarn;
- }
- });
-
-} else {
- Meteor.publish("react-meteor-data-mixin-sub", function (num) {
- Meteor.defer(() => { // because subs are blocking
- this.added("react-meteor-data-mixin-coll", 'id'+num, {});
- this.ready();
- });
-});
-
-}
\ No newline at end of file
diff --git a/tests/react-template-helper-harness/.meteor/packages b/tests/react-template-helper-harness/.meteor/packages
deleted file mode 100644
index 5a4beba0..00000000
--- a/tests/react-template-helper-harness/.meteor/packages
+++ /dev/null
@@ -1,25 +0,0 @@
-# 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-base # Packages every Meteor app needs to have
-mobile-experience # Packages for a great mobile UX
-mongo # The database Meteor supports right now
-blaze-html-templates # Compile .html files into Meteor Blaze views
-reactive-var # Reactive variable for tracker
-jquery # Helpful client-side library
-tracker # Meteor's client-side reactive programming library
-
-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
-
-autopublish # Publish all data to the clients (for prototyping)
-insecure # Allow all DB writes from clients (for prototyping)
-tinytest
-test-helpers
-test-in-browser
-react-template-helper
diff --git a/tests/react-template-helper-harness/.meteor/release b/tests/react-template-helper-harness/.meteor/release
deleted file mode 100644
index 4fd7a934..00000000
--- a/tests/react-template-helper-harness/.meteor/release
+++ /dev/null
@@ -1 +0,0 @@
-METEOR@1.3
diff --git a/tests/react-template-helper-harness/.meteor/versions b/tests/react-template-helper-harness/.meteor/versions
deleted file mode 100644
index 0aaf4039..00000000
--- a/tests/react-template-helper-harness/.meteor/versions
+++ /dev/null
@@ -1,77 +0,0 @@
-allow-deny@1.0.2
-autopublish@1.0.5
-autoupdate@1.2.6
-babel-compiler@6.5.2
-babel-runtime@0.1.6
-base64@1.0.6
-binary-heap@1.0.6
-blaze@2.1.5
-blaze-html-templates@1.0.2
-blaze-tools@1.0.6
-boilerplate-generator@1.0.6
-bootstrap@1.0.1
-caching-compiler@1.0.2
-caching-html-compiler@1.0.4
-callback-hook@1.0.6
-check@1.1.2
-ddp@1.2.3
-ddp-client@1.2.3
-ddp-common@1.2.3
-ddp-server@1.2.4
-deps@1.0.10
-diff-sequence@1.0.3
-ecmascript@0.4.1
-ecmascript-runtime@0.2.8
-ejson@1.0.9
-es5-shim@4.5.8
-fastclick@1.0.9
-geojson-utils@1.0.6
-hot-code-push@1.0.2
-html-tools@1.0.7
-htmljs@1.0.7
-http@1.1.3
-id-map@1.0.5
-insecure@1.0.5
-jquery@1.11.6
-launch-screen@1.0.8
-livedata@1.0.16
-logging@1.0.10
-meteor@1.1.12
-meteor-base@1.0.2
-minifier-css@1.1.9
-minifier-js@1.1.9
-minimongo@1.0.12
-mobile-experience@1.0.2
-mobile-status-bar@1.0.10
-modules@0.5.1
-modules-runtime@0.6.1
-mongo@1.1.5
-mongo-id@1.0.2
-npm-mongo@1.4.41
-observe-sequence@1.0.9
-ordered-dict@1.0.5
-promise@0.6.5
-random@1.0.7
-react-template-helper@0.2.8
-reactive-dict@1.1.5
-reactive-var@1.0.7
-reload@1.1.6
-retry@1.0.5
-routepolicy@1.0.8
-session@1.1.3
-spacebars@1.0.9
-spacebars-compiler@1.0.9
-standard-minifier-css@1.0.4
-standard-minifier-js@1.0.4
-templating@1.1.7
-templating-tools@1.0.2
-test-helpers@1.0.7
-test-in-browser@1.0.10
-tinytest@1.0.8
-tmeasday:check-npm-versions@0.3.2
-tracker@1.0.11
-ui@1.0.9
-underscore@1.0.6
-url@1.0.7
-webapp@1.2.6
-webapp-hashing@1.0.7
diff --git a/tests/react-template-helper-harness/client/react-template-helper.tests.jsx b/tests/react-template-helper-harness/client/react-template-helper.tests.jsx
deleted file mode 100644
index c9ac38d1..00000000
--- a/tests/react-template-helper-harness/client/react-template-helper.tests.jsx
+++ /dev/null
@@ -1,131 +0,0 @@
-import {
- OneReactComponent,
- TwoReactComponent,
-} from '../imports/test-components.jsx';
-
-import '../imports/test-templates.js';
-
-// Let us use `{{> ReactWithoutCompileTimeSiblingRestriction ...}}` inside
-// templates even not as the only thing inside their parent element. This
-// lets us test the run-time sibling detection code in this package
-// (that will be unnecessary once 1.1.1 is released).
-Template.ReactWithoutCompileTimeSiblingRestriction = Template.React;
-
-if (Meteor.isClient) {
- Tinytest.add(
- "react-template-helper-tests - must pass `component` into `{{> React}}`",
- function (test) {
- test.throws(function () {
- renderToDiv(Template.ReactTemplateWithoutComponent);
- Tracker.flush({_throwFirstError: true});
- }, /`{{> React ... }}` missing `component`/);
- });
-
-Tinytest.add(
- "react-template-helper-tests - rendering react component with sibling gives helpful error",
- function (test) {
- var fails = function (tmpl) {
- test.throws(function () {
- renderToDiv(tmpl);
- Tracker.flush({_throwFirstError: true});
- }, /EmptyComponentTemplateWithoutContainerElement.*EmptyReactComponent.*only child/);
- };
-
- fails(Template.UsesEmptyComponentTemplateWithSiblingElement);
- fails(Template.UsesEmptyComponentTemplateWithSiblingTextNode);
- });
-
-Tinytest.add(
- "react-template-helper-tests - pass props into `{{> React}}`",
- function (test) {
- var tmpl = Template.UsesTextReactComponent;
- var text = new ReactiveVar("one");
- tmpl.helpers({
- text() {
- return text.get();
- }
- });
-
- var div = renderToDiv(tmpl);
- Tracker.flush({_throwFirstError: true});
- test.equal(canonicalizeHtml($(div).text()), "one");
- text.set("two");
- Tracker.flush({_throwFirstError: true});
- test.equal(canonicalizeHtml($(div).text()), "two");
- });
-
-Tinytest.add(
- "react-template-helper-tests - pass callbacks into `{{> React}}`",
- function (test) {
- var tmpl = Template.UsesClickableReactComponent;
- var reactiveNum = new ReactiveVar(1);
- var numWhenClicked = 0;
- tmpl.helpers({
- onClick: function () {
- // intentionally call `get` outside of the callback function inside
- // so that we test replacing the callback with a different one.
- var num = reactiveNum.get();
- return function () {
- numWhenClicked = num;
- }
- }
- });
-
- var div = renderToDiv(tmpl);
- Tracker.flush({_throwFirstError: true});
- document.body.appendChild(div);
-
- test.equal(numWhenClicked, 0);
- clickIt(div.querySelector(".click-me"));
- test.equal(numWhenClicked, 1);
- reactiveNum.set(2);
- Tracker.flush({_throwFirstError: true});
- clickIt(div.querySelector(".click-me"));
- test.equal(numWhenClicked, 2);
-
- document.body.removeChild(div);
- });
-
-Tinytest.add(
- "react-template-helper-tests - pass changing component to `{{> React}}`",
- function (test) {
- var tmpl = Template.UsesGenericComponent;
-
- var component = new ReactiveVar(OneReactComponent);
- tmpl.helpers({
- component() {
- return component.get();
- }
- });
-
- var div = renderToDiv(tmpl);
-
- Tracker.flush({_throwFirstError: true});
- test.equal($(div).text(), "One");
-
- component.set(TwoReactComponent);
- Tracker.flush({_throwFirstError: true});
- test.equal($(div).text(), "Two");
- });
-
-Tinytest.add(
- "react-template-helper-tests - component unmount",
- function (test) {
- var tmpl = Template.UsesUnmountableComponent;
- var unmounted = false;
-
- tmpl.helpers({
- onUnmounted() {
- return function () {
- unmounted = true;
- }
- }
- });
-
- var div = renderToDiv(tmpl);
- Tracker.flush({_throwFirstError: true});
- test.equal(unmounted, false);
- $(div).remove();
- test.equal(unmounted, true);
- });
-}
diff --git a/tests/react-template-helper-harness/imports/test-components.jsx b/tests/react-template-helper-harness/imports/test-components.jsx
deleted file mode 100644
index 8a1266ec..00000000
--- a/tests/react-template-helper-harness/imports/test-components.jsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import React from 'react';
-
-const EmptyReactComponent = React.createClass({
- render() {
- return
- }
-});
-
-const TextReactComponent = React.createClass({
- propTypes: {
- text: React.PropTypes.string.isRequired
- },
- render() {
- return {this.props.text}
- }
-});
-
-const ClickableReactComponent = React.createClass({
- propTypes: {
- onClick: React.PropTypes.func.isRequired
- },
- render() {
- return ;
- }
-});
-
-const OneReactComponent = React.createClass({
- render() {
- return One
;
- }
-});
-
-const TwoReactComponent = React.createClass({
- render() {
- return Two
;
- }
-});
-
-const UnmountableReactComponent = React.createClass({
- propTypes: {
- onUnmounted: React.PropTypes.func.isRequired
- },
- render() {
- return ;
- },
- componentWillUnmount() {
- this.props.onUnmounted();
- }
-});
-
-export {
- EmptyReactComponent,
- TextReactComponent,
- ClickableReactComponent,
- OneReactComponent,
- TwoReactComponent,
- UnmountableReactComponent
-};
\ No newline at end of file
diff --git a/tests/react-template-helper-harness/imports/test-templates.html b/tests/react-template-helper-harness/imports/test-templates.html
deleted file mode 100644
index dcc3fea0..00000000
--- a/tests/react-template-helper-harness/imports/test-templates.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
- {{> ReactWithoutCompileTimeSiblingRestriction}}
-
-
-
- {{> ReactWithoutCompileTimeSiblingRestriction component=emptyComponent}}
-
-
-
-
-
-
Sibling
- {{> EmptyComponentTemplateWithoutContainerElement }}
-
-
-
-
-
- Sibling
- {{> EmptyComponentTemplateWithoutContainerElement }}
-
-
-
-
-
- {{#if sibling}}
-
Sibling
- {{/if}}
- {{> EmptyComponentTemplateWithoutContainerElement }}
-
-
-
-
-
- {{> React component=textComponent text=text}}
-
-
-
-
-
- {{> React component=clickableComponent onClick=onClick}}
-
-
-
-
-
- {{> React component=component}}
-
-
-
-
-
- {{> React component=unmountableComponent onUnmounted=onUnmounted}}
-
-
-
diff --git a/tests/react-template-helper-harness/imports/test-templates.js b/tests/react-template-helper-harness/imports/test-templates.js
deleted file mode 100644
index c58089c1..00000000
--- a/tests/react-template-helper-harness/imports/test-templates.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import './test-templates.html';
-
-import {
- EmptyReactComponent,
- TextReactComponent,
- ClickableReactComponent,
- OneReactComponent,
- TwoReactComponent,
- UnmountableReactComponent
-} from './test-components.jsx';
-
-Template.EmptyComponentTemplateWithoutContainerElement.helpers({
- emptyComponent() {
- return EmptyReactComponent;
- }
-});
-
-Template.UsesTextReactComponent.helpers({
- textComponent() {
- return TextReactComponent;
- }
-});
-
-Template.UsesClickableReactComponent.onCreated(function () {
- this.clicked = false;
-});
-
-Template.UsesClickableReactComponent.helpers({
- clickableComponent() {
- return ClickableReactComponent;
- }
-});
-
-Template.UsesUnmountableComponent.helpers({
- unmountableComponent() {
- return UnmountableReactComponent;
- }
-});
diff --git a/tests/react-template-helper-harness/package.json b/tests/react-template-helper-harness/package.json
deleted file mode 100644
index 8bce3838..00000000
--- a/tests/react-template-helper-harness/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "react-template-helper-harness",
- "private": true,
- "scripts": {
- "test": "PACKAGE_DIRS=../../packages meteor test --driver-package test-in-browser"
- },
- "dependencies": {
- "meteor-node-stubs": "~0.2.0",
- "react": "^15.0.0",
- "react-dom": "^15.0.0"
- }
-}