Merge branch 'devel' into underscore/webapp

This commit is contained in:
Harry Adel
2023-05-03 15:25:39 +03:00
committed by GitHub
115 changed files with 1778 additions and 4047 deletions

View File

@@ -62,6 +62,7 @@ build_machine_environment: &build_machine_environment
# Specify that we want an actual machine (ala Circle 1.0), not a Docker image.
docker:
- image: meteor/circleci:android-30-node-14
resource_class: large
environment:
# This multiplier scales the waitSecs for selftests.
TIMEOUT_SCALE_FACTOR: 8
@@ -261,7 +262,7 @@ jobs:
--headless \
--junit ./tmp/results/junit/0.xml \
--without-tag "custom-warehouse"
no_output_timeout: 20m
no_output_timeout: 30m
- run:
<<: *run_save_node_bin
- store_test_results:
@@ -746,6 +747,7 @@ jobs:
docker:
# This Node version should match that in the meteor/docs CircleCI config.
- image: meteor/circleci:android-28-node-12
resource_class: large
environment:
CHECKOUT_METEOR_DOCS: /home/circleci/test_docs
steps:

15
.github/workflows/check-syntax.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Check legacy syntax
on:
- push
- pull_request
jobs:
check-code-style:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18.x
- run: cd scripts/admin/check-legacy-syntax && npm ci
- name: Check syntax
run: cd scripts/admin/check-legacy-syntax && node check-syntax.js

View File

@@ -10,7 +10,7 @@
[![TravisCI Status](https://travis-ci.org/meteor/meteor.svg?branch=devel)](https://travis-ci.org/meteor/meteor)
[![CircleCI Status](https://circleci.com/gh/meteor/meteor/tree/devel.svg?style=shield&circle-token=c2d3c041506bd493ef3795ffa4448684cfce97b8)](https://circleci.com/gh/meteor/meteor/tree/devel)
[![built with Meteor](https://img.shields.io/badge/Meteor-2.7.4-green?logo=meteor&logoColor=white)](https://meteor.com)
[![built with Meteor](https://img.shields.io/badge/Meteor-2.12-green?logo=meteor&logoColor=white)](https://meteor.com)
</div>

View File

@@ -1,6 +1,7 @@
title: Meteor API Docs
subtitle: API Docs
versions:
- '2.12'
- '2.11'
- '2.10'
- '2.9'

View File

@@ -4,7 +4,7 @@
* MongoDB Server 6.x Support
* Embedded Mongo now uses MongoDB 6.0.3
* Some pr [GH someone] [PR #number] // this will become -> [StorytellerCZ](https://github.com/someone) [PR](https://github.com/meteor/meteor/pull/number)
* Some pr [GH someone] [PR #number] // this will become -> [someone](https://github.com/someone) [PR](https://github.com/meteor/meteor/pull/number)
#### Breaking Changes
N/A

View File

@@ -45,23 +45,55 @@ const main = async () => {
const filesStream = files
.map(file => {
console.log(`reading file: ${ file }`);
return fs.readFile(`./generators/changelog/versions/${ file }`, 'utf8');
return {
fileName: file,
buf : fs.readFile(`./generators/changelog/versions/${ file }`, 'utf8')
};
})
.map(async (buf, index) => {
.map(async ({buf, fileName}, index) => {
// first file we don't do anything
// Big file and does not follow the new standard
if (index === 0) return buf;
const content = (await buf).toString();
/**
* @type {Set<string>}
*/
const contribuitors = new Set()
// DSL Replacers
// [PR #123] -> [PR #123](https://github.com/meteor/meteor/pull/123)
// [GH meteor/meteor] -> [meteor/meteor](https://github.com/meteor/meteor)
// package-name@get-version -> package-name@1.3.3
return content
.replace(/\[PR #(\d+)\]/g, (_, number) => `[PR #${ number }](https://github.com/meteor/meteor/pull/${ number })`)
.replace(/\[GH ([^\]]+)\]/g, (_, name) => `[${ name }](https://github.com/${ name })`)
const file = content
.replace(/\[PR #(\d+)\]/g, (_, number) => `[PR](https://github.com/meteor/meteor/pull/${ number })`)
.replace(/\[GH ([^\]]+)\]/g, (_, name) => {
contribuitors.add(name);
return `[${ name }](https://github.com/${ name })`
})
.replace(/([a-z0-9-]+)@get-version/g, (_, name) => `${ name }@${ getPackageVersion(name) }`);
// already have the contribuitors thanks in the file
if (
file.includes('#### Special thanks to') ||
file.includes('[//]: # (Do not edit this file by hand.)')
) return file;
// add the contribuitors
const contribuitorsList =
Array
.from(contribuitors)
.map(name => `- [@${ name }](https://github.com/${ name }).`)
.join('\n');
const doneFile = `${ file }\n\n#### Special thanks to\n\n${ contribuitorsList }\n\n`;
//SIDE EFFECTS
// so that this is not ran every time, we will update the last file.
// this is for the expensive part of the script
if (index === files.length - 2) await fs.writeFile(`./generators/changelog/versions/${fileName}`, doneFile);
return doneFile;
})
.reverse();
console.log('Giving some touches to the files');

View File

@@ -44,15 +44,15 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
#### Meteor Version Release
* `accounts-2fa@get-version`:
* `accounts-2fa@2.0.2`:
- removed .npm/package contents and added .gitignore
* `accounts-base@get-version`:
* `accounts-base@2.2.7`:
- Updated types to match async methods added in newer versions.
- Ensured the meteor.loginServiceConfiguration subscription always becomes ready, by adding a this.ready() call.
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520].
* `accounts-password@get-version`:
* `accounts-password@2.3.4`:
- Updated `Accounts.changePassword` and `Accounts.resetPassword` to be correctly verify if the new password is
valid.
- removed .npm/package contents and added .gitignore
@@ -68,18 +68,18 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `ecmascript@0.16.6`:
- Updated typescript to version 4.9.4.
* `email@get-version`:
* `email@2.2.4`:
- Updated types to match async methods added in newer versions.
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520].
* `logging@get-version`:
* `logging@1.3.2`:
- removed .npm/package contents and added .gitignore
* `Command line`:
- Corrected typo in vue skeleton.
- Command `meteor mongo` was removed due compatibility with MongoDB v6.x of `mongosh`
* `meteor@get-version`:
* `meteor@1.11.1`:
- updated types to removed unused Blaze types
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520].
@@ -87,7 +87,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
- Updated performance of makeLookupFunction
- In async wrappers, catch exceptions and reject
* `mongo@get-version`:
* `mongo@1.16.5`:
- In async wrappers, catch exceptions and reject
- Updated MongoDB types to match driver version 4.13.0 and MongoDB server version 6.0.3
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520].
@@ -100,7 +100,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `oauth@2.2.0`:
- bumped cordova-plugin-inappbrowser to 5.0.0
* `react-fast-refresh@get-version`:
* `react-fast-refresh@0.2.6`:
- removed .npm/package contents and added .gitignore
* `standard-minifier-css@1.9.0`:
@@ -112,10 +112,10 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `typescript@4.9.4`
- Updated typescript to version 4.9.4.
* `underscore@get-version`:
* `underscore@1.0.12`:
- Added dependency in types to underscore
* `webapp@get-version`:
* `webapp@1.13.4`:
- Added dependency in types to webapp(to connect)
- removed .npm/package contents and added .gitignore

View File

@@ -0,0 +1,151 @@
## v2.12.0, 2023-04-28
### Highlights
* Document main function in webapp by [harryadel](https://github.com/harryadel) [PR](https://github.com/meteor/meteor/pull/12579)
* Add undocument properties to docs by [harryadel](https://github.com/harryadel) [PR](https://github.com/meteor/meteor/pull/12563)
* Bump NPM versions for css minifiers by [wreiske](https://github.com/wreiske) [PR](https://github.com/meteor/meteor/pull/12562)
* Updated Email and Mongo package types by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12554)
* Updated security.md by [jamauro](https://github.com/jamauro) [PR](https://github.com/meteor/meteor/pull/12461)
* Added addHtmlAttributeHook type on WebApp by [DblK](https://github.com/DblK) [PR](https://github.com/meteor/meteor/pull/12545)
* Added loginServiceConfiguration type on Accounts by [DblK](https://github.com/DblK) [PR](https://github.com/meteor/meteor/pull/12539)
* Add TS types for Mongo Collection countDocuments and estimatedDocumentCount by [ArthurHoaro](https://github.com/ArthurHoaro) [PR](https://github.com/meteor/meteor/pull/12533)
* Allow setting a custom ddp-rate-limit message per rule by [wreiske](https://github.com/wreiske) [PR](https://github.com/meteor/meteor/pull/12082)
* Updated MongoDB driver to 4.15 by [Grubba27](https://github.com/Grubba27) [PR](https://github.com/meteor/meteor/pull/12583)
* Adding warn with env variable when using old apis vy [Grubba27](https://github.com/Grubba27) [PR](https://github.com/meteor/meteor/pull/12585)
* Fix syntax for legacy client by [zodern](https://github.com/zodern) [PR](https://github.com/meteor/meteor/pull/12596)
* Updating MongoDB driver to 4.16 by [Grubba27](https://github.com/Grubba27) [PR](https://github.com/meteor/meteor/pull/12599)
* Update sockjs-client by [harryadel](https://github.com/harryadel) [PR](https://github.com/meteor/meteor/pull/12590)
* [Accounts] set custom collection by [dmromanov](https://github.com/dmromanov) [PR](https://github.com/meteor/meteor/pull/12591)
* Wrappers to help in the async migration by [matheusccastroo](https://github.com/matheusccastroo) [PR](https://github.com/meteor/meteor/pull/12593)
* Mongo query hangs all clients subscribed to a query/collection by [KoenLav](https://github.com/KoenLav) [PR](https://github.com/meteor/meteor/pull/12587)
* Blaze to 2.6.2 by [StorytellerCZ](https://github.com/StorytellerCZ) [PR](https://github.com/meteor/blaze/pull/411)
#### Breaking Changes
N/A
#### Internal API changes
N/A
#### Migration Steps
Now if you want to check where do you call old-style api methods
you can use ```WARN_WHEN_USING_OLD_API``` before starting your meteor process.
#### Meteor Version Release
* `accounts-base@2.2.8`:
- Added `loginServiceConfiguration` type.
- Added the `collection` option property, in order to be able to set the collection for Accounts,
more can be seen in the [discussion](https://github.com/meteor/meteor/discussions/12544#discussioncomment-5240763)
and in the [related issue](https://github.com/meteor/meteor-feature-requests/issues/20).
- `onCreateUserHook` now accept promises and wait if necessary.
* `babel-compiler@get-version`:
- Added `es5` compatible syntax.
* `browser-policy-content@get-version`:
- Added `es5` compatible syntax.
* `browser-policy-framing@get-version`:
- Added `es5` compatible syntax.
* `browser-policy@get-version`:
- Updated test name.
* `callback-hook@get-version`:
- Added async hooks possibility to make async migrations easier.
* `context@get-version`:
- Added `es5` compatible syntax.
* `ddp-rate-limiter@1.2.0`:
- Allow setting a custom ddp-rate-limit message per rule.
* `ddp-server@2.6.1`:
- Updated sockjs version.
* `dev-error-overlay@get-version`:
- Added `es5` compatible syntax by adding the `ecmascript` package.
* `dynamic-import@get-version`:
- Added `es5` compatible syntax.
* `ecmascript@get-version`:
- Updated tests location.
* `ecmascript-runtime@get-version`:
- Updated npm dependencies.
* `email@2.2.5`:
- Updated type `CustomEmailOptions` to be a type instead of an interface.
* `hot-module-replacement@get-version`:
- Added `es5` compatible syntax.
* `meteor@1.11.2`:
- Added documentation for `isTest`, `isAppTest` and `isPackageTest` methods.
- Added possibility to add async hooks to make async migrations easier. [PR](https://github.com/meteor/meteor/pull/12593)
* `minifier-css@1.6.4`:
- Bump NPM versions for css minifiers.
* `minimongo@get-version`:
- Updated to be able to track old api usage.
* `modules-runtime-hot@get-version`:
- Added `es5` compatible syntax.
* `mongo@1.16.6`:
- Added `countDocuments` and `estimatedDocumentCount` types.
- Added warning for when old style apis are being used, to use this feature,
use the variable`WARN_WHEN_USING_OLD_API=true` before starting the Meteor process.
- Oplog driver updated to not throw error when MongoDB server and Meteor client mismatch. [issue](https://github.com/meteor/meteor/issues/12516)
* `non-core`:
- Blaze to version 2.6.2.
* `npm-mongo@4.16.0`:
- Updated MongoDB driver to 4.15.
- Updated MongoDB driver to 4.16.
* `rate-limit@1.1.1`:
- Added `ruleId` property that will be used for setting messages.
* `react-fast-refresh@get-version`:
- Added `es5` compatible syntax.
* `socket-stream-client@0.5.0`:
- Updated sockjs version.
* `standard-minifier-css@1.9.2`:
- Bump NPM versions for css minifiers.
* `tracker@get-version`:
- Updated types and updated JSDocs for `Tracker.withComputation`.
* `underscore@get-version`:
- Updated npm dependencies.
* `webapp@1.13.5`:
- Added `addHtmlAttributeHook` type.
#### Special thanks to
- [@harryadel](https://github.com/harryadel).
- [@wreiske](https://github.com/wreiske).
- [@ebroder](https://github.com/ebroder).
- [@jamauro](https://github.com/jamauro).
- [@DblK](https://github.com/DblK).
- [@ArthurHoaro](https://github.com/ArthurHoaro).
- [@Grubba27](https://github.com/Grubba27).
- [@zodern](https://github.com/zodern).
- [@dmromanov](https://github.com/dmromanov).
- [@matheusccastroo](https://github.com/matheusccastroo).

View File

@@ -10,6 +10,157 @@
## v2.12.0, 2023-04-28
### Highlights
* Document main function in webapp by [harryadel](https://github.com/harryadel) [PR](https://github.com/meteor/meteor/pull/12579)
* Add undocument properties to docs by [harryadel](https://github.com/harryadel) [PR](https://github.com/meteor/meteor/pull/12563)
* Bump NPM versions for css minifiers by [wreiske](https://github.com/wreiske) [PR](https://github.com/meteor/meteor/pull/12562)
* Updated Email and Mongo package types by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12554)
* Updated security.md by [jamauro](https://github.com/jamauro) [PR](https://github.com/meteor/meteor/pull/12461)
* Added addHtmlAttributeHook type on WebApp by [DblK](https://github.com/DblK) [PR](https://github.com/meteor/meteor/pull/12545)
* Added loginServiceConfiguration type on Accounts by [DblK](https://github.com/DblK) [PR](https://github.com/meteor/meteor/pull/12539)
* Add TS types for Mongo Collection countDocuments and estimatedDocumentCount by [ArthurHoaro](https://github.com/ArthurHoaro) [PR](https://github.com/meteor/meteor/pull/12533)
* Allow setting a custom ddp-rate-limit message per rule by [wreiske](https://github.com/wreiske) [PR](https://github.com/meteor/meteor/pull/12082)
* Updated MongoDB driver to 4.15 by [Grubba27](https://github.com/Grubba27) [PR](https://github.com/meteor/meteor/pull/12583)
* Adding warn with env variable when using old apis vy [Grubba27](https://github.com/Grubba27) [PR](https://github.com/meteor/meteor/pull/12585)
* Fix syntax for legacy client by [zodern](https://github.com/zodern) [PR](https://github.com/meteor/meteor/pull/12596)
* Updating MongoDB driver to 4.16 by [Grubba27](https://github.com/Grubba27) [PR](https://github.com/meteor/meteor/pull/12599)
* Update sockjs-client by [harryadel](https://github.com/harryadel) [PR](https://github.com/meteor/meteor/pull/12590)
* [Accounts] set custom collection by [dmromanov](https://github.com/dmromanov) [PR](https://github.com/meteor/meteor/pull/12591)
* Wrappers to help in the async migration by [matheusccastroo](https://github.com/matheusccastroo) [PR](https://github.com/meteor/meteor/pull/12593)
* Mongo query hangs all clients subscribed to a query/collection by [KoenLav](https://github.com/KoenLav) [PR](https://github.com/meteor/meteor/pull/12587)
* Blaze to 2.6.2 by [StorytellerCZ](https://github.com/StorytellerCZ) [PR](https://github.com/meteor/blaze/pull/411)
#### Breaking Changes
N/A
#### Internal API changes
N/A
#### Migration Steps
Now if you want to check where do you call old-style api methods
you can use ```WARN_WHEN_USING_OLD_API``` before starting your meteor process.
#### Meteor Version Release
* `accounts-base@2.2.8`:
- Added `loginServiceConfiguration` type.
- Added the `collection` option property, in order to be able to set the collection for Accounts,
more can be seen in the [discussion](https://github.com/meteor/meteor/discussions/12544#discussioncomment-5240763)
and in the [related issue](https://github.com/meteor/meteor-feature-requests/issues/20).
- `onCreateUserHook` now accept promises and wait if necessary.
* `babel-compiler@7.10.4`:
- Added `es5` compatible syntax.
* `browser-policy-content@1.1.2`:
- Added `es5` compatible syntax.
* `browser-policy-framing@1.1.2`:
- Added `es5` compatible syntax.
* `browser-policy@1.1.2`:
- Updated test name.
* `callback-hook@1.5.1`:
- Added async hooks possibility to make async migrations easier.
* `context@0.5.1`:
- Added `es5` compatible syntax.
* `ddp-rate-limiter@1.2.0`:
- Allow setting a custom ddp-rate-limit message per rule.
* `ddp-server@2.6.1`:
- Updated sockjs version.
* `dev-error-overlay@0.1.2`:
- Added `es5` compatible syntax by adding the `ecmascript` package.
* `dynamic-import@0.7.3`:
- Added `es5` compatible syntax.
* `ecmascript@0.16.7`:
- Updated tests location.
* `ecmascript-runtime@0.8.1`:
- Updated npm dependencies.
* `email@2.2.5`:
- Updated type `CustomEmailOptions` to be a type instead of an interface.
* `hot-module-replacement@0.5.3`:
- Added `es5` compatible syntax.
* `meteor@1.11.2`:
- Added documentation for `isTest`, `isAppTest` and `isPackageTest` methods.
- Added possibility to add async hooks to make async migrations easier. [PR](https://github.com/meteor/meteor/pull/12593)
* `minifier-css@1.6.4`:
- Bump NPM versions for css minifiers.
* `minimongo@1.9.3`:
- Updated to be able to track old api usage.
* `modules-runtime-hot@0.14.2`:
- Added `es5` compatible syntax.
* `mongo@1.16.6`:
- Added `countDocuments` and `estimatedDocumentCount` types.
- Added warning for when old style apis are being used, to use this feature,
use the variable`WARN_WHEN_USING_OLD_API=true` before starting the Meteor process.
- Oplog driver updated to not throw error when MongoDB server and Meteor client mismatch. [issue](https://github.com/meteor/meteor/issues/12516)
* `non-core`:
- Blaze to version 2.6.2.
* `npm-mongo@4.16.0`:
- Updated MongoDB driver to 4.15.
- Updated MongoDB driver to 4.16.
* `rate-limit@1.1.1`:
- Added `ruleId` property that will be used for setting messages.
* `react-fast-refresh@0.2.7`:
- Added `es5` compatible syntax.
* `socket-stream-client@0.5.0`:
- Updated sockjs version.
* `standard-minifier-css@1.9.2`:
- Bump NPM versions for css minifiers.
* `tracker@1.3.2`:
- Updated types and updated JSDocs for `Tracker.withComputation`.
* `underscore@1.0.13`:
- Updated npm dependencies.
* `webapp@1.13.5`:
- Added `addHtmlAttributeHook` type.
#### Special thanks to
- [@harryadel](https://github.com/harryadel).
- [@wreiske](https://github.com/wreiske).
- [@ebroder](https://github.com/ebroder).
- [@jamauro](https://github.com/jamauro).
- [@DblK](https://github.com/DblK).
- [@ArthurHoaro](https://github.com/ArthurHoaro).
- [@Grubba27](https://github.com/Grubba27).
- [@zodern](https://github.com/zodern).
- [@dmromanov](https://github.com/dmromanov).
- [@matheusccastroo](https://github.com/matheusccastroo).
## v2.11.0, 2023-03-02
### Highlights
@@ -32,13 +183,13 @@
* Remove Blaze dependency and types that live in blaze.d.ts
by [perbergland](https://github.com/perbergland) [PR](https://github.com/meteor/meteor/pull/12428)
* Switch typescript skeleton to zodern:types and test that it works by [ebroder](https://github.com/ebroder) [PR #12510](https://github.com/meteor/meteor/pull/12510)
* Remove packages/*/.npm from gitignore and add missing .npm folders by [ebroder](https://github.com/ebroder) [PR #12508](https://github.com/meteor/meteor/pull/12508)
* Add type definitions for async methods from Meteor 2.9 by [ebroder](https://github.com/ebroder) [PR #12507](https://github.com/meteor/meteor/pull/12507)
* TypeScript skeleton fixes by [ebroder](https://github.com/ebroder) [PR #12506](https://github.com/meteor/meteor/pull/12506)
* Fix TypeScript type dependencies for mongo, webapp, and underscore by [ebroder](https://github.com/ebroder) [PR #12505](https://github.com/meteor/meteor/pull/12505)
* Improve specificity of types previously declared as "Object" by [ebroder](https://github.com/ebroder) [PR #12520](https://github.com/meteor/meteor/pull/12520)
* Bump to Node 14.21.3 by [StorytellerCZ](https://github.com/StorytellerCZ) [PR #12517](https://github.com/meteor/meteor/pull/12517)
* Switch typescript skeleton to zodern:types and test that it works by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12510)
* Remove packages/*/.npm from gitignore and add missing .npm folders by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12508)
* Add type definitions for async methods from Meteor 2.9 by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12507)
* TypeScript skeleton fixes by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12506)
* Fix TypeScript type dependencies for mongo, webapp, and underscore by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12505)
* Improve specificity of types previously declared as "Object" by [ebroder](https://github.com/ebroder) [PR](https://github.com/meteor/meteor/pull/12520)
* Bump to Node 14.21.3 by [StorytellerCZ](https://github.com/StorytellerCZ) [PR](https://github.com/meteor/meteor/pull/12517)
#### Breaking Changes
@@ -62,7 +213,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `accounts-base@2.2.7`:
- Updated types to match async methods added in newer versions.
- Ensured the meteor.loginServiceConfiguration subscription always becomes ready, by adding a this.ready() call.
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520](https://github.com/meteor/meteor/pull/12520).
- Specified that previously were declared as "Object" types. More context can be seen in [PR](https://github.com/meteor/meteor/pull/12520).
* `accounts-password@2.3.4`:
- Updated `Accounts.changePassword` and `Accounts.resetPassword` to be correctly verify if the new password is
@@ -82,7 +233,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `email@2.2.4`:
- Updated types to match async methods added in newer versions.
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520](https://github.com/meteor/meteor/pull/12520).
- Specified that previously were declared as "Object" types. More context can be seen in [PR](https://github.com/meteor/meteor/pull/12520).
* `logging@1.3.2`:
- removed .npm/package contents and added .gitignore
@@ -93,7 +244,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `meteor@1.11.1`:
- updated types to removed unused Blaze types
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520](https://github.com/meteor/meteor/pull/12520).
- Specified that previously were declared as "Object" types. More context can be seen in [PR](https://github.com/meteor/meteor/pull/12520).
* `minimongo@1.9.2`:
- Updated performance of makeLookupFunction
@@ -102,7 +253,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.11-migration.html) for thi
* `mongo@1.16.5`:
- In async wrappers, catch exceptions and reject
- Updated MongoDB types to match driver version 4.13.0 and MongoDB server version 6.0.3
- Specified that previously were declared as "Object" types. More context can be seen in [PR #12520](https://github.com/meteor/meteor/pull/12520).
- Specified that previously were declared as "Object" types. More context can be seen in [PR](https://github.com/meteor/meteor/pull/12520).
- Now uses MongoDB v6.0.3
- Now uses Node v14.21.3

View File

@@ -69,6 +69,11 @@ client, no arguments are passed.
The `connection` object the request came in on. See
[`Meteor.onConnection`](#meteor_onconnection) for details.
{% enddtdd %}
{% dtdd name:"collection" type:"Object" %}
The `collection` The name of the Mongo.Collection
or the Mongo.Collection object to hold the users.
{% enddtdd %}
</dl>
{% apibox "AccountsClient" %}
@@ -212,6 +217,11 @@ are called with a single argument, the attempt info object:
[`Meteor.onConnection`](#meteor_onconnection) for details.
{% enddtdd %}
{% dtdd name:"collection" type:"Object" %}
The `collection` The name of the Mongo.Collection
or the Mongo.Collection object to hold the users.
{% enddtdd %}
{% dtdd name:"methodName" type:"String" %}
The name of the Meteor method being used to login.
{% enddtdd %}

View File

@@ -54,3 +54,13 @@ if (Meteor.isServer) {
{% apibox "Meteor.settings" %}
{% apibox "Meteor.release" %}
{% apibox "Meteor.isModern" %}
{% apibox "Meteor.gitCommitHash" %}
{% apibox "Meteor.isTest" %}
{% apibox "Meteor.isAppTest" %}
{% apibox "Meteor.isPackageTest" %}

View File

@@ -249,3 +249,35 @@ DDPRateLimiter.addRule(loginRule, 5, 1000);
```
{% apibox "DDPRateLimiter.removeRule" nested:true instanceDelimiter:. %}
{% apibox "DDPRateLimiter.setErrorMessage" nested:true instanceDelimiter:. %}
{% apibox "DDPRateLimiter.setErrorMessageOnRule" nested:true instanceDelimiter:. %}
Allows developers to specify custom error messages for each rule instead of being
limited to one global error message for every rule.
It adds some clarity to what rules triggered which errors, allowing for better UX
and also opens the door for i18nable error messages per rule instead of the
default English error message.
Here is an example with a custom error message:
```js
const setupGoogleAuthenticatorRule = {
userId(userId) {
const user = Meteor.users.findOne(userId);
return user;
},
type: 'method',
name: 'Users.setupGoogleAuthenticator',
};
// Add the rule, allowing up to 1 google auth setup message every 60 seconds
const ruleId = DDPRateLimiter.addRule(setupGoogleAuthenticatorRule, 1, 60000);
DDPRateLimiter.setErrorMessageOnRule(ruleId, function (data) {
return `You have reached the maximum number of Google Authenticator attempts. Please try again in ${Math.ceil(data.timeToReset / 1000)} seconds.`;
});
```
Or a more simple approach:
```js
const ruleId = DDPRateLimiter.addRule(setupGoogleAuthenticatorRule, 1, 60000);
DDPRateLimiter.setErrorMessageOnRule(ruleId, 'Example as a single string error message');
```

View File

@@ -86,21 +86,51 @@ a `Tracker.withComputation` call.
```javascript
Tracker.autorun(async function example1(computation) {
let asyncData =
await Tracker.withComputation(computation, () => asyncDataFunction());
let users = Meteor.users.find({}).fetch();
let asyncData = await asyncDataFunction();
let users =
await Tracker.withComputation(computation, () => Meteor.users.find({}).fetch());
});
```
> If you want to get computation in other way you can use `Tracker.currentComputation`
#### Using async callbacks in versions of Meteor prior to 2.10
{% apibox "Tracker.withComputation" %}
In general, the rules to use `Tracker.withComputation` like this:
1. `async` function *before the first* `await` if just like a sync one.
2. `async` function *after the first* `await` looses the `Tracker.currentComputation`
but it can be restored using `Tracker.withComputation`, *but only within the callback*.
If you have for example:
```javascript
Tracker.autorun(async function (computation) {
let asyncData = await someAsyncCall();
let links = await LinksCollection.find({}).fetch();
// code above will not trigger reruns.
});
```
You can make this example reactive by wrapping the `Meteor.users.find` call in a `Tracker.withComputation` call:
```javascript
Tracker.autorun(async function (computation) {
let asyncData = await someAsyncCall();
let users =
await Tracker.withComputation(computation, () => Meteor.users.find({}).fetch());
// code above will trigger reruns.
});
```
The `react-meteor-data` package uses `Tracker.withComputation` to make the `useTracker` accept async callbacks.
More can be seen [here](https://github.com/meteor/react-packages/tree/master/packages/react-meteor-data#maintaining-the-reactive-context)
### Using async callbacks in versions of Meteor prior to 2.10
`Tracker.autorun` can accept an `async` callback function.
However, the async call back function will only be dependent on reactive functions called prior to any called functions that return a promise.
Example 1 - autorun `example1()` **is not** dependent on reactive changes to the `Meteor.users` collection. Because it is dependent on nothing reactive it will run only once:
```javascript
Tracker.autorun(async function example1() {
let asyncData = await asyncDataFunction();
let asyncData = await asyncDataFunction();
let users = Meteor.users.find({}).fetch();
});
```
@@ -111,7 +141,7 @@ Example 2 - autorun `example2()` **is** dependent on reactive changes to the Me
```javascript
Tracker.autorun(async function example2() {
let users = Meteor.users.find({}).fetch();
let asyncData = await asyncDataFunction();
let asyncData = await asyncDataFunction();
});
```
{% apibox "Tracker.flush" %}

View File

@@ -160,3 +160,4 @@ WebApp.addUpdatedNotifyHook(({arch, manifest, runtimeConfig}) => {
{% apibox "WebApp.addUpdatedNotifyHook" %}
{% apibox "addUpdatedNotifyHookCallback(options)" %}
{% apibox "main" %}

View File

@@ -5,6 +5,7 @@ edit_branch: 'devel'
edit_path: 'guide'
content_root: 'content'
versions:
- '2.12'
- '2.11'
- '2.10'
- '2.9'

View File

@@ -0,0 +1,58 @@
---
title: Migrating to Meteor 2.12
description: How to migrate your application to Meteor 2.12.
---
Most of the new features in Meteor 2.12 are either applied directly behind the
scenes (in a backwards compatible manner) or are opt-in. For a complete
breakdown of the changes, please refer to the [changelog](http://docs.meteor.com/changelog.html).
The above being said, there are a few items that you should implement to
have easier time in the future.
<h3 id="old-api-warning">Old API Warning</h3>
With our migration to the new async/await API, we have added a warning to the
old API. In order to use it, before running your application, set the
environment variable `WARN_WHEN_USING_OLD_API` to `true`. For example, you can
run the folling command in your application directory:
```bash
WARN_WHEN_USING_OLD_API=true meteor
```
It will run your app and every time you use the old API, you will see a warning
in your console. This will help you find the places in your code that need to
be updated.
<h2 id="older-versions">Migrating from a version older than 2.11?</h2>
If you're migrating from a version of Meteor older than Meteor 2.11, there may
be important considerations not listed in this guide.
Please review the older migration guides for details:
* [Migrating to Meteor 2.11](2.11-migration.html) (from 2.10)
* [Migrating to Meteor 2.10](2.10-migration.html) (from 2.9)
* [Migrating to Meteor 2.9](2.9-migration.html) (from 2.8)
* [Migrating to Meteor 2.8](2.8-migration.html) (from 2.7)
* [Migrating to Meteor 2.7](2.7-migration.html) (from 2.6)
* [Migrating to Meteor 2.6](2.6-migration.html) (from 2.5)
* [Migrating to Meteor 2.5](2.5-migration.html) (from 2.4)
* [Migrating to Meteor 2.4](2.4-migration.html) (from 2.3)
* [Migrating to Meteor 2.3](2.3-migration.html) (from 2.2)
* [Migrating to Meteor 2.2](2.2-migration.html) (from 2.0)
* [Migrating to Meteor 2.0](2.0-migration.html) (from 1.12)
* [Migrating to Meteor 1.12](1.12-migration.html) (from 1.11)
* [Migrating to Meteor 1.11](1.11-migration.html) (from 1.10.2)
* [Migrating to Meteor 1.10.2](1.10.2-migration.html) (from 1.10)
* [Migrating to Meteor 1.10](1.10-migration.html) (from 1.9.3)
* [Migrating to Meteor 1.9.3](1.9.3-migration.html) (from 1.9)
* [Migrating to Meteor 1.9](1.9-migration.html) (from 1.8.3)
* [Migrating to Meteor 1.8.3](1.8.3-migration.html) (from 1.8.2)
* [Migrating to Meteor 1.8.2](1.8.2-migration.html) (from 1.8)
* [Migrating to Meteor 1.8](1.8-migration.html) (from 1.7)
* [Migrating to Meteor 1.7](1.7-migration.html) (from 1.6)
* [Migrating to Meteor 1.6](1.6-migration.html) (from 1.5)
* [Migrating to Meteor 1.5](1.5-migration.html) (from 1.4)
* [Migrating to Meteor 1.4](1.4-migration.html) (from 1.3)
* [Migrating to Meteor 1.3](1.3-migration.html) (from 1.2)

View File

@@ -365,7 +365,7 @@ Meteor.users.methods.updateMMR = new ValidatedMethod({
});
```
Note that while the Method is defined on the client, the actual secret logic is only accessible from the server. Keep in mind that code inside `if (Meteor.isServer)` blocks is still sent to the client, it is just not executed. So don't put any secret code in there.
Note that while the Method is defined on the client, the actual secret logic is only accessible from the server and the code will **not** be included in the client bundle. Keep in mind that code inside `if (Meteor.isServer)` and `if (!this.isSimulation)` blocks is still sent to the client, it is just not executed. So don't put any secret code in there.
Secret API keys should never be stored in your source code at all, the next section will talk about how to handle them.

2
meteor
View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
BUNDLE_VERSION=14.21.3.0
BUNDLE_VERSION=14.21.3.2
# OS Check. Put here because here is where we download the precompiled

View File

@@ -14,6 +14,7 @@ npm install -g meteor
| NPM Package | Meteor Official Release |
|-------------|-------------------------|
| 2.12.0 | 2.12.0 |
| 2.11.0 | 2.11.0 |
| 2.10.0 | 2.10.0 |
| 2.9.1 | 2.9.1 |

View File

@@ -1,7 +1,7 @@
const path = require('path');
const os = require('os');
const METEOR_LATEST_VERSION = '2.11.0';
const METEOR_LATEST_VERSION = '2.12.0';
const sudoUser = process.env.SUDO_USER || '';
function isRoot() {
return process.getuid && process.getuid() === 0;

View File

@@ -1,6 +1,6 @@
{
"name": "meteor",
"version": "2.11.0",
"version": "2.12.0",
"description": "Install Meteor",
"main": "install.js",
"scripts": {

View File

@@ -1,5 +1,6 @@
import { Mongo } from 'meteor/mongo';
import { Meteor } from 'meteor/meteor';
import { Configuration } from 'meteor/service-configuration';
export interface URLS {
resetPassword: (token: string) => string;
@@ -71,6 +72,8 @@ export namespace Accounts {
stop: () => void;
};
var loginServiceConfiguration: Mongo.Collection<Configuration>
function loginServicesConfigured(): boolean;
function onPageLoadLogin(func: Function): void;

View File

@@ -16,6 +16,7 @@ const VALID_CONFIG_KEYS = [
'defaultFieldSelector',
'loginTokenExpirationHours',
'tokenSequenceLength',
'collection',
];
/**
@@ -26,6 +27,8 @@ const VALID_CONFIG_KEYS = [
* @param options {Object} an object with fields:
* - connection {Object} Optional DDP connection to reuse.
* - ddpUrl {String} Optional URL for creating a new DDP connection.
* - collection {String|Mongo.Collection} The name of the Mongo.Collection
* or the Mongo.Collection object to hold the users.
*/
export class AccountsCommon {
constructor(options) {
@@ -40,10 +43,7 @@ export class AccountsCommon {
// There is an allow call in accounts_server.js that restricts writes to
// this collection.
this.users = new Mongo.Collection('users', {
_preventAutopublish: true,
connection: this.connection,
});
this.users = this._initializeCollection(options || {});
// Callback exceptions are printed with Meteor._debug and ignored.
this._onLoginHook = new Hook({
@@ -81,6 +81,29 @@ export class AccountsCommon {
this.LoginCancelledError.numericError = 0x8acdc2f;
}
_initializeCollection(options) {
if (options.collection && typeof options.collection !== 'string' && !(options.collection instanceof Mongo.Collection)) {
throw new Meteor.Error('Collection parameter can be only of type string or "Mongo.Collection"');
}
let collectionName = 'users';
if (typeof options.collection === 'string') {
collectionName = options.collection;
}
let collection;
if (options.collection instanceof Mongo.Collection) {
collection = options.collection;
} else {
collection = new Mongo.Collection(collectionName, {
_preventAutopublish: true,
connection: this.connection,
});
}
return collection;
}
/**
* @summary Get the current user id, or `null` if no user is logged in. A reactive data source.
* @locus Anywhere
@@ -172,6 +195,8 @@ export class AccountsCommon {
// - loginExpirationInDays {Number}
// Number of days since login until a user is logged out (login token
// expires).
// - collection {String|Mongo.Collection}
// A collection name or a Mongo.Collection object to hold the users.
// - passwordResetTokenExpirationInDays {Number}
// Number of days since password reset token creation until the
// token cannt be used any longer (password reset token expires).
@@ -198,6 +223,7 @@ export class AccountsCommon {
* @param {Number} options.passwordEnrollTokenExpiration The number of milliseconds from when a link to set initial password is sent until token expires and user can't set password with the link anymore. If `passwordEnrollTokenExpirationInDays` is set, it takes precedent.
* @param {Boolean} options.ambiguousErrorMessages Return ambiguous error messages from login failures to prevent user enumeration. Defaults to false.
* @param {MongoFieldSpecifier} options.defaultFieldSelector To exclude by default large custom fields from `Meteor.user()` and `Meteor.findUserBy...()` functions when called without a field selector, and all `onLogin`, `onLoginFailure` and `onLogout` callbacks. Example: `Accounts.config({ defaultFieldSelector: { myBigArray: 0 }})`. Beware when using this. If, for instance, you do not include `email` when excluding the fields, you can have problems with functions like `forgotPassword` that will break because they won't have the required data available. It's recommend that you always keep the fields `_id`, `username`, and `email`.
* @param {String|Mongo.Collection} options.collection A collection name or a Mongo.Collection object to hold the users.
* @param {Number} options.loginTokenExpirationHours When using the package `accounts-2fa`, use this to set the amount of time a token sent is valid. As it's just a number, you can use, for example, 0.5 to make the token valid for just half hour. The default is 1 hour.
* @param {Number} options.tokenSequenceLength When using the package `accounts-2fa`, use this to the size of the token sequence generated. The default is 6.
*/
@@ -251,11 +277,17 @@ export class AccountsCommon {
VALID_CONFIG_KEYS.forEach(key => {
if (key in options) {
if (key in this._options) {
throw new Meteor.Error(`Can't set \`${key}\` more than once`);
if (key !== 'collection') {
throw new Meteor.Error(`Can't set \`${key}\` more than once`);
}
}
this._options[key] = options[key];
}
});
if (options.collection && options.collection !== this.users._name && options.collection !== this.users) {
this.users = this._initializeCollection(options);
}
}
/**

View File

@@ -26,8 +26,8 @@ export class AccountsServer extends AccountsCommon {
// Note that this constructor is less likely to be instantiated multiple
// times than the `AccountsClient` constructor, because a single server
// can provide only one set of methods.
constructor(server) {
super();
constructor(server, options) {
super(options || {});
this._server = server || Meteor.server;
// Set up the server's methods, as if by calling Meteor.methods.
@@ -190,7 +190,7 @@ export class AccountsServer extends AccountsCommon {
throw new Error("Can only call onCreateUser once");
}
this._onCreateUserHook = func;
this._onCreateUserHook = Meteor.wrapFn(func);
}
/**
@@ -564,7 +564,7 @@ export class AccountsServer extends AccountsCommon {
this._loginHandlers.push({
name: name,
handler: handler
handler: Meteor.wrapFn(handler)
});
};

View File

@@ -1,3 +1,4 @@
import { Mongo } from 'meteor/mongo';
import { URL } from 'meteor/url';
import { Meteor } from 'meteor/meteor';
import { Accounts } from 'meteor/accounts-base';
@@ -795,6 +796,56 @@ Tinytest.add(
);
if(Meteor.isServer) {
Tinytest.add('accounts - config - collection - mongo.collection', test => {
const origCollection = Accounts.users;
// create same user in two different collections - should pass
const email = "test-collection@testdomain.com"
const collection0 = new Mongo.Collection('test1');
Accounts.config({
collection: collection0,
})
const uid0 = Accounts.createUser({email})
Meteor.users.remove(uid0);
const collection1 = new Mongo.Collection('test2');
Accounts.config({
collection: collection1,
})
const uid1 = Accounts.createUser({email})
Meteor.users.remove(uid1);
test.notEqual(uid0, uid1);
Accounts.config({
collection: origCollection,
});
});
Tinytest.add('accounts - config - collection - name', test => {
const origCollection = Accounts.users;
// create same user in two different collections - should pass
const email = "test-collection@testdomain.com"
Accounts.config({
collection: 'collection0',
})
const uid0 = Accounts.createUser({email})
Meteor.users.remove(uid0);
Accounts.config({
collection: 'collection1',
})
const uid1 = Accounts.createUser({email})
Meteor.users.remove(uid1);
test.notEqual(uid0, uid1);
Accounts.config({
collection: origCollection,
});
});
Tinytest.add(
'accounts - make sure that extra params to accounts urls are added',
test => {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: 'A user account system',
version: '2.2.7',
version: '2.2.8',
});
Package.onUse(api => {

View File

@@ -80,7 +80,7 @@ BCp.processOneFileForTarget = function (inputFile, source) {
// compilation, give it the following file extension: .es5.js
! excludedFileExtensionPattern.test(inputFilePath)) {
const features = { ...this.extraFeatures };
const features = Object.assign({}, this.extraFeatures);
const arch = inputFile.getArch();
if (arch.startsWith("os.")) {
@@ -122,7 +122,7 @@ BCp.processOneFileForTarget = function (inputFile, source) {
this.inferExtraBabelOptions(
inputFile,
babelOptions,
cacheOptions.cacheDeps,
cacheOptions.cacheDeps
);
babelOptions.sourceMaps = true;

View File

@@ -26,7 +26,7 @@ Babel = {
return getMeteorBabel().compile(
source,
babelOptions || getDefaultOptions(),
cacheOptions,
cacheOptions
);
},

View File

@@ -1,7 +1,7 @@
Package.describe({
name: "babel-compiler",
summary: "Parser/transpiler for ECMAScript 2015+ syntax",
version: '7.10.3',
version: '7.10.4',
});
Npm.depends({

View File

@@ -50,7 +50,7 @@ var keywords = {
// If false, we set the X-Content-Type-Options header to 'nosniff'.
var contentSniffingAllowed = false;
const BrowserPolicy = require("meteor/browser-policy-common").BrowserPolicy;
var BrowserPolicy = require("meteor/browser-policy-common").BrowserPolicy;
BrowserPolicy.content = {};
var parseCsp = function (csp) {
@@ -260,12 +260,12 @@ var resources = [
{ methodResource: "Frame", directive: "frame-src" },
{ methodResource: "FrameAncestors", directive: "frame-ancestors" }
];
_.each(resources, function (resource) {
var directive = resource.directive;
var methodResource = resource.methodResource;
_.each(resources, function (resource) {
var directive = resource.directive;
var methodResource = resource.methodResource;
var allowMethodName = "allow" + methodResource + "Origin";
var disallowMethodName = "disallow" + methodResource;
var allowDataMethodName = "allow" + methodResource + "DataUrl";
var allowDataMethodName = "allow" + methodResource + "DataUrl";
var allowBlobMethodName = "allow" + methodResource + "BlobUrl";
var allowSelfMethodName = "allow" + methodResource + "SameOrigin";

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Configure content security policies",
version: "1.1.1"
version: "1.1.2"
});
Package.onUse(function (api) {

View File

@@ -9,7 +9,7 @@
var defaultXFrameOptions = "SAMEORIGIN";
var xFrameOptions = defaultXFrameOptions;
const BrowserPolicy = require("meteor/browser-policy-common").BrowserPolicy;
var BrowserPolicy = require("meteor/browser-policy-common").BrowserPolicy;
BrowserPolicy.framing = {};
Object.assign(BrowserPolicy.framing, {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Restrict which websites can frame your app",
version: '1.1.1'
version: '1.1.2'
});
Package.onUse(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Configure security policies enforced by the browser",
version: '1.1.1'
version: '1.1.2'
});
Package.onUse(function (api) {
@@ -12,5 +12,5 @@ Package.onUse(function (api) {
Package.onTest(function (api) {
api.use(["tinytest", "browser-policy", "ejson"], "server");
api.addFiles("browser-policy-test.js", "server");
api.addFiles("browser-policy-tests.js", "server");
});

View File

@@ -49,6 +49,11 @@ export class Hook {
this.bindEnvironment = false;
}
this.wrapAsync = true;
if (options.wrapAsync === false) {
this.wrapAsync = false;
}
if (options.exceptionHandler) {
this.exceptionHandler = options.exceptionHandler;
} else if (options.debugPrintExceptions) {
@@ -73,6 +78,10 @@ export class Hook {
callback = dontBindEnvironment(callback, exceptionHandler);
}
if (this.wrapAsync) {
callback = Meteor.wrapFn(callback);
}
const id = this.nextCallbackId++;
this.callbacks[id] = callback;

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Register callbacks on a hook",
version: '1.5.0'
version: '1.5.1'
});
Package.onUse(function (api) {

View File

@@ -1,15 +1,9 @@
const {
Slot,
bind,
noContext,
setTimeout,
asyncFromGen,
} = require("@wry/context");
const context = require("@wry/context");
Object.assign(exports, {
Slot,
bind,
noContext,
setTimeout,
asyncFromGen,
Slot: context.Slot,
bind: context.bind,
noContext: context.noContext,
setTimeout: context.setTimeout,
asyncFromGen: context.asyncFromGen,
});

View File

@@ -1,6 +1,6 @@
Package.describe({
name: "context",
version: "0.5.0",
version: "0.5.1",
summary: "Manage contextual information without passing objects around",
documentation: "README.md"
});

View File

@@ -10,14 +10,29 @@ let errorMessage = (rateLimitResult) => {
'trying again.';
};
// Store rule specific error messages.
const errorMessageByRule = new Map();
const rateLimiter = new RateLimiter();
DDPRateLimiter.getErrorMessage = (rateLimitResult) => {
// If there is a specific error message for this rule, use it.
if (errorMessageByRule.has(rateLimitResult.ruleId)) {
const message = errorMessageByRule.get(rateLimitResult.ruleId);
// if it's a function, we need to call it
if (typeof message === 'function') {
// call the function with the rateLimitResult
return message(rateLimitResult);
}
// otherwise, just return the string
return message;
}
// Otherwise, use the default error message.
if (typeof errorMessage === 'function') {
return errorMessage(rateLimitResult);
} else {
return errorMessage;
}
return errorMessage;
};
/**
@@ -33,6 +48,20 @@ DDPRateLimiter.setErrorMessage = (message) => {
errorMessage = message;
};
/**
* @summary Set error message text when method or subscription rate limit
* exceeded for a specific rule.
* @param {string} ruleId The ruleId returned from `addRule`
* @param {string|function} message Functions are passed in an object with a
* `timeToReset` field that specifies the number of milliseconds until the next
* method or subscription is allowed to run. The function must return a string
* of the error message.
* @locus Server
*/
DDPRateLimiter.setErrorMessageOnRule = (ruleId, message) => {
errorMessageByRule.set(ruleId, message);
};
/**
* @summary
* Add a rule that matches against a stream of events describing method or

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'ddp-rate-limiter',
version: '1.1.1',
version: '1.2.0',
// Brief, one-line summary of the package.
summary: 'The DDPRateLimiter allows users to add rate limits to DDP' +
' methods and subscriptions.',

View File

@@ -2,14 +2,14 @@
"lockfileVersion": 1,
"dependencies": {
"faye-websocket": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
"integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA=="
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
"integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g=="
},
"http-parser-js": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
"integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg=="
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
"integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q=="
},
"permessage-deflate": {
"version": "0.1.7",
@@ -22,14 +22,14 @@
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"sockjs": {
"version": "0.3.21",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz",
"integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw=="
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
"integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ=="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"websocket-driver": {
"version": "0.7.4",

View File

@@ -1,12 +1,12 @@
Package.describe({
summary: "Meteor's latency-compensated distributed data server",
version: '2.6.0',
version: '2.6.1',
documentation: null
});
Npm.depends({
"permessage-deflate": "0.1.7",
sockjs: "0.3.21"
sockjs: "0.3.24"
});
Package.onUse(function (api) {

View File

@@ -1,5 +1,5 @@
Package.describe({
version: '0.1.1',
version: '0.1.2',
summary: 'Show build errors in client when using HMR',
documentation: 'README.md',
devOnly: true
@@ -7,7 +7,7 @@ Package.describe({
Package.onUse(function (api) {
api.use([
'modules'
'ecmascript'
]);
api.export('DevErrorOverlay', 'client');
api.addFiles('client.js', 'modern');

View File

@@ -3,7 +3,7 @@
// modules, for use in client.js and cache.js.
var versions = __DYNAMIC_VERSIONS__;
const METEOR_PREFIX = '/node_modules/meteor/';
var METEOR_PREFIX = '/node_modules/meteor/';
exports.get = function (id) {
var tree = versions;

View File

@@ -1,6 +1,6 @@
Package.describe({
name: "dynamic-import",
version: "0.7.2",
version: "0.7.3",
summary: "Runtime support for Meteor 1.5 dynamic import(...) syntax",
documentation: "README.md"
});

View File

@@ -1,6 +1,6 @@
Package.describe({
name: "ecmascript-runtime",
version: "0.8.0",
version: '0.8.1',
summary: "Polyfills for new ECMAScript 2015 APIs like Map and Set",
git: "https://github.com/meteor/ecmascript-runtime",
documentation: "README.md"

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'ecmascript',
version: '0.16.6',
version: '0.16.7',
summary: 'Compiler plugin that supports ES2015+ in all .js files',
documentation: 'README.md',
});
@@ -40,5 +40,5 @@ Package.onTest(function(api) {
api.addFiles('bare-test-file.js', ['client', 'server'], {
bare: true,
});
api.addFiles('runtime-tests-client.js', ['client', 'web.browser.legacy']);
api.addFiles('runtime-client-tests.js', ['client', 'web.browser.legacy']);
});

View File

@@ -1,5 +1,5 @@
import { SendMailOptions } from 'nodemailer';
export namespace Email {
/**
* ExtraMailOptions is intentionally left empty here, but can be overridden in
@@ -11,7 +11,7 @@ export namespace Email {
interface ExtraMailOptions {}
type EmailOptions = { mailComposer: MailComposer } | (ExtraMailOptions & SendMailOptions)
interface CustomEmailOptions extends EmailOptions {
type CustomEmailOptions = EmailOptions & {
packageSettings?: unknown;
}

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: 'Send email messages',
version: '2.2.4',
version: '2.2.5',
});
Npm.depends({

View File

@@ -1,28 +1,28 @@
// TODO: add an api to Reify to update cached exports for a module
const ReifyEntry = require('/node_modules/meteor/modules/node_modules/@meteorjs/reify/lib/runtime/entry.js')
var ReifyEntry = require('/node_modules/meteor/modules/node_modules/@meteorjs/reify/lib/runtime/entry.js')
const SOURCE_URL_PREFIX = "meteor://\ud83d\udcbbapp";
var SOURCE_URL_PREFIX = "meteor://\ud83d\udcbbapp";
let appliedChangeSets = [];
let removeErrorMessage = null;
var appliedChangeSets = [];
var removeErrorMessage = null;
const arch = Meteor.isCordova ? "web.cordova" :
var arch = Meteor.isCordova ? "web.cordova" :
Meteor.isModern ? "web.browser" : "web.browser.legacy";
const initialVersions = __meteor_runtime_config__.autoupdate.versions[arch];
let lastUpdated = initialVersions.versionHmr;
const hmrSecret = __meteor_runtime_config__._hmrSecret;
var initialVersions = __meteor_runtime_config__.autoupdate.versions[arch];
var lastUpdated = initialVersions.versionHmr;
var hmrSecret = __meteor_runtime_config__._hmrSecret;
// Cordova doesn't need the hmrSecret, though cordova is also unable to tell
// if Meteor needs to be restarted to enable HMR;
const enabled = Meteor.isCordova || !!hmrSecret;
var enabled = Meteor.isCordova || !!hmrSecret;
if (!enabled) {
console.log('Restart Meteor to enable HMR');
}
const imported = Object.create(null);
const importedBy = Object.create(null);
var imported = Object.create(null);
var importedBy = Object.create(null);
if (module._onRequire) {
module._onRequire({
@@ -44,10 +44,10 @@ if (module._onRequire) {
// On web, we can reload the page any time to get the new version. On cordova,
// we have to wait until Reload._onMigrate is called
let hotCodePushReady = arch !== 'web.cordova';
var hotCodePushReady = arch !== 'web.cordova';
let useHotCodePush = false;
let forceReload = function () {
var useHotCodePush = false;
var forceReload = function () {
useHotCodePush = true;
// Wait until Reload package has been loaded
Meteor.startup(function () {
@@ -60,7 +60,7 @@ let forceReload = function () {
// Once an eager update fails, we stop processing future updates since they
// might depend on the failed update. This gets reset when we re-try applying
// the changes as non-eager updates.
let applyEagerUpdates = true;
var applyEagerUpdates = true;
function handleMessage(message) {
if (message.type === 'register-failed') {
@@ -103,7 +103,7 @@ function handleMessage(message) {
applyEagerUpdates = true;
}
const hasUnreloadable = message.changeSets.find(function (changeSet) {
var hasUnreloadable = message.changeSets.find(function (changeSet) {
return !changeSet.reloadable;
});
@@ -128,10 +128,10 @@ function handleMessage(message) {
// In case the user changed how a module works with HMR
// in one of the earlier change sets, we want to apply each
// change set one at a time in order.
const succeeded = message.changeSets.filter(function (changeSet) {
var succeeded = message.changeSets.filter(function (changeSet) {
return !appliedChangeSets.includes(changeSet.id)
}).every(function (changeSet) {
const applied = applyChangeset(changeSet, message.eager);
var applied = applyChangeset(changeSet, message.eager);
// We don't record if a module is unreplaceable
// during an eager update so we can retry and
@@ -162,9 +162,9 @@ function handleMessage(message) {
}
}
let socket;
let disconnected = false;
let pendingMessages = [];
var socket;
var disconnected = false;
var pendingMessages = [];
function send(message) {
if (socket) {
@@ -183,9 +183,9 @@ function connect() {
// If we've successfully connected and then was disconnected, we avoid showing
// any more connection errors in the console until we've connected again
let logDisconnect = !disconnected;
let wsUrl = Meteor.absoluteUrl('__meteor__hmr__/websocket');
const protocol = wsUrl.startsWith('https://') ? 'wss://' : 'ws://';
var logDisconnect = !disconnected;
var wsUrl = Meteor.absoluteUrl('__meteor__hmr__/websocket');
var protocol = wsUrl.startsWith('https://') ? 'wss://' : 'ws://';
wsUrl = wsUrl.replace(/^.+\/\//, protocol);
socket = new WebSocket(wsUrl);
@@ -212,7 +212,7 @@ function connect() {
appId: __meteor_runtime_config__.appId,
}));
const toSend = pendingMessages.slice();
var toSend = pendingMessages.slice();
pendingMessages = [];
toSend.forEach(function (message) {
@@ -240,8 +240,8 @@ function requestChanges() {
}
function walkTree(pathParts, tree) {
const part = pathParts.shift();
const _module = tree.contents[part];
var part = pathParts.shift();
var _module = tree.contents[part];
if (!_module) {
console.log('HMR: file does not exist', part, pathParts, _module, tree);
@@ -284,7 +284,7 @@ function createModuleContent (code, map) {
function replaceFileContent(file, contents) {
// TODO: to replace content in packages, we need an eval function that runs
// within the package scope, like dynamic imports does.
const moduleFunction = createModuleContent(contents.code, contents.map, file.module.id);
var moduleFunction = createModuleContent(contents.code, contents.map, file.module.id);
file.contents = moduleFunction;
}
@@ -296,15 +296,15 @@ function checkModuleAcceptsUpdate(moduleId, checked) {
return false;
}
const file = findFile(moduleId);
const moduleHot = file.module.hot;
const moduleAccepts = moduleHot ? moduleHot._canAcceptUpdate() : false;
var file = findFile(moduleId);
var moduleHot = file.module.hot;
var moduleAccepts = moduleHot ? moduleHot._canAcceptUpdate() : false;
if (moduleAccepts !== null) {
return moduleAccepts;
}
let accepts = null;
var accepts = null;
// The module did not accept the update. If the update is accepted depends
// on if the modules that imported this module accept the update.
@@ -321,7 +321,7 @@ function checkModuleAcceptsUpdate(moduleId, checked) {
return;
}
const depResult = checkModuleAcceptsUpdate(depId, checked);
var depResult = checkModuleAcceptsUpdate(depId, checked);
if (accepts !== false) {
accepts = depResult;
@@ -333,11 +333,11 @@ function checkModuleAcceptsUpdate(moduleId, checked) {
function addFiles(addedFiles) {
addedFiles.forEach(function (file) {
const tree = {};
const segments = file.path.split('/').slice(1);
const fileName = segments.pop();
var tree = {};
var segments = file.path.split('/').slice(1);
var fileName = segments.pop();
let previous = tree;
var previous = tree;
segments.forEach(function (segment) {
previous[segment] = previous[segment] || {}
previous = previous[segment]
@@ -353,12 +353,12 @@ function addFiles(addedFiles) {
}
module.constructor.prototype._reset = function (id) {
const moduleId = id || this.id;
const file = findFile(moduleId);
var moduleId = id || this.id;
var file = findFile(moduleId);
const hotState = file.module._hotState;
var hotState = file.module._hotState;
const hotData = {};
var hotData = {};
hotState._disposeHandlers.forEach(function (cb) {
cb(hotData);
});
@@ -371,7 +371,7 @@ module.constructor.prototype._reset = function (id) {
// Clear cached exports
// TODO: check how this affects live bindings for ecmascript modules
delete file.module.exports;
const entry = ReifyEntry.getOrCreate(moduleId);
var entry = ReifyEntry.getOrCreate(moduleId);
entry.getters = {};
entry.setters = {};
entry.module = null;
@@ -390,10 +390,10 @@ module.constructor.prototype._reset = function (id) {
}
module.constructor.prototype._replaceModule = function (id, contents) {
const moduleId = id || this.id;
const root = this._getRoot();
var moduleId = id || this.id;
var root = this._getRoot();
let file;
var file;
try {
file = walkTree(moduleId.split('/').slice(1), root);
} catch (e) {
@@ -418,21 +418,21 @@ module.constructor.prototype._replaceModule = function (id, contents) {
}
function applyChangeset(options) {
const changedFiles = options.changedFiles;
const addedFiles = options.addedFiles;
var changedFiles = options.changedFiles;
var addedFiles = options.addedFiles;
let canApply = true;
let toRerun = new Set();
var canApply = true;
var toRerun = new Set();
changedFiles.forEach(function (changed) {
const path = changed.path;
const file = findFile(path);
var path = changed.path;
var file = findFile(path);
// Check if the file has been imported. If it hasn't been,
// we can assume update to it can be accepted
if (file.module.exports) {
const checked = new Set();
const accepts = checkModuleAcceptsUpdate(path, checked);
var checked = new Set();
var accepts = checkModuleAcceptsUpdate(path, checked);
if (canApply) {
canApply = accepts;
@@ -456,7 +456,7 @@ function applyChangeset(options) {
}
toRerun.forEach(function (moduleId) {
const file = findFile(moduleId);
var file = findFile(moduleId);
// clear module caches and hot state
file.module._reset();
file.module.loaded = false;
@@ -470,13 +470,13 @@ function applyChangeset(options) {
console.error('HMR: Error while applying changes:', error);
}
const updateCount = changedFiles.length + addedFiles.length;
var updateCount = changedFiles.length + addedFiles.length;
console.log('HMR: updated ' + updateCount + ' ' + (updateCount === 1 ? 'file' : 'files'));
return true;
}
let nonRefreshableVersion = initialVersions.versionNonRefreshable;
let replaceableVersion = initialVersions.versionReplaceable;
var nonRefreshableVersion = initialVersions.versionNonRefreshable;
var replaceableVersion = initialVersions.versionReplaceable;
Meteor.startup(function () {
if (!enabled) {

View File

@@ -1,4 +1,4 @@
const meteorInstall = Package['modules-runtime'].meteorInstall;
var meteorInstall = Package['modules-runtime'].meteorInstall;
/**
* @summary The Hot API used to configure HMR
@@ -17,8 +17,8 @@ Object.defineProperty(meteorInstall.Module.prototype, "hot", {
};
}
let hotState = this._hotState;
let module = this;
var hotState = this._hotState;
var module = this;
return {
/**

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'hot-module-replacement',
version: '0.5.2',
version: '0.5.3',
summary: 'Update code in development without reloading the page',
documentation: 'README.md',
debugOnly: true,
@@ -16,7 +16,6 @@ Package.onUse(function(api) {
// Provides polyfills needed by Meteor.absoluteUrl in legacy browsers
api.use('ecmascript-runtime-client', { weak: true });
api.use('dev-error-overlay', { weak: true });
api.imply('modules-runtime-hot@0.13.0');
api.addFiles(['./hot-api.js', './client.js'], 'client');
api.addFiles('./server.js', 'server');

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: 'The Meteor command-line tool',
version: '2.11.0',
version: '2.12.0',
});
Package.includeTool();

View File

@@ -1,4 +1,10 @@
const getAslStore = () => (Meteor.isServer && global?.asyncLocalStorage?.getStore()) || {};
const getAslStore = () => {
if (Meteor.isServer && global.asyncLocalStorage) {
return global.asyncLocalStorage.getStore();
}
return {};
};
const getValueFromAslStore = key => getAslStore()[key];
const updateAslStore = (key, value) => getAslStore()[key] = value;

View File

@@ -37,7 +37,7 @@ EVp._set = function (context) {
};
EVp._setNewContextAndGetCurrent = function (value) {
const saved = currentValues[this.slot];
var saved = currentValues[this.slot];
this._set(value);
return saved;
};

View File

@@ -3,6 +3,7 @@
var Fiber = Npm.require('fibers');
var nextSlot = 0;
var callAsyncMethodRunning = false;
Meteor._nodeCodeMustBeInFiber = function () {
if (!Fiber.current) {
@@ -75,7 +76,7 @@ EVp.withValue = function (value, func) {
var saved = currentValues[this.slot];
try {
currentValues[this.slot] = value;
return func();
return Meteor.wrapFn(func)();
} finally {
currentValues[this.slot] = saved;
}
@@ -106,6 +107,15 @@ EVp._setNewContextAndGetCurrent = function (value) {
return saved;
};
EVp._isCallAsyncMethodRunning = function () {
return callAsyncMethodRunning;
};
EVp._setCallAsyncMethodRunning = function (value) {
callAsyncMethodRunning = value;
};
// Meteor application code is always supposed to be run inside a
// fiber. bindEnvironment ensures that the function it wraps is run from
// inside a fiber and ensures it sees the values of Meteor environment

View File

@@ -80,11 +80,15 @@ Meteor._delete = function (obj /*, arguments */) {
* @param errorFirst - If the callback follows the errorFirst style
* @returns {function(...[*]): Promise<unknown>}
*/
Meteor.promisify = function (fn, context, errorFirst = true) {
return function (...fnArgs) {
return new Promise((resolve, reject) => {
const callback = Meteor.bindEnvironment((error, result) => {
let _error = error, _result = result;
Meteor.promisify = function (fn, context, errorFirst) {
if (errorFirst === undefined) {
errorFirst = true;
}
return function () {
return new Promise(function (resolve, reject) {
var callback = Meteor.bindEnvironment(function (error, result) {
var _error = error, _result = result;
if (!errorFirst) {
_error = result;
_result = error;
@@ -97,7 +101,10 @@ Meteor.promisify = function (fn, context, errorFirst = true) {
resolve(_result);
});
const filteredArgs = [...fnArgs, callback].filter(i => i !== undefined);
var filteredArgs = Array.prototype.slice.call(arguments)
.filter(function (i) { return i !== undefined; });
filteredArgs.push(callback);
return fn.apply(context || this, filteredArgs);
});
};
@@ -156,6 +163,25 @@ Meteor.wrapAsync = function (fn, context) {
};
};
Meteor.wrapFn = function (fn) {
if (!fn || typeof fn !== 'function') {
throw new Meteor.Error("Expected to receive function to wrap");
}
if (Meteor.isClient) {
return fn;
}
return function() {
var ret = fn.apply(this, arguments);
if (ret && typeof ret.then === 'function') {
return Promise.await(ret);
}
return ret;
}
};
// Sets child's prototype to a new object whose prototype is parent's
// prototype. Used as:
// Meteor._inherits(ClassB, ClassA).

View File

@@ -486,7 +486,10 @@ export namespace Meteor {
/** Global props **/
/** True if running in development environment. */
var isDevelopment: boolean;
var isModern: boolean;
var gitCommitHash: string | undefined;
var isTest: boolean;
var isAppTest: boolean;
var isPackageTest: boolean;
/** Global props **/
}

View File

@@ -2,7 +2,7 @@
Package.describe({
summary: "Core Meteor environment",
version: '1.11.1',
version: '1.11.2',
});
Package.registerBuildPlugin({

View File

@@ -1,4 +1,5 @@
Meteor.startup = function startup(callback) {
callback = Meteor.wrapFn(callback);
if (process.env.METEOR_PROFILE) {
// Create a temporary error to capture the current stack trace.
var error = new Error("Meteor.startup");

View File

@@ -1,3 +1,5 @@
var TEST_METADATA_STR;
if (Meteor.isClient) {
TEST_METADATA_STR = meteorEnv.TEST_METADATA;
@@ -10,8 +12,32 @@ var testDriverPackageName = TEST_METADATA.driverPackage;
// Note that if we are in test-packages mode neither of these will be set,
// but we will have a test driver package
/**
*@memberof Meteor
* @summary Boolean variable. True when running unit tests (false if running
* tests in full app mode).
* @locus Anywhere
* @static
* @type {Boolean}
*/
Meteor.isTest = !!TEST_METADATA.isTest;
/**
*@memberof Meteor
* @summary Boolean variable. True if running tests against your application i.e `meteor test --full-app`.
* @locus Anywhere
* @static
* @type {Boolean}
*/
Meteor.isAppTest = !!TEST_METADATA.isAppTest;
/**
*@memberof Meteor
* @summary Boolean variable. True if running tests against a Meteor package.
* @locus Anywhere
* @static
* @type {Boolean}
*/
Meteor.isPackageTest = !!testDriverPackageName && !Meteor.isTest && !Meteor.isAppTest;
if (typeof testDriverPackageName === "string") {

File diff suppressed because it is too large Load Diff

View File

@@ -32,7 +32,7 @@ const TEST_CASES = [
'a {\n\
font:12px \'Helvetica\',"Arial",\'Nautica\';\n\
background:url("/some/nice/picture.png");\n}',
'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}',
'a{background:url(/some/nice/picture.png);font:12px Helvetica,Arial,Nautica}',
'removing quotes in font and url (if possible)',
],
['/* no comments */ a { color: red; }', 'a{color:red}', 'remove comments'],

View File

@@ -77,7 +77,7 @@ Tinytest.add('minifier-css - simple CSS minification', (test) => {
'a {\n\
font:12px \'Helvetica\',"Arial",\'Nautica\';\n\
background:url("/some/nice/picture.png");\n}',
'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}',
'a{background:url(/some/nice/picture.png);font:12px Helvetica,Arial,Nautica}',
'removing quotes in font and url (if possible)',
);
checkMinified(

View File

@@ -1,11 +1,11 @@
Package.describe({
summary: 'CSS minifier',
version: '1.6.2'
version: '1.6.4',
});
Npm.depends({
postcss: '8.4.16',
cssnano: '4.1.11'
postcss: '8.4.21',
cssnano: '5.1.15'
});
Package.onUse(function (api) {

View File

@@ -11,7 +11,7 @@ are using to render your interface, and want to use that familiar API.
Minimongo is used as a temporary data cache in the standard Meteor stack, to
learn more about mini-databases and what they can do, see [the project page on
www.meteor.com](https://www.meteor.com/mini-databases)
www.meteor.com](https://docs.meteor.com/api/collections.html)
## Internals

View File

@@ -521,6 +521,7 @@ ASYNC_CURSOR_METHODS.forEach(method => {
const asyncName = getAsyncMethodName(method);
Cursor.prototype[asyncName] = function(...args) {
try {
this[method].isCalledFromAsync = true;
return Promise.resolve(this[method].apply(this, args));
} catch (error) {
return Promise.reject(error);

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Meteor's client-side datastore: a port of MongoDB to Javascript",
version: '1.9.2',
version: '1.9.3',
});
Package.onUse(api => {

View File

@@ -1,4 +1,4 @@
let verifyErrors = Package['modules-runtime'].verifyErrors;
var verifyErrors = Package['modules-runtime'].verifyErrors;
meteorInstall = makeInstaller({
// On the client, make package resolution prefer the "browser" field of
@@ -14,7 +14,7 @@ meteorInstall = makeInstaller({
}
});
let Module = Package['modules-runtime'].meteorInstall.Module;
var Module = Package['modules-runtime'].meteorInstall.Module;
meteorInstall.Module.prototype.link = Module.prototype.link;
// This package should be running after modules-runtime but before modules.

View File

@@ -1,4 +1,4 @@
let verifyErrors = Package['modules-runtime'].verifyErrors;
var verifyErrors = Package['modules-runtime'].verifyErrors;
meteorInstall = makeInstaller({
// On the client, make package resolution prefer the "browser" field of
@@ -11,7 +11,7 @@ meteorInstall = makeInstaller({
}
});
let Module = Package['modules-runtime'].meteorInstall.Module;
var Module = Package['modules-runtime'].meteorInstall.Module;
meteorInstall.Module.prototype.link = Module.prototype.link;
// This package should be running after modules-runtime but before modules.

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'modules-runtime-hot',
version: '0.14.1',
version: '0.14.2',
summary: 'Patches modules-runtime to support Hot Module Replacement',
git: 'https://github.com/benjamn/install',
documentation: 'README.md',

View File

@@ -6,7 +6,24 @@ import {
} from "meteor/minimongo/constants";
import { normalizeProjection } from "./mongo_utils";
export function warnUsingOldApi (
methodName,
collectionName,
isCalledFromAsync
){
if (
process.env.WARN_WHEN_USING_OLD_API && // also ensures it is on the server
!isCalledFromAsync // must be true otherwise we should log
) {
if (collectionName === undefined || collectionName.includes('oplog')) return
console.warn(`
Calling method ${collectionName}.${methodName} from old API on server.
This method will be removed, from the server, in version 3.
Trace is below:`)
console.trace()
};
}
/**
* @summary Namespace for MongoDB-related items
* @namespace
@@ -339,7 +356,6 @@ Object.assign(Mongo.Collection.prototype, {
* @method estimatedDocumentCount
* @memberof Mongo.Collection
* @instance
* @param {MongoSelector} [selector] A query describing the documents to count
* @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client.
* @returns {Promise<number>}
*/
@@ -431,6 +447,15 @@ Object.assign(Mongo.Collection.prototype, {
* @returns {Object}
*/
findOne(...args) {
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"findOne",
this._name,
this.findOne.isCalledFromAsync
);
this.findOne.isCalledFromAsync = false;
return this._collection.findOne(
this._getFindSelector(args),
this._getFindOptions(args)
@@ -539,6 +564,15 @@ Object.assign(Mongo.Collection.prototype, {
throw new Error('insert requires an argument');
}
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"insert",
this._name,
this.insert.isCalledFromAsync
);
this.insert.isCalledFromAsync = false;
// Make a shallow clone of the document, preserving its prototype.
doc = Object.create(
Object.getPrototypeOf(doc),
@@ -653,6 +687,15 @@ Object.assign(Mongo.Collection.prototype, {
}
}
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"update",
this._name,
this.update.isCalledFromAsync
);
this.update.isCalledFromAsync = false;
selector = Mongo.Collection._rewriteSelector(selector, {
fallbackId: insertedId,
});
@@ -704,6 +747,14 @@ Object.assign(Mongo.Collection.prototype, {
return this._callMutatorMethod('remove', [selector], wrappedCallback);
}
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"remove",
this._name,
this.remove.isCalledFromAsync
);
this.remove.isCalledFromAsync = false;
// it's my collection. descend into the collection object
// and propagate any exception.
try {
@@ -745,6 +796,15 @@ Object.assign(Mongo.Collection.prototype, {
options = {};
}
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"upsert",
this._name,
this.upsert.isCalledFromAsync
);
this.upsert.isCalledFromAsync = false; // will not trigger warning in `update`
return this.update(
selector,
modifier,
@@ -788,6 +848,14 @@ Object.assign(Mongo.Collection.prototype, {
var self = this;
if (!self._collection.createIndex)
throw new Error('Can only call createIndex on server collections');
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"createIndex",
self._name,
self.createIndex.isCalledFromAsync
);
self.createIndex.isCalledFromAsync = false;
try {
self._collection.createIndex(index, options);
} catch (e) {
@@ -823,6 +891,15 @@ Object.assign(Mongo.Collection.prototype, {
throw new Error(
'Can only call _createCappedCollection on server collections'
);
// [FIBERS]
// TODO: Remove this when 3.0 is released.
warnUsingOldApi(
"_createCappedCollection",
self._name,
self._createCappedCollection.isCalledFromAsync
);
self._createCappedCollection.isCalledFromAsync = false;
self._collection._createCappedCollection(byteSize, maxDocuments);
},
@@ -916,13 +993,17 @@ function popCallbackFromArgs(args) {
}
}
ASYNC_COLLECTION_METHODS.forEach(methodName => {
const methodNameAsync = getAsyncMethodName(methodName);
Mongo.Collection.prototype[methodNameAsync] = function(...args) {
try {
// TODO: Fibers remove this when we remove fibers.
this[methodName].isCalledFromAsync = true;
return Promise.resolve(this[methodName](...args));
} catch (error) {
return Promise.reject(error);
}
};
});

View File

@@ -414,3 +414,46 @@ Tinytest.add('collection - count should release the session',
test.equal(preCount, postCount);
}
);
Tinytest.addAsync('collection - should not block on cursor mismatch (#12516)',
async function(test) {
if (!Meteor.isServer) {
return;
}
// Setup
const collection = new Mongo.Collection('test' + test.id);
Array.from({ length: 5 }).forEach((_, i) => {
collection.insert({ name: "Test-" + i });
});
// Test
const cursor = collection.find({ name: undefined });
let subscription;
const promise = new Promise((resolve) => {
setTimeout(() => {
test.ok(!!subscription);
resolve();
}, 500);
});
subscription = cursor.observe({});
subscription.stop();
await promise;
}
);
Meteor.isServer && Tinytest.addAsync('collection - simple add', async function(test){
var collectionName = 'add' + test.id;
var collection = new Mongo.Collection(collectionName);
var id = await collection.insert({a: 1});
test.equal((await collection.findOneAsync(id)).a, 1);
id = await collection.insertAsync({a: 2});
test.equal((await collection.findOneAsync(id)).a, 2);
await collection.removeAsync({});
})

View File

@@ -19,9 +19,11 @@ export class DocFetcher {
fetch(collectionName, id, op, callback) {
const self = this;
check(collectionName, String);
check(op, Object);
// If there's already an in-progress fetch for this cache key, yield until
// it's done and return whatever it returns.
if (self._callbacksForOp.has(op)) {

View File

@@ -103,9 +103,11 @@ export namespace Mongo {
maxDocuments?: number
): Promise<void>;
createIndex(
indexSpec: NpmModuleMongodb.IndexSpecification,
options?: NpmModuleMongodb.CreateIndexesOptions
): void;
createIndexAsync(
indexSpec: NpmModuleMongodb.IndexSpecification,
options?: NpmModuleMongodb.CreateIndexesOptions
): Promise<void>;
deny<Fn extends Transform<T> = undefined>(options: {
@@ -169,6 +171,17 @@ export namespace Mongo {
selector?: Selector<T> | ObjectID | string,
options?: O
): Promise<DispatchTransform<O['transform'], T, U> | undefined>;
/**
* Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`.
* @param selector The query for filtering the set of documents to count
* @param options All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client.
*/
countDocuments(selector?: Selector<T> | ObjectID | string, options?: MongoNpmModule.CountDocumentsOptions): Promise<number>;
/**
* Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`.
* @param options All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client.
*/
estimatedDocumentCount(options?: MongoNpmModule.EstimatedDocumentCountOptions): Promise<number>;
/**
* Insert a document in the collection. Returns its unique _id.
* @param doc The document to insert. May not yet have an _id attribute, in which case Meteor will generate one for you.
@@ -294,6 +307,7 @@ export namespace Mongo {
_createCappedCollection(byteSize?: number, maxDocuments?: number): void;
/** @deprecated */
_ensureIndex(
indexSpec: NpmModuleMongodb.IndexSpecification,
options?: NpmModuleMongodb.CreateIndexesOptions
): void;
_dropCollection(): Promise<void>;

View File

@@ -247,6 +247,7 @@ MongoConnection.prototype._createCappedCollection = function (
if (! self.db)
throw Error("_createCappedCollection called before Connection created?");
var future = new Future();
self.db.createCollection(
collectionName,
@@ -427,11 +428,14 @@ MongoConnection.prototype._remove = function (collection_name, selector,
MongoConnection.prototype._dropCollection = function (collectionName, cb) {
var self = this;
var write = self._maybeBeginWrite();
var refresh = function () {
Meteor.refresh({collection: collectionName, id: null,
dropCollection: true});
};
cb = bindEnvironmentForWrite(writeCallback(write, refresh, cb));
try {
@@ -466,6 +470,8 @@ MongoConnection.prototype._update = function (collection_name, selector, mod,
options, callback) {
var self = this;
if (! callback && options instanceof Function) {
callback = options;
options = null;
@@ -779,6 +785,9 @@ _.each(["insert", "update", "remove", "dropCollection", "dropDatabase"], functio
MongoConnection.prototype.upsert = function (collectionName, selector, mod,
options, callback) {
var self = this;
if (typeof options === "function" && ! callback) {
callback = options;
options = {};
@@ -801,15 +810,32 @@ MongoConnection.prototype.find = function (collectionName, selector, options) {
self, new CursorDescription(collectionName, selector, options));
};
MongoConnection.prototype.findOne = function (collection_name, selector,
options) {
MongoConnection.prototype.findOneAsync = async function (collection_name, selector,
options) {
var self = this;
if (arguments.length === 1)
selector = {};
options = options || {};
options.limit = 1;
return self.find(collection_name, selector, options).fetch()[0];
return (await self.find(collection_name, selector, options).fetchAsync())[0];
};
MongoConnection.prototype.findOne = function (collection_name, selector,
options) {
var self = this;
return Future.fromPromise(self.findOneAsync(collection_name, selector, options)).wait();
};
MongoConnection.prototype.createIndexAsync = function (collectionName, index,
options) {
var self = this;
// We expect this function to be called at startup, not from within a method,
// so we don't interact with the write fence.
var collection = self.rawCollection(collectionName);
return collection.createIndex(index, options);
};
// We'll actually design an index API later. For now, we just pass through to
@@ -817,13 +843,9 @@ MongoConnection.prototype.findOne = function (collection_name, selector,
MongoConnection.prototype.createIndex = function (collectionName, index,
options) {
var self = this;
// We expect this function to be called at startup, not from within a method,
// so we don't interact with the write fence.
var collection = self.rawCollection(collectionName);
var future = new Future;
var indexName = collection.createIndex(index, options, future.resolver());
future.wait();
return Future.fromPromise(self.createIndexAsync(collectionName, index, options));
};
MongoConnection.prototype.countDocuments = function (collectionName, ...args) {
@@ -843,6 +865,7 @@ MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex;
MongoConnection.prototype._dropIndex = function (collectionName, index) {
var self = this;
// This function is only used by test code, not within a method, so we don't
// interact with the write fence.
var collection = self.rawCollection(collectionName);
@@ -921,6 +944,7 @@ function setupSynchronousCursor(cursor, method) {
Cursor.prototype.count = function () {
const collection = this._mongo.rawCollection(this._cursorDescription.collectionName);
return Promise.await(collection.countDocuments(
replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo),
@@ -946,6 +970,7 @@ Cursor.prototype.count = function () {
const methodNameAsync = getAsyncMethodName(methodName);
Cursor.prototype[methodNameAsync] = function (...args) {
try {
this[methodName].isCalledFromAsync = true;
return Promise.resolve(this[methodName](...args));
} catch (error) {
return Promise.reject(error);
@@ -1160,6 +1185,7 @@ _.extend(SynchronousCursor.prototype, {
forEach: function (callback, thisArg) {
var self = this;
const wrappedFn = Meteor.wrapFn(callback);
// Get back to the beginning.
self._rewind();
@@ -1171,16 +1197,17 @@ _.extend(SynchronousCursor.prototype, {
while (true) {
var doc = self._nextObject();
if (!doc) return;
callback.call(thisArg, doc, index++, self._selfForIteration);
wrappedFn.call(thisArg, doc, index++, self._selfForIteration);
}
},
// XXX Allow overlapping callback executions if callback yields.
map: function (callback, thisArg) {
var self = this;
const wrappedFn = Meteor.wrapFn(callback);
var res = [];
self.forEach(function (doc, index) {
res.push(callback.call(thisArg, doc, index, self._selfForIteration));
res.push(wrappedFn.call(thisArg, doc, index, self._selfForIteration));
});
return res;
},

View File

@@ -887,15 +887,11 @@ _.extend(OplogObserveDriver.prototype, {
// there.
// XXX if this is slow, remove it later
if (self._published.size() !== newResults.size()) {
console.error('The Mongo server and the Meteor query disagree on how ' +
Meteor._debug('The Mongo server and the Meteor query disagree on how ' +
'many documents match your query. Cursor description: ',
self._cursorDescription);
throw Error(
"The Mongo server and the Meteor query disagree on how " +
"many documents match your query. Maybe it is hitting a Mongo " +
"edge case? The query is: " +
EJSON.stringify(self._cursorDescription.selector));
}
self._published.forEach(function (doc, id) {
if (!newResults.has(id))
throw Error("_published has a doc that newResults doesn't; " + id);

View File

@@ -9,7 +9,7 @@
Package.describe({
summary: "Adaptor for using MongoDB and Minimongo over DDP",
version: '1.16.5',
version: '1.16.6',
});
Npm.depends({

View File

@@ -1,3 +1,8 @@
import {
ASYNC_COLLECTION_METHODS,
getAsyncMethodName
} from "meteor/minimongo/constants";
MongoInternals.RemoteCollectionDriver = function (
mongo_url, options) {
var self = this;
@@ -28,6 +33,16 @@ Object.assign(MongoInternals.RemoteCollectionDriver.prototype, {
REMOTE_COLLECTION_METHODS.forEach(
function (m) {
ret[m] = _.bind(self.mongo[m], self.mongo, name);
if (!ASYNC_COLLECTION_METHODS.includes(m)) return;
const asyncMethodName = getAsyncMethodName(m);
ret[asyncMethodName] = function (...args) {
try {
return Promise.resolve(ret[m](...args));
} catch (error) {
return Promise.reject(error);
}
}
});
return ret;
}

View File

@@ -62,299 +62,299 @@
}
},
"@aws-sdk/abort-controller": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.271.0.tgz",
"integrity": "sha512-sP4RvP0fvmMySS6hV/EKMrTJ9KVMH85rn1EKvmJ3nBTKRKiR8GQUS/vX+dhLYu+3jRs2P6cY2zjGzpaOcII91w=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.310.0.tgz",
"integrity": "sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g=="
},
"@aws-sdk/client-cognito-identity": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.271.0.tgz",
"integrity": "sha512-mPDRSMCnFjXccsi630+LqLycw5adry/eMPmzc76x6FLvXwW/tQtq1XsQT5MvwYKYasG78WhD/BBPymDENf6slQ=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.316.0.tgz",
"integrity": "sha512-+x0FvG+zXwR40O/gmksxpMUc2DHTdezZZZjOMmd8Z413zb6JZEu4lBweA9pYjXiUYuYrLCd+MP70JI8xzjs17w=="
},
"@aws-sdk/client-sso": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.271.0.tgz",
"integrity": "sha512-auWPqok8yJ2UOQfNrvfLNmvf0tRAbekaZRvZZ2TzTKTKd7yz6V7Y5+AdRnp01FHoOQ+8A7MHTXtp7h7i9qltKw=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.316.0.tgz",
"integrity": "sha512-wGXfIhR0lJGB8QTT0fwSwwklHePHxd2GW3IQt3trXnEYe0frmJ7vYRnVL5CSRKsikLDmaU7ll3SdsshMzQzo3w=="
},
"@aws-sdk/client-sso-oidc": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.271.0.tgz",
"integrity": "sha512-pYN8r0slDbP0v2q0SyLKihE2PPfbsF/hH7+11w6OpAMvSGvfm+m8R5rB49Szy3bkDudR0MhLpD6D76yoy9ckrQ=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.316.0.tgz",
"integrity": "sha512-e2fvC7o42YV+LcZYfXCcvBn4L7NM9oNccnZ7T+pS6SFpHZlaqkw4uuQMRE6iUAof+Id7Mt7xDrz1x2yGlP+8GA=="
},
"@aws-sdk/client-sts": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.271.0.tgz",
"integrity": "sha512-dsLGj1Q3EdqLYNjm0WpeK07wv8Xed6R+tCf+x4KMWOAVAnz72XuoZNWDI2NvACubAniEhpFycMmf39Y6NCAkLg=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.316.0.tgz",
"integrity": "sha512-5SD59+DRVy1mKckGs/5J8OwWpRS3E5v4BX19XaX/s9JJ5Rw9aZd9DP4SZVpeNXztIPjkQSEzHgrUVlZFB1QJgg=="
},
"@aws-sdk/config-resolver": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.271.0.tgz",
"integrity": "sha512-WNtUjOa9ufKK4+o58YHosjU9J8v494Fb10tHFqD4OspFWLxBKzSJ+r6xpQRcVPucxsmocGJ2QhIiNYo8OySKkA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz",
"integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g=="
},
"@aws-sdk/credential-provider-cognito-identity": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.271.0.tgz",
"integrity": "sha512-XL/CL31QVjaFqkCe3PSzesrip0DTI+idxiEyZ4s/DQ8NhxUVshE7wI00Wv+VQof1CtyT5ONWjhZrj00MD2L0tA=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.316.0.tgz",
"integrity": "sha512-tHfYEhVfAwauEFkHCgqTWASm3AN8jD3C8ecbnBFIFuBKZFQG+QwlUrJc05jOMx2xRctA7NRm8lD3YmvWmfYw1g=="
},
"@aws-sdk/credential-provider-env": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.271.0.tgz",
"integrity": "sha512-lKZGcDYe8us2Ep7/AjhLyMMTq0NuVt+M+L1eedBGRuGkx/Hrvn4qwlIvSXZhiodoQVa+Wr1zIah3Z06U0dTaZA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz",
"integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A=="
},
"@aws-sdk/credential-provider-imds": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.271.0.tgz",
"integrity": "sha512-u3KsjtGBo1SA9HQAVxfA7zHWirlrdKsqsMpnp4eOtixZLoz1e2EytrR5XZem2HND0lzjrUrEPGDPp5OpDtcHxw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz",
"integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w=="
},
"@aws-sdk/credential-provider-ini": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.271.0.tgz",
"integrity": "sha512-zIclMwXbJeNev74+0tbxLpEO2Js7AhqvR2Msiytz05kOXRyk61NMEavtKRp1YxD2KMptONnvNlbWbNW2rrRDnw=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.316.0.tgz",
"integrity": "sha512-ZADkpdEjFCAXyzEpYbCRENlZ/AQEwevWdPd2yshjNo7xvOcepv4pPIBpYd8h9LvRafSLGA7zlWDz84hkIt+HKA=="
},
"@aws-sdk/credential-provider-node": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.271.0.tgz",
"integrity": "sha512-hfdJ+8QM5xXEm4mF4AfIy6T1fVb2zTaUVm5PfPDHtkggVM1L+QSywEkZ2lUqQZMLbbatJqVLy2EMA91k5kjVrA=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.316.0.tgz",
"integrity": "sha512-oE1LTXP8XZp4bT8LhBeolMRiz0RwnmHDC2XpUmWO8LTmbDNrQO0mVzxEvXDLeKaN5BIFIJqNFlMgjWUMa9Kwcw=="
},
"@aws-sdk/credential-provider-process": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.271.0.tgz",
"integrity": "sha512-Q1HIZYTUYLVe0cNc3HbtFOFzgo3A6PHcmT62T8XClAhFRhkOsJ/KWUybjm8col49/1uqIjKA20E7P7f5Qnn2TQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz",
"integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA=="
},
"@aws-sdk/credential-provider-sso": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.271.0.tgz",
"integrity": "sha512-TIvsv4xXTME6UsH7g05IzVDCLujaMmgv45A0KcAyM/J/HvFQ9IBOBdyKGU5zIawPvCWXiqQqZs/kDchdB2sjXA=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.316.0.tgz",
"integrity": "sha512-8/O2twlsoV1bDkZ9jd7JCMWsftfyoTyRT1UYscsKZGUDEgZRAxRkzS3GLYuLXEWNuxb1OB9rYk/cEJoxwy7T9g=="
},
"@aws-sdk/credential-provider-web-identity": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.271.0.tgz",
"integrity": "sha512-GD1mg7fMA3ESl0jdzH/+keZHV9Fue/iaGMIWNCUm7M9dOJo0JZbDNzSaMtxZnuA6xtkvw3FiLH6ZxPt0V+7wmg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz",
"integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw=="
},
"@aws-sdk/credential-providers": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.271.0.tgz",
"integrity": "sha512-s3qTsTTZESfb2mvfxAgWUhOumdZHBXA+WzEqagvzwaxdRZSwrubtGYB24bm4e+TL6Rr7N5DTs6Ty3NPI524Jhw=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.316.0.tgz",
"integrity": "sha512-PH5qpgVEcRTHnG/xJ01NlYu85YBhHr2ZTgPweuHS5RDNvzuEaoCH5U7BNC8CSfpHXaGACCNYalG8kjPSFiFmjA=="
},
"@aws-sdk/fetch-http-handler": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.271.0.tgz",
"integrity": "sha512-yc0YgKioACFcfs7RPtVHRlpsyYJNdEHkqiWtnRSXG0vuZHAkfvwzchrDK4bizMblnmEV/xbl495ZqDlVbQ0c9A=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz",
"integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw=="
},
"@aws-sdk/hash-node": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.271.0.tgz",
"integrity": "sha512-VamRhkGo2uaVe7KhQhdTqpp9y5JKSFNE3yCUZf/o6lGwL9BgBpBiVqzwCePtas7hAphAaOYvefIwx0XLaCeQ1w=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz",
"integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ=="
},
"@aws-sdk/invalid-dependency": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.271.0.tgz",
"integrity": "sha512-ZN8JmN/t+4UTHkQ6wdod2KKLfJcewLS3D/0iZLnvvOzLlymhcHp9QY8t//RObF+WxnlWeCAvZttoMl/a2MLpYQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz",
"integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA=="
},
"@aws-sdk/is-array-buffer": {
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz",
"integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz",
"integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ=="
},
"@aws-sdk/middleware-content-length": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.271.0.tgz",
"integrity": "sha512-bmfqCvjFcowa6jLltJIkGHNXY599Fu9ROoMtYjQiD2ixWHmUpS0I/VivcxXL3uES2qhehxYXyJFyCt7aqRQqcA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz",
"integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ=="
},
"@aws-sdk/middleware-endpoint": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.271.0.tgz",
"integrity": "sha512-pibhIe57e68NAfDUY5c7d9zo6WfNwgfclwtrK0nV3OXw9psNeCLGLC1YbzsTun49tm0ICSmkHgmqfsXAVe4HWA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz",
"integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg=="
},
"@aws-sdk/middleware-host-header": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.271.0.tgz",
"integrity": "sha512-sp75WZDzDui/Wr3GnQH/db4DXgVdOpKdRQddDsRuULzri8HeJlhMW+JCP+sP0kQmkO06Dagxv1tSmENUxFhPaQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz",
"integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA=="
},
"@aws-sdk/middleware-logger": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.271.0.tgz",
"integrity": "sha512-mB/vayfsuc20PySSpbbQ56CPER/RAZF5oGkwGuwFI3bY+VwRun0MOnx3yHj7Ja2DN1ZEOH1Hzrb0eUgREozmHw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz",
"integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg=="
},
"@aws-sdk/middleware-recursion-detection": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.271.0.tgz",
"integrity": "sha512-prrS/YL3GdLODqVBSgxvpUfo9aPBLB3Km5wNBdbhjjN0rI1RqjD+0LquVgaz6C1VU/I8cYbnxrFYtQVcdgnWpg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz",
"integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ=="
},
"@aws-sdk/middleware-retry": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.271.0.tgz",
"integrity": "sha512-yCBXmxbFGT/4czTi+e4z7lV0nbMWctvvzOtl1ssBiG0LagijIhK4KUp0KTnqDJ+yBqxMpd7wNJ1B0NdS0re6Fw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz",
"integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g=="
},
"@aws-sdk/middleware-sdk-sts": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.271.0.tgz",
"integrity": "sha512-/h8+PAx+85M+tSL/kl1lWVgHrrodmDRuQuDLXC7ufE6C1JRxRBkWMTOg6S3ZeuKo1Va/8RcAKf7jtkGdIBD5HQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz",
"integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ=="
},
"@aws-sdk/middleware-serde": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.271.0.tgz",
"integrity": "sha512-louPEKEZP2TtTavMwg4k6IJjEbXC6xV05Wtb4I+ZKzjupoTG80nmLtgPU7rnvweej3D69aeSQETfPoq1N4u4mg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz",
"integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg=="
},
"@aws-sdk/middleware-signing": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.271.0.tgz",
"integrity": "sha512-jCxbt6sehnmV6we2uu0rY5McREJQ9WGQ3HCtjG1qSxm1vJkROX40IUvq7uvwPi3FquqIv2pCc64vLuDdhfs6OA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz",
"integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ=="
},
"@aws-sdk/middleware-stack": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.271.0.tgz",
"integrity": "sha512-ojbvxVdJRzvHx1SiXTX8z5qtsX/86+puqqmhTNQTed0/sp856rJVHrE+59qrOa8tNX+dHih5nzmjZ2OvhP+duA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz",
"integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg=="
},
"@aws-sdk/middleware-user-agent": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.271.0.tgz",
"integrity": "sha512-VnoY5DfdkSorT/bM91FPwHduzkRFBTi/MyU/J08xPkuAQfu2CmvIBr8W15XN1ysAZbZVyDir7NeE9MNG6Q/soA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.310.0.tgz",
"integrity": "sha512-x3IOwSwSbwKidlxRk3CNVHVUb06SRuaELxggCaR++QVI8NU6qD/l4VHXKVRvbTHiC/cYxXE/GaBDgQVpDR7V/g=="
},
"@aws-sdk/node-config-provider": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.271.0.tgz",
"integrity": "sha512-PbEQ7GRO9/oXXrxIMPkOsL1lKzi3FzMizFj1tLjSkN+lvUaRt2w9Yrb+P3G7Wr2VyniI8QwpAPnebQ+5Rg7yig=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz",
"integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng=="
},
"@aws-sdk/node-http-handler": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.271.0.tgz",
"integrity": "sha512-r/wLPLUo3HeWHumvnYxP4LvMz1cKpVO7XVognt5caeDakS2CDiFN3NiCO2PFxOGoWCyMDKcroKtIdXETcgrEbQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.310.0.tgz",
"integrity": "sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg=="
},
"@aws-sdk/property-provider": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.271.0.tgz",
"integrity": "sha512-y95eWGs2tbCESZZVqNWbDXOL43y18bZSS0mfac2n7srOfeuVh+4+8Zdhsnz/NW3Ao61+k1IxKCFnX0iKfJSu2Q=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz",
"integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g=="
},
"@aws-sdk/protocol-http": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.271.0.tgz",
"integrity": "sha512-WWyS/M+A0NoEBBLbgO1qG7oxEGWvhjsFJgX0Yzz38mKIjW8G/31X9ylaCQoGFSOTn6GXBRqc/i0P86os+wL45Q=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz",
"integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ=="
},
"@aws-sdk/querystring-builder": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.271.0.tgz",
"integrity": "sha512-2FKaoeOgCyn2eShq4hZrEBQ9euHYMvh0aFwWrjQgXjUWJmV4Q+/+eob/sEDeeYvkMW45T5aIG7D+hbVowgWZAQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz",
"integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A=="
},
"@aws-sdk/querystring-parser": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.271.0.tgz",
"integrity": "sha512-SGcxf+gaSMMST806zQxETEoe3ENWkncQh+cpDNDRo/oS582PMd7tIOAxP9JJdLJGp9UkIdSkTLWXDjzk9Zt02w=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz",
"integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA=="
},
"@aws-sdk/service-error-classification": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.271.0.tgz",
"integrity": "sha512-yTnxoeCa4uMRfpaaq6oG1h1a01vXQ2al+D0DyX+D5sw7u6RyZOaxxUEbyfEPTN+JtRw+M+zcdlvto3swIwRqoQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz",
"integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw=="
},
"@aws-sdk/shared-ini-file-loader": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.271.0.tgz",
"integrity": "sha512-PR1Hco+r1sH7WlqxaO3Vvl6a8I5juvwVjwjjorbI3EVsxQgEcyCjy1ZVnpCAxY1Xam7ne5nAWO6Y6LtfY4JJ5g=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz",
"integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA=="
},
"@aws-sdk/signature-v4": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.271.0.tgz",
"integrity": "sha512-OzS+h0MGqzukJSrPqVi08pWDGZkq8U/yXf2LfCkQz58Rv/pbCuDIIN7Oab6IwnVPQV7KoCsegYL3e6BpOp1qpA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz",
"integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q=="
},
"@aws-sdk/smithy-client": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.271.0.tgz",
"integrity": "sha512-8wqNArFoLx2hy2kT5jV7JsaZ4jIqI535K1WXBCkzVLKNMv6RVYCBN57I5+C5sgVtHCZwy9RLzRHJIGLEIKIfBg=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.316.0.tgz",
"integrity": "sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw=="
},
"@aws-sdk/token-providers": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.271.0.tgz",
"integrity": "sha512-tCh3Pw7VuSGT6yg8n7IeNc25IT8cjPS9Q0YKzjN8rPBZW5iI8/kJyZ7kQBj52JD8WrEYCoxG4hnDvawe1e1lAA=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.316.0.tgz",
"integrity": "sha512-foJ2YmB8A/mtp52riO2zdmBgzA3IpASNgUhY9FZg1BKpGcjqLQDGYP+BY3BA0H7CFsMa4PCf13M5wWwn1onyBA=="
},
"@aws-sdk/types": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.271.0.tgz",
"integrity": "sha512-w4oNKEaBul7eh2IM97c89xaH9Ti8+e+u/Rc1ZkgNtpnfOpDUU2t3ugJ91ihGH+xtASQCWJTopTDfX5CuKsQQtQ=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz",
"integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A=="
},
"@aws-sdk/url-parser": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.271.0.tgz",
"integrity": "sha512-HuL38pnLaZX4zjlsm9sZfyiPvEK9gFl9viX7wpBJcF50+KgRcj1rasYCy8AfWlCEtL7A214xEutFwGqLfTyDag=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz",
"integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw=="
},
"@aws-sdk/util-base64": {
"version": "3.208.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz",
"integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz",
"integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg=="
},
"@aws-sdk/util-body-length-browser": {
"version": "3.188.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz",
"integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz",
"integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g=="
},
"@aws-sdk/util-body-length-node": {
"version": "3.208.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz",
"integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz",
"integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ=="
},
"@aws-sdk/util-buffer-from": {
"version": "3.208.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz",
"integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz",
"integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw=="
},
"@aws-sdk/util-config-provider": {
"version": "3.208.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz",
"integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz",
"integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg=="
},
"@aws-sdk/util-defaults-mode-browser": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.271.0.tgz",
"integrity": "sha512-zyCIT/4PKiBxblZLKcMTNCllKcPhLuE08lIv1fGaqgIZzULFaAGjd/lpTO1q7I2hOt5oFL/4uzTFDrG8g5HJAg=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.316.0.tgz",
"integrity": "sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w=="
},
"@aws-sdk/util-defaults-mode-node": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.271.0.tgz",
"integrity": "sha512-QqruC9fkrraoWxrzG7EFX/pOkoLblV2YPsvPHR37DzKSssnsQxOPbiAF95Qw2zocsDrpDuxJEe2RM800vunIsw=="
"version": "3.316.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.316.0.tgz",
"integrity": "sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ=="
},
"@aws-sdk/util-endpoints": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.271.0.tgz",
"integrity": "sha512-qr+IWZB0Th+TcarjTW5ZakkbKxBNKlLsnFiw3j+gECDA5raUEyTB3w6tRH0nhPFNzN6cM5P8arKlpm3R7f002Q=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.310.0.tgz",
"integrity": "sha512-zG+/d/O5KPmAaeOMPd6bW1abifdT0H03f42keLjYEoRZzYtHPC5DuPE0UayiWGckI6BCDgy0sRKXCYS49UNFaQ=="
},
"@aws-sdk/util-hex-encoding": {
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz",
"integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz",
"integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA=="
},
"@aws-sdk/util-locate-window": {
"version": "3.208.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz",
"integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz",
"integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w=="
},
"@aws-sdk/util-middleware": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.271.0.tgz",
"integrity": "sha512-qE+t+JKygIPtXvik1Dy9B2dQx8pJ5NFPms/uFi9kOexCJy8mWd4FApK+sCwT5TGWte+tY2Fg7fcTs5g7ufcsKw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz",
"integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog=="
},
"@aws-sdk/util-retry": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.271.0.tgz",
"integrity": "sha512-tO3nHBtAlBSppM37AJNc/rUwLNypPvkDC7av2cyuCDTaH4OHLd/RqZUtvMtSXJKjxR4v8RiyiQvRVE65u0Ermw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz",
"integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA=="
},
"@aws-sdk/util-uri-escape": {
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz",
"integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz",
"integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q=="
},
"@aws-sdk/util-user-agent-browser": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.271.0.tgz",
"integrity": "sha512-nFU4flPzzkG6c46ZKroXtQc6D8g/8ei3nUYJF2Poc+3UD/GiuKASWR+ymALN7Zc2YfR95LcVCNdcm1rDI1WLXA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz",
"integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw=="
},
"@aws-sdk/util-user-agent-node": {
"version": "3.271.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.271.0.tgz",
"integrity": "sha512-okLJbQ1iBmAH+OdqDd6AmINUAQdLnhi+D9rvp4ZoE5DIhgbzFIuUK6SByB7Rl/9XE76wzkHfRhZJYPyD1cPkQA=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz",
"integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg=="
},
"@aws-sdk/util-utf8": {
"version": "3.254.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz",
"integrity": "sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw=="
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz",
"integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA=="
},
"@aws-sdk/util-utf8-browser": {
"version": "3.259.0",
@@ -362,9 +362,9 @@
"integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw=="
},
"@types/node": {
"version": "18.13.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz",
"integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg=="
"version": "18.15.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz",
"integrity": "sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg=="
},
"@types/webidl-conversions": {
"version": "7.0.0",
@@ -397,9 +397,9 @@
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="
},
"fast-xml-parser": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
"integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA=="
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz",
"integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg=="
},
"ieee754": {
"version": "1.2.1",
@@ -417,9 +417,9 @@
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
},
"mongodb": {
"version": "4.14.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz",
"integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg=="
"version": "4.16.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz",
"integrity": "sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g=="
},
"mongodb-connection-string-url": {
"version": "2.6.0",

View File

@@ -3,12 +3,12 @@
Package.describe({
summary: "Wrapper around the mongo npm package",
version: '4.14.0',
version: '4.16.0',
documentation: null
});
Npm.depends({
mongodb: "4.14.0"
mongodb: "4.16.0"
});
Package.onUse(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'rate-limit',
version: '1.0.9',
version: '1.1.1',
// Brief, one-line summary of the package.
summary: 'An algorithm for rate limiting anything',
// URL to the Git repository containing the source code for this package.

View File

@@ -164,6 +164,7 @@ class RateLimiter {
}
reply.allowed = false;
reply.numInvocationsLeft = 0;
reply.ruleId = rule.id;
rule._executeCallback(reply, input);
} else {
// If this is an allowed attempt and we haven't failed on any of the
@@ -174,6 +175,7 @@ class RateLimiter {
reply.numInvocationsLeft = rule.options.numRequestsAllowed -
numInvocations;
}
reply.ruleId = rule.id;
rule._executeCallback(reply, input);
}
});

View File

@@ -1,6 +1,6 @@
const runtime = require('react-refresh/runtime');
var runtime = require('react-refresh/runtime');
let timeout = null;
var timeout = null;
function scheduleRefresh() {
if (!timeout) {
timeout = setTimeout(function () {
@@ -88,14 +88,14 @@ window.$RefreshSig$ = function () {
return function (type) { return type; };
};
const moduleInitialState = new WeakMap();
var moduleInitialState = new WeakMap();
module.hot.onRequire({
after: function (module) {
// TODO: handle modules with errors
const beforeStates = moduleInitialState.get(module);
const beforeState = beforeStates && beforeStates.pop();
var beforeStates = moduleInitialState.get(module);
var beforeState = beforeStates && beforeStates.pop();
if (!beforeState) {
return;
}
@@ -117,7 +117,7 @@ module.exports = function setupModule (module) {
return;
}
let beforeStates = moduleInitialState.get(module);
var beforeStates = moduleInitialState.get(module);
if (beforeStates === undefined) {
beforeStates = [];
@@ -129,7 +129,7 @@ module.exports = function setupModule (module) {
window.RefreshRuntime = runtime;
window.$RefreshReg$ = function (type, _id) {
const fullId = module.id + ' ' + _id;
var fullId = module.id + ' ' + _id;
RefreshRuntime.register(type, fullId);
}
window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;

View File

@@ -1,6 +1,6 @@
let enabled = __meteor_runtime_config__ &&
var enabled = __meteor_runtime_config__ &&
__meteor_runtime_config__.reactFastRefreshEnabled;
let hmrEnabled = !!module.hot;
var hmrEnabled = !!module.hot;
var setupModule;
function init(module) {
@@ -16,7 +16,7 @@ if (
hmrEnabled &&
enabled
) {
let inBefore = false;
var inBefore = false;
module.hot.onRequire({
before: function (module) {
if (inBefore) {

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'react-fast-refresh',
version: '0.2.6',
version: '0.2.7',
summary: 'Automatically update React components with HMR',
documentation: 'README.md',
devOnly: true,

View File

@@ -8,7 +8,7 @@ import { StreamClientCommon } from "./common.js";
// Statically importing SockJS here will prevent native WebSocket usage
// below (in favor of SockJS), but will ensure maximum compatibility for
// clients stuck in unusual networking environments.
import "./sockjs-0.3.4.js";
import SockJS from "./sockjs-1.6.1-min-.js";
export class ClientStream extends StreamClientCommon {
// @param url {String} URL to Meteor app
@@ -158,7 +158,7 @@ export class ClientStream extends StreamClientCommon {
this._cleanup(); // cleanup the old socket, if there was one.
var options = {
protocols_whitelist: this._sockjsProtocolsWhitelist(),
transports: this._sockjsProtocolsWhitelist(),
...this.options._sockjsOptions
};

View File

@@ -1,6 +1,6 @@
Package.describe({
name: "socket-stream-client",
version: "0.5.0",
version: '0.5.1',
summary: "Provides the ClientStream abstraction used by ddp-client",
documentation: "README.md"
});
@@ -15,7 +15,6 @@ Package.onUse(function(api) {
api.use("modern-browsers");
api.use("retry"); // TODO Try to remove this.
api.addFiles("sockjs-0.3.4.js", "legacy");
api.mainModule("browser.js", "client", { lazy: true });
api.addFiles("server.js", "server");

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -2,9 +2,9 @@
"lockfileVersion": 1,
"dependencies": {
"@babel/runtime": {
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
"integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw=="
"version": "7.21.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz",
"integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw=="
},
"braces": {
"version": "3.0.2",
@@ -22,9 +22,9 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.0.tgz",
"integrity": "sha512-pMu1vSJIwJPS/YuMJAJFjvKA2OC7rvgKqJHr90JmZ1kv/hO+MuzqHRSWqyn730vlOwc1Bx/c8+3izTGzmKyXNQ=="
},
"micromatch": {
"version": "4.0.5",
@@ -37,9 +37,9 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
"version": "0.13.11",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
"source-map": {
"version": "0.7.4",
@@ -50,11 +50,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
}

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'standard-minifier-css',
version: '1.9.0',
version: '1.9.2',
summary: 'Standard css minifier used with Meteor apps by default.',
documentation: 'README.md',
});
@@ -13,9 +13,9 @@ Package.registerBuildPlugin({
'logging',
],
npmDependencies: {
"@babel/runtime": "7.18.9",
"@babel/runtime": "7.21.0",
"source-map": "0.7.4",
"lru-cache": "6.0.0",
"lru-cache": "8.0.0",
"micromatch": "4.0.5",
},
sources: [
@@ -24,7 +24,7 @@ Package.registerBuildPlugin({
});
Package.onUse(function(api) {
api.use('minifier-css@1.5.4');
api.use('minifier-css@1.6.2');
api.use('isobuild:minifier-plugin@1.0.0');
api.use('logging@1.3.1');
});

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Dependency tracker to allow reactive callbacks",
version: '1.3.1',
version: '1.3.2',
});
Package.onUse(function (api) {

View File

@@ -110,7 +110,7 @@ export namespace Tracker {
): Computation;
/**
* Helper function to make the tracker work with promises.
* @summary Helper function to make the tracker work with promises.
* @param computation Computation that tracked
* @param func async function that needs to be called and be reactive
*/

View File

@@ -594,6 +594,11 @@ Tracker.nonreactive = function (f) {
return Tracker.withComputation(null, f);
};
/**
* @summary Helper function to make the tracker work with promises.
* @param computation Computation that tracked
* @param func async function that needs to be called and be reactive
*/
Tracker.withComputation = function (computation, f) {
var previousComputation = Tracker.currentComputation;

View File

@@ -0,0 +1 @@
node_modules

View File

@@ -0,0 +1,7 @@
This directory and the files immediately inside it are automatically generated
when you change this package's NPM dependencies. Commit the files in this
directory (npm-shrinkwrap.json, .gitignore, and this README) to source control
so that others run the same versions of sub-dependencies.
You should NOT check in the node_modules directory that Meteor automatically
creates; if you are using git, the .gitignore file tells git to ignore it.

Some files were not shown because too many files have changed in this diff Show More