From d90b1ab34d1bfee4a21f058e1009af9a5c37bd20 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 11:59:38 +0200 Subject: [PATCH 01/21] docs(migrate10): add migration guide --- docs/guides/migration/migrate10.md | 31 ++++++++++++++++++++++++++++++ website/sidebars.js | 1 + 2 files changed, 32 insertions(+) create mode 100644 docs/guides/migration/migrate10.md diff --git a/docs/guides/migration/migrate10.md b/docs/guides/migration/migrate10.md new file mode 100644 index 000000000..07389d40a --- /dev/null +++ b/docs/guides/migration/migrate10.md @@ -0,0 +1,31 @@ +--- +id: migrate10 +title: 'Migrate to version 10.0.0' +--- + +Here are the Important changes made for 10.0.0 + +:::caution Important, Read this first +This Guide is written for migration from version `9.4.0` to `10.0.0`, for versions `>10.0.0 <11.0.0`, please consult the [CHANGELOG](https://github.com/nodkz/mongodb-memory-server/blob/master/CHANGELOG.md) +::: + +## Breaking Changes + + + +## Non-Breaking changes / Additions + + diff --git a/website/sidebars.js b/website/sidebars.js index b1df2b6d4..8b4d0a2e4 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -41,6 +41,7 @@ module.exports = { 'guides/common-issues', ], Migration: [ + 'guides/migration/migrate10', 'guides/migration/migrate9', 'guides/migration/migrate8', 'guides/migration/migrate7', From 30b302e5518c3df92c4b229035b2b229639dfb3c Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 12:03:09 +0200 Subject: [PATCH 02/21] feat: set lowest supported nodejs version to 16.20.1 fixes #805 BREAKING CHANGE: Lowest supported NodeJS version is now 16.20.1 --- .github/workflows/tests.yml | 4 ++-- README.md | 2 +- docs/guides/migration/migrate10.md | 6 +++--- docs/guides/quick-start-guide.md | 2 +- packages/mongodb-memory-server-core/package.json | 2 +- .../mongodb-memory-server-core/src/util/MongoInstance.ts | 4 ++-- packages/mongodb-memory-server-global-4.0/package.json | 2 +- packages/mongodb-memory-server-global-4.2/package.json | 2 +- packages/mongodb-memory-server-global-4.4/package.json | 2 +- packages/mongodb-memory-server-global/package.json | 2 +- packages/mongodb-memory-server/package.json | 2 +- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 821e3e58f..7fdb15728 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [14.x, 16.x, 18.x, 20.x, 22.x] + node-version: [16.x, 18.x, 20.x, 22.x] steps: - uses: actions/checkout@v4 if: github.event.inputs.git-ref == '' @@ -49,7 +49,7 @@ jobs: env: CI: true - name: Send codecov.io stats - if: matrix.node-version == '14.x' + if: matrix.node-version == '16.x' uses: codecov/codecov-action@v3 publish: diff --git a/README.md b/README.md index 91661e52d..23264bb83 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Choose any package, because they are the same. They differ only in the default c ### Requirements -- NodeJS: 14.20.1+ +- NodeJS: 16.20.1+ - Typescript: 5.0+ (if used) And one of those (on Linux): diff --git a/docs/guides/migration/migrate10.md b/docs/guides/migration/migrate10.md index 07389d40a..0af22883e 100644 --- a/docs/guides/migration/migrate10.md +++ b/docs/guides/migration/migrate10.md @@ -11,11 +11,11 @@ This Guide is written for migration from version `9.4.0` to `10.0.0`, for versio ## Breaking Changes - +The tsconfig `target` option has been updated to `es2021`, which will result in less polyfills. +This should be a non-breaking change. diff --git a/packages/mongodb-memory-server-core/tsconfig.json b/packages/mongodb-memory-server-core/tsconfig.json index 9cf16a145..210ef1d5e 100644 --- a/packages/mongodb-memory-server-core/tsconfig.json +++ b/packages/mongodb-memory-server-core/tsconfig.json @@ -3,7 +3,7 @@ "rootDir": "./src", "outDir": "./build", "noEmit": false, - "target": "es2020", + "target": "es2021", "module": "commonjs", "sourceMap": true, "declaration": true, From 2436d6300bd863efa3300103a3223d3849d0bda3 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:08:40 +0200 Subject: [PATCH 06/21] feat(resolveConfig): update default binary version to 7.x BREAKING CHANGE: Default binary version is now "7.0.9" --- README.md | 4 ++-- docs/api/config-options.md | 2 +- docs/guides/migration/migrate10.md | 12 +++++++++--- docs/guides/mongodb-server-versions.md | 1 + .../src/__tests__/MongoMemoryReplSet.test.ts | 8 ++++++-- .../src/__tests__/MongoMemoryServer.test.ts | 11 ++++++++--- .../src/__tests__/testUtils/globalSetup.ts | 2 +- .../src/util/resolveConfig.ts | 2 +- 8 files changed, 29 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 23264bb83..917ea0148 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ On Linux, you will also need `libcurl4` (or `libcurl3` on some older distro vers ### Configuring which mongod binary to use -The default behavior is that version `6.0.14` for your OS will be downloaded. By setting [Environment variables](https://nodkz.github.io/mongodb-memory-server/docs/api/config-options) you are able to specify which version and binary will be downloaded: +The default behavior is that version `7.0.9` for your OS will be downloaded. By setting [Environment variables](https://nodkz.github.io/mongodb-memory-server/docs/api/config-options) you are able to specify which version and binary will be downloaded: ```sh export MONGOMS_DOWNLOAD_URL=https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.8.tgz @@ -128,7 +128,7 @@ const mongod = new MongoMemoryServer({ auth?: boolean, // add "--auth" argument, dont use this directly use top-level "auth" }, binary?: { - version?: string, // by default '6.0.14' + version?: string, // by default '7.0.9' downloadDir?: string, // see the documentation on what is chosen by default https://nodkz.github.io/mongodb-memory-server/docs/api/config-options#download_dir platform?: string, // by default os.platform() arch?: string, // by default os.arch() diff --git a/docs/api/config-options.md b/docs/api/config-options.md index c85e1c3e5..4436cbb21 100644 --- a/docs/api/config-options.md +++ b/docs/api/config-options.md @@ -93,7 +93,7 @@ Example: `ubuntu-18.04` Option `VERSION` is used to set what mongodb version should be downloaded -Default: `6.0.14` (see [Mongodb Server Versions](../guides/mongodb-server-versions.md) for a complete list and policy) +Default: `7.0.9` (see [Mongodb Server Versions](../guides/mongodb-server-versions.md) for a complete list and policy) This Option does not have a effect when [`ARCHIVE_NAME`](#archive_name) or [`DOWNLOAD_URL`](#download_url) is defined. diff --git a/docs/guides/migration/migrate10.md b/docs/guides/migration/migrate10.md index 043aa0d7f..282aea987 100644 --- a/docs/guides/migration/migrate10.md +++ b/docs/guides/migration/migrate10.md @@ -17,11 +17,17 @@ With 10.0.0 the minimal nodejs required is `16.20.1`. -### Default binary version is now 6.x +### Default binary version is now 7.x -The default binary version has been upgraded from `5.0.x` to `6.0.x`. For more specifics see [mongodb-server-versions](../mongodb-server-versions.md). --> +The default binary version has been upgraded from `6.0.x` to `7.0.x`. For more specifics see [mongodb-server-versions](../mongodb-server-versions.md). + +:::note +In mongodb `7.0.0` storage engine `ephemeralForTest` has been removed, mongodb-memory-server will automatically translate any occurrence to `wiredTiger` with a warning. + +It is recommended to run the tests against a tmpfs or equivalent (default `/tmp` on linux / macos). +::: ## Non-Breaking changes / Additions diff --git a/docs/guides/mongodb-server-versions.md b/docs/guides/mongodb-server-versions.md index 54a60e4d4..834e33c81 100644 --- a/docs/guides/mongodb-server-versions.md +++ b/docs/guides/mongodb-server-versions.md @@ -31,6 +31,7 @@ Starting with MongoDB version 5.0, the default versions for `mongodb-memory-serv | `mongodb-memory-server-core` Version | Default MongoDB Version | | :----------------------------------: | :---------------------: | +| 10.0.x - 10.0.x | 7.0.9 | | 9.2.x - 9.2.x | 6.0.14 | | 9.0.x - 9.1.x | 6.0.9 | | 8.14.x - 8.16.x | 5.0.19 | diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts index a595d593c..2ebc7a7ff 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts @@ -239,6 +239,10 @@ describe('single server replset', () => { jest.spyOn(console, 'warn').mockImplementationOnce(() => void 0); const replSet = await MongoMemoryReplSet.create({ replSet: { auth: { enable: true }, count: 3, storageEngine: 'ephemeralForTest' }, + binary: { + // 7.0 removed "ephemeralForTest", this test is explicitly for that engine + version: '6.0.14', + }, }); utils.assertion(!utils.isNullOrUndefined(replSet.replSetOpts.auth)); @@ -436,7 +440,7 @@ describe('MongoMemoryReplSet', () => { dbName: replSet.replSetOpts.dbName, // not testing this value, because its generated "randomly" ip: '127.0.0.1', spawn: {}, - storageEngine: 'ephemeralForTest', + storageEngine: 'wiredTiger', configSettings: {}, }); replSet.replSetOpts = { auth: { enable: true } }; @@ -451,7 +455,7 @@ describe('MongoMemoryReplSet', () => { dbName: replSet.replSetOpts.dbName, // not testing this value, because its generated "randomly" ip: '127.0.0.1', spawn: {}, - storageEngine: 'ephemeralForTest', + storageEngine: 'wiredTiger', configSettings: {}, }); }); diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts index cee951352..0a95f75ab 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts @@ -77,6 +77,10 @@ describe('MongoMemoryServer', () => { instance: { storageEngine: 'ephemeralForTest', }, + binary: { + // 7.0 removed "ephemeralForTest", this test is explicitly for that engine + version: '6.0.14', + }, }); utils.assertion(!utils.isNullOrUndefined(mongoServer.instanceInfo)); @@ -259,6 +263,10 @@ describe('MongoMemoryServer', () => { instance: { storageEngine: 'ephemeralForTest', }, + binary: { + // 7.0 removed "ephemeralForTest", this test is explicitly for that engine + version: '6.0.14', + }, }); utils.assertion(!utils.isNullOrUndefined(mongoServer.instanceInfo)); @@ -368,9 +376,6 @@ describe('MongoMemoryServer', () => { auth: { enable: false, }, - instance: { - storageEngine: 'ephemeralForTest', - }, }); utils.assertion(!utils.isNullOrUndefined(mongoServer.instanceInfo)); diff --git a/packages/mongodb-memory-server-core/src/__tests__/testUtils/globalSetup.ts b/packages/mongodb-memory-server-core/src/__tests__/testUtils/globalSetup.ts index 5791dd731..5e450f5f3 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/testUtils/globalSetup.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/testUtils/globalSetup.ts @@ -5,7 +5,7 @@ import { assertion, isNullOrUndefined } from '../../util/utils'; export = async function globalSetup(): Promise { const defaultVersion = resolveConfig(ResolveConfigVariables.VERSION); assertion(!isNullOrUndefined(defaultVersion), new Error('Default version is not defined')); - const versions = [defaultVersion, '4.0.28', '4.2.24', '4.4.28', '5.0.19', '6.0.14', '7.0.7']; + const versions = [defaultVersion, '4.0.28', '4.2.24', '4.4.28', '5.0.19', '6.0.14', '7.0.9']; // Ensure all required versions are downloaded for tests for (const version of versions) { await MongoBinary.getPath({ version }); diff --git a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts index b150f402e..9ee31e62a 100644 --- a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts +++ b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts @@ -34,7 +34,7 @@ export enum ResolveConfigVariables { /** The Prefix for Environmental values */ export const ENV_CONFIG_PREFIX = 'MONGOMS_'; /** This Value exists here, because "defaultValues" can be changed with "setDefaultValue", but this property is constant */ -export const DEFAULT_VERSION = '6.0.14'; +export const DEFAULT_VERSION = '7.0.9'; /** Default values for some config options that require explicit setting, it is constant so that the default values cannot be interfered with */ export const defaultValues = new Map([ // apply app-default values here From 57e575ce49344c79f2ae337da6aa43ada6738746 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:23:03 +0200 Subject: [PATCH 07/21] deps(mongodb): upgrade to version 6.7.0 fixes #804 --- docs/guides/migration/migrate10.md | 4 +- .../mongodb-memory-server-core/package.json | 2 +- .../src/MongoMemoryServer.ts | 17 +++- yarn.lock | 99 ++++++++----------- 4 files changed, 56 insertions(+), 66 deletions(-) diff --git a/docs/guides/migration/migrate10.md b/docs/guides/migration/migrate10.md index 282aea987..0bd820407 100644 --- a/docs/guides/migration/migrate10.md +++ b/docs/guides/migration/migrate10.md @@ -15,9 +15,9 @@ This Guide is written for migration from version `9.4.0` to `10.0.0`, for versio With 10.0.0 the minimal nodejs required is `16.20.1`. - +The used MongoDB Driver version is now `6.7.0`. ### Default binary version is now 7.x diff --git a/packages/mongodb-memory-server-core/package.json b/packages/mongodb-memory-server-core/package.json index c30ac7319..32f9812f3 100644 --- a/packages/mongodb-memory-server-core/package.json +++ b/packages/mongodb-memory-server-core/package.json @@ -49,7 +49,7 @@ "find-cache-dir": "^3.3.2", "follow-redirects": "^1.15.6", "https-proxy-agent": "^7.0.4", - "mongodb": "^5.9.1", + "mongodb": "^6.7.0", "new-find-package-json": "^2.0.0", "semver": "^7.6.2", "tar-stream": "^3.1.7", diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts index 1bc46b77e..fa532e613 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts @@ -18,7 +18,7 @@ import { MongoBinaryOpts } from './util/MongoBinary'; import debug from 'debug'; import { EventEmitter } from 'events'; import { promises as fspromises } from 'fs'; -import { AddUserOptions, MongoClient } from 'mongodb'; +import { MongoClient } from 'mongodb'; import { InstanceInfoError, StateError, UnknownVersionError } from './util/errors'; import * as os from 'os'; import { DryMongoBinary } from './util/DryMongoBinary'; @@ -143,11 +143,22 @@ export type UserRoles = | 'root' | string; +// copied from mongodb 5.9.1 as it has been removed for 6.0.0 +export interface RoleSpecification { + /** + * A role grants privileges to perform sets of actions on defined resources. + * A given role applies to the database on which it is defined and can grant access down to a collection level of granularity. + */ + role: string; + /** The database this user's role should effect. */ + db: string; +} + /** * Interface options for "db.createUser" (used for this package) * This interface is WITHOUT the custom options from this package * (Some text copied from https://docs.mongodb.com/manual/reference/method/db.createUser/#definition) - * This interface only exists, because mongodb dosnt provide such an interface for "createUser" (or as just very basic types) + * This interface only exists, because mongodb dosnt provide such an interface for "createUser" (or as just very basic types) as of 6.7.0 */ export interface CreateUserMongoDB { /** @@ -169,7 +180,7 @@ export interface CreateUserMongoDB { /** * The Roles for the user, can be an empty array */ - roles: AddUserOptions['roles']; + roles: string | string[] | RoleSpecification | RoleSpecification[]; /** * Specify the specific SCRAM mechanism or mechanisms for creating SCRAM user credentials. */ diff --git a/yarn.lock b/yarn.lock index 50d6ba21d..18422e6f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -781,10 +781,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mongodb-js/saslprep@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz#022fa36620a7287d17acd05c4aae1e5f390d250d" - integrity sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw== +"@mongodb-js/saslprep@^1.1.5": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz#d1700facfd6916c50c2c88fd6d48d363a56c702f" + integrity sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q== dependencies: sparse-bitfield "^3.0.3" @@ -1040,12 +1040,11 @@ resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.2.tgz#d703e2bf61d8b77a7669adcd8fdf98108155d594" integrity sha512-uNv6b/uGRLlCVmelat2rA8bcVd3k/42mV2EmjhPh6JLkd35T5bgwR/t6xy7a9MWhd9sixIeBUzhBenvk3NO+DQ== -"@types/whatwg-url@^8.2.1": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" - integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== +"@types/whatwg-url@^11.0.2": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-11.0.5.tgz#aaa2546e60f0c99209ca13360c32c78caf2c409f" + integrity sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ== dependencies: - "@types/node" "*" "@types/webidl-conversions" "*" "@types/yargs-parser@*": @@ -1447,10 +1446,10 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -bson@^5.5.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/bson/-/bson-5.5.1.tgz#f5849d405711a7f23acdda9a442375df858e6833" - integrity sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g== +bson@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/bson/-/bson-6.7.0.tgz#51973b132cdc424c8372fda3cb43e3e3e2ae2227" + integrity sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ== buffer-crc32@~0.2.3: version "0.2.13" @@ -2470,11 +2469,6 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" @@ -3566,24 +3560,22 @@ minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -mongodb-connection-string-url@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" - integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== +mongodb-connection-string-url@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz#c13e6ac284ae401752ebafdb8cd7f16c6723b141" + integrity sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg== dependencies: - "@types/whatwg-url" "^8.2.1" - whatwg-url "^11.0.0" + "@types/whatwg-url" "^11.0.2" + whatwg-url "^13.0.0" -mongodb@^5.9.1: - version "5.9.1" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-5.9.1.tgz#da03ea253b0972bf8097301fa5f65e34acad18fa" - integrity sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q== +mongodb@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.7.0.tgz#f86e51e6530e6a2ca4a99d7cfdf6f409223ac199" + integrity sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA== dependencies: - bson "^5.5.0" - mongodb-connection-string-url "^2.6.0" - socks "^2.7.1" - optionalDependencies: - "@mongodb-js/saslprep" "^1.1.0" + "@mongodb-js/saslprep" "^1.1.5" + bson "^6.7.0" + mongodb-connection-string-url "^3.0.0" ms@2.1.2: version "2.1.2" @@ -3867,10 +3859,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0, punycode@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: version "6.0.4" @@ -4158,19 +4150,6 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -4430,12 +4409,12 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== dependencies: - punycode "^2.1.1" + punycode "^2.3.0" traverse@^0.6.7: version "0.6.7" @@ -4693,12 +4672,12 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== +whatwg-url@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-13.0.0.tgz#b7b536aca48306394a34e44bda8e99f332410f8f" + integrity sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig== dependencies: - tr46 "^3.0.0" + tr46 "^4.1.1" webidl-conversions "^7.0.0" which@^2.0.1: From 329d79e484bf2f7da9e3d0ccf991bdd2cb4282a8 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:27:40 +0200 Subject: [PATCH 08/21] deps(typescript): upgrade to version 5.3.3 --- README.md | 2 +- docs/guides/quick-start-guide.md | 2 +- package.json | 2 +- yarn.lock | 13 ++++--------- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 917ea0148..8d142c0ae 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Choose any package, because they are the same. They differ only in the default c ### Requirements - NodeJS: 16.20.1+ -- Typescript: 5.0+ (if used) +- Typescript: 5.3+ (if used) And one of those (on Linux): diff --git a/docs/guides/quick-start-guide.md b/docs/guides/quick-start-guide.md index cac23f771..16b9f9ccb 100644 --- a/docs/guides/quick-start-guide.md +++ b/docs/guides/quick-start-guide.md @@ -20,7 +20,7 @@ If Top-Level async-await is not available for your case, the code can in most ca ## Requirements - NodeJS: 16.20.1+ -- Typescript: 5.0+ (if used) +- Typescript: 5.3+ (if used) When on Linux, one of the following are required: diff --git a/package.json b/package.json index 45d4fb629..76973aa3e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "prettier": "3.2.5", "ts-jest": "29.1.4", "typedoc": "^0.24.8", - "typescript": "5.0.4" + "typescript": "~5.3.3" }, "workspaces": { "packages": [ diff --git a/yarn.lock b/yarn.lock index 18422e6f5..605d85f47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4528,15 +4528,10 @@ typedoc@^0.24.8: minimatch "^9.0.0" shiki "^0.14.1" -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== - -"typescript@^4.6.4 || ^5.2.2": - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +"typescript@^4.6.4 || ^5.2.2", typescript@~5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== underscore@^1.13.2: version "1.13.6" From b4055a715ee369f675a15059fb88cef38c1aec39 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:35:15 +0200 Subject: [PATCH 09/21] devdeps(@typescript-eslint/*): upgrade to version 6.21.0 --- package.json | 4 +- .../src/MongoMemoryReplSet.ts | 2 + .../src/MongoMemoryServer.ts | 2 + .../src/util/MongoInstance.ts | 2 + .../src/util/lockfile.ts | 2 + yarn.lock | 222 ++++++++---------- 6 files changed, 107 insertions(+), 127 deletions(-) diff --git a/package.json b/package.json index 76973aa3e..5c7d32e11 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "@commitlint/config-conventional": "17.8.1", "@types/jest": "^29.5.12", "@types/node": "~16.11.7", - "@typescript-eslint/eslint-plugin": "5.59.9", - "@typescript-eslint/parser": "5.59.9", + "@typescript-eslint/eslint-plugin": "6.21.0", + "@typescript-eslint/parser": "6.21.0", "commitlint": "17.8.1", "cross-env": "7.0.3", "doctoc": "2.2.1", diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts b/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts index 393b0d85d..ff0d6b6a2 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts @@ -140,6 +140,7 @@ export enum MongoMemoryReplSetEvents { stateChange = 'stateChange', } +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export interface MongoMemoryReplSet extends EventEmitter { // Overwrite EventEmitter's definitions (to provide at least the event names) emit(event: MongoMemoryReplSetEvents, ...args: any[]): boolean; @@ -150,6 +151,7 @@ export interface MongoMemoryReplSet extends EventEmitter { /** * Class for managing an replSet */ +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export class MongoMemoryReplSet extends EventEmitter implements ManagerAdvanced { /** * All servers this ReplSet instance manages diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts index fa532e613..148a636b9 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts @@ -221,6 +221,7 @@ export interface MongoMemoryServerGetStartOptions { mongodOptions: Partial; } +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export interface MongoMemoryServer extends EventEmitter { // Overwrite EventEmitter's definitions (to provide at least the event names) emit(event: MongoMemoryServerEvents, ...args: any[]): boolean; @@ -228,6 +229,7 @@ export interface MongoMemoryServer extends EventEmitter { once(event: MongoMemoryServerEvents, listener: (...args: any[]) => void): this; } +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced { /** * Information about the started instance diff --git a/packages/mongodb-memory-server-core/src/util/MongoInstance.ts b/packages/mongodb-memory-server-core/src/util/MongoInstance.ts index dc654fa28..17c55bedd 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoInstance.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoInstance.ts @@ -200,6 +200,7 @@ export interface MongodOpts { spawn: SpawnOptions; } +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export interface MongoInstance extends EventEmitter { // Overwrite EventEmitter's definitions (to provide at least the event names) emit(event: MongoInstanceEvents, ...args: any[]): boolean; @@ -211,6 +212,7 @@ export interface MongoInstance extends EventEmitter { * MongoDB Instance Handler Class * This Class starts & stops the "mongod" process directly and handles stdout, sterr and close events */ +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export class MongoInstance extends EventEmitter implements ManagerBase { // Mark these values as "readonly" & "Readonly" because modifying them after starting will have no effect // readonly is required otherwise the property can still be changed on the root level diff --git a/packages/mongodb-memory-server-core/src/util/lockfile.ts b/packages/mongodb-memory-server-core/src/util/lockfile.ts index 189626843..01cf4232f 100644 --- a/packages/mongodb-memory-server-core/src/util/lockfile.ts +++ b/packages/mongodb-memory-server-core/src/util/lockfile.ts @@ -41,6 +41,7 @@ export enum LockFileEvents { unlock = 'unlock', } +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging interface LockFileEventsClass extends EventEmitter { // Overwrite EventEmitter's definitions (to provide at least the event names) emit(event: LockFileEvents, ...args: any[]): boolean; @@ -49,6 +50,7 @@ interface LockFileEventsClass extends EventEmitter { } /** Dummy class for types */ +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging class LockFileEventsClass extends EventEmitter {} export class LockFile { diff --git a/yarn.lock b/yarn.lock index 605d85f47..405ecffd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -470,17 +470,17 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" - integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0" + integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -964,10 +964,10 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/mdast@^3.0.0": version "3.0.13" @@ -1008,12 +1008,7 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz#9b0e3e8533fe5024ad32d6637eb9589988b6fdca" integrity sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A== -"@types/semver@^7.3.12": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" - integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== - -"@types/semver@^7.5.8": +"@types/semver@^7.5.0", "@types/semver@^7.5.8": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== @@ -1073,89 +1068,91 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15" - integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA== +"@typescript-eslint/eslint-plugin@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/type-utils" "5.59.9" - "@typescript-eslint/utils" "5.59.9" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa" - integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ== - dependencies: - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" - integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2" - integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "5.59.9" - "@typescript-eslint/utils" "5.59.9" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" -"@typescript-eslint/types@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" - integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" - integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" -"@typescript-eslint/utils@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4" - integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" - integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== - dependencies: - "@typescript-eslint/types" "5.59.9" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": version "1.2.0" @@ -1930,14 +1927,6 @@ eslint-plugin-prettier@5.1.3: prettier-linter-helpers "^1.0.0" synckit "^0.8.6" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" @@ -2023,11 +2012,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -2340,11 +2324,6 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -2425,6 +2404,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3527,6 +3511,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -3534,13 +3525,6 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -3582,11 +3566,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4065,7 +4044,7 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.4, semver@^7.3.4, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: +semver@7.5.4, semver@^7.3.4, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4431,6 +4410,11 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + ts-jest@29.1.4: version "29.1.4" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.4.tgz#26f8a55ce31e4d2ef7a1fd47dc7fa127e92793ef" @@ -4464,23 +4448,11 @@ ts-node@^10.8.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" From 0f54d29fe8ab51a806bb103609a7e34346c2b220 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:41:55 +0200 Subject: [PATCH 10/21] devdeps(lint-staged): upgrade to version 14.0.1 --- package.json | 2 +- yarn.lock | 250 ++++++++++++++++++++------------------------------- 2 files changed, 100 insertions(+), 152 deletions(-) diff --git a/package.json b/package.json index 5c7d32e11..07d5047a4 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "eslint-plugin-prettier": "5.1.3", "husky": "8.0.3", "jest": "29.7.0", - "lint-staged": "13.2.3", + "lint-staged": "14.0.1", "prettier": "3.2.5", "ts-jest": "29.1.4", "typedoc": "^0.24.8", diff --git a/yarn.lock b/yarn.lock index 405ecffd7..98e86b669 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1189,14 +1189,6 @@ agent-base@^7.0.2: dependencies: debug "^4.3.4" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1224,13 +1216,20 @@ anchor-markdown-header@^0.6.0: dependencies: emoji-regex "~10.1.0" -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -1310,11 +1309,6 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-mutex@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" @@ -1492,10 +1486,10 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== chalk@^2.4.2: version "2.4.2" @@ -1544,25 +1538,12 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: - restore-cursor "^3.1.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" + restore-cursor "^4.0.0" cli-truncate@^3.1.0: version "3.1.0" @@ -1615,15 +1596,15 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.19: +colorette@^2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== commitlint@17.8.1: version "17.8.1" @@ -1734,6 +1715,13 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" @@ -2022,22 +2010,12 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -execa@^7.0.0: +execa@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== @@ -2052,6 +2030,21 @@ execa@^7.0.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -3101,38 +3094,33 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@13.2.3: - version "13.2.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" - integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== +lint-staged@14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.1.tgz#57dfa3013a3d60762d9af5d9c83bdb51291a6232" + integrity sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw== dependencies: - chalk "5.2.0" - cli-truncate "^3.1.0" - commander "^10.0.0" - debug "^4.3.4" - execa "^7.0.0" + chalk "5.3.0" + commander "11.0.0" + debug "4.3.4" + execa "7.2.0" lilconfig "2.1.0" - listr2 "^5.0.7" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.3" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.2.2" + listr2 "6.6.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.1" -listr2@^5.0.7: - version "5.0.8" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" - integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== +listr2@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" + integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" rfdc "^1.3.0" - rxjs "^7.8.0" - through "^2.3.8" - wrap-ansi "^7.0.0" + wrap-ansi "^8.1.0" locate-path@^5.0.0: version "5.0.0" @@ -3208,15 +3196,16 @@ lodash@^4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" longest-streak@^2.0.0: version "2.0.4" @@ -3488,7 +3477,7 @@ micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: debug "^4.0.0" parse-entities "^2.0.0" -micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@4.0.5, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -3627,11 +3616,6 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -object-inspect@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3693,13 +3677,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -3787,7 +3764,7 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@^0.6.0: +pidtree@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== @@ -3988,10 +3965,10 @@ resolve@^1.10.0, resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" @@ -4027,13 +4004,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.8.0: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -4103,24 +4073,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slice-ansi@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" @@ -4202,7 +4154,7 @@ streamx@^2.15.0: fast-fifo "^1.1.0" queue-tick "^1.0.1" -string-argv@^0.3.1: +string-argv@0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== @@ -4366,7 +4318,7 @@ through2@^4.0.0: dependencies: readable-stream "3" -"through@>=2.2.7 <3", through@^2.3.8: +"through@>=2.2.7 <3": version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -4448,7 +4400,7 @@ ts-node@^10.8.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.6.3: +tslib@^2.4.0, tslib@^2.6.2, tslib@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== @@ -4490,6 +4442,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + typedoc@^0.24.8: version "0.24.8" resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.8.tgz#cce9f47ba6a8d52389f5e583716a2b3b4335b63e" @@ -4663,15 +4620,6 @@ which@^2.0.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -4681,7 +4629,7 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== @@ -4718,10 +4666,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.2.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== +yaml@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== yargs-parser@^20.2.3: version "20.2.9" From 0775c60f14ec3026849ed70d24535c013b1d3aa7 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:44:36 +0200 Subject: [PATCH 11/21] devdeps(typedoc): upgrade to version 0.25.13 --- package.json | 2 +- yarn.lock | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 07d5047a4..543136b5c 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "lint-staged": "14.0.1", "prettier": "3.2.5", "ts-jest": "29.1.4", - "typedoc": "^0.24.8", + "typedoc": "^0.25.13", "typescript": "~5.3.3" }, "workspaces": { diff --git a/yarn.lock b/yarn.lock index 98e86b669..c2d99e3ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3500,7 +3500,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1: +minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -3514,6 +3514,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -4043,10 +4050,10 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@^0.14.1: - version "0.14.4" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.4.tgz#2454969b466a5f75067d0f2fa0d7426d32881b20" - integrity sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ== +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== dependencies: ansi-sequence-parser "^1.1.0" jsonc-parser "^3.2.0" @@ -4447,15 +4454,15 @@ type-fest@^1.0.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -typedoc@^0.24.8: - version "0.24.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.8.tgz#cce9f47ba6a8d52389f5e583716a2b3b4335b63e" - integrity sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w== +typedoc@^0.25.13: + version "0.25.13" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" + integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== dependencies: lunr "^2.3.9" marked "^4.3.0" - minimatch "^9.0.0" - shiki "^0.14.1" + minimatch "^9.0.3" + shiki "^0.14.7" "typescript@^4.6.4 || ^5.2.2", typescript@~5.3.3: version "5.3.3" From fe1d62d4fff1849e3fd76d0db745337e6fb693d7 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:45:38 +0200 Subject: [PATCH 12/21] devdeps(prettier): upgrade to version 3.3.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 543136b5c..ace0cd1b8 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "husky": "8.0.3", "jest": "29.7.0", "lint-staged": "14.0.1", - "prettier": "3.2.5", + "prettier": "3.3.0", "ts-jest": "29.1.4", "typedoc": "^0.25.13", "typescript": "~5.3.3" diff --git a/yarn.lock b/yarn.lock index c2d99e3ac..68af560d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3800,10 +3800,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prettier@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.0.tgz#d173ea0524a691d4c0b1181752f2b46724328cdf" + integrity sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" From c9f45c9f032918cbdc73c0953ecc95936c246bac Mon Sep 17 00:00:00 2001 From: hasezoey Date: Tue, 4 Jun 2024 14:51:45 +0200 Subject: [PATCH 13/21] deps(async-mutex): upgrade to version 0.5.0 --- .../mongodb-memory-server-core/package.json | 2 +- yarn.lock | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/mongodb-memory-server-core/package.json b/packages/mongodb-memory-server-core/package.json index 32f9812f3..d283bb106 100644 --- a/packages/mongodb-memory-server-core/package.json +++ b/packages/mongodb-memory-server-core/package.json @@ -43,7 +43,7 @@ "yazl": "^2.5.1" }, "dependencies": { - "async-mutex": "^0.4.1", + "async-mutex": "^0.5.0", "camelcase": "^6.3.0", "debug": "^4.3.5", "find-cache-dir": "^3.3.2", diff --git a/yarn.lock b/yarn.lock index 68af560d8..92da5f896 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1309,10 +1309,10 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -async-mutex@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" - integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== +async-mutex@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" + integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== dependencies: tslib "^2.4.0" @@ -1715,13 +1715,6 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -debug@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" @@ -1729,6 +1722,13 @@ debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, d dependencies: ms "2.1.2" +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" From ab7a73c14fa80e51ec407d08b120b4ae6ee77ece Mon Sep 17 00:00:00 2001 From: hasezoey Date: Wed, 5 Jun 2024 16:47:42 +0200 Subject: [PATCH 14/21] feat: add support for "Explicit Resource Management" closes #794 --- docs/api/interfaces/mongo-dispose-opts.md | 20 +++++ .../interfaces/mongo-memory-server-opts.md | 6 ++ docs/api/interfaces/replset-opts.md | 6 ++ docs/guides/faq.md | 11 +++ .../src/MongoMemoryReplSet.ts | 19 ++++- .../src/MongoMemoryServer.ts | 28 +++++++ .../src/__tests__/MongoMemoryReplSet.test.ts | 79 +++++++++++++++++++ .../src/__tests__/MongoMemoryServer.test.ts | 69 ++++++++++++++++ .../src/util/MongoInstance.ts | 5 ++ .../src/util/__tests__/MongoInstance.test.ts | 24 ++++++ .../src/util/resolveConfig.ts | 6 ++ .../src/util/utils.ts | 2 + website/sidebars.js | 1 + 13 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 docs/api/interfaces/mongo-dispose-opts.md diff --git a/docs/api/interfaces/mongo-dispose-opts.md b/docs/api/interfaces/mongo-dispose-opts.md new file mode 100644 index 000000000..2b3e851bd --- /dev/null +++ b/docs/api/interfaces/mongo-dispose-opts.md @@ -0,0 +1,20 @@ +--- +id: mongo-memory-dispose-opts +title: 'DisposeOptions' +--- + +API Documentation of `DisposeOptions`-Interface + +## Values for `DisposeOptions` + +### enabled + +Typings: `enabled?: boolean` + +Set whether to stop the manager on `[Symbol.asyncDispose]` calls. + +### cleanup + +Typings: `cleanup?: Cleanup` + +Set custom cleanup options to be used for disposal, see [`cleanup` function](../classes/mongo-memory-server.md#cleanup) (the same options apply for the replset). diff --git a/docs/api/interfaces/mongo-memory-server-opts.md b/docs/api/interfaces/mongo-memory-server-opts.md index 28cd8de5e..0cfe8f81b 100644 --- a/docs/api/interfaces/mongo-memory-server-opts.md +++ b/docs/api/interfaces/mongo-memory-server-opts.md @@ -32,3 +32,9 @@ Set custom spawn options for spawning processes, uses [`SpawnOptions`](https://n Typings: `auth?: AutomaticAuth` Set custom Authentication options for the instance, uses [`AutomaticAuth`](./mongo-memory-server-automaticauth.md). + +### dispose + +Typings: `dispose?: DisposeOptions` + +Set custom behavior for when `[Symbol.asyncDispose]` is called, uses [`DisposeOptions`](./mongo-dispose-opts.md). diff --git a/docs/api/interfaces/replset-opts.md b/docs/api/interfaces/replset-opts.md index 665d0183f..27e7f57f9 100644 --- a/docs/api/interfaces/replset-opts.md +++ b/docs/api/interfaces/replset-opts.md @@ -91,3 +91,9 @@ Set how many ReplSet members to spawn, this number will be deducted from length :::tip It is recommended to set this number to a **odd** number, and try to never have it be **even**, see [MongoDB Deploy an Odd Number of Members](https://www.mongodb.com/docs/v5.2/core/replica-set-architectures/#deploy-an-odd-number-of-members). ::: + +### dispose + +Typings: `dispose?: DisposeOptions` + +Set custom behavior for when `[Symbol.asyncDispose]` is called, uses [`DisposeOptions`](./mongo-dispose-opts.md). diff --git a/docs/guides/faq.md b/docs/guides/faq.md index 883fc3512..d43648c2d 100644 --- a/docs/guides/faq.md +++ b/docs/guides/faq.md @@ -21,3 +21,14 @@ Since `8.4.0` objects can also be used instead of just booleans for parameter in For Example `.stop({ doCleanup: false })` can be used instead of `.stop(false)`. ::: + +### Does this package support Explicit Resource Management? + +Yes, `[Symbol.asyncDispose]` is implemented for all manager classes, behavior can be configured via `dispose` options: + +- [`MongoMemoryServerOpts.dispose`](../api/interfaces/mongo-memory-server-opts.md#dispose) +- [`ReplSetOpts.dispose`](../api/interfaces/replset-opts.md#dispose) + +:::note +Note that when using `await using server =` that `[Symbol.asyncDispose]` is called at the end of the scope even if the value is reassigned to something out of the current scope. +::: diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts b/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts index ff0d6b6a2..345afd4fa 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts @@ -1,5 +1,10 @@ import { EventEmitter } from 'events'; -import { MongoMemoryServer, AutomaticAuth, MongoMemoryServerOpts } from './MongoMemoryServer'; +import { + MongoMemoryServer, + AutomaticAuth, + MongoMemoryServerOpts, + DisposeOptions, +} from './MongoMemoryServer'; import { assertion, authDefault, @@ -92,6 +97,10 @@ export interface ReplSetOpts { * @default {} */ configSettings?: MongoMemoryReplSetConfigSettings; + /** + * Options for automatic dispose for "Explicit Resource Management" + */ + dispose?: DisposeOptions; } /** @@ -264,6 +273,7 @@ export class MongoMemoryReplSet extends EventEmitter implements ManagerAdvanced spawn: {}, storageEngine, configSettings: {}, + dispose: {}, }; // force overwrite "storageEngine" because it is transformed already this._replSetOpts = { ...defaults, ...val, storageEngine }; @@ -799,6 +809,13 @@ export class MongoMemoryReplSet extends EventEmitter implements ManagerAdvanced log('_waitForPrimary: detected one primary instance '); } + + // Symbol for "Explicit Resource Management" + async [Symbol.asyncDispose]() { + if (this.replSetOpts.dispose?.enabled ?? true) { + await this.stop(this.replSetOpts.dispose?.cleanup); + } + } } export default MongoMemoryReplSet; diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts index 148a636b9..9f9ad7d83 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts @@ -43,6 +43,27 @@ export interface MongoMemoryServerOpts { * Defining this enables automatic user creation */ auth?: AutomaticAuth; + /** + * Options for automatic dispose for "Explicit Resource Management" + */ + dispose?: DisposeOptions; +} + +/** + * Options to configure `Symbol.asyncDispose` behavior + */ +export interface DisposeOptions { + /** + * Set whether to run the dispose hook or not. + * Note that this only applies when `Symbol.asyncDispose` is actually called + * @default true + */ + enabled?: boolean; + /** + * Pass custom options for cleanup + * @default { doCleanup: true, force: false } + */ + cleanup?: Cleanup; } export interface AutomaticAuth { @@ -838,6 +859,13 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced { ? this.auth.enable : false; // if "this._replSetOpts.auth.enable" is not defined, default to false } + + // Symbol for "Explicit Resource Management" + async [Symbol.asyncDispose]() { + if (this.opts.dispose?.enabled ?? true) { + await this.stop(this.opts.dispose?.cleanup); + } + } } export default MongoMemoryServer; diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts index 2ebc7a7ff..a4d7cbee5 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts @@ -442,6 +442,7 @@ describe('MongoMemoryReplSet', () => { spawn: {}, storageEngine: 'wiredTiger', configSettings: {}, + dispose: {}, }); replSet.replSetOpts = { auth: { enable: true } }; // @ts-expect-error because "_replSetOpts" is protected @@ -457,6 +458,7 @@ describe('MongoMemoryReplSet', () => { spawn: {}, storageEngine: 'wiredTiger', configSettings: {}, + dispose: {}, }); }); @@ -802,4 +804,81 @@ describe('MongoMemoryReplSet', () => { await server.stop(); }); }); + + describe('asyncDispose', () => { + it('should work by default', async () => { + jest.spyOn(MongoMemoryReplSet.prototype, 'start'); + jest.spyOn(MongoMemoryReplSet.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongoMemoryReplSet.prototype, Symbol.asyncDispose); + { + await using server = await MongoMemoryReplSet.create(); + // use the value and test that it actually runs, as "getUri" will throw is not in "running" state + server.getUri(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryReplSetStates.stopped); + expect(outer.servers.length).toStrictEqual(0); + expect(MongoMemoryReplSet.prototype.start).toHaveBeenCalledTimes(1); + expect(MongoMemoryReplSet.prototype.stop).toHaveBeenCalledTimes(1); + // expect(MongoMemoryReplSet.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + }); + + it('should be able to be disabled', async () => { + jest.spyOn(MongoMemoryReplSet.prototype, 'start'); + jest.spyOn(MongoMemoryReplSet.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongoMemoryReplSet.prototype, Symbol.asyncDispose); + { + await using server = await MongoMemoryReplSet.create({ + replSet: { dispose: { enabled: false } }, + }); + // use the value and test that it actually runs, as "getUri" will throw is not in "running" state + server.getUri(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + expect(outer.state).toStrictEqual(MongoMemoryReplSetStates.running); + expect(outer.servers.length).toStrictEqual(1); + expect(MongoMemoryReplSet.prototype.start).toHaveBeenCalledTimes(1); + expect(MongoMemoryReplSet.prototype.stop).toHaveBeenCalledTimes(0); + // expect(MongoMemoryReplSet.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + await outer.stop(); + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryReplSetStates.stopped); + }); + + it('should be able to set custom cleanup', async () => { + jest.spyOn(MongoMemoryReplSet.prototype, 'start'); + jest.spyOn(MongoMemoryReplSet.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongoMemoryReplSet.prototype, Symbol.asyncDispose); + { + await using server = await MongoMemoryReplSet.create({ + replSet: { + dispose: { cleanup: { doCleanup: false } }, + }, + }); + // use the value and test that it actually runs, as "getUri" will throw is not in "running" state + server.getUri(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryReplSetStates.stopped); + expect(outer.servers.length).toStrictEqual(1); + expect(MongoMemoryReplSet.prototype.start).toHaveBeenCalledTimes(1); + expect(MongoMemoryReplSet.prototype.stop).toHaveBeenCalledTimes(1); + // expect(MongoMemoryReplSet.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + await outer.cleanup({ doCleanup: true }); + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryReplSetStates.stopped); + expect(outer.servers.length).toStrictEqual(0); + }); + }); }); diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts index 0a95f75ab..22266ed24 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts @@ -1188,4 +1188,73 @@ describe('MongoMemoryServer', () => { await server.stop(); }); }); + + describe('asyncDispose', () => { + it('should work by default', async () => { + jest.spyOn(MongoMemoryServer.prototype, 'start'); + jest.spyOn(MongoMemoryServer.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongoMemoryServer.prototype, Symbol.asyncDispose); + { + await using server = await MongoMemoryServer.create(); + // use the value and test that it actually runs, as "getUri" will throw is not in "running" state + server.getUri(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryServerStates.new); + expect(MongoMemoryServer.prototype.start).toHaveBeenCalledTimes(1); + expect(MongoMemoryServer.prototype.stop).toHaveBeenCalledTimes(1); + // expect(MongoMemoryServer.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + }); + + it('should be able to be disabled', async () => { + jest.spyOn(MongoMemoryServer.prototype, 'start'); + jest.spyOn(MongoMemoryServer.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongoMemoryServer.prototype, Symbol.asyncDispose); + { + await using server = await MongoMemoryServer.create({ dispose: { enabled: false } }); + // use the value and test that it actually runs, as "getUri" will throw is not in "running" state + server.getUri(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + expect(outer.state).toStrictEqual(MongoMemoryServerStates.running); + expect(MongoMemoryServer.prototype.start).toHaveBeenCalledTimes(1); + expect(MongoMemoryServer.prototype.stop).toHaveBeenCalledTimes(0); + // expect(MongoMemoryServer.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + await outer.stop(); + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryServerStates.new); + }); + + it('should be able to set custom cleanup', async () => { + jest.spyOn(MongoMemoryServer.prototype, 'start'); + jest.spyOn(MongoMemoryServer.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongoMemoryServer.prototype, Symbol.asyncDispose); + { + await using server = await MongoMemoryServer.create({ + dispose: { cleanup: { doCleanup: false } }, + }); + // use the value and test that it actually runs, as "getUri" will throw is not in "running" state + server.getUri(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryServerStates.stopped); + expect(MongoMemoryServer.prototype.start).toHaveBeenCalledTimes(1); + expect(MongoMemoryServer.prototype.stop).toHaveBeenCalledTimes(1); + // expect(MongoMemoryServer.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + await outer.cleanup({ doCleanup: true }); + // not "stopped" because of cleanup + expect(outer.state).toStrictEqual(MongoMemoryServerStates.new); + }); + }); }); diff --git a/packages/mongodb-memory-server-core/src/util/MongoInstance.ts b/packages/mongodb-memory-server-core/src/util/MongoInstance.ts index 17c55bedd..27d954096 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoInstance.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoInstance.ts @@ -725,6 +725,11 @@ export class MongoInstance extends EventEmitter implements ManagerBase { ); } } + + /// Symbol for "Explicit Resource Management" + async [Symbol.asyncDispose]() { + await this.stop(); + } } export default MongoInstance; diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/MongoInstance.test.ts b/packages/mongodb-memory-server-core/src/util/__tests__/MongoInstance.test.ts index e7dbc4c4f..68c9c9f36 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/MongoInstance.test.ts +++ b/packages/mongodb-memory-server-core/src/util/__tests__/MongoInstance.test.ts @@ -780,4 +780,28 @@ describe('MongodbInstance', () => { await mongod.stop(); } }); + + describe('asyncDispose', () => { + it('should work', async () => { + jest.spyOn(MongodbInstance.prototype, 'start'); + jest.spyOn(MongodbInstance.prototype, 'stop'); + let outer; + // would like to test this, but jest seemingly does not support spying on symbols + // jest.spyOn(MongodbInstance.prototype, Symbol.asyncDispose); + { + const gotPort = await getFreePort(27333); + await using server = await MongodbInstance.create({ + instance: { port: gotPort, dbPath: tmpDir }, + binary: { version }, + }); + expect(server.mongodProcess).toBeTruthy(); + // reassignment still calls dispose at the *current* scope + outer = server; + } + expect(outer.mongodProcess).not.toBeTruthy(); + expect(MongodbInstance.prototype.start).toHaveBeenCalledTimes(1); + expect(MongodbInstance.prototype.stop).toHaveBeenCalledTimes(1); + // expect(MongodbInstance.prototype[Symbol.asyncDispose]).toHaveBeenCalledTimes(1); + }); + }); }); diff --git a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts index 9ee31e62a..49b309fa3 100644 --- a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts +++ b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts @@ -5,6 +5,12 @@ import * as path from 'path'; import { readFileSync } from 'fs'; import { isNullOrUndefined } from './utils'; +// polyfills +// @ts-expect-error they are marked "read-only", but are set-able if not implemented by the runtime +Symbol.dispose ??= Symbol('Symbol.dispose'); +// @ts-expect-error they are marked "read-only", but are set-able if not implemented by the runtime +Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose'); + const log = debug('MongoMS:ResolveConfig'); /** Enum of all possible config options */ diff --git a/packages/mongodb-memory-server-core/src/util/utils.ts b/packages/mongodb-memory-server-core/src/util/utils.ts index c936428f2..71eb67d65 100644 --- a/packages/mongodb-memory-server-core/src/util/utils.ts +++ b/packages/mongodb-memory-server-core/src/util/utils.ts @@ -268,6 +268,8 @@ export abstract class ManagerBase { abstract start(forceSamePort: boolean): Promise; abstract start(): Promise; abstract stop(cleanup: Cleanup): Promise; + // Symbol for "Explicit Resource Management" + abstract [Symbol.asyncDispose](): Promise; } /** diff --git a/website/sidebars.js b/website/sidebars.js index 8b4d0a2e4..de3327ed0 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -17,6 +17,7 @@ module.exports = { 'api/interfaces/mongo-memory-instance-replicamemberconfig', 'api/interfaces/mongo-memory-binary-opts', 'api/interfaces/mongo-memory-replset-opts', + 'api/interfaces/mongo-memory-dispose-opts', 'api/interfaces/replset-opts', ], }, From 887f1a1e932a8993ef3fd69cf1f65b700c89a77b Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 13:21:12 +0200 Subject: [PATCH 15/21] feat(getport): use net0listen by default fixes #827 --- docs/api/config-options.md | 14 ------ docs/guides/migration/migrate10.md | 5 ++ .../util/getport/__tests__/getport.test.ts | 32 ++---------- .../src/util/getport/index.ts | 50 +++++++------------ .../src/util/resolveConfig.ts | 1 - 5 files changed, 25 insertions(+), 77 deletions(-) diff --git a/docs/api/config-options.md b/docs/api/config-options.md index 4436cbb21..1c9c2538d 100644 --- a/docs/api/config-options.md +++ b/docs/api/config-options.md @@ -269,20 +269,6 @@ Also see [ARCHIVE_NAME](#archive_name). Keep in mind that downloaded binaries will never be automatically deleted. ::: -### EXP_NET0LISTEN - -| Environment Variable | PackageJson | -| :------------------: | :---------: | -| `MONGOMS_EXP_NET0LISTEN` | `expNet0Listen` | - -Option `EXP_NET0LISTEN` is used to use the experimental (non-predictable) port generation of `net.listen`. - -This option will use a random open port, which will lessen the "port is already in use" errors, but will not eliminate them. - -This is a experimental option, it maybe removed, renamed or have changed behavior in the future. - -Default: `false` - ## How to use them in the package.json To use the config options in the `package.json`, they need to be camelCased (and without `_`), and need to be in the property `config.mongodbMemoryServer` diff --git a/docs/guides/migration/migrate10.md b/docs/guides/migration/migrate10.md index 0bd820407..93faf3c13 100644 --- a/docs/guides/migration/migrate10.md +++ b/docs/guides/migration/migrate10.md @@ -35,3 +35,8 @@ It is recommended to run the tests against a tmpfs or equivalent (default `/tmp` The tsconfig `target` option has been updated to `es2021`, which will result in less polyfills. This should be a non-breaking change. + +### Getport now uses `net0listen` by default + +This means a port is now generated by the engine (like nodejs) itself, previously known as `EXP_NET0LISTEN`. +This should reduce amount of `Max port tries exceeded` errors. diff --git a/packages/mongodb-memory-server-core/src/util/getport/__tests__/getport.test.ts b/packages/mongodb-memory-server-core/src/util/getport/__tests__/getport.test.ts index 0e2736033..19d5ed40e 100644 --- a/packages/mongodb-memory-server-core/src/util/getport/__tests__/getport.test.ts +++ b/packages/mongodb-memory-server-core/src/util/getport/__tests__/getport.test.ts @@ -1,9 +1,4 @@ -import resolveConfig, { - ResolveConfigVariables, - defaultValues, - envToBool, - setDefaultValue, -} from '../../resolveConfig'; +import { defaultValues } from '../../resolveConfig'; import * as getPort from '../index'; import * as net from 'node:net'; @@ -71,29 +66,8 @@ describe('getport', () => { await expect(getPort.getFreePort(testPort)).resolves.toStrictEqual(testPort); }); - it('port should be predictable', async () => { - expect(envToBool(resolveConfig(ResolveConfigVariables.EXP_NET0LISTEN))).toStrictEqual(false); - - const testPort = 23232; - await expect(getPort.getFreePort(testPort)).resolves.toStrictEqual(testPort); - - const server = await new Promise((res) => { - const server = net.createServer(); - server.unref(); - server.listen(testPort, () => res(server)); - }); - - const foundPort = await getPort.getFreePort(testPort); - expect(foundPort).toStrictEqual(testPort + 2); // predictable result - - server.close(); - }); - - it('EXP_NET0LISTEN should not be predictable', async () => { - setDefaultValue(ResolveConfigVariables.EXP_NET0LISTEN, 'true'); - expect(envToBool(resolveConfig(ResolveConfigVariables.EXP_NET0LISTEN))).toStrictEqual(true); - - const testPort = 23232; + it('port should not be predictable (net0listen)', async () => { + const testPort = 23233; await expect(getPort.getFreePort(testPort)).resolves.toStrictEqual(testPort); const server = await new Promise((res) => { diff --git a/packages/mongodb-memory-server-core/src/util/getport/index.ts b/packages/mongodb-memory-server-core/src/util/getport/index.ts index 8f6c59583..63f3a5310 100644 --- a/packages/mongodb-memory-server-core/src/util/getport/index.ts +++ b/packages/mongodb-memory-server-core/src/util/getport/index.ts @@ -1,5 +1,3 @@ -import resolveConfig, { ResolveConfigVariables, envToBool } from '../resolveConfig'; -import * as crypto from 'node:crypto'; import * as net from 'node:net'; import debug from 'debug'; @@ -16,8 +14,6 @@ interface IPortsCache { timeSet: undefined | number; /** The ports that were tried */ ports: Set; - /** Store last used number, reduces amount of tries needed */ - lastNumber: number; } /** @@ -32,15 +28,14 @@ const PORTS_CACHE_CLEAN_TIME = 1000 * 10; const PORTS_CACHE: IPortsCache = { timeSet: undefined, ports: new Set(), - lastNumber: MIN_PORT, }; /** Max default tries before giving up */ const MAX_DEFAULT_TRIES = 10; /** - * Try to get a free port - * @param firstPort The first port to try or empty for semi-random port + * Try to get a free port. + * @param firstPort The first port to try or empty for a random port * @param max_tries maximum amount of tries to get a port, default to {@link MAX_DEFAULT_TRIES} * @returns A valid free port * @throws if "max_tries" is exceeded @@ -49,8 +44,8 @@ export async function getFreePort( firstPort?: number, max_tries: number = MAX_DEFAULT_TRIES ): Promise { - // Get a random value from crypto to use as first port if none is given - firstPort = firstPort || validPort(crypto.randomInt(MIN_PORT, MAX_PORT + 1)); + // use "0" as a fallback to use net0listen, which generates a random free port + firstPort = firstPort || 0; // clear ports cache after some time, but not on an interval if (PORTS_CACHE.timeSet && Date.now() - PORTS_CACHE.timeSet > PORTS_CACHE_CLEAN_TIME) { @@ -60,22 +55,12 @@ export async function getFreePort( PORTS_CACHE.timeSet = Date.now(); } - const exp_net0listen = envToBool(resolveConfig(ResolveConfigVariables.EXP_NET0LISTEN)); - log('EXP_NET0LISTEN', exp_net0listen); - let tries = 0; while (tries <= max_tries) { tries += 1; - let nextPort: number; - - if (exp_net0listen) { - // "0" means to use ".listen" random port - nextPort = tries === 1 ? firstPort : 0; - } else { - // use "startPort" at first try, otherwise increase from last number - nextPort = tries === 1 ? firstPort : validPort(PORTS_CACHE.lastNumber + tries); - } + // "0" means to use have ".listen" use a random port + const nextPort = tries === 1 ? firstPort : 0; // try next port, because it is already in the cache // unless port is "0" which will use "net.listen(0)" @@ -84,15 +69,15 @@ export async function getFreePort( } PORTS_CACHE.ports.add(nextPort); - // only set "lastNumber" if the "nextPort" was not in the cache - PORTS_CACHE.lastNumber = nextPort; const triedPort = await tryPort(nextPort); - // returned port can be different than the "nextPort" (if EXP_NET0LISTEN) - PORTS_CACHE.ports.add(nextPort); - if (triedPort > 0) { + log('getFreePort: found free port', triedPort); + + // returned port can be different than the "nextPort" (if net0listen) + PORTS_CACHE.ports.add(nextPort); + return triedPort; } } @@ -103,8 +88,8 @@ export async function getFreePort( export default getFreePort; /** - * Check that input number is within range of {@link MIN_PORT} and {@link MAX_PORT} - * If more than {@link MAX_PORT}, wrap around, if less than {@link MIN_PORT} use {@link MIN_PORT} + * Ensure that input number is within range of {@link MIN_PORT} and {@link MAX_PORT}. + * If more than {@link MAX_PORT}, wrap around, if less than {@link MIN_PORT} use {@link MIN_PORT}. * @param port The Number to check * @returns A Valid number in port range */ @@ -115,9 +100,9 @@ export function validPort(port: number): number { } /** - * Try a given port + * Try a given port. * @param port The port to try - * @returns "true" if the port is not in use, "false" if in use + * @returns the port if successful, "-1" in case of `EADDRINUSE`, all other errors reject * @throws The error given if the code is not "EADDRINUSE" */ export function tryPort(port: number): Promise { @@ -147,12 +132,11 @@ export function tryPort(port: number): Promise { } /** - * Reset the {@link PORTS_CACHE} to its initial state + * Reset the {@link PORTS_CACHE} to its initial state. * - * This function is meant for debugging and testing purposes only + * This function is meant for debugging and testing purposes only. */ export function resetPortsCache() { - PORTS_CACHE.lastNumber = MIN_PORT; PORTS_CACHE.timeSet = undefined; PORTS_CACHE.ports.clear(); } diff --git a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts index 49b309fa3..5d98b56d1 100644 --- a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts +++ b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts @@ -34,7 +34,6 @@ export enum ResolveConfigVariables { USE_ARCHIVE_NAME_FOR_BINARY_NAME = 'USE_ARCHIVE_NAME_FOR_BINARY_NAME', MAX_REDIRECTS = 'MAX_REDIRECTS', DISTRO = 'DISTRO', - EXP_NET0LISTEN = 'EXP_NET0LISTEN', } /** The Prefix for Environmental values */ From df97ea8f9edfb97c24a53f9bc6638697df70d85e Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 13:31:43 +0200 Subject: [PATCH 16/21] fix(MongoBinaryDownloadUrl): change default mint version to 21 --- docs/guides/supported-systems.md | 2 +- .../src/util/MongoBinaryDownloadUrl.ts | 3 +-- .../src/util/__tests__/MongoBinaryDownloadUrl.test.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/guides/supported-systems.md b/docs/guides/supported-systems.md index e26bf2b51..16588622e 100644 --- a/docs/guides/supported-systems.md +++ b/docs/guides/supported-systems.md @@ -127,7 +127,7 @@ Default version is `6` (uses mongodb's `ubuntu` release)
Lowest supported Distribution version is `17`
Highest version is `21`
-Default version is `20` +Default version is `21` ### Suse diff --git a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts index c1599abfd..fa11900d7 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts @@ -487,8 +487,7 @@ export class MongoBinaryDownloadUrl implements MongoBinaryDownloadUrlOpts { os: 'linux', dist: 'ubuntu', release: - // TODO: next-minor: change default mint release to 21 - mintToUbuntuRelease[parseInt(os.release.split('.')[0])] || mintToUbuntuRelease[20], + mintToUbuntuRelease[parseInt(os.release.split('.')[0])] || mintToUbuntuRelease[21], }; } diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts index 1f19ea263..0ea75ed42 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts +++ b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts @@ -985,11 +985,11 @@ describe('MongoBinaryDownloadUrl', () => { }); }); - it('should default to Mint Version 20, if version cannot be found in lookup table', async () => { + it('should default to Mint Version 21, if version cannot be found in lookup table', async () => { (downloadUrl.os as LinuxOS).release = '16'; // out-of-range version downloadUrl.version = '6.0.4'; expect(await downloadUrl.getDownloadUrl()).toBe( - 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz' + 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-6.0.4.tgz' ); }); From ecc4ffe2bbf47f3a2cd196d2ffa9a0e22aa4c94d Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 13:34:10 +0200 Subject: [PATCH 17/21] fix(MongoBinaryDownloadUrl): change default elementary version to 7 --- docs/guides/supported-systems.md | 2 +- .../src/util/MongoBinaryDownloadUrl.ts | 4 ++-- .../__tests__/MongoBinaryDownloadUrl.test.ts | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/guides/supported-systems.md b/docs/guides/supported-systems.md index 16588622e..a7bb0e042 100644 --- a/docs/guides/supported-systems.md +++ b/docs/guides/supported-systems.md @@ -118,7 +118,7 @@ Default version is `1` (uses mongodb's `ubuntu` release)
Lowest supported Distribution version is `3` (or `0.3`)
Highest version is `7`
-Default version is `6` +Default version is `7` ### Linux Mint diff --git a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts index fa11900d7..2e9eb1e47 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts @@ -502,13 +502,13 @@ export class MongoBinaryDownloadUrl implements MongoBinaryDownloadUrlOpts { // untangle elemenatary versioning from hell https://en.wikipedia.org/wiki/Elementary_OS#Development const [elementaryMajor, elementaryMinor] = os.release.split('.').map((el) => parseInt(el)); + // versions below 5.0 were named 0.X, and so use the minor version if major is 0 const realMajor = elementaryMajor || elementaryMinor; ubuntuOS = { os: 'linux', dist: 'ubuntu', - // TODO: next-minor: change default elemenatry release to 7 - release: elementaryToUbuntuRelease[realMajor] || elementaryToUbuntuRelease[6], + release: elementaryToUbuntuRelease[realMajor] || elementaryToUbuntuRelease[7], }; } } diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts index 0ea75ed42..612b1e3d3 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts +++ b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts @@ -892,6 +892,25 @@ describe('MongoBinaryDownloadUrl', () => { }); describe('for elementary', () => { + it('should default to Elementary 7, if version cannot be found in lookup table', async () => { + const du = new MongoBinaryDownloadUrl({ + platform: 'linux', + arch: 'x64', + version: '6.0.4', + os: { + os: 'linux', + dist: 'elementary', + codename: 'horus', + release: '0', + id_like: ['ubuntu'], + }, + }); + + expect(await du.getDownloadUrl()).toBe( + 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-6.0.4.tgz' + ); + }); + it('should return a archive name for elementary 0.3', async () => { const du = new MongoBinaryDownloadUrl({ platform: 'linux', From 241742c0a99cac955d07dfd4623086e246bae791 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 13:45:48 +0200 Subject: [PATCH 18/21] test(MongoBinaryDownloadUrl): test the ubuntu fallback default version if version cannot be parsed --- .../__tests__/MongoBinaryDownloadUrl.test.ts | 20 +++++++++++++++++++ .../MongoBinaryDownloadUrl.test.ts.snap | 8 ++++++++ 2 files changed, 28 insertions(+) diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts index 612b1e3d3..b6a049d60 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts +++ b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts @@ -145,6 +145,26 @@ describe('MongoBinaryDownloadUrl', () => { describe('for linux', () => { describe('for ubuntu', () => { + it('should default to Ubuntu 22.04, if version cannot be parsed', async () => { + const spy = jest.spyOn(console, 'warn').mockImplementationOnce(() => void 0); + // TODO: try to keep this up-to-date to the latest mongodb supported ubuntu version + const du = new MongoBinaryDownloadUrl({ + platform: 'linux', + arch: 'x64', + version: '7.0.4', + os: { + os: 'linux', + dist: 'ubuntu', + release: '', + }, + }); + expect(await du.getDownloadUrl()).toBe( + 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.4.tgz' + ); + expect(console.warn).toHaveBeenCalledTimes(1); + expect(spy.mock.calls).toMatchSnapshot(); + }); + it('for ubuntu 14.04 for 3.6', async () => { const du = new MongoBinaryDownloadUrl({ platform: 'linux', diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/__snapshots__/MongoBinaryDownloadUrl.test.ts.snap b/packages/mongodb-memory-server-core/src/util/__tests__/__snapshots__/MongoBinaryDownloadUrl.test.ts.snap index 2c1bce9ba..9d33b3ce4 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/__snapshots__/MongoBinaryDownloadUrl.test.ts.snap +++ b/packages/mongodb-memory-server-core/src/util/__tests__/__snapshots__/MongoBinaryDownloadUrl.test.ts.snap @@ -36,6 +36,14 @@ exports[`MongoBinaryDownloadUrl getDownloadUrl() for linux for rhel should Error exports[`MongoBinaryDownloadUrl getDownloadUrl() for linux for rhel should throw a Error when the provided version could not be coerced [UnknownVersionError] 1`] = `"Could not coerce VERSION to a semver version (version: \\"vvv\\")"`; +exports[`MongoBinaryDownloadUrl getDownloadUrl() for linux for ubuntu should default to Ubuntu 22.04, if version cannot be parsed 1`] = ` +Array [ + Array [ + "Could not parse ubuntu year from \\"\\", using default", + ], +] +`; + exports[`MongoBinaryDownloadUrl getDownloadUrl() for linux for ubuntu should throw a Error when the provided version could not be coerced [UnknownVersionError] 1`] = `"Could not coerce VERSION to a semver version (version: \\"vvv\\")"`; exports[`MongoBinaryDownloadUrl getDownloadUrl() should throw an error if platform is unknown (getArchiveName) 1`] = `"Unknown Platform: \\"unknown\\""`; From 1d24e6fc13770622bee009e6f51bc469e17b5051 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 13:47:06 +0200 Subject: [PATCH 19/21] chore(MongoBinaryDownloadUrl): update for mongodb 7.0.9 and ubuntu 24.04 though nothing changed as there are no build beyond 22.04 yet --- .../src/util/MongoBinaryDownloadUrl.ts | 2 +- .../src/util/__tests__/MongoBinaryDownloadUrl.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts index 2e9eb1e47..f8583e8ef 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts @@ -587,7 +587,7 @@ export class MongoBinaryDownloadUrl implements MongoBinaryDownloadUrlOpts { * Highest ubuntu year supported by mongodb binaries * @see https://www.mongodb.com/download-center/community/releases/archive */ - const highestUbuntuYear = 22; // 22 is the highest supported as of mongodb 7.0.4 + const highestUbuntuYear = 22; // 22 is the highest supported as of mongodb 7.0.9 if (ubuntuYear > highestUbuntuYear) { log( diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts index b6a049d60..623998e7e 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts +++ b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts @@ -356,7 +356,7 @@ describe('MongoBinaryDownloadUrl', () => { os: { os: 'linux', dist: 'ubuntu', - release: '23.04', // highest released ubuntu version + release: '24.04', // highest released ubuntu version }, }); expect(await du.getDownloadUrl()).toBe( From eef706f7fef6ffe5caa0f0f8b3b99b168d8d7d2a Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 13:53:20 +0200 Subject: [PATCH 20/21] fix: remove deprecated boolean cleanup argument (stop / cleanup) already in 9.x it threw a error, now the error is removed too. --- .../src/MongoMemoryReplSet.ts | 10 ------ .../src/MongoMemoryServer.ts | 10 ------ .../src/__tests__/MongoMemoryReplSet.test.ts | 32 ------------------- .../src/__tests__/MongoMemoryServer.test.ts | 32 ------------------- .../MongoMemoryReplSet.test.ts.snap | 4 --- .../MongoMemoryServer.test.ts.snap | 8 ----- 6 files changed, 96 deletions(-) diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts b/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts index 345afd4fa..797c8a75b 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts @@ -534,11 +534,6 @@ export class MongoMemoryReplSet extends EventEmitter implements ManagerAdvanced /** Default to cleanup temporary, but not custom dbpaths */ let cleanup: Cleanup = { doCleanup: true, force: false }; - // TODO: for next major release (10.0), this should be removed - if (typeof cleanupOptions === 'boolean') { - throw new Error('Unsupported argument type: boolean'); - } - // handle the new way of setting what and how to cleanup if (typeof cleanupOptions === 'object') { cleanup = cleanupOptions; @@ -589,11 +584,6 @@ export class MongoMemoryReplSet extends EventEmitter implements ManagerAdvanced /** Default to doing cleanup, but not forcing it */ let cleanup: Cleanup = { doCleanup: true, force: false }; - // TODO: for next major release (10.0), this should be removed - if (typeof options === 'boolean') { - throw new Error('Unsupported argument type: boolean'); - } - // handle the new way of setting what and how to cleanup if (typeof options === 'object') { cleanup = options; diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts index 9f9ad7d83..70bdd35db 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts @@ -550,11 +550,6 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced { /** Default to cleanup temporary, but not custom dbpaths */ let cleanup: Cleanup = { doCleanup: true, force: false }; - // TODO: for next major release (10.0), this should be removed - if (typeof cleanupOptions === 'boolean') { - throw new Error('Unsupported argument type: boolean'); - } - // handle the new way of setting what and how to cleanup if (typeof cleanupOptions === 'object') { cleanup = cleanupOptions; @@ -598,11 +593,6 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced { /** Default to doing cleanup, but not forcing it */ let cleanup: Cleanup = { doCleanup: true, force: false }; - // TODO: for next major release (10.0), this should be removed - if (typeof options === 'boolean') { - throw new Error('Unsupported argument type: boolean'); - } - // handle the new way of setting what and how to cleanup if (typeof options === 'object') { cleanup = options; diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts index a4d7cbee5..ccd52218e 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryReplSet.test.ts @@ -590,22 +590,6 @@ describe('MongoMemoryReplSet', () => { } as utils.Cleanup); }); - it('should not support boolean arguments', async () => { - const replSet = new MongoMemoryReplSet(); - - try { - await replSet.stop( - // @ts-expect-error Testing a non-existing overload - true - ); - fail('Expected to fail'); - } catch (err) { - expect(err).toBeInstanceOf(Error); - assertIsError(err); - expect(err.message).toMatchSnapshot(); - } - }); - it('should call cleanup and pass-through cleanup options', async () => { const replSet = await MongoMemoryReplSet.create({ replSet: { count: 1 } }); @@ -676,22 +660,6 @@ describe('MongoMemoryReplSet', () => { } as utils.Cleanup); }); - it('should not support boolean arguments', async () => { - const replSet = new MongoMemoryReplSet(); - - try { - await replSet.cleanup( - // @ts-expect-error Testing a non-existing overload - true - ); - fail('Expected to fail'); - } catch (err) { - expect(err).toBeInstanceOf(Error); - assertIsError(err); - expect(err.message).toMatchSnapshot(); - } - }); - it('should run cleanup with cleanup options and pass-through options to lower', async () => { const replSet = await MongoMemoryReplSet.create({ replSet: { count: 1 } }); diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts index 22266ed24..f811acaf7 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts @@ -628,22 +628,6 @@ describe('MongoMemoryServer', () => { expect(cleanupSpy).toHaveBeenCalledWith({ doCleanup: true } as utils.Cleanup); }); - it('should not support boolean arguments', async () => { - const mongoServer = new MongoMemoryServer(); - - try { - await mongoServer.stop( - // @ts-expect-error Testing a non-existing overload - true - ); - fail('Expected to fail'); - } catch (err) { - expect(err).toBeInstanceOf(Error); - assertIsError(err); - expect(err.message).toMatchSnapshot(); - } - }); - it('should call cleanup and pass-through cleanup options', async () => { const mongoServer = new MongoMemoryServer(); @@ -796,22 +780,6 @@ describe('MongoMemoryServer', () => { expect(mongoServer.instanceInfo).toBeUndefined(); }); - it('should not support boolean arguments', async () => { - const mongoServer = new MongoMemoryServer(); - - try { - await mongoServer.cleanup( - // @ts-expect-error Testing a non-existing overload - true - ); - fail('Expected to fail'); - } catch (err) { - expect(err).toBeInstanceOf(Error); - assertIsError(err); - expect(err.message).toMatchSnapshot(); - } - }); - it('should properly cleanup with tmpDir with default no force (new)', async () => { const mongoServer = await MongoMemoryServer.create(); const dbPath = mongoServer.instanceInfo!.dbPath; diff --git a/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryReplSet.test.ts.snap b/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryReplSet.test.ts.snap index ee783ed7b..1f9043902 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryReplSet.test.ts.snap +++ b/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryReplSet.test.ts.snap @@ -2,10 +2,6 @@ exports[`MongoMemoryReplSet "_waitForPrimary" should throw an error if timeout is reached 1`] = `"{\\"timeout\\":1}"`; -exports[`MongoMemoryReplSet .cleanup() should not support boolean arguments 1`] = `"Unsupported argument type: boolean"`; - -exports[`MongoMemoryReplSet .stop() should not support boolean arguments 1`] = `"Unsupported argument type: boolean"`; - exports[`MongoMemoryReplSet getters & setters setter of "replSetOpts" should throw an error if count is 1 or above 1`] = `"ReplSet Count needs to be 1 or higher! (specified count: \\"0\\")"`; exports[`MongoMemoryReplSet getters & setters state errors setter of "binaryOpts" should throw an error if state is not "stopped" 1`] = ` diff --git a/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryServer.test.ts.snap b/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryServer.test.ts.snap index da3d83286..11c9d82d8 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryServer.test.ts.snap +++ b/packages/mongodb-memory-server-core/src/__tests__/__snapshots__/MongoMemoryServer.test.ts.snap @@ -2,12 +2,6 @@ exports[`MongoMemoryServer "createAuth" should throw an error if called without "this.auth" defined 1`] = `"\\"createAuth\\" got called, but \\"this.auth\\" is undefined!"`; -exports[`MongoMemoryServer cleanup() should not support boolean arguments 1`] = ` -"Incorrect State for operation: \\"new\\", allowed States: \\"[stopped]\\" -This may be because of using a v6.x way of calling functions, look at the following guide if anything applies: -https://nodkz.github.io/mongodb-memory-server/docs/guides/migration/migrate7#no-function-other-than-start-create-ensureinstance-will-be-starting-anything" -`; - exports[`MongoMemoryServer cleanup() should throw an error if state is not "stopped" 1`] = ` "Incorrect State for operation: \\"new\\", allowed States: \\"[stopped]\\" This may be because of using a v6.x way of calling functions, look at the following guide if anything applies: @@ -64,5 +58,3 @@ exports[`MongoMemoryServer start() should throw an error if state is not "new" o This may be because of using a v6.x way of calling functions, look at the following guide if anything applies: https://nodkz.github.io/mongodb-memory-server/docs/guides/migration/migrate7#no-function-other-than-start-create-ensureinstance-will-be-starting-anything" `; - -exports[`MongoMemoryServer stop() should not support boolean arguments 1`] = `"Unsupported argument type: boolean"`; From 139cfdedd190960775ec9799c7ea4f3aa60b5cf3 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sat, 8 Jun 2024 14:26:55 +0200 Subject: [PATCH 21/21] chore(workflows/tests): update cache on file changes --- .github/workflows/tests.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1f47584a5..ae452e9f2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,7 +37,10 @@ jobs: uses: actions/cache@v4 with: path: ~/.cache/mongodb-binaries - key: ${{ matrix.node-version }} + key: ${{ matrix.node-version }}-${{ hashFiles('**/globalSetup.ts') }} + restore-keys: | + ${{ matrix.node-version }}- + ${{ matrix.node-version }} - name: Install node_modules run: yarn - name: TSCheck