diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74ef1f029..dacfb9e48 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,15 @@ jobs: uses: mansona/npm-lockfile-version@v1 with: version: 2 + check-types: + name: Check types + timeout-minutes: 5 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: npm ci + - name: Check types + run: npm run test:types build: runs-on: ubuntu-latest timeout-minutes: 30 diff --git a/.github/workflows/release-automated.yml b/.github/workflows/release-automated.yml index 0cd15ac7b..6f10c8312 100644 --- a/.github/workflows/release-automated.yml +++ b/.github/workflows/release-automated.yml @@ -39,7 +39,7 @@ jobs: docs-publish: needs: release if: needs.release.outputs.current_tag != '' && github.ref == 'refs/heads/release' - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/release-manual-docs.yml b/.github/workflows/release-manual-docs.yml index 01f2c9ae6..89c797146 100644 --- a/.github/workflows/release-manual-docs.yml +++ b/.github/workflows/release-manual-docs.yml @@ -8,7 +8,7 @@ on: jobs: docs-publish: if: github.event.inputs.tag != '' - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v3 diff --git a/babel-jest.js b/babel-jest.js index 3e65cec9f..e17601e2a 100644 --- a/babel-jest.js +++ b/babel-jest.js @@ -1,7 +1,7 @@ const babelJest = require('babel-jest'); module.exports = babelJest.createTransformer({ - presets: [["@babel/preset-env", { + presets: ["@babel/preset-typescript", ["@babel/preset-env", { "targets": { "node": "14" }, diff --git a/changelogs/CHANGELOG_alpha.md b/changelogs/CHANGELOG_alpha.md index a76fb5a13..c050f9336 100644 --- a/changelogs/CHANGELOG_alpha.md +++ b/changelogs/CHANGELOG_alpha.md @@ -1,3 +1,78 @@ +# [4.2.0-alpha.10](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.9...4.2.0-alpha.10) (2023-09-03) + + +### Features + +* Add support for custom EventEmitter ([#1999](https://github.com/parse-community/Parse-SDK-JS/issues/1999)) ([ca568a6](https://github.com/parse-community/Parse-SDK-JS/commit/ca568a61771e15afe67c9001f2a728205059f2ae)) + +# [4.2.0-alpha.9](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.8...4.2.0-alpha.9) (2023-09-01) + + +### Features + +* Allow overriding `Parse.Error` message with custom message via new Core Manager option `PARSE_ERRORS` ([#2014](https://github.com/parse-community/Parse-SDK-JS/issues/2014)) ([be0c8a6](https://github.com/parse-community/Parse-SDK-JS/commit/be0c8a6ff90a7714487ae793e2b68ae04d0c8d0c)) + +# [4.2.0-alpha.8](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.7...4.2.0-alpha.8) (2023-08-30) + + +### Features + +* Add Cloud Code context accessibility to `ParseUser.logIn` ([#2010](https://github.com/parse-community/Parse-SDK-JS/issues/2010)) ([2446007](https://github.com/parse-community/Parse-SDK-JS/commit/2446007ede4cc5af79e34f27dc1fbcc574d5f717)) + +# [4.2.0-alpha.7](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.6...4.2.0-alpha.7) (2023-08-29) + + +### Bug Fixes + +* `ParseUser.linkWith` doesn't remove anonymous auth data ([#2007](https://github.com/parse-community/Parse-SDK-JS/issues/2007)) ([7e2585c](https://github.com/parse-community/Parse-SDK-JS/commit/7e2585c5eb84a396900553d55d6a919de4d9a2c0)) + +# [4.2.0-alpha.6](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.5...4.2.0-alpha.6) (2023-08-27) + + +### Features + +* Add Bytes type to `Parse.Schema` ([#2001](https://github.com/parse-community/Parse-SDK-JS/issues/2001)) ([343d0d7](https://github.com/parse-community/Parse-SDK-JS/commit/343d0d729a57acdd3c9ba5c1dbe5738b3916ea04)) + +# [4.2.0-alpha.5](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.4...4.2.0-alpha.5) (2023-08-27) + + +### Features + +* Add support for excluding keys in `ParseQuery.findAll` ([#2000](https://github.com/parse-community/Parse-SDK-JS/issues/2000)) ([012ba4c](https://github.com/parse-community/Parse-SDK-JS/commit/012ba4cdab1e3f853625f507c713cef2264a40dd)) + +# [4.2.0-alpha.4](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.3...4.2.0-alpha.4) (2023-07-23) + + +### Features + +* Login with username, password and additional authentication data via `ParseUser.logInWithAdditionalAuth` ([#1955](https://github.com/parse-community/Parse-SDK-JS/issues/1955)) ([2bad411](https://github.com/parse-community/Parse-SDK-JS/commit/2bad4119c23372d1b38c811c4b4bb3d06b1b62f0)) + +# [4.2.0-alpha.3](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.2...4.2.0-alpha.3) (2023-06-11) + + +### Features + +* Add support to invoke a Cloud Function with a custom `installationId` via `Parse.Cloud.run` ([#1939](https://github.com/parse-community/Parse-SDK-JS/issues/1939)) ([eb70b93](https://github.com/parse-community/Parse-SDK-JS/commit/eb70b934b798cb37722c1ac36796596f5373f67d)) + +# [4.2.0-alpha.2](https://github.com/parse-community/Parse-SDK-JS/compare/4.2.0-alpha.1...4.2.0-alpha.2) (2023-06-08) + + +### Bug Fixes + +* Hard-coding of `react-native` path does not work for workspace builds ([#1930](https://github.com/parse-community/Parse-SDK-JS/issues/1930)) ([8222f3c](https://github.com/parse-community/Parse-SDK-JS/commit/8222f3cc2a4a4ee0cdcaf30dd0f9a17e46de7d88)) + +# [4.2.0-alpha.1](https://github.com/parse-community/Parse-SDK-JS/compare/4.1.0...4.2.0-alpha.1) (2023-05-01) + + +### Bug Fixes + +* `Parse.File.cancel` starts new attempt to save file ([#1781](https://github.com/parse-community/Parse-SDK-JS/issues/1781)) ([b755e42](https://github.com/parse-community/Parse-SDK-JS/commit/b755e42394db8b94b87b0dbefc6cf6f18189c46d)) + +### Features + +* Add `Parse.User.loginAs` ([#1875](https://github.com/parse-community/Parse-SDK-JS/issues/1875)) ([381fcfc](https://github.com/parse-community/Parse-SDK-JS/commit/381fcfc7f9cfda70af7c6dc3a35de59b82b72258)) +* Add `ParseQuery.watch` to trigger LiveQuery only on update of specific fields ([#1839](https://github.com/parse-community/Parse-SDK-JS/issues/1839)) ([7479343](https://github.com/parse-community/Parse-SDK-JS/commit/7479343abd8739fe03558ff9b2ce610c34c568ae)) + # [4.1.0-alpha.4](https://github.com/parse-community/Parse-SDK-JS/compare/4.1.0-alpha.3...4.1.0-alpha.4) (2023-04-28) diff --git a/gulpfile.js b/gulpfile.js index e79632709..90a4f9d93 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,16 +20,16 @@ const transformRuntime = ["@babel/plugin-transform-runtime", { }]; const PRESETS = { - 'browser': [["@babel/preset-env", { + 'browser': ["@babel/preset-typescript", ["@babel/preset-env", { "targets": "> 0.25%, not dead" }]], - 'weapp': [["@babel/preset-env", { + 'weapp': ["@babel/preset-typescript", ["@babel/preset-env", { "targets": "> 0.25%, not dead" }], '@babel/react'], - 'node': [["@babel/preset-env", { + 'node': ["@babel/preset-typescript", ["@babel/preset-env", { "targets": { "node": "14" } }]], - 'react-native': ['module:metro-react-native-babel-preset'], + 'react-native': ["@babel/preset-typescript", 'module:metro-react-native-babel-preset'], }; const PLUGINS = { 'browser': [transformRuntime, '@babel/plugin-transform-flow-comments', '@babel/plugin-proposal-class-properties', 'inline-package-json', @@ -79,7 +79,7 @@ function compileTask(stream) { } gulp.task('compile', function() { - return compileTask(gulp.src('src/*.js')); + return compileTask(gulp.src('src/*.*(js|ts)')); }); gulp.task('browserify', function(cb) { @@ -137,7 +137,7 @@ gulp.task('minify-weapp', function() { gulp.task('watch', function() { if (BUILD === 'browser') { - const watcher = gulp.watch('src/*.js', { ignoreInitial: false }, gulp.series('compile', 'browserify', 'minify')); + const watcher = gulp.watch('src/*.*(js|ts)', { ignoreInitial: false }, gulp.series('compile', 'browserify', 'minify')); watcher.on('add', function(path) { console.log(`File ${path} was added`); }); @@ -146,5 +146,5 @@ gulp.task('watch', function() { }); return watcher; } - return compileTask(watch('src/*.js', { ignoreInitial: false, verbose: true })); + return compileTask(watch('src/*.*(js|ts)', { ignoreInitial: false, verbose: true })); }); diff --git a/integration/test/ParseLocalDatastoreTest.js b/integration/test/ParseLocalDatastoreTest.js index 2c13c2423..91dd1b96c 100644 --- a/integration/test/ParseLocalDatastoreTest.js +++ b/integration/test/ParseLocalDatastoreTest.js @@ -1,36 +1,52 @@ 'use strict'; const assert = require('assert'); -const Parse = require('../../node'); global.localStorage = require('./mockLocalStorage'); +global.WebSocket = require('ws'); const mockRNStorage = require('./mockRNStorage'); -const LocalDatastoreUtils = require('../../lib/node/LocalDatastoreUtils'); +const serverURL = 'http://localhost:1337/parse'; -const { DEFAULT_PIN, PIN_PREFIX, isLocalDatastoreKey } = LocalDatastoreUtils; +function runTest(controller) { + const Parse = require(`../../${controller.name}`); + const LocalDatastoreUtils = require('../../lib/node/LocalDatastoreUtils'); -function LDS_KEY(object) { - return Parse.LocalDatastore.getKeyForObject(object); -} -function LDS_FULL_JSON(object) { - const json = object._toFullJSON(); - if (object._localId) { - json._localId = object._localId; + const { DEFAULT_PIN, PIN_PREFIX, isLocalDatastoreKey } = LocalDatastoreUtils; + + const Item = Parse.Object.extend('Item'); + const TestObject = Parse.Object.extend('TestObject'); + + function LDS_KEY(object) { + return Parse.LocalDatastore.getKeyForObject(object); } - return json; -} -function runTest(controller) { + function LDS_FULL_JSON(object) { + const json = object._toFullJSON(); + if (object._localId) { + json._localId = object._localId; + } + return json; + } + describe(`Parse Object Pinning (${controller.name})`, () => { beforeEach(async () => { const StorageController = require(controller.file); Parse.CoreManager.setAsyncStorage(mockRNStorage); Parse.CoreManager.setLocalDatastoreController(StorageController); - Parse.enableLocalDatastore(); + Parse.CoreManager.setEventEmitter(require('events').EventEmitter); + Parse.User.enableUnsafeCurrentUser(); await Parse.LocalDatastore._clear(); + Parse.initialize('integration'); + Parse.CoreManager.set('SERVER_URL', serverURL); + Parse.CoreManager.set('MASTER_KEY', 'notsosecret'); + const RESTController = Parse.CoreManager.getRESTController(); + RESTController._setXHR(require('xmlhttprequest').XMLHttpRequest); + Parse.enableLocalDatastore(); }); + function getStorageCount(storage) { return Object.keys(storage).reduce((acc, key) => acc + (isLocalDatastoreKey(key) ? 1 : 0), 1); } + it(`${controller.name} can clear localDatastore`, async () => { const obj1 = new TestObject(); const obj2 = new TestObject(); @@ -1060,8 +1076,15 @@ function runTest(controller) { const StorageController = require(controller.file); Parse.CoreManager.setAsyncStorage(mockRNStorage); Parse.CoreManager.setLocalDatastoreController(StorageController); - Parse.enableLocalDatastore(); + Parse.CoreManager.setEventEmitter(require('events').EventEmitter); Parse.LocalDatastore._clear(); + Parse.User.enableUnsafeCurrentUser(); + Parse.initialize('integration'); + Parse.CoreManager.set('SERVER_URL', serverURL); + Parse.CoreManager.set('MASTER_KEY', 'notsosecret'); + const RESTController = Parse.CoreManager.getRESTController(); + RESTController._setXHR(require('xmlhttprequest').XMLHttpRequest); + Parse.enableLocalDatastore(); const numbers = []; for (let i = 0; i < 10; i++) { @@ -2949,20 +2972,10 @@ function runTest(controller) { } describe('Parse LocalDatastore', () => { - beforeEach(() => { - Parse.CoreManager.getInstallationController()._setInstallationIdCache('1234'); - Parse.enableLocalDatastore(); - Parse.User.enableUnsafeCurrentUser(); - }); - const controllers = [ - { name: 'Default', file: '../../lib/node/LocalDatastoreController' }, - { - name: 'React-Native', - file: '../../lib/node/LocalDatastoreController.react-native', - }, + { name: 'node', file: '../../lib/node/LocalDatastoreController' }, + { name: 'react-native', file: '../../lib/react-native/LocalDatastoreController.react-native' }, ]; - for (let i = 0; i < controllers.length; i += 1) { const controller = controllers[i]; runTest(controller); diff --git a/integration/test/ParseQueryTest.js b/integration/test/ParseQueryTest.js index 5da39bba2..18891517b 100644 --- a/integration/test/ParseQueryTest.js +++ b/integration/test/ParseQueryTest.js @@ -1621,6 +1621,23 @@ describe('Parse Query', () => { assert.equal(result.get('slice'), 'pizza'); }); + it('can exclude keys in findAll', async () => { + const object = new TestObject({ + hello: 'world', + foo: 'bar', + slice: 'pizza', + }); + await object.save(); + + const query = new Parse.Query(TestObject); + query.exclude('foo'); + query.equalTo('objectId', object.id); + const [result] = await query.findAll(); + assert.equal(result.get('foo'), undefined); + assert.equal(result.get('hello'), 'world'); + assert.equal(result.get('slice'), 'pizza'); + }); + it('uses subclasses when creating objects', done => { const ParentObject = Parse.Object.extend({ className: 'ParentObject' }); let ChildObject = Parse.Object.extend('ChildObject', { diff --git a/integration/test/ParseSchemaTest.js b/integration/test/ParseSchemaTest.js index e9b23e7ed..1f90e07dc 100644 --- a/integration/test/ParseSchemaTest.js +++ b/integration/test/ParseSchemaTest.js @@ -72,6 +72,7 @@ describe('Schema', () => { .addString('stringField') .addNumber('numberField') .addBoolean('booleanField') + .addBytes('bytesField') .addDate('dateField') .addFile('fileField') .addGeoPoint('geoPointField') @@ -91,6 +92,7 @@ describe('Schema', () => { assert.equal(result.fields.stringField.type, 'String'); assert.equal(result.fields.numberField.type, 'Number'); assert.equal(result.fields.booleanField.type, 'Boolean'); + assert.equal(result.fields.bytesField.type, 'Bytes'); assert.equal(result.fields.dateField.type, 'Date'); assert.equal(result.fields.fileField.type, 'File'); assert.equal(result.fields.geoPointField.type, 'GeoPoint'); @@ -182,6 +184,7 @@ describe('Schema', () => { required: true, defaultValue: '2000-01-01T00:00:00.000Z', }) + .addBytes('bytesField', { required: true, defaultValue: 'ParseA==' }) .addFile('fileField', { required: true, defaultValue: file }) .addGeoPoint('geoPointField', { required: true, defaultValue: point }) .addPolygon('polygonField', { required: true, defaultValue: polygon }) @@ -204,6 +207,11 @@ describe('Schema', () => { stringField: { type: 'String', required: true, defaultValue: 'world' }, numberField: { type: 'Number', required: true, defaultValue: 10 }, booleanField: { type: 'Boolean', required: true, defaultValue: false }, + bytesField: { + type: 'Bytes', + required: true, + defaultValue: { __type: 'Bytes', base64: 'ParseA==' }, + }, dateField: { type: 'Date', required: true, @@ -245,6 +253,7 @@ describe('Schema', () => { stringField: 'world', numberField: 10, booleanField: false, + bytesField: { __type: 'Bytes', base64: 'ParseA==' }, dateField: { __type: 'Date', iso: '2000-01-01T00:00:00.000Z' }, dateStringField: { __type: 'Date', iso: '2000-01-01T00:00:00.000Z' }, fileField: file.toJSON(), diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index 2704c34b8..d67baae91 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -979,14 +979,18 @@ describe('Parse User', () => { await Parse.FacebookUtils.link(user); expect(Parse.FacebookUtils.isLinked(user)).toBe(true); - expect(Parse.AnonymousUtils.isLinked(user)).toBe(true); + expect(Parse.AnonymousUtils.isLinked(user)).toBe(false); await Parse.FacebookUtils.unlink(user); expect(Parse.FacebookUtils.isLinked(user)).toBe(false); - expect(Parse.AnonymousUtils.isLinked(user)).toBe(true); + expect(Parse.AnonymousUtils.isLinked(user)).toBe(false); }); it('can link with twitter', async () => { + const server = await reconfigureServer(); + const twitter = server.config.auth.twitter; + const spy = spyOn(twitter, 'validateAuthData').and.callThrough(); + Parse.User.enableUnsafeCurrentUser(); const user = new Parse.User(); user.setUsername(uuidv4()); @@ -999,9 +1003,14 @@ describe('Parse User', () => { await user._unlinkFrom('twitter'); expect(user._isLinked('twitter')).toBe(false); + expect(spy).toHaveBeenCalled(); }); it('can link with twitter and facebook', async () => { + const server = await reconfigureServer(); + const twitter = server.config.auth.twitter; + const spy = spyOn(twitter, 'validateAuthData').and.callThrough(); + Parse.User.enableUnsafeCurrentUser(); Parse.FacebookUtils.init(); const user = new Parse.User(); @@ -1017,6 +1026,7 @@ describe('Parse User', () => { expect(user.get('authData').twitter.id).toBe(twitterAuthData.id); expect(user.get('authData').facebook.id).toBe('test'); + expect(spy).toHaveBeenCalled(); }); it('can verify user password via static method', async () => { diff --git a/integration/test/helper.js b/integration/test/helper.js index 61b159d8c..b7b0df466 100644 --- a/integration/test/helper.js +++ b/integration/test/helper.js @@ -60,6 +60,7 @@ const defaultConfiguration = { twitter: { consumer_key: twitterAuthData.consumer_key, consumer_secret: twitterAuthData.consumer_secret, + validateAuthData: () => {}, }, }, verbose: false, diff --git a/package-lock.json b/package-lock.json index bc3246056..c054bee69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,30 +1,32 @@ { "name": "parse", - "version": "4.2.0", + "version": "4.2.0-alpha.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "parse", - "version": "4.2.0", + "version": "4.2.0-alpha.10", "license": "Apache-2.0", "dependencies": { - "@babel/runtime-corejs3": "7.21.0", - "idb-keyval": "6.2.0", + "@babel/runtime-corejs3": "^7.22.11", + "idb-keyval": "6.2.1", "react-native-crypto-js": "1.0.0", "uuid": "9.0.0", "ws": "8.13.0", "xmlhttprequest": "1.8.0" }, "devDependencies": { - "@babel/core": "7.21.5", - "@babel/eslint-parser": "7.21.3", + "@babel/core": "7.22.0", + "@babel/eslint-parser": "7.21.8", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-transform-flow-comments": "7.21.0", + "@babel/plugin-transform-flow-comments": "7.22.5", "@babel/plugin-transform-flow-strip-types": "7.21.0", "@babel/plugin-transform-runtime": "7.21.4", - "@babel/preset-env": "7.21.4", - "@babel/preset-react": "7.18.6", + "@babel/preset-env": "7.21.5", + "@babel/preset-react": "7.22.5", + "@babel/preset-typescript": "7.22.5", + "@definitelytyped/dtslint": "0.0.163", "@parse/minami": "1.0.0", "@saithodev/semantic-release-backmerge": "2.1.3", "@semantic-release/changelog": "6.0.3", @@ -39,9 +41,9 @@ "babel-plugin-transform-inline-environment-variables": "0.4.4", "browserify": "17.0.0", "codecov": "3.8.3", - "core-js": "3.30.1", + "core-js": "3.30.2", "cross-env": "7.0.2", - "eslint": "8.39.0", + "eslint": "8.40.0", "eslint-plugin-flowtype": "8.0.3", "eslint-plugin-jsdoc": "43.0.7", "express": "4.18.2", @@ -53,7 +55,7 @@ "gulp-uglify": "3.0.2", "gulp-watch": "5.0.1", "husky": "8.0.3", - "jasmine": "4.6.0", + "jasmine": "5.0.0", "jasmine-reporters": "2.5.2", "jasmine-spec-reporter": "7.0.0", "jest": "29.5.0", @@ -61,11 +63,11 @@ "jsdoc": "4.0.2", "jsdoc-babel": "0.5.0", "lint-staged": "13.2.2", - "metro-react-native-babel-preset": "0.76.3", - "mongodb-runner": "4.10.0", + "metro-react-native-babel-preset": "0.76.4", + "mongodb-runner": "5.4.3", "parse-server": "git+https://github.com/parse-community/parse-server#alpha", - "prettier": "2.8.8", - "puppeteer": "19.11.1", + "prettier": "3.0.2", + "puppeteer": "20.4.0", "regenerator-runtime": "0.13.11", "semantic-release": "19.0.5", "vinyl-source-stream": "2.0.0" @@ -104,12 +106,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -125,21 +127,21 @@ } }, "node_modules/@babel/core": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.5.tgz", - "integrity": "sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.0.tgz", + "integrity": "sha512-D58mjF+Y+89UfbMJpV57UTCg+JRQIFgvROPfH7mmIfBcoFVMkwiiiJyzPyW3onN9kg9noDg7MVyI+Yt64bnfQQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", + "@babel/generator": "^7.22.0", "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.5", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/helper-module-transforms": "^7.22.0", + "@babel/helpers": "^7.22.0", + "@babel/parser": "^7.22.0", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.0", + "@babel/types": "^7.22.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -164,9 +166,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz", - "integrity": "sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg==", + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.21.8.tgz", + "integrity": "sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -200,12 +202,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -215,12 +217,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -283,19 +285,20 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -304,6 +307,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", @@ -412,9 +424,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" @@ -433,13 +445,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -458,64 +470,64 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "dependencies": { - "@babel/types": "^7.21.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -540,80 +552,80 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -635,26 +647,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.0.tgz", + "integrity": "sha512-I/hZCYErxdjuUnJpJxHmCESB3AdcOAFjj+K6+of9JyWBeAhggR9NQoUHI481pRNH87cx77mbpx0cygzXlvGayA==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.0", + "@babel/types": "^7.22.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -663,9 +675,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.5.tgz", - "integrity": "sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1062,12 +1074,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1116,12 +1128,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1233,12 +1245,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1248,12 +1260,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", + "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -1333,12 +1345,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", + "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-plugin-utils": "^7.21.5", "@babel/template": "^7.20.7" }, "engines": { @@ -1411,14 +1423,14 @@ } }, "node_modules/@babel/plugin-transform-flow-comments": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.21.0.tgz", - "integrity": "sha512-TG7bJMbzlQHV0rUdk1sEWiUMXz4MLJ1uvlAxs52J1lBC9mDSJDtnEmYFywWPg5utvAREM/SR/ty9rwXXuWv+nQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.22.5.tgz", + "integrity": "sha512-e2lp78CXh9N2Xu0BKVibzLooLNkr1pGrSuigKBDFefibKnEuBW1uTWZVbJm7ptteOekftR27Afupm7nB74rs6w==", "dev": true, "dependencies": { - "@babel/generator": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/generator": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1444,12 +1456,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", + "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -1522,14 +1534,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1650,12 +1662,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1665,16 +1677,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1684,12 +1696,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1729,13 +1741,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1745,12 +1757,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", + "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-plugin-utils": "^7.21.5", "regenerator-transform": "^0.15.1" }, "engines": { @@ -1881,14 +1893,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz", + "integrity": "sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1898,12 +1911,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", + "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -1929,14 +1942,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", - "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", + "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", + "@babel/compat-data": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", "@babel/helper-validator-option": "^7.21.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", @@ -1961,6 +1974,7 @@ "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1970,22 +1984,22 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-arrow-functions": "^7.21.5", "@babel/plugin-transform-async-to-generator": "^7.20.7", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", "@babel/plugin-transform-block-scoping": "^7.21.0", "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-computed-properties": "^7.21.5", "@babel/plugin-transform-destructuring": "^7.21.3", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.0", + "@babel/plugin-transform-for-of": "^7.21.5", "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", "@babel/plugin-transform-modules-systemjs": "^7.20.11", "@babel/plugin-transform-modules-umd": "^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", @@ -1993,17 +2007,17 @@ "@babel/plugin-transform-object-super": "^7.18.6", "@babel/plugin-transform-parameters": "^7.21.3", "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.20.5", + "@babel/plugin-transform-regenerator": "^7.21.5", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", "@babel/plugin-transform-spread": "^7.20.7", "@babel/plugin-transform-sticky-regex": "^7.18.6", "@babel/plugin-transform-template-literals": "^7.18.9", "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-escapes": "^7.21.5", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.4", + "@babel/types": "^7.21.5", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -2096,17 +2110,36 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2116,9 +2149,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" @@ -2128,45 +2161,50 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.11.tgz", + "integrity": "sha512-NhfzUbdWbiE6fCFypbWCPu6AR8xre31EOPF7wwAIJEvGQ2avov04eymayWinCuyXmV1b0+jzoXP/HYzzUYdvwg==", "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.0.tgz", + "integrity": "sha512-V5Zp3k0nFGWSIC7zYR8PnfdU6i6VYU4JnifdSSMlXM1GMojPAaelPsKmKPW4tWTmpX9GM+RzKl4Io0UVcHVlpw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", + "@babel/generator": "^7.22.0", "@babel/helper-environment-visitor": "^7.21.5", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/parser": "^7.22.0", + "@babel/types": "^7.22.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2175,13 +2213,13 @@ } }, "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2214,6 +2252,377 @@ "kuler": "^2.0.0" } }, + "node_modules/@definitelytyped/dts-critic": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/dts-critic/-/dts-critic-0.0.163.tgz", + "integrity": "sha512-HsTvylj8x2gQaawsOCcN2Xk2Cx0wgV9kaj83hgsO9SITZSPd7dA0UkHyNRadbMkMwqNDKcnizcmWdz0+0gIo8A==", + "dev": true, + "dependencies": { + "@definitelytyped/header-parser": "^0.0.163", + "command-exists": "^1.2.8", + "rimraf": "^3.0.2", + "semver": "^6.2.0", + "tmp": "^0.2.1", + "yargs": "^15.3.1" + }, + "engines": { + "node": ">=10.17.0" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@definitelytyped/dts-critic/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/@definitelytyped/dts-critic/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@definitelytyped/dts-critic/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@definitelytyped/dts-critic/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@definitelytyped/dtslint": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/dtslint/-/dtslint-0.0.163.tgz", + "integrity": "sha512-U0uw7Zu0QdYSuBMYgxvRYjkhkeulTEg8vDgJ7TiYQUv/wODeujSAmGahQn51E5hOlSMYUw7A9utdbUukxE02SQ==", + "dev": true, + "dependencies": { + "@definitelytyped/dts-critic": "^0.0.163", + "@definitelytyped/header-parser": "^0.0.163", + "@definitelytyped/typescript-versions": "^0.0.163", + "@definitelytyped/utils": "^0.0.163", + "@typescript-eslint/eslint-plugin": "^5.55.0", + "@typescript-eslint/parser": "^5.55.0", + "@typescript-eslint/types": "^5.56.0", + "@typescript-eslint/typescript-estree": "^5.55.0", + "@typescript-eslint/utils": "^5.55.0", + "eslint": "^8.17.0", + "fs-extra": "^6.0.1", + "json-stable-stringify": "^1.0.1", + "strip-json-comments": "^2.0.1", + "tslint": "5.14.0", + "yargs": "^15.1.0" + }, + "bin": { + "dtslint": "dist/index.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">= 3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev || >= 3.8.0-dev || >= 3.9.0-dev || >= 4.0.0-dev || >=5.0.0-dev" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@definitelytyped/dtslint/node_modules/fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/@definitelytyped/dtslint/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@definitelytyped/dtslint/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@definitelytyped/dtslint/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@definitelytyped/header-parser": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/header-parser/-/header-parser-0.0.163.tgz", + "integrity": "sha512-Jr+/q+ESfc7uWldz/j11BfpjIN/gB4WmwhFENhWaMwM0W/9p0ShF+OiUqGhk2Q3Iz8v/oyWzSsxyxgasg9kCxQ==", + "dev": true, + "dependencies": { + "@definitelytyped/typescript-versions": "^0.0.163", + "@types/parsimmon": "^1.10.1", + "parsimmon": "^1.13.0" + } + }, + "node_modules/@definitelytyped/typescript-versions": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/typescript-versions/-/typescript-versions-0.0.163.tgz", + "integrity": "sha512-+GWtJhC+7UaCUnJ+ZkA7bfGuPd6ZbJKEjbHqh76/gOXsqAUOMEa49ufsLlIPUbkEeQlnDNoTHCegE5X/Q+u+/A==", + "dev": true + }, + "node_modules/@definitelytyped/utils": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/utils/-/utils-0.0.163.tgz", + "integrity": "sha512-6MX5TxaQbG/j2RkCWbcbLvv+YNipKqY0eQJafDhwC/RprUocpg+uYVNlH8XzdKRWOGJ0pq7SZOsJD4C3A01ZXg==", + "dev": true, + "dependencies": { + "@definitelytyped/typescript-versions": "^0.0.163", + "@qiwi/npm-registry-client": "^8.9.1", + "@types/node": "^14.14.35", + "charm": "^1.0.2", + "fs-extra": "^8.1.0", + "fstream": "^1.0.12", + "tar": "^6.1.11", + "tar-stream": "^2.1.4" + } + }, + "node_modules/@definitelytyped/utils/node_modules/@types/node": { + "version": "14.18.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.54.tgz", + "integrity": "sha512-uq7O52wvo2Lggsx1x21tKZgqkJpvwCseBBPtX/nKQfpVlEsLOb11zZ1CRsWUKvJF0+lzuA9jwvA7Pr2Wt7i3xw==", + "dev": true + }, + "node_modules/@definitelytyped/utils/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@definitelytyped/utils/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@definitelytyped/utils/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/@envelop/core": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@envelop/core/-/core-2.6.0.tgz", @@ -2312,14 +2721,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.5.2", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2392,9 +2801,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", - "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", + "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2582,6 +2991,102 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3328,6 +3833,19 @@ "node": ">=v12.0.0" } }, + "node_modules/@mongodb-js/mongodb-downloader": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-downloader/-/mongodb-downloader-0.2.8.tgz", + "integrity": "sha512-y+mgw9QspvgTLRNHZJRS+DUTPk45RWpvYD1MaGDWhZ4ajffvxGqanY+Z4R6z01n+tIRmQvpShzF6zk+2Pr9d6w==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "decompress": "^4.2.1", + "mongodb-download-url": "^1.3.0", + "node-fetch": "^2.6.11", + "tar": "^6.1.15" + } + }, "node_modules/@napi-rs/triples": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.1.0.tgz", @@ -4035,6 +4553,16 @@ } } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", @@ -4061,16 +4589,15 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.0.tgz", + "integrity": "sha512-HiRpoc15NhFwoR1IjN3MkMsqeAfRQKNzbhWVV+0BfvybEhjWSyRNQMC0ohMhkFhzoGnFoS59WlrJCGLPky/89g==", "dev": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", "progress": "2.0.3", - "proxy-from-env": "1.1.0", + "proxy-agent": "6.2.0", "tar-fs": "2.1.1", "unbzip2-stream": "1.4.3", "yargs": "17.7.1" @@ -4079,7 +4606,7 @@ "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=14.1.0" + "node": ">=16.0.0" }, "peerDependencies": { "typescript": ">= 4.7.4" @@ -4131,6 +4658,72 @@ "node": ">=12" } }, + "node_modules/@qiwi/npm-registry-client": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz", + "integrity": "sha512-rZF+mG+NfijR0SHphhTLHRr4aM4gtfdwoAMY6we2VGQam8vkN1cxGG1Lg/Llrj8Dd0Mu6VjdFQRyMMRZxtZR2A==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "graceful-fs": "^4.2.4", + "normalize-package-data": "~1.0.1 || ^2.0.0 || ^3.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0", + "once": "^1.4.0", + "request": "^2.88.2", + "retry": "^0.12.0", + "safe-buffer": "^5.2.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5 || 7", + "slide": "^1.1.6", + "ssri": "^8.0.0" + }, + "optionalDependencies": { + "npmlog": "2 || ^3.1.0 || ^4.0.0" + } + }, + "node_modules/@qiwi/npm-registry-client/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/@qiwi/npm-registry-client/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@qiwi/npm-registry-client/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/@repeaterjs/repeater": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", @@ -4489,6 +5082,12 @@ "parse5": "^7.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, "node_modules/@types/jsonwebtoken": { "version": "8.5.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", @@ -4550,6 +5149,12 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/parsimmon": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.6.tgz", + "integrity": "sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==", + "dev": true + }, "node_modules/@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", @@ -4574,6 +5179,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "node_modules/@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -4637,6 +5248,239 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", @@ -4796,79 +5640,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ampersand-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", - "integrity": "sha512-pPnVEJviRxXi9YhZA9j3GwGGBTlDLi+YIoBvrpKXgce+CO1nMlZU2aOV8OJogNuR2YPbptAUHNz7SKX+MvLj8A==", - "dev": true, - "dependencies": { - "ampersand-version": "^1.0.2", - "lodash": "^4.6.1" - } - }, - "node_modules/ampersand-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", - "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", - "dev": true, - "dependencies": { - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.0", - "array-next": "~0.0.1", - "key-tree-store": "^1.3.0", - "lodash": "^4.12.0" - } - }, - "node_modules/ampersand-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", - "integrity": "sha512-FVVLY7Pghtgc8pQl0rF3A3+OS/CZ+/ILLMIYIaO1cA9v5SRkainqUMfSot3fu32svuThIsYK3q9iCsH9W5+mWQ==", - "dev": true, - "dependencies": { - "find-root": "^0.1.1", - "through2": "^0.6.3" - } - }, - "node_modules/ampersand-version/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/ampersand-version/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ampersand-version/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/ampersand-version/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", - "dev": true - }, "node_modules/ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", @@ -5294,12 +6065,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-next": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", - "integrity": "sha512-sBOC/Iaz2hCcYi2XlyRfyZCRUxamlE5NJXEFjE9BTx23HALnWAFsPjGtfrAclt9o3G/38Het2yyeyOd3CEY7lg==", - "dev": true - }, "node_modules/array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", @@ -5438,6 +6203,18 @@ "node": ">=0.10.0" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -5531,6 +6308,78 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/babel-helper-evaluate-path": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", @@ -5923,6 +6772,15 @@ } ] }, + "node_modules/basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -6049,12 +6907,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, "node_modules/bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -6500,12 +7352,27 @@ "node": ">=8.12.0" } }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -6648,21 +7515,6 @@ "node": ">= 10" } }, - "node_modules/caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "dependencies": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -6686,31 +7538,13 @@ "node": ">=10" } }, - "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "node_modules/charm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", + "integrity": "sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw==", "dev": true, "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "engines": { - "node": ">= 0.6" + "inherits": "^2.0.1" } }, "node_modules/chokidar": { @@ -6859,9 +7693,9 @@ "dev": true }, "node_modules/chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.10.tgz", + "integrity": "sha512-ngdRIq/f5G3nIOz1M0MtCABCTezr79MBCrJ09K2xRk+hTZQGTH8JIeFbgQmVvNPBMQblh7ROfJnSzsE07YpFfg==", "dev": true, "dependencies": { "mitt": "3.0.0" @@ -7156,90 +7990,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/clui": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/clui/-/clui-0.3.6.tgz", - "integrity": "sha512-Z4UbgZILlIAjkEkZiDOa2aoYjohKx7fa6DxIh6cE9A6WNWZ61iXfQc6CmdC9SKdS5nO0P0UyQ+WfoXfB65e3HQ==", - "dev": true, - "dependencies": { - "cli-color": "0.3.2" - } - }, - "node_modules/clui/node_modules/cli-color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.3.2.tgz", - "integrity": "sha512-Ys/nDhHNRcxrS4EUI2RS/QCUE+61AMuEOj3sWDX+EIHkJWj+4XkRbOdwdxJteAJKjXYBbeFJMtfaEPd1MBF9pQ==", - "dev": true, - "dependencies": { - "d": "~0.1.1", - "es5-ext": "~0.10.2", - "memoizee": "0.3.x", - "timers-ext": "0.1.x" - } - }, - "node_modules/clui/node_modules/d": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "integrity": "sha512-0SdM9V9pd/OXJHoWmTfNPTAeD+lw6ZqHg+isPyBFuJsZLSE0Ygg1cYZ/0l6DrKQXMOqGOu1oWupMoOfoRfMZrQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/clui/node_modules/es6-iterator": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", - "integrity": "sha512-6TOmbFM6OPWkTe+bQ3ZuUkvqcWUjAnYjKUCLdbvRsAUz2Pr+fYIibwNXNkLNtIK9PPFbNMZZddaRNkyJhlGJhA==", - "dev": true, - "dependencies": { - "d": "~0.1.1", - "es5-ext": "~0.10.5", - "es6-symbol": "~2.0.1" - } - }, - "node_modules/clui/node_modules/es6-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", - "integrity": "sha512-wjobO4zO8726HVU7mI2OA/B6QszqwHJuKab7gKHVx+uRfVVYGcWJkCIFxV2Madqb9/RUSrhJ/r6hPfG7FsWtow==", - "dev": true, - "dependencies": { - "d": "~0.1.1", - "es5-ext": "~0.10.5" - } - }, - "node_modules/clui/node_modules/es6-weak-map": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", - "integrity": "sha512-P+N5Cd2TXeb7G59euFiM7snORspgbInS29Nbf3KNO2JQp/DyhvMCDWd58nsVAXwYJ6W3Bx7qDdy6QQ3PCJ7jKQ==", - "dev": true, - "dependencies": { - "d": "~0.1.1", - "es5-ext": "~0.10.6", - "es6-iterator": "~0.1.3", - "es6-symbol": "~2.0.1" - } - }, - "node_modules/clui/node_modules/memoizee": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", - "integrity": "sha512-LLzVUuWwGBKK188spgOK/ukrp5zvd9JGsiLDH41pH9vt5jvhZfsu5pxDuAnYAMG8YEGce72KO07sSBy9KkvOfw==", - "dev": true, - "dependencies": { - "d": "~0.1.1", - "es5-ext": "~0.10.11", - "es6-weak-map": "~0.1.4", - "event-emitter": "~0.3.4", - "lru-queue": "0.1", - "next-tick": "~0.2.2", - "timers-ext": "0.1" - } - }, - "node_modules/clui/node_modules/next-tick": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", - "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==", - "dev": true - }, "node_modules/cluster-key-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", @@ -7433,6 +8183,12 @@ "node": ">= 0.8" } }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, "node_modules/commander": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", @@ -7522,12 +8278,6 @@ "proto-list": "~1.2.1" } }, - "node_modules/connected-domain": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/connected-domain/-/connected-domain-1.0.0.tgz", - "integrity": "sha512-lHlohUiJxlpunvDag2Y0pO20bnvarMjnrdciZeuJUqRwrf/5JHNhdpiPIr5GQ8IkqrFj5TDMQwcCjblGo1oeuA==", - "dev": true - }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -7709,9 +8459,9 @@ } }, "node_modules/core-js": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", - "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz", + "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==", "dev": true, "hasInstallScript": true, "funding": { @@ -7815,9 +8565,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz", - "integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==", + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.2.tgz", + "integrity": "sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7921,12 +8671,12 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dev": true, "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "node_modules/cross-spawn": { @@ -7995,27 +8745,6 @@ "node": ">=8" } }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -8068,6 +8797,15 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", + "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/data-urls": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", @@ -8216,18 +8954,6 @@ "node": ">=4" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", @@ -8262,9 +8988,9 @@ } }, "node_modules/decompress-tar/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -8578,6 +9304,53 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "node_modules/degenerator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", + "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.17" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/degenerator/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/degenerator/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -8914,11 +9687,20 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "version": "0.0.1120988", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz", + "integrity": "sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==", "dev": true }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -8957,15 +9739,6 @@ "node": ">=8" } }, - "node_modules/docopt": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -8978,16 +9751,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -8998,12 +9761,6 @@ "npm": ">=1.2" } }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -9025,25 +9782,6 @@ "node": ">=12" } }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -9056,100 +9794,6 @@ "node": ">=8" } }, - "node_modules/downcache": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/downcache/-/downcache-0.0.9.tgz", - "integrity": "sha512-AssoVsNYu5DnPY0Ro67lkbiAr66sk5IHuiIGm3pzFzWmTzkcEoFjDlG8szzP4x+ZN2OHehKTZbwDrC7l2Q52+g==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "graceful-fs": "^4.1.3", - "limiter": "^1.1.0", - "mkdirp": "^0.5.1", - "npmlog": "^2.0.3", - "request": "^2.69.0", - "rimraf": "^2.5.2" - } - }, - "node_modules/downcache/node_modules/gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "dependencies": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "node_modules/downcache/node_modules/npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", - "dev": true, - "dependencies": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, - "node_modules/downcache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "dependencies": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -9192,12 +9836,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true - }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -9381,12 +10019,6 @@ "node": ">=6" } }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "node_modules/env-ci": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", @@ -9576,15 +10208,15 @@ } }, "node_modules/eslint": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", - "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.39.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.40.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -9595,8 +10227,8 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -9713,9 +10345,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10013,14 +10645,14 @@ } }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10446,31 +11078,6 @@ "type": "^2.7.2" } }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ext/node_modules/type": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", @@ -10803,29 +11410,6 @@ "node": ">=0.10.0" } }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -10871,12 +11455,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/find-root": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", - "integrity": "sha512-GyDxVgA61TZcrgDJPqOqGBpi80Uf2yIstubgizi7AjC9yPdRrqBR+Y0MvK4kXnYlaoz3d+SGxDHMYVkwI/yd2w==", - "dev": true - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -11223,6 +11801,34 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -11378,6 +11984,30 @@ "node": ">=14.14" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -11450,6 +12080,45 @@ "node": ">= 4.0" } }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -11566,35 +12235,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-mongodb-version": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-mongodb-version/-/get-mongodb-version-2.0.1.tgz", - "integrity": "sha512-yTN0UY7VJSSt01QH/aCiqiBjfxcDrEdKeM3uXY6QR3sRARoftx36QT0YNsCQm7FDTgrmDje7bK2C9ClM7SGKDA==", - "dev": true, - "dependencies": { - "lodash.startswith": "^4.2.1", - "minimist": "^1.1.1", - "which": "^1.1.1" - }, - "bin": { - "get-mongodb-version": "bin/get-mongodb-version.js" - }, - "optionalDependencies": { - "mongodb": "*" - } - }, - "node_modules/get-mongodb-version/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -11604,18 +12244,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "dependencies": { - "npm-conf": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -11628,6 +12256,53 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", + "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "dev": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^5.0.1", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/get-uri/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -11967,49 +12642,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -12022,6 +12654,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", @@ -12855,6 +13493,27 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -12888,15 +13547,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -12909,18 +13559,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", @@ -13120,20 +13758,6 @@ "node": ">=0.10" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -13235,12 +13859,9 @@ } }, "node_modules/idb-keyval": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", - "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", - "dependencies": { - "safari-14-idb-fix": "^3.0.0" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" }, "node_modules/ieee754": { "version": "1.2.1", @@ -13736,37 +14357,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-mongodb-running": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-mongodb-running/-/is-mongodb-running-1.0.2.tgz", - "integrity": "sha512-EslN8MErcBPExb+iK4RnG1n28JGjByA2Rm3YPmdHDGCRd7Hc2uvqshyVMAJXxbDSxRMy8vhxims2oRqQUeGJeA==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "debug": ">= 2.6.9", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "lsof": "^0.1.0", - "minimist": "^1.2.0", - "node-netstat": "^1.4.2", - "ps-node": "^0.1.6" - }, - "bin": { - "is-mongodb-running": "bin/is-mongodb-running.js" - } - }, - "node_modules/is-mongodb-running/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -13800,15 +14390,6 @@ "node": ">=8" } }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -13887,15 +14468,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -13981,15 +14553,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -14138,42 +14701,47 @@ "node": ">=8" } }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/iterall": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", "dev": true }, + "node_modules/jackspeak": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", + "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jasmine": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.6.0.tgz", - "integrity": "sha512-iq7HQ5M8ydNUspjd9vbFW9Lu+6lQ1QLDIqjl0WysEllF5EJZy8XaUyNlhCJVwOx2YFzqTtARWbS56F/f0PzRFw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.0.0.tgz", + "integrity": "sha512-wrigegsVTke3gt65LmLhIVqDZVcsYZwj9Oyai0pc04NlmgxIhfgbX0Af9CC3+S9lk0KZlttqjr2EBO8j2OCovA==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "jasmine-core": "^4.6.0" + "glob": "^10.2.2", + "jasmine-core": "~5.0.0" }, "bin": { "jasmine": "bin/jasmine.js" } }, "node_modules/jasmine-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", - "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.0.0.tgz", + "integrity": "sha512-BJLxZlSVyWPN/oyaS1IIvIjChghI9/xWsLAIJqL9J5Fz47CN3JNr8Lmik3S2S7QS2RxclYjvSVSXP7IR35PAmg==", "dev": true }, "node_modules/jasmine-reporters": { @@ -14186,25 +14754,59 @@ "mkdirp": "^1.0.4" } }, - "node_modules/jasmine-reporters/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/jasmine-spec-reporter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", + "dev": true, + "dependencies": { + "colors": "1.4.0" + } + }, + "node_modules/jasmine/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/jasmine/node_modules/glob": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.4.tgz", + "integrity": "sha512-fDboBse/sl1oXSLhIp0FcCJgzW9KmhC/q8ULTKC82zc+DL3TL7FNb8qlt5qqXN53MsKEUSIcb+7DLmEygOE5Yw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0 || ^6.0.0", + "path-scurry": "^1.7.0" + }, "bin": { - "mkdirp": "bin/cmd.js" + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jasmine-spec-reporter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", - "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", + "node_modules/jasmine/node_modules/minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", "dev": true, "dependencies": { - "colors": "1.4.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/java-properties": { @@ -16103,18 +16705,6 @@ "node": ">=8" } }, - "node_modules/jsdoc/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jsdoc/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -16301,6 +16891,18 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "dev": true, + "dependencies": { + "jsonify": "^0.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -16337,6 +16939,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -16443,12 +17054,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/key-tree-store": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", - "integrity": "sha512-qXk+lR+LXvGos3wqMxIMWweKDgCx8ZKWM6BEPm7iZkOKug5ggi66vUt+3vbtKJLBrAyOxQ4S8JRwK++Q4XZRmw==", - "dev": true - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -17000,18 +17605,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", - "dev": true - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", - "dev": true - }, "node_modules/lodash.capitalize": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", @@ -17030,42 +17623,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true - }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", "dev": true }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", - "dev": true - }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -17108,12 +17671,6 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true - }, "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -17132,54 +17689,6 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, - "node_modules/lodash.pad": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", - "dev": true - }, - "node_modules/lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", - "dev": true - }, - "node_modules/lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", - "dev": true - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", - "dev": true - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", - "dev": true - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", - "dev": true - }, - "node_modules/lodash.startswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==", - "dev": true - }, "node_modules/lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", @@ -17291,15 +17800,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -17347,16 +17847,6 @@ "es5-ext": "~0.10.2" } }, - "node_modules/lsof": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lsof/-/lsof-0.1.0.tgz", - "integrity": "sha512-RlNW3s4gQ0CIlDM3jwfx/Ogdwpa8PHySyd5FnKKXfi2NPXEjqgwONyA0y9ax33ur1G+K+f192zzKNQljupSgNA==", - "deprecated": "No longer maintained", - "dev": true, - "engines": { - "node": ">= 0.2.0" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -17809,9 +18299,9 @@ } }, "node_modules/metro-react-native-babel-preset": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.3.tgz", - "integrity": "sha512-3DyE0aP/k8OdIcA0Dy0MQwx6EiXaTLq5YPy4Z38lwOFxD9ZRm2rwnaNXNczsYisJqeq1vcEJpfMnjS26Kqq97g==", + "version": "0.76.4", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.4.tgz", + "integrity": "sha512-BKyfPz7mn3ncgRjqi8Z9nYLbzuuiBWns2AAEIGctQdz9OMMAisPlZmWscv09UjhPXkQc/XtToFETVN7fmHMfug==", "dev": true, "dependencies": { "@babel/core": "^7.20.0", @@ -17935,15 +18425,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -17997,6 +18478,40 @@ "node": ">= 6" } }, + "node_modules/minipass": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.0.tgz", + "integrity": "sha512-mvD5U4pUen1aWcjTxUgdoMg6PB98dcV0obc/OiPzls79++IpgNoO+MCbOHRlKfWIOvjIjmjUygjZmSStP7B0Og==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mitt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", @@ -18041,15 +18556,15 @@ } }, "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, "bin": { "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/mkdirp-classic": { @@ -18210,78 +18725,6 @@ "node": ">=12" } }, - "node_modules/mongodb-core": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz", - "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==", - "dev": true, - "dependencies": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - } - }, - "node_modules/mongodb-core/node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/mongodb-dbpath": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/mongodb-dbpath/-/mongodb-dbpath-0.0.1.tgz", - "integrity": "sha512-JljM2Gci3LQgECY4Wnp8tRx6eDNSoTnqiz4TIaOfqLuPr3SAbSdZEAQomHniH8DQJpn97gxdYkW/XomxYPZM2w==", - "dev": true, - "dependencies": { - "async": "^1.4.0", - "debug": "^2.1.1", - "minimist": "^1.1.1", - "mkdirp": "^0.5.1", - "untildify": "^1.0.0" - }, - "bin": { - "mongodb-dbpath": "bin/mongodb-dbpath.js" - } - }, - "node_modules/mongodb-dbpath/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/mongodb-dbpath/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mongodb-dbpath/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/mongodb-dbpath/node_modules/untildify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-1.0.0.tgz", - "integrity": "sha512-LSU5BVpAncfzB2UBQaqfNww36wRSehWHs2grMM0ueYctZYxAhntiMvqDBhezYCYvbLeejeZ1nUWSl3mmkdPp+g==", - "dev": true, - "dependencies": { - "user-home": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mongodb-download-url": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", @@ -18298,9 +18741,9 @@ } }, "node_modules/mongodb-download-url/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -18313,104 +18756,72 @@ } }, "node_modules/mongodb-runner": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.10.0.tgz", - "integrity": "sha512-6hE4nA4+LMBPwLMXr/jQNRNtUdQgfmZOJE/4u5JX952hdUa0lPc+26Y45PdgbdMbfCYUfZK1cOBObZOBmTdQ6Q==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.4.3.tgz", + "integrity": "sha512-Pzd0+8aJtPiuHRwnk/6AToFDACPDdVKK6bpP0+Drbpu6cP9XLG31ZuziyLrqHNB5h7I9WlAoTt34zLt5LO8G7g==", "dev": true, "dependencies": { - "async": "^3.1.0", - "clui": "^0.3.6", - "debug": "^4.1.1", - "fs-extra": "^8.1.0", - "is-mongodb-running": "^1.0.1", - "lodash.defaults": "^4.2.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "mongodb": "^3.4.0", - "mongodb-dbpath": "^0.0.1", - "mongodb-tools": "github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "mongodb-version-manager": "^1.5.0", - "untildify": "^4.0.0", - "which": "^2.0.1" + "@mongodb-js/mongodb-downloader": "^0.2.8", + "debug": "^4.3.4", + "mongodb": "^5.6.0", + "mongodb-connection-string-url": "^2.6.0", + "yargs": "^17.7.2" }, "bin": { - "mongodb-runner": "bin/mongodb-runner.js" - } - }, - "node_modules/mongodb-runner/node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dev": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "mongodb-runner": "bin/runner.js" } }, "node_modules/mongodb-runner/node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/mongodb-runner/node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", + "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", "dev": true, "engines": { - "node": ">=0.10" + "node": ">=14.20.1" } }, - "node_modules/mongodb-runner/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/mongodb-runner/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/mongodb-runner/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=12" } }, "node_modules/mongodb-runner/node_modules/mongodb": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", - "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz", + "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==", "dev": true, "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.1.8", - "safe-buffer": "^5.1.2" + "bson": "^5.4.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" }, "engines": { - "node": ">=4" + "node": ">=14.20.1" }, "optionalDependencies": { - "saslprep": "^1.0.0" + "saslprep": "^1.0.3" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.201.0", + "@mongodb-js/zstd": "^1.1.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" }, "peerDependenciesMeta": { - "aws4": { + "@aws-sdk/credential-providers": { "optional": true }, - "bson-ext": { + "@mongodb-js/zstd": { "optional": true }, "kerberos": { @@ -18419,232 +18830,36 @@ "mongodb-client-encryption": { "optional": true }, - "mongodb-extjson": { - "optional": true - }, "snappy": { "optional": true } } }, - "node_modules/mongodb-runner/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/mongodb-runner/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/mongodb-runner/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/mongodb-tools": { - "version": "1.2.0", - "resolved": "git+ssh://git@github.com/mongodb-js/mongodb-tools.git#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "integrity": "sha512-DNJJQYg1/VcE4gNP7zpKeWGIezwcpkI8XzG4YFL3WybY6cuKWMz3d1CIp3uKKEpva1qOHk2LI8mKWJX1Vpw4Sg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.2.0", - "lodash": "^4.17.12", - "mkdirp": "0.5.0", - "mongodb-core": "*", - "rimraf": "2.2.6" - } - }, - "node_modules/mongodb-tools/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/mongodb-runner/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mongodb-tools/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", - "dev": true - }, - "node_modules/mongodb-tools/node_modules/mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha512-xjjNGy+ry1lhtIKcr2PT6ok3aszhQfgrUDp4OZLHacgRgFmF6XR9XCOJVcXlVGQonIqXcK1DvqgKKQOPWYGSfw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mongodb-tools/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/mongodb-tools/node_modules/rimraf": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz", - "integrity": "sha512-33Fa/MIw/3F9KcDE/uJ2OuYUyxY+fkmw1c20DFnyhP7dfo2+BexeE1thjluPiJaG8sW6CcaqnTffwpRd4NAiTg==", - "dev": true, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mongodb-version-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mongodb-version-list/-/mongodb-version-list-1.0.0.tgz", - "integrity": "sha512-F3kIABEMNjg3ZAX4SRbO1QPmhpP4NX2IgJq+lcUKidducTOVJafXJ+E+pMkgpU0xumC8QYbIZJ+8y4GZys9E4g==", - "dev": true, - "dependencies": { - "cheerio": "^0.22.0", - "debug": "^2.2.0", - "downcache": "^0.0.9", - "fs-extra": "^1.0.0", - "minimist": "^1.1.1", - "semver": "^5.0.1" - }, - "bin": { - "mongodb-version-list": "bin/mongodb-version-list.js" - } - }, - "node_modules/mongodb-version-list/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mongodb-version-list/node_modules/fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "node_modules/mongodb-version-list/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mongodb-version-list/node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/mongodb-version-list/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/mongodb-version-manager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.5.0.tgz", - "integrity": "sha512-VHijlQXvQFnX/9MzfGePyBNr9qHLHRHg6sM2ChFO+05Htf6JY50WzvDWZmtXUNGXEor80fXxhswwDJevGlZkyA==", - "dev": true, - "dependencies": { - "ampersand-state": "^5.0.3", - "async": "^3.1.0", - "chalk": "^2.1.0", - "debug": ">= 2.6.9 < 3.0.0 || >= ^3.1.0", - "docopt": "^0.6.2", - "download": "^6.2.5", - "figures": "^3.2.0", - "fs-extra": "^8.1.0", - "get-mongodb-version": "^2.0.1", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.1.1", - "mongodb-download-url": "^1.0.0", - "mongodb-version-list": "^1.0.0", - "semver": "^5.3.0", - "tildify": "^2.0.0", - "untildify": "^4.0.0" - }, - "bin": { - "m": "bin/m.js", - "mongodb-version-manager": "bin/mongodb-version-manager.js" - } - }, - "node_modules/mongodb-version-manager/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mongodb-version-manager/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/mongodb-version-manager/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=12" } }, - "node_modules/mongodb-version-manager/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/mongodb-runner/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, "node_modules/ms": { @@ -18706,6 +18921,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -18727,6 +18948,15 @@ "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", "dev": true }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", @@ -18762,9 +18992,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -18796,15 +19026,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-netstat": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/node-netstat/-/node-netstat-1.8.0.tgz", - "integrity": "sha512-P1a5Sh9FfjTXxI6hC9q/Nqre8kT63FQxBCr1qz5ffk76EkQBH62+XEhIhlzfz6Bz+FRwOFqidW2FDGXnOXvyJQ==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - } - }, "node_modules/node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", @@ -19042,17 +19263,33 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "dependencies": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/npm-run-path": { @@ -21481,15 +21718,6 @@ "set-blocking": "~2.0.0" } }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -21741,18 +21969,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optional-require": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", - "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", - "dev": true, - "dependencies": { - "require-at": "^1.0.6" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -21821,15 +22037,6 @@ "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -21842,18 +22049,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", - "dev": true, - "dependencies": { - "p-timeout": "^1.1.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", @@ -21866,15 +22061,6 @@ "node": ">=8" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-is-promise": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", @@ -21942,27 +22128,91 @@ "node": ">=8" } }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", + "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", "dev": true, "dependencies": { - "p-finally": "^1.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "pac-resolver": "^6.0.1", + "socks-proxy-agent": "^8.0.1" }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, "engines": { - "node": ">=6" + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, + "node_modules/pac-resolver": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", + "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", + "dev": true, + "dependencies": { + "degenerator": "^4.0.1", + "ip": "^1.1.5", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, "node_modules/packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -22117,9 +22367,9 @@ } }, "node_modules/parse-server": { - "version": "6.1.0-alpha.7", - "resolved": "git+ssh://git@github.com/parse-community/parse-server.git#177891ea0eed54eff996d81749cfbfb32156ae87", - "integrity": "sha512-kC7Rpkau1wDpEMsBPgwwutvBju7NX8jdOp/X2/9AjWreagOt3vfznBDfrybtvNxp01xJ47pOuDGtV5UauIaExA==", + "version": "6.1.0-alpha.11", + "resolved": "git+ssh://git@github.com/parse-community/parse-server.git#c78a5a6f10ce09032579fed8ef4cbd84c1ee96a9", + "integrity": "sha512-C6E8mkVW5IUtliqfH+StD0K6ycJJH7GVbmwj0zou9crKfKNP4iiLwBGklnMM9yBmfKpj2fMGztXFDju5HZ3irw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -22398,6 +22648,12 @@ "node": ">= 0.8" } }, + "node_modules/parsimmon": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.1.tgz", + "integrity": "sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==", + "dev": true + }, "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -22482,6 +22738,31 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.1.tgz", + "integrity": "sha512-UgmoiySyjFxP6tscZDgWGEAgsW5ok8W3F5CJDnnH2pozwSTGE6eH7vwTotMwATWA2r5xqdkKdxYPkwlJjAI/3g==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", + "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -22902,15 +23183,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -22921,15 +23193,15 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", + "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -23026,21 +23298,78 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.0.tgz", + "integrity": "sha512-g3rBHXPhEa0Z1nxZkirj0+US1SCcA67SnjpxbdZf7BloLdULEUCzbQozsq+wFwhmMeZegeZISDZjPFN/Ct9DaQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "http-proxy-agent": "^6.0.1", + "https-proxy-agent": "^6.1.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^6.0.2", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-6.1.1.tgz", + "integrity": "sha512-JRCz+4Whs6yrrIoIlrH+ZTmhrRwtMnmOHsHn8GFEn9O2sVfSE+DAZ3oyyGIKF8tjJEeSJmP89j7aTjVsSqsU0g==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-6.2.1.tgz", + "integrity": "sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "node_modules/ps-node": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ps-node/-/ps-node-0.1.6.tgz", - "integrity": "sha512-w7QJhUTbu70hpDso0YXDRNKCPNuchV8UTUZsAv0m7Qj5g85oHOJfr9drA1EjvK4nQK/bG8P97W4L6PJ3IQLoOA==", - "dev": true, - "dependencies": { - "table-parser": "^0.1.3" - } - }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -23111,40 +23440,32 @@ "dev": true }, "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.4.0.tgz", + "integrity": "sha512-0/lgDbbC2LX/vMQ6+cv/doQuguFAf4Ra52fyW5oBOpQd85SzPBtXg4yPk+VhUpgr+oaOVAIUkgvBs98E+8xhCw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "0.5.0", + "@puppeteer/browsers": "1.4.0", "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" + "puppeteer-core": "20.4.0" } }, "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.4.0.tgz", + "integrity": "sha512-fcL2fYQLFZEuIIDbMhvf6WF5rAcKXetsrjOxu6Br6FEAet7kEtJlCcrKmnz3pfqkwAIlihjuzwT5ys7jMWEx8A==", "dev": true, "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", + "@puppeteer/browsers": "1.4.0", + "chromium-bidi": "0.4.10", + "cross-fetch": "3.1.6", "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", + "devtools-protocol": "0.0.1120988", "ws": "8.13.0" }, "engines": { - "node": ">=14.14.0" + "node": ">=16.0.0" }, "peerDependencies": { "typescript": ">= 4.7.4" @@ -23751,7 +24072,8 @@ "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.1", @@ -23946,34 +24268,6 @@ "uuid": "bin/uuid" } }, - "node_modules/require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "dev": true, - "dependencies": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "node_modules/require_optional/node_modules/resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha512-qpFcKaXsq8+oRoLilkwyc7zHGF5i9Q2/25NIgLQQ/+VVv9rU4qvr6nXVAw1DsnXJyQkZsR4Ytfbtg5ehfcUssQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -24190,7 +24484,8 @@ "node_modules/safari-14-idb-fix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", - "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" + "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==", + "dev": true }, "node_modules/safe-buffer": { "version": "5.1.2", @@ -24695,6 +24990,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -24865,28 +25169,30 @@ "npm": ">= 3.0.0" } }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "node_modules/socks-proxy-agent": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", "dev": true, "dependencies": { - "is-plain-obj": "^1.0.0" + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "dependencies": { - "sort-keys": "^1.0.0" + "debug": "^4.3.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, "node_modules/source-map": { @@ -25068,6 +25374,30 @@ "node": ">=0.10.0" } }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -25359,6 +25689,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -25371,6 +25716,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -25444,18 +25802,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -25601,13 +25947,21 @@ "acorn-node": "^1.2.0" } }, - "node_modules/table-parser": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/table-parser/-/table-parser-0.1.3.tgz", - "integrity": "sha512-LCYeuvqqoPII3lzzYaXKbC3Forb+d2u4bNwhk/9FlivuGRxPE28YEWAYcujeSlLLDlMfvy29+WPybFJZFiKMYg==", + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, "dependencies": { - "connected-domain": "^1.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/tar-fs": { @@ -25638,6 +25992,24 @@ "node": ">=6" } }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/teeny-request": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz", @@ -25820,15 +26192,6 @@ "xtend": "~4.0.1" } }, - "node_modules/tildify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", - "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -25838,15 +26201,6 @@ "node": ">=0.10.0" } }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", @@ -25869,6 +26223,18 @@ "next-tick": "1" } }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -26023,9 +26389,9 @@ } }, "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -26055,18 +26421,6 @@ "node": ">=8" } }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -26079,6 +26433,93 @@ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, + "node_modules/tslint": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", + "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + } + }, + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/tslint/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tslint/node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -26170,6 +26611,20 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -26423,15 +26878,6 @@ "node": ">=0.10.0" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -26519,27 +26965,6 @@ "requires-port": "^1.0.0" } }, - "node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -26564,18 +26989,6 @@ "node": ">=0.10.0" } }, - "node_modules/user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ==", - "dev": true, - "bin": { - "user-home": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -26648,6 +27061,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, "node_modules/value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", @@ -26939,6 +27361,43 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "node_modules/vm2": { + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/vm2/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vm2/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -27122,9 +27581,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -27153,6 +27612,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -27361,12 +27871,12 @@ } }, "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" } }, "@babel/compat-data": { @@ -27376,21 +27886,21 @@ "dev": true }, "@babel/core": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.5.tgz", - "integrity": "sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.0.tgz", + "integrity": "sha512-D58mjF+Y+89UfbMJpV57UTCg+JRQIFgvROPfH7mmIfBcoFVMkwiiiJyzPyW3onN9kg9noDg7MVyI+Yt64bnfQQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", + "@babel/generator": "^7.22.0", "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.5", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/helper-module-transforms": "^7.22.0", + "@babel/helpers": "^7.22.0", + "@babel/parser": "^7.22.0", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.0", + "@babel/types": "^7.22.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -27407,9 +27917,9 @@ } }, "@babel/eslint-parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz", - "integrity": "sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg==", + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.21.8.tgz", + "integrity": "sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ==", "dev": true, "requires": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -27432,24 +27942,24 @@ } }, "@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dev": true, "requires": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -27499,19 +28009,28 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, "@babel/helper-create-regexp-features-plugin": { @@ -27599,9 +28118,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true }, "@babel/helper-explode-assignable-expression": { @@ -27614,13 +28133,13 @@ } }, "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-hoist-variables": { @@ -27633,52 +28152,49 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "requires": { - "@babel/types": "^7.21.0" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "requires": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" } }, "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -27694,62 +28210,59 @@ } }, "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" } }, "@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "requires": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true }, "@babel/helper-wrap-function": { @@ -27765,31 +28278,31 @@ } }, "@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.0.tgz", + "integrity": "sha512-I/hZCYErxdjuUnJpJxHmCESB3AdcOAFjj+K6+of9JyWBeAhggR9NQoUHI481pRNH87cx77mbpx0cygzXlvGayA==", "dev": true, "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.0", + "@babel/types": "^7.22.0" } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.5.tgz", - "integrity": "sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -28045,12 +28558,12 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-import-assertions": { @@ -28081,12 +28594,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -28162,21 +28675,21 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", + "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.21.5" } }, "@babel/plugin-transform-async-to-generator": { @@ -28226,12 +28739,12 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", + "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-plugin-utils": "^7.21.5", "@babel/template": "^7.20.7" } }, @@ -28274,14 +28787,14 @@ } }, "@babel/plugin-transform-flow-comments": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.21.0.tgz", - "integrity": "sha512-TG7bJMbzlQHV0rUdk1sEWiUMXz4MLJ1uvlAxs52J1lBC9mDSJDtnEmYFywWPg5utvAREM/SR/ty9rwXXuWv+nQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.22.5.tgz", + "integrity": "sha512-e2lp78CXh9N2Xu0BKVibzLooLNkr1pGrSuigKBDFefibKnEuBW1uTWZVbJm7ptteOekftR27Afupm7nB74rs6w==", "dev": true, "requires": { - "@babel/generator": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/generator": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" } }, "@babel/plugin-transform-flow-strip-types": { @@ -28295,12 +28808,12 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", + "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.21.5" } }, "@babel/plugin-transform-function-name": { @@ -28343,14 +28856,14 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" } }, "@babel/plugin-transform-modules-systemjs": { @@ -28423,34 +28936,34 @@ } }, "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.22.5" } }, "@babel/plugin-transform-react-jsx-self": { @@ -28472,22 +28985,22 @@ } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", + "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-plugin-utils": "^7.21.5", "regenerator-transform": "^0.15.1" } }, @@ -28569,23 +29082,24 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz", + "integrity": "sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", + "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.21.5" } }, "@babel/plugin-transform-unicode-regex": { @@ -28599,14 +29113,14 @@ } }, "@babel/preset-env": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", - "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", + "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", "dev": true, "requires": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", + "@babel/compat-data": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", "@babel/helper-validator-option": "^7.21.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", @@ -28631,6 +29145,7 @@ "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -28640,22 +29155,22 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-arrow-functions": "^7.21.5", "@babel/plugin-transform-async-to-generator": "^7.20.7", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", "@babel/plugin-transform-block-scoping": "^7.21.0", "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-computed-properties": "^7.21.5", "@babel/plugin-transform-destructuring": "^7.21.3", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.0", + "@babel/plugin-transform-for-of": "^7.21.5", "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", "@babel/plugin-transform-modules-systemjs": "^7.20.11", "@babel/plugin-transform-modules-umd": "^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", @@ -28663,17 +29178,17 @@ "@babel/plugin-transform-object-super": "^7.18.6", "@babel/plugin-transform-parameters": "^7.21.3", "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.20.5", + "@babel/plugin-transform-regenerator": "^7.21.5", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", "@babel/plugin-transform-spread": "^7.20.7", "@babel/plugin-transform-sticky-regex": "^7.18.6", "@babel/plugin-transform-template-literals": "^7.18.9", "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-escapes": "^7.21.5", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.4", + "@babel/types": "^7.21.5", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -28738,74 +29253,94 @@ } }, "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + } + }, + "@babel/preset-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" } }, "@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dev": true, "requires": { "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.11.tgz", + "integrity": "sha512-NhfzUbdWbiE6fCFypbWCPu6AR8xre31EOPF7wwAIJEvGQ2avov04eymayWinCuyXmV1b0+jzoXP/HYzzUYdvwg==", "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + } } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.0.tgz", + "integrity": "sha512-V5Zp3k0nFGWSIC7zYR8PnfdU6i6VYU4JnifdSSMlXM1GMojPAaelPsKmKPW4tWTmpX9GM+RzKl4Io0UVcHVlpw==", "dev": true, "requires": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", + "@babel/generator": "^7.22.0", "@babel/helper-environment-visitor": "^7.21.5", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/parser": "^7.22.0", + "@babel/types": "^7.22.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" } }, @@ -28832,6 +29367,320 @@ "kuler": "^2.0.0" } }, + "@definitelytyped/dts-critic": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/dts-critic/-/dts-critic-0.0.163.tgz", + "integrity": "sha512-HsTvylj8x2gQaawsOCcN2Xk2Cx0wgV9kaj83hgsO9SITZSPd7dA0UkHyNRadbMkMwqNDKcnizcmWdz0+0gIo8A==", + "dev": true, + "requires": { + "@definitelytyped/header-parser": "^0.0.163", + "command-exists": "^1.2.8", + "rimraf": "^3.0.2", + "semver": "^6.2.0", + "tmp": "^0.2.1", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@definitelytyped/dtslint": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/dtslint/-/dtslint-0.0.163.tgz", + "integrity": "sha512-U0uw7Zu0QdYSuBMYgxvRYjkhkeulTEg8vDgJ7TiYQUv/wODeujSAmGahQn51E5hOlSMYUw7A9utdbUukxE02SQ==", + "dev": true, + "requires": { + "@definitelytyped/dts-critic": "^0.0.163", + "@definitelytyped/header-parser": "^0.0.163", + "@definitelytyped/typescript-versions": "^0.0.163", + "@definitelytyped/utils": "^0.0.163", + "@typescript-eslint/eslint-plugin": "^5.55.0", + "@typescript-eslint/parser": "^5.55.0", + "@typescript-eslint/types": "^5.56.0", + "@typescript-eslint/typescript-estree": "^5.55.0", + "@typescript-eslint/utils": "^5.55.0", + "eslint": "^8.17.0", + "fs-extra": "^6.0.1", + "json-stable-stringify": "^1.0.1", + "strip-json-comments": "^2.0.1", + "tslint": "5.14.0", + "yargs": "^15.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@definitelytyped/header-parser": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/header-parser/-/header-parser-0.0.163.tgz", + "integrity": "sha512-Jr+/q+ESfc7uWldz/j11BfpjIN/gB4WmwhFENhWaMwM0W/9p0ShF+OiUqGhk2Q3Iz8v/oyWzSsxyxgasg9kCxQ==", + "dev": true, + "requires": { + "@definitelytyped/typescript-versions": "^0.0.163", + "@types/parsimmon": "^1.10.1", + "parsimmon": "^1.13.0" + } + }, + "@definitelytyped/typescript-versions": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/typescript-versions/-/typescript-versions-0.0.163.tgz", + "integrity": "sha512-+GWtJhC+7UaCUnJ+ZkA7bfGuPd6ZbJKEjbHqh76/gOXsqAUOMEa49ufsLlIPUbkEeQlnDNoTHCegE5X/Q+u+/A==", + "dev": true + }, + "@definitelytyped/utils": { + "version": "0.0.163", + "resolved": "https://registry.npmjs.org/@definitelytyped/utils/-/utils-0.0.163.tgz", + "integrity": "sha512-6MX5TxaQbG/j2RkCWbcbLvv+YNipKqY0eQJafDhwC/RprUocpg+uYVNlH8XzdKRWOGJ0pq7SZOsJD4C3A01ZXg==", + "dev": true, + "requires": { + "@definitelytyped/typescript-versions": "^0.0.163", + "@qiwi/npm-registry-client": "^8.9.1", + "@types/node": "^14.14.35", + "charm": "^1.0.2", + "fs-extra": "^8.1.0", + "fstream": "^1.0.12", + "tar": "^6.1.11", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "@types/node": { + "version": "14.18.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.54.tgz", + "integrity": "sha512-uq7O52wvo2Lggsx1x21tKZgqkJpvwCseBBPtX/nKQfpVlEsLOb11zZ1CRsWUKvJF0+lzuA9jwvA7Pr2Wt7i3xw==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "@envelop/core": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@envelop/core/-/core-2.6.0.tgz", @@ -28906,14 +29755,14 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.5.2", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -28961,9 +29810,9 @@ } }, "@eslint/js": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", - "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", + "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", "dev": true }, "@graphql-tools/merge": { @@ -29115,6 +29964,71 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -29678,6 +30592,19 @@ "lodash": "^4.17.21" } }, + "@mongodb-js/mongodb-downloader": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-downloader/-/mongodb-downloader-0.2.8.tgz", + "integrity": "sha512-y+mgw9QspvgTLRNHZJRS+DUTPk45RWpvYD1MaGDWhZ4ajffvxGqanY+Z4R6z01n+tIRmQvpShzF6zk+2Pr9d6w==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "decompress": "^4.2.1", + "mongodb-download-url": "^1.3.0", + "node-fetch": "^2.6.11", + "tar": "^6.1.15" + } + }, "@napi-rs/triples": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.1.0.tgz", @@ -30181,6 +31108,13 @@ } } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, "@pnpm/network.ca-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", @@ -30201,16 +31135,15 @@ } }, "@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.0.tgz", + "integrity": "sha512-HiRpoc15NhFwoR1IjN3MkMsqeAfRQKNzbhWVV+0BfvybEhjWSyRNQMC0ohMhkFhzoGnFoS59WlrJCGLPky/89g==", "dev": true, "requires": { "debug": "4.3.4", "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", "progress": "2.0.3", - "proxy-from-env": "1.1.0", + "proxy-agent": "6.2.0", "tar-fs": "2.1.1", "unbzip2-stream": "1.4.3", "yargs": "17.7.1" @@ -30250,6 +31183,52 @@ } } }, + "@qiwi/npm-registry-client": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz", + "integrity": "sha512-rZF+mG+NfijR0SHphhTLHRr4aM4gtfdwoAMY6we2VGQam8vkN1cxGG1Lg/Llrj8Dd0Mu6VjdFQRyMMRZxtZR2A==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "graceful-fs": "^4.2.4", + "normalize-package-data": "~1.0.1 || ^2.0.0 || ^3.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.4.0", + "request": "^2.88.2", + "retry": "^0.12.0", + "safe-buffer": "^5.2.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5 || 7", + "slide": "^1.1.6", + "ssri": "^8.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "@repeaterjs/repeater": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", @@ -30559,6 +31538,12 @@ "parse5": "^7.0.0" } }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, "@types/jsonwebtoken": { "version": "8.5.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", @@ -30620,6 +31605,12 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/parsimmon": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.6.tgz", + "integrity": "sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==", + "dev": true + }, "@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", @@ -30644,6 +31635,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -30707,6 +31704,138 @@ "@types/node": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "@xmldom/xmldom": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", @@ -30829,81 +31958,6 @@ "uri-js": "^4.2.2" } }, - "ampersand-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", - "integrity": "sha512-pPnVEJviRxXi9YhZA9j3GwGGBTlDLi+YIoBvrpKXgce+CO1nMlZU2aOV8OJogNuR2YPbptAUHNz7SKX+MvLj8A==", - "dev": true, - "requires": { - "ampersand-version": "^1.0.2", - "lodash": "^4.6.1" - } - }, - "ampersand-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", - "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", - "dev": true, - "requires": { - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.0", - "array-next": "~0.0.1", - "key-tree-store": "^1.3.0", - "lodash": "^4.12.0" - } - }, - "ampersand-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", - "integrity": "sha512-FVVLY7Pghtgc8pQl0rF3A3+OS/CZ+/ILLMIYIaO1cA9v5SRkainqUMfSot3fu32svuThIsYK3q9iCsH9W5+mWQ==", - "dev": true, - "requires": { - "find-root": "^0.1.1", - "through2": "^0.6.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", - "dev": true - }, "ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", @@ -31254,12 +32308,6 @@ } } }, - "array-next": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", - "integrity": "sha512-sBOC/Iaz2hCcYi2XlyRfyZCRUxamlE5NJXEFjE9BTx23HALnWAFsPjGtfrAclt9o3G/38Het2yyeyOd3CEY7lg==", - "dev": true - }, "array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", @@ -31377,6 +32425,15 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -31446,6 +32503,65 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, "babel-helper-evaluate-path": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", @@ -31755,6 +32871,12 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "dev": true + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -31864,12 +32986,6 @@ } } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, "bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -32254,12 +33370,24 @@ "readable-stream": "^3.4.0" } }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, "busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -32362,18 +33490,6 @@ "lodash": "^4.17.15" } }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -32391,28 +33507,13 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "charm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", + "integrity": "sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw==", "dev": true, "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "inherits": "^2.0.1" } }, "chokidar": { @@ -32538,9 +33639,9 @@ "dev": true }, "chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.10.tgz", + "integrity": "sha512-ngdRIq/f5G3nIOz1M0MtCABCTezr79MBCrJ09K2xRk+hTZQGTH8JIeFbgQmVvNPBMQblh7ROfJnSzsE07YpFfg==", "dev": true, "requires": { "mitt": "3.0.0" @@ -32761,92 +33862,6 @@ } } }, - "clui": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/clui/-/clui-0.3.6.tgz", - "integrity": "sha512-Z4UbgZILlIAjkEkZiDOa2aoYjohKx7fa6DxIh6cE9A6WNWZ61iXfQc6CmdC9SKdS5nO0P0UyQ+WfoXfB65e3HQ==", - "dev": true, - "requires": { - "cli-color": "0.3.2" - }, - "dependencies": { - "cli-color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.3.2.tgz", - "integrity": "sha512-Ys/nDhHNRcxrS4EUI2RS/QCUE+61AMuEOj3sWDX+EIHkJWj+4XkRbOdwdxJteAJKjXYBbeFJMtfaEPd1MBF9pQ==", - "dev": true, - "requires": { - "d": "~0.1.1", - "es5-ext": "~0.10.2", - "memoizee": "0.3.x", - "timers-ext": "0.1.x" - } - }, - "d": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "integrity": "sha512-0SdM9V9pd/OXJHoWmTfNPTAeD+lw6ZqHg+isPyBFuJsZLSE0Ygg1cYZ/0l6DrKQXMOqGOu1oWupMoOfoRfMZrQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "es6-iterator": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", - "integrity": "sha512-6TOmbFM6OPWkTe+bQ3ZuUkvqcWUjAnYjKUCLdbvRsAUz2Pr+fYIibwNXNkLNtIK9PPFbNMZZddaRNkyJhlGJhA==", - "dev": true, - "requires": { - "d": "~0.1.1", - "es5-ext": "~0.10.5", - "es6-symbol": "~2.0.1" - } - }, - "es6-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", - "integrity": "sha512-wjobO4zO8726HVU7mI2OA/B6QszqwHJuKab7gKHVx+uRfVVYGcWJkCIFxV2Madqb9/RUSrhJ/r6hPfG7FsWtow==", - "dev": true, - "requires": { - "d": "~0.1.1", - "es5-ext": "~0.10.5" - } - }, - "es6-weak-map": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", - "integrity": "sha512-P+N5Cd2TXeb7G59euFiM7snORspgbInS29Nbf3KNO2JQp/DyhvMCDWd58nsVAXwYJ6W3Bx7qDdy6QQ3PCJ7jKQ==", - "dev": true, - "requires": { - "d": "~0.1.1", - "es5-ext": "~0.10.6", - "es6-iterator": "~0.1.3", - "es6-symbol": "~2.0.1" - } - }, - "memoizee": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", - "integrity": "sha512-LLzVUuWwGBKK188spgOK/ukrp5zvd9JGsiLDH41pH9vt5jvhZfsu5pxDuAnYAMG8YEGce72KO07sSBy9KkvOfw==", - "dev": true, - "requires": { - "d": "~0.1.1", - "es5-ext": "~0.10.11", - "es6-weak-map": "~0.1.4", - "event-emitter": "~0.3.4", - "lru-queue": "0.1", - "next-tick": "~0.2.2", - "timers-ext": "0.1" - } - }, - "next-tick": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", - "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==", - "dev": true - } - } - }, "cluster-key-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", @@ -33009,6 +34024,12 @@ "delayed-stream": "~1.0.0" } }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, "commander": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", @@ -33091,12 +34112,6 @@ "proto-list": "~1.2.1" } }, - "connected-domain": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/connected-domain/-/connected-domain-1.0.0.tgz", - "integrity": "sha512-lHlohUiJxlpunvDag2Y0pO20bnvarMjnrdciZeuJUqRwrf/5JHNhdpiPIr5GQ8IkqrFj5TDMQwcCjblGo1oeuA==", - "dev": true - }, "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -33235,9 +34250,9 @@ } }, "core-js": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", - "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz", + "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==", "dev": true }, "core-js-compat": { @@ -33292,9 +34307,9 @@ } }, "core-js-pure": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz", - "integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==" + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.2.tgz", + "integrity": "sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg==" }, "core-util-is": { "version": "1.0.3", @@ -33380,12 +34395,12 @@ } }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dev": true, "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "cross-spawn": { @@ -33445,24 +34460,6 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, "cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -33511,6 +34508,12 @@ "assert-plus": "^1.0.0" } }, + "data-uri-to-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", + "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", + "dev": true + }, "data-urls": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", @@ -33647,15 +34650,6 @@ } } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", @@ -33684,9 +34678,9 @@ "dev": true }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -33919,6 +34913,40 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "degenerator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", + "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", + "dev": true, + "requires": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.17" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -34200,9 +35228,15 @@ } }, "devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "version": "0.0.1120988", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz", + "integrity": "sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diff-sequences": { @@ -34239,12 +35273,6 @@ "path-type": "^4.0.0" } }, - "docopt": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", - "dev": true - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -34254,28 +35282,12 @@ "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -34293,25 +35305,6 @@ } } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -34321,92 +35314,6 @@ "is-obj": "^2.0.0" } }, - "downcache": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/downcache/-/downcache-0.0.9.tgz", - "integrity": "sha512-AssoVsNYu5DnPY0Ro67lkbiAr66sk5IHuiIGm3pzFzWmTzkcEoFjDlG8szzP4x+ZN2OHehKTZbwDrC7l2Q52+g==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "graceful-fs": "^4.1.3", - "limiter": "^1.1.0", - "mkdirp": "^0.5.1", - "npmlog": "^2.0.3", - "request": "^2.69.0", - "rimraf": "^2.5.2" - }, - "dependencies": { - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", - "dev": true, - "requires": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "requires": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } - } - }, "dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -34448,12 +35355,6 @@ } } }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -34627,12 +35528,6 @@ } } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "env-ci": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", @@ -34792,15 +35687,15 @@ } }, "eslint": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", - "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.39.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.40.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -34811,8 +35706,8 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -35087,20 +35982,20 @@ } }, "eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true }, "espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "dependencies": { "acorn": { @@ -35439,25 +36334,6 @@ } } }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -35725,23 +36601,6 @@ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "dev": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -35783,12 +36642,6 @@ } } }, - "find-root": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", - "integrity": "sha512-GyDxVgA61TZcrgDJPqOqGBpi80Uf2yIstubgizi7AjC9yPdRrqBR+Y0MvK4kXnYlaoz3d+SGxDHMYVkwI/yd2w==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -36078,6 +36931,24 @@ "for-in": "^1.0.1" } }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -36199,6 +37070,26 @@ "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -36262,6 +37153,38 @@ "nan": "^2.12.1" } }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -36356,50 +37279,58 @@ "has-symbols": "^1.0.3" } }, - "get-mongodb-version": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-mongodb-version/-/get-mongodb-version-2.0.1.tgz", - "integrity": "sha512-yTN0UY7VJSSt01QH/aCiqiBjfxcDrEdKeM3uXY6QR3sRARoftx36QT0YNsCQm7FDTgrmDje7bK2C9ClM7SGKDA==", - "dev": true, - "requires": { - "lodash.startswith": "^4.2.1", - "minimist": "^1.1.1", - "mongodb": "*", - "which": "^1.1.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "requires": { - "npm-conf": "^1.1.0" - } - }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "get-uri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", + "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "dev": true, + "requires": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^5.0.1", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -36692,42 +37623,6 @@ "get-intrinsic": "^1.1.3" } }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - } - } - }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -36740,6 +37635,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", @@ -37443,6 +38344,23 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -37467,27 +38385,12 @@ "get-intrinsic": "^1.1.1" } }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", @@ -37640,20 +38543,6 @@ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -37727,12 +38616,9 @@ } }, "idb-keyval": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", - "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", - "requires": { - "safari-14-idb-fix": "^3.0.0" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" }, "ieee754": { "version": "1.2.1", @@ -38107,33 +38993,6 @@ "is-extglob": "^2.1.1" } }, - "is-mongodb-running": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-mongodb-running/-/is-mongodb-running-1.0.2.tgz", - "integrity": "sha512-EslN8MErcBPExb+iK4RnG1n28JGjByA2Rm3YPmdHDGCRd7Hc2uvqshyVMAJXxbDSxRMy8vhxims2oRqQUeGJeA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "debug": ">= 2.6.9", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "lsof": "^0.1.0", - "minimist": "^1.2.0", - "node-netstat": "^1.4.2", - "ps-node": "^0.1.6" - }, - "dependencies": { - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - } - } - }, "is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -38158,12 +39017,6 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -38221,12 +39074,6 @@ "is-unc-path": "^1.0.0" } }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -38288,12 +39135,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -38415,36 +39256,69 @@ "istanbul-lib-report": "^3.0.0" } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, "iterall": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", "dev": true }, + "jackspeak": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", + "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jasmine": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.6.0.tgz", - "integrity": "sha512-iq7HQ5M8ydNUspjd9vbFW9Lu+6lQ1QLDIqjl0WysEllF5EJZy8XaUyNlhCJVwOx2YFzqTtARWbS56F/f0PzRFw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.0.0.tgz", + "integrity": "sha512-wrigegsVTke3gt65LmLhIVqDZVcsYZwj9Oyai0pc04NlmgxIhfgbX0Af9CC3+S9lk0KZlttqjr2EBO8j2OCovA==", "dev": true, "requires": { - "glob": "^7.1.6", - "jasmine-core": "^4.6.0" + "glob": "^10.2.2", + "jasmine-core": "~5.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.4.tgz", + "integrity": "sha512-fDboBse/sl1oXSLhIp0FcCJgzW9KmhC/q8ULTKC82zc+DL3TL7FNb8qlt5qqXN53MsKEUSIcb+7DLmEygOE5Yw==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0 || ^6.0.0", + "path-scurry": "^1.7.0" + } + }, + "minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "jasmine-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", - "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.0.0.tgz", + "integrity": "sha512-BJLxZlSVyWPN/oyaS1IIvIjChghI9/xWsLAIJqL9J5Fz47CN3JNr8Lmik3S2S7QS2RxclYjvSVSXP7IR35PAmg==", "dev": true }, "jasmine-reporters": { @@ -38455,14 +39329,6 @@ "requires": { "@xmldom/xmldom": "^0.8.5", "mkdirp": "^1.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "jasmine-spec-reporter": { @@ -39840,12 +40706,6 @@ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -40008,6 +40868,15 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "dev": true, + "requires": { + "jsonify": "^0.0.1" + } + }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -40036,6 +40905,12 @@ "universalify": "^2.0.0" } }, + "jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true + }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -40123,12 +40998,6 @@ "safe-buffer": "^5.0.1" } }, - "key-tree-store": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", - "integrity": "sha512-qXk+lR+LXvGos3wqMxIMWweKDgCx8ZKWM6BEPm7iZkOKug5ggi66vUt+3vbtKJLBrAyOxQ4S8JRwK++Q4XZRmw==", - "dev": true - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -40541,18 +41410,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", - "dev": true - }, "lodash.capitalize": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", @@ -40571,42 +41428,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true - }, "lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", "dev": true }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", - "dev": true - }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -40649,12 +41476,6 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -40673,54 +41494,6 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, - "lodash.pad": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", - "dev": true - }, - "lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", - "dev": true - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", - "dev": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", - "dev": true - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", - "dev": true - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", - "dev": true - }, - "lodash.startswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==", - "dev": true - }, "lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", @@ -40804,12 +41577,6 @@ "triple-beam": "^1.3.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -40856,12 +41623,6 @@ "es5-ext": "~0.10.2" } }, - "lsof": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lsof/-/lsof-0.1.0.tgz", - "integrity": "sha512-RlNW3s4gQ0CIlDM3jwfx/Ogdwpa8PHySyd5FnKKXfi2NPXEjqgwONyA0y9ax33ur1G+K+f192zzKNQljupSgNA==", - "dev": true - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -41229,9 +41990,9 @@ "dev": true }, "metro-react-native-babel-preset": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.3.tgz", - "integrity": "sha512-3DyE0aP/k8OdIcA0Dy0MQwx6EiXaTLq5YPy4Z38lwOFxD9ZRm2rwnaNXNczsYisJqeq1vcEJpfMnjS26Kqq97g==", + "version": "0.76.4", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.4.tgz", + "integrity": "sha512-BKyfPz7mn3ncgRjqi8Z9nYLbzuuiBWns2AAEIGctQdz9OMMAisPlZmWscv09UjhPXkQc/XtToFETVN7fmHMfug==", "dev": true, "requires": { "@babel/core": "^7.20.0", @@ -41330,12 +42091,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -41380,6 +42135,33 @@ "kind-of": "^6.0.3" } }, + "minipass": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.0.tgz", + "integrity": "sha512-mvD5U4pUen1aWcjTxUgdoMg6PB98dcV0obc/OiPzls79++IpgNoO+MCbOHRlKfWIOvjIjmjUygjZmSStP7B0Og==", + "dev": true + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "mitt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", @@ -41417,13 +42199,10 @@ } }, "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "mkdirp-classic": { "version": "0.5.3", @@ -41484,446 +42263,164 @@ "safe-buffer": "~5.1.0" } }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true - }, - "mongodb": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.10.0.tgz", - "integrity": "sha512-My2QxLTw0Cc1O9gih0mz4mqo145Jq4rLAQx0Glk/Ha9iYBzYpt4I2QFNRIh35uNFNfe8KFQcdwY1/HKxXBkinw==", - "dev": true, - "requires": { - "bson": "^4.7.0", - "denque": "^2.1.0", - "mongodb-connection-string-url": "^2.5.3", - "saslprep": "^1.0.3", - "socks": "^2.7.0" - } - }, - "mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", - "dev": true, - "requires": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" - }, - "dependencies": { - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } - } - }, - "mongodb-core": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz", - "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==", - "dev": true, - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - }, - "dependencies": { - "bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "dev": true - } - } - }, - "mongodb-dbpath": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/mongodb-dbpath/-/mongodb-dbpath-0.0.1.tgz", - "integrity": "sha512-JljM2Gci3LQgECY4Wnp8tRx6eDNSoTnqiz4TIaOfqLuPr3SAbSdZEAQomHniH8DQJpn97gxdYkW/XomxYPZM2w==", - "dev": true, - "requires": { - "async": "^1.4.0", - "debug": "^2.1.1", - "minimist": "^1.1.1", - "mkdirp": "^0.5.1", - "untildify": "^1.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "untildify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-1.0.0.tgz", - "integrity": "sha512-LSU5BVpAncfzB2UBQaqfNww36wRSehWHs2grMM0ueYctZYxAhntiMvqDBhezYCYvbLeejeZ1nUWSl3mmkdPp+g==", - "dev": true, - "requires": { - "user-home": "^1.0.0" - } - } - } - }, - "mongodb-download-url": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", - "integrity": "sha512-N7mRi3/LIAHCeTa+JtJVrVno4BNHVYF+6/WUamVFsbvCxtljDmQA1n9FSQxV4dfdiknR9zaoFcXAmd1gtg3Elg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "minimist": "^1.2.3", - "node-fetch": "^2.6.1", - "semver": "^7.1.1" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "mongodb-runner": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.10.0.tgz", - "integrity": "sha512-6hE4nA4+LMBPwLMXr/jQNRNtUdQgfmZOJE/4u5JX952hdUa0lPc+26Y45PdgbdMbfCYUfZK1cOBObZOBmTdQ6Q==", - "dev": true, - "requires": { - "async": "^3.1.0", - "clui": "^0.3.6", - "debug": "^4.1.1", - "fs-extra": "^8.1.0", - "is-mongodb-running": "^1.0.1", - "lodash.defaults": "^4.2.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "mongodb": "^3.4.0", - "mongodb-dbpath": "^0.0.1", - "mongodb-tools": "github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "mongodb-version-manager": "^1.5.0", - "untildify": "^4.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "dev": true - }, - "denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "mongodb": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", - "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", - "dev": true, - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.1.8", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } } } }, - "mongodb-tools": { - "version": "git+ssh://git@github.com/mongodb-js/mongodb-tools.git#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "integrity": "sha512-DNJJQYg1/VcE4gNP7zpKeWGIezwcpkI8XzG4YFL3WybY6cuKWMz3d1CIp3uKKEpva1qOHk2LI8mKWJX1Vpw4Sg==", + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true + }, + "mongodb": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.10.0.tgz", + "integrity": "sha512-My2QxLTw0Cc1O9gih0mz4mqo145Jq4rLAQx0Glk/Ha9iYBzYpt4I2QFNRIh35uNFNfe8KFQcdwY1/HKxXBkinw==", "dev": true, - "from": "mongodb-tools@github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", "requires": { - "debug": "^2.2.0", - "lodash": "^4.17.12", - "mkdirp": "0.5.0", - "mongodb-core": "*", - "rimraf": "2.2.6" + "bson": "^4.7.0", + "denque": "^2.1.0", + "mongodb-connection-string-url": "^2.5.3", + "saslprep": "^1.0.3", + "socks": "^2.7.0" + } + }, + "mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dev": true, + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "requires": { - "ms": "2.0.0" + "punycode": "^2.1.1" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha512-xjjNGy+ry1lhtIKcr2PT6ok3aszhQfgrUDp4OZLHacgRgFmF6XR9XCOJVcXlVGQonIqXcK1DvqgKKQOPWYGSfw==", + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "requires": { - "minimist": "0.0.8" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "rimraf": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz", - "integrity": "sha512-33Fa/MIw/3F9KcDE/uJ2OuYUyxY+fkmw1c20DFnyhP7dfo2+BexeE1thjluPiJaG8sW6CcaqnTffwpRd4NAiTg==", - "dev": true } } }, - "mongodb-version-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mongodb-version-list/-/mongodb-version-list-1.0.0.tgz", - "integrity": "sha512-F3kIABEMNjg3ZAX4SRbO1QPmhpP4NX2IgJq+lcUKidducTOVJafXJ+E+pMkgpU0xumC8QYbIZJ+8y4GZys9E4g==", + "mongodb-download-url": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", + "integrity": "sha512-N7mRi3/LIAHCeTa+JtJVrVno4BNHVYF+6/WUamVFsbvCxtljDmQA1n9FSQxV4dfdiknR9zaoFcXAmd1gtg3Elg==", "dev": true, "requires": { - "cheerio": "^0.22.0", - "debug": "^2.2.0", - "downcache": "^0.0.9", - "fs-extra": "^1.0.0", - "minimist": "^1.1.1", - "semver": "^5.0.1" + "debug": "^4.1.1", + "minimist": "^1.2.3", + "node-fetch": "^2.6.1", + "semver": "^7.1.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { - "graceful-fs": "^4.1.9" + "lru-cache": "^6.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true } } }, - "mongodb-version-manager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.5.0.tgz", - "integrity": "sha512-VHijlQXvQFnX/9MzfGePyBNr9qHLHRHg6sM2ChFO+05Htf6JY50WzvDWZmtXUNGXEor80fXxhswwDJevGlZkyA==", + "mongodb-runner": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.4.3.tgz", + "integrity": "sha512-Pzd0+8aJtPiuHRwnk/6AToFDACPDdVKK6bpP0+Drbpu6cP9XLG31ZuziyLrqHNB5h7I9WlAoTt34zLt5LO8G7g==", "dev": true, "requires": { - "ampersand-state": "^5.0.3", - "async": "^3.1.0", - "chalk": "^2.1.0", - "debug": ">= 2.6.9 < 3.0.0 || >= ^3.1.0", - "docopt": "^0.6.2", - "download": "^6.2.5", - "figures": "^3.2.0", - "fs-extra": "^8.1.0", - "get-mongodb-version": "^2.0.1", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.1.1", - "mongodb-download-url": "^1.0.0", - "mongodb-version-list": "^1.0.0", - "semver": "^5.3.0", - "tildify": "^2.0.0", - "untildify": "^4.0.0" + "@mongodb-js/mongodb-downloader": "^0.2.8", + "debug": "^4.3.4", + "mongodb": "^5.6.0", + "mongodb-connection-string-url": "^2.6.0", + "yargs": "^17.7.2" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "bson": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", + "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" } }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "mongodb": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz", + "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==", "dev": true, "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "bson": "^5.4.0", + "mongodb-connection-string-url": "^2.6.0", + "saslprep": "^1.0.3", + "socks": "^2.7.1" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true } } @@ -41978,6 +42475,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -41996,6 +42499,12 @@ "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", "dev": true }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true + }, "next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", @@ -42018,9 +42527,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -42038,15 +42547,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node-netstat": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/node-netstat/-/node-netstat-1.8.0.tgz", - "integrity": "sha512-P1a5Sh9FfjTXxI6hC9q/Nqre8kT63FQxBCr1qz5ffk76EkQBH62+XEhIhlzfz6Bz+FRwOFqidW2FDGXnOXvyJQ==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, "node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", @@ -43889,14 +44389,26 @@ } } }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "npm-run-path": { @@ -43920,15 +44432,6 @@ "set-blocking": "~2.0.0" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -44121,15 +44624,6 @@ "mimic-fn": "^2.1.0" } }, - "optional-require": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", - "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", - "dev": true, - "requires": { - "require-at": "^1.0.6" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -44194,27 +44688,12 @@ "lcid": "^1.0.0" } }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, "p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, - "p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", - "dev": true, - "requires": { - "p-timeout": "^1.1.1" - } - }, "p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", @@ -44224,12 +44703,6 @@ "p-map": "^2.0.0" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, "p-is-promise": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", @@ -44276,21 +44749,77 @@ "retry": "^0.13.1" } }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "pac-proxy-agent": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", + "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", + "dev": true, + "requires": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "pac-resolver": "^6.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + }, + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "dev": true, + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + } + } + }, + "pac-resolver": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", + "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", + "dev": true, + "requires": { + "degenerator": "^4.0.1", + "ip": "^1.1.5", + "netmask": "^2.0.2" + }, + "dependencies": { + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + } + } + }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -44458,10 +44987,10 @@ "dev": true }, "parse-server": { - "version": "git+ssh://git@github.com/parse-community/parse-server.git#177891ea0eed54eff996d81749cfbfb32156ae87", - "integrity": "sha512-kC7Rpkau1wDpEMsBPgwwutvBju7NX8jdOp/X2/9AjWreagOt3vfznBDfrybtvNxp01xJ47pOuDGtV5UauIaExA==", + "version": "git+ssh://git@github.com/parse-community/parse-server.git#c78a5a6f10ce09032579fed8ef4cbd84c1ee96a9", + "integrity": "sha512-C6E8mkVW5IUtliqfH+StD0K6ycJJH7GVbmwj0zou9crKfKNP4iiLwBGklnMM9yBmfKpj2fMGztXFDju5HZ3irw==", "dev": true, - "from": "parse-server@git+https://github.com/parse-community/parse-server#177891ea0eed54eff996d81749cfbfb32156ae87", + "from": "parse-server@git+https://github.com/parse-community/parse-server#alpha", "requires": { "@babel/eslint-parser": "7.19.1", "@graphql-tools/merge": "8.3.6", @@ -44610,6 +45139,12 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, + "parsimmon": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.1.tgz", + "integrity": "sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -44673,6 +45208,24 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, + "path-scurry": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.1.tgz", + "integrity": "sha512-UgmoiySyjFxP6tscZDgWGEAgsW5ok8W3F5CJDnnH2pozwSTGE6eH7vwTotMwATWA2r5xqdkKdxYPkwlJjAI/3g==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", + "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==", + "dev": true + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -44985,12 +45538,6 @@ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true - }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -44998,9 +45545,9 @@ "dev": true }, "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", + "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", "dev": true }, "pretty-format": { @@ -45072,21 +45619,65 @@ "ipaddr.js": "1.9.1" } }, + "proxy-agent": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.0.tgz", + "integrity": "sha512-g3rBHXPhEa0Z1nxZkirj0+US1SCcA67SnjpxbdZf7BloLdULEUCzbQozsq+wFwhmMeZegeZISDZjPFN/Ct9DaQ==", + "dev": true, + "requires": { + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "http-proxy-agent": "^6.0.1", + "https-proxy-agent": "^6.1.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^6.0.2", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + }, + "http-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-6.1.1.tgz", + "integrity": "sha512-JRCz+4Whs6yrrIoIlrH+ZTmhrRwtMnmOHsHn8GFEn9O2sVfSE+DAZ3oyyGIKF8tjJEeSJmP89j7aTjVsSqsU0g==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-6.2.1.tgz", + "integrity": "sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==", + "dev": true, + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "ps-node": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ps-node/-/ps-node-0.1.6.tgz", - "integrity": "sha512-w7QJhUTbu70hpDso0YXDRNKCPNuchV8UTUZsAv0m7Qj5g85oHOJfr9drA1EjvK4nQK/bG8P97W4L6PJ3IQLoOA==", - "dev": true, - "requires": { - "table-parser": "^0.1.3" - } - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -45161,17 +45752,14 @@ "dev": true }, "puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.4.0.tgz", + "integrity": "sha512-0/lgDbbC2LX/vMQ6+cv/doQuguFAf4Ra52fyW5oBOpQd85SzPBtXg4yPk+VhUpgr+oaOVAIUkgvBs98E+8xhCw==", "dev": true, "requires": { - "@puppeteer/browsers": "0.5.0", + "@puppeteer/browsers": "1.4.0", "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" + "puppeteer-core": "20.4.0" }, "dependencies": { "argparse": { @@ -45204,21 +45792,16 @@ } }, "puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.4.0.tgz", + "integrity": "sha512-fcL2fYQLFZEuIIDbMhvf6WF5rAcKXetsrjOxu6Br6FEAet7kEtJlCcrKmnz3pfqkwAIlihjuzwT5ys7jMWEx8A==", "dev": true, "requires": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", + "@puppeteer/browsers": "1.4.0", + "chromium-bidi": "0.4.10", + "cross-fetch": "3.1.6", "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", + "devtools-protocol": "0.0.1120988", "ws": "8.13.0" } }, @@ -45674,7 +46257,8 @@ "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true }, "regenerator-transform": { "version": "0.15.1", @@ -45838,30 +46422,6 @@ } } }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "dev": true, - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - }, - "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha512-qpFcKaXsq8+oRoLilkwyc7zHGF5i9Q2/25NIgLQQ/+VVv9rU4qvr6nXVAw1DsnXJyQkZsR4Ytfbtg5ehfcUssQ==", - "dev": true - } - } - }, - "require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -46020,7 +46580,8 @@ "safari-14-idb-fix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", - "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" + "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==", + "dev": true }, "safe-buffer": { "version": "5.1.2", @@ -46429,6 +46990,12 @@ } } }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "dev": true + }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -46567,22 +47134,26 @@ "smart-buffer": "^4.2.0" } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "socks-proxy-agent": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", "dev": true, "requires": { - "sort-keys": "^1.0.0" + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + } } }, "source-map": { @@ -46738,6 +47309,26 @@ "tweetnacl": "~0.14.0" } }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -46994,6 +47585,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -47003,6 +47605,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -47060,15 +47671,6 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, "stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -47179,13 +47781,32 @@ "acorn-node": "^1.2.0" } }, - "table-parser": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/table-parser/-/table-parser-0.1.3.tgz", - "integrity": "sha512-LCYeuvqqoPII3lzzYaXKbC3Forb+d2u4bNwhk/9FlivuGRxPE28YEWAYcujeSlLLDlMfvy29+WPybFJZFiKMYg==", + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, "requires": { - "connected-domain": "^1.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + } } }, "tar-fs": { @@ -47368,24 +47989,12 @@ } } }, - "tildify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", - "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", - "dev": true - }, "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true - }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", @@ -47405,6 +48014,15 @@ "next-tick": "1" } }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -47536,9 +48154,9 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true } } @@ -47561,15 +48179,6 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -47582,6 +48191,76 @@ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, + "tslint": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", + "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -47652,6 +48331,13 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "peer": true + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -47854,12 +48540,6 @@ } } }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -47933,21 +48613,6 @@ "requires-port": "^1.0.0" } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true - }, "urlgrey": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz", @@ -47963,12 +48628,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ==", - "dev": true - }, "util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -48029,6 +48688,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, "value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", @@ -48286,6 +48954,30 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "vm2": { + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + } + } + }, "w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -48432,9 +49124,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true }, "wordwrap": { @@ -48480,6 +49172,43 @@ } } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index d6fe69319..7a1ab93af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "parse", - "version": "4.2.0", + "version": "4.2.0-alpha.10", "description": "Parse JavaScript SDK", "homepage": "https://parseplatform.org", "keywords": [ @@ -29,22 +29,24 @@ "react-native": false }, "dependencies": { - "@babel/runtime-corejs3": "7.21.0", - "idb-keyval": "6.2.0", + "@babel/runtime-corejs3": "7.22.11", + "idb-keyval": "6.2.1", "react-native-crypto-js": "1.0.0", "uuid": "9.0.0", "ws": "8.13.0", "xmlhttprequest": "1.8.0" }, "devDependencies": { - "@babel/core": "7.21.5", - "@babel/eslint-parser": "7.21.3", + "@babel/core": "7.22.0", + "@babel/eslint-parser": "7.21.8", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-transform-flow-comments": "7.21.0", + "@babel/plugin-transform-flow-comments": "7.22.5", "@babel/plugin-transform-flow-strip-types": "7.21.0", "@babel/plugin-transform-runtime": "7.21.4", - "@babel/preset-env": "7.21.4", - "@babel/preset-react": "7.18.6", + "@babel/preset-env": "7.21.5", + "@babel/preset-react": "7.22.5", + "@babel/preset-typescript": "7.22.5", + "@definitelytyped/dtslint": "0.0.163", "@parse/minami": "1.0.0", "@saithodev/semantic-release-backmerge": "2.1.3", "@semantic-release/changelog": "6.0.3", @@ -59,9 +61,9 @@ "babel-plugin-transform-inline-environment-variables": "0.4.4", "browserify": "17.0.0", "codecov": "3.8.3", - "core-js": "3.30.1", + "core-js": "3.30.2", "cross-env": "7.0.2", - "eslint": "8.39.0", + "eslint": "8.40.0", "eslint-plugin-flowtype": "8.0.3", "eslint-plugin-jsdoc": "43.0.7", "express": "4.18.2", @@ -73,7 +75,7 @@ "gulp-uglify": "3.0.2", "gulp-watch": "5.0.1", "husky": "8.0.3", - "jasmine": "4.6.0", + "jasmine": "5.0.0", "jasmine-reporters": "2.5.2", "jasmine-spec-reporter": "7.0.0", "jest": "29.5.0", @@ -81,11 +83,11 @@ "jsdoc": "4.0.2", "jsdoc-babel": "0.5.0", "lint-staged": "13.2.2", - "metro-react-native-babel-preset": "0.76.3", - "mongodb-runner": "4.10.0", + "metro-react-native-babel-preset": "0.76.4", + "mongodb-runner": "5.4.3", "parse-server": "git+https://github.com/parse-community/parse-server#alpha", - "prettier": "2.8.8", - "puppeteer": "19.11.1", + "prettier": "3.0.2", + "puppeteer": "20.4.0", "regenerator-runtime": "0.13.11", "semantic-release": "19.0.5", "vinyl-source-stream": "2.0.0" @@ -95,11 +97,13 @@ }, "scripts": { "build": "node build_releases.js", + "build:types": "tsc", "release": "node build_releases.js && npm publish", "test": "cross-env PARSE_BUILD=node jest", "test:mongodb": "npm run test:mongodb:runnerstart && npm run integration", - "test:mongodb:runnerstart": "mongodb-runner start", - "posttest:mongodb": "mongodb-runner stop", + "test:mongodb:runnerstart": "mongodb-runner start -- --port 27017", + "test:types": "dtslint --expectOnly types", + "posttest:mongodb": "mongodb-runner stop --all", "lint": "eslint --cache src/ integration/", "lint:fix": "eslint --fix --cache src/ integration/", "watch": "cross-env PARSE_BUILD=${PARSE_BUILD} gulp watch", diff --git a/src/Cloud.js b/src/Cloud.js index c42a0ba95..4bf748d3a 100644 --- a/src/Cloud.js +++ b/src/Cloud.js @@ -47,6 +47,9 @@ export function run(name: string, data: mixed, options: RequestOptions): Promise if (options.sessionToken) { requestOptions.sessionToken = options.sessionToken; } + if (options.installationId) { + requestOptions.installationId = options.installationId; + } if (options.context && typeof options.context === 'object') { requestOptions.context = options.context; } diff --git a/src/CoreManager.js b/src/CoreManager.js index a751dd468..60467e2a6 100644 --- a/src/CoreManager.js +++ b/src/CoreManager.js @@ -194,6 +194,7 @@ const config: Config & { [key: string]: mixed } = { ENCRYPTED_USER: false, IDEMPOTENCY: false, ALLOW_CUSTOM_OBJECT_ID: false, + PARSE_ERRORS: [], }; function requireMethods(name: string, methods: Array, controller: any) { @@ -204,7 +205,7 @@ function requireMethods(name: string, methods: Array, controller: any) { }); } -module.exports = { +const CoreManager = { get: function (key: string): any { if (config.hasOwnProperty(key)) { return config[key]; @@ -216,6 +217,13 @@ module.exports = { config[key] = value; }, + setIfNeeded: function (key: string, value: any): any { + if (!config.hasOwnProperty(key)) { + config[key] = value; + } + return config[key]; + }, + /* Specialized Controller Setters/Getters */ setAnalyticsController(controller: AnalyticsController) { @@ -254,6 +262,14 @@ module.exports = { return config['CryptoController']; }, + setEventEmitter(eventEmitter: any) { + config['EventEmitter'] = eventEmitter; + }, + + getEventEmitter(): any { + return config['EventEmitter']; + }, + setFileController(controller: FileController) { requireMethods('FileController', ['saveFile', 'saveBase64'], controller); config['FileController'] = controller; @@ -272,6 +288,14 @@ module.exports = { return config['InstallationController']; }, + setLiveQuery(liveQuery: any) { + config['LiveQuery'] = liveQuery; + }, + + getLiveQuery(): any { + return config['LiveQuery']; + }, + setObjectController(controller: ObjectController) { requireMethods('ObjectController', ['save', 'fetch', 'destroy'], controller); config['ObjectController'] = controller; @@ -468,3 +492,6 @@ module.exports = { return config['HooksController']; }, }; + +module.exports = CoreManager; +export default CoreManager; diff --git a/src/EventEmitter.js b/src/EventEmitter.js index 5365a6a14..1f1bcbd00 100644 --- a/src/EventEmitter.js +++ b/src/EventEmitter.js @@ -2,13 +2,19 @@ * This is a simple wrapper to unify EventEmitter implementations across platforms. */ -if (process.env.PARSE_BUILD === 'react-native') { - let EventEmitter = require('../../../react-native/Libraries/vendor/emitter/EventEmitter'); - if (EventEmitter.default) { - EventEmitter = EventEmitter.default; +let EventEmitter; + +try { + if (process.env.PARSE_BUILD === 'react-native') { + EventEmitter = require('react-native/Libraries/vendor/emitter/EventEmitter'); + if (EventEmitter.default) { + EventEmitter = EventEmitter.default; + } + EventEmitter.prototype.on = EventEmitter.prototype.addListener; + } else { + EventEmitter = require('events').EventEmitter; } - EventEmitter.prototype.on = EventEmitter.prototype.addListener; - module.exports = EventEmitter; -} else { - module.exports = require('events').EventEmitter; +} catch (_) { + // EventEmitter unavailable } +module.exports = EventEmitter; diff --git a/src/EventuallyQueue.js b/src/EventuallyQueue.js index 8925fda42..88df1d3bd 100644 --- a/src/EventuallyQueue.js +++ b/src/EventuallyQueue.js @@ -5,6 +5,7 @@ */ import CoreManager from './CoreManager'; +import ParseError from './ParseError'; import ParseObject from './ParseObject'; import ParseQuery from './ParseQuery'; import Storage from './Storage'; @@ -275,7 +276,7 @@ const EventuallyQueue = { await object.save(queueObject.object, queueObject.serverOptions); await this.remove(queueObject.queueId); } catch (e) { - if (e.message !== 'XMLHttpRequest failed: "Unable to connect to the Parse API"') { + if (e.code !== ParseError.CONNECTION_FAILED) { await this.remove(queueObject.queueId); } } @@ -285,7 +286,7 @@ const EventuallyQueue = { await object.destroy(queueObject.serverOptions); await this.remove(queueObject.queueId); } catch (e) { - if (e.message !== 'XMLHttpRequest failed: "Unable to connect to the Parse API"') { + if (e.code !== ParseError.CONNECTION_FAILED) { await this.remove(queueObject.queueId); } } @@ -373,3 +374,4 @@ const EventuallyQueue = { }; module.exports = EventuallyQueue; +export default EventuallyQueue; diff --git a/src/LiveQueryClient.js b/src/LiveQueryClient.js index 6baf67fb5..790624fbf 100644 --- a/src/LiveQueryClient.js +++ b/src/LiveQueryClient.js @@ -1,7 +1,6 @@ /* global WebSocket */ import CoreManager from './CoreManager'; -import EventEmitter from './EventEmitter'; import ParseObject from './ParseObject'; import LiveQuerySubscription from './LiveQuerySubscription'; import { resolvingPromise } from './promiseUtils'; @@ -63,7 +62,6 @@ const generateInterval = k => { /** * Creates a new LiveQueryClient. - * Extends events.EventEmitter * cloud functions. * * A wrapper of a standard WebSocket client. We add several useful methods to @@ -105,7 +103,7 @@ const generateInterval = k => { * * @alias Parse.LiveQueryClient */ -class LiveQueryClient extends EventEmitter { +class LiveQueryClient { attempts: number; id: number; requestId: number; @@ -138,8 +136,6 @@ class LiveQueryClient extends EventEmitter { sessionToken, installationId, }) { - super(); - if (!serverURL || serverURL.indexOf('ws') !== 0) { throw new Error( 'You need to set a proper Parse LiveQuery server url before using LiveQueryClient' @@ -160,7 +156,11 @@ class LiveQueryClient extends EventEmitter { this.connectPromise = resolvingPromise(); this.subscriptions = new Map(); this.state = CLIENT_STATE.INITIALIZED; + const EventEmitter = CoreManager.getEventEmitter(); + this.emitter = new EventEmitter(); + this.on = this.emitter.on; + this.emit = this.emitter.emit; // adding listener so process does not crash // best practice is for developer to register their own listener this.on('error', () => {}); diff --git a/src/LiveQuerySubscription.js b/src/LiveQuerySubscription.js index 503a07175..c70d234c1 100644 --- a/src/LiveQuerySubscription.js +++ b/src/LiveQuerySubscription.js @@ -1,10 +1,8 @@ -import EventEmitter from './EventEmitter'; import CoreManager from './CoreManager'; import { resolvingPromise } from './promiseUtils'; /** * Creates a new LiveQuery Subscription. - * Extends events.EventEmitter * cloud functions. * *

Response Object - Contains data from the client that made the request @@ -84,24 +82,25 @@ import { resolvingPromise } from './promiseUtils'; * subscription.on('close', () => { * * });

- * - * @alias Parse.LiveQuerySubscription */ -class Subscription extends EventEmitter { +class Subscription { /* * @param {string} id - subscription id * @param {string} query - query to subscribe to * @param {string} sessionToken - optional session token */ constructor(id, query, sessionToken) { - super(); this.id = id; this.query = query; this.sessionToken = sessionToken; this.subscribePromise = resolvingPromise(); this.unsubscribePromise = resolvingPromise(); this.subscribed = false; + const EventEmitter = CoreManager.getEventEmitter(); + this.emitter = new EventEmitter(); + this.on = this.emitter.on; + this.emit = this.emitter.emit; // adding listener so process does not crash // best practice is for developer to register their own listener this.on('error', () => {}); diff --git a/src/LocalDatastore.js b/src/LocalDatastore.js index 259e12d44..bf552d09d 100644 --- a/src/LocalDatastore.js +++ b/src/LocalDatastore.js @@ -392,6 +392,7 @@ const LocalDatastore = { }; module.exports = LocalDatastore; +export default LocalDatastore; if (process.env.PARSE_BUILD === 'react-native') { CoreManager.setLocalDatastoreController(require('./LocalDatastoreController.react-native')); diff --git a/src/ObjectStateMutations.js b/src/ObjectStateMutations.js index c70531a65..d594d5d70 100644 --- a/src/ObjectStateMutations.js +++ b/src/ObjectStateMutations.js @@ -150,7 +150,9 @@ export function estimateAttributes( function nestedSet(obj, key, value) { const path = key.split('.'); for (let i = 0; i < path.length - 1; i++) { - if (!(path[i] in obj)) obj[path[i]] = {}; + if (!(path[i] in obj)) { + obj[path[i]] = {}; + } obj = obj[path[i]]; } if (typeof value === 'undefined') { diff --git a/src/OfflineQuery.js b/src/OfflineQuery.js index aac8b15e2..efbc200c9 100644 --- a/src/OfflineQuery.js +++ b/src/OfflineQuery.js @@ -538,7 +538,7 @@ function matchesKeyConstraints(className, object, objects, key, constraints) { const distance = point.radiansTo(centerPoint); return distance <= maxDistance; } - break; + return false; } case '$geoIntersects': { const polygon = new ParsePolygon(object[key].coordinates); diff --git a/src/Parse.js b/src/Parse.js deleted file mode 100644 index 606ad731a..000000000 --- a/src/Parse.js +++ /dev/null @@ -1,343 +0,0 @@ -import decode from './decode'; -import encode from './encode'; -import CoreManager from './CoreManager'; -import CryptoController from './CryptoController'; -import EventuallyQueue from './EventuallyQueue'; -import InstallationController from './InstallationController'; -import * as ParseOp from './ParseOp'; -import RESTController from './RESTController'; - -/** - * Contains all Parse API classes and functions. - * - * @static - * @global - * @class - * @hideconstructor - */ -const Parse = { - /** - * Call this method first to set up your authentication tokens for Parse. - * - * @param {string} applicationId Your Parse Application ID. - * @param {string} [javaScriptKey] Your Parse JavaScript Key (Not needed for parse-server) - * @param {string} [masterKey] Your Parse Master Key. (Node.js only!) - * @static - */ - initialize(applicationId: string, javaScriptKey: string) { - if ( - process.env.PARSE_BUILD === 'browser' && - CoreManager.get('IS_NODE') && - !process.env.SERVER_RENDERING - ) { - /* eslint-disable no-console */ - console.log( - "It looks like you're using the browser version of the SDK in a " + - "node.js environment. You should require('parse/node') instead." - ); - /* eslint-enable no-console */ - } - Parse._initialize(applicationId, javaScriptKey); - }, - - _initialize(applicationId: string, javaScriptKey: string, masterKey: string) { - CoreManager.set('APPLICATION_ID', applicationId); - CoreManager.set('JAVASCRIPT_KEY', javaScriptKey); - CoreManager.set('MASTER_KEY', masterKey); - CoreManager.set('USE_MASTER_KEY', false); - }, - - /** - * Call this method to set your AsyncStorage engine - * Starting Parse@1.11, the ParseSDK do not provide a React AsyncStorage as the ReactNative module - * is not provided at a stable path and changes over versions. - * - * @param {AsyncStorage} storage a react native async storage. - * @static - */ - setAsyncStorage(storage: any) { - CoreManager.setAsyncStorage(storage); - }, - - /** - * Call this method to set your LocalDatastoreStorage engine - * If using React-Native use {@link Parse.setAsyncStorage Parse.setAsyncStorage()} - * - * @param {LocalDatastoreController} controller a data storage. - * @static - */ - setLocalDatastoreController(controller: any) { - CoreManager.setLocalDatastoreController(controller); - }, - - /** - * Returns information regarding the current server's health - * - * @returns {Promise} - * @static - */ - getServerHealth() { - return CoreManager.getRESTController().request('GET', 'health'); - }, - - /** - * @member {string} Parse.applicationId - * @static - */ - set applicationId(value) { - CoreManager.set('APPLICATION_ID', value); - }, - get applicationId() { - return CoreManager.get('APPLICATION_ID'); - }, - - /** - * @member {string} Parse.javaScriptKey - * @static - */ - set javaScriptKey(value) { - CoreManager.set('JAVASCRIPT_KEY', value); - }, - get javaScriptKey() { - return CoreManager.get('JAVASCRIPT_KEY'); - }, - - /** - * @member {string} Parse.masterKey - * @static - */ - set masterKey(value) { - CoreManager.set('MASTER_KEY', value); - }, - get masterKey() { - return CoreManager.get('MASTER_KEY'); - }, - - /** - * @member {string} Parse.serverURL - * @static - */ - set serverURL(value) { - CoreManager.set('SERVER_URL', value); - }, - get serverURL() { - return CoreManager.get('SERVER_URL'); - }, - - /** - * @member {string} Parse.serverAuthToken - * @static - */ - set serverAuthToken(value) { - CoreManager.set('SERVER_AUTH_TOKEN', value); - }, - get serverAuthToken() { - return CoreManager.get('SERVER_AUTH_TOKEN'); - }, - - /** - * @member {string} Parse.serverAuthType - * @static - */ - set serverAuthType(value) { - CoreManager.set('SERVER_AUTH_TYPE', value); - }, - get serverAuthType() { - return CoreManager.get('SERVER_AUTH_TYPE'); - }, - - /** - * @member {string} Parse.liveQueryServerURL - * @static - */ - set liveQueryServerURL(value) { - CoreManager.set('LIVEQUERY_SERVER_URL', value); - }, - get liveQueryServerURL() { - return CoreManager.get('LIVEQUERY_SERVER_URL'); - }, - - /** - * @member {string} Parse.encryptedUser - * @static - */ - set encryptedUser(value) { - CoreManager.set('ENCRYPTED_USER', value); - }, - get encryptedUser() { - return CoreManager.get('ENCRYPTED_USER'); - }, - - /** - * @member {string} Parse.secret - * @static - */ - set secret(value) { - CoreManager.set('ENCRYPTED_KEY', value); - }, - get secret() { - return CoreManager.get('ENCRYPTED_KEY'); - }, - - /** - * @member {boolean} Parse.idempotency - * @static - */ - set idempotency(value) { - CoreManager.set('IDEMPOTENCY', value); - }, - get idempotency() { - return CoreManager.get('IDEMPOTENCY'); - }, - - /** - * @member {boolean} Parse.allowCustomObjectId - * @static - */ - set allowCustomObjectId(value) { - CoreManager.set('ALLOW_CUSTOM_OBJECT_ID', value); - }, - get allowCustomObjectId() { - return CoreManager.get('ALLOW_CUSTOM_OBJECT_ID'); - }, -}; - -Parse.ACL = require('./ParseACL').default; -Parse.Analytics = require('./Analytics'); -Parse.AnonymousUtils = require('./AnonymousUtils').default; -Parse.Cloud = require('./Cloud'); -Parse.CLP = require('./ParseCLP').default; -Parse.CoreManager = require('./CoreManager'); -Parse.Config = require('./ParseConfig').default; -Parse.Error = require('./ParseError').default; -Parse.EventuallyQueue = EventuallyQueue; -Parse.FacebookUtils = require('./FacebookUtils').default; -Parse.File = require('./ParseFile').default; -Parse.GeoPoint = require('./ParseGeoPoint').default; -Parse.Polygon = require('./ParsePolygon').default; -Parse.Installation = require('./ParseInstallation').default; -Parse.LocalDatastore = require('./LocalDatastore'); -Parse.Object = require('./ParseObject').default; -Parse.Op = { - Set: ParseOp.SetOp, - Unset: ParseOp.UnsetOp, - Increment: ParseOp.IncrementOp, - Add: ParseOp.AddOp, - Remove: ParseOp.RemoveOp, - AddUnique: ParseOp.AddUniqueOp, - Relation: ParseOp.RelationOp, -}; -Parse.Push = require('./Push'); -Parse.Query = require('./ParseQuery').default; -Parse.Relation = require('./ParseRelation').default; -Parse.Role = require('./ParseRole').default; -Parse.Schema = require('./ParseSchema').default; -Parse.Session = require('./ParseSession').default; -Parse.Storage = require('./Storage'); -Parse.User = require('./ParseUser').default; -Parse.LiveQuery = require('./ParseLiveQuery').default; -Parse.LiveQueryClient = require('./LiveQueryClient').default; -if (process.env.PARSE_BUILD === 'browser') { - Parse.IndexedDB = require('./IndexedDBStorageController'); -} -Parse._request = function (...args) { - return CoreManager.getRESTController().request.apply(null, args); -}; -Parse._ajax = function (...args) { - return CoreManager.getRESTController().ajax.apply(null, args); -}; -// We attempt to match the signatures of the legacy versions of these methods -Parse._decode = function (_, value) { - return decode(value); -}; -Parse._encode = function (value, _, disallowObjects) { - return encode(value, disallowObjects); -}; -Parse._getInstallationId = function () { - return CoreManager.getInstallationController().currentInstallationId(); -}; -/** - * Enable pinning in your application. - * This must be called after `Parse.initialize` in your application. - * - * @param [polling] Allow pinging the server /health endpoint. Default true - * @param [ms] Milliseconds to ping the server. Default 2000ms - * @static - */ -Parse.enableLocalDatastore = function (polling = true, ms: number = 2000) { - if (!Parse.applicationId) { - console.log("'enableLocalDataStore' must be called after 'initialize'"); - return; - } - if (!Parse.LocalDatastore.isEnabled) { - Parse.LocalDatastore.isEnabled = true; - if (polling) { - EventuallyQueue.poll(ms); - } - } -}; -/** - * Flag that indicates whether Local Datastore is enabled. - * - * @static - * @returns {boolean} - */ -Parse.isLocalDatastoreEnabled = function () { - return Parse.LocalDatastore.isEnabled; -}; -/** - * Gets all contents from Local Datastore - * - *
- * await Parse.dumpLocalDatastore();
- * 
- * - * @static - * @returns {object} - */ -Parse.dumpLocalDatastore = function () { - if (!Parse.LocalDatastore.isEnabled) { - console.log('Parse.enableLocalDatastore() must be called first'); // eslint-disable-line no-console - return Promise.resolve({}); - } else { - return Parse.LocalDatastore._getAllContents(); - } -}; - -/** - * Enable the current user encryption. - * This must be called before login any user. - * - * @static - */ -Parse.enableEncryptedUser = function () { - Parse.encryptedUser = true; -}; - -/** - * Flag that indicates whether Encrypted User is enabled. - * - * @static - * @returns {boolean} - */ -Parse.isEncryptedUserEnabled = function () { - return Parse.encryptedUser; -}; - -CoreManager.setCryptoController(CryptoController); -CoreManager.setInstallationController(InstallationController); -CoreManager.setRESTController(RESTController); - -if (process.env.PARSE_BUILD === 'node') { - Parse.initialize = Parse._initialize; - Parse.Cloud = Parse.Cloud || {}; - Parse.Cloud.useMasterKey = function () { - CoreManager.set('USE_MASTER_KEY', true); - }; - Parse.Hooks = require('./ParseHooks'); -} - -// For legacy requires, of the form `var Parse = require('parse').Parse` -Parse.Parse = Parse; - -module.exports = Parse; diff --git a/src/Parse.ts b/src/Parse.ts new file mode 100644 index 000000000..b6876a861 --- /dev/null +++ b/src/Parse.ts @@ -0,0 +1,452 @@ +import decode from './decode'; +import encode from './encode'; +import CryptoController from './CryptoController'; +import EventuallyQueue from './EventuallyQueue'; +import InstallationController from './InstallationController'; +import * as ParseOp from './ParseOp'; +import RESTController from './RESTController'; +import ACL from './ParseACL'; +import * as Analytics from './Analytics' +import AnonymousUtils from './AnonymousUtils' +import * as Cloud from './Cloud'; +import CLP from './ParseCLP'; +import CoreManager from './CoreManager'; +import EventEmitter from './EventEmitter'; +import Config from './ParseConfig' +import ParseError from './ParseError' +import FacebookUtils from './FacebookUtils' +import File from './ParseFile' +import GeoPoint from './ParseGeoPoint' +import Polygon from './ParsePolygon' +import Installation from './ParseInstallation' +import LocalDatastore from './LocalDatastore' +import Object from './ParseObject' +import * as Push from './Push' +import Query from './ParseQuery' +import Relation from './ParseRelation' +import Role from './ParseRole' +import Schema from './ParseSchema' +import Session from './ParseSession' +import Storage from './Storage' +import User from './ParseUser' +import LiveQuery from './ParseLiveQuery' +import LiveQueryClient from './LiveQueryClient' + +/** + * Contains all Parse API classes and functions. + * + * @static + * @global + * @class + * @hideconstructor +*/ + +interface ParseType { + ACL: typeof ACL, + Parse?: ParseType, + Analytics: typeof Analytics, + AnonymousUtils: typeof AnonymousUtils, + Cloud: typeof Cloud, + CLP: typeof CLP, + CoreManager: typeof CoreManager, + Config: typeof Config, + Error: typeof ParseError, + EventuallyQueue: typeof EventuallyQueue, + FacebookUtils: typeof FacebookUtils, + File: typeof File, + GeoPoint: typeof GeoPoint, + Hooks?: any, + Polygon: typeof Polygon, + Installation: typeof Installation, + LocalDatastore: typeof LocalDatastore, + Object: typeof Object, + Op: { + Set: typeof ParseOp.SetOp, + Unset: typeof ParseOp.UnsetOp, + Increment: typeof ParseOp.IncrementOp, + Add: typeof ParseOp.AddOp, + Remove: typeof ParseOp.RemoveOp, + AddUnique: typeof ParseOp.AddUniqueOp, + Relation: typeof ParseOp.RelationOp, + }; + Push: typeof Push, + Query: typeof Query, + Relation: typeof Relation, + Role: typeof Role, + Schema: typeof Schema, + Session: typeof Session, + Storage: typeof Storage, + User: typeof User, + LiveQuery?: typeof LiveQuery, + LiveQueryClient: typeof LiveQueryClient, + + initialize(applicationId: string, javaScriptKey: string): void, + _initialize(applicationId: string, javaScriptKey: string, masterKey?: string): void, + setAsyncStorage(storage: any): void, + setLocalDatastoreController(controller: any): void, + getServerHealth(): Promise + + applicationId: string, + javaScriptKey: string, + masterKey: string, + serverURL: string, + serverAuthToken: string, + serverAuthType: string, + liveQueryServerURL: string, + encryptedUser: boolean, + secret: string, + idempotency: boolean, + allowCustomObjectId: boolean, + IndexedDB?: any, + _request(...args: any[]): void, + _ajax(...args: any[]): void, + _decode(...args: any[]): void, + _encode(...args: any[]): void, + _getInstallationId?(): string, + enableLocalDatastore(polling: boolean, ms: number): void, + isLocalDatastoreEnabled(): boolean, + dumpLocalDatastore(): void, + enableEncryptedUser(): void, + isEncryptedUserEnabled(): void, +} + +const Parse: ParseType = { + ACL: ACL, + Analytics: Analytics, + AnonymousUtils: AnonymousUtils, + Cloud: Cloud, + CLP: CLP, + CoreManager: CoreManager, + Config: Config, + Error: ParseError, + EventuallyQueue: EventuallyQueue, + FacebookUtils: FacebookUtils, + File: File, + GeoPoint: GeoPoint, + Polygon: Polygon, + Installation: Installation, + LocalDatastore: LocalDatastore, + Object: Object, + Op: { + Set: ParseOp.SetOp, + Unset: ParseOp.UnsetOp, + Increment: ParseOp.IncrementOp, + Add: ParseOp.AddOp, + Remove: ParseOp.RemoveOp, + AddUnique: ParseOp.AddUniqueOp, + Relation: ParseOp.RelationOp, + }, + Push: Push, + Query: Query, + Relation: Relation, + Role: Role, + Schema: Schema, + Session: Session, + Storage: Storage, + User: User, + LiveQueryClient: LiveQueryClient, + LiveQuery: undefined, + IndexedDB: undefined, + Hooks: undefined, + Parse: undefined, + + /** + * Call this method first to set up your authentication tokens for Parse. + * + * @param {string} applicationId Your Parse Application ID. + * @param {string} [javaScriptKey] Your Parse JavaScript Key (Not needed for parse-server) + * @param {string} [masterKey] Your Parse Master Key. (Node.js only!) + * @static + */ + initialize(applicationId: string, javaScriptKey: string) { + if ( + process.env.PARSE_BUILD === 'browser' && + CoreManager.get('IS_NODE') && + !process.env.SERVER_RENDERING + ) { + /* eslint-disable no-console */ + console.log( + "It looks like you're using the browser version of the SDK in a " + + "node.js environment. You should require('parse/node') instead." + ); + /* eslint-enable no-console */ + } + Parse._initialize(applicationId, javaScriptKey); + }, + + _initialize(applicationId: string, javaScriptKey: string, masterKey?: string) { + CoreManager.set('APPLICATION_ID', applicationId); + CoreManager.set('JAVASCRIPT_KEY', javaScriptKey); + CoreManager.set('MASTER_KEY', masterKey); + CoreManager.set('USE_MASTER_KEY', false); + CoreManager.setIfNeeded('EventEmitter', EventEmitter); + + Parse.LiveQuery = new LiveQuery(); + CoreManager.setIfNeeded('LiveQuery', Parse.LiveQuery); + }, + + /** + * Call this method to set your AsyncStorage engine + * Starting Parse@1.11, the ParseSDK do not provide a React AsyncStorage as the ReactNative module + * is not provided at a stable path and changes over versions. + * + * @param {AsyncStorage} storage a react native async storage. + * @static + */ + setAsyncStorage(storage: any) { + CoreManager.setAsyncStorage(storage); + }, + + /** + * Call this method to set your LocalDatastoreStorage engine + * If using React-Native use {@link Parse.setAsyncStorage Parse.setAsyncStorage()} + * + * @param {LocalDatastoreController} controller a data storage. + * @static + */ + setLocalDatastoreController(controller: any) { + CoreManager.setLocalDatastoreController(controller); + }, + + /** + * Returns information regarding the current server's health + * + * @returns {Promise} + * @static + */ + getServerHealth() { + return CoreManager.getRESTController().request('GET', 'health'); + }, + + /** + * @member {string} Parse.applicationId + * @static + */ + set applicationId(value) { + CoreManager.set('APPLICATION_ID', value); + }, + get applicationId() { + return CoreManager.get('APPLICATION_ID'); + }, + + /** + * @member {string} Parse.javaScriptKey + * @static + */ + set javaScriptKey(value) { + CoreManager.set('JAVASCRIPT_KEY', value); + }, + get javaScriptKey() { + return CoreManager.get('JAVASCRIPT_KEY'); + }, + + /** + * @member {string} Parse.masterKey + * @static + */ + set masterKey(value) { + CoreManager.set('MASTER_KEY', value); + }, + get masterKey() { + return CoreManager.get('MASTER_KEY'); + }, + + /** + * @member {string} Parse.serverURL + * @static + */ + set serverURL(value) { + CoreManager.set('SERVER_URL', value); + }, + get serverURL() { + return CoreManager.get('SERVER_URL'); + }, + + /** + * @member {string} Parse.serverAuthToken + * @static + */ + set serverAuthToken(value) { + CoreManager.set('SERVER_AUTH_TOKEN', value); + }, + get serverAuthToken() { + return CoreManager.get('SERVER_AUTH_TOKEN'); + }, + + /** + * @member {string} Parse.serverAuthType + * @static + */ + set serverAuthType(value) { + CoreManager.set('SERVER_AUTH_TYPE', value); + }, + get serverAuthType() { + return CoreManager.get('SERVER_AUTH_TYPE'); + }, + + /** + * @member {string} Parse.liveQueryServerURL + * @static + */ + set liveQueryServerURL(value) { + CoreManager.set('LIVEQUERY_SERVER_URL', value); + }, + get liveQueryServerURL() { + return CoreManager.get('LIVEQUERY_SERVER_URL'); + }, + + /** + * @member {boolean} Parse.encryptedUser + * @static + */ + set encryptedUser(value: boolean) { + CoreManager.set('ENCRYPTED_USER', value); + }, + get encryptedUser() { + return CoreManager.get('ENCRYPTED_USER'); + }, + + /** + * @member {string} Parse.secret + * @static + */ + set secret(value) { + CoreManager.set('ENCRYPTED_KEY', value); + }, + get secret() { + return CoreManager.get('ENCRYPTED_KEY'); + }, + + /** + * @member {boolean} Parse.idempotency + * @static + */ + set idempotency(value) { + CoreManager.set('IDEMPOTENCY', value); + }, + get idempotency() { + return CoreManager.get('IDEMPOTENCY'); + }, + + /** + * @member {boolean} Parse.allowCustomObjectId + * @static + */ + set allowCustomObjectId(value) { + CoreManager.set('ALLOW_CUSTOM_OBJECT_ID', value); + }, + get allowCustomObjectId() { + return CoreManager.get('ALLOW_CUSTOM_OBJECT_ID'); + }, + + _request(...args) { + return CoreManager.getRESTController().request.apply(null, args); + }, + + _ajax(...args) { + return CoreManager.getRESTController().ajax.apply(null, args); + }, + + // We attempt to match the signatures of the legacy versions of these methods + _decode(_, value) { + return decode(value); + }, + + _encode(value, _, disallowObjects) { + return encode(value, disallowObjects); + }, + + _getInstallationId () { + return CoreManager.getInstallationController().currentInstallationId(); + }, + /** + * Enable pinning in your application. + * This must be called after `Parse.initialize` in your application. + * + * @param [polling] Allow pinging the server /health endpoint. Default true + * @param [ms] Milliseconds to ping the server. Default 2000ms + * @static + */ + enableLocalDatastore(polling = true, ms: number = 2000) { + if (!this.applicationId) { + console.log("'enableLocalDataStore' must be called after 'initialize'"); + return; + } + if (!this.LocalDatastore.isEnabled) { + this.LocalDatastore.isEnabled = true; + if (polling) { + EventuallyQueue.poll(ms); + } + } + }, + /** + * Flag that indicates whether Local Datastore is enabled. + * + * @static + * @returns {boolean} + */ + isLocalDatastoreEnabled () { + return this.LocalDatastore.isEnabled; + }, + /** + * Gets all contents from Local Datastore + * + *
+   * await Parse.dumpLocalDatastore();
+   * 
+ * + * @static + * @returns {object} + */ + dumpLocalDatastore() { + if (!this.LocalDatastore.isEnabled) { + console.log('Parse.enableLocalDatastore() must be called first'); // eslint-disable-line no-console + return Promise.resolve({}); + } else { + return Parse.LocalDatastore._getAllContents(); + } + }, + + /** + * Enable the current user encryption. + * This must be called before login any user. + * + * @static + */ + enableEncryptedUser () { + this.encryptedUser = true; + }, + + /** + * Flag that indicates whether Encrypted User is enabled. + * + * @static + * @returns {boolean} + */ + isEncryptedUserEnabled () { + return this.encryptedUser; + }, +}; + +if (process.env.PARSE_BUILD === 'browser') { + Parse.IndexedDB = require('./IndexedDBStorageController'); +} + +CoreManager.setCryptoController(CryptoController); +CoreManager.setInstallationController(InstallationController); +CoreManager.setRESTController(RESTController); + +if (process.env.PARSE_BUILD === 'node') { + Parse.initialize = Parse._initialize; + Parse.Cloud = Parse.Cloud || {}; + Parse.Cloud.useMasterKey = function () { + CoreManager.set('USE_MASTER_KEY', true); + }; + Parse.Hooks = require('./ParseHooks'); +} + +// For legacy requires, of the form `var Parse = require('parse').Parse` +Parse.Parse = Parse; + +module.exports = Parse; +export default Parse; diff --git a/src/ParseError.js b/src/ParseError.js index 6383a5fb2..68c97501e 100644 --- a/src/ParseError.js +++ b/src/ParseError.js @@ -1,6 +1,10 @@ +import CoreManager from './CoreManager'; + /** * Constructs a new Parse.Error object with the given code and message. * + * Parse.CoreManager.set('PARSE_ERRORS', [{ code, message }]) can be use to override error messages. + * * @alias Parse.Error */ class ParseError extends Error { @@ -11,9 +15,15 @@ class ParseError extends Error { constructor(code, message) { super(message); this.code = code; + let customMessage = message; + CoreManager.get('PARSE_ERRORS').forEach((error) => { + if (error.code === code && error.code) { + customMessage = error.message; + } + }); Object.defineProperty(this, 'message', { enumerable: true, - value: message, + value: customMessage, }); } diff --git a/src/ParseLiveQuery.js b/src/ParseLiveQuery.js index 2a0aa7e69..eea9e59e2 100644 --- a/src/ParseLiveQuery.js +++ b/src/ParseLiveQuery.js @@ -1,12 +1,10 @@ /** * @flow */ - -import EventEmitter from './EventEmitter'; import LiveQueryClient from './LiveQueryClient'; import CoreManager from './CoreManager'; -function getLiveQueryClient(): LiveQueryClient { +function getLiveQueryClient(): Promise { return CoreManager.getLiveQueryController().getDefaultLiveQueryClient(); } @@ -37,31 +35,39 @@ function getLiveQueryClient(): LiveQueryClient { * @class Parse.LiveQuery * @static */ -const LiveQuery = new EventEmitter(); +class LiveQuery { + constructor() { + const EventEmitter = CoreManager.getEventEmitter(); + this.emitter = new EventEmitter(); + this.on = this.emitter.on; + this.emit = this.emitter.emit; -/** - * After open is called, the LiveQuery will try to send a connect request - * to the LiveQuery server. - */ -LiveQuery.open = async () => { - const liveQueryClient = await getLiveQueryClient(); - liveQueryClient.open(); -}; + // adding listener so process does not crash + // best practice is for developer to register their own listener + this.on('error', () => {}); + } -/** - * When you're done using LiveQuery, you can call Parse.LiveQuery.close(). - * This function will close the WebSocket connection to the LiveQuery server, - * cancel the auto reconnect, and unsubscribe all subscriptions based on it. - * If you call query.subscribe() after this, we'll create a new WebSocket - * connection to the LiveQuery server. - */ -LiveQuery.close = async () => { - const liveQueryClient = await getLiveQueryClient(); - liveQueryClient.close(); -}; + /** + * After open is called, the LiveQuery will try to send a connect request + * to the LiveQuery server. + */ + async open(): void { + const liveQueryClient = await getLiveQueryClient(); + liveQueryClient.open(); + } -// Register a default onError callback to make sure we do not crash on error -LiveQuery.on('error', () => {}); + /** + * When you're done using LiveQuery, you can call Parse.LiveQuery.close(). + * This function will close the WebSocket connection to the LiveQuery server, + * cancel the auto reconnect, and unsubscribe all subscriptions based on it. + * If you call query.subscribe() after this, we'll create a new WebSocket + * connection to the LiveQuery server. + */ + async close(): void { + const liveQueryClient = await getLiveQueryClient(); + liveQueryClient.close(); + } +} export default LiveQuery; @@ -110,6 +116,8 @@ const DefaultLiveQueryController = { sessionToken, installationId, }); + const LiveQuery = CoreManager.getLiveQuery(); + defaultLiveQueryClient.on('error', error => { LiveQuery.emit('error', error); }); diff --git a/src/ParseObject.js b/src/ParseObject.js index 2ce00599b..94c30b9c1 100644 --- a/src/ParseObject.js +++ b/src/ParseObject.js @@ -1057,7 +1057,7 @@ class ParseObject { /** * Returns the ACL for this object. * - * @returns {Parse.ACL} An instance of Parse.ACL. + * @returns {Parse.ACL|null} An instance of Parse.ACL. * @see Parse.Object#get */ getACL(): ?ParseACL { diff --git a/src/ParseQuery.js b/src/ParseQuery.js index f2e18b4d0..9be6b37a9 100644 --- a/src/ParseQuery.js +++ b/src/ParseQuery.js @@ -948,13 +948,10 @@ class ParseQuery { const query = new ParseQuery(this.className); query._limit = options.batchSize || 100; - query._include = this._include.map(i => { - return i; - }); + query._include = [...this._include]; + query._exclude = [...this._exclude]; if (this._select) { - query._select = this._select.map(s => { - return s; - }); + query._select = [...this._select]; } query._hint = this._hint; query._where = {}; diff --git a/src/ParseSchema.js b/src/ParseSchema.js index c9069d109..089cddd32 100644 --- a/src/ParseSchema.js +++ b/src/ParseSchema.js @@ -12,6 +12,7 @@ const FIELD_TYPES = [ 'String', 'Number', 'Boolean', + 'Bytes', 'Date', 'File', 'GeoPoint', @@ -242,6 +243,14 @@ class ParseSchema { }; } } + if (type === 'Bytes') { + if (options && options.defaultValue) { + fieldOptions.defaultValue = { + __type: 'Bytes', + base64: options.defaultValue, + }; + } + } this._fields[name] = fieldOptions; return this; } @@ -303,6 +312,17 @@ class ParseSchema { return this.addField(name, 'Boolean', options); } + /** + * Adding Bytes Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addBytes(name: string, options: FieldOptions) { + return this.addField(name, 'Bytes', options); + } + /** * Adding Date Field * diff --git a/src/ParseSession.js b/src/ParseSession.ts similarity index 98% rename from src/ParseSession.js rename to src/ParseSession.ts index 131da6509..51b001742 100644 --- a/src/ParseSession.js +++ b/src/ParseSession.ts @@ -1,7 +1,3 @@ -/** - * @flow - */ - import CoreManager from './CoreManager'; import isRevocableSession from './isRevocableSession'; import ParseObject from './ParseObject'; @@ -22,7 +18,7 @@ class ParseSession extends ParseObject { /** * @param {object} attributes The initial set of data to store in the user. */ - constructor(attributes: ?AttributeMap) { + constructor(attributes?: any) { super('_Session'); if (attributes && typeof attributes === 'object') { if (!this.set(attributes || {})) { diff --git a/src/ParseUser.js b/src/ParseUser.js index d2014f1ac..8ba9ba8c0 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -110,9 +110,15 @@ class ParseUser extends ParseObject { throw new Error('Invalid type: authData field should be an object'); } authData[authType] = options.authData; + const oldAnonymousData = authData.anonymous; + this.stripAnonymity(); const controller = CoreManager.getUserController(); - return controller.linkWith(this, authData, saveOpts); + return controller.linkWith(this, authData, saveOpts).catch((e) => { + delete authData[authType]; + this.restoreAnonimity(oldAnonymousData); + throw e; + }); } else { return new Promise((resolve, reject) => { provider.authenticate({ @@ -310,6 +316,21 @@ class ParseUser extends ParseObject { return !!current && current.id === this.id; } + stripAnonymity() { + const authData = this.get('authData'); + if (authData && typeof authData === 'object' && authData.hasOwnProperty('anonymous')) { + // We need to set anonymous to null instead of deleting it in order to remove it from Parse. + authData.anonymous = null; + } + } + + restoreAnonimity(anonymousData: any) { + if (anonymousData) { + const authData = this.get('authData'); + authData.anonymous = anonymousData; + } + } + /** * Returns get("username"). * @@ -329,12 +350,7 @@ class ParseUser extends ParseObject { * @param {string} username */ setUsername(username: string) { - // Strip anonymity - const authData = this.get('authData'); - if (authData && typeof authData === 'object' && authData.hasOwnProperty('anonymous')) { - // We need to set anonymous to null instead of deleting it in order to remove it from Parse. - authData.anonymous = null; - } + this.stripAnonymity(); this.set('username', username); } @@ -453,7 +469,12 @@ class ParseUser extends ParseObject { if (options.hasOwnProperty('usePost')) { loginOptions.usePost = options.usePost; } - + if ( + options.hasOwnProperty('context') && + Object.prototype.toString.call(options.context) === '[object Object]' + ) { + loginOptions.context = options.context; + } const controller = CoreManager.getUserController(); return controller.logIn(this, loginOptions); } @@ -653,6 +674,34 @@ class ParseUser extends ParseObject { return user.logIn(options); } + /** + * Logs in a user with a username (or email) and password, and authData. On success, this + * saves the session to disk, so you can retrieve the currently logged in + * user using current. + * + * @param {string} username The username (or email) to log in with. + * @param {string} password The password to log in with. + * @param {object} authData The authData to log in with. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the login completes. + */ + static logInWithAdditionalAuth(username: string, password: string, authData: AuthData, options?: FullOptions) { + if (typeof username !== 'string') { + return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, 'Username must be a string.')); + } + if (typeof password !== 'string') { + return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, 'Password must be a string.')); + } + if (Object.prototype.toString.call(authData) !== '[object Object]') { + return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, 'Auth must be an object.')); + } + const user = new this(); + user._finishFetch({ username: username, password: password, authData }); + return user.logIn(options); + } + /** * Logs in a user with an objectId. On success, this saves the session * to disk, so you can retrieve the currently logged in user using @@ -1098,6 +1147,7 @@ const DefaultController = { const auth = { username: user.get('username'), password: user.get('password'), + authData: user.get('authData'), }; return RESTController.request(options.usePost ? 'POST' : 'GET', 'login', auth, options).then( response => { diff --git a/src/Storage.js b/src/Storage.js index 232e3000b..67392c249 100644 --- a/src/Storage.js +++ b/src/Storage.js @@ -96,6 +96,7 @@ const Storage = { }; module.exports = Storage; +export default Storage; if (process.env.PARSE_BUILD === 'react-native') { CoreManager.setStorageController(require('./StorageController.react-native')); diff --git a/src/__tests__/Cloud-test.js b/src/__tests__/Cloud-test.js index a43788b8a..48243b635 100644 --- a/src/__tests__/Cloud-test.js +++ b/src/__tests__/Cloud-test.js @@ -80,6 +80,15 @@ describe('Cloud', () => { ]); }); + it('run passes installationId option', () => { + Cloud.run('myfunction', {}, { installationId: 'asdf1234' }); + expect(CoreManager.getCloudController().run.mock.calls[0]).toEqual([ + 'myfunction', + {}, + { installationId: 'asdf1234' }, + ]); + }); + it('startJob throws with an invalid job name', () => { expect(Cloud.startJob).toThrow('Cloud job name must be a string.'); diff --git a/src/__tests__/LiveQueryClient-test.js b/src/__tests__/LiveQueryClient-test.js index 5e396f20a..9cd4e4f5f 100644 --- a/src/__tests__/LiveQueryClient-test.js +++ b/src/__tests__/LiveQueryClient-test.js @@ -35,6 +35,7 @@ const mockLocalDatastore = { jest.setMock('../LocalDatastore', mockLocalDatastore); const CoreManager = require('../CoreManager'); +const EventEmitter = require('../EventEmitter'); const LiveQueryClient = require('../LiveQueryClient').default; const ParseObject = require('../ParseObject').default; const ParseQuery = require('../ParseQuery').default; @@ -46,6 +47,7 @@ CoreManager.setLocalDatastore(mockLocalDatastore); describe('LiveQueryClient', () => { beforeEach(() => { mockLocalDatastore.isEnabled = false; + CoreManager.setEventEmitter(EventEmitter); }); it('serverURL required', () => { @@ -756,6 +758,21 @@ describe('LiveQueryClient', () => { spy.mockRestore(); }); + it('can handle WebSocket disconnect if already disconnected', async () => { + const liveQueryClient = new LiveQueryClient({ + applicationId: 'applicationId', + serverURL: 'ws://test', + javascriptKey: 'javascriptKey', + masterKey: 'masterKey', + sessionToken: 'sessionToken', + }); + const spy = jest.spyOn(liveQueryClient, '_handleReconnect'); + liveQueryClient.state = 'disconnected'; + liveQueryClient._handleWebSocketClose(); + expect(liveQueryClient._handleReconnect).toHaveBeenCalledTimes(0); + spy.mockRestore(); + }); + it('can subscribe', async () => { const liveQueryClient = new LiveQueryClient({ applicationId: 'applicationId', @@ -886,6 +903,31 @@ describe('LiveQueryClient', () => { expect(liveQueryClient.socket.send).toHaveBeenCalledTimes(0); }); + it('cannot subscribe on connection error', async () => { + const liveQueryClient = new LiveQueryClient({ + applicationId: 'applicationId', + serverURL: 'ws://test', + javascriptKey: 'javascriptKey', + masterKey: 'masterKey', + sessionToken: 'sessionToken', + }); + liveQueryClient.socket = { + send: jest.fn(), + }; + const query = new ParseQuery('Test'); + query.equalTo('key', 'value'); + + const subscription = liveQueryClient.subscribe(query); + liveQueryClient.connectPromise.reject(new Error('Unable to connect')); + liveQueryClient.connectPromise.catch(() => {}); + try { + await subscription.subscribePromise; + expect(true).toBeFalse(); + } catch (e) { + expect(e.message).toBe('Unable to connect'); + } + }); + it('can resubscribe', async () => { const liveQueryClient = new LiveQueryClient({ applicationId: 'applicationId', diff --git a/src/__tests__/ObjectStateMutations-test.js b/src/__tests__/ObjectStateMutations-test.js index b898a950d..380d60fb9 100644 --- a/src/__tests__/ObjectStateMutations-test.js +++ b/src/__tests__/ObjectStateMutations-test.js @@ -199,6 +199,17 @@ describe('ObjectStateMutations', () => { expect(objectCache).toEqual({ data: '{"count":5}' }); }); + it('can commit nested changes from the server', () => { + const serverData = {}; + const objectCache = {}; + ObjectStateMutations.commitServerChanges(serverData, objectCache, { + 'name.foo': 'bar', + data: { count: 5 }, + }); + expect(serverData).toEqual({ name: { foo: 'bar' }, data: { count: 5 } }); + expect(objectCache).toEqual({ data: '{"count":5}' }); + }); + it('can generate a default state for implementations', () => { expect(ObjectStateMutations.defaultState()).toEqual({ serverData: {}, diff --git a/src/__tests__/OfflineQuery-test.js b/src/__tests__/OfflineQuery-test.js index 14fce79a7..f700f3210 100644 --- a/src/__tests__/OfflineQuery-test.js +++ b/src/__tests__/OfflineQuery-test.js @@ -848,6 +848,33 @@ describe('OfflineQuery', () => { expect(matchesQuery(q.className, obj3, [], q)).toBe(false); }); + it('should not support invalid $geoWithin query', () => { + const sacramento = new ParseObject('Location'); + sacramento.set('location', new ParseGeoPoint(38.52, -121.5)); + sacramento.set('name', 'Sacramento'); + + const honolulu = new ParseObject('Location'); + honolulu.set('location', new ParseGeoPoint(21.35, -157.93)); + honolulu.set('name', 'Honolulu'); + + const sf = new ParseObject('Location'); + sf.set('location', new ParseGeoPoint(37.75, -122.68)); + sf.set('name', 'San Francisco'); + + const points = [ + new ParseGeoPoint(37.85, -122.33), + new ParseGeoPoint(37.85, -122.9), + new ParseGeoPoint(37.68, -122.9), + new ParseGeoPoint(37.68, -122.33), + ]; + const q = new ParseQuery('Location'); + q._addCondition('location', '$geoWithin', { $unknown: points }); + + expect(matchesQuery(q.className, sacramento, [], q)).toBe(false); + expect(matchesQuery(q.className, honolulu, [], q)).toBe(false); + expect(matchesQuery(q.className, sf, [], q)).toBe(false); + }); + it('should validate query', () => { let query = new ParseQuery('TestObject'); query.equalTo('foo', 'bar'); diff --git a/src/__tests__/ParseError-test.js b/src/__tests__/ParseError-test.js index a74b6d568..5bbb5f81c 100644 --- a/src/__tests__/ParseError-test.js +++ b/src/__tests__/ParseError-test.js @@ -1,6 +1,8 @@ jest.dontMock('../ParseError'); +jest.dontMock('../CoreManager'); const ParseError = require('../ParseError').default; +const CoreManager = require('../CoreManager'); describe('ParseError', () => { it('have sensible string representation', () => { @@ -18,4 +20,14 @@ describe('ParseError', () => { code: 123, }); }); + + it('can override message', () => { + CoreManager.set('PARSE_ERRORS', [{ code: 123, message: 'Oops.' }]); + const error = new ParseError(123, 'some error message'); + expect(JSON.parse(JSON.stringify(error))).toEqual({ + message: 'Oops.', + code: 123, + }); + CoreManager.set('PARSE_ERRORS', []); + }); }); diff --git a/src/__tests__/ParseLiveQuery-test.js b/src/__tests__/ParseLiveQuery-test.js index 63178f028..ae105f1ef 100644 --- a/src/__tests__/ParseLiveQuery-test.js +++ b/src/__tests__/ParseLiveQuery-test.js @@ -9,18 +9,22 @@ jest.dontMock('../EventEmitter'); jest.dontMock('../promiseUtils'); // Forces the loading -const LiveQuery = require('../ParseLiveQuery').default; +const ParseLiveQuery = require('../ParseLiveQuery').default; const CoreManager = require('../CoreManager'); +const EventEmitter = require('../EventEmitter'); const ParseQuery = require('../ParseQuery').default; const LiveQuerySubscription = require('../LiveQuerySubscription').default; const mockLiveQueryClient = { open: jest.fn(), close: jest.fn(), }; +CoreManager.setEventEmitter(EventEmitter); +const LiveQuery = new ParseLiveQuery() describe('ParseLiveQuery', () => { beforeEach(() => { const controller = CoreManager.getLiveQueryController(); + CoreManager.setLiveQuery(LiveQuery); controller._clearCachedDefaultClient(); CoreManager.set('InstallationController', { currentInstallationId() { diff --git a/src/__tests__/ParseObject-test.js b/src/__tests__/ParseObject-test.js index e1aa9ce9e..c67c4a3e1 100644 --- a/src/__tests__/ParseObject-test.js +++ b/src/__tests__/ParseObject-test.js @@ -2302,13 +2302,14 @@ describe('ParseObject', () => { }); const p = new ParseObject('Person'); p.id = 'pid'; - const result = p.destroy().then(() => { + const result = p.destroy({ sessionToken: 't_1234' }).then(() => { expect(xhr.open.mock.calls[0]).toEqual([ 'POST', 'https://api.parse.com/1/classes/Person/pid', true, ]); expect(JSON.parse(xhr.send.mock.calls[0])._method).toBe('DELETE'); + expect(JSON.parse(xhr.send.mock.calls[0])._SessionToken).toBe('t_1234'); }); jest.runAllTicks(); await flushPromises(); diff --git a/src/__tests__/ParseQuery-test.js b/src/__tests__/ParseQuery-test.js index 4499b27fa..7aef3d28d 100644 --- a/src/__tests__/ParseQuery-test.js +++ b/src/__tests__/ParseQuery-test.js @@ -1,6 +1,7 @@ jest.dontMock('../CoreManager'); jest.dontMock('../encode'); jest.dontMock('../decode'); +jest.dontMock('../EventEmitter'); jest.dontMock('../ParseError'); jest.dontMock('../ParseGeoPoint'); jest.dontMock('../ParseQuery'); @@ -40,6 +41,7 @@ const mockLocalDatastore = { jest.setMock('../LocalDatastore', mockLocalDatastore); let CoreManager = require('../CoreManager'); +const EventEmitter = require('../EventEmitter'); const ParseError = require('../ParseError').default; const ParseGeoPoint = require('../ParseGeoPoint').default; let ParseObject = require('../ParseObject'); @@ -52,6 +54,7 @@ const MockRESTController = { }; const QueryController = CoreManager.getQueryController(); +CoreManager.setEventEmitter(EventEmitter); import { DEFAULT_PIN } from '../LocalDatastoreUtils'; @@ -1814,6 +1817,7 @@ describe('ParseQuery', () => { q.select('size', 'name'); q.includeAll(); q.hint('_id_'); + q.exclude('foo') await q.findAll(); expect(findMock).toHaveBeenCalledTimes(1); @@ -1824,6 +1828,7 @@ describe('ParseQuery', () => { order: 'objectId', keys: 'size,name', include: '*', + excludeKeys: 'foo', hint: '_id_', where: { size: { diff --git a/src/__tests__/ParseSchema-test.js b/src/__tests__/ParseSchema-test.js index ff306ae04..5f3754cc1 100644 --- a/src/__tests__/ParseSchema-test.js +++ b/src/__tests__/ParseSchema-test.js @@ -57,6 +57,7 @@ describe('ParseSchema', () => { .addString('stringField') .addNumber('numberField') .addBoolean('booleanField') + .addBytes('bytesField') .addDate('dateField') .addFile('fileField') .addGeoPoint('geoPointField') @@ -70,6 +71,7 @@ describe('ParseSchema', () => { expect(schema._fields.stringField.type).toEqual('String'); expect(schema._fields.numberField.type).toEqual('Number'); expect(schema._fields.booleanField.type).toEqual('Boolean'); + expect(schema._fields.bytesField.type).toEqual('Bytes'); expect(schema._fields.dateField.type).toEqual('Date'); expect(schema._fields.fileField.type).toEqual('File'); expect(schema._fields.geoPointField.type).toEqual('GeoPoint'); @@ -103,6 +105,10 @@ describe('ParseSchema', () => { required: true, defaultValue: 'hello', }) + .addBytes('bytesField', { + required: true, + defaultValue: 'ParseA==', + }) .addDate('dateField', { required: true, defaultValue: '2000-01-01T00:00:00.000Z', @@ -131,6 +137,14 @@ describe('ParseSchema', () => { iso: new Date('2000-01-01T00:00:00.000Z'), }, }); + expect(schema._fields.bytesField).toEqual({ + type: 'Bytes', + required: true, + defaultValue: { + __type: 'Bytes', + base64: 'ParseA==', + }, + }); }); it('can create schema indexes', done => { diff --git a/src/__tests__/ParseUser-test.js b/src/__tests__/ParseUser-test.js index f671149c3..631842b8e 100644 --- a/src/__tests__/ParseUser-test.js +++ b/src/__tests__/ParseUser-test.js @@ -326,6 +326,53 @@ describe('ParseUser', () => { }); }); + describe('loginWithAdditional', () => { + it('loginWithAdditonal fails with invalid payload', async () => { + ParseUser.enableUnsafeCurrentUser(); + ParseUser._clearCache(); + CoreManager.setRESTController({ + request(method, path, body) { + expect(method).toBe('POST'); + expect(path).toBe('login'); + expect(body.username).toBe('username'); + expect(body.password).toBe('password'); + expect(body.authData).toEqual({ mfa: { key: '1234' } }); + + return Promise.resolve( + { + objectId: 'uid2', + username: 'username', + sessionToken: '123abc', + authDataResponse: { + mfa: { enabled: true }, + }, + }, + 200 + ); + }, + ajax() {}, + }); + const response = await ParseUser.logInWithAdditionalAuth('username', 'password', {mfa: {key:'1234'}}); + expect(response instanceof ParseUser).toBe(true); + expect(response.get('authDataResponse')).toEqual({mfa: { enabled: true }}); + }); + + it('loginWithAdditonal fails with invalid payload', async () => { + ParseUser.enableUnsafeCurrentUser(); + ParseUser._clearCache(); + await expect(ParseUser.logInWithAdditionalAuth({}, 'password', {})).rejects.toThrowError( + new ParseError(ParseError.OTHER_CAUSE, 'Username must be a string.') + ); + await expect(ParseUser.logInWithAdditionalAuth('username', {}, {})).rejects.toThrowError( + new ParseError(ParseError.OTHER_CAUSE, 'Password must be a string.') + ); + await expect(ParseUser.logInWithAdditionalAuth('username', 'password', '')).rejects.toThrowError( + new ParseError(ParseError.OTHER_CAUSE, 'Auth must be an object.') + ); + }); + }); + + it('preserves changes when logging in', done => { ParseUser.enableUnsafeCurrentUser(); ParseUser._clearCache(); @@ -785,7 +832,7 @@ describe('ParseUser', () => { }); }); - it('removes the current user from disk when destroyed', done => { + it('removes the current user from disk when destroyed', async () => { ParseUser.enableUnsafeCurrentUser(); ParseUser._clearCache(); Storage._clear(); @@ -801,25 +848,21 @@ describe('ParseUser', () => { ajax() {}, }); - ParseUser.signUp('destroyed', 'password') - .then(u => { - expect(u.isCurrent()).toBe(true); - CoreManager.setRESTController({ - request() { - return Promise.resolve({}, 200); - }, - ajax() {}, - }); - return u.destroy(); - }) - .then(() => { - expect(ParseUser.current()).toBe(null); - return ParseUser.currentAsync(); - }) - .then(current => { - expect(current).toBe(null); - done(); - }); + const u = await ParseUser.signUp('destroyed', 'password'); + expect(u.isCurrent()).toBe(true); + CoreManager.setRESTController({ + request() { + return Promise.resolve({}, 200); + }, + ajax() {}, + }); + await u.destroy(); + + expect(ParseUser.current()).toBe(null); + const current = await ParseUser.currentAsync(); + + expect(current).toBe(null); + await u.destroy(); }); it('updates the current user on disk when fetched', done => { @@ -1144,6 +1187,143 @@ describe('ParseUser', () => { spy.mockRestore(); }); + it('can strip anonymous user on linkWith', async () => { + ParseUser.enableUnsafeCurrentUser(); + ParseUser._clearCache(); + CoreManager.setRESTController({ + request() { + return Promise.resolve( + { + objectId: 'uidstrip', + sessionToken: 'r:123abc', + authData: { + anonymous: { + id: 'anonymousId', + }, + }, + }, + 200 + ); + }, + ajax() {}, + }); + const user = await AnonymousUtils.logIn(); + + expect(user.get('authData').anonymous).toBeDefined(); + + ParseUser._setCurrentUserCache(user); + + CoreManager.setRESTController({ + request() { + return Promise.resolve( + { + objectId: 'uidstrip', + sessionToken: 'r:123abc', + authData: { + test: { + id: 'id', + access_token: 'access_token', + }, + }, + }, + 200 + ); + }, + ajax() {}, + }); + const provider = { + authenticate(options) { + if (options.success) { + options.success(this, { + id: 'id', + access_token: 'access_token', + }); + } + }, + restoreAuthentication() {}, + getAuthType() { + return 'test'; + }, + deauthenticate() {}, + }; + + await user.linkWith(provider, null, { useMasterKey: true }); + + expect(user.get('authData')).toEqual({ + test: { id: 'id', access_token: 'access_token' }, + }); + }); + + it('can restore anonymous user on linkWith failure', async () => { + ParseUser.enableUnsafeCurrentUser(); + ParseUser._clearCache(); + CoreManager.setRESTController({ + request() { + return Promise.resolve( + { + objectId: 'uidrestore', + sessionToken: 'r:123abc', + authData: { + anonymous: { + id: 'anonymousId', + }, + }, + }, + 200 + ); + }, + ajax() {}, + }); + const user = await AnonymousUtils.logIn(); + expect(user.get('authData').anonymous).toBeDefined(); + + ParseUser._setCurrentUserCache(user); + + const provider = { + authenticate(options) { + if (options.success) { + options.success(this, { + id: 'id', + access_token: 'access_token', + }); + } + }, + restoreAuthentication() {}, + getAuthType() { + return 'test'; + }, + deauthenticate() {}, + }; + + const UserController = CoreManager.getUserController(); + CoreManager.setUserController({ + linkWith(user) { + expect(user.get('authData').anonymous).toEqual(null); + return Promise.reject('authentication error'); + }, + currentUserAsync() {}, + setCurrentUser() {}, + currentUser() {}, + signUp() {}, + logIn() {}, + become() {}, + logOut() {}, + me() {}, + requestPasswordReset() {}, + upgradeToRevocableSession() {}, + requestEmailVerification() {}, + verifyPassword() {}, + }); + try { + await user.linkWith(provider, null, { useMasterKey: true }); + expect(true).toBe(false); + } catch (e) { + expect(e).toBe('authentication error'); + } + expect(user.get('authData')).toEqual({ anonymous: { id: 'anonymousId' } }); + CoreManager.setUserController(UserController); + }); + it('can logout anonymous user', async () => { ParseUser.enableUnsafeCurrentUser(); ParseUser._clearCache(); @@ -1484,6 +1664,7 @@ describe('ParseUser', () => { user.set('authData', { customAuth: true }); expect(user._isLinked(provider)).toBe(true); + expect(user._isLinked('customAuth')).toBe(true); user.set('authData', 1234); expect(user._isLinked(provider)).toBe(false); @@ -1761,6 +1942,27 @@ describe('ParseUser', () => { expect(controller.request.mock.calls[0][3].context).toEqual(context); }); + it('can login with context', async () => { + CoreManager.setRESTController({ + ajax() {}, + request() { + return Promise.resolve( + { + objectId: 'uid33', + username: 'username', + sessionToken: '123abc', + }, + 200 + ); + }, + }); + const controller = CoreManager.getRESTController(); + jest.spyOn(controller, 'request'); + const context = { a: 'a' }; + await ParseUser.logIn('username', 'password', { context }); + expect(controller.request.mock.calls[0][3].context).toEqual(context); + }); + it('can verify user password', async () => { ParseUser.enableUnsafeCurrentUser(); ParseUser._clearCache(); diff --git a/src/__tests__/react-native-test.js b/src/__tests__/react-native-test.js index c8d26917f..02c0a1e76 100644 --- a/src/__tests__/react-native-test.js +++ b/src/__tests__/react-native-test.js @@ -10,7 +10,7 @@ jest.dontMock('../ParseObject'); jest.dontMock('../Storage'); jest.mock( - '../../../../react-native/Libraries/vendor/emitter/EventEmitter', + 'react-native/Libraries/vendor/emitter/EventEmitter', () => { return { default: { @@ -23,8 +23,7 @@ jest.mock( { virtual: true } ); -const mockEmitter = require('../../../../react-native/Libraries/vendor/emitter/EventEmitter') - .default; +const mockEmitter = require('react-native/Libraries/vendor/emitter/EventEmitter').default; const CoreManager = require('../CoreManager'); describe('React Native', () => { diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..051477c29 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es2015", + "declaration": true, + "emitDeclarationOnly": true, + "outDir": "types", + "noImplicitAny": false, + "allowJs": false + }, + "files": [ + "src/Parse.ts", + "src/ParseSession.ts" + ] +} diff --git a/types/Analytics.d.ts b/types/Analytics.d.ts new file mode 100644 index 000000000..015d22a76 --- /dev/null +++ b/types/Analytics.d.ts @@ -0,0 +1,42 @@ +/** + * Parse.Analytics provides an interface to Parse's logging and analytics + * backend. + * + * @class Parse.Analytics + * @static + * @hideconstructor + */ +/** + * Tracks the occurrence of a custom event with additional dimensions. + * Parse will store a data point at the time of invocation with the given + * event name. + * + * Dimensions will allow segmentation of the occurrences of this custom + * event. Keys and values should be {@code String}s, and will throw + * otherwise. + * + * To track a user signup along with additional metadata, consider the + * following: + *
+ * var dimensions = {
+ *  gender: 'm',
+ *  source: 'web',
+ *  dayType: 'weekend'
+ * };
+ * Parse.Analytics.track('signup', dimensions);
+ * 
+ * + * There is a default limit of 8 dimensions per event tracked. + * + * @function track + * @name Parse.Analytics.track + * @param {string} name The name of the custom event to report to Parse as + * having happened. + * @param {object} dimensions The dictionary of information by which to + * segment this event. + * @returns {Promise} A promise that is resolved when the round-trip + * to the server completes. + */ +export function track(name: string, dimensions: { + [key: string]: string; +}): Promise; diff --git a/types/AnonymousUtils.d.ts b/types/AnonymousUtils.d.ts new file mode 100644 index 000000000..8637c2083 --- /dev/null +++ b/types/AnonymousUtils.d.ts @@ -0,0 +1,56 @@ +export default AnonymousUtils; +declare namespace AnonymousUtils { + /** + * Gets whether the user has their account linked to anonymous user. + * + * @function isLinked + * @name Parse.AnonymousUtils.isLinked + * @param {Parse.User} user User to check for. + * The user must be logged in on this device. + * @returns {boolean} true if the user has their account + * linked to an anonymous user. + * @static + */ + function isLinked(user: ParseUser): boolean; + /** + * Logs in a user Anonymously. + * + * @function logIn + * @name Parse.AnonymousUtils.logIn + * @param {object} options MasterKey / SessionToken. + * @returns {Promise} Logged in user + * @static + */ + function logIn(options?: RequestOptions): Promise; + /** + * Links Anonymous User to an existing PFUser. + * + * @function link + * @name Parse.AnonymousUtils.link + * @param {Parse.User} user User to link. This must be the current user. + * @param {object} options MasterKey / SessionToken. + * @returns {Promise} Linked with User + * @static + */ + function link(user: ParseUser, options?: RequestOptions): Promise; + /** + * Returns true if Authentication Provider has been registered for use. + * + * @function isRegistered + * @name Parse.AnonymousUtils.isRegistered + * @returns {boolean} + * @static + */ + function isRegistered(): boolean; + function _getAuthProvider(): { + restoreAuthentication(): boolean; + getAuthType(): string; + getAuthData(): { + authData: { + id: any; + }; + }; + }; +} +import ParseUser from './ParseUser'; +import { RequestOptions } from './RESTController'; diff --git a/types/Cloud.d.ts b/types/Cloud.d.ts new file mode 100644 index 000000000..7af0228fc --- /dev/null +++ b/types/Cloud.d.ts @@ -0,0 +1,55 @@ +// @ts-nocheck +/** + * Contains functions for calling and declaring + * cloud functions. + *

+ * Some functions are only available from Cloud Code. + *

+ * + * @class Parse.Cloud + * @static + * @hideconstructor + */ +/** + * Makes a call to a cloud function. + * + * @function run + * @name Parse.Cloud.run + * @param {string} name The function name. + * @param {object} data The parameters to send to the cloud function. + * @param {object} options + * @returns {Promise} A promise that will be resolved with the result + * of the function. + */ +export function run(name: string, data: mixed, options: RequestOptions): Promise; +/** + * Gets data for the current set of cloud jobs. + * + * @function getJobsData + * @name Parse.Cloud.getJobsData + * @returns {Promise} A promise that will be resolved with the result + * of the function. + */ +export function getJobsData(): Promise; +/** + * Starts a given cloud job, which will process asynchronously. + * + * @function startJob + * @name Parse.Cloud.startJob + * @param {string} name The function name. + * @param {object} data The parameters to send to the cloud function. + * @returns {Promise} A promise that will be resolved with the jobStatusId + * of the job. + */ +export function startJob(name: string, data: mixed): Promise; +/** + * Gets job status by Id + * + * @function getJobStatus + * @name Parse.Cloud.getJobStatus + * @param {string} jobStatusId The Id of Job Status. + * @returns {Parse.Object} Status of Job. + */ +export function getJobStatus(jobStatusId: string): Promise; +import { RequestOptions } from './RESTController'; +import ParseObject from './ParseObject'; diff --git a/types/CoreManager.d.ts b/types/CoreManager.d.ts new file mode 100644 index 000000000..c7a350aa4 --- /dev/null +++ b/types/CoreManager.d.ts @@ -0,0 +1,184 @@ +// @ts-nocheck +export default CoreManager; +declare namespace CoreManager { + function get(key: string): any; + function set(key: string, value: any): void; + function setAnalyticsController(controller: AnalyticsController): void; + function getAnalyticsController(): AnalyticsController; + function setCloudController(controller: CloudController): void; + function getCloudController(): CloudController; + function setConfigController(controller: ConfigController): void; + function getConfigController(): ConfigController; + function setCryptoController(controller: CryptoController): void; + function getCryptoController(): CryptoController; + function setFileController(controller: FileController): void; + function getFileController(): FileController; + function setInstallationController(controller: InstallationController): void; + function getInstallationController(): InstallationController; + function setObjectController(controller: ObjectController): void; + function getObjectController(): ObjectController; + function setObjectStateController(controller: ObjectStateController): void; + function getObjectStateController(): ObjectStateController; + function setPushController(controller: PushController): void; + function getPushController(): PushController; + function setQueryController(controller: QueryController): void; + function getQueryController(): QueryController; + function setRESTController(controller: RESTController): void; + function getRESTController(): RESTController; + function setSchemaController(controller: SchemaController): void; + function getSchemaController(): SchemaController; + function setSessionController(controller: SessionController): void; + function getSessionController(): SessionController; + function setStorageController(controller: StorageController): void; + function setLocalDatastoreController(controller: LocalDatastoreController): void; + function getLocalDatastoreController(): LocalDatastoreController; + function setLocalDatastore(store: any): void; + function getLocalDatastore(): mixed; + function getStorageController(): StorageController; + function setAsyncStorage(storage: any): void; + function getAsyncStorage(): mixed; + function setWebSocketController(controller: WebSocketController): void; + function getWebSocketController(): WebSocketController; + function setUserController(controller: UserController): void; + function getUserController(): UserController; + function setLiveQueryController(controller: any): void; + function getLiveQueryController(): any; + function setHooksController(controller: HooksController): void; + function getHooksController(): HooksController; +} +type AnalyticsController = { + track: (name: string, dimensions: { + [key: string]: string; + }) => Promise; +}; +type CloudController = { + run: (name: string, data: mixed, options: RequestOptions) => Promise; + getJobsData: (options: RequestOptions) => Promise; + startJob: (name: string, data: mixed, options: RequestOptions) => Promise; +}; +type ConfigController = { + current: () => Promise; + get: () => Promise; + save: (attrs: { + [key: string]: any; + }) => Promise; +}; +type CryptoController = { + encrypt: (obj: any, secretKey: string) => string; + decrypt: (encryptedText: string, secretKey: any) => string; +}; +type FileController = { + saveFile: (name: string, source: FileSource, options: FullOptions) => Promise; + saveBase64: (name: string, source: FileSource, options: FullOptions) => Promise; + download: (uri: string) => Promise; +}; +type InstallationController = { + currentInstallationId: () => Promise; +}; +type ObjectController = { + fetch: (object: ParseObject | ParseObject[], forceFetch: boolean, options: RequestOptions) => Promise; + save: (object: ParseObject | (ParseFile | ParseObject)[], options: RequestOptions) => Promise; + destroy: (object: ParseObject | ParseObject[], options: RequestOptions) => Promise; +}; +type ObjectStateController = { + getState: (obj: any) => State; + initializeState: (obj: any, initial?: State) => State; + removeState: (obj: any) => State; + getServerData: (obj: any) => AttributeMap; + setServerData: (obj: any, attributes: AttributeMap) => void; + getPendingOps: (obj: any) => OpsMap[]; + setPendingOp: (obj: any, attr: string, op: Op) => void; + pushPendingState: (obj: any) => void; + popPendingState: (obj: any) => OpsMap; + mergeFirstPendingState: (obj: any) => void; + getObjectCache: (obj: any) => ObjectCache; + estimateAttribute: (obj: any, attr: string) => mixed; + estimateAttributes: (obj: any) => AttributeMap; + commitServerChanges: (obj: any, changes: AttributeMap) => void; + enqueueTask: (obj: any, task: () => Promise) => Promise; + clearAllState: () => void; + duplicateState: (source: any, dest: any) => void; +}; +type PushController = { + send: (data: PushData) => Promise; +}; +type QueryController = { + find: (className: string, params: QueryJSON, options: RequestOptions) => Promise; + aggregate: (className: string, params: any, options: RequestOptions) => Promise; +}; +type RESTController = { + request: (method: string, path: string, data: mixed, options: RequestOptions) => Promise; + ajax: (method: string, url: string, data: any, headers?: any, options: FullOptions) => Promise; +}; +type SchemaController = { + purge: (className: string) => Promise; + get: (className: string, options: RequestOptions) => Promise; + delete: (className: string, options: RequestOptions) => Promise; + create: (className: string, params: any, options: RequestOptions) => Promise; + update: (className: string, params: any, options: RequestOptions) => Promise; + send(className: string, method: string, params: any, options: RequestOptions): Promise; +}; +type SessionController = { + getSession: (token: RequestOptions) => Promise; +}; +type StorageController = { + async: 0; + getItem: (path: string) => string; + setItem: (path: string, value: string) => void; + removeItem: (path: string) => void; + getItemAsync?: (path: string) => Promise; + setItemAsync?: (path: string, value: string) => Promise; + removeItemAsync?: (path: string) => Promise; + clear: () => void; +} | { + async: 1; + getItem?: (path: string) => string; + setItem?: (path: string, value: string) => void; + removeItem?: (path: string) => void; + getItemAsync: (path: string) => Promise; + setItemAsync: (path: string, value: string) => Promise; + removeItemAsync: (path: string) => Promise; + clear: () => void; +}; +type LocalDatastoreController = { + fromPinWithName: (name: string) => any; + pinWithName: (name: string, objects: any) => void; + unPinWithName: (name: string) => void; + getAllContents: () => any; + clear: () => void; +}; +type WebSocketController = { + onopen: () => void; + onmessage: (message: any) => void; + onclose: () => void; + onerror: (error: any) => void; + send: (data: any) => void; + close: () => void; +}; +type UserController = { + setCurrentUser: (user: ParseUser) => Promise; + currentUser: () => ParseUser; + currentUserAsync: () => Promise; + signUp: (user: ParseUser, attrs: AttributeMap, options: RequestOptions) => Promise; + logIn: (user: ParseUser, options: RequestOptions) => Promise; + become: (options: RequestOptions) => Promise; + hydrate: (userJSON: AttributeMap) => Promise; + logOut: (options: RequestOptions) => Promise; + me: (options: RequestOptions) => Promise; + requestPasswordReset: (email: string, options: RequestOptions) => Promise; + updateUserOnDisk: (user: ParseUser) => Promise; + upgradeToRevocableSession: (user: ParseUser, options: RequestOptions) => Promise; + linkWith: (user: ParseUser, authData: { + [key: string]: mixed; + }) => Promise; + removeUserFromDisk: () => Promise; + verifyPassword: (username: string, password: string, options: RequestOptions) => Promise; + requestEmailVerification: (email: string, options: RequestOptions) => Promise; +}; +type HooksController = { + get: (type: string, functionName?: string, triggerName?: string) => Promise; + create: (hook: mixed) => Promise; + delete: (hook: mixed) => Promise; + update: (hook: mixed) => Promise; + send: (method: string, path: string, body?: mixed) => Promise; +}; diff --git a/types/CryptoController.d.ts b/types/CryptoController.d.ts new file mode 100644 index 000000000..0cebcbf5f --- /dev/null +++ b/types/CryptoController.d.ts @@ -0,0 +1,2 @@ +export function encrypt(obj: any, secretKey: string): string; +export function decrypt(encryptedText: string, secretKey: string): string; diff --git a/types/EventEmitter.d.ts b/types/EventEmitter.d.ts new file mode 100644 index 000000000..14840f3fb --- /dev/null +++ b/types/EventEmitter.d.ts @@ -0,0 +1,2 @@ +export = EventEmitter; +export = EventEmitter; diff --git a/types/EventuallyQueue.d.ts b/types/EventuallyQueue.d.ts new file mode 100644 index 000000000..61694cfa0 --- /dev/null +++ b/types/EventuallyQueue.d.ts @@ -0,0 +1,171 @@ +export default EventuallyQueue; +declare namespace EventuallyQueue { + /** + * Add object to queue with save operation. + * + * @function save + * @name Parse.EventuallyQueue.save + * @param {ParseObject} object Parse.Object to be saved eventually + * @param {object} [serverOptions] See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Object.html#save Parse.Object.save} options. + * @returns {Promise} A promise that is fulfilled if object is added to queue. + * @static + * @see Parse.Object#saveEventually + */ + function save(object: ParseObject, serverOptions?: SaveOptions): Promise; + /** + * Add object to queue with save operation. + * + * @function destroy + * @name Parse.EventuallyQueue.destroy + * @param {ParseObject} object Parse.Object to be destroyed eventually + * @param {object} [serverOptions] See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Object.html#destroy Parse.Object.destroy} options + * @returns {Promise} A promise that is fulfilled if object is added to queue. + * @static + * @see Parse.Object#destroyEventually + */ + function destroy(object: ParseObject, serverOptions?: RequestOptions): Promise; + /** + * Generate unique identifier to avoid duplicates and maintain previous state. + * + * @param {string} action save / destroy + * @param {object} object Parse.Object to be queued + * @returns {string} + * @static + * @ignore + */ + function generateQueueId(action: string, object: ParseObject): string; + /** + * Build queue object and add to queue. + * + * @param {string} action save / destroy + * @param {object} object Parse.Object to be queued + * @param {object} [serverOptions] + * @returns {Promise} A promise that is fulfilled if object is added to queue. + * @static + * @ignore + */ + function enqueue(action: string, object: ParseObject, serverOptions?: RequestOptions | SaveOptions): Promise; + function store(data: any): Promise; + function load(): Promise; + /** + * Sets the in-memory queue from local storage and returns. + * + * @function getQueue + * @name Parse.EventuallyQueue.getQueue + * @returns {Promise} + * @static + */ + function getQueue(): Promise; + /** + * Saves the queue to local storage + * + * @param {Queue} queue Queue containing Parse.Object data. + * @returns {Promise} A promise that is fulfilled when queue is stored. + * @static + * @ignore + */ + function setQueue(queue: Queue): Promise; + /** + * Removes Parse.Object data from queue. + * + * @param {string} queueId Unique identifier for Parse.Object data. + * @returns {Promise} A promise that is fulfilled when queue is stored. + * @static + * @ignore + */ + function remove(queueId: string): Promise; + /** + * Removes all objects from queue. + * + * @function clear + * @name Parse.EventuallyQueue.clear + * @returns {Promise} A promise that is fulfilled when queue is cleared. + * @static + */ + function clear(): Promise; + /** + * Return the index of a queueId in the queue. Returns -1 if not found. + * + * @param {Queue} queue Queue containing Parse.Object data. + * @param {string} queueId Unique identifier for Parse.Object data. + * @returns {number} + * @static + * @ignore + */ + function queueItemExists(queue: Queue, queueId: string): number; + /** + * Return the number of objects in the queue. + * + * @function length + * @name Parse.EventuallyQueue.length + * @returns {number} + * @static + */ + function length(): number; + /** + * Sends the queue to the server. + * + * @function sendQueue + * @name Parse.EventuallyQueue.sendQueue + * @returns {Promise} Returns true if queue was sent successfully. + * @static + */ + function sendQueue(): Promise; + /** + * Build queue object and add to queue. + * + * @param {ParseObject} object Parse.Object to be processed + * @param {QueueObject} queueObject Parse.Object data from the queue + * @returns {Promise} A promise that is fulfilled when operation is performed. + * @static + * @ignore + */ + function sendQueueCallback(object: ParseObject, queueObject: QueueObject): Promise; + /** + * Start polling server for network connection. + * Will send queue if connection is established. + * + * @function poll + * @name Parse.EventuallyQueue.poll + * @param [ms] Milliseconds to ping the server. Default 2000ms + * @static + */ + function poll(ms?: number): void; + /** + * Turns off polling. + * + * @function stopPoll + * @name Parse.EventuallyQueue.stopPoll + * @static + */ + function stopPoll(): void; + /** + * Return true if pinging the server. + * + * @function isPolling + * @name Parse.EventuallyQueue.isPolling + * @returns {boolean} + * @static + */ + function isPolling(): boolean; + function _setPolling(flag: boolean): void; + namespace process { + function create(ObjectType: any, queueObject: any): Promise; + function byId(ObjectType: any, queueObject: any): Promise; + function byHash(ObjectType: any, queueObject: any): Promise; + } +} +import ParseObject from './ParseObject'; +import { SaveOptions } from './ParseObject'; +import { RequestOptions } from './RESTController'; +type Queue = QueueObject[]; +type QueueObject = { + queueId: string; + action: string; + object: ParseObject; + serverOptions: RequestOptions | SaveOptions; + id: string; + className: string; + hash: string; + createdAt: Date; +}; diff --git a/types/FacebookUtils.d.ts b/types/FacebookUtils.d.ts new file mode 100644 index 000000000..bef770ab7 --- /dev/null +++ b/types/FacebookUtils.d.ts @@ -0,0 +1,93 @@ +// @ts-nocheck +export default FacebookUtils; +declare namespace FacebookUtils { + /** + * Initializes Parse Facebook integration. Call this function after you + * have loaded the Facebook Javascript SDK with the same parameters + * as you would pass to + * + * FB.init(). Parse.FacebookUtils will invoke FB.init() for you + * with these arguments. + * + * @function init + * @name Parse.FacebookUtils.init + * @param {object} options Facebook options argument as described here: + * + * FB.init(). The status flag will be coerced to 'false' because it + * interferes with Parse Facebook integration. Call FB.getLoginStatus() + * explicitly if this behavior is required by your application. + */ + function init(options: any): void; + /** + * Gets whether the user has their account linked to Facebook. + * + * @function isLinked + * @name Parse.FacebookUtils.isLinked + * @param {Parse.User} user User to check for a facebook link. + * The user must be logged in on this device. + * @returns {boolean} true if the user has their account + * linked to Facebook. + */ + function isLinked(user: Parse.User): boolean; + /** + * Logs in a user using Facebook. This method delegates to the Facebook + * SDK to authenticate the user, and then automatically logs in (or + * creates, in the case where it is a new user) a Parse.User. + * + * Standard API: + * + * logIn(permission: string, authData: Object); + * + * Advanced API: Used for handling your own oAuth tokens + * {@link https://docs.parseplatform.org/rest/guide/#linking-users} + * + * logIn(authData: Object, options?: Object); + * + * @function logIn + * @name Parse.FacebookUtils.logIn + * @param {(string | object)} permissions The permissions required for Facebook + * log in. This is a comma-separated string of permissions. + * Alternatively, supply a Facebook authData object as described in our + * REST API docs if you want to handle getting facebook auth tokens + * yourself. + * @param {object} options MasterKey / SessionToken. Alternatively can be used for authData if permissions is a string + * @returns {Promise} + */ + function logIn(permissions: any, options: any): Promise; + /** + * Links Facebook to an existing PFUser. This method delegates to the + * Facebook SDK to authenticate the user, and then automatically links + * the account to the Parse.User. + * + * Standard API: + * + * link(user: Parse.User, permission: string, authData?: Object); + * + * Advanced API: Used for handling your own oAuth tokens + * {@link https://docs.parseplatform.org/rest/guide/#linking-users} + * + * link(user: Parse.User, authData: Object, options?: FullOptions); + * + * @function link + * @name Parse.FacebookUtils.link + * @param {Parse.User} user User to link to Facebook. This must be the + * current user. + * @param {(string | object)} permissions The permissions required for Facebook + * log in. This is a comma-separated string of permissions. + * Alternatively, supply a Facebook authData object as described in our + * REST API docs if you want to handle getting facebook auth tokens + * yourself. + * @param {object} options MasterKey / SessionToken. Alternatively can be used for authData if permissions is a string + * @returns {Promise} + */ + function link(user: Parse.User, permissions: any, options: any): Promise; + function unlink(user: Parse.User, options: any): Promise; + function _getAuthProvider(): { + authenticate(options: any): void; + restoreAuthentication(authData: any): boolean; + getAuthType(): string; + deauthenticate(): void; + }; +} diff --git a/types/InstallationController.d.ts b/types/InstallationController.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/types/InstallationController.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/LiveQueryClient.d.ts b/types/LiveQueryClient.d.ts new file mode 100644 index 000000000..dc42292da --- /dev/null +++ b/types/LiveQueryClient.d.ts @@ -0,0 +1,124 @@ +// @ts-nocheck +export default LiveQueryClient; +/** + * Creates a new LiveQueryClient. + * Extends events.EventEmitter + * cloud functions. + * + * A wrapper of a standard WebSocket client. We add several useful methods to + * help you connect/disconnect to LiveQueryServer, subscribe/unsubscribe a ParseQuery easily. + * + * javascriptKey and masterKey are used for verifying the LiveQueryClient when it tries + * to connect to the LiveQuery server + * + * We expose three events to help you monitor the status of the LiveQueryClient. + * + *
+ * let Parse = require('parse/node');
+ * let LiveQueryClient = Parse.LiveQueryClient;
+ * let client = new LiveQueryClient({
+ *   applicationId: '',
+ *   serverURL: '',
+ *   javascriptKey: '',
+ *   masterKey: ''
+ *  });
+ * 
+ * + * Open - When we establish the WebSocket connection to the LiveQuery server, you'll get this event. + *
+ * client.on('open', () => {
+ *
+ * });
+ * + * Close - When we lose the WebSocket connection to the LiveQuery server, you'll get this event. + *
+ * client.on('close', () => {
+ *
+ * });
+ * + * Error - When some network error or LiveQuery server error happens, you'll get this event. + *
+ * client.on('error', (error) => {
+ *
+ * });
+ * + * @alias Parse.LiveQueryClient + */ +declare class LiveQueryClient { + /** + * @param {object} options + * @param {string} options.applicationId - applicationId of your Parse app + * @param {string} options.serverURL - the URL of your LiveQuery server + * @param {string} options.javascriptKey (optional) + * @param {string} options.masterKey (optional) Your Parse Master Key. (Node.js only!) + * @param {string} options.sessionToken (optional) + * @param {string} options.installationId (optional) + */ + constructor({ applicationId, serverURL, javascriptKey, masterKey, sessionToken, installationId, }: { + applicationId: string; + serverURL: string; + javascriptKey: string; + masterKey: string; + sessionToken: string; + installationId: string; + }); + attempts: number; + id: number; + requestId: number; + applicationId: string; + serverURL: string; + javascriptKey: string | null; + masterKey: string | null; + sessionToken: string | null; + installationId: string | null; + additionalProperties: boolean; + connectPromise: Promise; + subscriptions: Map; + socket: any; + state: string; + reconnectHandle: NodeJS.Timeout; + shouldOpen(): any; + /** + * Subscribes to a ParseQuery + * + * If you provide the sessionToken, when the LiveQuery server gets ParseObject's + * updates from parse server, it'll try to check whether the sessionToken fulfills + * the ParseObject's ACL. The LiveQuery server will only send updates to clients whose + * sessionToken is fit for the ParseObject's ACL. You can check the LiveQuery protocol + * here for more details. The subscription you get is the same subscription you get + * from our Standard API. + * + * @param {object} query - the ParseQuery you want to subscribe to + * @param {string} sessionToken (optional) + * @returns {LiveQuerySubscription | undefined} + */ + subscribe(query: Object, sessionToken: string | null): LiveQuerySubscription; + /** + * After calling unsubscribe you'll stop receiving events from the subscription object. + * + * @param {object} subscription - subscription you would like to unsubscribe from. + * @returns {Promise | undefined} + */ + unsubscribe(subscription: Object): Promise | null; + /** + * After open is called, the LiveQueryClient will try to send a connect request + * to the LiveQuery server. + * + */ + open(): void; + resubscribe(): void; + /** + * This method will close the WebSocket connection to this LiveQueryClient, + * cancel the auto reconnect and unsubscribe all subscriptions based on it. + * + * @returns {Promise | undefined} CloseEvent {@link https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close_event} + */ + close(): Promise | null; + _handleReset(): void; + _handleWebSocketOpen(): void; + _handleWebSocketMessage(event: any): void; + _handleWebSocketClose(): void; + _handleWebSocketError(error: any): void; + _handleReconnect(): void; +} +import LiveQuerySubscription from './LiveQuerySubscription'; diff --git a/types/LiveQuerySubscription.d.ts b/types/LiveQuerySubscription.d.ts new file mode 100644 index 000000000..b393ab8a0 --- /dev/null +++ b/types/LiveQuerySubscription.d.ts @@ -0,0 +1,101 @@ +export default Subscription; +/** + * Creates a new LiveQuery Subscription. + * Extends events.EventEmitter + * cloud functions. + * + *

Response Object - Contains data from the client that made the request + *

    + *
  • clientId
  • + *
  • installationId - requires Parse Server 4.0.0+
  • + *
+ *

+ * + *

Open Event - When you call query.subscribe(), we send a subscribe request to + * the LiveQuery server, when we get the confirmation from the LiveQuery server, + * this event will be emitted. When the client loses WebSocket connection to the + * LiveQuery server, we will try to auto reconnect the LiveQuery server. If we + * reconnect the LiveQuery server and successfully resubscribe the ParseQuery, + * you'll also get this event. + * + *

+ * subscription.on('open', (response) => {
+ *
+ * });

+ * + *

Create Event - When a new ParseObject is created and it fulfills the ParseQuery you subscribe, + * you'll get this event. The object is the ParseObject which is created. + * + *

+ * subscription.on('create', (object, response) => {
+ *
+ * });

+ * + *

Update Event - When an existing ParseObject (original) which fulfills the ParseQuery you subscribe + * is updated (The ParseObject fulfills the ParseQuery before and after changes), + * you'll get this event. The object is the ParseObject which is updated. + * Its content is the latest value of the ParseObject. + * + * Parse-Server 3.1.3+ Required for original object parameter + * + *

+ * subscription.on('update', (object, original, response) => {
+ *
+ * });

+ * + *

Enter Event - When an existing ParseObject's (original) old value doesn't fulfill the ParseQuery + * but its new value fulfills the ParseQuery, you'll get this event. The object is the + * ParseObject which enters the ParseQuery. Its content is the latest value of the ParseObject. + * + * Parse-Server 3.1.3+ Required for original object parameter + * + *

+ * subscription.on('enter', (object, original, response) => {
+ *
+ * });

+ * + * + *

Update Event - When an existing ParseObject's old value fulfills the ParseQuery but its new value + * doesn't fulfill the ParseQuery, you'll get this event. The object is the ParseObject + * which leaves the ParseQuery. Its content is the latest value of the ParseObject. + * + *

+ * subscription.on('leave', (object, response) => {
+ *
+ * });

+ * + * + *

Delete Event - When an existing ParseObject which fulfills the ParseQuery is deleted, you'll + * get this event. The object is the ParseObject which is deleted. + * + *

+ * subscription.on('delete', (object, response) => {
+ *
+ * });

+ * + * + *

Close Event - When the client loses the WebSocket connection to the LiveQuery + * server and we stop receiving events, you'll get this event. + * + *

+ * subscription.on('close', () => {
+ *
+ * });

+ * + * @alias Parse.LiveQuerySubscription + */ +declare class Subscription { + constructor(id: any, query: any, sessionToken: any); + id: any; + query: any; + sessionToken: any; + subscribePromise: Promise; + unsubscribePromise: Promise; + subscribed: boolean; + /** + * Close the subscription + * + * @returns {Promise} + */ + unsubscribe(): Promise; +} diff --git a/types/LocalDatastore.d.ts b/types/LocalDatastore.d.ts new file mode 100644 index 000000000..c8f461765 --- /dev/null +++ b/types/LocalDatastore.d.ts @@ -0,0 +1,36 @@ +export default LocalDatastore; +declare namespace LocalDatastore { + let isEnabled: boolean; + let isSyncing: boolean; + function fromPinWithName(name: string): Promise; + function pinWithName(name: string, value: any): Promise; + function unPinWithName(name: string): Promise; + function _getAllContents(): Promise; + function _getRawStorage(): Promise; + function _clear(): Promise; + function _handlePinAllWithName(name: string, objects: ParseObject[]): Promise; + function _handleUnPinAllWithName(name: string, objects: ParseObject[]): Promise; + function _getChildren(object: ParseObject): {}; + function _traverse(object: any, encountered: any): void; + function _serializeObjectsFromPinName(name: string): Promise; + function _serializeObject(objectKey: string, localDatastore: any): Promise; + function _updateObjectIfPinned(object: ParseObject): Promise; + function _destroyObjectIfPinned(object: ParseObject): Promise; + function _updateLocalIdForObject(localId: string, object: ParseObject): Promise; + /** + * Updates Local Datastore from Server + * + *
+     * await Parse.LocalDatastore.updateFromServer();
+     * 
+ * + * @function updateFromServer + * @name Parse.LocalDatastore.updateFromServer + * @static + */ + function updateFromServer(): Promise; + function getKeyForObject(object: any): string; + function getPinName(pinName: string): string; + function checkIfEnabled(): boolean; +} +import ParseObject from './ParseObject'; diff --git a/types/LocalDatastoreController.d.ts b/types/LocalDatastoreController.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/types/LocalDatastoreController.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/LocalDatastoreController.react-native.d.ts b/types/LocalDatastoreController.react-native.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/types/LocalDatastoreController.react-native.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/LocalDatastoreUtils.d.ts b/types/LocalDatastoreUtils.d.ts new file mode 100644 index 000000000..3fba166c3 --- /dev/null +++ b/types/LocalDatastoreUtils.d.ts @@ -0,0 +1,8 @@ +/** + * @flow + * @private + */ +export const DEFAULT_PIN: "_default"; +export const PIN_PREFIX: "parsePin_"; +export const OBJECT_PREFIX: "Parse_LDS_"; +export function isLocalDatastoreKey(key: string): boolean; diff --git a/types/ObjectStateMutations.d.ts b/types/ObjectStateMutations.d.ts new file mode 100644 index 000000000..c82bd0d6c --- /dev/null +++ b/types/ObjectStateMutations.d.ts @@ -0,0 +1,28 @@ +// @ts-nocheck +export function defaultState(): State; +export function setServerData(serverData: AttributeMap, attributes: AttributeMap): void; +export function setPendingOp(pendingOps: Array, attr: string, op: Op | null): void; +export function pushPendingState(pendingOps: Array): void; +export function popPendingState(pendingOps: Array): OpsMap; +export function mergeFirstPendingState(pendingOps: Array): void; +export function estimateAttribute(serverData: AttributeMap, pendingOps: Array, className: string, id: string | null, attr: string): mixed; +export function estimateAttributes(serverData: AttributeMap, pendingOps: Array, className: string, id: string | null): AttributeMap; +export function commitServerChanges(serverData: AttributeMap, objectCache: ObjectCache, changes: AttributeMap): void; +type AttributeMap = { + [attr: string]: any; +}; +type OpsMap = { + [attr: string]: Op; +}; +type ObjectCache = { + [attr: string]: string; +}; +type State = { + serverData: AttributeMap; + pendingOps: OpsMap[]; + objectCache: ObjectCache; + tasks: TaskQueue; + existed: boolean; +}; +import { Op } from './ParseOp'; +export {}; diff --git a/types/OfflineQuery.d.ts b/types/OfflineQuery.d.ts new file mode 100644 index 000000000..8c8c81b16 --- /dev/null +++ b/types/OfflineQuery.d.ts @@ -0,0 +1,17 @@ +export type RelativeTimeToDateResult = { + /** + * The conversion status, `error` if conversion failed or + * `success` if conversion succeeded. + */ + status: string; + /** + * The error message if conversion failed, or the relative + * time indication (`past`, `present`, `future`) if conversion succeeded. + */ + info: string; + /** + * The converted date, or `undefined` if conversion + * failed. + */ + result: Date | undefined; +}; diff --git a/types/Parse.d.ts b/types/Parse.d.ts new file mode 100644 index 000000000..db3020c86 --- /dev/null +++ b/types/Parse.d.ts @@ -0,0 +1,103 @@ +import EventuallyQueue from './EventuallyQueue'; +import * as ParseOp from './ParseOp'; +import ACL from './ParseACL'; +import * as Analytics from './Analytics'; +import AnonymousUtils from './AnonymousUtils'; +import * as Cloud from './Cloud'; +import CLP from './ParseCLP'; +import CoreManager from './CoreManager'; +import Config from './ParseConfig'; +import ParseError from './ParseError'; +import FacebookUtils from './FacebookUtils'; +import File from './ParseFile'; +import GeoPoint from './ParseGeoPoint'; +import Polygon from './ParsePolygon'; +import Installation from './ParseInstallation'; +import LocalDatastore from './LocalDatastore'; +import Object from './ParseObject'; +import * as Push from './Push'; +import Query from './ParseQuery'; +import Relation from './ParseRelation'; +import Role from './ParseRole'; +import Schema from './ParseSchema'; +import Session from './ParseSession'; +import Storage from './Storage'; +import User from './ParseUser'; +import LiveQuery from './ParseLiveQuery'; +import LiveQueryClient from './LiveQueryClient'; +/** + * Contains all Parse API classes and functions. + * + * @static + * @global + * @class + * @hideconstructor +*/ +interface ParseType { + ACL: typeof ACL; + Parse?: ParseType; + Analytics: typeof Analytics; + AnonymousUtils: typeof AnonymousUtils; + Cloud: typeof Cloud; + CLP: typeof CLP; + CoreManager: typeof CoreManager; + Config: typeof Config; + Error: typeof ParseError; + EventuallyQueue: typeof EventuallyQueue; + FacebookUtils: typeof FacebookUtils; + File: typeof File; + GeoPoint: typeof GeoPoint; + Hooks?: any; + Polygon: typeof Polygon; + Installation: typeof Installation; + LocalDatastore: typeof LocalDatastore; + Object: typeof Object; + Op: { + Set: typeof ParseOp.SetOp; + Unset: typeof ParseOp.UnsetOp; + Increment: typeof ParseOp.IncrementOp; + Add: typeof ParseOp.AddOp; + Remove: typeof ParseOp.RemoveOp; + AddUnique: typeof ParseOp.AddUniqueOp; + Relation: typeof ParseOp.RelationOp; + }; + Push: typeof Push; + Query: typeof Query; + Relation: typeof Relation; + Role: typeof Role; + Schema: typeof Schema; + Session: typeof Session; + Storage: typeof Storage; + User: typeof User; + LiveQuery: typeof LiveQuery; + LiveQueryClient: typeof LiveQueryClient; + initialize(applicationId: string, javaScriptKey: string): void; + _initialize(applicationId: string, javaScriptKey: string, masterKey?: string): void; + setAsyncStorage(storage: any): void; + setLocalDatastoreController(controller: any): void; + getServerHealth(): Promise; + applicationId: string; + javaScriptKey: string; + masterKey: string; + serverURL: string; + serverAuthToken: string; + serverAuthType: string; + liveQueryServerURL: string; + encryptedUser: boolean; + secret: string; + idempotency: boolean; + allowCustomObjectId: boolean; + IndexedDB?: any; + _request(...args: any[]): void; + _ajax(...args: any[]): void; + _decode(...args: any[]): void; + _encode(...args: any[]): void; + _getInstallationId?(): string; + enableLocalDatastore(polling: boolean, ms: number): void; + isLocalDatastoreEnabled(): boolean; + dumpLocalDatastore(): void; + enableEncryptedUser(): void; + isEncryptedUserEnabled(): void; +} +declare const Parse: ParseType; +export default Parse; diff --git a/types/ParseACL.d.ts b/types/ParseACL.d.ts new file mode 100644 index 000000000..3d29cf5ea --- /dev/null +++ b/types/ParseACL.d.ts @@ -0,0 +1,141 @@ +export default ParseACL; +/** + * Creates a new ACL. + * If no argument is given, the ACL has no permissions for anyone. + * If the argument is a Parse.User, the ACL will have read and write + * permission for only that user. + * If the argument is any other JSON object, that object will be interpretted + * as a serialized ACL created with toJSON(). + * + *

An ACL, or Access Control List can be added to any + * Parse.Object to restrict access to only a subset of users + * of your application.

+ * + * @alias Parse.ACL + */ +declare class ParseACL { + /** + * @param {(Parse.User | object)} arg1 The user to initialize the ACL for + */ + constructor(arg1: ParseUser | ByIdMap); + permissionsById: ByIdMap; + /** + * Returns a JSON-encoded version of the ACL. + * + * @returns {object} + */ + toJSON(): ByIdMap; + /** + * Returns whether this ACL is equal to another object + * + * @param {ParseACL} other The other object's ACL to compare to + * @returns {boolean} + */ + equals(other: ParseACL): boolean; + _setAccess(accessType: string, userId: ParseUser | ParseRole | string, allowed: boolean): void; + _getAccess(accessType: string, userId: ParseUser | ParseRole | string): boolean; + /** + * Sets whether the given user is allowed to read this object. + * + * @param userId An instance of Parse.User or its objectId. + * @param {boolean} allowed Whether that user should have read access. + */ + setReadAccess(userId: ParseUser | ParseRole | string, allowed: boolean): void; + /** + * Get whether the given user id is *explicitly* allowed to read this object. + * Even if this returns false, the user may still be able to access it if + * getPublicReadAccess returns true or a role that the user belongs to has + * write access. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role. + * @returns {boolean} + */ + getReadAccess(userId: ParseUser | ParseRole | string): boolean; + /** + * Sets whether the given user id is allowed to write this object. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role.. + * @param {boolean} allowed Whether that user should have write access. + */ + setWriteAccess(userId: ParseUser | ParseRole | string, allowed: boolean): void; + /** + * Gets whether the given user id is *explicitly* allowed to write this object. + * Even if this returns false, the user may still be able to write it if + * getPublicWriteAccess returns true or a role that the user belongs to has + * write access. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role. + * @returns {boolean} + */ + getWriteAccess(userId: ParseUser | ParseRole | string): boolean; + /** + * Sets whether the public is allowed to read this object. + * + * @param {boolean} allowed + */ + setPublicReadAccess(allowed: boolean): void; + /** + * Gets whether the public is allowed to read this object. + * + * @returns {boolean} + */ + getPublicReadAccess(): boolean; + /** + * Sets whether the public is allowed to write this object. + * + * @param {boolean} allowed + */ + setPublicWriteAccess(allowed: boolean): void; + /** + * Gets whether the public is allowed to write this object. + * + * @returns {boolean} + */ + getPublicWriteAccess(): boolean; + /** + * Gets whether users belonging to the given role are allowed + * to read this object. Even if this returns false, the role may + * still be able to write it if a parent role has read access. + * + * @param role The name of the role, or a Parse.Role object. + * @returns {boolean} true if the role has read access. false otherwise. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + getRoleReadAccess(role: ParseRole | string): boolean; + /** + * Gets whether users belonging to the given role are allowed + * to write this object. Even if this returns false, the role may + * still be able to write it if a parent role has write access. + * + * @param role The name of the role, or a Parse.Role object. + * @returns {boolean} true if the role has write access. false otherwise. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + getRoleWriteAccess(role: ParseRole | string): boolean; + /** + * Sets whether users belonging to the given role are allowed + * to read this object. + * + * @param role The name of the role, or a Parse.Role object. + * @param {boolean} allowed Whether the given role can read this object. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + setRoleReadAccess(role: ParseRole | string, allowed: boolean): void; + /** + * Sets whether users belonging to the given role are allowed + * to write this object. + * + * @param role The name of the role, or a Parse.Role object. + * @param {boolean} allowed Whether the given role can write this object. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + setRoleWriteAccess(role: ParseRole | string, allowed: boolean): void; +} +type ByIdMap = { + [userId: string]: PermissionsMap; +}; +import ParseUser from './ParseUser'; +import ParseRole from './ParseRole'; +type PermissionsMap = { + [permission: string]: boolean; +}; diff --git a/types/ParseCLP.d.ts b/types/ParseCLP.d.ts new file mode 100644 index 000000000..14b36e7d3 --- /dev/null +++ b/types/ParseCLP.d.ts @@ -0,0 +1,290 @@ +type PermissionsMap = { + [permission: string]: UsersMap; +}; +export default ParseCLP; +type UsersMap = { + [userId: string]: any; +}; +declare const UsersMap: any; +/** + * Creates a new CLP. + * If no argument is given, the CLP has no permissions for anyone. + * If the argument is a Parse.User or Parse.Role, the CLP will have read and write + * permission for only that user or role. + * If the argument is any other JSON object, that object will be interpretted + * as a serialized CLP created with toJSON(). + * + *

A CLP, or Class Level Permissions can be added to any + * Parse.Schema to restrict access to only a subset of users + * of your application.

+ * + *

+ * For get/count/find/create/update/delete/addField using the following functions: + * + * Entity is type Parse.User or Parse.Role or string + * Role is type Parse.Role or Name of Parse.Role + * + * getGetRequiresAuthentication() + * setGetRequiresAuthentication(allowed: boolean) + * getGetPointerFields() + * setGetPointerFields(pointerFields: string[]) + * getGetAccess(entity: Entity) + * setGetAccess(entity: Entity, allowed: boolean) + * getPublicGetAccess() + * setPublicGetAccess(allowed: boolean) + * getRoleGetAccess(role: Role) + * setRoleGetAccess(role: Role, allowed: boolean) + * getFindRequiresAuthentication() + * setFindRequiresAuthentication(allowed: boolean) + * getFindPointerFields() + * setFindPointerFields(pointerFields: string[]) + * getFindAccess(entity: Entity) + * setFindAccess(entity: Entity, allowed: boolean) + * getPublicFindAccess() + * setPublicFindAccess(allowed: boolean) + * getRoleFindAccess(role: Role) + * setRoleFindAccess(role: Role, allowed: boolean) + * getCountRequiresAuthentication() + * setCountRequiresAuthentication(allowed: boolean) + * getCountPointerFields() + * setCountPointerFields(pointerFields: string[]) + * getCountAccess(entity: Entity) + * setCountAccess(entity: Entity, allowed: boolean) + * getPublicCountAccess() + * setPublicCountAccess(allowed: boolean) + * getRoleCountAccess(role: Role) + * setRoleCountAccess(role: Role, allowed: boolean) + * getCreateRequiresAuthentication() + * setCreateRequiresAuthentication(allowed: boolean) + * getCreatePointerFields() + * setCreatePointerFields(pointerFields: string[]) + * getCreateAccess(entity: Entity) + * setCreateAccess(entity: Entity, allowed: boolean) + * getPublicCreateAccess() + * setPublicCreateAccess(allowed: Boolean) + * getRoleCreateAccess(role: Role) + * setRoleCreateAccess(role: Role, allowed: boolean) + * getUpdateRequiresAuthentication() + * setUpdateRequiresAuthentication(allowed: boolean) + * getUpdatePointerFields() + * setUpdatePointerFields(pointerFields: string[]) + * getUpdateAccess(entity: Entity) + * setUpdateAccess(entity: Entity, allowed: boolean) + * getPublicUpdateAccess() + * setPublicUpdateAccess(allowed: boolean) + * getRoleUpdateAccess(role: Role) + * setRoleUpdateAccess(role: Role, allowed: boolean) + * getDeleteRequiresAuthentication() + * setDeleteRequiresAuthentication(allowed: boolean) + * getDeletePointerFields() + * setDeletePointerFields(pointerFields: string[]) + * getDeleteAccess(entity: Entity) + * setDeleteAccess(entity: Entity, allowed: boolean) + * getPublicDeleteAccess() + * setPublicDeleteAccess(allowed: boolean) + * getRoleDeleteAccess(role: Role) + * setRoleDeleteAccess(role: Role, allowed: boolean) + * getAddFieldRequiresAuthentication() + * setAddFieldRequiresAuthentication(allowed: boolean) + * getAddFieldPointerFields() + * setAddFieldPointerFields(pointerFields: string[]) + * getAddFieldAccess(entity: Entity) + * setAddFieldAccess(entity: Entity, allowed: boolean) + * getPublicAddFieldAccess() + * setPublicAddFieldAccess(allowed: boolean) + * getRoleAddFieldAccess(role: Role) + * setRoleAddFieldAccess(role: Role, allowed: boolean) + *

+ * + * @alias Parse.CLP + */ +declare class ParseCLP { + /** + * @param {(Parse.User | Parse.Role | object)} userId The user to initialize the CLP for + */ + constructor(userId: ParseUser | ParseRole | PermissionsMap); + permissionsMap: PermissionsMap; + /** + * Returns a JSON-encoded version of the CLP. + * + * @returns {object} + */ + toJSON(): PermissionsMap; + /** + * Returns whether this CLP is equal to another object + * + * @param other The other object to compare to + * @returns {boolean} + */ + equals(other: ParseCLP): boolean; + _getRoleName(role: ParseRole | string): string; + _parseEntity(entity: any): string; + _setAccess(permission: string, userId: any, allowed: boolean): void; + _getAccess(permission: string, userId: any, returnBoolean?: boolean): boolean | string[]; + _setArrayAccess(permission: string, userId: any, fields: string): void; + _setGroupPointerPermission(operation: string, pointerFields: string[]): void; + _getGroupPointerPermissions(operation: string): string[]; + /** + * Sets user pointer fields to allow permission for get/count/find operations. + * + * @param {string[]} pointerFields User pointer fields + */ + setReadUserFields(pointerFields: string[]): void; + /** + * @returns {string[]} User pointer fields + */ + getReadUserFields(): string[]; + /** + * Sets user pointer fields to allow permission for create/delete/update/addField operations + * + * @param {string[]} pointerFields User pointer fields + */ + setWriteUserFields(pointerFields: string[]): void; + /** + * @returns {string[]} User pointer fields + */ + getWriteUserFields(): string[]; + /** + * Sets whether the given user is allowed to retrieve fields from this class. + * + * @param userId An instance of Parse.User or its objectId. + * @param {string[]} fields fields to be protected + */ + setProtectedFields(userId: any, fields: string[]): void; + /** + * Returns array of fields are accessable to this user. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role. + * @returns {string[]} + */ + getProtectedFields(userId: any): string[]; + /** + * Sets whether the given user is allowed to read from this class. + * + * @param userId An instance of Parse.User or its objectId. + * @param {boolean} allowed whether that user should have read access. + */ + setReadAccess(userId: any, allowed: boolean): void; + /** + * Get whether the given user id is *explicitly* allowed to read from this class. + * Even if this returns false, the user may still be able to access it if + * getPublicReadAccess returns true or a role that the user belongs to has + * write access. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role. + * @returns {boolean} + */ + getReadAccess(userId: any): boolean; + /** + * Sets whether the given user id is allowed to write to this class. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role.. + * @param {boolean} allowed Whether that user should have write access. + */ + setWriteAccess(userId: any, allowed: boolean): void; + /** + * Gets whether the given user id is *explicitly* allowed to write to this class. + * Even if this returns false, the user may still be able to write it if + * getPublicWriteAccess returns true or a role that the user belongs to has + * write access. + * + * @param userId An instance of Parse.User or its objectId, or a Parse.Role. + * @returns {boolean} + */ + getWriteAccess(userId: any): boolean; + /** + * Sets whether the public is allowed to read from this class. + * + * @param {boolean} allowed + */ + setPublicReadAccess(allowed: boolean): void; + /** + * Gets whether the public is allowed to read from this class. + * + * @returns {boolean} + */ + getPublicReadAccess(): boolean; + /** + * Sets whether the public is allowed to write to this class. + * + * @param {boolean} allowed + */ + setPublicWriteAccess(allowed: boolean): void; + /** + * Gets whether the public is allowed to write to this class. + * + * @returns {boolean} + */ + getPublicWriteAccess(): boolean; + /** + * Sets whether the public is allowed to protect fields in this class. + * + * @param {string[]} fields + */ + setPublicProtectedFields(fields: string[]): void; + /** + * Gets whether the public is allowed to read fields from this class. + * + * @returns {string[]} + */ + getPublicProtectedFields(): string[]; + /** + * Gets whether users belonging to the given role are allowed + * to read from this class. Even if this returns false, the role may + * still be able to write it if a parent role has read access. + * + * @param role The name of the role, or a Parse.Role object. + * @returns {boolean} true if the role has read access. false otherwise. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + getRoleReadAccess(role: ParseRole | string): boolean; + /** + * Gets whether users belonging to the given role are allowed + * to write to this user. Even if this returns false, the role may + * still be able to write it if a parent role has write access. + * + * @param role The name of the role, or a Parse.Role object. + * @returns {boolean} true if the role has write access. false otherwise. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + getRoleWriteAccess(role: ParseRole | string): boolean; + /** + * Sets whether users belonging to the given role are allowed + * to read from this class. + * + * @param role The name of the role, or a Parse.Role object. + * @param {boolean} allowed Whether the given role can read this object. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + setRoleReadAccess(role: ParseRole | string, allowed: boolean): void; + /** + * Sets whether users belonging to the given role are allowed + * to write to this class. + * + * @param role The name of the role, or a Parse.Role object. + * @param {boolean} allowed Whether the given role can write this object. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + setRoleWriteAccess(role: ParseRole | string, allowed: boolean): void; + /** + * Gets whether users belonging to the given role are allowed + * to count to this user. Even if this returns false, the role may + * still be able to count it if a parent role has count access. + * + * @param role The name of the role, or a Parse.Role object. + * @returns {string[]} + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + getRoleProtectedFields(role: ParseRole | string): string[]; + /** + * Sets whether users belonging to the given role are allowed + * to set access field in this class. + * + * @param role The name of the role, or a Parse.Role object. + * @param {string[]} fields Fields to be protected by Role. + * @throws {TypeError} If role is neither a Parse.Role nor a String. + */ + setRoleProtectedFields(role: ParseRole | string, fields: string[]): void; +} +import ParseRole from './ParseRole'; +import ParseUser from './ParseUser'; diff --git a/types/ParseConfig.d.ts b/types/ParseConfig.d.ts new file mode 100644 index 000000000..757f71f83 --- /dev/null +++ b/types/ParseConfig.d.ts @@ -0,0 +1,77 @@ +// @ts-nocheck +export default ParseConfig; +/** + * Parse.Config is a local representation of configuration data that + * can be set from the Parse dashboard. + * + * @alias Parse.Config + */ +declare class ParseConfig { + /** + * Retrieves the most recently-fetched configuration object, either from + * memory or from local storage if necessary. + * + * @static + * @returns {Parse.Config} The most recently-fetched Parse.Config if it + * exists, else an empty Parse.Config. + */ + static current(): Parse.Config; + /** + * Gets a new configuration object from the server. + * + * @static + * @param {object} options + * Valid options are:
    + *
  • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
+ * @returns {Promise} A promise that is resolved with a newly-created + * configuration object when the get completes. + */ + static get(options?: RequestOptions): Promise; + /** + * Save value keys to the server. + * + * @static + * @param {object} attrs The config parameters and values. + * @param {object} masterKeyOnlyFlags The flags that define whether config parameters listed + * in `attrs` should be retrievable only by using the master key. + * For example: `param1: true` makes `param1` only retrievable by using the master key. + * If a parameter is not provided or set to `false`, it can be retrieved without + * using the master key. + * @returns {Promise} A promise that is resolved with a newly-created + * configuration object or with the current with the update. + */ + static save(attrs: { + [key: string]: any; + }, masterKeyOnlyFlags: { + [key: string]: any; + }): Promise; + /** + * Used for testing + * + * @private + */ + private static _clearCache; + attributes: { + [key: string]: any; + }; + _escapedAttributes: { + [key: string]: any; + }; + /** + * Gets the value of an attribute. + * + * @param {string} attr The name of an attribute. + * @returns {*} + */ + get(attr: string): any; + /** + * Gets the HTML-escaped value of an attribute. + * + * @param {string} attr The name of an attribute. + * @returns {string} + */ + escape(attr: string): string; +} +import { RequestOptions } from './RESTController'; diff --git a/types/ParseError.d.ts b/types/ParseError.d.ts new file mode 100644 index 000000000..a276ae251 --- /dev/null +++ b/types/ParseError.d.ts @@ -0,0 +1,77 @@ +export default ParseError; +/** + * Constructs a new Parse.Error object with the given code and message. + * + * @alias Parse.Error + */ +declare class ParseError extends Error { + /** + * @param {number} code An error code constant from Parse.Error. + * @param {string} message A detailed description of the error. + */ + constructor(code: number, message: string); + code: number; +} +declare namespace ParseError { + let OTHER_CAUSE: number; + let INTERNAL_SERVER_ERROR: number; + let CONNECTION_FAILED: number; + let OBJECT_NOT_FOUND: number; + let INVALID_QUERY: number; + let INVALID_CLASS_NAME: number; + let MISSING_OBJECT_ID: number; + let INVALID_KEY_NAME: number; + let INVALID_POINTER: number; + let INVALID_JSON: number; + let COMMAND_UNAVAILABLE: number; + let NOT_INITIALIZED: number; + let INCORRECT_TYPE: number; + let INVALID_CHANNEL_NAME: number; + let PUSH_MISCONFIGURED: number; + let OBJECT_TOO_LARGE: number; + let OPERATION_FORBIDDEN: number; + let CACHE_MISS: number; + let INVALID_NESTED_KEY: number; + let INVALID_FILE_NAME: number; + let INVALID_ACL: number; + let TIMEOUT: number; + let INVALID_EMAIL_ADDRESS: number; + let MISSING_CONTENT_TYPE: number; + let MISSING_CONTENT_LENGTH: number; + let INVALID_CONTENT_LENGTH: number; + let FILE_TOO_LARGE: number; + let FILE_SAVE_ERROR: number; + let DUPLICATE_VALUE: number; + let INVALID_ROLE_NAME: number; + let EXCEEDED_QUOTA: number; + let SCRIPT_FAILED: number; + let VALIDATION_ERROR: number; + let INVALID_IMAGE_DATA: number; + let UNSAVED_FILE_ERROR: number; + let INVALID_PUSH_TIME_ERROR: number; + let FILE_DELETE_ERROR: number; + let FILE_DELETE_UNNAMED_ERROR: number; + let REQUEST_LIMIT_EXCEEDED: number; + let DUPLICATE_REQUEST: number; + let INVALID_EVENT_NAME: number; + let INVALID_VALUE: number; + let USERNAME_MISSING: number; + let PASSWORD_MISSING: number; + let USERNAME_TAKEN: number; + let EMAIL_TAKEN: number; + let EMAIL_MISSING: number; + let EMAIL_NOT_FOUND: number; + let SESSION_MISSING: number; + let MUST_CREATE_USER_THROUGH_SIGNUP: number; + let ACCOUNT_ALREADY_LINKED: number; + let INVALID_SESSION_TOKEN: number; + let MFA_ERROR: number; + let MFA_TOKEN_REQUIRED: number; + let LINKED_ID_MISSING: number; + let INVALID_LINKED_SESSION: number; + let UNSUPPORTED_SERVICE: number; + let INVALID_SCHEMA_OPERATION: number; + let AGGREGATE_ERROR: number; + let FILE_READ_ERROR: number; + let X_DOMAIN_REQUEST: number; +} diff --git a/types/ParseFile.d.ts b/types/ParseFile.d.ts new file mode 100644 index 000000000..704384901 --- /dev/null +++ b/types/ParseFile.d.ts @@ -0,0 +1,181 @@ +// @ts-nocheck +type FileSource = { + format: "file"; + file: Blob; + type: string; +} | { + format: "base64"; + base64: string; + type: string; +} | { + format: "uri"; + uri: string; + type: string; +}; +export default ParseFile; +/** + * A Parse.File is a local representation of a file that is saved to the Parse + * cloud. + * + * @alias Parse.File + */ +declare class ParseFile { + static fromJSON(obj: any): ParseFile; + static encodeBase64(bytes: Array): string; + /** + * @param name {String} The file's name. This will be prefixed by a unique + * value once the file has finished saving. The file name must begin with + * an alphanumeric character, and consist of alphanumeric characters, + * periods, spaces, underscores, or dashes. + * @param data {Array} The data for the file, as either: + * 1. an Array of byte value Numbers, or + * 2. an Object like { base64: "..." } with a base64-encoded String. + * 3. an Object like { uri: "..." } with a uri String. + * 4. a File object selected with a file upload control. (3) only works + * in Firefox 3.6+, Safari 6.0.2+, Chrome 7+, and IE 10+. + * For example: + *
+     * var fileUploadControl = $("#profilePhotoFileUpload")[0];
+     * if (fileUploadControl.files.length > 0) {
+     *   var file = fileUploadControl.files[0];
+     *   var name = "photo.jpg";
+     *   var parseFile = new Parse.File(name, file);
+     *   parseFile.save().then(function() {
+     *     // The file has been saved to Parse.
+     *   }, function(error) {
+     *     // The file either could not be read, or could not be saved to Parse.
+     *   });
+     * }
+ * @param type {String} Optional Content-Type header to use for the file. If + * this is omitted, the content type will be inferred from the name's + * extension. + * @param metadata {Object} Optional key value pairs to be stored with file object + * @param tags {Object} Optional key value pairs to be stored with file object + */ + constructor(name: string, data?: FileData, type?: string, metadata?: Object, tags?: Object); + _name: string; + _url: string | null; + _source: FileSource; + _previousSave: Promise | null; + _data: string | null; + _requestTask: any | null; + _metadata: Object | null; + _tags: Object | null; + /** + * Return the data for the file, downloading it if not already present. + * Data is present if initialized with Byte Array, Base64 or Saved with Uri. + * Data is cleared if saved with File object selected with a file upload control + * + * @returns {Promise} Promise that is resolve with base64 data + */ + getData(): Promise; + /** + * Gets the name of the file. Before save is called, this is the filename + * given by the user. After save is called, that name gets prefixed with a + * unique identifier. + * + * @returns {string} + */ + name(): string; + /** + * Gets the url of the file. It is only available after you save the file or + * after you get the file from a Parse.Object. + * + * @param {object} options An object to specify url options + * @returns {string | undefined} + */ + url(options?: { + forceSecure?: boolean; + }): string | null; + /** + * Gets the metadata of the file. + * + * @returns {object} + */ + metadata(): Object; + /** + * Gets the tags of the file. + * + * @returns {object} + */ + tags(): Object; + /** + * Saves the file to the Parse cloud. + * + * @param {object} options + * Valid options are:
    + *
  • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
  • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
  • progress: In Browser only, callback for upload progress. For example: + *
    +     * let parseFile = new Parse.File(name, file);
    +     * parseFile.save({
    +     *   progress: (progressValue, loaded, total, { type }) => {
    +     *     if (type === "upload" && progressValue !== null) {
    +     *       // Update the UI using progressValue
    +     *     }
    +     *   }
    +     * });
    +     * 
    + *
+ * @returns {Promise | undefined} Promise that is resolved when the save finishes. + */ + save(options?: FullOptions): Promise | null; + /** + * Aborts the request if it has already been sent. + */ + cancel(): void; + /** + * Deletes the file from the Parse cloud. + * In Cloud Code and Node only with Master Key. + * + * @param {object} options + * Valid options are:
    + *
  • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    +     * @returns {Promise} Promise that is resolved when the delete finishes.
    +     */
    +    destroy(options?: FullOptions): Promise;
    +    toJSON(): {
    +        name: string | null;
    +        url: string | null;
    +    };
    +    equals(other: mixed): boolean;
    +    /**
    +     * Sets metadata to be saved with file object. Overwrites existing metadata
    +     *
    +     * @param {object} metadata Key value pairs to be stored with file object
    +     */
    +    setMetadata(metadata: any): void;
    +    /**
    +     * Sets metadata to be saved with file object. Adds to existing metadata.
    +     *
    +     * @param {string} key key to store the metadata
    +     * @param {*} value metadata
    +     */
    +    addMetadata(key: string, value: any): void;
    +    /**
    +     * Sets tags to be saved with file object. Overwrites existing tags
    +     *
    +     * @param {object} tags Key value pairs to be stored with file object
    +     */
    +    setTags(tags: any): void;
    +    /**
    +     * Sets tags to be saved with file object. Adds to existing tags.
    +     *
    +     * @param {string} key key to store tags
    +     * @param {*} value tag
    +     */
    +    addTag(key: string, value: string): void;
    +}
    +import { FullOptions } from './RESTController';
    +type FileData = number[] | Blob | Base64 | Uri;
    +type Base64 = {
    +    base64: string;
    +};
    +type Uri = {
    +    uri: string;
    +};
    diff --git a/types/ParseGeoPoint.d.ts b/types/ParseGeoPoint.d.ts
    new file mode 100644
    index 000000000..9dfca7d53
    --- /dev/null
    +++ b/types/ParseGeoPoint.d.ts
    @@ -0,0 +1,98 @@
    +// @ts-nocheck
    +export default ParseGeoPoint;
    +/**
    + * @flow
    + */
    +/**
    + * Creates a new GeoPoint with any of the following forms:
    + *
    + *   new GeoPoint(otherGeoPoint)
    + *   new GeoPoint(30, 30)
    + *   new GeoPoint([30, 30])
    + *   new GeoPoint({latitude: 30, longitude: 30})
    + *   new GeoPoint()  // defaults to (0, 0)
    + *   
    + *

    Represents a latitude / longitude point that may be associated + * with a key in a ParseObject or used as a reference point for geo queries. + * This allows proximity-based queries on the key.

    + * + *

    Only one key in a class may contain a GeoPoint.

    + * + *

    Example:

    + *   var point = new Parse.GeoPoint(30.0, -20.0);
    + *   var object = new Parse.Object("PlaceObject");
    + *   object.set("location", point);
    + *   object.save();

    + * + * @alias Parse.GeoPoint + */ +declare class ParseGeoPoint { + static _validate(latitude: number, longitude: number): void; + /** + * Creates a GeoPoint with the user's current location, if available. + * + * @static + * @returns {Parse.GeoPoint} User's current location + */ + static current(): Parse.GeoPoint; + /** + * @param {(number[] | object | number)} arg1 Either a list of coordinate pairs, an object with `latitude`, `longitude`, or the latitude or the point. + * @param {number} arg2 The longitude of the GeoPoint + */ + constructor(arg1: Array | { + latitude: number; + longitude: number; + } | number, arg2?: number); + _latitude: number; + _longitude: number; + set latitude(arg: number); + /** + * North-south portion of the coordinate, in range [-90, 90]. + * Throws an exception if set out of range in a modern browser. + * + * @property {number} latitude + * @returns {number} + */ + get latitude(): number; + set longitude(arg: number); + /** + * East-west portion of the coordinate, in range [-180, 180]. + * Throws if set out of range in a modern browser. + * + * @property {number} longitude + * @returns {number} + */ + get longitude(): number; + /** + * Returns a JSON representation of the GeoPoint, suitable for Parse. + * + * @returns {object} + */ + toJSON(): { + __type: string; + latitude: number; + longitude: number; + }; + equals(other: mixed): boolean; + /** + * Returns the distance from this GeoPoint to another in radians. + * + * @param {Parse.GeoPoint} point the other Parse.GeoPoint. + * @returns {number} + */ + radiansTo(point: ParseGeoPoint): number; + /** + * Returns the distance from this GeoPoint to another in kilometers. + * + * @param {Parse.GeoPoint} point the other Parse.GeoPoint. + * @returns {number} + */ + kilometersTo(point: ParseGeoPoint): number; + /** + * Returns the distance from this GeoPoint to another in miles. + * + * @param {Parse.GeoPoint} point the other Parse.GeoPoint. + * @returns {number} + */ + milesTo(point: ParseGeoPoint): number; +} diff --git a/types/ParseInstallation.d.ts b/types/ParseInstallation.d.ts new file mode 100644 index 000000000..2a512fc6b --- /dev/null +++ b/types/ParseInstallation.d.ts @@ -0,0 +1,6 @@ +// @ts-nocheck +export default class Installation extends ParseObject { + constructor(attributes: AttributeMap | null); +} +import ParseObject from './ParseObject'; +import { AttributeMap } from './ObjectStateMutations'; diff --git a/types/ParseLiveQuery.d.ts b/types/ParseLiveQuery.d.ts new file mode 100644 index 000000000..6e98e68c1 --- /dev/null +++ b/types/ParseLiveQuery.d.ts @@ -0,0 +1,29 @@ +export default LiveQuery; +/** + * We expose three events to help you monitor the status of the WebSocket connection: + * + *

    Open - When we establish the WebSocket connection to the LiveQuery server, you'll get this event. + * + *

    + * Parse.LiveQuery.on('open', () => {
    + *
    + * });

    + * + *

    Close - When we lose the WebSocket connection to the LiveQuery server, you'll get this event. + * + *

    + * Parse.LiveQuery.on('close', () => {
    + *
    + * });

    + * + *

    Error - When some network error or LiveQuery server error happens, you'll get this event. + * + *

    + * Parse.LiveQuery.on('error', (error) => {
    + *
    + * });

    + * + * @class Parse.LiveQuery + * @static + */ +declare const LiveQuery: any; diff --git a/types/ParseObject.d.ts b/types/ParseObject.d.ts new file mode 100644 index 000000000..09eb14634 --- /dev/null +++ b/types/ParseObject.d.ts @@ -0,0 +1,1007 @@ +// @ts-nocheck +type Pointer = { + __type: string; + className: string; + objectId: string; +}; +export type SaveOptions = FullOptions & { + cascadeSave?: boolean; + context?: AttributeMap; +}; +export default ParseObject; +/** + * Creates a new model with defined attributes. + * + *

    You won't normally call this method directly. It is recommended that + * you use a subclass of Parse.Object instead, created by calling + * extend.

    + * + *

    However, if you don't want to use a subclass, or aren't sure which + * subclass is appropriate, you can use this form:

    + *     var object = new Parse.Object("ClassName");
    + * 
    + * That is basically equivalent to:
    + *     var MyClass = Parse.Object.extend("ClassName");
    + *     var object = new MyClass();
    + * 

    + * + * @alias Parse.Object + */ +declare class ParseObject { + static _getClassMap(): {}; + static _clearAllState(): void; + /** + * Fetches the given list of Parse.Object. + * If any error is encountered, stops and calls the error handler. + * + *
    +     *   Parse.Object.fetchAll([object1, object2, ...])
    +     *    .then((list) => {
    +     *      // All the objects were fetched.
    +     *    }, (error) => {
    +     *      // An error occurred while fetching one of the objects.
    +     *    });
    +     * 
    + * + * @param {Array} list A list of Parse.Object. + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • include: The name(s) of the key(s) to include. Can be a string, an array of strings, + * or an array of array of strings. + *
    + * @static + * @returns {Parse.Object[]} + */ + static fetchAll(list: Array, options?: RequestOptions): Parse.Object[]; + /** + * Fetches the given list of Parse.Object. + * + * Includes nested Parse.Objects for the provided key. You can use dot + * notation to specify which fields in the included object are also fetched. + * + * If any error is encountered, stops and calls the error handler. + * + *
    +     *   Parse.Object.fetchAllWithInclude([object1, object2, ...], [pointer1, pointer2, ...])
    +     *    .then((list) => {
    +     *      // All the objects were fetched.
    +     *    }, (error) => {
    +     *      // An error occurred while fetching one of the objects.
    +     *    });
    +     * 
    + * + * @param {Array} list A list of Parse.Object. + * @param {string | Array>} keys The name(s) of the key(s) to include. + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @static + * @returns {Parse.Object[]} + */ + static fetchAllWithInclude(list: Array, keys: String | Array>, options: RequestOptions): Parse.Object[]; + /** + * Fetches the given list of Parse.Object if needed. + * If any error is encountered, stops and calls the error handler. + * + * Includes nested Parse.Objects for the provided key. You can use dot + * notation to specify which fields in the included object are also fetched. + * + * If any error is encountered, stops and calls the error handler. + * + *
    +     *   Parse.Object.fetchAllIfNeededWithInclude([object1, object2, ...], [pointer1, pointer2, ...])
    +     *    .then((list) => {
    +     *      // All the objects were fetched.
    +     *    }, (error) => {
    +     *      // An error occurred while fetching one of the objects.
    +     *    });
    +     * 
    + * + * @param {Array} list A list of Parse.Object. + * @param {string | Array>} keys The name(s) of the key(s) to include. + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @static + * @returns {Parse.Object[]} + */ + static fetchAllIfNeededWithInclude(list: Array, keys: String | Array>, options: RequestOptions): Parse.Object[]; + /** + * Fetches the given list of Parse.Object if needed. + * If any error is encountered, stops and calls the error handler. + * + *
    +     *   Parse.Object.fetchAllIfNeeded([object1, ...])
    +     *    .then((list) => {
    +     *      // Objects were fetched and updated.
    +     *    }, (error) => {
    +     *      // An error occurred while fetching one of the objects.
    +     *    });
    +     * 
    + * + * @param {Array} list A list of Parse.Object. + * @param {object} options + * @static + * @returns {Parse.Object[]} + */ + static fetchAllIfNeeded(list: Array, options: object): Parse.Object[]; + static handleIncludeOptions(options: any): any[]; + /** + * Destroy the given list of models on the server if it was already persisted. + * + *

    Unlike saveAll, if an error occurs while deleting an individual model, + * this method will continue trying to delete the rest of the models if + * possible, except in the case of a fatal error like a connection error. + * + *

    In particular, the Parse.Error object returned in the case of error may + * be one of two types: + * + *

      + *
    • A Parse.Error.AGGREGATE_ERROR. This object's "errors" property is an + * array of other Parse.Error objects. Each error object in this array + * has an "object" property that references the object that could not be + * deleted (for instance, because that object could not be found).
    • + *
    • A non-aggregate Parse.Error. This indicates a serious error that + * caused the delete operation to be aborted partway through (for + * instance, a connection failure in the middle of the delete).
    • + *
    + * + *
    +     * Parse.Object.destroyAll([object1, object2, ...])
    +     * .then((list) => {
    +     * // All the objects were deleted.
    +     * }, (error) => {
    +     * // An error occurred while deleting one or more of the objects.
    +     * // If this is an aggregate error, then we can inspect each error
    +     * // object individually to determine the reason why a particular
    +     * // object was not deleted.
    +     * if (error.code === Parse.Error.AGGREGATE_ERROR) {
    +     * for (var i = 0; i < error.errors.length; i++) {
    +     * console.log("Couldn't delete " + error.errors[i].object.id +
    +     * "due to " + error.errors[i].message);
    +     * }
    +     * } else {
    +     * console.log("Delete aborted because of " + error.message);
    +     * }
    +     * });
    +     * 
    + * + * @param {Array} list A list of Parse.Object. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled when the destroyAll + * completes. + */ + static destroyAll(list: Array, options?: object): Promise; + /** + * Saves the given list of Parse.Object. + * If any error is encountered, stops and calls the error handler. + * + *
    +     * Parse.Object.saveAll([object1, object2, ...])
    +     * .then((list) => {
    +     * // All the objects were saved.
    +     * }, (error) => {
    +     * // An error occurred while saving one of the objects.
    +     * });
    +     * 
    + * + * @param {Array} list A list of Parse.Object. + * @param {object} options + * @static + * @returns {Parse.Object[]} + */ + static saveAll(list: Array, options?: RequestOptions): Parse.Object[]; + /** + * Creates a reference to a subclass of Parse.Object with the given id. This + * does not exist on Parse.Object, only on subclasses. + * + *

    A shortcut for:

    +     *  var Foo = Parse.Object.extend("Foo");
    +     *  var pointerToFoo = new Foo();
    +     *  pointerToFoo.id = "myObjectId";
    +     * 
    + * + * @param {string} id The ID of the object to create a reference to. + * @static + * @returns {Parse.Object} A Parse.Object reference. + */ + static createWithoutData(id: string): Parse.Object; + /** + * Creates a new instance of a Parse Object from a JSON representation. + * + * @param {object} json The JSON map of the Object's data + * @param {boolean} override In single instance mode, all old server data + * is overwritten if this is set to true + * @param {boolean} dirty Whether the Parse.Object should set JSON keys to dirty + * @static + * @returns {Parse.Object} A Parse.Object reference + */ + static fromJSON(json: any, override?: boolean, dirty?: boolean): Parse.Object; + /** + * Registers a subclass of Parse.Object with a specific class name. + * When objects of that class are retrieved from a query, they will be + * instantiated with this subclass. + * This is only necessary when using ES6 subclassing. + * + * @param {string} className The class name of the subclass + * @param {Function} constructor The subclass + */ + static registerSubclass(className: string, constructor: any): void; + /** + * Unegisters a subclass of Parse.Object with a specific class name. + * + * @param {string} className The class name of the subclass + */ + static unregisterSubclass(className: string): void; + /** + * Creates a new subclass of Parse.Object for the given Parse class name. + * + *

    Every extension of a Parse class will inherit from the most recent + * previous extension of that class. When a Parse.Object is automatically + * created by parsing JSON, it will use the most recent extension of that + * class.

    + * + *

    You should call either:

    +     *     var MyClass = Parse.Object.extend("MyClass", {
    +     *         Instance methods,
    +     *         initialize: function(attrs, options) {
    +     *             this.someInstanceProperty = [],
    +     *             Other instance properties
    +     *         }
    +     *     }, {
    +     *         Class properties
    +     *     });
    + * or, for Backbone compatibility:
    +     *     var MyClass = Parse.Object.extend({
    +     *         className: "MyClass",
    +     *         Instance methods,
    +     *         initialize: function(attrs, options) {
    +     *             this.someInstanceProperty = [],
    +     *             Other instance properties
    +     *         }
    +     *     }, {
    +     *         Class properties
    +     *     });

    + * + * @param {string} className The name of the Parse class backing this model. + * @param {object} protoProps Instance properties to add to instances of the + * class returned from this method. + * @param {object} classProps Class properties to add the class returned from + * this method. + * @returns {Parse.Object} A new subclass of Parse.Object. + */ + static extend(className: any, protoProps: any, classProps: any): Parse.Object; + /** + * Enable single instance objects, where any local objects with the same Id + * share the same attributes, and stay synchronized with each other. + * This is disabled by default in server environments, since it can lead to + * security issues. + * + * @static + */ + static enableSingleInstance(): void; + /** + * Disable single instance objects, where any local objects with the same Id + * share the same attributes, and stay synchronized with each other. + * When disabled, you can have two instances of the same object in memory + * without them sharing attributes. + * + * @static + */ + static disableSingleInstance(): void; + /** + * Asynchronously stores the objects and every object they point to in the local datastore, + * recursively, using a default pin name: _default. + * + * If those other objects have not been fetched from Parse, they will not be stored. + * However, if they have changed data, all the changes will be retained. + * + *
    +     * await Parse.Object.pinAll([...]);
    +     * 
    + * + * To retrieve object: + * query.fromLocalDatastore() or query.fromPin() + * + * @param {Array} objects A list of Parse.Object. + * @returns {Promise} A promise that is fulfilled when the pin completes. + * @static + */ + static pinAll(objects: Array): Promise; + /** + * Asynchronously stores the objects and every object they point to in the local datastore, recursively. + * + * If those other objects have not been fetched from Parse, they will not be stored. + * However, if they have changed data, all the changes will be retained. + * + *
    +     * await Parse.Object.pinAllWithName(name, [obj1, obj2, ...]);
    +     * 
    + * + * To retrieve object: + * query.fromLocalDatastore() or query.fromPinWithName(name) + * + * @param {string} name Name of Pin. + * @param {Array} objects A list of Parse.Object. + * @returns {Promise} A promise that is fulfilled when the pin completes. + * @static + */ + static pinAllWithName(name: string, objects: Array): Promise; + /** + * Asynchronously removes the objects and every object they point to in the local datastore, + * recursively, using a default pin name: _default. + * + *
    +     * await Parse.Object.unPinAll([...]);
    +     * 
    + * + * @param {Array} objects A list of Parse.Object. + * @returns {Promise} A promise that is fulfilled when the unPin completes. + * @static + */ + static unPinAll(objects: Array): Promise; + /** + * Asynchronously removes the objects and every object they point to in the local datastore, recursively. + * + *
    +     * await Parse.Object.unPinAllWithName(name, [obj1, obj2, ...]);
    +     * 
    + * + * @param {string} name Name of Pin. + * @param {Array} objects A list of Parse.Object. + * @returns {Promise} A promise that is fulfilled when the unPin completes. + * @static + */ + static unPinAllWithName(name: string, objects: Array): Promise; + /** + * Asynchronously removes all objects in the local datastore using a default pin name: _default. + * + *
    +     * await Parse.Object.unPinAllObjects();
    +     * 
    + * + * @returns {Promise} A promise that is fulfilled when the unPin completes. + * @static + */ + static unPinAllObjects(): Promise; + /** + * Asynchronously removes all objects with the specified pin name. + * Deletes the pin name also. + * + *
    +     * await Parse.Object.unPinAllObjectsWithName(name);
    +     * 
    + * + * @param {string} name Name of Pin. + * @returns {Promise} A promise that is fulfilled when the unPin completes. + * @static + */ + static unPinAllObjectsWithName(name: string): Promise; + /** + * @param {string} className The class name for the object + * @param {object} attributes The initial set of data to store in the object. + * @param {object} options The options for this object instance. + */ + constructor(className: string | { + [attr: string]: mixed; + className: string; + }, attributes?: { + [attr: string]: mixed; + }, options?: { + ignoreValidation: boolean; + }, ...args: any[]); + _objCount: number; + className: string; + /** + * The ID of this object, unique within its class. + * + * @property {string} id + */ + id: string | null; + _localId: string | null; + get attributes(): AttributeMap; + /** + * The first time this object was saved on the server. + * + * @property {Date} createdAt + * @returns {Date} + */ + get createdAt(): Date; + /** + * The last time this object was updated on the server. + * + * @property {Date} updatedAt + * @returns {Date} + */ + get updatedAt(): Date; + /** + * Returns a local or server Id used uniquely identify this object + * + * @returns {string} + */ + _getId(): string; + /** + * Returns a unique identifier used to pull data from the State Controller. + * + * @returns {Parse.Object|object} + */ + _getStateIdentifier(): ParseObject | { + id: string; + className: string; + }; + _getServerData(): AttributeMap; + _clearServerData(): void; + _getPendingOps(): Array; + /** + * @param {Array} [keysToClear] - if specified, only ops matching + * these fields will be cleared + */ + _clearPendingOps(keysToClear?: Array): void; + _getDirtyObjectAttributes(): AttributeMap; + _toFullJSON(seen?: Array, offline?: boolean): AttributeMap; + _getSaveJSON(): AttributeMap; + _getSaveParams(): SaveParams; + _finishFetch(serverData: AttributeMap): void; + _setExisted(existed: boolean): void; + _migrateId(serverId: string): void; + _handleSaveResponse(response: AttributeMap, status: number): void; + _handleSaveError(): void; + initialize(): void; + /** + * Returns a JSON version of the object suitable for saving to Parse. + * + * @param seen + * @param offline + * @returns {object} + */ + toJSON(seen: Array | void, offline?: boolean): AttributeMap; + /** + * Determines whether this ParseObject is equal to another ParseObject + * + * @param {object} other - An other object ot compare + * @returns {boolean} + */ + equals(other: mixed): boolean; + /** + * Returns true if this object has been modified since its last + * save/refresh. If an attribute is specified, it returns true only if that + * particular attribute has been modified since the last save/refresh. + * + * @param {string} attr An attribute name (optional). + * @returns {boolean} + */ + dirty(attr?: string): boolean; + /** + * Returns an array of keys that have been modified since last save/refresh + * + * @returns {string[]} + */ + dirtyKeys(): Array; + /** + * Returns true if the object has been fetched. + * + * @returns {boolean} + */ + isDataAvailable(): boolean; + /** + * Gets a Pointer referencing this Object. + * + * @returns {Pointer} + */ + toPointer(): Pointer; + /** + * Gets a Pointer referencing this Object. + * + * @returns {Pointer} + */ + toOfflinePointer(): Pointer; + /** + * Gets the value of an attribute. + * + * @param {string} attr The string name of an attribute. + * @returns {*} + */ + get(attr: string): mixed; + /** + * Gets a relation on the given class for the attribute. + * + * @param {string} attr The attribute to get the relation for. + * @returns {Parse.Relation} + */ + relation(attr: string): ParseRelation; + /** + * Gets the HTML-escaped value of an attribute. + * + * @param {string} attr The string name of an attribute. + * @returns {string} + */ + escape(attr: string): string; + /** + * Returns true if the attribute contains a value that is not + * null or undefined. + * + * @param {string} attr The string name of the attribute. + * @returns {boolean} + */ + has(attr: string): boolean; + /** + * Sets a hash of model attributes on the object. + * + *

    You can call it with an object containing keys and values, with one + * key and value, or dot notation. For example:

    +     *   gameTurn.set({
    +     *     player: player1,
    +     *     diceRoll: 2
    +     *   }, {
    +     *     error: function(gameTurnAgain, error) {
    +     *       // The set failed validation.
    +     *     }
    +     *   });
    +     *
    +     *   game.set("currentPlayer", player2, {
    +     *     error: function(gameTurnAgain, error) {
    +     *       // The set failed validation.
    +     *     }
    +     *   });
    +     *
    +     *   game.set("finished", true);

    + * + * game.set("player.score", 10);

    + * + * @param {(string|object)} key The key to set. + * @param {(string|object)} value The value to give it. + * @param {object} options A set of options for the set. + * The only supported option is error. + * @returns {(ParseObject|boolean)} true if the set succeeded. + */ + set(key: mixed, value: mixed, options?: mixed): ParseObject | boolean; + /** + * Remove an attribute from the model. This is a noop if the attribute doesn't + * exist. + * + * @param {string} attr The string name of an attribute. + * @param options + * @returns {(ParseObject | boolean)} + */ + unset(attr: string, options?: { + [opt: string]: mixed; + }): ParseObject | boolean; + /** + * Atomically increments the value of the given attribute the next time the + * object is saved. If no amount is specified, 1 is used by default. + * + * @param attr {String} The key. + * @param amount {Number} The amount to increment by (optional). + * @returns {(ParseObject|boolean)} + */ + increment(attr: string, amount?: number): ParseObject | boolean; + /** + * Atomically decrements the value of the given attribute the next time the + * object is saved. If no amount is specified, 1 is used by default. + * + * @param attr {String} The key. + * @param amount {Number} The amount to decrement by (optional). + * @returns {(ParseObject | boolean)} + */ + decrement(attr: string, amount?: number): ParseObject | boolean; + /** + * Atomically add an object to the end of the array associated with a given + * key. + * + * @param attr {String} The key. + * @param item {} The item to add. + * @returns {(ParseObject | boolean)} + */ + add(attr: string, item: mixed): ParseObject | boolean; + /** + * Atomically add the objects to the end of the array associated with a given + * key. + * + * @param attr {String} The key. + * @param items {Object[]} The items to add. + * @returns {(ParseObject | boolean)} + */ + addAll(attr: string, items: Array): ParseObject | boolean; + /** + * Atomically add an object to the array associated with a given key, only + * if it is not already present in the array. The position of the insert is + * not guaranteed. + * + * @param attr {String} The key. + * @param item {} The object to add. + * @returns {(ParseObject | boolean)} + */ + addUnique(attr: string, item: mixed): ParseObject | boolean; + /** + * Atomically add the objects to the array associated with a given key, only + * if it is not already present in the array. The position of the insert is + * not guaranteed. + * + * @param attr {String} The key. + * @param items {Object[]} The objects to add. + * @returns {(ParseObject | boolean)} + */ + addAllUnique(attr: string, items: Array): ParseObject | boolean; + /** + * Atomically remove all instances of an object from the array associated + * with a given key. + * + * @param attr {String} The key. + * @param item {} The object to remove. + * @returns {(ParseObject | boolean)} + */ + remove(attr: string, item: mixed): ParseObject | boolean; + /** + * Atomically remove all instances of the objects from the array associated + * with a given key. + * + * @param attr {String} The key. + * @param items {Object[]} The object to remove. + * @returns {(ParseObject | boolean)} + */ + removeAll(attr: string, items: Array): ParseObject | boolean; + /** + * Returns an instance of a subclass of Parse.Op describing what kind of + * modification has been performed on this field since the last time it was + * saved. For example, after calling object.increment("x"), calling + * object.op("x") would return an instance of Parse.Op.Increment. + * + * @param attr {String} The key. + * @returns {Parse.Op | undefined} The operation, or undefined if none. + */ + op(attr: string): Op | null; + /** + * Creates a new model with identical attributes to this one. + * + * @returns {Parse.Object} + */ + clone(): any; + /** + * Creates a new instance of this object. Not to be confused with clone() + * + * @returns {Parse.Object} + */ + newInstance(): any; + /** + * Returns true if this object has never been saved to Parse. + * + * @returns {boolean} + */ + isNew(): boolean; + /** + * Returns true if this object was created by the Parse server when the + * object might have already been there (e.g. in the case of a Facebook + * login) + * + * @returns {boolean} + */ + existed(): boolean; + /** + * Returns true if this object exists on the Server + * + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A boolean promise that is fulfilled if object exists. + */ + exists(options?: RequestOptions): Promise; + /** + * Checks if the model is currently in a valid state. + * + * @returns {boolean} + */ + isValid(): boolean; + /** + * You should not call this function directly unless you subclass + * Parse.Object, in which case you can override this method + * to provide additional validation on set and + * save. Your implementation should return + * + * @param {object} attrs The current data to validate. + * @returns {Parse.Error|boolean} False if the data is valid. An error object otherwise. + * @see Parse.Object#set + */ + validate(attrs: AttributeMap): ParseError | boolean; + /** + * Returns the ACL for this object. + * + * @returns {Parse.ACL} An instance of Parse.ACL. + * @see Parse.Object#get + */ + getACL(): ParseACL | null; + /** + * Sets the ACL to be used for this object. + * + * @param {Parse.ACL} acl An instance of Parse.ACL. + * @param {object} options + * @returns {(ParseObject | boolean)} Whether the set passed validation. + * @see Parse.Object#set + */ + setACL(acl: ParseACL, options?: mixed): ParseObject | boolean; + /** + * Clears any (or specific) changes to this object made since the last call to save() + * + * @param {string} [keys] - specify which fields to revert + */ + revert(...keys?: Array): void; + /** + * Clears all attributes on a model + * + * @returns {(ParseObject | boolean)} + */ + clear(): ParseObject | boolean; + /** + * Fetch the model from the server. If the server's representation of the + * model differs from its current attributes, they will be overriden. + * + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • include: The name(s) of the key(s) to include. Can be a string, an array of strings, + * or an array of array of strings. + *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. + *
    + * @returns {Promise} A promise that is fulfilled when the fetch + * completes. + */ + fetch(options: RequestOptions): Promise; + /** + * Fetch the model from the server. If the server's representation of the + * model differs from its current attributes, they will be overriden. + * + * Includes nested Parse.Objects for the provided key. You can use dot + * notation to specify which fields in the included object are also fetched. + * + * @param {string | Array>} keys The name(s) of the key(s) to include. + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that is fulfilled when the fetch + * completes. + */ + fetchWithInclude(keys: String | Array>, options: RequestOptions): Promise; + /** + * Saves this object to the server at some unspecified time in the future, + * even if Parse is currently inaccessible. + * + * Use this when you may not have a solid network connection, and don't need to know when the save completes. + * If there is some problem with the object such that it can't be saved, it will be silently discarded. + * + * Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to Parse. + * They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is + * available. Objects saved this way will persist even after the app is closed, in which case they will be sent the + * next time the app is opened. + * + * @param {object} [options] + * Used to pass option parameters to method if arg1 and arg2 were both passed as strings. + * Valid options are: + *
      + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • cascadeSave: If `false`, nested objects will not be saved (default is `true`). + *
    • context: A dictionary that is accessible in Cloud Code `beforeSave` and `afterSave` triggers. + *
    + * @returns {Promise} A promise that is fulfilled when the save + * completes. + */ + saveEventually(options?: SaveOptions): Promise; + /** + * Set a hash of model attributes, and save the model to the server. + * updatedAt will be updated when the request returns. + * You can either call it as:
    +     * object.save();
    + * or
    +     * object.save(attrs);
    + * or
    +     * object.save(null, options);
    + * or
    +     * object.save(attrs, options);
    + * or
    +     * object.save(key, value);
    + * or
    +     * object.save(key, value, options);
    + * + * Example 1:
    +     * gameTurn.save({
    +     * player: "Jake Cutter",
    +     * diceRoll: 2
    +     * }).then(function(gameTurnAgain) {
    +     * // The save was successful.
    +     * }, function(error) {
    +     * // The save failed.  Error is an instance of Parse.Error.
    +     * });
    + * + * Example 2:
    +     * gameTurn.save("player", "Jake Cutter");
    + * + * @param {string | object | null} [arg1] + * Valid options are:
      + *
    • `Object` - Key/value pairs to update on the object.
    • + *
    • `String` Key - Key of attribute to update (requires arg2 to also be string)
    • + *
    • `null` - Passing null for arg1 allows you to save the object with options passed in arg2.
    • + *
    + * @param {string | object} [arg2] + *
      + *
    • `String` Value - If arg1 was passed as a key, arg2 is the value that should be set on that key.
    • + *
    • `Object` Options - Valid options are: + *
        + *
      • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
      • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
      • cascadeSave: If `false`, nested objects will not be saved (default is `true`). + *
      • context: A dictionary that is accessible in Cloud Code `beforeSave` and `afterSave` triggers. + *
      + *
    • + *
    + * @param {object} [arg3] + * Used to pass option parameters to method if arg1 and arg2 were both passed as strings. + * Valid options are: + *
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • cascadeSave: If `false`, nested objects will not be saved (default is `true`). + *
    • context: A dictionary that is accessible in Cloud Code `beforeSave` and `afterSave` triggers. + *
    + * @returns {Promise} A promise that is fulfilled when the save + * completes. + */ + save(arg1?: string | { + [attr: string]: mixed; + }, arg2?: SaveOptions | mixed, arg3?: SaveOptions): Promise; + /** + * Deletes this object from the server at some unspecified time in the future, + * even if Parse is currently inaccessible. + * + * Use this when you may not have a solid network connection, + * and don't need to know when the delete completes. If there is some problem with the object + * such that it can't be deleted, the request will be silently discarded. + * + * Delete instructions made with this method will be stored locally in an on-disk cache until they can be transmitted + * to Parse. They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection + * is available. Delete requests will persist even after the app is closed, in which case they will be sent the + * next time the app is opened. + * + * @param {object} [options] + * Valid options are:
      + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • context: A dictionary that is accessible in Cloud Code `beforeDelete` and `afterDelete` triggers. + *
    + * @returns {Promise} A promise that is fulfilled when the destroy + * completes. + */ + destroyEventually(options?: RequestOptions): Promise; + /** + * Destroy this model on the server if it was already persisted. + * + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • context: A dictionary that is accessible in Cloud Code `beforeDelete` and `afterDelete` triggers. + *
    + * @returns {Promise} A promise that is fulfilled when the destroy + * completes. + */ + destroy(options: RequestOptions): Promise; + /** + * Asynchronously stores the object and every object it points to in the local datastore, + * recursively, using a default pin name: _default. + * + * If those other objects have not been fetched from Parse, they will not be stored. + * However, if they have changed data, all the changes will be retained. + * + *
    +     * await object.pin();
    +     * 
    + * + * To retrieve object: + * query.fromLocalDatastore() or query.fromPin() + * + * @returns {Promise} A promise that is fulfilled when the pin completes. + */ + pin(): Promise; + /** + * Asynchronously removes the object and every object it points to in the local datastore, + * recursively, using a default pin name: _default. + * + *
    +     * await object.unPin();
    +     * 
    + * + * @returns {Promise} A promise that is fulfilled when the unPin completes. + */ + unPin(): Promise; + /** + * Asynchronously returns if the object is pinned + * + *
    +     * const isPinned = await object.isPinned();
    +     * 
    + * + * @returns {Promise} A boolean promise that is fulfilled if object is pinned. + */ + isPinned(): Promise; + /** + * Asynchronously stores the objects and every object they point to in the local datastore, recursively. + * + * If those other objects have not been fetched from Parse, they will not be stored. + * However, if they have changed data, all the changes will be retained. + * + *
    +     * await object.pinWithName(name);
    +     * 
    + * + * To retrieve object: + * query.fromLocalDatastore() or query.fromPinWithName(name) + * + * @param {string} name Name of Pin. + * @returns {Promise} A promise that is fulfilled when the pin completes. + */ + pinWithName(name: string): Promise; + /** + * Asynchronously removes the object and every object it points to in the local datastore, recursively. + * + *
    +     * await object.unPinWithName(name);
    +     * 
    + * + * @param {string} name Name of Pin. + * @returns {Promise} A promise that is fulfilled when the unPin completes. + */ + unPinWithName(name: string): Promise; + /** + * Asynchronously loads data from the local datastore into this object. + * + *
    +     * await object.fetchFromLocalDatastore();
    +     * 
    + * + * You can create an unfetched pointer with Parse.Object.createWithoutData() + * and then call fetchFromLocalDatastore() on it. + * + * @returns {Promise} A promise that is fulfilled when the fetch completes. + */ + fetchFromLocalDatastore(): Promise; +} +import { AttributeMap as AttributeMap_1 } from './ObjectStateMutations'; +import { OpsMap } from './ObjectStateMutations'; +type SaveParams = { + method: string; + path: string; + body: AttributeMap; +}; +import ParseRelation from './ParseRelation'; +import { Op } from './ParseOp'; +import { RequestOptions } from './RESTController'; +import ParseError from './ParseError'; +import ParseACL from './ParseACL'; diff --git a/types/ParseOp.d.ts b/types/ParseOp.d.ts new file mode 100644 index 000000000..5faf58b30 --- /dev/null +++ b/types/ParseOp.d.ts @@ -0,0 +1,77 @@ +// @ts-nocheck +export function opFromJSON(json: { + [key: string]: any; +}): Op | null; +export class Op { + applyTo(value: mixed): mixed; + mergeWith(previous: Op): Op | null; + toJSON(): mixed; +} +export class SetOp extends Op { + constructor(value: mixed); + _value: mixed; + applyTo(): mixed; + mergeWith(): SetOp; + toJSON(offline?: boolean): any; +} +export class UnsetOp extends Op { + applyTo(): any; + mergeWith(): UnsetOp; + toJSON(): { + __op: string; + }; +} +export class IncrementOp extends Op { + constructor(amount: number); + _amount: number; + applyTo(value: mixed): number; + toJSON(): { + __op: string; + amount: number; + }; +} +export class AddOp extends Op { + constructor(value: mixed | Array); + _value: Array; + applyTo(value: mixed): Array; + toJSON(): { + __op: string; + objects: mixed; + }; +} +export class AddUniqueOp extends Op { + constructor(value: mixed | Array); + _value: Array; + applyTo(value: mixed | Array): Array; + toJSON(): { + __op: string; + objects: mixed; + }; +} +export class RemoveOp extends Op { + constructor(value: mixed | Array); + _value: Array; + applyTo(value: mixed | Array): Array; + toJSON(): { + __op: string; + objects: mixed; + }; +} +export class RelationOp extends Op { + constructor(adds: Array, removes: Array); + _targetClassName: string | null; + relationsToAdd: Array; + relationsToRemove: Array; + _extractId(obj: string | ParseObject): string; + applyTo(value: mixed, object?: { + className: string; + id: string | null; + }, key?: string): ParseRelation | null; + toJSON(): { + __op?: string; + objects?: mixed; + ops?: mixed; + }; +} +import ParseObject from './ParseObject'; +import ParseRelation from './ParseRelation'; diff --git a/types/ParsePolygon.d.ts b/types/ParsePolygon.d.ts new file mode 100644 index 000000000..d94d63f7f --- /dev/null +++ b/types/ParsePolygon.d.ts @@ -0,0 +1,69 @@ +// @ts-nocheck + +export default ParsePolygon; +/** + * Creates a new Polygon with any of the following forms:
    + *
    + *   new Polygon([[0,0],[0,1],[1,1],[1,0]])
    + *   new Polygon([GeoPoint, GeoPoint, GeoPoint])
    + *   
    + * + *

    Represents a coordinates that may be associated + * with a key in a ParseObject or used as a reference point for geo queries. + * This allows proximity-based queries on the key.

    + * + *

    Example:

    + *   var polygon = new Parse.Polygon([[0,0],[0,1],[1,1],[1,0]]);
    + *   var object = new Parse.Object("PlaceObject");
    + *   object.set("area", polygon);
    + *   object.save();

    + * + * @alias Parse.Polygon + */ +declare class ParsePolygon { + /** + * Validates that the list of coordinates can form a valid polygon + * + * @param {Array} coords the list of coordinates to validate as a polygon + * @throws {TypeError} + * @returns {number[][]} Array of coordinates if validated. + */ + static _validate(coords: Array> | Array): Array>; + /** + * @param {(number[][] | Parse.GeoPoint[])} coordinates An Array of coordinate pairs + */ + constructor(coordinates: Array> | Array); + _coordinates: Array>; + set coordinates(arg: number[][]); + /** + * Coordinates value for this Polygon. + * Throws an exception if not valid type. + * + * @property {(number[][] | Parse.GeoPoint[])} coordinates list of coordinates + * @returns {number[][]} + */ + get coordinates(): number[][]; + /** + * Returns a JSON representation of the Polygon, suitable for Parse. + * + * @returns {object} + */ + toJSON(): { + __type: string; + coordinates: Array>; + }; + /** + * Checks if two polygons are equal + * + * @param {(Parse.Polygon | object)} other + * @returns {boolean} + */ + equals(other: mixed): boolean; + /** + * + * @param {Parse.GeoPoint} point + * @returns {boolean} Returns if the point is contained in the polygon + */ + containsPoint(point: ParseGeoPoint): boolean; +} +import ParseGeoPoint from './ParseGeoPoint'; diff --git a/types/ParseQuery.d.ts b/types/ParseQuery.d.ts new file mode 100644 index 000000000..5c8f9de0e --- /dev/null +++ b/types/ParseQuery.d.ts @@ -0,0 +1,925 @@ +// @ts-nocheck +type WhereClause = { + [attr: string]: mixed; +}; +type QueryJSON = { + where: WhereClause; + watch?: string; + include?: string; + excludeKeys?: string; + keys?: string; + limit?: number; + skip?: number; + order?: string; + className?: string; + count?: number; + hint?: mixed; + explain?: boolean; + readPreference?: string; + includeReadPreference?: string; + subqueryReadPreference?: string; +}; +export default ParseQuery; +/** + * Creates a new parse Parse.Query for the given Parse.Object subclass. + * + *

    Parse.Query defines a query that is used to fetch Parse.Objects. The + * most common use case is finding all objects that match a query through the + * find method. for example, this sample code fetches all objects + * of class myclass. it calls a different function depending on + * whether the fetch succeeded or not. + * + *

    + * var query = new Parse.Query(myclass);
    + * query.find().then((results) => {
    + *   // results is an array of parse.object.
    + * }).catch((error) =>  {
    + *  // error is an instance of parse.error.
    + * });

    + * + *

    a Parse.Query can also be used to retrieve a single object whose id is + * known, through the get method. for example, this sample code fetches an + * object of class myclass and id myid. it calls a + * different function depending on whether the fetch succeeded or not. + * + *

    + * var query = new Parse.Query(myclass);
    + * query.get(myid).then((object) => {
    + *     // object is an instance of parse.object.
    + * }).catch((error) =>  {
    + *  // error is an instance of parse.error.
    + * });

    + * + *

    a Parse.Query can also be used to count the number of objects that match + * the query without retrieving all of those objects. for example, this + * sample code counts the number of objects of the class myclass + *

    + * var query = new Parse.Query(myclass);
    + * query.count().then((number) => {
    + *     // there are number instances of myclass.
    + * }).catch((error) => {
    + *     // error is an instance of Parse.Error.
    + * });

    + * + * @alias Parse.Query + */ +declare class ParseQuery { + /** + * Static method to restore Parse.Query by json representation + * Internally calling Parse.Query.withJSON + * + * @param {string} className + * @param {QueryJSON} json from Parse.Query.toJSON() method + * @returns {Parse.Query} new created query + */ + static fromJSON(className: string, json: QueryJSON): ParseQuery; + /** + * Constructs a Parse.Query that is the OR of the passed in queries. For + * example: + *
    var compoundQuery = Parse.Query.or(query1, query2, query3);
    + * + * will create a compoundQuery that is an or of the query1, query2, and + * query3. + * + * @param {...Parse.Query} queries The list of queries to OR. + * @static + * @returns {Parse.Query} The query that is the OR of the passed in queries. + */ + static or(...queries: Array): ParseQuery; + /** + * Constructs a Parse.Query that is the AND of the passed in queries. For + * example: + *
    var compoundQuery = Parse.Query.and(query1, query2, query3);
    + * + * will create a compoundQuery that is an and of the query1, query2, and + * query3. + * + * @param {...Parse.Query} queries The list of queries to AND. + * @static + * @returns {Parse.Query} The query that is the AND of the passed in queries. + */ + static and(...queries: Array): ParseQuery; + /** + * Constructs a Parse.Query that is the NOR of the passed in queries. For + * example: + *
    const compoundQuery = Parse.Query.nor(query1, query2, query3);
    + * + * will create a compoundQuery that is a nor of the query1, query2, and + * query3. + * + * @param {...Parse.Query} queries The list of queries to NOR. + * @static + * @returns {Parse.Query} The query that is the NOR of the passed in queries. + */ + static nor(...queries: Array): ParseQuery; + /** + * @param {(string | Parse.Object)} objectClass An instance of a subclass of Parse.Object, or a Parse className string. + */ + constructor(objectClass: string | ParseObject); + /** + * @property {string} className + */ + className: string; + _where: any; + _watch: Array; + _include: Array; + _exclude: Array; + _select: Array; + _limit: number; + _skip: number; + _count: boolean; + _order: Array; + _readPreference: string; + _includeReadPreference: string; + _subqueryReadPreference: string; + _queriesLocalDatastore: boolean; + _localDatastorePinName: any; + _extraOptions: { + [key: string]: mixed; + }; + _hint: mixed; + _explain: boolean; + _xhrRequest: any; + /** + * Adds constraint that at least one of the passed in queries matches. + * + * @param {Array} queries + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + _orQuery(queries: Array): ParseQuery; + /** + * Adds constraint that all of the passed in queries match. + * + * @param {Array} queries + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + _andQuery(queries: Array): ParseQuery; + /** + * Adds constraint that none of the passed in queries match. + * + * @param {Array} queries + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + _norQuery(queries: Array): ParseQuery; + /** + * Helper for condition queries + * + * @param key + * @param condition + * @param value + * @returns {Parse.Query} + */ + _addCondition(key: string, condition: string, value: mixed): ParseQuery; + /** + * Converts string for regular expression at the beginning + * + * @param string + * @returns {string} + */ + _regexStartWith(string: string): string; + _handleOfflineQuery(params: any): Promise; + /** + * Returns a JSON representation of this query. + * + * @returns {object} The JSON representation of the query. + */ + toJSON(): QueryJSON; + /** + * Return a query with conditions from json, can be useful to send query from server side to client + * Not static, all query conditions was set before calling this method will be deleted. + * For example on the server side we have + * var query = new Parse.Query("className"); + * query.equalTo(key: value); + * query.limit(100); + * ... (others queries) + * Create JSON representation of Query Object + * var jsonFromServer = query.fromJSON(); + * + * On client side getting query: + * var query = new Parse.Query("className"); + * query.fromJSON(jsonFromServer); + * + * and continue to query... + * query.skip(100).find().then(...); + * + * @param {QueryJSON} json from Parse.Query.toJSON() method + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withJSON(json: QueryJSON): ParseQuery; + /** + * Constructs a Parse.Object whose id is already known by fetching data from + * the server. Unlike the first method, it never returns undefined. + * + * @param {string} objectId The id of the object to be fetched. + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. + *
    • json: Return raw json without converting to Parse.Object + *
    + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + get(objectId: string, options?: FullOptions): Promise; + /** + * Retrieves a list of ParseObjects that satisfy this query. + * + * @param {object} options Valid options + * are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. + *
    • json: Return raw json without converting to Parse.Object + *
    + * @returns {Promise} A promise that is resolved with the results when + * the query completes. + */ + find(options?: FullOptions): Promise>; + /** + * Retrieves a complete list of ParseObjects that satisfy this query. + * Using `eachBatch` under the hood to fetch all the valid objects. + * + * @param {object} options Valid options are:
      + *
    • batchSize: How many objects to yield in each batch (default: 100) + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that is resolved with the results when + * the query completes. + */ + findAll(options?: BatchOptions): Promise>; + /** + * Counts the number of objects that match this query. + * + * @param {object} options + * Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that is resolved with the count when + * the query completes. + */ + count(options?: FullOptions): Promise; + /** + * Executes a distinct query and returns unique values + * + * @param {string} key A field to find distinct values + * @param {object} options + * Valid options are:
      + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that is resolved with the query completes. + */ + distinct(key: string, options?: FullOptions): Promise>; + /** + * Executes an aggregate query and returns aggregate results + * + * @param {(Array|object)} pipeline Array or Object of stages to process query + * @param {object} options Valid options are:
      + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that is resolved with the query completes. + */ + aggregate(pipeline: mixed, options?: FullOptions): Promise>; + /** + * Retrieves at most one Parse.Object that satisfies this query. + * + * Returns the object if there is one, otherwise undefined. + * + * @param {object} options Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. + *
    • json: Return raw json without converting to Parse.Object + *
    + * @returns {Promise} A promise that is resolved with the object when + * the query completes. + */ + first(options?: FullOptions): Promise; + /** + * Iterates over objects matching a query, calling a callback for each batch. + * If the callback returns a promise, the iteration will not continue until + * that promise has been fulfilled. If the callback returns a rejected + * promise, then iteration will stop with that error. The items are processed + * in an unspecified order. The query may not have any sort order, and may + * not use limit or skip. + * + * @param {Function} callback Callback that will be called with each result + * of the query. + * @param {object} options Valid options are:
      + *
    • batchSize: How many objects to yield in each batch (default: 100) + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. + *
    + * @returns {Promise} A promise that will be fulfilled once the + * iteration has completed. + */ + eachBatch(callback: (objs: Array) => Promise, options?: BatchOptions): Promise; + /** + * Iterates over each result of a query, calling a callback for each one. If + * the callback returns a promise, the iteration will not continue until + * that promise has been fulfilled. If the callback returns a rejected + * promise, then iteration will stop with that error. The items are + * processed in an unspecified order. The query may not have any sort order, + * and may not use limit or skip. + * + * @param {Function} callback Callback that will be called with each result + * of the query. + * @param {object} options Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    • json: Return raw json without converting to Parse.Object + *
    + * @returns {Promise} A promise that will be fulfilled once the + * iteration has completed. + */ + each(callback: (obj: ParseObject) => any, options?: BatchOptions): Promise; + /** + * Adds a hint to force index selection. (https://docs.mongodb.com/manual/reference/operator/meta/hint/) + * + * @param {(string|object)} value String or Object of index that should be used when executing query + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + hint(value: mixed): ParseQuery; + /** + * Investigates the query execution plan. Useful for optimizing queries. (https://docs.mongodb.com/manual/reference/operator/meta/explain/) + * + * @param {boolean} explain Used to toggle the information on the query plan. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + explain(explain?: boolean): ParseQuery; + /** + * Iterates over each result of a query, calling a callback for each one. If + * the callback returns a promise, the iteration will not continue until + * that promise has been fulfilled. If the callback returns a rejected + * promise, then iteration will stop with that error. The items are + * processed in an unspecified order. The query may not have any sort order, + * and may not use limit or skip. + * + * @param {Function} callback Callback
      + *
    • currentObject: The current Parse.Object being processed in the array.
    • + *
    • index: The index of the current Parse.Object being processed in the array.
    • + *
    • query: The query map was called upon.
    • + *
    + * @param {object} options Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that will be fulfilled once the + * iteration has completed. + */ + map(callback: (currentObject: ParseObject, index: number, query: ParseQuery) => any, options?: BatchOptions): Promise>; + /** + * Iterates over each result of a query, calling a callback for each one. If + * the callback returns a promise, the iteration will not continue until + * that promise has been fulfilled. If the callback returns a rejected + * promise, then iteration will stop with that error. The items are + * processed in an unspecified order. The query may not have any sort order, + * and may not use limit or skip. + * + * @param {Function} callback Callback
      + *
    • accumulator: The accumulator accumulates the callback's return values. It is the accumulated value previously returned in the last invocation of the callback.
    • + *
    • currentObject: The current Parse.Object being processed in the array.
    • + *
    • index: The index of the current Parse.Object being processed in the array.
    • + *
    + * @param {*} initialValue A value to use as the first argument to the first call of the callback. If no initialValue is supplied, the first object in the query will be used and skipped. + * @param {object} options Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that will be fulfilled once the + * iteration has completed. + */ + reduce(callback: (accumulator: any, currentObject: ParseObject, index: number) => any, initialValue: any, options?: BatchOptions): Promise>; + /** + * Iterates over each result of a query, calling a callback for each one. If + * the callback returns a promise, the iteration will not continue until + * that promise has been fulfilled. If the callback returns a rejected + * promise, then iteration will stop with that error. The items are + * processed in an unspecified order. The query may not have any sort order, + * and may not use limit or skip. + * + * @param {Function} callback Callback
      + *
    • currentObject: The current Parse.Object being processed in the array.
    • + *
    • index: The index of the current Parse.Object being processed in the array.
    • + *
    • query: The query filter was called upon.
    • + *
    + * @param {object} options Valid options are:
      + *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
    • sessionToken: A valid session token, used for making a request on + * behalf of a specific user. + *
    + * @returns {Promise} A promise that will be fulfilled once the + * iteration has completed. + */ + filter(callback: (currentObject: ParseObject, index: number, query: ParseQuery) => boolean, options?: BatchOptions): Promise>; + /** + * Adds a constraint to the query that requires a particular key's value to + * be equal to the provided value. + * + * @param {string} key The key to check. + * @param value The value that the Parse.Object must contain. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + equalTo(key: string | { + [key: string]: any; + }, value: mixed): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be not equal to the provided value. + * + * @param {string} key The key to check. + * @param value The value that must not be equalled. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + notEqualTo(key: string | { + [key: string]: any; + }, value: mixed): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be less than the provided value. + * + * @param {string} key The key to check. + * @param value The value that provides an upper bound. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + lessThan(key: string, value: mixed): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be greater than the provided value. + * + * @param {string} key The key to check. + * @param value The value that provides an lower bound. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + greaterThan(key: string, value: mixed): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be less than or equal to the provided value. + * + * @param {string} key The key to check. + * @param value The value that provides an upper bound. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + lessThanOrEqualTo(key: string, value: mixed): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be greater than or equal to the provided value. + * + * @param {string} key The key to check. + * @param {*} value The value that provides an lower bound. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + greaterThanOrEqualTo(key: string, value: mixed): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be contained in the provided list of values. + * + * @param {string} key The key to check. + * @param {Array<*>} value The values that will match. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + containedIn(key: string, value: Array): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * not be contained in the provided list of values. + * + * @param {string} key The key to check. + * @param {Array<*>} value The values that will not match. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + notContainedIn(key: string, value: Array): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * be contained by the provided list of values. Get objects where all array elements match. + * + * @param {string} key The key to check. + * @param {Array} values The values that will match. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + containedBy(key: string, values: Array): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * contain each one of the provided list of values. + * + * @param {string} key The key to check. This key's value must be an array. + * @param {Array} values The values that will match. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + containsAll(key: string, values: Array): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's value to + * contain each one of the provided list of values starting with given strings. + * + * @param {string} key The key to check. This key's value must be an array. + * @param {Array} values The string values that will match as starting string. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + containsAllStartingWith(key: string, values: Array): ParseQuery; + /** + * Adds a constraint for finding objects that contain the given key. + * + * @param {string} key The key that should exist. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + exists(key: string): ParseQuery; + /** + * Adds a constraint for finding objects that do not contain a given key. + * + * @param {string} key The key that should not exist + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + doesNotExist(key: string): ParseQuery; + /** + * Adds a regular expression constraint for finding string values that match + * the provided regular expression. + * This may be slow for large datasets. + * + * @param {string} key The key that the string to match is stored in. + * @param {RegExp} regex The regular expression pattern to match. + * @param {string} modifiers The regular expression mode. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + matches(key: string, regex: RegExp, modifiers: string): ParseQuery; + /** + * Adds a constraint that requires that a key's value matches a Parse.Query + * constraint. + * + * @param {string} key The key that the contains the object to match the + * query. + * @param {Parse.Query} query The query that should match. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + matchesQuery(key: string, query: ParseQuery): ParseQuery; + /** + * Adds a constraint that requires that a key's value not matches a + * Parse.Query constraint. + * + * @param {string} key The key that the contains the object to match the + * query. + * @param {Parse.Query} query The query that should not match. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + doesNotMatchQuery(key: string, query: ParseQuery): ParseQuery; + /** + * Adds a constraint that requires that a key's value matches a value in + * an object returned by a different Parse.Query. + * + * @param {string} key The key that contains the value that is being + * matched. + * @param {string} queryKey The key in the objects returned by the query to + * match against. + * @param {Parse.Query} query The query to run. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + matchesKeyInQuery(key: string, queryKey: string, query: ParseQuery): ParseQuery; + /** + * Adds a constraint that requires that a key's value not match a value in + * an object returned by a different Parse.Query. + * + * @param {string} key The key that contains the value that is being + * excluded. + * @param {string} queryKey The key in the objects returned by the query to + * match against. + * @param {Parse.Query} query The query to run. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + doesNotMatchKeyInQuery(key: string, queryKey: string, query: ParseQuery): ParseQuery; + /** + * Adds a constraint for finding string values that contain a provided + * string. This may be slow for large datasets. + * + * @param {string} key The key that the string to match is stored in. + * @param {string} substring The substring that the value must contain. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + contains(key: string, substring: string): ParseQuery; + /** + * Adds a constraint for finding string values that contain a provided + * string. This may be slow for large datasets. Requires Parse-Server > 2.5.0 + * + * In order to sort you must use select and ascending ($score is required) + *
    +     *   query.fullText('field', 'term');
    +     *   query.ascending('$score');
    +     *   query.select('$score');
    +     *  
    + * + * To retrieve the weight / rank + *
    +     *   object->get('score');
    +     *  
    + * + * You can define optionals by providing an object as a third parameter + *
    +     *   query.fullText('field', 'term', { language: 'es', diacriticSensitive: true });
    +     *  
    + * + * @param {string} key The key that the string to match is stored in. + * @param {string} value The string to search + * @param {object} options (Optional) + * @param {string} options.language The language that determines the list of stop words for the search and the rules for the stemmer and tokenizer. + * @param {boolean} options.caseSensitive A boolean flag to enable or disable case sensitive search. + * @param {boolean} options.diacriticSensitive A boolean flag to enable or disable diacritic sensitive search. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + fullText(key: string, value: string, options: Object | null): ParseQuery; + /** + * Method to sort the full text search by text score + * + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + sortByTextScore(): Parse.Query; + /** + * Adds a constraint for finding string values that start with a provided + * string. This query will use the backend index, so it will be fast even + * for large datasets. + * + * @param {string} key The key that the string to match is stored in. + * @param {string} prefix The substring that the value must start with. + * @param {string} modifiers The regular expression mode. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + startsWith(key: string, prefix: string, modifiers: string): ParseQuery; + /** + * Adds a constraint for finding string values that end with a provided + * string. This will be slow for large datasets. + * + * @param {string} key The key that the string to match is stored in. + * @param {string} suffix The substring that the value must end with. + * @param {string} modifiers The regular expression mode. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + endsWith(key: string, suffix: string, modifiers: string): ParseQuery; + /** + * Adds a proximity based constraint for finding objects with key point + * values near the point given. + * + * @param {string} key The key that the Parse.GeoPoint is stored in. + * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + near(key: string, point: ParseGeoPoint): ParseQuery; + /** + * Adds a proximity based constraint for finding objects with key point + * values near the point given and within the maximum distance given. + * + * @param {string} key The key that the Parse.GeoPoint is stored in. + * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. + * @param {number} maxDistance Maximum distance (in radians) of results to return. + * @param {boolean} sorted A Bool value that is true if results should be + * sorted by distance ascending, false is no sorting is required, + * defaults to true. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withinRadians(key: string, point: ParseGeoPoint, maxDistance: number, sorted: boolean): ParseQuery; + /** + * Adds a proximity based constraint for finding objects with key point + * values near the point given and within the maximum distance given. + * Radius of earth used is 3958.8 miles. + * + * @param {string} key The key that the Parse.GeoPoint is stored in. + * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. + * @param {number} maxDistance Maximum distance (in miles) of results to return. + * @param {boolean} sorted A Bool value that is true if results should be + * sorted by distance ascending, false is no sorting is required, + * defaults to true. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withinMiles(key: string, point: ParseGeoPoint, maxDistance: number, sorted: boolean): ParseQuery; + /** + * Adds a proximity based constraint for finding objects with key point + * values near the point given and within the maximum distance given. + * Radius of earth used is 6371.0 kilometers. + * + * @param {string} key The key that the Parse.GeoPoint is stored in. + * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. + * @param {number} maxDistance Maximum distance (in kilometers) of results to return. + * @param {boolean} sorted A Bool value that is true if results should be + * sorted by distance ascending, false is no sorting is required, + * defaults to true. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withinKilometers(key: string, point: ParseGeoPoint, maxDistance: number, sorted: boolean): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's + * coordinates be contained within a given rectangular geographic bounding + * box. + * + * @param {string} key The key to be constrained. + * @param {Parse.GeoPoint} southwest + * The lower-left inclusive corner of the box. + * @param {Parse.GeoPoint} northeast + * The upper-right inclusive corner of the box. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withinGeoBox(key: string, southwest: ParseGeoPoint, northeast: ParseGeoPoint): ParseQuery; + /** + * Adds a constraint to the query that requires a particular key's + * coordinates be contained within and on the bounds of a given polygon. + * Supports closed and open (last point is connected to first) paths + * + * Polygon must have at least 3 points + * + * @param {string} key The key to be constrained. + * @param {Array} points Array of Coordinates / GeoPoints + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withinPolygon(key: string, points: Array>): ParseQuery; + /** + * Add a constraint to the query that requires a particular key's + * coordinates that contains a ParseGeoPoint + * + * @param {string} key The key to be constrained. + * @param {Parse.GeoPoint} point + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + polygonContains(key: string, point: ParseGeoPoint): ParseQuery; + /** + * Sorts the results in ascending order by the given key. + * + * @param {(string|string[])} keys The key to order by, which is a + * string of comma separated values, or an Array of keys, or multiple keys. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + ascending(...keys: Array): ParseQuery; + /** + * Sorts the results in ascending order by the given key, + * but can also add secondary sort descriptors without overwriting _order. + * + * @param {(string|string[])} keys The key to order by, which is a + * string of comma separated values, or an Array of keys, or multiple keys. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + addAscending(...keys: Array): ParseQuery; + /** + * Sorts the results in descending order by the given key. + * + * @param {(string|string[])} keys The key to order by, which is a + * string of comma separated values, or an Array of keys, or multiple keys. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + descending(...keys: Array): ParseQuery; + /** + * Sorts the results in descending order by the given key, + * but can also add secondary sort descriptors without overwriting _order. + * + * @param {(string|string[])} keys The key to order by, which is a + * string of comma separated values, or an Array of keys, or multiple keys. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + addDescending(...keys: Array): ParseQuery; + /** + * Sets the number of results to skip before returning any results. + * This is useful for pagination. + * Default is to skip zero results. + * + * @param {number} n the number of results to skip. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + skip(n: number): ParseQuery; + /** + * Sets the limit of the number of results to return. The default limit is 100. + * + * @param {number} n the number of results to limit to. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + limit(n: number): ParseQuery; + /** + * Sets the flag to include with response the total number of objects satisfying this query, + * despite limits/skip. Might be useful for pagination. + * Note that result of this query will be wrapped as an object with + * `results`: holding {ParseObject} array and `count`: integer holding total number + * + * @param {boolean} includeCount false - disable, true - enable. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + withCount(includeCount?: boolean): ParseQuery; + /** + * Includes nested Parse.Objects for the provided key. You can use dot + * notation to specify which fields in the included object are also fetched. + * + * You can include all nested Parse.Objects by passing in '*'. + * Requires Parse Server 3.0.0+ + *
    query.include('*');
    + * + * @param {...string|Array} keys The name(s) of the key(s) to include. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + include(...keys: Array>): ParseQuery; + /** + * Includes all nested Parse.Objects one level deep. + * + * Requires Parse Server 3.0.0+ + * + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + includeAll(): ParseQuery; + /** + * Restricts the fields of the returned Parse.Objects to include only the + * provided keys. If this is called multiple times, then all of the keys + * specified in each of the calls will be included. + * + * @param {...string|Array} keys The name(s) of the key(s) to include. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + select(...keys: Array>): ParseQuery; + /** + * Restricts the fields of the returned Parse.Objects to all keys except the + * provided keys. Exclude takes precedence over select and include. + * + * Requires Parse Server 3.6.0+ + * + * @param {...string|Array} keys The name(s) of the key(s) to exclude. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + exclude(...keys: Array>): ParseQuery; + /** + * Restricts live query to trigger only for watched fields. + * + * Requires Parse Server 6.0.0+ + * + * @param {...string|Array} keys The name(s) of the key(s) to watch. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + watch(...keys: Array>): ParseQuery; + /** + * Changes the read preference that the backend will use when performing the query to the database. + * + * @param {string} readPreference The read preference for the main query. + * @param {string} includeReadPreference The read preference for the queries to include pointers. + * @param {string} subqueryReadPreference The read preference for the sub queries. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + readPreference(readPreference: string, includeReadPreference?: string, subqueryReadPreference?: string): ParseQuery; + /** + * Subscribe this query to get liveQuery updates + * + * @param {string} sessionToken (optional) Defaults to the currentUser + * @returns {Promise} Returns the liveQuerySubscription, it's an event emitter + * which can be used to get liveQuery updates. + */ + subscribe(sessionToken?: string): Promise; + /** + * Change the source of this query to the server. + * + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + fromNetwork(): ParseQuery; + /** + * Changes the source of this query to all pinned objects. + * + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + fromLocalDatastore(): ParseQuery; + /** + * Changes the source of this query to the default group of pinned objects. + * + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + fromPin(): ParseQuery; + /** + * Changes the source of this query to a specific group of pinned objects. + * + * @param {string} name The name of query source. + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + fromPinWithName(name?: string): ParseQuery; + /** + * Cancels the current network request (if any is running). + * + * @returns {Parse.Query} Returns the query, so you can chain this call. + */ + cancel(): ParseQuery; + _setRequestTask(options: any): void; +} +import { FullOptions } from './RESTController'; +import ParseObject from './ParseObject'; +type BatchOptions = FullOptions & { + batchSize?: number; +}; +import ParseGeoPoint from './ParseGeoPoint'; +import LiveQuerySubscription from './LiveQuerySubscription'; diff --git a/types/ParseRelation.d.ts b/types/ParseRelation.d.ts new file mode 100644 index 000000000..2815a6e87 --- /dev/null +++ b/types/ParseRelation.d.ts @@ -0,0 +1,56 @@ +export default ParseRelation; +/** + * Creates a new Relation for the given parent object and key. This + * constructor should rarely be used directly, but rather created by + * Parse.Object.relation. + * + *

    + * A class that is used to access all of the children of a many-to-many + * relationship. Each instance of Parse.Relation is associated with a + * particular parent object and key. + *

    + * + * @alias Parse.Relation + */ +declare class ParseRelation { + /** + * @param {Parse.Object} parent The parent of this relation. + * @param {string} key The key for this relation on the parent. + */ + constructor(parent: ParseObject | null, key: string | null); + parent: ParseObject | null; + key: string | null; + targetClassName: string | null; + _ensureParentAndKey(parent: ParseObject, key: string): void; + /** + * Adds a Parse.Object or an array of Parse.Objects to the relation. + * + * @param {(Parse.Object|Array)} objects The item or items to add. + * @returns {Parse.Object} The parent of the relation. + */ + add(objects: ParseObject | Array): ParseObject; + /** + * Removes a Parse.Object or an array of Parse.Objects from this relation. + * + * @param {(Parse.Object|Array)} objects The item or items to remove. + */ + remove(objects: ParseObject | Array): void; + /** + * Returns a JSON version of the object suitable for saving to disk. + * + * @returns {object} JSON representation of Relation + */ + toJSON(): { + __type: 'Relation'; + className: string | null; + }; + /** + * Returns a Parse.Query that is limited to objects in this + * relation. + * + * @returns {Parse.Query} Relation Query + */ + query(): ParseQuery; +} +import ParseObject from './ParseObject'; +import ParseQuery from './ParseQuery'; diff --git a/types/ParseRole.d.ts b/types/ParseRole.d.ts new file mode 100644 index 000000000..fe82fd571 --- /dev/null +++ b/types/ParseRole.d.ts @@ -0,0 +1,79 @@ +// @ts-nocheck +export default ParseRole; +/** + * Represents a Role on the Parse server. Roles represent groupings of + * Users for the purposes of granting permissions (e.g. specifying an ACL + * for an Object). Roles are specified by their sets of child users and + * child roles, all of which are granted any permissions that the parent + * role has. + * + *

    Roles must have a name (which cannot be changed after creation of the + * role), and must specify an ACL.

    + * + * @alias Parse.Role + * @augments Parse.Object + */ +declare class ParseRole { + /** + * @param {string} name The name of the Role to create. + * @param {Parse.ACL} acl The ACL for this role. Roles must have an ACL. + * A Parse.Role is a local representation of a role persisted to the Parse + * cloud. + */ + constructor(name: string, acl: ParseACL); + /** + * Gets the name of the role. You can alternatively call role.get("name") + * + * @returns {string} the name of the role. + */ + getName(): string | null; + /** + * Sets the name for a role. This value must be set before the role has + * been saved to the server, and cannot be set once the role has been + * saved. + * + *

    + * A role's name can only contain alphanumeric characters, _, -, and + * spaces. + *

    + * + *

    This is equivalent to calling role.set("name", name)

    + * + * @param {string} name The name of the role. + * @param {object} options Standard options object with success and error + * callbacks. + * @returns {(ParseObject|boolean)} true if the set succeeded. + */ + setName(name: string, options?: mixed): ParseObject | boolean; + /** + * Gets the Parse.Relation for the Parse.Users that are direct + * children of this role. These users are granted any privileges that this + * role has been granted (e.g. read or write access through ACLs). You can + * add or remove users from the role through this relation. + * + *

    This is equivalent to calling role.relation("users")

    + * + * @returns {Parse.Relation} the relation for the users belonging to this + * role. + */ + getUsers(): ParseRelation; + /** + * Gets the Parse.Relation for the Parse.Roles that are direct + * children of this role. These roles' users are granted any privileges that + * this role has been granted (e.g. read or write access through ACLs). You + * can add or remove child roles from this role through this relation. + * + *

    This is equivalent to calling role.relation("roles")

    + * + * @returns {Parse.Relation} the relation for the roles belonging to this + * role. + */ + getRoles(): ParseRelation; + _validateName(newName: any): void; + validate(attrs: AttributeMap, options?: mixed): ParseError | boolean; +} +import ParseObject from './ParseObject'; +import ParseRelation from './ParseRelation'; +import { AttributeMap } from './ObjectStateMutations'; +import ParseError from './ParseError'; +import ParseACL from './ParseACL'; diff --git a/types/ParseSchema.d.ts b/types/ParseSchema.d.ts new file mode 100644 index 000000000..708070fc9 --- /dev/null +++ b/types/ParseSchema.d.ts @@ -0,0 +1,228 @@ +// @ts-nocheck +export default ParseSchema; +/** + * A Parse.Schema object is for handling schema data from Parse. + *

    All the schemas methods require MasterKey. + * + * When adding fields, you may set required and default values. (Requires Parse Server 3.7.0+) + * + *

    + * const options = { required: true, defaultValue: 'hello world' };
    + * const schema = new Parse.Schema('MyClass');
    + * schema.addString('field', options);
    + * schema.addIndex('index_name', { 'field': 1 });
    + * schema.save();
    + * 
    + *

    + * + * @alias Parse.Schema + */ +declare class ParseSchema { + /** + * Static method to get all schemas + * + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + static all(): Promise; + /** + * @param {string} className Parse Class string. + */ + constructor(className: string); + className: string; + _fields: { + [key: string]: mixed; + }; + _indexes: { + [key: string]: mixed; + }; + _clp: { + [key: string]: mixed; + }; + /** + * Get the Schema from Parse + * + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + get(): Promise; + /** + * Create a new Schema on Parse + * + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + save(): Promise; + /** + * Update a Schema on Parse + * + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + update(): Promise; + /** + * Removing a Schema from Parse + * Can only be used on Schema without objects + * + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + delete(): Promise; + /** + * Removes all objects from a Schema (class) in Parse. + * EXERCISE CAUTION, running this will delete all objects for this schema and cannot be reversed + * + * @returns {Promise} A promise that is resolved with the result when + * the query completes. + */ + purge(): Promise; + /** + * Assert if ClassName has been filled + * + * @private + */ + private assertClassName; + /** + * Sets Class Level Permissions when creating / updating a Schema. + * EXERCISE CAUTION, running this may override CLP for this schema and cannot be reversed + * + * @param {object | Parse.CLP} clp Class Level Permissions + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + setCLP(clp: PermissionsMap | ParseCLP): Parse.Schema; + /** + * Adding a Field to Create / Update a Schema + * + * @param {string} name Name of the field that will be created on Parse + * @param {string} type Can be a (String|Number|Boolean|Date|Parse.File|Parse.GeoPoint|Array|Object|Pointer|Parse.Relation) + * @param {object} options + * Valid options are:
      + *
    • required: If field is not set, save operation fails (Requires Parse Server 3.7.0+) + *
    • defaultValue: If field is not set, a default value is selected (Requires Parse Server 3.7.0+) + *
    • targetClass: Required if type is Pointer or Parse.Relation + *
    + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addField(name: string, type: string, options?: FieldOptions): Parse.Schema; + /** + * Adding an Index to Create / Update a Schema + * + * @param {string} name Name of the index + * @param {object} index { field: value } + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + * + *
    +     * schema.addIndex('index_name', { 'field': 1 });
    +     * 
    + */ + addIndex(name: string, index: any): Parse.Schema; + /** + * Adding String Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addString(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Number Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addNumber(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Boolean Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addBoolean(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Date Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addDate(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding File Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addFile(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding GeoPoint Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addGeoPoint(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Polygon Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addPolygon(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Array Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addArray(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Object Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addObject(name: string, options: FieldOptions): Parse.Schema; + /** + * Adding Pointer Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {string} targetClass Name of the target Pointer Class + * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addPointer(name: string, targetClass: string, options?: FieldOptions): Parse.Schema; + /** + * Adding Relation Field + * + * @param {string} name Name of the field that will be created on Parse + * @param {string} targetClass Name of the target Pointer Class + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + addRelation(name: string, targetClass: string): Parse.Schema; + /** + * Deleting a Field to Update on a Schema + * + * @param {string} name Name of the field + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + deleteField(name: string): Parse.Schema; + /** + * Deleting an Index to Update on a Schema + * + * @param {string} name Name of the field + * @returns {Parse.Schema} Returns the schema, so you can chain this call. + */ + deleteIndex(name: string): Parse.Schema; +} +import { PermissionsMap } from './ParseCLP'; +import ParseCLP from './ParseCLP'; +type FieldOptions = { + required: boolean; + defaultValue: mixed; +}; diff --git a/types/ParseSession.d.ts b/types/ParseSession.d.ts new file mode 100644 index 000000000..ce17eb974 --- /dev/null +++ b/types/ParseSession.d.ts @@ -0,0 +1,45 @@ +import ParseObject from './ParseObject'; +import type { FullOptions } from './RESTController'; +/** + *

    A Parse.Session object is a local representation of a revocable session. + * This class is a subclass of a Parse.Object, and retains the same + * functionality of a Parse.Object.

    + * + * @alias Parse.Session + * @augments Parse.Object + */ +declare class ParseSession extends ParseObject { + /** + * @param {object} attributes The initial set of data to store in the user. + */ + constructor(attributes?: any); + /** + * Returns the session token string. + * + * @returns {string} + */ + getSessionToken(): string; + static readOnlyAttributes(): string[]; + /** + * Retrieves the Session object for the currently logged in session. + * + * @param {object} options useMasterKey + * @static + * @returns {Promise} A promise that is resolved with the Parse.Session + * object after it has been fetched. If there is no current user, the + * promise will be rejected. + */ + static current(options: FullOptions): any; + /** + * Determines whether the current session token is revocable. + * This method is useful for migrating Express.js or Node.js web apps to + * use revocable sessions. If you are migrating an app that uses the Parse + * SDK in the browser only, please use Parse.User.enableRevocableSession() + * instead, so that sessions can be automatically upgraded. + * + * @static + * @returns {boolean} + */ + static isCurrentSessionRevocable(): boolean; +} +export default ParseSession; diff --git a/types/ParseUser.d.ts b/types/ParseUser.d.ts new file mode 100644 index 000000000..5a425bc55 --- /dev/null +++ b/types/ParseUser.d.ts @@ -0,0 +1,471 @@ +// @ts-nocheck +type AuthData = { + [key: string]: mixed; +}; +export default ParseUser; +/** + *

    A Parse.User object is a local representation of a user persisted to the + * Parse cloud. This class is a subclass of a Parse.Object, and retains the + * same functionality of a Parse.Object, but also extends it with various + * user specific methods, like authentication, signing up, and validation of + * uniqueness.

    + * + * @alias Parse.User + * @augments Parse.Object + */ +declare class ParseUser { + static readOnlyAttributes(): string[]; + /** + * Adds functionality to the existing Parse.User class. + * + * @param {object} protoProps A set of properties to add to the prototype + * @param {object} classProps A set of static properties to add to the class + * @static + * @returns {Parse.User} The newly extended Parse.User class + */ + static extend(protoProps: { + [prop: string]: any; + }, classProps: { + [prop: string]: any; + }): Parse.User; + /** + * Retrieves the currently logged in ParseUser with a valid session, + * either from memory or localStorage, if necessary. + * + * @static + * @returns {Parse.Object} The currently logged in Parse.User. + */ + static current(): ParseUser | null; + /** + * Retrieves the currently logged in ParseUser from asynchronous Storage. + * + * @static + * @returns {Promise} A Promise that is resolved with the currently + * logged in Parse User + */ + static currentAsync(): Promise; + /** + * Signs up a new user with a username (or email) and password. + * This will create a new Parse.User on the server, and also persist the + * session in localStorage so that you can access the user using + * {@link #current}. + * + * @param {string} username The username (or email) to sign up with. + * @param {string} password The password to sign up with. + * @param {object} attrs Extra fields to set on the new user. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the signup completes. + */ + static signUp(username: string, password: string, attrs: AttributeMap, options?: FullOptions): Promise; + /** + * Logs in a user with a username (or email) and password. On success, this + * saves the session to disk, so you can retrieve the currently logged in + * user using current. + * + * @param {string} username The username (or email) to log in with. + * @param {string} password The password to log in with. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the login completes. + */ + static logIn(username: string, password: string, options?: FullOptions): Promise; + /** + * Logs in a user with a username (or email) and password, and authData. On success, this + * saves the session to disk, so you can retrieve the currently logged in + * user using current. + * + * @param {string} username The username (or email) to log in with. + * @param {string} password The password to log in with. + * @param {object} authData The authData to log in with. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the login completes. + */ + static logInWithAdditionalAuth(username: string, password: string, authData: AuthData, options?: FullOptions): Promise; + /** + * Logs in a user with an objectId. On success, this saves the session + * to disk, so you can retrieve the currently logged in user using + * current. + * + * @param {string} userId The objectId for the user. + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the login completes. + */ + static loginAs(userId: string): Promise; + /** + * Logs in a user with a session token. On success, this saves the session + * to disk, so you can retrieve the currently logged in user using + * current. + * + * @param {string} sessionToken The sessionToken to log in with. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the login completes. + */ + static become(sessionToken: string, options?: RequestOptions): Promise; + /** + * Retrieves a user with a session token. + * + * @param {string} sessionToken The sessionToken to get user with. + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with the user is fetched. + */ + static me(sessionToken: string, options?: RequestOptions): Promise; + /** + * Logs in a user with a session token. On success, this saves the session + * to disk, so you can retrieve the currently logged in user using + * current. If there is no session token the user will not logged in. + * + * @param {object} userJSON The JSON map of the User's data + * @static + * @returns {Promise} A promise that is fulfilled with the user when + * the login completes. + */ + static hydrate(userJSON: AttributeMap): Promise; + /** + * Static version of {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} + * + * @param provider + * @param options + * @param saveOpts + * @static + * @returns {Promise} + */ + static logInWith(provider: any, options: { + authData?: AuthData; + }, saveOpts?: FullOptions): Promise; + /** + * Logs out the currently logged in user session. This will remove the + * session from disk, log out of linked services, and future calls to + * current will return null. + * + * @param {object} options + * @static + * @returns {Promise} A promise that is resolved when the session is + * destroyed on the server. + */ + static logOut(options?: RequestOptions): Promise; + /** + * Requests a password reset email to be sent to the specified email address + * associated with the user account. This email allows the user to securely + * reset their password on the Parse site. + * + * @param {string} email The email address associated with the user that + * forgot their password. + * @param {object} options + * @static + * @returns {Promise} + */ + static requestPasswordReset(email: string, options?: RequestOptions): Promise; + /** + * Request an email verification. + * + * @param {string} email The email address associated with the user that + * needs to verify their email. + * @param {object} options + * @static + * @returns {Promise} + */ + static requestEmailVerification(email: string, options?: RequestOptions): Promise; + /** + * Verify whether a given password is the password of the current user. + * + * @param {string} username A username to be used for identificaiton + * @param {string} password A password to be verified + * @param {object} options + * @static + * @returns {Promise} A promise that is fulfilled with a user + * when the password is correct. + */ + static verifyPassword(username: string, password: string, options?: RequestOptions): Promise; + /** + * Allow someone to define a custom User class without className + * being rewritten to _User. The default behavior is to rewrite + * User to _User for legacy reasons. This allows developers to + * override that behavior. + * + * @param {boolean} isAllowed Whether or not to allow custom User class + * @static + */ + static allowCustomUserClass(isAllowed: boolean): void; + /** + * Allows a legacy application to start using revocable sessions. If the + * current session token is not revocable, a request will be made for a new, + * revocable session. + * It is not necessary to call this method from cloud code unless you are + * handling user signup or login from the server side. In a cloud code call, + * this function will not attempt to upgrade the current token. + * + * @param {object} options + * @static + * @returns {Promise} A promise that is resolved when the process has + * completed. If a replacement session token is requested, the promise + * will be resolved after a new token has been fetched. + */ + static enableRevocableSession(options?: RequestOptions): Promise; + /** + * Enables the use of become or the current user in a server + * environment. These features are disabled by default, since they depend on + * global objects that are not memory-safe for most servers. + * + * @static + */ + static enableUnsafeCurrentUser(): void; + /** + * Disables the use of become or the current user in any environment. + * These features are disabled on servers by default, since they depend on + * global objects that are not memory-safe for most servers. + * + * @static + */ + static disableUnsafeCurrentUser(): void; + /** + * When registering users with {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} a basic auth provider + * is automatically created for you. + * + * For advanced authentication, you can register an Auth provider to + * implement custom authentication, deauthentication. + * + * @param provider + * @see {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider} + * @see {@link https://docs.parseplatform.org/js/guide/#custom-authentication-module Custom Authentication Module} + * @static + */ + static _registerAuthenticationProvider(provider: any): void; + /** + * @param provider + * @param options + * @param saveOpts + * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#logInWith logInWith} + * @static + * @returns {Promise} + */ + static _logInWith(provider: any, options: { + authData?: AuthData; + }, saveOpts?: FullOptions): Promise; + static _clearCache(): void; + static _setCurrentUserCache(user: ParseUser): void; + /** + * @param {object} attributes The initial set of data to store in the user. + */ + constructor(attributes: AttributeMap | null); + /** + * Request a revocable session token to replace the older style of token. + * + * @param {object} options + * @returns {Promise} A promise that is resolved when the replacement + * token has been fetched. + */ + _upgradeToRevocableSession(options: RequestOptions): Promise; + /** + * Parse allows you to link your users with {@link https://docs.parseplatform.org/parse-server/guide/#oauth-and-3rd-party-authentication 3rd party authentication}, enabling + * your users to sign up or log into your application using their existing identities. + * Since 2.9.0 + * + * @see {@link https://docs.parseplatform.org/js/guide/#linking-users Linking Users} + * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider} + * @param {object} options + *
      + *
    • If provider is string, options is {@link http://docs.parseplatform.org/parse-server/guide/#supported-3rd-party-authentications authData} + *
    • If provider is AuthProvider, options is saveOpts + *
    + * @param {object} saveOpts useMasterKey / sessionToken + * @returns {Promise} A promise that is fulfilled with the user is linked + */ + linkWith(provider: any, options: { + authData?: AuthData; + }, saveOpts?: FullOptions): Promise; + /** + * @param provider + * @param options + * @param saveOpts + * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} + * @returns {Promise} + */ + _linkWith(provider: any, options: { + authData?: AuthData; + }, saveOpts?: FullOptions): Promise; + /** + * Synchronizes auth data for a provider (e.g. puts the access token in the + * right place to be used by the Facebook SDK). + * + * @param provider + */ + _synchronizeAuthData(provider: string): void; + /** + * Synchronizes authData for all providers. + */ + _synchronizeAllAuthData(): void; + /** + * Removes null values from authData (which exist temporarily for unlinking) + */ + _cleanupAuthData(): void; + /** + * Unlinks a user from a service. + * + * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider} + * @param {object} options MasterKey / SessionToken + * @returns {Promise} A promise that is fulfilled when the unlinking + * finishes. + */ + _unlinkFrom(provider: any, options?: FullOptions): Promise; + /** + * Checks whether a user is linked to a service. + * + * @param {object} provider service to link to + * @returns {boolean} true if link was successful + */ + _isLinked(provider: any): boolean; + /** + * Deauthenticates all providers. + */ + _logOutWithAll(): void; + /** + * Deauthenticates a single provider (e.g. removing access tokens from the + * Facebook SDK). + * + * @param {object} provider service to logout of + */ + _logOutWith(provider: any): void; + /** + * Class instance method used to maintain specific keys when a fetch occurs. + * Used to ensure that the session token is not lost. + * + * @returns {object} sessionToken + */ + _preserveFieldsOnFetch(): AttributeMap; + /** + * Returns true if current would return this user. + * + * @returns {boolean} true if user is cached on disk + */ + isCurrent(): boolean; + /** + * Returns true if current would return this user. + * + * @returns {Promise} true if user is cached on disk + */ + isCurrentAsync(): Promise; + /** + * Returns get("username"). + * + * @returns {string} + */ + getUsername(): string | null; + /** + * Calls set("username", username, options) and returns the result. + * + * @param {string} username + */ + setUsername(username: string): void; + /** + * Calls set("password", password, options) and returns the result. + * + * @param {string} password User's Password + */ + setPassword(password: string): void; + /** + * Returns get("email"). + * + * @returns {string} User's Email + */ + getEmail(): string | null; + /** + * Calls set("email", email) and returns the result. + * + * @param {string} email + * @returns {boolean} + */ + setEmail(email: string): boolean; + /** + * Returns the session token for this user, if the user has been logged in, + * or if it is the result of a query with the master key. Otherwise, returns + * undefined. + * + * @returns {string} the session token, or undefined + */ + getSessionToken(): string | null; + /** + * Checks whether this user is the current user and has been authenticated. + * + * @returns {boolean} whether this user is the current user and is logged in. + */ + authenticated(): boolean; + /** + * Signs up a new user. You should call this instead of save for + * new Parse.Users. This will create a new Parse.User on the server, and + * also persist the session on disk so that you can access the user using + * current. + * + *

    A username and password must be set before calling signUp.

    + * + * @param {object} attrs Extra fields to set on the new user, or null. + * @param {object} options + * @returns {Promise} A promise that is fulfilled when the signup + * finishes. + */ + signUp(attrs: AttributeMap, options?: FullOptions): Promise; + /** + * Logs in a Parse.User. On success, this saves the session to disk, + * so you can retrieve the currently logged in user using + * current. + * + *

    A username and password must be set before calling logIn.

    + * + * @param {object} options + * @returns {Promise} A promise that is fulfilled with the user when + * the login is complete. + */ + logIn(options?: FullOptions): Promise; + /** + * Wrap the default save behavior with functionality to save to local + * storage if this is current user. + * + * @param {...any} args + * @returns {Promise} + */ + save(...args: Array): Promise; + /** + * Wrap the default destroy behavior with functionality that logs out + * the current user when it is destroyed + * + * @param {...any} args + * @returns {Parse.User} + */ + destroy(...args: Array): Promise; + /** + * Wrap the default fetch behavior with functionality to save to local + * storage if this is current user. + * + * @param {...any} args + * @returns {Parse.User} + */ + fetch(...args: Array): Promise; + /** + * Wrap the default fetchWithInclude behavior with functionality to save to local + * storage if this is current user. + * + * @param {...any} args + * @returns {Parse.User} + */ + fetchWithInclude(...args: Array): Promise; + /** + * Verify whether a given password is the password of the current user. + * + * @param {string} password A password to be verified + * @param {object} options + * @returns {Promise} A promise that is fulfilled with a user + * when the password is correct. + */ + verifyPassword(password: string, options?: RequestOptions): Promise; +} +import { RequestOptions } from './RESTController'; +import { FullOptions } from './RESTController'; +import { AttributeMap } from './ObjectStateMutations'; diff --git a/types/Push.d.ts b/types/Push.d.ts new file mode 100644 index 000000000..3108e0d24 --- /dev/null +++ b/types/Push.d.ts @@ -0,0 +1,59 @@ +// @ts-nocheck +/** + * Contains functions to deal with Push in Parse. + * + * @class Parse.Push + * @static + * @hideconstructor + */ +/** + * Sends a push notification. + * **Available in Cloud Code only.** + * + * See {@link https://docs.parseplatform.org/js/guide/#push-notifications Push Notification Guide} + * + * @function send + * @name Parse.Push.send + * @param {object} data - The data of the push notification. Valid fields + * are: + *
      + *
    1. channels - An Array of channels to push to.
    2. + *
    3. push_time - A Date object for when to send the push.
    4. + *
    5. expiration_time - A Date object for when to expire + * the push.
    6. + *
    7. expiration_interval - The seconds from now to expire the push.
    8. + *
    9. where - A Parse.Query over Parse.Installation that is used to match + * a set of installations to push to.
    10. + *
    11. data - The data to send as part of the push.
    12. + *
        + * @param {object} options Valid options + * are:
          + *
        • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
        + * @returns {Promise} A promise that is fulfilled when the push request + * completes. + */ +export function send(data: PushData, options?: FullOptions): Promise; +/** + * Gets push status by Id + * + * @function getPushStatus + * @name Parse.Push.getPushStatus + * @param {string} pushStatusId The Id of Push Status. + * @param {object} options Valid options + * are:
          + *
        • useMasterKey: In Cloud Code and Node only, causes the Master Key to + * be used for this request. + *
        + * @returns {Parse.Object} Status of Push. + */ +export function getPushStatus(pushStatusId: string, options?: FullOptions): Promise; +type PushData = { + where?: WhereClause | ParseQuery; + push_time?: string | Date; + expiration_time?: string | Date; + expiration_interval?: number; +}; +import { FullOptions } from './RESTController'; +export {}; diff --git a/types/RESTController.d.ts b/types/RESTController.d.ts new file mode 100644 index 000000000..540be2e6f --- /dev/null +++ b/types/RESTController.d.ts @@ -0,0 +1,21 @@ +type RequestOptions = { + useMasterKey?: boolean; + sessionToken?: string; + installationId?: string; + returnStatus?: boolean; + batchSize?: number; + include?: any; + progress?: any; + context?: any; + usePost?: boolean; +}; +type FullOptions = { + success?: any; + error?: any; + useMasterKey?: boolean; + sessionToken?: string; + installationId?: string; + progress?: any; + usePost?: boolean; +}; +export { RequestOptions, FullOptions }; diff --git a/types/SingleInstanceStateController.d.ts b/types/SingleInstanceStateController.d.ts new file mode 100644 index 000000000..e84481bed --- /dev/null +++ b/types/SingleInstanceStateController.d.ts @@ -0,0 +1,31 @@ +export function getState(obj: ObjectIdentifier): State | null; +export function initializeState(obj: ObjectIdentifier, initial?: State): State; +export function removeState(obj: ObjectIdentifier): State | null; +export function getServerData(obj: ObjectIdentifier): AttributeMap; +export function setServerData(obj: ObjectIdentifier, attributes: AttributeMap): void; +export function getPendingOps(obj: ObjectIdentifier): Array; +export function setPendingOp(obj: ObjectIdentifier, attr: string, op: Op | null): void; +export function pushPendingState(obj: ObjectIdentifier): void; +export function popPendingState(obj: ObjectIdentifier): OpsMap; +export function mergeFirstPendingState(obj: ObjectIdentifier): void; +export function getObjectCache(obj: ObjectIdentifier): ObjectCache; +export function estimateAttribute(obj: ObjectIdentifier, attr: string): mixed; +export function estimateAttributes(obj: ObjectIdentifier): AttributeMap; +export function commitServerChanges(obj: ObjectIdentifier, changes: AttributeMap): void; +export function enqueueTask(obj: ObjectIdentifier, task: () => Promise): Promise; +export function clearAllState(): void; +export function duplicateState(source: { + id: string; +}, dest: { + id: string; +}): void; +type ObjectIdentifier = { + className: string; + id: string; +}; +import { State } from './ObjectStateMutations'; +import { AttributeMap } from './ObjectStateMutations'; +import { OpsMap } from './ObjectStateMutations'; +import { Op } from './ParseOp'; +import { ObjectCache } from './ObjectStateMutations'; +export {}; diff --git a/types/Socket.weapp.d.ts b/types/Socket.weapp.d.ts new file mode 100644 index 000000000..d5194b543 --- /dev/null +++ b/types/Socket.weapp.d.ts @@ -0,0 +1,10 @@ +export = SocketWeapp; +declare class SocketWeapp { + constructor(serverURL: any); + onopen: () => void; + onmessage: () => void; + onclose: () => void; + onerror: () => void; + send(data: any): void; + close(): void; +} diff --git a/types/Storage.d.ts b/types/Storage.d.ts new file mode 100644 index 000000000..5b82a620a --- /dev/null +++ b/types/Storage.d.ts @@ -0,0 +1,14 @@ +export default Storage; +declare namespace Storage { + function async(): boolean; + function getItem(path: string): string; + function getItemAsync(path: string): Promise; + function setItem(path: string, value: string): void; + function setItemAsync(path: string, value: string): Promise; + function removeItem(path: string): void; + function removeItemAsync(path: string): Promise; + function getAllKeys(): string[]; + function getAllKeysAsync(): Promise; + function generatePath(path: string): string; + function _clear(): void; +} diff --git a/types/StorageController.browser.d.ts b/types/StorageController.browser.d.ts new file mode 100644 index 000000000..b3f1f7fe0 --- /dev/null +++ b/types/StorageController.browser.d.ts @@ -0,0 +1,6 @@ +export let async: number; +export function getItem(path: string): string; +export function setItem(path: string, value: string): void; +export function removeItem(path: string): void; +export function getAllKeys(): string[]; +export function clear(): void; diff --git a/types/StorageController.default.d.ts b/types/StorageController.default.d.ts new file mode 100644 index 000000000..b3f1f7fe0 --- /dev/null +++ b/types/StorageController.default.d.ts @@ -0,0 +1,6 @@ +export let async: number; +export function getItem(path: string): string; +export function setItem(path: string, value: string): void; +export function removeItem(path: string): void; +export function getAllKeys(): string[]; +export function clear(): void; diff --git a/types/StorageController.react-native.d.ts b/types/StorageController.react-native.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/types/StorageController.react-native.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/StorageController.weapp.d.ts b/types/StorageController.weapp.d.ts new file mode 100644 index 000000000..91bafa45b --- /dev/null +++ b/types/StorageController.weapp.d.ts @@ -0,0 +1,6 @@ +export let async: number; +export function getItem(path: string): string; +export function setItem(path: string, value: string): void; +export function removeItem(path: string): void; +export function getAllKeys(): any; +export function clear(): void; diff --git a/types/TaskQueue.d.ts b/types/TaskQueue.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/types/TaskQueue.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/UniqueInstanceStateController.d.ts b/types/UniqueInstanceStateController.d.ts new file mode 100644 index 000000000..f3e2ccf60 --- /dev/null +++ b/types/UniqueInstanceStateController.d.ts @@ -0,0 +1,23 @@ +export function getState(obj: ParseObject): State | null; +export function initializeState(obj: ParseObject, initial?: State): State; +export function removeState(obj: ParseObject): State | null; +export function getServerData(obj: ParseObject): AttributeMap; +export function setServerData(obj: ParseObject, attributes: AttributeMap): void; +export function getPendingOps(obj: ParseObject): Array; +export function setPendingOp(obj: ParseObject, attr: string, op: Op | null): void; +export function pushPendingState(obj: ParseObject): void; +export function popPendingState(obj: ParseObject): OpsMap; +export function mergeFirstPendingState(obj: ParseObject): void; +export function getObjectCache(obj: ParseObject): ObjectCache; +export function estimateAttribute(obj: ParseObject, attr: string): mixed; +export function estimateAttributes(obj: ParseObject): AttributeMap; +export function commitServerChanges(obj: ParseObject, changes: AttributeMap): void; +export function enqueueTask(obj: ParseObject, task: () => Promise): Promise; +export function duplicateState(source: ParseObject, dest: ParseObject): void; +export function clearAllState(): void; +import ParseObject from './ParseObject'; +import { State } from './ObjectStateMutations'; +import { AttributeMap } from './ObjectStateMutations'; +import { OpsMap } from './ObjectStateMutations'; +import { Op } from './ParseOp'; +import { ObjectCache } from './ObjectStateMutations'; diff --git a/types/Xhr.weapp.d.ts b/types/Xhr.weapp.d.ts new file mode 100644 index 000000000..84263fafa --- /dev/null +++ b/types/Xhr.weapp.d.ts @@ -0,0 +1,28 @@ +export = XhrWeapp; +declare class XhrWeapp { + UNSENT: number; + OPENED: number; + HEADERS_RECEIVED: number; + LOADING: number; + DONE: number; + header: {}; + readyState: number; + status: number; + response: string; + responseType: string; + responseText: string; + responseHeader: {}; + method: string; + url: string; + onabort: () => void; + onprogress: () => void; + onerror: () => void; + onreadystatechange: () => void; + requestTask: any; + getAllResponseHeaders(): string; + getResponseHeader(key: any): any; + setRequestHeader(key: any, value: any): void; + open(method: any, url: any): void; + abort(): void; + send(data: any): void; +} diff --git a/types/arrayContainsObject.d.ts b/types/arrayContainsObject.d.ts new file mode 100644 index 000000000..764acda42 --- /dev/null +++ b/types/arrayContainsObject.d.ts @@ -0,0 +1,2 @@ +export default function arrayContainsObject(array: Array, object: ParseObject): boolean; +import ParseObject from './ParseObject'; diff --git a/types/canBeSerialized.d.ts b/types/canBeSerialized.d.ts new file mode 100644 index 000000000..7cc2db046 --- /dev/null +++ b/types/canBeSerialized.d.ts @@ -0,0 +1,2 @@ +export default function canBeSerialized(obj: ParseObject): boolean; +import ParseObject from './ParseObject'; diff --git a/types/decode.d.ts b/types/decode.d.ts new file mode 100644 index 000000000..d811640d5 --- /dev/null +++ b/types/decode.d.ts @@ -0,0 +1 @@ +export default function decode(value: any): any; diff --git a/types/encode.d.ts b/types/encode.d.ts new file mode 100644 index 000000000..510cff8d7 --- /dev/null +++ b/types/encode.d.ts @@ -0,0 +1 @@ +export default function _default(value: mixed, disallowObjects?: boolean, forcePointers?: boolean, seen?: Array, offline?: boolean): any; diff --git a/types/equals.d.ts b/types/equals.d.ts new file mode 100644 index 000000000..fa093c69f --- /dev/null +++ b/types/equals.d.ts @@ -0,0 +1 @@ +export default function equals(a: any, b: any): boolean; diff --git a/types/escape.d.ts b/types/escape.d.ts new file mode 100644 index 000000000..701cce23d --- /dev/null +++ b/types/escape.d.ts @@ -0,0 +1 @@ +export default function escape(str: string): string; diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 000000000..8dd1ccd66 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,7 @@ +// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/b23a36e669fa127d1035e22ca93faab85b98e49f/types/parse/index.d.ts#L11 + +/// +/// + +import parse from "./Parse"; +export default parse; diff --git a/types/isRevocableSession.d.ts b/types/isRevocableSession.d.ts new file mode 100644 index 000000000..29d483cbb --- /dev/null +++ b/types/isRevocableSession.d.ts @@ -0,0 +1,4 @@ +/** + * @flow + */ +export default function isRevocableSession(token: string): boolean; diff --git a/types/node.d.ts b/types/node.d.ts new file mode 100644 index 000000000..d4bbf2ccf --- /dev/null +++ b/types/node.d.ts @@ -0,0 +1,3 @@ +import * as parse from "./index"; + +export = parse; diff --git a/types/parseDate.d.ts b/types/parseDate.d.ts new file mode 100644 index 000000000..4ec986b68 --- /dev/null +++ b/types/parseDate.d.ts @@ -0,0 +1,4 @@ +/** + * @flow + */ +export default function parseDate(iso8601: string): Date | null; diff --git a/types/promiseUtils.d.ts b/types/promiseUtils.d.ts new file mode 100644 index 000000000..ae6efac22 --- /dev/null +++ b/types/promiseUtils.d.ts @@ -0,0 +1,3 @@ +export function resolvingPromise(): Promise; +export function when(promises: any, ...args: any[]): any; +export function continueWhile(test: any, emitter: any): any; diff --git a/types/react-native.d.ts b/types/react-native.d.ts new file mode 100644 index 000000000..d4bbf2ccf --- /dev/null +++ b/types/react-native.d.ts @@ -0,0 +1,3 @@ +import * as parse from "./index"; + +export = parse; diff --git a/types/tests.ts b/types/tests.ts new file mode 100644 index 000000000..a275584e9 --- /dev/null +++ b/types/tests.ts @@ -0,0 +1,2170 @@ +import Parse from './Parse'; +// Parse is a global type, but it can also be imported + +// class GameScore extends Parse.Object { +// constructor(options?: any) { +// super('GameScore', options); +// } +// } + +// class Game extends Parse.Object { +// constructor(options?: any) { +// super('Game', options); +// } +// } + +// function test_config() { +// Parse.Config.save({ foo: 'bar' }, { foo: true }); +// Parse.Config.get({ useMasterKey: true }); +// } + +// function test_object() { +// const game = new Game(); +// game.save(null, { +// useMasterKey: true, +// sessionToken: 'sometoken', +// cascadeSave: false, +// }).then(result => result); + +// if (!game.isNew()) { + +// } + +// if (game.toPointer().className !== 'Game') { + +// } + +// game.fetch({}); + +// // Create a new instance of that class. +// const gameScore = new GameScore(); + +// gameScore.set('score', 1337); +// gameScore.set('playerName', 'Sean Plott'); +// gameScore.set('cheatMode', false); + +// // Setting attrs using object +// gameScore.set({ +// level: '10', +// difficult: 15, +// }); + +// const score = gameScore.get('score'); +// const playerName = gameScore.get('playerName'); +// const cheatMode = gameScore.get('cheatMode'); + +// gameScore.increment('score'); +// gameScore.addUnique('skills', 'flying'); +// gameScore.addUnique('skills', 'kungfu'); +// gameScore.addAll('skills', ['kungfu']); +// gameScore.addAllUnique('skills', ['kungfu']); +// gameScore.remove('skills', 'flying'); +// gameScore.removeAll('skills', ['kungFu']); +// game.set('gameScore', gameScore); + +// const gameCopy = Game.fromJSON(JSON.parse(JSON.stringify(game)), true); + +// const object = new Parse.Object('TestObject'); +// object.equals(gameScore); +// object.fetchWithInclude(['key1', 'key2']); +// } + +// function test_errors() { +// try { +// throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'sdfds'); +// } catch (error) { +// if (error.code !== 1) { + +// } +// } +// } + +// function test_query() { +// const gameScore = new GameScore(); + +// const query = new Parse.Query(GameScore); +// query.equalTo('playerName', 'Dan Stemkoski'); +// query.notEqualTo('playerName', 'Michael Yabuti'); +// query.fullText('playerName', 'dan', { language: 'en', caseSensitive: false, diacriticSensitive: true }); +// query.greaterThan('playerAge', 18); +// query.eachBatch(objs => Promise.resolve(), { batchSize: 10 }); +// query.each(score => Promise.resolve()); +// query.hint('_id_'); +// query.explain(true); +// query.limit(10); +// query.skip(10); + +// // Sorts the results in ascending order by the score field +// query.ascending('score'); + +// // Sorts the results in descending order by the score field +// query.descending('score'); + +// // Restricts to wins < 50 +// query.lessThan('wins', 50); + +// // Restricts to wins <= 50 +// query.lessThanOrEqualTo('wins', 50); + +// // Restricts to wins > 50 +// query.greaterThan('wins', 50); + +// // Restricts to wins >= 50 +// query.greaterThanOrEqualTo('wins', 50); + +// query.containedBy('place', ['1', '2']); +// // Finds scores from any of Jonathan, Dario, or Shawn +// query.containedIn('playerName', ['Jonathan Walsh', 'Dario Wunsch', 'Shawn Simon']); + +// // Finds scores from anyone who is neither Jonathan, Dario, nor Shawn +// query.notContainedIn('playerName', ['Jonathan Walsh', 'Dario Wunsch', 'Shawn Simon']); + +// // Finds objects that have the score set +// query.exists('score'); + +// // Finds objects that don't have the score set +// query.doesNotExist('score'); +// query.matchesKeyInQuery('hometown', 'city', query); +// query.doesNotMatchKeyInQuery('hometown', 'city', query); +// query.select('score', 'playerName'); + +// // Find objects where the array in arrayKey contains 2. +// query.equalTo('arrayKey', 2); + +// // Find objects where the array in arrayKey contains all of the elements 2, 3, and 4. +// query.containsAll('arrayKey', [2, 3, 4]); +// query.containsAllStartingWith('arrayKey', ['2', '3', '4']); + +// query.startsWith('name', "Big Daddy's"); +// query.equalTo('score', gameScore); +// query.exists('score'); +// query.include('score'); +// query.include(['score.team']); +// query.includeAll(); +// query.sortByTextScore(); +// // Find objects that match the aggregation pipeline +// query.aggregate({ +// group: { +// objectId: '$name', +// }, +// }); + +// query.aggregate({ +// count: 'total', +// }); + +// query.aggregate({ +// lookup: { +// from: 'Collection', +// foreignField: 'id', +// localField: 'id', +// as: 'result', +// }, +// }); +// query.aggregate({ +// lookup: { +// from: 'Target', +// let: { foo: 'bar', baz: 123 }, +// pipeline: [], +// as: 'result', +// }, +// }); + +// query.aggregate({ +// graphLookup: { +// from: 'Target', +// connectFromField: 'objectId', +// connectToField: 'newId', +// as: 'result', +// }, +// }); + +// query.aggregate({ +// facet: { +// foo: [ +// { +// count: 'total', +// }, +// ], +// bar: [ +// { +// group: { +// objectId: '$name', +// }, +// }, +// ], +// }, +// }); + +// query.aggregate({ +// unwind: '$field', +// }); + +// query.aggregate({ +// unwind: { +// path: '$field', +// includeArrayIndex: 'newIndex', +// preserveNullAndEmptyArrays: true, +// }, +// }); + +// // Find objects with distinct key +// query.distinct('name'); + +// const testQuery = Parse.Query.or(query, query); +// } + +// function test_query_exclude() { +// const gameScore = new GameScore(); + +// const query = new Parse.Query(GameScore); + +// // Show all keys, except the specified key. +// query.exclude('place'); + +// const testQuery = Parse.Query.or(query, query); +// } + +// async function test_query_promise() { +// // Test promise with a query +// const findQuery = new Parse.Query('Test'); +// findQuery +// .find() +// .then(() => { +// // success +// }) +// .catch(() => { +// // error +// }); + +// const getQuery = new Parse.Query('Test'); +// try { +// await getQuery.get('objectId'); +// } catch (error) { +// // noop +// } + +// await getQuery.map((score, index) => score.increment('score', index)); +// await getQuery.reduce((accum, score, index) => (accum += score.get('score')), 0); +// await getQuery.reduce((accum, score, index) => (accum += score.get('score')), 0, { batchSize: 200 }); +// await getQuery.filter(scores => scores.get('score') > 0); +// await getQuery.filter(scores => scores.get('score') > 0, { batchSize: 10 }); +// } + +// async function test_live_query() { +// const subscription = await new Parse.Query('Test').subscribe(); +// subscription.on('close', object => { +// // $ExpectType ParseObject +// object; +// }); +// subscription.on('create', object => { +// // $ExpectType ParseObject +// object; +// }); +// subscription.on('delete', object => { +// // $ExpectType ParseObject +// object; +// }); +// subscription.on('enter', object => { +// // $ExpectType ParseObject +// object; +// }); +// subscription.on('leave', object => { +// // $ExpectType ParseObject +// object; +// }); +// subscription.on('open', object => { +// // $ExpectType ParseObject +// object; +// }); +// subscription.on('update', object => { +// // $ExpectType ParseObject +// object; +// }); +// } + +// function test_anonymous_utils() { +// // $ExpectType boolean +// Parse.AnonymousUtils.isLinked(new Parse.User()); +// // $ExpectType Promise +// Parse.AnonymousUtils.link(new Parse.User(), { useMasterKey: true, sessionToken: '' }); +// // $ExpectType Promise +// Parse.AnonymousUtils.logIn({ useMasterKey: true, sessionToken: '' }); +// } + +// function return_a_query(): Parse.Query { +// return new Parse.Query(Game); +// } + +// function test_each() { +// new Parse.Query(Game).each(game => { +// // $ExpectType Game +// game; +// }); +// } + +// function test_file() { +// const base64 = 'V29ya2luZyBhdCBQYXJzZSBpcyBncmVhdCE='; +// let file = new Parse.File('myfile.txt', { base64 }); + +// file = new Parse.File('nana', { uri: 'http://example.com/image.jps' }); + +// const bytes = [0xbe, 0xef, 0xca, 0xfe]; +// file = new Parse.File('myfile.txt', bytes); + +// file = new Parse.File('myfile.zzz', new Blob(), 'image/png'); + +// const src = file.url(); +// const secure = file.url({ forceSecure: true }); + +// file.save().then( +// () => { +// // The file has been saved to Parse. +// }, +// error => { +// // The file either could n ot be read, or could not be saved to Parse. +// }, +// ); + +// Parse.Cloud.httpRequest({ url: file.url() }).then((response: Parse.Cloud.HttpResponse) => { +// // result +// }); + +// // TODO: Check + +// file.cancel(); +// file.destroy(); +// } + +// function test_file_tags_and_metadata() { +// const base64 = 'V29ya2luZyBhdCBQYXJzZSBpcyBncmVhdCE='; +// const file = new Parse.File('myfile.txt', { base64 }); +// file.setTags({ ownerId: 42, status: 'okay' }); +// file.addTag('labes', ['one', 'two', 'three']); +// file.setMetadata({ contentType: 'plain/text', contentLength: 579 }); +// file.addMetadata('author', 'John Doe'); + +// const tags = file.tags(); +// const ownerId = tags['ownerId']; + +// const metadata = file.metadata(); +// const contentType = metadata['contentType']; +// } + +// function test_analytics() { +// const dimensions = { +// // Define ranges to bucket data points into meaningful segments +// priceRange: '1000-1500', +// // Did the user filter the query? +// source: 'craigslist', +// // Do searches happen more often on weekdays or weekends? +// dayType: 'weekday', +// }; +// // Send the dimensions to Parse along with the 'search' event +// Parse.Analytics.track('search', dimensions); + +// const codeString = '404'; +// Parse.Analytics.track('error', { code: codeString }); +// } + +// function test_relation() { +// const game1 = new Game(); +// const game2 = new Game(); + +// new Parse.User() +// .relation('games') +// .query() +// .find() +// .then((g: Game[]) => {}); +// new Parse.User().relation('games').add(game1); +// new Parse.User().relation('games').add([game1, game2]); + +// new Parse.User().relation('games').remove(game1); +// new Parse.User().relation('games').remove([game1, game2]); +// } + +// function test_user() { +// const user = new Parse.User(); +// user.set('username', 'my name'); +// user.set('password', 'my pass'); +// user.set('email', 'email@example.com'); +// user.signUp(null, { useMasterKey: true }); + +// const anotherUser: Parse.User = Parse.User.fromJSON({}); +// anotherUser.set('email', 'email@example.com'); +// } + +// async function test_user_currentAsync() { +// const asyncUser = await Parse.User.currentAsync(); +// if (asyncUser) { +// asyncUser.set('email', 'email@example.com'); +// } else if (asyncUser === null) { +// Parse.User.logIn('email@example.com', 'my pass'); +// } +// } + +// function test_user_acl_roles() { +// const user = new Parse.User(); +// user.set('username', 'my name'); +// user.set('password', 'my pass'); +// user.set('email', 'email@example.com'); + +// // other fields can be set just like with Parse.Object +// user.set('phone', '415-392-0202'); + +// const currentUser = Parse.User.current(); +// if (currentUser) { +// // do stuff with the user +// } else { +// // show the signup or login page +// } + +// Parse.User.become('session-token-here').then( +// user => { +// // The current user is now set to user. +// }, +// error => { +// // The token could not be validated. +// }, +// ); + +// Parse.User.hydrate({}).then( +// user => { +// // The current user is now set to user. +// }, +// error => { +// // The token could not be validated. +// }, +// ); + +// const game = new Game(); +// game.set('gameScore', new GameScore()); +// game.setACL(new Parse.ACL(Parse.User.current())); +// game.save().then((game: Game) => {}); +// game.save(null, { useMasterKey: true }); +// game.save({ score: '10' }, { useMasterKey: true }).then( +// game => { +// // Update game then revert it to the last saved state. +// game.set('score', '20'); +// game.revert('score'); +// game.revert('score', 'ACL'); +// game.revert(); +// }, +// error => { +// // The save failed +// }, +// ); + +// const groupACL = new Parse.ACL(); + +// const userList: Parse.User[] = [Parse.User.current()!]; +// // userList is an array with the users we are sending this message to. +// for (const userListItem of userList) { +// groupACL.setReadAccess(userListItem, true); +// groupACL.setWriteAccess(userListItem, true); +// } + +// groupACL.setPublicReadAccess(true); + +// game.setACL(groupACL); + +// Parse.User.requestPasswordReset('email@example.com').then( +// data => { +// // The current user is now set to user. +// }, +// error => { +// // The token could not be validated. +// }, +// ); + +// Parse.User.requestEmailVerification('email@example.com').then( +// data => { +// // The current user is now set to user. +// }, +// error => { +// // The token could not be validated. +// }, +// ); + +// // By specifying no write privileges for the ACL, we can ensure the role cannot be altered. +// const role = new Parse.Role('Administrator', groupACL); +// role.getUsers().add(userList[0]); +// role.getRoles().add(role); +// role.save(); + +// Parse.User.logOut().then(data => { +// // logged out +// }); +// } + +// function test_facebook_util() { +// Parse.FacebookUtils.init({ +// appId: 'YOUR_APP_ID', // Facebook App ID +// channelUrl: '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File +// cookie: true, // enable cookies to allow Parse to access the session +// xfbml: true, // parse XFBML +// }); + +// Parse.FacebookUtils.logIn(null, { +// success: (user: Parse.User) => { +// if (!user.existed()) { +// alert('User signed up and logged in through Facebook!'); +// } else { +// alert('User logged in through Facebook!'); +// } +// }, +// error: (user: Parse.User, error: any) => { +// alert('User cancelled the Facebook login or did not fully authorize.'); +// }, +// }); + +// const user = Parse.User.current()!; + +// if (!Parse.FacebookUtils.isLinked(user)) { +// Parse.FacebookUtils.link(user, null, { +// success: (user: any) => { +// alert('Woohoo, user logged in with Facebook!'); +// }, +// error: (user: any, error: any) => { +// alert('User cancelled the Facebook login or did not fully authorize.'); +// }, +// }); +// } + +// Parse.FacebookUtils.unlink(user, { +// success: (user: Parse.User) => { +// alert('The user is no longer associated with their Facebook account.'); +// }, +// }); +// } + +// async function test_cloud_functions() { +// Parse.Cloud.run( +// 'hello', +// {}, +// { +// success: (result: any) => { +// // result +// }, +// error: (error: any) => {}, +// }, +// ); + +// // $ExpectType any +// await Parse.Cloud.run('SomeFunction'); + +// // $ExpectType any +// await Parse.Cloud.run('SomeFunction', { something: 'whatever' }); + +// // $ExpectType any +// await Parse.Cloud.run('SomeFunction', null, { useMasterKey: true }); + +// // ExpectType boolean +// await Parse.Cloud.run<() => boolean>('SomeFunction'); + +// // $ExpectType boolean +// await Parse.Cloud.run<() => boolean>('SomeFunction', null); + +// // $ExpectType boolean +// await Parse.Cloud.run<() => boolean>('SomeFunction', null, { useMasterKey: true }); + +// // $ExpectType number +// await Parse.Cloud.run<(params: { paramA: string }) => number>('SomeFunction', { paramA: 'hello' }); + +// // @ts-expect-error +// await Parse.Cloud.run<(params: { paramA: string }) => number>('SomeFunction'); + +// // @ts-expect-error +// await Parse.Cloud.run<(params: { paramA: string }) => number>('SomeFunction', { paramZ: 'hello' }); + +// // @ts-expect-error +// await Parse.Cloud.run<(params: { paramA: string }) => number>('SomeFunction', null, { useMasterKey: true }); + +// // @ts-expect-error +// await Parse.Cloud.run<(params: string) => any>('SomeFunction', 'hello'); + +// Parse.Cloud.afterDelete('MyCustomClass', (request: Parse.Cloud.AfterDeleteRequest) => { +// // result +// }); + +// Parse.Cloud.afterSave('MyCustomClass', (request: Parse.Cloud.AfterSaveRequest) => { +// if (!request.context) { +// throw new Error('Request context should be defined'); +// } +// // result +// }); + +// Parse.Cloud.beforeDelete('MyCustomClass', (request: Parse.Cloud.BeforeDeleteRequest) => { +// // result +// }); + +// Parse.Cloud.beforeDelete('MyCustomClass', async (request: Parse.Cloud.BeforeDeleteRequest) => { +// // result +// }); + +// interface BeforeSaveObject { +// immutable: boolean; +// } + +// Parse.Cloud.beforeSave('MyCustomClass', async request => { +// if (request.object.isNew()) { +// if (!request.object.has('immutable')) throw new Error('Field immutable is required'); +// } else { +// const original = request.original; +// if (original == null) { +// // When the object is not new, request.original must be defined +// throw new Error('Original must me defined for an existing object'); +// } + +// if (original.get('immutable') !== request.object.get('immutable')) { +// throw new Error('This field cannot be changed'); +// } +// } +// if (!request.context) { +// throw new Error('Request context should be defined'); +// } +// }); + +// Parse.Cloud.beforeFind('MyCustomClass', (request: Parse.Cloud.BeforeFindRequest) => { +// const query = request.query; // the Parse.Query +// const user = request.user; // the user +// const isMaster = request.master; // if the query is run with masterKey +// const isCount = request.count; // if the query is a count operation (available on parse-server 2.4.0 or up) +// const isGet = request.isGet; // if the query is a get operation + +// // All possible read preferences +// request.readPreference = Parse.Cloud.ReadPreferenceOption.Primary; +// request.readPreference = Parse.Cloud.ReadPreferenceOption.PrimaryPreferred; +// request.readPreference = Parse.Cloud.ReadPreferenceOption.Secondary; +// request.readPreference = Parse.Cloud.ReadPreferenceOption.SecondaryPreferred; +// request.readPreference = Parse.Cloud.ReadPreferenceOption.Nearest; +// }); + +// Parse.Cloud.beforeFind('MyCustomClass', (request: Parse.Cloud.BeforeFindRequest) => { +// const query = request.query; // the Parse.Query + +// return new Parse.Query('QueryMe!'); +// }); + +// Parse.Cloud.beforeFind('MyCustomClass', async (request: Parse.Cloud.BeforeFindRequest) => { +// const query = request.query; // the Parse.Query + +// return new Parse.Query('QueryMe, IN THE FUTURE!'); +// }); + +// Parse.Cloud.afterFind('MyCustomClass', async (request: Parse.Cloud.AfterFindRequest) => { +// return new Parse.Object('MyCustomClass'); +// }); + +// Parse.Cloud.beforeLogin((request: Parse.Cloud.TriggerRequest) => { +// return Promise.resolve(); +// }); + +// Parse.Cloud.afterLogin((request: Parse.Cloud.TriggerRequest) => { +// return Promise.resolve(); +// }); + +// Parse.Cloud.afterLogout((request: Parse.Cloud.TriggerRequest) => { +// return Promise.resolve(); +// }); + +// Parse.Cloud.beforeSaveFile((request: Parse.Cloud.FileTriggerRequest) => { +// return Promise.resolve(new Parse.File('myFile.txt', { base64: '' })); +// }); + +// Parse.Cloud.beforeSaveFile((request: Parse.Cloud.FileTriggerRequest) => {}); + +// Parse.Cloud.beforeDeleteFile((request: Parse.Cloud.FileTriggerRequest) => {}); + +// Parse.Cloud.afterDeleteFile((request: Parse.Cloud.FileTriggerRequest) => {}); + +// Parse.Cloud.define('AFunc', (request: Parse.Cloud.FunctionRequest) => { +// return 'Some result'; +// }); + +// Parse.Cloud.define( +// 'AFunc', +// (request: Parse.Cloud.FunctionRequest) => { +// return 'Some result'; +// }, +// { +// requireUser: true, +// requireMaster: true, +// validateMasterKey: true, +// skipWithMasterKey: true, +// requireAnyUserRoles: ['a'], +// requireAllUserRoles: ['a'], +// fields: { +// name: { +// type: String, +// constant: true, +// default: true, +// options: [], +// error: 'invalid field.', +// }, +// }, +// requireUserKeys: { +// name: { +// type: String, +// constant: true, +// default: true, +// options: [], +// error: 'invalid field.', +// }, +// }, +// }, +// ); + +// Parse.Cloud.define('AFunc', request => { +// // $ExpectType Params +// request.params; + +// // $ExpectType any +// request.params.anything; +// }); + +// Parse.Cloud.define<() => void>('AFunc', request => { +// // $ExpectType {} +// request.params; +// }); + +// Parse.Cloud.define<(params: { something: string }) => number>('AFunc', request => { +// // $ExpectType { something: string; } +// request.params; + +// // @ts-expect-error +// request.params.somethingElse; + +// return 123; +// }); + +// // @ts-expect-error +// Parse.Cloud.define('AFunc'); + +// // @ts-expect-error +// Parse.Cloud.define<() => string>('AFunc', () => 123); + +// // @ts-expect-error +// Parse.Cloud.define<(params: string) => number>('AFunc', () => 123); + +// Parse.Cloud.job('AJob', (request: Parse.Cloud.JobRequest) => { +// request.message('Message to associate with this job run'); +// }); + +// Parse.Cloud.startJob('AJob', {}).then(v => v); + +// Parse.Cloud.getJobStatus('AJob').then(v => v); + +// Parse.Cloud.getJobsData().then(v => v); +// } + +// class PlaceObject extends Parse.Object {} + +// function test_geo_points() { +// let point = new Parse.GeoPoint(); +// // @ts-expect-error +// point = new Parse.GeoPoint('40.0'); +// // @ts-expect-error +// point = new Parse.GeoPoint(40.0); +// // @ts-expect-error +// point = new Parse.GeoPoint([40.0, -30.0, 20.0]); +// point = new Parse.GeoPoint([40.0, -30.0]); +// point = new Parse.GeoPoint(40.0, -30.0); +// point = new Parse.GeoPoint({ latitude: 40.0, longitude: -30.0 }); + +// const userObject = Parse.User.current>()!; + +// // User's location +// const userGeoPoint = userObject.get('location'); + +// // Create a query for places +// const query = new Parse.Query(Parse.User); +// // Interested in locations near user. +// query.near('location', userGeoPoint); +// // Limit what could be a lot of points. +// query.limit(10); + +// const southwestOfSF = new Parse.GeoPoint(37.708813, -122.526398); +// const northeastOfSF = new Parse.GeoPoint(37.822802, -122.373962); + +// const query2 = new Parse.Query(PlaceObject); +// query2.withinGeoBox('location', southwestOfSF, northeastOfSF); + +// const query3 = new Parse.Query('PlaceObject').find().then((o: Parse.Object[]) => {}); +// } + +// function test_push() { +// Parse.Push.send( +// { +// channels: ['Gia nts', 'Mets'], +// data: { +// alert: 'The Giants won against the Mets 2-3.', +// }, +// }, +// { +// success: () => { +// // Push was successful +// }, +// error: (error: any) => { +// // Handle error +// }, +// }, +// ); + +// const query = new Parse.Query(Parse.Installation); +// query.equalTo('injuryReports', true); + +// Parse.Push.send( +// { +// where: query, // Set our Installation query +// data: { +// alert: 'Willie Hayes injured by own pop fly.', +// }, +// }, +// { +// success() { +// // Push was successful +// }, +// error(error: any) { +// // Handle error +// }, +// }, +// ); +// } + +// function test_batch_operations() { +// const game1 = new Game(); +// const game2 = new Game(); +// const games = [game1, game2]; + +// // Master key +// Parse.Object.saveAll(games, { useMasterKey: true }); +// Parse.Object.destroyAll(games, { useMasterKey: true }); +// Parse.Object.fetchAll(games, { useMasterKey: true }); +// Parse.Object.fetchAllIfNeeded(games, { useMasterKey: true }); + +// // Session token +// Parse.Object.saveAll(games, { sessionToken: '' }); +// Parse.Object.destroyAll(games, { sessionToken: '' }); +// Parse.Object.fetchAll(games, { sessionToken: '' }); +// Parse.Object.fetchAllIfNeeded(games, { sessionToken: '' }); +// } + +// async function test_query_subscribe() { +// // create new query from Game object type +// const query = new Parse.Query(Game); + +// // create subscription to Game object +// // Without a token +// // $ExpectType LiveQuerySubscription +// let subscription = await query.subscribe(); + +// // With a session token +// // $ExpectType LiveQuerySubscription +// subscription = await query.subscribe(new Parse.User().getSessionToken()); + +// // listen for new Game objects created on Parse server +// subscription.on('create', (game: any) => { +// console.log(game); +// }); + +// // unsubscribe +// subscription.unsubscribe(); +// } + +// function test_serverURL() { +// Parse.serverURL = 'http://localhost:1337/parse'; +// } +// function test_polygon() { +// const point = new Parse.GeoPoint(1, 2); +// const polygon1 = new Parse.Polygon([ +// [0, 0], +// [1, 0], +// [1, 1], +// [0, 1], +// ]); +// const polygon2 = new Parse.Polygon([point, point, point]); +// polygon1.equals(polygon2); +// polygon1.containsPoint(point); + +// const query = new Parse.Query('TestObject'); +// query.polygonContains('key', point); +// query.withinPolygon('key', [ +// [0, 0], +// [1, 0], +// [1, 1], +// [0, 1], +// ]); +// } + +// async function test_local_datastore() { +// Parse.enableLocalDatastore(); +// const name = 'test_pin'; +// const obj = new Parse.Object('TestObject'); +// await obj.pin(); +// await obj.unPin(); +// await obj.isPinned(); +// await obj.pinWithName(name); +// await obj.unPinWithName(name); +// await obj.fetchFromLocalDatastore(); + +// await Parse.Object.pinAll([obj]); +// await Parse.Object.unPinAll([obj]); +// await Parse.Object.pinAllWithName(name, [obj]); +// await Parse.Object.unPinAllWithName(name, [obj]); +// await Parse.Object.unPinAllObjects(); +// await Parse.Object.unPinAllObjectsWithName(name); + +// const flag = Parse.isLocalDatastoreEnabled(); +// const LDS = await Parse.dumpLocalDatastore(); + +// const query = new Parse.Query('TestObject'); +// query.fromPin(); +// query.fromPinWithName(name); +// query.fromLocalDatastore(); + +// Parse.setLocalDatastoreController({}); +// } + +// async function test_from_network() { +// const obj = new Parse.Object('TestObject'); +// await obj.save(); + +// const query = new Parse.Query('TestObject'); +// query.fromNetwork(); +// } + +// async function test_cancel_query() { +// const obj = new Parse.Object('TestObject'); +// await obj.save(); + +// const query = new Parse.Query('TestObject'); +// query.fromNetwork().find(); +// query.cancel(); +// } + +// type FieldType = +// | string +// | number +// | boolean +// | Date +// | Parse.File +// | Parse.GeoPoint +// | any[] +// | object +// | Parse.Pointer +// | Parse.Polygon +// | Parse.Relation; +// async function test_schema( +// anyField: FieldType, +// notString: Exclude, +// notNumber: Exclude, +// notboolean: Exclude, +// notDate: Exclude, +// notFile: Exclude, +// notGeopoint: Exclude, +// notArray: Exclude, +// notObject: Exclude, +// notPointer: Exclude, +// notPolygon: Exclude, +// ) { +// // $ExpectType RestSchema[] +// await Parse.Schema.all(); + +// const schema = new Parse.Schema('TestSchema'); + +// schema.addArray('arrayField'); +// schema.addArray('arrayField', { defaultValue: [1, 2, 3, 4] }); +// // @ts-expect-error +// schema.addArray('arrayField', { defaultValue: notArray }); + +// /** +// * @todo Enable type check for default value +// */ +// schema.addField('defaultFieldString'); +// schema.addField('defaultFieldString', 'String', { defaultValue: anyField }); +// schema.addField('defaultFieldString', 'Number'); +// schema.addField('defaultFieldString', 'Relation'); +// // @ts-expect-error +// schema.addField('defaultFieldString', 'String', 'Invalid Options'); + +// schema.addString('field'); +// schema.addString('field', { defaultValue: 'some string', required: true }); +// // @ts-expect-error +// schema.addString('field', { defaultValue: notString }); + +// schema.addNumber('field'); +// schema.addNumber('field', { defaultValue: 0, required: true }); +// // @ts-expect-error +// schema.addNumber('field', { defaultValue: notNumber }); + +// schema.addBoolean('field'); +// schema.addBoolean('field', { defaultValue: true, required: true }); +// // @ts-expect-error +// schema.addBoolean('field', { defaultValue: notboolean }); + +// schema.addDate('field'); +// schema.addDate('field', { defaultValue: new Date(), required: true }); +// // @ts-expect-error +// schema.addDate('field', { defaultValue: notDate }); + +// schema.addFile('field'); +// schema.addFile('field', { defaultValue: new Parse.File('myfile', []), required: true }); +// // @ts-expect-error +// schema.addFile('field', { defaultValue: notFile }); + +// schema.addGeoPoint('field'); +// schema.addGeoPoint('field', { defaultValue: new Parse.GeoPoint(), required: true }); +// // @ts-expect-error +// schema.addGeoPoint('field', { defaultValue: notGeopoint }); + +// schema.addPolygon('field'); +// schema.addPolygon('field', { defaultValue: new Parse.Polygon([]), required: true }); +// // @ts-expect-error +// schema.addPolygon('field', { defaultValue: notPolygon }); + +// schema.addObject('field'); +// schema.addObject('field', { defaultValue: {}, required: true }); +// schema.addObject('field', { defaultValue: { abc: 'def' } }); +// // @ts-expect-error +// schema.addObject('field', { defaultValue: notObject }); + +// schema.addPointer('field', 'SomeClass'); +// // @ts-expect-error +// schema.addPointer('field'); +// /** +// * @todo Infer defaultValue type from targetClass +// */ +// schema.addPointer('field', '_User', { defaultValue: new Parse.User().toPointer(), required: true }); +// // @ts-expect-error +// schema.addPointer('field', { defaultValue: notPointer }); + +// schema.addRelation('field', 'SomeClass'); +// // @ts-expect-error +// schema.addRelation('field'); +// // @ts-expect-error +// schema.addRelation('field', 'SomeClass', 'anything'); + +// schema.addIndex('testIndex', { stringField: 'text' }); +// schema.addIndex('testIndex', { stringField: 1 }); +// schema.addIndex('testIndex', { stringField: -1 }); +// // @ts-expect-error +// schema.addIndex('testIndex', { stringField: true }); + +// schema.deleteField('defaultFieldString'); +// schema.deleteIndex('testIndex'); +// schema.delete().then(results => {}); +// // $ExpectType RestSchema +// await schema.get(); +// schema.purge().then(results => {}); +// schema.save().then(results => {}); +// schema.update().then(results => {}); + +// function testGenericType() { +// interface iTestAttributes { +// arrField: any[]; +// boolField: boolean; +// stringField: string; +// numField: number; +// dateField: Date; +// fileField: Parse.File; +// geoPointField: Parse.GeoPoint; +// polygonField: Parse.Polygon; +// objectField: object; +// relationField: Parse.Relation; +// pointerField: Parse.Pointer | Parse.Object; +// } +// class TestObject extends Parse.Object {} + +// const schema = new Parse.Schema('TestObject'); +// schema.addArray('arrField'); +// schema.addBoolean('boolField'); +// schema.addDate('dateField'); +// schema.addFile('fileField'); +// schema.addGeoPoint('geoPointField'); +// schema.addNumber('numField'); +// schema.addObject('objectField'); +// schema.addPointer('pointerField', 'FooClass'); +// schema.addPolygon('polygonField'); +// schema.addRelation('relationField', 'FooClass'); +// schema.addString('stringField'); + +// // @ts-expect-error +// schema.addArray('wrong'); +// // @ts-expect-error +// schema.addBoolean('wrong'); +// // @ts-expect-error +// schema.addDate('wrong'); +// // @ts-expect-error +// schema.addFile('wrong'); +// // @ts-expect-error +// schema.addGeoPoint('wrong'); +// // @ts-expect-error +// schema.addNumber('wrong'); +// // @ts-expect-error +// schema.addObject('wrong'); +// // @ts-expect-error +// schema.addPointer('wrong', 'FooClass'); +// // @ts-expect-error +// schema.addPolygon('wrong'); +// // @ts-expect-error +// schema.addRelation('wrong', 'FooClass'); +// // @ts-expect-error +// schema.addString('wrong'); +// } +// } + +// function testObject() { +// function testConstructor() { +// // $ExpectType Object +// new Parse.Object(); + +// // $ExpectType Object +// new Parse.Object('TestObject'); + +// // $ExpectType Object<{ example: number; }> +// new Parse.Object('TestObject', { example: 100 }); + +// // $ExpectType Object<{ example: boolean; }> +// new Parse.Object<{ example: boolean }>('TestObject', { example: true }); + +// // $ExpectType Object<{ example: string; }> +// new Parse.Object('TestObject', { example: 'hello' }, { ignoreValidation: true }); + +// // @ts-expect-error +// new Parse.Object<{ example: string }>('TestObject'); + +// // @ts-expect-error +// new Parse.Object<{ example: boolean }>('TestObject', { example: 'hello' }); +// } + +// function testStaticMethods() { +// async function testSaveAll(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType Object[] +// await Parse.Object.saveAll([objUntyped]); + +// // $ExpectType Object<{ example: string; }>[] +// await Parse.Object.saveAll([objTyped]); + +// // $ExpectType [Object, Object<{ example: string; }>] +// await Parse.Object.saveAll<[typeof objUntyped, typeof objTyped]>([objUntyped, objTyped]); + +// // @ts-expect-error +// await Parse.Object.saveAll([123]); +// } +// } + +// function testAttributes(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType any +// objUntyped.attributes.whatever; + +// // $ExpectType string +// objTyped.attributes.example; + +// // @ts-expect-error +// objTyped.attributes.other; +// } + +// function testAdd(objUntyped: Parse.Object, objTyped: Parse.Object<{ stringList: string[]; thing: boolean }>) { +// // $ExpectType false | Object +// objUntyped.add('whatever', 'hello'); + +// // $ExpectType false | Object<{ stringList: string[]; thing: boolean; }> +// objTyped.add('stringList', 'hello'); + +// // @ts-expect-error +// objTyped.add('stringList', 100); + +// // @ts-expect-error +// objTyped.add('thing', true); + +// // @ts-expect-error +// objTyped.add('whatever', 'hello'); +// } + +// function testAddAll(objUntyped: Parse.Object, objTyped: Parse.Object<{ stringList: string[]; thing: boolean }>) { +// // $ExpectType false | Object +// objUntyped.addAll('whatever', ['hello', 100]); + +// // $ExpectType false | Object<{ stringList: string[]; thing: boolean; }> +// objTyped.addAll('stringList', ['hello']); + +// // @ts-expect-error +// objTyped.addAll('stringList', [100]); + +// // @ts-expect-error +// objTyped.addAll('thing', [true]); + +// // @ts-expect-error +// objTyped.addAll('whatever', ['hello']); +// } + +// function testAddAllUnique( +// objUntyped: Parse.Object, +// objTyped: Parse.Object<{ stringList: string[]; thing: boolean }>, +// ) { +// // $ExpectType false | Object +// objUntyped.addAllUnique('whatever', ['hello', 100]); + +// // $ExpectType false | Object<{ stringList: string[]; thing: boolean; }> +// objTyped.addAllUnique('stringList', ['hello']); + +// // @ts-expect-error +// objTyped.addAllUnique('stringList', [100]); + +// // @ts-expect-error +// objTyped.addAllUnique('thing', [true]); + +// // @ts-expect-error +// objTyped.addAllUnique('whatever', ['hello']); +// } + +// function testAddUnique(objUntyped: Parse.Object, objTyped: Parse.Object<{ stringList: string[]; thing: boolean }>) { +// // $ExpectType false | Object +// objUntyped.addUnique('whatever', 'hello'); + +// // $ExpectType false | Object<{ stringList: string[]; thing: boolean; }> +// objTyped.addUnique('stringList', 'hello'); + +// // @ts-expect-error +// objTyped.addUnique('stringList', 100); + +// // @ts-expect-error +// objTyped.addUnique('thing', true); + +// // @ts-expect-error +// objTyped.addUnique('whatever', 'hello'); +// } + +// function testDirty(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType boolean +// objUntyped.dirty(); + +// // $ExpectType boolean +// objUntyped.dirty('whatever'); + +// // $ExpectType boolean +// objTyped.dirty(); + +// // $ExpectType boolean +// objTyped.dirty('example'); + +// // @ts-expect-error +// objTyped.dirty('other'); +// } + +// function testEquals(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType boolean +// objUntyped.equals(objTyped); + +// // $ExpectType boolean +// objTyped.equals(objUntyped); + +// // @ts-expect-error +// objUntyped.equals('blah'); +// } + +// function testEscape(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType string +// objUntyped.escape('whatever'); + +// // $ExpectType string +// objTyped.escape('example'); + +// // @ts-expect-error +// objTyped.escape('other'); +// } + +// function testFetchWithInclude(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType Promise> +// objUntyped.fetchWithInclude('whatever'); + +// // $ExpectType Promise> +// objUntyped.fetchWithInclude(['whatever']); + +// // $ExpectType Promise> +// objUntyped.fetchWithInclude([['whatever']]); + +// // @ts-expect-error +// objUntyped.fetchWithInclude([[['whatever']]]); + +// // $ExpectType Promise> +// objTyped.fetchWithInclude('example'); + +// // $ExpectType Promise> +// objTyped.fetchWithInclude(['example']); + +// // $ExpectType Promise> +// objTyped.fetchWithInclude([['example']]); + +// // @ts-expect-error +// objTyped.fetchWithInclude([[['example']]]); + +// // $ExpectType Promise[]> +// Parse.Object.fetchAllIfNeededWithInclude([objTyped], 'example'); + +// // @ts-expect-error +// Parse.Object.fetchAllIfNeededWithInclude([objTyped], 'notAnAttribute'); + +// // $ExpectType Promise[]> +// Parse.Object.fetchAllWithInclude([objTyped], 'example'); + +// // @ts-expect-error +// Parse.Object.fetchAllWithInclude([objTyped], 'notAnAttribute'); +// } + +// function testGet(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number }>) { +// // $ExpectType any +// objUntyped.get('whatever'); + +// // $ExpectType number +// objTyped.get('example'); + +// // @ts-expect-error +// objTyped.get('other'); +// } + +// function testHas(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number }>) { +// // $ExpectType boolean +// objUntyped.has('whatever'); + +// // $ExpectType boolean +// objTyped.has('example'); + +// // @ts-expect-error +// objTyped.has('other'); +// } + +// function testIncrement(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number }>) { +// // $ExpectType false | Object +// objUntyped.increment('whatever'); + +// // $ExpectType false | Object +// objUntyped.increment('whatever', 10); + +// // $ExpectType false | Object<{ example: number; }> +// objTyped.increment('example'); + +// // $ExpectType false | Object<{ example: number; }> +// objTyped.increment('example', 20); + +// // @ts-expect-error +// objTyped.increment('example', true); + +// // @ts-expect-error +// objTyped.increment('other'); +// } + +// function testDecrement(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number }>) { +// // $ExpectType false | Object +// objUntyped.decrement('whatever'); + +// // $ExpectType false | Object +// objUntyped.decrement('whatever', 10); + +// // $ExpectType false | Object<{ example: number; }> +// objTyped.decrement('example'); + +// // $ExpectType false | Object<{ example: number; }> +// objTyped.decrement('example', 20); + +// // @ts-expect-error +// objTyped.decrement('example', true); + +// // @ts-expect-error +// objTyped.decrement('other'); +// } + +// function testNewInstance(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number }>) { +// // $ExpectType Object +// objUntyped.newInstance(); + +// // $ExpectType Object<{ example: number; }> +// objTyped.newInstance(); +// } + +// function testOp(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number }>) { +// // $ExpectType any +// objUntyped.op('whatever'); + +// // $ExpectType any +// objTyped.op('example'); + +// // @ts-expect-error +// objTyped.op('other'); +// } + +// function testRelation(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: number; rel: Parse.Relation }>) { +// // $ExpectType Relation, Object> +// objUntyped.relation('whatever'); + +// // $ExpectType Relation, Object>; }>, Object> +// objTyped.relation('rel'); + +// // @ts-expect-error +// objTyped.relation('example'); + +// // @ts-expect-error +// objTyped.relation('other'); +// } + +// function testRemove(objUntyped: Parse.Object, objTyped: Parse.Object<{ stringList: string[]; thing: boolean }>) { +// // $ExpectType false | Object +// objUntyped.remove('whatever', 'hello'); + +// // $ExpectType false | Object<{ stringList: string[]; thing: boolean; }> +// objTyped.remove('stringList', 'hello'); + +// // @ts-expect-error +// objTyped.remove('stringList', 100); + +// // @ts-expect-error +// objTyped.remove('thing', true); + +// // @ts-expect-error +// objTyped.remove('whatever', 'hello'); +// } + +// function testRemoveAll(objUntyped: Parse.Object, objTyped: Parse.Object<{ stringList: string[]; thing: boolean }>) { +// // $ExpectType false | Object +// objUntyped.removeAll('whatever', ['hello', 100]); + +// // $ExpectType false | Object<{ stringList: string[]; thing: boolean; }> +// objTyped.removeAll('stringList', ['hello']); + +// // @ts-expect-error +// objTyped.removeAll('stringList', [100]); + +// // @ts-expect-error +// objTyped.removeAll('thing', [true]); + +// // @ts-expect-error +// objTyped.removeAll('whatever', ['hello']); +// } + +// function testRevert(objUntyped: Parse.Object, objTyped: Parse.Object<{ thingOne: number; thingTwo: boolean }>) { +// // $ExpectType void +// objUntyped.revert(); + +// // $ExpectType void +// objUntyped.revert('whatever', 'more whatever'); + +// // $ExpectType void +// objTyped.revert(); + +// // $ExpectType void +// objTyped.revert('thingOne', 'thingTwo'); + +// // @ts-expect-error +// objTyped.revert('other'); +// } +// interface ObjectAttributes { +// example: boolean; +// someString: string; +// } +// interface OptionalObjectAttributes { +// example?: boolean | undefined; +// another?: string | undefined; +// } + +// async function testSave( +// objUntyped: Parse.Object, +// objTyped: Parse.Object, +// objTypedOptional: Parse.Object, +// ) { +// // $ExpectType Object +// await objUntyped.save({ whatever: 100 }); + +// // $ExpectType Object +// await objUntyped.save('whatever', 100); + +// // $ExpectType Object +// await objTyped.save({ example: true }); + +// // $ExpectType Object +// await objTyped.save({ example: true, someString: 'hello' }); + +// // @ts-expect-error +// await objTyped.save({ example: 'hello', someString: true }); + +// // $ExpectType Object +// await objTyped.save('example', true); + +// // @ts-expect-error +// await objTyped.save({ example: 'hello' }); + +// // @ts-expect-error +// await objTyped.save({ wrongProp: 5 }); + +// // @ts-expect-error +// await objTyped.save('example', 10); + +// // @ts-expect-error +// await objTyped.save('wrongProp', true); + +// // @ts-expect-error +// await objTyped.save({ example: undefined }); + +// // @ts-expect-error +// await objTyped.save('example', undefined); + +// // $ExpectType Object +// await objTyped.save({}); + +// // $ExpectType Object +// await objTypedOptional.save({ example: undefined }); + +// // $ExpectType Object +// await objTypedOptional.save('example', undefined); + +// // $ExpectType Object +// await objTypedOptional.save({}); + +// // $ExpectType Object +// await objTypedOptional.saveEventually({}); + +// // $ExpectType Object +// await objTypedOptional.destroyEventually({}); +// } + +// function testSet( +// objUntyped: Parse.Object, +// objTyped: Parse.Object, +// objTypedOptional: Parse.Object, +// ) { +// // $ExpectType false | Object +// objUntyped.set('propA', 'some value'); + +// // $ExpectType false | Object +// objUntyped.set({ propA: undefined }); + +// // $ExpectType false | Object +// objTyped.set({ example: false }); + +// // $ExpectType false | Object +// objTyped.set({ example: true, someString: 'abc' }); + +// // @ts-expect-error +// objTyped.set({ example: 123, someString: 'abc' }); + +// // $ExpectType false | Object +// objTyped.set('example', true); + +// // @ts-expect-error +// objTyped.set({ example: 100 }); + +// // @ts-expect-error +// objTyped.set({ other: 'something' }); + +// // @ts-expect-error +// objTyped.set('example', 100); + +// // @ts-expect-error +// objTyped.set('other', 100); + +// // @ts-expect-error +// objTyped.set({ example: undefined }); + +// // $ExpectType false | Object +// objTyped.set({}); + +// // @ts-expect-error +// objTyped.set('example', undefined); + +// // $ExpectType false | Object +// objTypedOptional.set({ example: undefined }); + +// // $ExpectType false | Object +// objTypedOptional.set('example', undefined); + +// // $ExpectType false | Object +// objTypedOptional.set({}); +// } + +// interface AttributesAllTypes { +// someString: string; +// someNumber: number; +// someBoolean: boolean; +// someDate: Date; +// someJSONObject: AttributesAllTypes; +// someJSONArray: AttributesAllTypes[]; +// someRegExp: RegExp; +// someUndefined: undefined; +// someNull: null; +// someParseObjectUntyped: Parse.Object; +// someParseObjectTyped: Parse.Object; +// someParseACL: Parse.ACL; +// someParseGeoPoint: Parse.GeoPoint; +// someParsePolygon: Parse.Polygon; +// someParseRelation: Parse.Relation; +// someParseFile: Parse.File; +// } + +// function testToJSON(objUntyped: Parse.Object, objTyped: Parse.Object) { +// // $ExpectType ToJSON & JSONBaseAttributes +// const JSONUntyped = objUntyped.toJSON(); +// // $ExpectType string +// JSONUntyped.objectId; +// // $ExpectType string +// JSONUntyped.createdAt; +// // $ExpectType string +// JSONUntyped.updatedAt; +// // $ExpectType any +// JSONUntyped.anything; + +// // $ExpectType ToJSON & JSONBaseAttributes +// const JSONTyped = objTyped.toJSON(); +// // $ExpectType string +// JSONTyped.objectId; +// // $ExpectType string +// JSONTyped.createdAt; +// // $ExpectType string +// JSONTyped.updatedAt; +// // $ExpectType string +// JSONTyped.someString; +// // $ExpectType number +// JSONTyped.someNumber; +// // $ExpectType boolean +// JSONTyped.someBoolean; +// // $ExpectType { __type: "Date"; iso: string; } +// JSONTyped.someDate; +// // $ExpectType ToJSON +// JSONTyped.someJSONObject; +// // $ExpectType ToJSON[] +// JSONTyped.someJSONArray; +// // $ExpectType string +// JSONTyped.someRegExp; +// // $ExpectType undefined +// JSONTyped.someUndefined; +// // $ExpectType null +// JSONTyped.someNull; +// // $ExpectType Pointer | (ToJSON & JSONBaseAttributes) +// JSONTyped.someParseObjectUntyped; +// // $ExpectType Pointer | (ToJSON & JSONBaseAttributes) +// JSONTyped.someParseObjectTyped; +// // $ExpectType any +// JSONTyped.someParseACL; +// // $ExpectType any +// JSONTyped.someParseGeoPoint; +// // $ExpectType any +// JSONTyped.someParsePolygon; +// // $ExpectType any +// JSONTyped.someParseRelation; +// // $ExpectType { __type: string; name: string; url: string; } +// JSONTyped.someParseFile; +// } + +// function testUnset(objUntyped: Parse.Object, objTyped: Parse.Object<{ example: string }>) { +// // $ExpectType false | Object +// objUntyped.unset('whatever'); + +// // $ExpectType false | Object<{ example: string; }> +// objTyped.unset('example'); + +// // @ts-expect-error +// objTyped.unset('other'); +// } + +// function testValidate(obj: Parse.Object<{}>) { +// // Note: The attributes being validated don't necessarily have to match the current object's attributes + +// // $ExpectType false | Error +// obj.validate({ someAttrToValidate: 'hello' }); +// } + +// function testNullableArrays( +// objTyped: Parse.Object<{ stringList?: string[] | null }> +// ) { +// // $ExpectType false | Object<{ stringList?: string[] | null | undefined; }> +// objTyped.add('stringList', 'foo'); + +// // @ts-expect-error +// objTyped.add('stringList', 4); + +// // $ExpectType false | Object<{ stringList?: string[] | null | undefined; }> +// objTyped.addAll('stringList', ['foo']); + +// // @ts-expect-error +// objTyped.addAll('stringList', [4]); + +// // $ExpectType false | Object<{ stringList?: string[] | null | undefined; }> +// objTyped.addAllUnique('stringList', ['foo', 'bar']); + +// // @ts-expect-error +// objTyped.addAllUnique('stringList', [4]); + +// // $ExpectType false | Object<{ stringList?: string[] | null | undefined; }> +// objTyped.addUnique('stringList', 'foo'); + +// // @ts-expect-error +// objTyped.addUnique('stringList', 4); + +// // $ExpectType false | Object<{ stringList?: string[] | null | undefined; }> +// objTyped.remove('stringList', 'bar'); + +// // @ts-expect-error +// objTyped.remove('stringList', 4); + +// // $ExpectType false | Object<{ stringList?: string[] | null | undefined; }> +// objTyped.removeAll('stringList', ['bar']); + +// // @ts-expect-error +// objTyped.removeAll('stringList', [4]); +// } +// } + +// function testInstallation() { +// function testConstructor() { +// // $ExpectType Installation +// new Parse.Installation(); + +// // $ExpectType Installation<{ example: number; }> +// new Parse.Installation({ example: 100 }); + +// // @ts-expect-error +// new Parse.Installation<{ example: number }>(); + +// // @ts-expect-error +// new Parse.Installation<{ example: number }>({ example: 'hello' }); +// } +// } + +// function testQuery() { +// function testConstructor() { +// // $ExpectType Query> +// new Parse.Query('TestObject'); + +// // $ExpectType Query> +// new Parse.Query(Parse.Role); + +// // $ExpectType Query> +// new Parse.Query(Parse.User); + +// // $ExpectType Query> +// new Parse.Query>('TestObject'); + +// // $ExpectType Query> +// new Parse.Query>(Parse.Role); + +// // $ExpectType Query> +// new Parse.Query>(Parse.User); +// } + +// async function testQueryMethodTypes() { +// class AnotherSubClass extends Parse.Object<{ x: any }> { +// constructor() { +// super('Another', { x: 'example' }); +// } +// } +// class MySubClass extends Parse.Object<{ +// attribute1: string; +// attribute2: number; +// attribute3: AnotherSubClass; +// attribute4: string[]; +// }> {} +// const query = new Parse.Query(MySubClass); + +// // $ExpectType Query +// query.addAscending(['attribute1', 'attribute2', 'updatedAt']); +// // @ts-expect-error +// query.addAscending(['attribute1', 'unexistenProp']); + +// // $ExpectType Query +// query.addDescending(['attribute1', 'attribute2', 'createdAt']); +// // @ts-expect-error +// query.addDescending(['attribute1', 'unexistenProp']); + +// // $ExpectType Query +// query.ascending(['attribute1', 'attribute2', 'objectId']); +// // @ts-expect-error +// query.ascending(['attribute1', 'nonexistentProp']); + +// // $ExpectType Query +// query.containedBy('attribute1', ['a', 'b', 'c']); +// // $ExpectType Query +// query.containedBy('attribute3', ['objectId1', 'objectId2', 'objectId3']); +// // @ts-expect-error +// query.containedBy('attribute2', ['a', 'b', 'c']); +// // @ts-expect-error +// query.containedBy('attribute1', [1, 2, 3]); +// // @ts-expect-error +// query.containedBy('nonexistentProp', ['a', 'b', 'c']); + +// // $ExpectType Query +// query.containedIn('attribute1', ['a', 'b', 'c']); +// // $ExpectType Query +// query.containedIn('attribute3', ['objectId1', 'objectId2', 'objectId3']); +// // @ts-expect-error +// query.containedIn('attribute2', ['a', 'b', 'c']); +// // @ts-expect-error +// query.containedIn('attribute1', [1, 2, 3]); +// // @ts-expect-error +// query.containedIn('nonexistentProp', ['a', 'b', 'c']); + +// // $ExpectType Query +// query.contains('attribute1', 'a substring'); +// // @ts-expect-error +// query.contains('nonexistentProp', 'a substring'); + +// // $ExpectType Query +// query.containsAll('attribute1', ['a', 'b', 'c']); +// // @ts-expect-error +// query.containsAll('nonexistentProp', ['a', 'b', 'c']); + +// // $ExpectType Query +// query.containsAllStartingWith('attribute1', ['a', 'b', 'c']); +// // @ts-expect-error +// query.containsAllStartingWith('nonexistentProp', ['a', 'b', 'c']); + +// // $ExpectType Query +// query.descending(['attribute1', 'attribute2', 'objectId']); +// // @ts-expect-error +// query.descending(['attribute1', 'nonexistentProp']); + +// // $ExpectType Query +// query.doesNotExist('attribute1'); +// // @ts-expect-error +// query.doesNotExist('nonexistentProp'); + +// // $ExpectType Query +// query.doesNotMatchKeyInQuery('attribute1', 'x', new Parse.Query(AnotherSubClass)); +// // @ts-expect-error +// query.doesNotMatchKeyInQuery('unexistenProp', 'x', new Parse.Query(AnotherSubClass)); +// // @ts-expect-error +// query.doesNotMatchKeyInQuery('attribute1', 'unknownKey', new Parse.Query(AnotherSubClass)); +// // $ExpectType Query +// query.doesNotMatchKeyInQuery('objectId', 'x', new Parse.Query(AnotherSubClass)); +// // $ExpectType Query +// query.doesNotMatchKeyInQuery('updatedAt', 'x', new Parse.Query(AnotherSubClass)); + +// // $ExpectType Query +// query.doesNotMatchQuery('attribute1', new Parse.Query('Example')); +// // @ts-expect-error +// query.doesNotMatchQuery('nonexistentProp', new Parse.Query('Example')); + +// // $ExpectType Query +// query.endsWith('attribute1', 'asuffixstring'); +// // @ts-expect-error +// query.endsWith('nonexistentProp', 'asuffixstring'); + +// // $ExpectType Query +// query.equalTo('attribute2', 0); +// // $ExpectType Query +// query.equalTo('attribute3', new AnotherSubClass()); +// // $ExpectType Query +// query.equalTo('attribute3', new AnotherSubClass().toPointer()); +// // @ts-expect-error +// query.equalTo('attribute1', new AnotherSubClass().toPointer()); +// // @ts-expect-error +// query.equalTo('attribute2', 'a string value'); +// // @ts-expect-error +// query.equalTo('nonexistentProp', 'any value'); + +// // $ExpectType Query +// query.equalTo('attribute4', 'a_string_value'); // Can query contents of array +// // Can query array itself if equal too (mongodb $eq matches the array exactly or the contains an element that matches the array exactly) +// // $ExpectType Query +// query.equalTo('attribute4', ['a_string_value']); + +// // $ExpectType Query +// query.notEqualTo('attribute4', 'a_string_value'); +// // $ExpectType Query +// query.notEqualTo('attribute4', ['a_string_value']); + +// // @ts-expect-error +// query.equalTo('attribute4', 5); +// // @ts-expect-error +// query.notEqualTo('attribute4', 5); +// // @ts-expect-error +// query.equalTo('attribute4', [5]); +// // @ts-expect-error +// query.notEqualTo('attribute4', [5]); + +// // $ExpectType Query +// query.exists('attribute1'); +// // @ts-expect-error +// query.exists('nonexistentProp'); + +// // $ExpectType Query +// query.fullText('attribute1', 'full text'); +// // @ts-expect-error +// query.fullText('nonexistentProp', 'full text'); + +// // $ExpectType Query +// query.greaterThan('attribute2', 1000); +// // @ts-expect-error +// query.greaterThan('attribute2', '1000'); +// // @ts-expect-error +// query.greaterThan('nonexistentProp', 1000); + +// // $ExpectType Query +// query.greaterThanOrEqualTo('attribute2', 1000); +// // @ts-expect-error +// query.greaterThanOrEqualTo('attribute2', '1000'); +// // @ts-expect-error +// query.greaterThanOrEqualTo('nonexistentProp', 1000); + +// // $ExpectType Query +// query.include(['attribute1', 'attribute2']); +// // $ExpectType Query +// query.include('attribute3.someProp'); +// // @ts-expect-error +// query.include(['attribute1', 'nonexistentProp']); + +// // $ExpectType Query +// query.lessThan('attribute2', 1000); +// // @ts-expect-error +// query.lessThan('attribute2', '1000'); +// // @ts-expect-error +// query.lessThan('nonexistentProp', 1000); + +// // $ExpectType Query +// query.lessThanOrEqualTo('attribute2', 1000); +// // @ts-expect-error +// query.lessThanOrEqualTo('attribute2', '1000'); +// // @ts-expect-error +// query.lessThanOrEqualTo('nonexistentProp', 1000); + +// // $ExpectType Query +// query.matches('attribute1', /a regex/); +// // @ts-expect-error +// query.matches('nonexistentProp', /a regex/); + +// // $ExpectType Query +// query.matchesKeyInQuery('attribute1', 'x', new Parse.Query(AnotherSubClass)); +// // @ts-expect-error +// query.matchesKeyInQuery('nonexistentProp', 'x', new Parse.Query(AnotherSubClass)); +// // @ts-expect-error +// query.matchesKeyInQuery('attribute1', 'unknownKey', new Parse.Query(AnotherSubClass)); + +// // $ExpectType Query +// query.matchesQuery('attribute1', new Parse.Query('Example')); +// // @ts-expect-error +// query.matchesQuery('nonexistentProp', new Parse.Query('Example')); + +// // $ExpectType Query +// query.near('attribute1', new Parse.GeoPoint()); +// // @ts-expect-error +// query.near('nonexistentProp', new Parse.GeoPoint()); + +// // $ExpectType Query +// query.notContainedIn('attribute2', [1, 2, 3]); +// // @ts-expect-error +// query.notContainedIn('attribute2', ['1', '2', '3']); +// // @ts-expect-error +// query.notContainedIn('nonexistentProp', [1, 2, 3]); + +// // $ExpectType Query +// query.notEqualTo('attribute1', '1'); +// // @ts-expect-error +// query.notEqualTo('attribute1', 1); +// // @ts-expect-error +// query.notEqualTo('nonexistentProp', 1); + +// // $ExpectType Query +// query.polygonContains('attribute1', new Parse.GeoPoint()); +// // @ts-expect-error +// query.polygonContains('nonexistentProp', new Parse.GeoPoint()); + +// // $ExpectType Query +// query.select('attribute1', 'attribute2'); +// // @ts-expect-error +// query.select('attribute1', 'nonexistentProp'); + +// // $ExpectType Query +// query.startsWith('attribute1', 'prefix string'); +// // @ts-expect-error +// query.startsWith('nonexistentProp', 'prefix string'); + +// // $ExpectType Query +// query.withCount(true); + +// // $ExpectType Query +// query.withinGeoBox('attribute1', new Parse.GeoPoint(), new Parse.GeoPoint()); +// // @ts-expect-error +// query.withinGeoBox('nonexistentProp', new Parse.GeoPoint(), new Parse.GeoPoint()); + +// // $ExpectType Query +// query.withinKilometers('attribute1', new Parse.GeoPoint(), 100); +// // @ts-expect-error +// query.withinKilometers('nonexistentProp', new Parse.GeoPoint(), 100); + +// // $ExpectType Query +// query.withinMiles('attribute1', new Parse.GeoPoint(), 100); +// // @ts-expect-error +// query.withinMiles('nonexistentProp', new Parse.GeoPoint(), 100); + +// // $ExpectType Query +// query.withinPolygon('attribute1', [ +// [12.3, 45.6], +// [-78.9, 10.1], +// ]); +// // @ts-expect-error +// query.withinPolygon('nonexistentProp', [ +// [12.3, 45.6], +// [-78.9, 10.1], +// ]); + +// // $ExpectType Query +// query.withinRadians('attribute1', new Parse.GeoPoint(), 100); +// // @ts-expect-error +// query.withinRadians('nonexistentProp', new Parse.GeoPoint(), 100); +// } + +// async function testQueryMethods( +// queryUntyped: Parse.Query, +// queryTyped: Parse.Query>, +// ) { +// // $ExpectType Object +// await queryUntyped.get('objectId'); + +// // $ExpectType Object[] +// await queryUntyped.find(); + +// // $ExpectType string[] +// await queryTyped.distinct('example'); + +// // $ExpectType Object | undefined +// await queryUntyped.first(); + +// // $ExpectType Object<{ example: string; }> +// await queryTyped.get('objectId'); + +// // $ExpectType Object<{ example: string; }>[] +// await queryTyped.find(); + +// // $ExpectType Object<{ example: string; }> | undefined +// await queryTyped.first(); +// } +// } + +// function testRole() { +// function testConstructor(acl: Parse.ACL) { +// // $ExpectType Role> +// new Parse.Role<{ example: string }>('TestRole', acl); +// } + +// function testAttributes(roleUntyped: Parse.Role, roleTyped: Parse.Role<{ example: number }>) { +// // $ExpectType Attributes +// roleUntyped.attributes; + +// // $ExpectType { example: number; } +// roleTyped.attributes; +// } +// } + +function testSession() { + function testConstructor() { + // $ExpectType ParseSession + new Parse.Session(); + + // $ExpectType ParseSession + new Parse.Session({ example: 100 }); + + // @ts-expect-error + new Parse.Session<{ example: number }>(); + + // @ts-expect-error + new Parse.Session<{ example: number }>({ example: 'hello' }); + } +} + +// function testUser() { +// function testConstructor() { +// // $ExpectType User +// new Parse.User(); + +// // $ExpectType User<{ example: number; }> +// new Parse.User({ example: 100 }); + +// // @ts-expect-error +// new Parse.User<{ example: number }>(); + +// // @ts-expect-error +// new Parse.User<{ example: number }>({ example: 'hello' }); +// } +// async function testAuthenticationProvider() { +// const authProvider: Parse.AuthProvider = { +// authenticate: () => {}, +// getAuthType: () => 'customAuthorizationProvider', +// restoreAuthentication: () => false, +// deauthenticate: () => {}, +// }; +// const authData: Parse.AuthData = { +// id: 'some-user-authentication-id', +// access_token: 'some-access-token', +// expiration_date: new Date().toISOString(), +// }; +// Parse.User._registerAuthenticationProvider(authProvider); + +// const user = await Parse.User.logInWith( +// authProvider, +// { authData }, +// { sessionToken: 'some-session-token', useMasterKey: true }, +// ); +// const isLinked = user._isLinked(authProvider); +// const unlinkedUser = await user._unlinkFrom(authProvider); +// const linkedUser = await user.linkWith(authProvider, { authData }); +// } +// } + +// function testEncryptingUser() { +// function testSecretKey() { +// Parse.secret = 'secret!'; +// } + +// function testEnableEncryptedUserKey() { +// Parse.encryptedUser = true; +// } + +// function testEnablingEncryptedUser() { +// Parse.enableEncryptedUser(); +// } + +// function testIsEncryptedUserEnabled() { +// Parse.isEncryptedUserEnabled(); +// } +// } + +// function testEventuallyQueue() { +// function test() { +// const obj = new Parse.Object('TestObject'); +// // $ExpectType Promise +// Parse.EventuallyQueue.clear(); +// // $ExpectType Promise +// Parse.EventuallyQueue.getQueue(); +// // $ExpectType boolean +// Parse.EventuallyQueue.isPolling(); +// // $ExpectType Promise +// Parse.EventuallyQueue.save(obj); +// // $ExpectType Promise +// Parse.EventuallyQueue.save(obj, {}); +// // $ExpectType Promise +// Parse.EventuallyQueue.destroy(obj); +// // $ExpectType Promise +// Parse.EventuallyQueue.destroy(obj, {}); +// // $ExpectType Promise +// Parse.EventuallyQueue.length(); +// // $ExpectType Promise +// Parse.EventuallyQueue.sendQueue(); +// // $ExpectType void +// Parse.EventuallyQueue.stopPoll(); +// // $ExpectType void +// Parse.EventuallyQueue.poll(); +// // $ExpectType void +// Parse.EventuallyQueue.poll(300); +// // @ts-expect-error +// Parse.EventuallyQueue.poll('300'); +// } +// } + +// function LiveQueryEvents() { +// function testLiveQueryEvents() { +// Parse.LiveQuery.on('open', () => { +// }); +// Parse.LiveQuery.on('close', () => { +// }); +// Parse.LiveQuery.on('error', (error: any) => { +// }); +// } +// } diff --git a/types/tsconfig.json b/types/tsconfig.json new file mode 100644 index 000000000..2edb2f209 --- /dev/null +++ b/types/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": ["es6"], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + + // If the library is an external module (uses `export`), this allows your test file to import "mylib" instead of "./index". + // If the library is global (cannot be imported via `import` or `require`), leave this out. + "baseUrl": ".", + "paths": { "parse": ["."] } + }, + "include": [ + "tests.ts" + ] +} diff --git a/types/tslint.json b/types/tslint.json new file mode 100644 index 000000000..e5fa37117 --- /dev/null +++ b/types/tslint.json @@ -0,0 +1,10 @@ +{ + "extends": "@definitelytyped/dtslint/dtslint.json", + "rules": { + "semicolon": false, + "ban-types": false, + "no-unnecessary-generics": false, + "no-redundant-jsdoc": false, + "strict-export-declare-modifiers": false + } +} diff --git a/types/unique.d.ts b/types/unique.d.ts new file mode 100644 index 000000000..1736d2e04 --- /dev/null +++ b/types/unique.d.ts @@ -0,0 +1 @@ +export default function unique(arr: T[]): T[]; diff --git a/types/unsavedChildren.d.ts b/types/unsavedChildren.d.ts new file mode 100644 index 000000000..ec1be90ca --- /dev/null +++ b/types/unsavedChildren.d.ts @@ -0,0 +1,11 @@ +/** + * Return an array of unsaved children, which are either Parse Objects or Files. + * If it encounters any dirty Objects without Ids, it will throw an exception. + * + * @param {Parse.Object} obj + * @param {boolean} allowDeepUnsaved + * @returns {Array} + */ +export default function unsavedChildren(obj: ParseObject, allowDeepUnsaved?: boolean): Array; +import ParseObject from './ParseObject'; +import ParseFile from './ParseFile'; diff --git a/types/uuid.d.ts b/types/uuid.d.ts new file mode 100644 index 000000000..f3a50d131 --- /dev/null +++ b/types/uuid.d.ts @@ -0,0 +1,2 @@ +export = uuid; +declare let uuid: any;