From 24accb1ad7773045808e78794f7c946cc60bb0bf Mon Sep 17 00:00:00 2001 From: joehan Date: Fri, 26 Apr 2024 18:27:19 -0400 Subject: [PATCH] Firebase Data Connect (#7057) * Decode firemat.yaml * Show codelenses only folders corresponding to firemat.yaml * Update tests to reflect config changes * Apply suggestions from code review * Remove invocation to missing command * Enable running queries/mutations in production * Apply suggestions from code review * Fuse User Mock view and Arguments view (#837) * Add Firebase Data Connect view * Add Instance Picker * Update codelense logic to use instance picker * Add instance in status bar * Add project in statusbar * Add tests for src/core/config.ts (#825) * Update config parsing to handle custom operationSet keys * Rename * Extract functions * Rename * Include Firebase logo next to the selected project * Merge firemat with master * Fix codelenses incorrectly showing in the schema folder but not in the operation folder (#841) * Fix merge error * W * Complete execution e2e and fix failing e2e * Cleanup tests * Add instance picker e2e * Remove log and revert .vscode change * Move pageobjects to a separate folder * Apply suggestions from code review * Can pick nothing * initial lsp implementation * Add lsp binary * Add lsp binary * Fix another vue-compiler dynamic dep * Emulator should stop taking focus * Don't pick an instance by default, and show statusbar in red * fix execute codelens not showing in adhoc folder * fix merge mistake * Add start-emulator command * Instance default to emulator * Show execution codelens even if emulator isn't started * Auto-start emulator when targeting emulator but it isn't started * Add support for adhoc files. Update emulator to 0.1.4. Small fix to ls refresh * update emulator file * add dataconnect icon to statusbar. Change statusbar color * Minor ui updates * Commit * Delete unused conf * Fix e2e * Add some e2e tests * Fix tests * fix execute codelens not showing in adhoc folder * Prototype `deploy --only dataconnect` (#820) * Scaffolding code and implementing list/createService * Simple implementation of reading firemat.yaml and deploying schemas/operation sets * More progress * Adding source.ts * Format and clean up bad merge * cleaned up wrong tests * Successfully deploying schemas, added cloudSql client * E2E deploys working, cleaned up some cruft * Add ensureApiEnabled, more cleanup * Update src/commands/init.ts Co-authored-by: Michael Bleigh * remove listSchemas * trying to get install from git url working * nope * Another try * also no * Another round of cleanup * Cleaning up * starting updates to match dataconect.yaml * Fixed up deploy flow to read and use approved dataconnect.yaml * Renaming it all to firemat * one last spot * Updating init as well * Updating json schema * one last spot * self review fixes * simplify init template * Format and cleanup * udpated json schema * Update src/experiments.ts Co-authored-by: Michael Bleigh * Update src/emulator/constants.ts Co-authored-by: Michael Bleigh * PR fixes * cleanup * format --------- Co-authored-by: Michael Bleigh * Fix Emulators.FIREMAT rename * Rename emulator to Dataconnect (#869) The emulator was renamed in a previous commit, but it appears that there were some leftovers. * Adding a parser for connector and service names (#866) * Adding a parser for connector and service names * no only * update shrinkwrap * Rename instance * Update test * More test update * Update fishfood e2e * Update e2e * Fix emulator * Fix console errors * Fix path * Fix test * Fix inquirer error * Rename folder * Firemat > Data Connect * webview id fix * Revert firemat.yaml > dataconnect.yaml for now * Format * ignore wdio for vsix package * Add initial deploy flow * Add `dataconnect.list` command (#868) * starting to implement dataconnect:list * adding command file * Adding a parser for connector and service names * no only * Adding dataconect:list command * Add --json support * silence warnings * More silencing of warnings * Pr fixes * Update queries.gql (#889) Turns out graphql-js is unable to parse empty argument lists * Fix config file * Adding a basic cloudsqladmin client (#879) * starting to implement dataconnect:list * adding command file * Adding a parser for connector and service names * no only * Adding dataconect:list command * Add --json support * Adding a basic clodusqladmin client * Minor cleanups * formatting * Delete is nonstandard * format * Connect to CloudSQL as a builtin user or service account (#878) * starting to implement dataconnect:list * adding command file * Adding dataconect:list command * Add --json support * Adding a basic clodusqladmin client * Minor cleanups * formatting * Delete is nonstandard * Prototyping provisioning + connecting to an instance! * Merge conflict * Merge conflict * Connecting via IAM users woprking with ADC auth * format * cleanup * clean up! * Provision CloudSQL resources on init and deploy (#882) * starting to implement dataconnect:list * adding command file * Adding a parser for connector and service names * no only * Adding dataconect:list command * Add --json support * Adding a basic clodusqladmin client * Minor cleanups * formatting * Delete is nonstandard * Prototyping provisioning + connecting to an instance! * Merge conflict * Merge conflict * Connecting via IAM users woprking with ADC auth * format * cleanup * Added cloudSQL provisioning to deploy and init * fixing instanceId * Clean up * npm-shrikwrapped * Remove dependency on Option from readFirebaseJson (#893) * Update configs * Convert paths to absolute * Fix path * Fix move to connector * location > source * Cleanup * Bump FDC emulator versions. * In production, show connector ID * Kinda update tes * Fix FDC emulator absolute path. * Remove log import. * Lint. * Fixing a bug from bugbash * it builds now * Pass the PG local connection string from an env variable to the emulator. * Add utils for getting services and connectors. Service file uses correct serviceId. Small refactor * Separate utils file to file-utils and config * Pass `local_connection_string` flag to emulator. * initial deploy commit * pass config options to deploy * Update deploy to pick from services, then connectors * fix deploy * resolve comments * Default should be empty string. * Ran npm run generate:json-schema * Bump emulator version. * Implement dataconnect:sql:diff and dataconnect:sgl:migrate (#897) * Start scaffoling out code for schema migration * progress on schema migration * progress * First time migrating a schema!! * Adding a SQL formatter and breaking things * Big improvements to permissions logic * formats * Self review * fiddling with grants * more cleanup and edge case fixing * Run npm run generate:json-schema. * Refactor "move to connector" to an assist * initial stream compile errors implementation * Handle multiple connectors for moveToConnector * forgot to remove a test user * forgot to remove a test user * fixing undefined access error * Validate and patch existing Cloud SQL instances. * emulator bump * Cleaning up and running a formatter. * npm run format * One more lint error. * Linting one more time. * Added support for connecting to cloudSQL using user accounts (#908) * Added support for connecting to cloudSQL using user accounts * finshing my sentences * Add extra sequences grant, make URL optional * More cleanup * Address review comments. * npm run lint:changed-files -- --fix * emulator bump * update api ver * Re-add dataConnect specific api values as getters * Fix path typo (#913) * Fix sample project * rename * Cleanup * Fix errors * Revamp side panel to include postgres setter * update dc staging api * update staging url to use https * ls package fixes * dataconnect api flag * update vscode env vars * cli update * Update src/utils.ts Co-authored-by: joehan * Tweak datasource in dataconnect:list (#909) * format * Adding schema files for dataconnect.yaml and connector.yaml (#918) * Adding schema files for dataconnect.yaml and connector.yaml * Fixed some errors * add schema to contributes * Perform schema migration during deploy as well (#917) * Starting on adding schema migration to deploy * Fixing force behavior * format * self review * PR suggestions + 2 way choice when not destructive * Make serviceID optional, prompt for deleting services (#925) * Fix and refactor tests * Updating firebase.json to accept array of dataconnects (#931) * Updating firebase.json to accept array of dataconnects * Fix type usage * === * Add localConectionString into .firebaserc (#929) * dataconnect production api * add missing files * change string concat * format * add language-service file * fast fix for dataConnectSingle type * typing fix for DataconnectMultiple * remove ui for adding psql conn string * address comments * Bump FDC emulator version. * Create CloudSQL instances with configuration needed for FDC free trial. * Adding support for --only flags (#927) * Adding support for --only falgs * Minor cleanups * Refactor for clarity * deep equal * deploy using a terminal * respond to comments * Remove backupConfiguration enablement, it already defaults to false. * Add `dataconnect:sdk:generate` command (#934) * Starting on generate * Updating firebase.json to accept array of dataconnects * More progress on generate * Updating firebase.json to accept array of dataconnects * Fix type usage * === * Still getting enoent errors, unsure why * Working! * format * Remove "connect to instance" logic and show running emulators in the status bar. (#947) * Fixed package-lock and updated to use new emulator * Refactor --force behavior match Freds proposal (#946) * Refactor --force behavior match Freds proposal * PR fixes * adding comments * Update emulator * Add GraphQL.vscode-graphql-syntax as extension dependency (#948) * Remove duplicate * Updating emulator * Correctly watch for dataconnect.yaml changes (#949) * Validate local schema and connectors together before deploy (#952) * Starting on build * types * Progress! * Prettify errors * Line numbers, and save deployment metadata * Extremely defensive * Update FDC free trial tag per latest decision. (#953) * Only one free trial per project, please. (#955) * Strating on pricing warning/free trial * waiting until sync to continue * Added free trial check * clean up console.log * Handle malformed dataconnect.yaml files (#950) * Show FDC views only if FDC is enabled * Enable Goole ML Integration if vector is used (#954) * Code cleanup + add vector provisioning * PR fixes * Rebase * Rebase * Clean up todos * PR fixes * Use require vector everywhere * format * Update FDC Deploy view (#958) * Starting point for piping logs to VSCode (#944) * Starting point for piping logs to VSCode * Add vsceLogEmitter * format * Bump emulator version. (#959) * Bump emulator version. * Enable size and checksum check for FDC emulator. * Add sslMode=disable to default local conn string (#960) * Added simple smoke test for deploy --only dataconnect (#840) * Scaffolding code and implementing list/createService * Simple implementation of reading firemat.yaml and deploying schemas/operation sets * More progress * Adding source.ts * Format and clean up bad merge * cleaned up wrong tests * Successfully deploying schemas, added cloudSql client * E2E deploys working, cleaned up some cruft * Add ensureApiEnabled, more cleanup * Update src/commands/init.ts Co-authored-by: Michael Bleigh * remove listSchemas * trying to get install from git url working * nope * Another try * also no * Another round of cleanup * Cleaning up * Sketched up a dead simple integration/load test * Updating to match new format * Fixed this up to match new semantics * formats * Adding actual validation of what is deployed * Made this way less hacky and easier to add more cases to in the future * PR fixes --------- Co-authored-by: Michael Bleigh * add deploy all * address comments * Pass non demo- project id to emulator * fix parse * Adding shell:true to dataconnect emulator --------- Co-authored-by: Remi Rousselet Co-authored-by: Harold Shen Co-authored-by: Michael Bleigh Co-authored-by: TJ Lavelle Co-authored-by: Rosalyn Tan Co-authored-by: Maneesh Tewani --- .eslintrc.js | 2 + firebase-vscode/.eslintrc.json | 40 +- firebase-vscode/.gitignore | 3 +- firebase-vscode/.prettierignore | 10 + firebase-vscode/.vscode/extensions.json | 4 +- firebase-vscode/.vscode/launch.json | 12 +- firebase-vscode/.vscodeignore | 5 +- firebase-vscode/common/error.ts | 28 + firebase-vscode/common/graphql.ts | 63 + firebase-vscode/common/messaging/broker.ts | 2 +- firebase-vscode/common/messaging/protocol.ts | 70 +- firebase-vscode/common/messaging/types.d.ts | 2 +- firebase-vscode/common/types.d.ts | 4 +- .../graphql-language-service-5.2.0.tgz | Bin 0 -> 124689 bytes ...graphql-language-service-server-2.12.0.tgz | Bin 0 -> 92446 bytes firebase-vscode/package-lock.json | 7839 ++++---- firebase-vscode/package.json | 123 +- firebase-vscode/resources/GMPIcons.woff2 | Bin 0 -> 8384 bytes firebase-vscode/scripts/swap-pkg.js | 13 +- firebase-vscode/src/auth/service.ts | 23 + firebase-vscode/src/cli.ts | 28 +- firebase-vscode/src/core/config.ts | 32 +- firebase-vscode/src/core/emulators.ts | 261 +- firebase-vscode/src/core/index.ts | 36 +- firebase-vscode/src/core/project.ts | 16 +- .../src/data-connect/ad-hoc-mutations.ts | 102 + .../src/data-connect/code-lens-provider.ts | 162 + firebase-vscode/src/data-connect/config.ts | 190 + .../src/data-connect/connectors.ts | 516 + .../src/data-connect/core-compiler.ts | 139 + firebase-vscode/src/data-connect/deploy.ts | 126 + .../src/data-connect/emulators-status.ts | 61 + .../execution-history-provider.ts | 96 + .../src/data-connect/execution-store.ts | 83 + firebase-vscode/src/data-connect/execution.ts | 210 + .../src/data-connect/explorer-provider.ts | 232 + firebase-vscode/src/data-connect/explorer.ts | 38 + .../src/data-connect/file-utils.ts | 15 + firebase-vscode/src/data-connect/index.ts | 246 + .../src/data-connect/language-client.ts | 112 + .../src/data-connect/language-server.ts | 17 + firebase-vscode/src/data-connect/service.ts | 278 + firebase-vscode/src/data-connect/terminal.ts | 19 + firebase-vscode/src/data-connect/types.ts | 12 + firebase-vscode/src/extension-broker.ts | 9 +- firebase-vscode/src/extension.ts | 19 +- firebase-vscode/src/hosting/index.ts | 16 +- firebase-vscode/src/logger-wrapper.ts | 36 +- firebase-vscode/src/metaprogramming.ts | 5 + firebase-vscode/src/options.ts | 10 +- firebase-vscode/src/result.ts | 12 +- firebase-vscode/src/stubs/inquirer-stub.js | 6 +- .../{wdio.conf.ts => default_wdio.conf.ts} | 40 +- firebase-vscode/src/test/empty_wdio.conf.ts | 7 + .../src/test/fishfood_wdio.conf.ts | 21 + .../test/integration/{ => empty}/project.ts | 5 +- .../src/test/integration/empty/sidebar.ts | 13 + .../src/test/integration/fishfood/deploy.ts | 41 + .../integration/fishfood/emulator_status.ts | 28 + .../test/integration/fishfood/execution.ts | 47 + .../src/test/integration/fishfood/sidebar.ts | 20 + firebase-vscode/src/test/integration/mock.ts | 37 + .../src/test/integration/sidebar.ts | 14 - .../src/test/suite/src/cli.test.ts | 2 +- .../src/test/suite/src/core/config.test.ts | 46 +- .../src/test/suite/{ => src/core}/index.ts | 0 .../test/suite/src/dataconnect/config.test.ts | 111 + .../src/test/test_projects/.gitignore | 2 + .../test/test_projects/fishfood/.firebaserc | 8 + .../test/test_projects/fishfood/.gitignore | 66 + .../test/test_projects/fishfood/.graphqlrc | 9 + .../dataconnect/connectors/a/connector.yaml | 4 + .../dataconnect/connectors/a/mutations.gql | 10 + .../dataconnect/connectors/a/queries.gql | 22 + .../fishfood/dataconnect/dataconnect.yaml | 11 + .../fishfood/dataconnect/schema/schema.gql | 10 + .../test/test_projects/fishfood/firebase.json | 18 + firebase-vscode/src/test/utils/broker.ts | 2 +- firebase-vscode/src/test/utils/fs.ts | 7 +- firebase-vscode/src/test/utils/mock.ts | 5 +- .../src/test/utils/page_objects/commands.ts | 20 + .../src/test/utils/page_objects/editor.ts | 26 + .../src/test/utils/page_objects/execution.ts | 114 + .../test/utils/page_objects/quick_picks.ts | 20 + .../src/test/utils/page_objects/sidebar.ts | 70 + .../src/test/utils/page_objects/status_bar.ts | 13 + firebase-vscode/src/test/utils/projects.ts | 11 + firebase-vscode/src/test/utils/test_hooks.ts | 26 +- firebase-vscode/src/test/utils/webviews.ts | 46 + firebase-vscode/src/test/utils/workspace.ts | 2 +- firebase-vscode/src/utils/env.ts | 2 + firebase-vscode/src/utils/graphql.ts | 12 + firebase-vscode/src/utils/promise.ts | 18 + firebase-vscode/src/utils/signal.ts | 6 +- firebase-vscode/src/utils/test_hooks.ts | 40 + firebase-vscode/src/webview.ts | 10 +- firebase-vscode/tsconfig.json | 3 + firebase-vscode/webpack.common.js | 97 +- firebase-vscode/webpack.dev.js | 8 +- firebase-vscode/webpack.prod.js | 29 +- .../DataConnectExecutionResultsApp.tsx | 144 + firebase-vscode/webviews/SidebarApp.tsx | 9 +- .../webviews/components/EmulatorPanel.tsx | 253 +- .../webviews/components/InitPanel.tsx | 11 +- .../webviews/components/ui/PanelSection.tsx | 11 +- .../webviews/components/ui/SplitButton.scss | 2 +- ...connect-execution-configuration.entry.scss | 59 + ...-connect-execution-configuration.entry.tsx | 117 + .../data-connect-execution-results.entry.scss | 37 + .../data-connect-execution-results.entry.tsx | 6 + .../webviews/data-connect.entry.tsx | 69 + .../webviews/globals/html-broker.ts | 18 + firebase-vscode/webviews/globals/ux-text.ts | 19 +- .../webviews/globals/web-logger.ts | 6 +- firebase-vscode/webviews/sidebar.entry.scss | 2 +- npm-shrinkwrap.json | 15844 +++++++--------- package.json | 11 +- schema/connector-yaml.json | 54 + schema/dataconnect-yaml.json | 72 + schema/firebase-config.json | 103 + scripts/dataconnect-test/.firebaserc | 1 + scripts/dataconnect-test/.gitignore | 66 + .../fdc-test/connector/connector.yaml | 2 + .../fdc-test/connector/mutations.gql | 3 + .../fdc-test/dataconnect.yaml | 10 + .../fdc-test/schema/schema.gql | 14 + scripts/dataconnect-test/firebase.json | 6 + scripts/dataconnect-test/run.sh | 6 + scripts/dataconnect-test/tests.ts | 72 + scripts/functions-deploy-tests/cli.ts | 8 +- src/api.ts | 9 + src/apiv2.ts | 50 +- src/auth.ts | 1 - src/checkValidTargetFilters.ts | 9 +- src/commands/dataconnect-list.ts | 60 + src/commands/dataconnect-sdk-generate.ts | 37 + src/commands/dataconnect-sql-diff.ts | 23 + src/commands/dataconnect-sql-migrate.ts | 41 + src/commands/deploy.ts | 6 +- src/commands/index.ts | 11 +- src/commands/init.ts | 8 + src/commands/setup-emulators-dataconnect.ts | 11 + src/config.ts | 1 + src/dataconnect/build.ts | 24 + src/dataconnect/checkIam.ts | 30 + src/dataconnect/client.ts | 150 + src/dataconnect/dataplaneClient.ts | 20 + src/dataconnect/fileUtils.ts | 104 + src/dataconnect/filters.ts | 49 + src/dataconnect/freeTrial.ts | 22 + src/dataconnect/graphqlError.ts | 10 + src/dataconnect/load.ts | 47 + src/dataconnect/names.ts | 62 + src/dataconnect/prompts.ts | 23 + src/dataconnect/provisionCloudSql.ts | 139 + src/dataconnect/schemaMigration.ts | 167 + src/dataconnect/types.ts | 198 + src/deploy/dataconnect/deploy.ts | 122 + src/deploy/dataconnect/index.ts | 5 + src/deploy/dataconnect/prepare.ts | 40 + src/deploy/dataconnect/release.ts | 112 + src/deploy/functions/checkIam.ts | 51 +- src/deploy/index.ts | 2 + src/downloadUtils.ts | 5 +- src/emulator/constants.ts | 3 + src/emulator/controller.ts | 43 +- src/emulator/dataconnectEmulator.ts | 100 + src/emulator/download.ts | 2 +- src/emulator/downloadableEmulators.ts | 66 +- src/emulator/portUtils.ts | 7 +- src/emulator/registry.ts | 16 +- src/emulator/types.ts | 7 +- src/experiments.ts | 6 + src/extensions/emulator/specHelper.ts | 50 +- src/firebaseConfig.ts | 16 + src/gcp/cloudsql/cloudsqladmin.ts | 204 + src/gcp/cloudsql/connect.ts | 191 + src/gcp/cloudsql/fbToolsAuthClient.ts | 45 + src/gcp/cloudsql/types.ts | 113 + src/gcp/iam.ts | 50 + src/init/features/dataconnect/index.ts | 130 + src/init/features/emulators.ts | 20 +- src/init/features/index.ts | 1 + src/init/index.ts | 6 +- src/logger.ts | 40 +- src/operation-poller.ts | 8 +- src/rc.ts | 17 +- src/requireAuth.ts | 2 +- src/test/dataconnect/filters.spec.ts | 82 + src/test/dataconnect/names.spec.ts | 93 + src/test/deploy/functions/checkIam.spec.ts | 46 - src/test/gcp/iam.spec.ts | 51 + src/test/init/features/functions.spec.ts | 2 +- src/test/rc.spec.ts | 2 +- src/utils.ts | 76 +- templates/init/dataconnect/connector.yaml | 2 + templates/init/dataconnect/dataconnect.yaml | 10 + templates/init/dataconnect/mutations.gql | 5 + templates/init/dataconnect/queries.gql | 7 + templates/init/dataconnect/schema.gql | 16 + tsconfig.json | 5 + 201 files changed, 19882 insertions(+), 12904 deletions(-) create mode 100644 firebase-vscode/.prettierignore create mode 100644 firebase-vscode/common/error.ts create mode 100644 firebase-vscode/common/graphql.ts create mode 100644 firebase-vscode/graphql-language-service-5.2.0.tgz create mode 100644 firebase-vscode/graphql-language-service-server-2.12.0.tgz create mode 100644 firebase-vscode/resources/GMPIcons.woff2 create mode 100644 firebase-vscode/src/auth/service.ts create mode 100644 firebase-vscode/src/data-connect/ad-hoc-mutations.ts create mode 100644 firebase-vscode/src/data-connect/code-lens-provider.ts create mode 100644 firebase-vscode/src/data-connect/config.ts create mode 100644 firebase-vscode/src/data-connect/connectors.ts create mode 100644 firebase-vscode/src/data-connect/core-compiler.ts create mode 100644 firebase-vscode/src/data-connect/deploy.ts create mode 100644 firebase-vscode/src/data-connect/emulators-status.ts create mode 100644 firebase-vscode/src/data-connect/execution-history-provider.ts create mode 100644 firebase-vscode/src/data-connect/execution-store.ts create mode 100644 firebase-vscode/src/data-connect/execution.ts create mode 100644 firebase-vscode/src/data-connect/explorer-provider.ts create mode 100644 firebase-vscode/src/data-connect/explorer.ts create mode 100644 firebase-vscode/src/data-connect/file-utils.ts create mode 100644 firebase-vscode/src/data-connect/index.ts create mode 100644 firebase-vscode/src/data-connect/language-client.ts create mode 100644 firebase-vscode/src/data-connect/language-server.ts create mode 100644 firebase-vscode/src/data-connect/service.ts create mode 100644 firebase-vscode/src/data-connect/terminal.ts create mode 100644 firebase-vscode/src/data-connect/types.ts create mode 100644 firebase-vscode/src/metaprogramming.ts rename firebase-vscode/src/test/{wdio.conf.ts => default_wdio.conf.ts} (54%) create mode 100644 firebase-vscode/src/test/empty_wdio.conf.ts create mode 100644 firebase-vscode/src/test/fishfood_wdio.conf.ts rename firebase-vscode/src/test/integration/{ => empty}/project.ts (82%) create mode 100644 firebase-vscode/src/test/integration/empty/sidebar.ts create mode 100644 firebase-vscode/src/test/integration/fishfood/deploy.ts create mode 100644 firebase-vscode/src/test/integration/fishfood/emulator_status.ts create mode 100644 firebase-vscode/src/test/integration/fishfood/execution.ts create mode 100644 firebase-vscode/src/test/integration/fishfood/sidebar.ts create mode 100644 firebase-vscode/src/test/integration/mock.ts delete mode 100644 firebase-vscode/src/test/integration/sidebar.ts rename firebase-vscode/src/test/suite/{ => src/core}/index.ts (100%) create mode 100644 firebase-vscode/src/test/suite/src/dataconnect/config.test.ts create mode 100644 firebase-vscode/src/test/test_projects/.gitignore create mode 100644 firebase-vscode/src/test/test_projects/fishfood/.firebaserc create mode 100644 firebase-vscode/src/test/test_projects/fishfood/.gitignore create mode 100644 firebase-vscode/src/test/test_projects/fishfood/.graphqlrc create mode 100644 firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/connector.yaml create mode 100644 firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/mutations.gql create mode 100644 firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/queries.gql create mode 100644 firebase-vscode/src/test/test_projects/fishfood/dataconnect/dataconnect.yaml create mode 100644 firebase-vscode/src/test/test_projects/fishfood/dataconnect/schema/schema.gql create mode 100644 firebase-vscode/src/test/test_projects/fishfood/firebase.json create mode 100644 firebase-vscode/src/test/utils/page_objects/commands.ts create mode 100644 firebase-vscode/src/test/utils/page_objects/editor.ts create mode 100644 firebase-vscode/src/test/utils/page_objects/execution.ts create mode 100644 firebase-vscode/src/test/utils/page_objects/quick_picks.ts create mode 100644 firebase-vscode/src/test/utils/page_objects/sidebar.ts create mode 100644 firebase-vscode/src/test/utils/page_objects/status_bar.ts create mode 100644 firebase-vscode/src/test/utils/projects.ts create mode 100644 firebase-vscode/src/test/utils/webviews.ts create mode 100644 firebase-vscode/src/utils/env.ts create mode 100644 firebase-vscode/src/utils/graphql.ts create mode 100644 firebase-vscode/src/utils/promise.ts create mode 100644 firebase-vscode/webviews/DataConnectExecutionResultsApp.tsx create mode 100644 firebase-vscode/webviews/data-connect-execution-configuration.entry.scss create mode 100644 firebase-vscode/webviews/data-connect-execution-configuration.entry.tsx create mode 100644 firebase-vscode/webviews/data-connect-execution-results.entry.scss create mode 100644 firebase-vscode/webviews/data-connect-execution-results.entry.tsx create mode 100644 firebase-vscode/webviews/data-connect.entry.tsx create mode 100644 schema/connector-yaml.json create mode 100644 schema/dataconnect-yaml.json create mode 100644 scripts/dataconnect-test/.firebaserc create mode 100644 scripts/dataconnect-test/.gitignore create mode 100644 scripts/dataconnect-test/fdc-test/connector/connector.yaml create mode 100644 scripts/dataconnect-test/fdc-test/connector/mutations.gql create mode 100644 scripts/dataconnect-test/fdc-test/dataconnect.yaml create mode 100644 scripts/dataconnect-test/fdc-test/schema/schema.gql create mode 100644 scripts/dataconnect-test/firebase.json create mode 100644 scripts/dataconnect-test/run.sh create mode 100644 scripts/dataconnect-test/tests.ts mode change 100644 => 100755 src/api.ts create mode 100644 src/commands/dataconnect-list.ts create mode 100644 src/commands/dataconnect-sdk-generate.ts create mode 100644 src/commands/dataconnect-sql-diff.ts create mode 100644 src/commands/dataconnect-sql-migrate.ts create mode 100644 src/commands/setup-emulators-dataconnect.ts create mode 100644 src/dataconnect/build.ts create mode 100644 src/dataconnect/checkIam.ts create mode 100644 src/dataconnect/client.ts create mode 100644 src/dataconnect/dataplaneClient.ts create mode 100644 src/dataconnect/fileUtils.ts create mode 100644 src/dataconnect/filters.ts create mode 100644 src/dataconnect/freeTrial.ts create mode 100644 src/dataconnect/graphqlError.ts create mode 100644 src/dataconnect/load.ts create mode 100644 src/dataconnect/names.ts create mode 100644 src/dataconnect/prompts.ts create mode 100755 src/dataconnect/provisionCloudSql.ts create mode 100644 src/dataconnect/schemaMigration.ts create mode 100644 src/dataconnect/types.ts create mode 100644 src/deploy/dataconnect/deploy.ts create mode 100644 src/deploy/dataconnect/index.ts create mode 100644 src/deploy/dataconnect/prepare.ts create mode 100644 src/deploy/dataconnect/release.ts mode change 100644 => 100755 src/emulator/controller.ts create mode 100644 src/emulator/dataconnectEmulator.ts mode change 100644 => 100755 src/emulator/downloadableEmulators.ts create mode 100755 src/gcp/cloudsql/cloudsqladmin.ts create mode 100644 src/gcp/cloudsql/connect.ts create mode 100644 src/gcp/cloudsql/fbToolsAuthClient.ts create mode 100644 src/gcp/cloudsql/types.ts create mode 100644 src/init/features/dataconnect/index.ts create mode 100644 src/test/dataconnect/filters.spec.ts create mode 100644 src/test/dataconnect/names.spec.ts create mode 100644 templates/init/dataconnect/connector.yaml create mode 100644 templates/init/dataconnect/dataconnect.yaml create mode 100644 templates/init/dataconnect/mutations.gql create mode 100644 templates/init/dataconnect/queries.gql create mode 100644 templates/init/dataconnect/schema.gql diff --git a/.eslintrc.js b/.eslintrc.js index 129a36e41bf..7addbda6455 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -130,5 +130,7 @@ module.exports = { "src/emulator/auth/schema.ts", // TODO(hsubox76): Set up a job to run eslint separately on vscode dir "firebase-vscode/", + // If this is leftover from "clean-install.sh", don't lint it + "clean/**", ], }; diff --git a/firebase-vscode/.eslintrc.json b/firebase-vscode/.eslintrc.json index 681109e79a6..566c5f681c1 100644 --- a/firebase-vscode/.eslintrc.json +++ b/firebase-vscode/.eslintrc.json @@ -1,24 +1,20 @@ { - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - // "react" - ], - "rules": { - "@typescript-eslint/semi": "warn", - "curly": "warn", - "eqeqeq": "warn", - "no-throw-literal": "warn", - "semi": "off" - }, - "ignorePatterns": [ - "out", - "dist", - "**/*.d.ts" - ] + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + // "react" + ], + "rules": { + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": ["out", "dist", "**/*.d.ts"] } diff --git a/firebase-vscode/.gitignore b/firebase-vscode/.gitignore index 6e916f483d0..c974aeb9293 100644 --- a/firebase-vscode/.gitignore +++ b/firebase-vscode/.gitignore @@ -4,4 +4,5 @@ dist/ resources/dist .vscode-test .wdio-vscode-service -logs \ No newline at end of file +logs +!*.tgz \ No newline at end of file diff --git a/firebase-vscode/.prettierignore b/firebase-vscode/.prettierignore new file mode 100644 index 00000000000..284acd000df --- /dev/null +++ b/firebase-vscode/.prettierignore @@ -0,0 +1,10 @@ +## The default +**/.git +**/.svn +**/.hg +**/node_modules + +## The good stuff +dist +resources +package-lock.json \ No newline at end of file diff --git a/firebase-vscode/.vscode/extensions.json b/firebase-vscode/.vscode/extensions.json index d26385a6325..c0a2258b02c 100644 --- a/firebase-vscode/.vscode/extensions.json +++ b/firebase-vscode/.vscode/extensions.json @@ -1,7 +1,5 @@ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format - "recommendations": [ - "dbaeumer.vscode-eslint" - ] + "recommendations": ["dbaeumer.vscode-eslint"] } diff --git a/firebase-vscode/.vscode/launch.json b/firebase-vscode/.vscode/launch.json index 9ade0d5097d..1a33bfd5e01 100644 --- a/firebase-vscode/.vscode/launch.json +++ b/firebase-vscode/.vscode/launch.json @@ -9,12 +9,8 @@ "name": "Run Extension", "type": "extensionHost", "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/dist/**/*.js" - ], + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/dist/**/*.js"], "preLaunchTask": "${defaultBuildTask}" }, { @@ -25,9 +21,7 @@ "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/dist/test/suite/index" ], - "outFiles": [ - "${workspaceFolder}/dist/test/**/*.js" - ], + "outFiles": ["${workspaceFolder}/dist/test/**/*.js"], "preLaunchTask": "${defaultBuildTask}" } ] diff --git a/firebase-vscode/.vscodeignore b/firebase-vscode/.vscodeignore index 42df22e391a..43d19f15c1a 100644 --- a/firebase-vscode/.vscodeignore +++ b/firebase-vscode/.vscodeignore @@ -17,4 +17,7 @@ webpack.*.js ../ *.zip node_modules/ -dist/test/ \ No newline at end of file +dist/test/ +*.tgz +package-lock.json +.wdio-vscode-service/ \ No newline at end of file diff --git a/firebase-vscode/common/error.ts b/firebase-vscode/common/error.ts new file mode 100644 index 00000000000..93d826faa79 --- /dev/null +++ b/firebase-vscode/common/error.ts @@ -0,0 +1,28 @@ +/** An error thrown before the GraphQL operation could complete. + * + * This could include HTTP errors or JSON parsing errors. + */ +export class DataConnectError extends Error { + constructor(message: string, cause?: unknown) { + super(message, { cause }); + } +} + +/** Encode an error into a {@link SerializedError} */ +export function toSerializedError(error: Error): SerializedError { + return { + name: error.name, + message: error.message, + stack: error.stack, + cause: + error.cause instanceof Error ? toSerializedError(error.cause) : undefined, + }; +} + +/** An error object that can be sent across webview boundaries */ +export interface SerializedError { + name?: string; + message: string; + stack?: string; + cause?: SerializedError; +} diff --git a/firebase-vscode/common/graphql.ts b/firebase-vscode/common/graphql.ts new file mode 100644 index 00000000000..38d03a72c32 --- /dev/null +++ b/firebase-vscode/common/graphql.ts @@ -0,0 +1,63 @@ +import { ExecutionResult, GraphQLError } from "graphql"; + +/** Asserts that an unknown object is a {@link ExecutionResult} */ +export function assertExecutionResult( + response: any +): asserts response is ExecutionResult { + if (!response) { + throw new Error(`Expected ExecutionResult but got ${response}`); + } + + const type = typeof response; + if (type !== "object") { + throw new Error(`Expected ExecutionResult but got ${type}`); + } + + const { data, errors } = response; + if (!data && !errors) { + throw new Error( + `Expected ExecutionResult to have either "data" or "errors" set but none found` + ); + } + + if (errors) { + if (!Array.isArray(errors)) { + throw new Error( + `Expected errors to be an array but got ${typeof errors}` + ); + } + for (const error of errors) { + assertGraphQLError(error); + } + } +} + +export function isExecutionResult(response: any): response is ExecutionResult { + try { + assertExecutionResult(response); + return true; + } catch { + return false; + } +} + +/** Asserts that an unknown object is a {@link GraphQLError} */ +export function assertGraphQLError( + error: unknown +): asserts error is GraphQLError { + if (!error) { + throw new Error(`Expected GraphQLError but got ${error}`); + } + + const type = typeof error; + if (type !== "object") { + throw new Error(`Expected GraphQLError but got ${type}`); + } + + const { message } = error as GraphQLError; + if (typeof message !== "string") { + throw new Error( + `Expected GraphQLError to have "message" set but got ${typeof message}` + ); + } +} diff --git a/firebase-vscode/common/messaging/broker.ts b/firebase-vscode/common/messaging/broker.ts index 5c19863b94a..c200a58a800 100644 --- a/firebase-vscode/common/messaging/broker.ts +++ b/firebase-vscode/common/messaging/broker.ts @@ -92,7 +92,7 @@ export function createBroker< on( message: Extract, listener: (params: IncomingMessages[E]) => void - ) { + ): () => void { return broker.addListener(message, listener); }, delete(): void { diff --git a/firebase-vscode/common/messaging/protocol.ts b/firebase-vscode/common/messaging/protocol.ts index cae56dc5cf6..9373788115d 100644 --- a/firebase-vscode/common/messaging/protocol.ts +++ b/firebase-vscode/common/messaging/protocol.ts @@ -8,6 +8,28 @@ import { User } from "../../../src/types/auth"; import { ServiceAccountUser } from "../types"; import { RCData } from "../../../src/rc"; import { EmulatorUiSelections, RunningEmulatorInfo } from "./types"; +import { ExecutionResult } from "graphql"; +import { SerializedError } from "../error"; + +export const DEFAULT_EMULATOR_UI_SELECTIONS: EmulatorUiSelections = { + projectId: "demo-something", + importStateFolderPath: "", + exportStateOnExit: false, + mode: "dataconnect", + debugLogging: false, +}; + +export enum UserMockKind { + ADMIN = "admin", + UNAUTHENTICATED = "unauthenticated", + AUTHENTICATED = "authenticated", +} +export type UserMock = + | { kind: UserMockKind.ADMIN | UserMockKind.UNAUTHENTICATED } + | { + kind: UserMockKind.AUTHENTICATED; + claims: string; + }; export interface WebviewToExtensionParamsMap { /** @@ -17,6 +39,13 @@ export interface WebviewToExtensionParamsMap { addUser: {}; logout: { email: string }; + /* Emulator panel requests */ + getEmulatorUiSelections: void; + getEmulatorInfos: void; + updateEmulatorUiSelections: Partial; + /* Equivalent to the `firebase emulators:start` command.*/ + launchEmulators: void; + /** Notify extension that current user has been changed in UI. */ requestChangeUser: { user: User | ServiceAccountUser }; @@ -64,20 +93,30 @@ export interface WebviewToExtensionParamsMap { href: string; }; - /** - * Equivalent to the `firebase emulators:start` command. - */ - launchEmulators: { - emulatorUiSelections: EmulatorUiSelections; - }; - /** Stops the emulators gracefully allowing for data export if required. */ - stopEmulators: {}; + stopEmulators: void; selectEmulatorImportFolder: {}; + definedDataConnectArgs: string; + /** Prompts the user to select a directory in which to place the quickstart */ chooseQuickstartDir: {}; + + notifyAuthUserMockChange: UserMock; + + /** Deploy connectors/services to production */ + "fdc.deploy": void; + + /** Deploy all connectors/services to production */ + "fdc.deploy-all": void; +} + +export interface DataConnectResults { + query: string; + displayName: string; + results?: ExecutionResult | SerializedError; + args?: string; } export type ValueOrError = @@ -85,6 +124,14 @@ export type ValueOrError = | { error: string; value: undefined }; export interface ExtensionToWebviewParamsMap { + /** Triggered when the emulator UI/state changes */ + notifyEmulatorUiSelectionsChanged: EmulatorUiSelections; + notifyEmulatorStateChanged: { + status: "running" | "stopped" | "starting" | "stopping"; + infos: RunningEmulatorInfo | undefined; + }; + notifyEmulatorImportFolder: { folder: string }; + /** Triggered when new environment variables values are found. */ notifyEnv: { env: { isMonospace: boolean } }; @@ -136,10 +183,9 @@ export interface ExtensionToWebviewParamsMap { */ notifyPreviewChannelResponse: { id: string }; - notifyEmulatorsStopped: {}; - notifyEmulatorStartFailed: {}; - notifyRunningEmulatorInfo: RunningEmulatorInfo; - notifyEmulatorImportFolder: { folder: string }; + // data connect specific + notifyDataConnectResults: DataConnectResults; + notifyDataConnectRequiredArgs: { args: string[] }; } export type MessageParamsMap = diff --git a/firebase-vscode/common/messaging/types.d.ts b/firebase-vscode/common/messaging/types.d.ts index 543207cffb9..dadeab44cdc 100644 --- a/firebase-vscode/common/messaging/types.d.ts +++ b/firebase-vscode/common/messaging/types.d.ts @@ -30,6 +30,6 @@ export interface EmulatorUiSelections { firebaseJsonPath?: string; importStateFolderPath?: string; exportStateOnExit: boolean; - mode: "hosting" | "all"; + mode: "hosting" | "all" | "dataconnect"; debugLogging: boolean; } diff --git a/firebase-vscode/common/types.d.ts b/firebase-vscode/common/types.d.ts index 72f8bf49c5f..076dffb25e2 100644 --- a/firebase-vscode/common/types.d.ts +++ b/firebase-vscode/common/types.d.ts @@ -1,8 +1,8 @@ export interface ServiceAccount { - user: ServiceAccountUser + user: ServiceAccountUser; } export interface ServiceAccountUser { email: string; - type: 'service_account' + type: "service_account"; } diff --git a/firebase-vscode/graphql-language-service-5.2.0.tgz b/firebase-vscode/graphql-language-service-5.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cd9b847871acd2e2c1b7bc0ec9ca0ac45c875e6e GIT binary patch literal 124689 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%0D@Aeja;k~zi2Q;_lD+X_A>wX?v;K@6~RFH?p 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

?pZGXgw2 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

AFgDXv+<2&$ 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 ZCe1?F{4_t!&;PIg{|BOeN3#GN3jp|(B%lBQ literal 0 HcmV?d00001 diff --git a/firebase-vscode/package-lock.json b/firebase-vscode/package-lock.json index b5bd583335f..6630e6baf52 100644 --- a/firebase-vscode/package-lock.json +++ b/firebase-vscode/package-lock.json @@ -1,19 +1,26 @@ { "name": "firebase-vscode", - "version": "0.0.24", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "firebase-vscode", - "version": "0.0.24", + "version": "0.1.0", "dependencies": { - "@preact/signals-react": "^1.3.6", + "@preact/signals-core": "^1.4.0", + "@preact/signals-react": "1.3.6", "@vscode/codicons": "0.0.30", + "@vscode/vsce": "^2.25.0", "@vscode/webview-ui-toolkit": "^1.2.1", "classnames": "^2.3.2", + "exponential-backoff": "3.1.1", + "graphql-language-service": "file:graphql-language-service-5.2.0.tgz", + "graphql-language-service-server": "file:graphql-language-service-server-2.12.0.tgz", + "js-yaml": "^4.1.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "vscode-languageclient": "8.1.0" }, "devDependencies": { "@teamsupercell/typings-for-css-modules-loader": "^2.5.1", @@ -36,9 +43,12 @@ "eslint-plugin-react": "^7.32.2", "fork-ts-checker-webpack-plugin": "^7.3.0", "glob": "^8.0.3", + "graphql": "^16.7.1", "mini-css-extract-plugin": "^2.6.0", "mocha": "^10.1.0", + "node-loader": "2.0.0", "postcss-loader": "^7.0.0", + "prettier": "^3.1.1", "sass": "^1.52.0", "sass-loader": "^13.0.0", "string-replace-loader": "^3.1.0", @@ -55,18 +65,57 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ardatan/sync-fetch": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", + "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", + "dependencies": { + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ardatan/sync-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/@babel/code-frame": { "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.2", "picocolors": "^1.0.0" @@ -75,20 +124,217 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "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==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "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==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -101,9 +347,7 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -113,9 +357,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -127,27 +369,21 @@ }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -155,20 +391,97 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -181,18 +494,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -212,28 +523,25 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.56.0", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fastify/accept-negotiator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", - "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@fastify/ajv-compiler": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", - "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.11.0", "ajv-formats": "^2.1.1", @@ -242,101 +550,406 @@ }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@fastify/cors": { + "version": "8.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fastify-plugin": "^4.0.0", + "mnemonist": "0.39.6" + } + }, + "node_modules/@fastify/deepmerge": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@fastify/error": { + "version": "3.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stringify": "^5.7.0" + } + }, + "node_modules/@fastify/send": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lukeed/ms": "^2.0.1", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "2.0.0", + "mime": "^3.0.0" + } + }, + "node_modules/@fastify/static": { + "version": "6.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/accept-negotiator": "^1.0.0", + "@fastify/send": "^2.0.0", + "content-disposition": "^0.5.3", + "fastify-plugin": "^4.0.0", + "glob": "^8.0.1", + "p-limit": "^3.1.0" + } + }, + "node_modules/@graphql-tools/batch-execute": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.4.tgz", + "integrity": "sha512-kkebDLXgDrep5Y0gK1RN3DMUlLqNhg60OAz0lTCqrYeja6DshxLtLkj+zV4mVbBA4mQOEoBmw6g1LZs3dA84/w==", + "dependencies": { + "@graphql-tools/utils": "^10.0.13", + "dataloader": "^2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/code-file-loader": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.0.3.tgz", + "integrity": "sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA==", + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "8.1.0", + "@graphql-tools/utils": "^10.0.0", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/delegate": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.4.tgz", + "integrity": "sha512-WswZRbQZMh/ebhc8zSomK9DIh6Pd5KbuiMsyiKkKz37TWTrlCOe+4C/fyrBFez30ksq6oFyCeSKMwfrCbeGo0Q==", + "dependencies": { + "@graphql-tools/batch-execute": "^9.0.4", + "@graphql-tools/executor": "^1.2.1", + "@graphql-tools/schema": "^10.0.3", + "@graphql-tools/utils": "^10.0.13", + "dataloader": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.6.tgz", + "integrity": "sha512-+1kjfqzM5T2R+dCw7F4vdJ3CqG+fY/LYJyhNiWEFtq0ToLwYzR/KKyD8YuzTirEjSxWTVlcBh7endkx5n5F6ew==", + "dependencies": { + "@graphql-tools/utils": "^10.1.1", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor-graphql-ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-1.1.2.tgz", + "integrity": "sha512-+9ZK0rychTH1LUv4iZqJ4ESbmULJMTsv3XlFooPUngpxZkk00q6LqHKJRrsLErmQrVaC7cwQCaRBJa0teK17Lg==", + "dependencies": { + "@graphql-tools/utils": "^10.0.13", + "@types/ws": "^8.0.0", + "graphql-ws": "^5.14.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor-http": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-1.0.9.tgz", + "integrity": "sha512-+NXaZd2MWbbrWHqU4EhXcrDbogeiCDmEbrAN+rMn4Nu2okDjn2MTFDbTIab87oEubQCH4Te1wDkWPKrzXup7+Q==", + "dependencies": { + "@graphql-tools/utils": "^10.0.13", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/fetch": "^0.9.0", + "extract-files": "^11.0.0", + "meros": "^1.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor-legacy-ws": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.6.tgz", + "integrity": "sha512-lDSxz9VyyquOrvSuCCnld3256Hmd+QI2lkmkEv7d4mdzkxkK4ddAWW1geQiWrQvWmdsmcnGGlZ7gDGbhEExwqg==", + "dependencies": { + "@graphql-tools/utils": "^10.0.13", + "@types/ws": "^8.0.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "ws": "^8.15.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/graphql-file-loader": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.1.tgz", + "integrity": "sha512-7gswMqWBabTSmqbaNyWSmRRpStWlcCkBc73E6NZNlh4YNuiyKOwbvSkOUYFOqFMfEL+cFsXgAvr87Vz4XrYSbA==", + "dependencies": { + "@graphql-tools/import": "7.0.1", + "@graphql-tools/utils": "^10.0.13", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/graphql-tag-pluck": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.1.0.tgz", + "integrity": "sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w==", + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "^10.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/import": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.0.1.tgz", + "integrity": "sha512-935uAjAS8UAeXThqHfYVr4HEAp6nHJ2sximZKO1RzUTq5WoALMAhhGARl0+ecm6X+cqNUwIChJbjtaa6P/ML0w==", + "dependencies": { + "@graphql-tools/utils": "^10.0.13", + "resolve-from": "5.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/json-file-loader": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.1.tgz", + "integrity": "sha512-lAy2VqxDAHjVyqeJonCP6TUemrpYdDuKt25a10X6zY2Yn3iFYGnuIDQ64cv3ytyGY6KPyPB+Kp+ZfOkNDG3FQA==", + "dependencies": { + "@graphql-tools/utils": "^10.0.13", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, + "node_modules/@graphql-tools/load": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.0.2.tgz", + "integrity": "sha512-S+E/cmyVmJ3CuCNfDuNF2EyovTwdWfQScXv/2gmvJOti2rGD8jTt9GYVzXaxhblLivQR9sBUCNZu/w7j7aXUCA==", + "dependencies": { + "@graphql-tools/schema": "^10.0.3", + "@graphql-tools/utils": "^10.0.13", + "p-limit": "3.1.0", + "tslib": "^2.4.0" + }, "engines": { - "node": ">=14" + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@fastify/cors": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-8.5.0.tgz", - "integrity": "sha512-/oZ1QSb02XjP0IK1U0IXktEsw/dUBTxJOW7IpIeO8c/tNalw/KjoNSJv1Sf6eqoBPO+TDGkifq6ynFK3v68HFQ==", - "dev": true, + "node_modules/@graphql-tools/merge": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.3.tgz", + "integrity": "sha512-FeKv9lKLMwqDu0pQjPpF59GY3HReUkWXKsMIuMuJQOKh9BETu7zPEFUELvcw8w+lwZkl4ileJsHXC9+AnsT2Lw==", "dependencies": { - "fastify-plugin": "^4.0.0", - "mnemonist": "0.39.6" + "@graphql-tools/utils": "^10.0.13", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", - "dev": true - }, - "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", - "dev": true, + "node_modules/@graphql-tools/schema": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.3.tgz", + "integrity": "sha512-p28Oh9EcOna6i0yLaCFOnkcBDQECVf3SCexT6ktb86QNj9idnkhI+tCxnwZDh58Qvjd2nURdkbevvoZkvxzCog==", "dependencies": { - "fast-json-stringify": "^5.7.0" + "@graphql-tools/merge": "^9.0.3", + "@graphql-tools/utils": "^10.0.13", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@fastify/merge-json-schemas": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" + "node_modules/@graphql-tools/url-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-8.0.2.tgz", + "integrity": "sha512-1dKp2K8UuFn7DFo1qX5c1cyazQv2h2ICwA9esHblEqCYrgf69Nk8N7SODmsfWg94OEaI74IqMoM12t7eIGwFzQ==", + "dependencies": { + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/delegate": "^10.0.4", + "@graphql-tools/executor-graphql-ws": "^1.1.2", + "@graphql-tools/executor-http": "^1.0.9", + "@graphql-tools/executor-legacy-ws": "^1.0.6", + "@graphql-tools/utils": "^10.0.13", + "@graphql-tools/wrap": "^10.0.2", + "@types/ws": "^8.0.0", + "@whatwg-node/fetch": "^0.9.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11", + "ws": "^8.12.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@fastify/send": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", - "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", - "dev": true, + "node_modules/@graphql-tools/utils": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.1.3.tgz", + "integrity": "sha512-loco2ctrrMQzdpSHbcOo6+Ecp21BV67cQ2pNGhuVKAexruu01RdLn3LgtK47B9BpLz3cUD6U0u1R0rur7xMOOg==", "dependencies": { - "@lukeed/ms": "^2.0.1", - "escape-html": "~1.0.3", - "fast-decode-uri-component": "^1.0.1", - "http-errors": "2.0.0", - "mime": "^3.0.0" + "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", + "dset": "^3.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@fastify/static": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-6.12.0.tgz", - "integrity": "sha512-KK1B84E6QD/FcQWxDI2aiUCwHxMJBI1KeCUzm1BwYpPY1b742+jeKruGHP2uOluuM6OkBPI8CIANrXcCRtC2oQ==", - "dev": true, + "node_modules/@graphql-tools/wrap": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.5.tgz", + "integrity": "sha512-Cbr5aYjr3HkwdPvetZp1cpDWTGdD1Owgsb3z/ClzhmrboiK86EnQDxDvOJiQkDCPWE9lNBwj8Y4HfxroY0D9DQ==", "dependencies": { - "@fastify/accept-negotiator": "^1.0.0", - "@fastify/send": "^2.0.0", - "content-disposition": "^0.5.3", - "fastify-plugin": "^4.0.0", - "glob": "^8.0.1", - "p-limit": "^3.1.0" + "@graphql-tools/delegate": "^10.0.4", + "@graphql-tools/schema": "^10.0.3", + "@graphql-tools/utils": "^10.1.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -348,9 +961,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -360,16 +972,19 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "version": "2.0.2", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, "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, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -384,9 +999,8 @@ }, "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, + "license": "MIT", "engines": { "node": ">=12" }, @@ -396,15 +1010,13 @@ }, "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 + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -419,9 +1031,8 @@ }, "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, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -436,9 +1047,8 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -448,9 +1058,8 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -460,9 +1069,8 @@ }, "node_modules/@jest/types": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -477,9 +1085,8 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -492,9 +1099,8 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -508,9 +1114,8 @@ }, "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -520,15 +1125,13 @@ }, "node_modules/@jest/types/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 + "dev": true, + "license": "MIT" }, "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -538,9 +1141,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -551,56 +1152,51 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, + "version": "3.1.1", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.5", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kamilkisiela/fast-url-parser": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz", + "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==" + }, "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "version": "2.3.12", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bind": "^1.0.5" }, "engines": { "node": ">= 0.4" @@ -608,24 +1204,21 @@ }, "node_modules/@lukeed/ms": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", - "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@microsoft/fast-element": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.13.0.tgz", - "integrity": "sha512-iFhzKbbD0cFRo9cEzLS3Tdo9BYuatdxmCEKCpZs1Cro/93zNMpZ/Y9/Z7SknmW6fhDZbpBvtO8lLh9TFEcNVAQ==" + "version": "1.12.0", + "license": "MIT" }, "node_modules/@microsoft/fast-foundation": { - "version": "2.49.6", - "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.6.tgz", - "integrity": "sha512-DZVr+J/NIoskFC1Y6xnAowrMkdbf2d5o7UyWK6gW5AiQ6S386Ql8dw4KcC4kHaeE1yL2CKvweE79cj6ZhJhTvA==", + "version": "2.49.5", + "license": "MIT", "dependencies": { - "@microsoft/fast-element": "^1.13.0", + "@microsoft/fast-element": "^1.12.0", "@microsoft/fast-web-utilities": "^5.4.1", "tabbable": "^5.2.0", "tslib": "^1.13.0" @@ -633,16 +1226,14 @@ }, "node_modules/@microsoft/fast-foundation/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@microsoft/fast-react-wrapper": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.3.24.tgz", - "integrity": "sha512-sRnSBIKaO42p4mYoYR60spWVkg89wFxFAgQETIMazAm2TxtlsnsGszJnTwVhXq2Uz+XNiD8eKBkfzK5c/i6/Kw==", + "version": "0.3.23", + "license": "MIT", "dependencies": { - "@microsoft/fast-element": "^1.13.0", - "@microsoft/fast-foundation": "^2.49.6" + "@microsoft/fast-element": "^1.12.0", + "@microsoft/fast-foundation": "^2.49.5" }, "peerDependencies": { "react": ">=16.9.0" @@ -650,17 +1241,14 @@ }, "node_modules/@microsoft/fast-web-utilities": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", - "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", + "license": "MIT", "dependencies": { "exenv-es6": "^1.1.1" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -671,18 +1259,14 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -693,29 +1277,26 @@ }, "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, + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, "node_modules/@preact/signals-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.6.0.tgz", - "integrity": "sha512-O/XGxwP85h1F7+ouqTMOIZ3+V1whfaV9ToIVcuyGriD4JkSD00cQo54BKdqjvBJxbenvp7ynfqRHEwI6e+NIhw==", + "version": "1.5.1", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" } }, "node_modules/@preact/signals-react": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@preact/signals-react/-/signals-react-1.3.8.tgz", - "integrity": "sha512-i7mVZ/ZiD9WqNH79r+klpQsp8X+/dOd/5AtvDI0HNpgWuHyzyF9WXDViKl+1vXgB767n9VnH1W2azg+w1oyFMQ==", + "version": "1.3.6", + "license": "MIT", "dependencies": { - "@preact/signals-core": "^1.5.1", + "@preact/signals-core": "^1.4.0", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -728,9 +1309,8 @@ }, "node_modules/@puppeteer/browsers": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", - "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -747,26 +1327,28 @@ "node": ">=16.3.0" } }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.5.tgz", + "integrity": "sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==" + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -776,9 +1358,8 @@ }, "node_modules/@teamsupercell/typings-for-css-modules-loader": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@teamsupercell/typings-for-css-modules-loader/-/typings-for-css-modules-loader-2.5.2.tgz", - "integrity": "sha512-3sqH2B4itcm5XgV1IHENt4NOaW7bOC1CwJr63vrdKWWyKVxNxtBM+ABVhJZYFCCVAwNy7ulA64z6HyQqw96m4A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "loader-utils": "^1.4.2", @@ -790,31 +1371,27 @@ }, "node_modules/@testim/chrome-version": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.4.tgz", - "integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/eslint": { - "version": "8.56.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", - "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "version": "8.56.2", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -822,9 +1399,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -832,15 +1408,12 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "license": "MIT" }, "node_modules/@types/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "^5.1.2", "@types/node": "*" @@ -848,148 +1421,131 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "16.18.96", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.96.tgz", - "integrity": "sha512-84iSqGXoO+Ha16j8pRZ/L90vDMKX04QTYMTfYeE1WrjWaZXuchBehGUZEpNgx7JnmlrIHdnABmpjrQjhCnNldQ==", - "dev": true + "version": "16.18.79", + "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true + "version": "15.7.11", + "dev": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.2.78", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.78.tgz", - "integrity": "sha512-qOwdPnnitQY4xKlKayt42q5W5UQrSHjgoXNVEtxeqdITJ99k4VXJOP3vt8Rkm9HmgJpH50UNU+rlqfkfWOqp0A==", + "version": "18.2.53", "dev": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", + "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.25", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz", - "integrity": "sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==", + "version": "18.2.18", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "dev": true, + "license": "MIT" + }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "version": "7.5.6", + "dev": true, + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.88.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.88.0.tgz", - "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", - "dev": true + "version": "1.86.0", + "dev": true, + "license": "MIT" }, "node_modules/@types/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", - "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -997,9 +1553,8 @@ }, "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, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -1031,9 +1586,8 @@ }, "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, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -1058,9 +1612,8 @@ }, "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, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" @@ -1075,9 +1628,8 @@ }, "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, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "5.62.0", "@typescript-eslint/utils": "5.62.0", @@ -1102,9 +1654,8 @@ }, "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, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -1115,9 +1666,8 @@ }, "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, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", @@ -1142,9 +1692,8 @@ }, "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, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", @@ -1168,9 +1717,8 @@ }, "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, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" @@ -1185,48 +1733,205 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vitest/snapshot": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.5.0.tgz", - "integrity": "sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==", + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vscode/codicons": { + "version": "0.0.30", + "license": "CC-BY-4.0" + }, + "node_modules/@vscode/test-electron": { + "version": "2.3.9", "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/vsce": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.25.0.tgz", + "integrity": "sha512-VXMCGUaP6wKBadA7vFQdsksxkBAMoh4ecZgXBwauZMASAgnwYesHyLnqIyWYeRwjy2uEpitHvz/1w5ENnR30pg==", + "dependencies": { + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 16" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@vscode/vsce/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "yallist": "^4.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=10" } }, - "node_modules/@vscode/codicons": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.30.tgz", - "integrity": "sha512-/quu8pLXEyrShoDjTImQwJ2H28y1XhANigyw7E7JvN9NNWc3XCkoIWpcb/tUhdf7XQpopLVVYbkMjXpdPPuMXg==" + "node_modules/@vscode/vsce/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@vscode/test-electron": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", - "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", - "dev": true, + "node_modules/@vscode/vsce/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.5.2" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=16" + "node": ">=4" } }, + "node_modules/@vscode/vsce/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@vscode/vsce/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/@vscode/webview-ui-toolkit": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.4.0.tgz", - "integrity": "sha512-modXVHQkZLsxgmd5yoP3ptRC/G8NBDD+ob+ngPiWNQdlrH6H1xR/qgOBD85bfU3BhOB5sZzFWBwwhp9/SfoHww==", + "license": "MIT", "dependencies": { "@microsoft/fast-element": "^1.12.0", "@microsoft/fast-foundation": "^2.49.4", @@ -1237,20 +1942,86 @@ "react": ">=16.9.0" } }, + "node_modules/@vue/compiler-core": { + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.23.tgz", + "integrity": "sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==", + "dependencies": { + "@babel/parser": "^7.24.1", + "@vue/shared": "3.4.23", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.23.tgz", + "integrity": "sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==", + "dependencies": { + "@vue/compiler-core": "3.4.23", + "@vue/shared": "3.4.23" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.23.tgz", + "integrity": "sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==", + "dependencies": { + "@babel/parser": "^7.24.1", + "@vue/compiler-core": "3.4.23", + "@vue/compiler-dom": "3.4.23", + "@vue/compiler-ssr": "3.4.23", + "@vue/shared": "3.4.23", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.8", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.23.tgz", + "integrity": "sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==", + "dependencies": { + "@vue/compiler-dom": "3.4.23", + "@vue/shared": "3.4.23" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.23.tgz", + "integrity": "sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg==" + }, "node_modules/@wdio/cli": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.36.0.tgz", - "integrity": "sha512-B8iEwz9DRzHquPihT74nKUzN9s+rCd1TkBp+JGmdgm7pJqiWTe4FORrzaxWjdiCO78jbYK9LgaMORpCcAzjwIA==", + "version": "8.29.7", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.1", "@vitest/snapshot": "^1.2.1", - "@wdio/config": "8.36.0", - "@wdio/globals": "8.36.0", + "@wdio/config": "8.29.3", + "@wdio/globals": "8.29.7", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.36.0", - "@wdio/utils": "8.36.0", + "@wdio/protocols": "8.29.7", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.3", "async-exit-hook": "^2.0.1", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -1263,9 +2034,9 @@ "lodash.flattendeep": "^4.4.0", "lodash.pickby": "^4.6.0", "lodash.union": "^4.6.0", - "read-pkg-up": "10.0.0", + "read-pkg-up": "^10.0.0", "recursive-readdir": "^2.2.3", - "webdriverio": "8.36.0", + "webdriverio": "8.29.7", "yargs": "^17.7.2" }, "bin": { @@ -1276,23 +2047,21 @@ } }, "node_modules/@wdio/cli/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/config": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.36.0.tgz", - "integrity": "sha512-sAbqnx/G+OsrMquIncFXjM4U0/E0ULMP0jDHZND75r0e1DYYCHmyacrvIHu3Jyxinl9f6+4XQdev6vqdTqPdNg==", + "version": "8.29.3", "dev": true, + "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.36.0", - "@wdio/utils": "8.36.0", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.3", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -1304,24 +2073,22 @@ }, "node_modules/@wdio/config/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@wdio/config/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.3.10", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -1334,10 +2101,9 @@ } }, "node_modules/@wdio/config/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.3", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1349,29 +2115,27 @@ } }, "node_modules/@wdio/globals": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.36.0.tgz", - "integrity": "sha512-vqMq1hR+iF0lqMNJpk9z+QB9l/QfL1DbvOfNhPtQ13NgctfNg42ffuhEObbzTLQN0MftcnPBu6O3pai79y8bUA==", + "version": "8.29.7", "dev": true, + "license": "MIT", "engines": { "node": "^16.13 || >=18" }, "optionalDependencies": { - "expect-webdriverio": "^4.11.2", - "webdriverio": "8.36.0" + "expect-webdriverio": "^4.9.3", + "webdriverio": "8.29.7" } }, "node_modules/@wdio/local-runner": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.36.0.tgz", - "integrity": "sha512-MIzbWcXgRQGQQK4H5N39/JFoikOg5cu34l1U6rgw74D6hO79L4RwBg2Oo4TJJYgHUL/4RbVwyeLdb5WDTdluTQ==", + "version": "8.29.7", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", "@wdio/repl": "8.24.12", - "@wdio/runner": "8.36.0", - "@wdio/types": "8.36.0", + "@wdio/runner": "8.29.7", + "@wdio/types": "8.29.1", "async-exit-hook": "^2.0.1", "split2": "^4.1.0", "stream-buffers": "^3.0.2" @@ -1381,19 +2145,17 @@ } }, "node_modules/@wdio/local-runner/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/logger": { "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.28.0.tgz", - "integrity": "sha512-/s6zNCqwy1hoc+K4SJypis0Ud0dlJ+urOelJFO1x0G0rwDRWyFiUP6ijTaCcFxAm29jYEcEPWijl2xkVIHwOyA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -1405,16 +2167,15 @@ } }, "node_modules/@wdio/mocha-framework": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.36.0.tgz", - "integrity": "sha512-5wZgh1apbSKTtgGwvd//L4kxdaXe30AQ3y9YeJD+OuAJUTYFRjTpMS13bO3pX518imQeB8HCm4aUc2kxs7J81Q==", + "version": "8.29.3", "dev": true, + "license": "MIT", "dependencies": { "@types/mocha": "^10.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.36.0", - "@wdio/utils": "8.36.0", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.3", "mocha": "^10.0.0" }, "engines": { @@ -1422,25 +2183,22 @@ } }, "node_modules/@wdio/mocha-framework/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/protocols": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.32.0.tgz", - "integrity": "sha512-inLJRrtIGdTz/YPbcsvpSvPlYQFTVtF3OYBwAXhG2FiP1ZwE1CQNLP/xgRGye1ymdGCypGkexRqIx3KBGm801Q==", - "dev": true + "version": "8.29.7", + "dev": true, + "license": "MIT" }, "node_modules/@wdio/repl": { "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.24.12.tgz", - "integrity": "sha512-321F3sWafnlw93uRTSjEBVuvWCxTkWNDs7ektQS15drrroL3TMeFOynu4rDrIz0jXD9Vas0HCD2Tq/P0uxFLdw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -1449,23 +2207,21 @@ } }, "node_modules/@wdio/repl/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/reporter": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.36.0.tgz", - "integrity": "sha512-pkAxqiMC+ljmksOKlK9g6y2NRvrdQiKtxD11rsMwJ6CH4kVDSGIvENw7u3kxg7Qwp0j1rCKf5Hp51npqKQgeDQ==", + "version": "8.29.1", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.36.0", + "@wdio/types": "8.29.1", "diff": "^5.0.0", "object-inspect": "^1.12.0" }, @@ -1474,53 +2230,49 @@ } }, "node_modules/@wdio/reporter/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/runner": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.36.0.tgz", - "integrity": "sha512-M2ZDL0gmR2VvVMchi3Pkonva6Gn6eFh6IwVCpT0np7zioaqOksy3IM7Aki8kPKKS88Osip5dAfoKIrY7JpHovA==", + "version": "8.29.7", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^20.11.28", - "@wdio/config": "8.36.0", - "@wdio/globals": "8.36.0", + "@types/node": "^20.1.0", + "@wdio/config": "8.29.3", + "@wdio/globals": "8.29.7", "@wdio/logger": "8.28.0", - "@wdio/types": "8.36.0", - "@wdio/utils": "8.36.0", - "deepmerge-ts": "^5.1.0", - "expect-webdriverio": "^4.12.0", - "gaze": "^1.1.3", - "webdriver": "8.36.0", - "webdriverio": "8.36.0" + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.3", + "deepmerge-ts": "^5.0.0", + "expect-webdriverio": "^4.9.3", + "gaze": "^1.1.2", + "webdriver": "8.29.7", + "webdriverio": "8.29.7" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/runner/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/spec-reporter": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.36.0.tgz", - "integrity": "sha512-GVOiWqVYvzoAo4/4hNVxvyVWVoHyEmAywYhkykyJGL05YpO0oDOZY2kINPePEX5Z+nIsXsiKPmtsGGqWsfQwTw==", + "version": "8.29.7", "dev": true, + "license": "MIT", "dependencies": { - "@wdio/reporter": "8.36.0", - "@wdio/types": "8.36.0", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.1.2", "easy-table": "^1.2.0", "pretty-ms": "^7.0.0" @@ -1530,10 +2282,9 @@ } }, "node_modules/@wdio/types": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.36.0.tgz", - "integrity": "sha512-0hw/PaJHqDrbIMvU08w3oMDGg89udSkqWF2hFlGAjOc20quRrhn0F1L+NhFpYdezeRKz5gpgTDIqaQs9RWKq1A==", + "version": "8.29.1", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -1542,23 +2293,21 @@ } }, "node_modules/@wdio/types/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@wdio/utils": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.36.0.tgz", - "integrity": "sha512-3VAbavN206qkvm6lITtOtTgscFChax7shzqHjUNln+QWMRyELtT81iw32ux2ld+Bg3F60LAmhbGodu0lJH7k2w==", + "version": "8.29.3", "dev": true, + "license": "MIT", "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.36.0", + "@wdio/types": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -1575,10 +2324,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -1586,27 +2334,23 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true + "version": "1.11.6", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -1615,69 +2359,62 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -1685,24 +2422,22 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -1711,20 +2446,18 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -1735,9 +2468,8 @@ }, "node_modules/@webpack-cli/info": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -1748,9 +2480,8 @@ }, "node_modules/@webpack-cli/serve": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -1764,23 +2495,55 @@ } } }, + "node_modules/@whatwg-node/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", + "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.17.tgz", + "integrity": "sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==", + "dependencies": { + "@whatwg-node/node-fetch": "^0.5.7", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.10.tgz", + "integrity": "sha512-KIAHepie/T1PRkUfze4t+bPlyvpxlWiXTPtcGlbIZ0vWkBJMdRmCg4ZrJ2y4XaO1eTPo1HlWYUuj1WvoIpumqg==", + "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", + "@whatwg-node/events": "^0.1.0", + "busboy": "^1.6.0", + "fast-querystring": "^1.1.1", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -1790,15 +2553,12 @@ }, "node_modules/abstract-logging": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1808,27 +2568,24 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -1838,9 +2595,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1854,9 +2610,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -1871,9 +2626,8 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -1887,33 +2641,29 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1926,9 +2676,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -1938,217 +2687,37 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "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/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", - "dev": true, - "dependencies": { - "file-type": "^4.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/archiver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", - "dev": true, - "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils/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/archiver-utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 8" } }, - "node_modules/archiver-utils/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==", + "node_modules/arch": { + "version": "2.2.0", "dev": true, "funding": [ { @@ -2163,112 +2732,107 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/archive-type": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/archiver/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", "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" - } - ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/archiver": { + "version": "6.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "archiver-utils": "^4.0.1", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^5.0.1" + }, + "engines": { + "node": ">= 12.0.0" } }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/archiver-utils": { + "version": "4.0.1", "dev": true, + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "glob": "^8.0.0", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 12.0.0" } }, - "node_modules/archiver/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==", + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "3.6.2", "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" - } - ] + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/archiver/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/archiver/node_modules/readable-stream": { + "version": "3.6.2", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, + "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -2281,16 +2845,14 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -2302,38 +2864,15 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.flat": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2349,9 +2888,8 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2365,23 +2903,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -2392,9 +2917,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -2414,9 +2938,8 @@ }, "node_modules/ast-types": { "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -2426,43 +2949,41 @@ }, "node_modules/async": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-exit-hook": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/atomic-sleep": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "version": "1.0.6", "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2471,82 +2992,55 @@ } }, "node_modules/avvio": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", - "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", + "version": "8.2.1", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/error": "^3.3.0", "archy": "^1.0.0", "debug": "^4.0.0", - "fastq": "^1.17.1" + "fastq": "^1.6.1" } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.6.7", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "follow-redirects": "^1.15.6", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bare-events": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", - "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", - "dev": true, - "optional": true + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dependencies": { + "dequal": "^2.0.3" + } }, - "node_modules/bare-fs": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.3.tgz", - "integrity": "sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==", - "dev": true, - "optional": true, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "streamx": "^2.13.0" + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" } }, - "node_modules/bare-os": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", - "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", + "node_modules/b4a": { + "version": "1.6.4", "dev": true, - "optional": true + "license": "ISC" }, - "node_modules/bare-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.1.tgz", - "integrity": "sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==", - "dev": true, - "optional": true, - "dependencies": { - "bare-os": "^2.1.0" - } + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -2560,65 +3054,54 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.0.4", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/big-integer": { "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "dev": true, + "license": "Unlicense", "engines": { "node": ">=0.6" } }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", "dev": true, + "license": "MIT", "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" } }, "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "version": "2.2.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2627,9 +3110,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2641,15 +3123,17 @@ }, "node_modules/bluebird": { "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "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==" }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2657,9 +3141,7 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -2669,15 +3151,11 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, + "version": "4.22.3", "funding": [ { "type": "opencollective", @@ -2692,9 +3170,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -2707,9 +3186,7 @@ }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -2724,6 +3201,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -2731,9 +3209,8 @@ }, "node_modules/buffer-alloc": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, + "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -2741,63 +3218,64 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-crc32": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", - "dev": true, + "version": "0.2.13", + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": "*" } }, "node_modules/buffer-fill": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/buffers": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", "dev": true, "engines": { "node": ">=0.2.0" } }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" } }, "node_modules/cacheable-request": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "1.0.2", "get-stream": "3.0.0", @@ -2810,33 +3288,29 @@ }, "node_modules/cacheable-request/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, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/cacheable-request/node_modules/json-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cacheable-request/node_modules/keyv": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.0" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2845,7 +3319,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2862,27 +3335,21 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001609", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001609.tgz", - "integrity": "sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==", - "dev": true, + "version": "1.0.30001584", "funding": [ { "type": "opencollective", @@ -2896,25 +3363,21 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chainsaw": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", "dev": true, + "license": "MIT/X11", "dependencies": { "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" } }, "node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2924,15 +3387,55 @@ }, "node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "3.5.3", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2945,18 +3448,20 @@ "engines": { "node": ">= 8.10.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, "optionalDependencies": { "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, "node_modules/chrome-trace-event": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } @@ -2985,10 +3490,9 @@ } }, "node_modules/chromedriver/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "debug": "^4.3.4" @@ -2999,9 +3503,8 @@ }, "node_modules/chromedriver/node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "agent-base": "^7.1.0", @@ -3013,9 +3516,8 @@ }, "node_modules/chromedriver/node_modules/https-proxy-agent": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "agent-base": "^7.0.2", @@ -3025,11 +3527,19 @@ "node": ">= 14" } }, + "node_modules/chromedriver/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/chromedriver/node_modules/proxy-agent": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "agent-base": "^7.0.2", @@ -3047,9 +3557,8 @@ }, "node_modules/chromium-bidi": { "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mitt": "3.0.0" }, @@ -3059,8 +3568,6 @@ }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -3068,20 +3575,19 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/classnames": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + "license": "MIT" }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -3091,9 +3597,8 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3103,18 +3608,16 @@ }, "node_modules/cli-width": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { "node": ">= 12" } }, "node_modules/clipboardy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", "dev": true, + "license": "MIT", "dependencies": { "arch": "^2.2.0", "execa": "^5.1.1", @@ -3129,9 +3632,8 @@ }, "node_modules/clipboardy/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -3152,9 +3654,8 @@ }, "node_modules/clipboardy/node_modules/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, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3164,18 +3665,16 @@ }, "node_modules/clipboardy/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/clipboardy/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3185,18 +3684,16 @@ }, "node_modules/clipboardy/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/clipboardy/node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3206,9 +3703,8 @@ }, "node_modules/clipboardy/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3221,24 +3717,21 @@ }, "node_modules/clipboardy/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/clipboardy/node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3250,9 +3743,8 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3265,9 +3757,8 @@ }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3277,15 +3768,13 @@ }, "node_modules/cliui/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 + "dev": true, + "license": "MIT" }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3295,9 +3784,8 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3312,18 +3800,16 @@ }, "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -3335,40 +3821,59 @@ }, "node_modules/clone-response": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" } }, + "node_modules/cockatiel": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", + "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==", + "engines": { + "node": ">=16" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3378,128 +3883,53 @@ }, "node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/compare-versions": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz", - "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/compress-commons": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", + "crc32-stream": "^5.0.0", "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/compress-commons/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/compress-commons/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 12.0.0" } }, "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "3.6.2", "dev": true, + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/compress-commons/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/compress-commons/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "node": ">= 6" } }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -3509,8 +3939,6 @@ }, "node_modules/content-disposition/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": [ { @@ -3525,22 +3953,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.5.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -3562,9 +3994,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3578,9 +4009,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -3590,9 +4020,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -3602,9 +4031,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, + "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", @@ -3621,15 +4049,13 @@ }, "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -3646,9 +4072,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3658,15 +4083,13 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -3678,11 +4101,18 @@ "node": ">=10" } }, + "node_modules/cosmiconfig-toml-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-toml-loader/-/cosmiconfig-toml-loader-1.0.0.tgz", + "integrity": "sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA==", + "dependencies": { + "@iarna/toml": "^2.2.5" + } + }, "node_modules/crc-32": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, + "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" }, @@ -3691,101 +4121,42 @@ } }, "node_modules/crc32-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" + "readable-stream": "^3.4.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/crc32-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node": ">= 12.0.0" } }, "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "3.6.2", "dev": true, + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/crc32-stream/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/crc32-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "node": ">= 6" } }, "node_modules/cross-fetch": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3801,11 +4172,21 @@ } } }, + "node_modules/cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3817,15 +4198,13 @@ }, "node_modules/cross-spawn/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3837,16 +4216,15 @@ } }, "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "version": "6.10.0", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" @@ -3871,23 +4249,56 @@ } } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-shorthand-properties": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", - "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", "dev": true }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/css-value": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", "dev": true }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -3897,75 +4308,24 @@ }, "node_modules/csstype": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, + "node_modules/dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" + }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -3980,9 +4340,8 @@ }, "node_modules/decamelize": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -3992,18 +4351,16 @@ }, "node_modules/decode-uri-component": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/decompress": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, + "license": "MIT", "dependencies": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -4020,9 +4377,8 @@ }, "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, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -4032,9 +4388,8 @@ }, "node_modules/decompress-tar": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^5.2.0", "is-stream": "^1.1.0", @@ -4046,9 +4401,8 @@ }, "node_modules/decompress-tar/node_modules/bl": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -4056,27 +4410,24 @@ }, "node_modules/decompress-tar/node_modules/file-type": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/decompress-tar/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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decompress-tar/node_modules/tar-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -4092,9 +4443,8 @@ }, "node_modules/decompress-tarbz2": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, + "license": "MIT", "dependencies": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", @@ -4108,27 +4458,24 @@ }, "node_modules/decompress-tarbz2/node_modules/file-type": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/decompress-tarbz2/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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decompress-targz": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, + "license": "MIT", "dependencies": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", @@ -4140,27 +4487,24 @@ }, "node_modules/decompress-targz/node_modules/file-type": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/decompress-targz/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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decompress-unzip": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^3.8.0", "get-stream": "^2.2.0", @@ -4173,18 +4517,16 @@ }, "node_modules/decompress-unzip/node_modules/file-type": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decompress-unzip/node_modules/get-stream": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" @@ -4195,18 +4537,16 @@ }, "node_modules/decompress-unzip/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decompress/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, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -4216,51 +4556,59 @@ }, "node_modules/decompress/node_modules/make-dir/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/decompress/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/deepmerge-ts": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", - "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=16.0.0" } }, "node_modules/defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -4270,9 +4618,8 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -4281,7 +4628,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4296,9 +4642,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4313,9 +4658,8 @@ }, "node_modules/degenerator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -4327,61 +4671,59 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/devtools-protocol": { - "version": "0.0.1282316", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1282316.tgz", - "integrity": "sha512-i7eIqWdVxeXBY/M+v83yRkOV1sTHnr3XYiC0YNBivLIE6hBfE2H0c2o8VC5ynT44yjy+Ei0kLrBQFK/RUKaAHQ==", - "dev": true + "version": "0.0.1249869", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.1.0", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4391,9 +4733,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4401,23 +4742,72 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.1", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, "node_modules/download": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", - "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "dev": true, + "license": "MIT", "dependencies": { "archive-type": "^4.0.0", "content-disposition": "^0.5.2", @@ -4437,9 +4827,8 @@ }, "node_modules/download/node_modules/get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -4447,32 +4836,36 @@ "node": ">=6" } }, + "node_modules/dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } }, "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 + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/easy-table": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", - "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4482,9 +4875,8 @@ }, "node_modules/edge-paths": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", - "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", "dev": true, + "license": "MIT", "dependencies": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -4498,15 +4890,13 @@ }, "node_modules/edge-paths/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/edge-paths/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4518,13 +4908,12 @@ } }, "node_modules/edgedriver": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.3.10.tgz", - "integrity": "sha512-RFSHYMNtcF1PjaGZCA2rdQQ8hSTLPZgcYgeY1V6dC+tR4NhZXwFAku+8hCbRYh7ZlwKKrTbVu9FwknjFddIuuw==", + "version": "5.3.9", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@wdio/logger": "^8.28.0", + "@wdio/logger": "^8.16.17", "decamelize": "^6.0.0", "edge-paths": "^3.0.5", "node-fetch": "^3.3.2", @@ -4536,10 +4925,9 @@ } }, "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "version": "3.1.9", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -4551,40 +4939,34 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.736", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.736.tgz", - "integrity": "sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==", - "dev": true + "version": "1.4.656", + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "version": "5.15.0", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -4593,11 +4975,21 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/envinfo": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", - "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", + "version": "7.11.1", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -4607,65 +4999,55 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.22.3", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -4678,7 +5060,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -4688,65 +5069,45 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.15", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", + "internal-slot": "^1.0.5", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "safe-array-concat": "^1.0.1" } }, "node_modules/es-module-lexer": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", - "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", - "dev": true - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.4.1", "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } + "license": "MIT" }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -4754,18 +5115,16 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4779,25 +5138,21 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, + "version": "3.1.1", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4807,9 +5162,8 @@ }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -4827,16 +5181,15 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.56.0", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -4882,29 +5235,26 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "version": "7.33.2", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", + "resolve": "^2.0.0-next.4", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.8" }, "engines": { "node": ">=4" @@ -4915,9 +5265,8 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4927,18 +5276,16 @@ }, "node_modules/eslint-plugin-react/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -4949,18 +5296,16 @@ }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4970,9 +5315,8 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4985,9 +5329,8 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5001,9 +5344,8 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5013,15 +5355,13 @@ }, "node_modules/eslint/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 + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5035,9 +5375,8 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5047,9 +5386,8 @@ }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5059,9 +5397,8 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5071,9 +5408,8 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5088,9 +5424,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5101,9 +5436,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5113,9 +5447,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5125,45 +5458,45 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -5184,14 +5517,21 @@ }, "node_modules/exenv-es6": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", - "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true, + "engines": { + "node": ">=6" + } }, "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -5204,10 +5544,9 @@ } }, "node_modules/expect-webdriverio": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.13.0.tgz", - "integrity": "sha512-y2LF6vECifTOiOk0i0FMPWJGyntiW+eqzQWFZimu9Cae8XMUH5q4F5SzpfGCxsvmOdf3uFjlr+u9IXrQBN5o0Q==", + "version": "4.9.4", "dev": true, + "license": "MIT", "dependencies": { "@vitest/snapshot": "^1.2.2", "expect": "^29.7.0", @@ -5223,11 +5562,14 @@ "webdriverio": "^8.29.3" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "license": "Apache-2.0" + }, "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, + "license": "MIT", "dependencies": { "mime-db": "^1.28.0" }, @@ -5237,9 +5579,8 @@ }, "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, + "license": "MIT", "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" @@ -5250,9 +5591,8 @@ }, "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -5262,11 +5602,21 @@ "node": ">=4" } }, + "node_modules/extract-files": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", + "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", + "engines": { + "node": "^12.20 || >= 14.13" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, "node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -5284,9 +5634,8 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5299,33 +5648,26 @@ }, "node_modules/fast-content-type-parse": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5339,19 +5681,17 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-json-stringify": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz", - "integrity": "sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==", + "version": "5.11.1", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", + "@fastify/deepmerge": "^1.0.0", "ajv": "^8.10.0", - "ajv-formats": "^3.0.1", + "ajv-formats": "^2.1.1", "fast-deep-equal": "^3.1.3", "fast-uri": "^2.1.0", "json-schema-ref-resolver": "^1.0.1", @@ -5360,9 +5700,8 @@ }, "node_modules/fast-json-stringify/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5374,72 +5713,46 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/fast-json-stringify/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-querystring": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", - "dev": true, + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "version": "3.3.0", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/fast-uri": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", - "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastify": { - "version": "4.26.2", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz", - "integrity": "sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug==", + "version": "4.26.0", "dev": true, "funding": [ { @@ -5451,12 +5764,13 @@ "url": "https://opencollective.com/fastify" } ], + "license": "MIT", "dependencies": { "@fastify/ajv-compiler": "^3.5.0", "@fastify/error": "^3.4.0", "@fastify/fast-json-stringify-compiler": "^4.3.0", "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", + "avvio": "^8.2.1", "fast-content-type-parse": "^1.1.0", "fast-json-stringify": "^5.8.0", "find-my-way": "^8.0.0", @@ -5472,33 +5786,25 @@ }, "node_modules/fastify-plugin": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", - "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, + "version": "1.17.0", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, "funding": [ { "type": "github", @@ -5509,6 +5815,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -5519,9 +5826,8 @@ }, "node_modules/figures": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -5535,9 +5841,8 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -5547,9 +5852,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -5559,36 +5863,32 @@ }, "node_modules/file-type": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", - "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5598,18 +5898,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/filenamify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", - "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "dev": true, + "license": "MIT", "dependencies": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.0", @@ -5621,9 +5919,7 @@ }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5633,9 +5929,8 @@ }, "node_modules/find-my-way": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz", - "integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", @@ -5647,9 +5942,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5663,18 +5957,16 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -5685,15 +5977,12 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.2.9", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.5", "dev": true, "funding": [ { @@ -5701,6 +5990,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "peer": true, "engines": { "node": ">=4.0" @@ -5713,18 +6003,16 @@ }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "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, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -5738,9 +6026,8 @@ }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz", - "integrity": "sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.7", "chalk": "^4.1.2", @@ -5772,9 +6059,8 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5787,9 +6073,8 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5803,9 +6088,8 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5815,15 +6099,13 @@ }, "node_modules/fork-ts-checker-webpack-plugin/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 + "dev": true, + "license": "MIT" }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -5839,9 +6121,8 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5851,10 +6132,7 @@ }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -5866,18 +6144,15 @@ }, "node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.17" } }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -5887,18 +6162,16 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -5906,15 +6179,13 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -5926,22 +6197,17 @@ }, "node_modules/fs-monkey": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -5952,9 +6218,8 @@ }, "node_modules/fstream": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -5967,9 +6232,8 @@ }, "node_modules/fstream/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5985,11 +6249,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "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, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -5999,18 +6273,15 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6026,18 +6297,16 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gaze": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, + "license": "MIT", "dependencies": { "globule": "^1.0.0" }, @@ -6046,18 +6315,17 @@ } }, "node_modules/geckodriver": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.3.3.tgz", - "integrity": "sha512-we2c2COgxFkLVuoknJNx+ioP+7VDq0sr6SCqWHTzlA4kzIbzR0EQ1Pps34s8WrsOnQqPC8a4sZV9dRPROOrkSg==", + "version": "4.3.2", "dev": true, "hasInstallScript": true, + "license": "MPL-2.0", "dependencies": { "@wdio/logger": "^8.28.0", "decamelize": "^6.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", "node-fetch": "^3.3.2", - "tar-fs": "^3.0.5", + "tar-fs": "^3.0.4", "unzipper": "^0.10.14", "which": "^4.0.0" }, @@ -6069,10 +6337,9 @@ } }, "node_modules/geckodriver/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -6081,10 +6348,9 @@ } }, "node_modules/geckodriver/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -6094,10 +6360,9 @@ } }, "node_modules/geckodriver/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -6106,25 +6371,18 @@ "node": ">= 14" } }, - "node_modules/geckodriver/node_modules/tar-fs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", - "dev": true, - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6133,7 +6391,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -6149,10 +6406,9 @@ } }, "node_modules/get-port": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "version": "7.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -6162,9 +6418,8 @@ }, "node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -6173,14 +6428,12 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -6190,48 +6443,66 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.2", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", + "data-uri-to-buffer": "^6.0.0", "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "fs-extra": "^8.1.0" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "version": "6.0.1", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "8.1.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "0.1.2", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=14.14" + "node": ">= 4.0.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "optional": true + }, "node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6248,9 +6519,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6260,24 +6529,21 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/glob/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6287,9 +6553,8 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -6302,9 +6567,8 @@ }, "node_modules/globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -6317,9 +6581,7 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6337,9 +6599,8 @@ }, "node_modules/globule": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", "dev": true, + "license": "MIT", "dependencies": { "glob": "~7.1.1", "lodash": "^4.17.21", @@ -6351,9 +6612,8 @@ }, "node_modules/globule/node_modules/glob": { "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6371,9 +6631,8 @@ }, "node_modules/globule/node_modules/minimatch": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6383,9 +6642,7 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6395,9 +6652,8 @@ }, "node_modules/got": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^0.7.0", "cacheable-request": "^2.1.1", @@ -6423,54 +6679,219 @@ }, "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, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/got/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/graphql": { + "version": "16.8.1", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-config": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.0.3.tgz", + "integrity": "sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==", + "dependencies": { + "@graphql-tools/graphql-file-loader": "^8.0.0", + "@graphql-tools/json-file-loader": "^8.0.0", + "@graphql-tools/load": "^8.0.0", + "@graphql-tools/merge": "^9.0.0", + "@graphql-tools/url-loader": "^8.0.0", + "@graphql-tools/utils": "^10.0.0", + "cosmiconfig": "^8.1.0", + "jiti": "^1.18.2", + "minimatch": "^4.2.3", + "string-env-interpolation": "^1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "cosmiconfig-toml-loader": "^1.0.0", + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "cosmiconfig-toml-loader": { + "optional": true + } + } + }, + "node_modules/graphql-config/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/graphql-config/node_modules/minimatch": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", + "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graphql-language-service": { + "version": "5.2.0", + "resolved": "file:graphql-language-service-5.2.0.tgz", + "integrity": "sha512-6QhpKCzy6OJ87X2eD792R8nPUdhM0UHSkwt30tWGG0/snXfZHlK/h6OTgivg4cv+nFTx26zP/QjRhuUepxeZEg==", + "license": "MIT", + "dependencies": { + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.17.1" + }, + "bin": { + "graphql": "dist/temp-bin.js" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0" + } + }, + "node_modules/graphql-language-service-server": { + "version": "2.12.0", + "resolved": "file:graphql-language-service-server-2.12.0.tgz", + "integrity": "sha512-+co6wwS8JTWM3qcRWtE/frkz+Yqy8TYta86nt+zjyBaFsJGePG1GRXBaTDiyyfvLJlKc/atFSinT0VCVeLYaIg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.5", + "@graphql-tools/code-file-loader": "8.0.3", + "@vue/compiler-sfc": "^3.4.5", + "cosmiconfig-toml-loader": "^1.0.0", + "dotenv": "10.0.0", + "fast-glob": "^3.2.7", + "glob": "^7.2.0", + "graphql-config": "5.0.3", + "graphql-language-service": "file:graphql-language-service-5.2.0.tgz", + "mkdirp": "^1.0.4", + "node-abort-controller": "^3.0.1", + "node-fetch": "3.3.2", + "nullthrows": "^1.0.0", + "source-map-js": "1.0.2", + "svelte": "^4.1.1", + "svelte2tsx": "^0.7.0", + "typescript": "^5.3.3", + "vscode-jsonrpc": "^8.0.1", + "vscode-languageserver": "^8.0.1", + "vscode-languageserver-types": "^3.17.2", + "vscode-uri": "^3.0.2" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0" + } + }, + "node_modules/graphql-language-service-server/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/graphql-language-service-server/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graphql-language-service-server/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/graphql-ws": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.0.tgz", + "integrity": "sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6479,7 +6900,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -6488,10 +6908,8 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, + "version": "1.0.1", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6501,18 +6919,15 @@ }, "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, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/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, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6522,9 +6937,8 @@ }, "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, + "license": "MIT", "dependencies": { "has-symbol-support-x": "^1.4.1" }, @@ -6534,9 +6948,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -6548,10 +6961,8 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, + "version": "2.0.0", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -6561,18 +6972,16 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -6582,33 +6991,47 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/hpagent": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", - "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/http-cache-semantics": { "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -6622,9 +7045,8 @@ }, "node_modules/http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -6636,9 +7058,8 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -6649,9 +7070,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -6662,18 +7082,16 @@ }, "node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6683,9 +7101,8 @@ }, "node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -6695,9 +7112,7 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -6711,34 +7126,29 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immediate": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/immutable": { "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6750,11 +7160,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -6771,9 +7187,8 @@ }, "node_modules/import-meta-resolve": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6781,18 +7196,15 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6800,15 +7212,18 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true }, "node_modules/inquirer": { "version": "9.2.12", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", - "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", "dev": true, + "license": "MIT", "dependencies": { "@ljharb/through": "^2.3.11", "ansi-escapes": "^4.3.2", @@ -6832,9 +7247,8 @@ }, "node_modules/inquirer/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6843,12 +7257,11 @@ } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.0.6", "dev": true, + "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -6858,18 +7271,16 @@ }, "node_modules/interpret": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/into-stream": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", "dev": true, + "license": "MIT", "dependencies": { "from2": "^2.1.1", "p-is-promise": "^1.1.0" @@ -6878,42 +7289,31 @@ "node": ">=4" } }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "node_modules/ip": { + "version": "1.1.8", "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } + "license": "MIT" }, "node_modules/ip-regex": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-array-buffer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -6927,15 +7327,12 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6948,9 +7345,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -6960,9 +7356,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6972,9 +7367,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6988,9 +7382,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7000,9 +7393,8 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -7010,26 +7402,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7042,9 +7418,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -7057,18 +7432,15 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7078,18 +7450,16 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7102,9 +7472,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7114,36 +7482,29 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "version": "2.0.2", "dev": true, - "engines": { - "node": ">= 0.4" - }, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-natural-number": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "version": "2.0.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7153,18 +7514,15 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7177,36 +7535,32 @@ }, "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, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -7214,11 +7568,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7232,35 +7593,26 @@ }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "version": "2.0.2", "dev": true, - "engines": { - "node": ">= 0.4" - }, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7268,9 +7620,8 @@ }, "node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -7280,9 +7631,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7295,9 +7645,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7310,9 +7659,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -7325,9 +7673,8 @@ }, "node_modules/is-unicode-supported": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7337,27 +7684,21 @@ }, "node_modules/is-url": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "version": "2.0.1", "dev": true, - "engines": { - "node": ">= 0.4" - }, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7366,16 +7707,12 @@ } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7383,9 +7720,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -7395,9 +7731,8 @@ }, "node_modules/is2": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", - "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "ip-regex": "^4.1.0", @@ -7409,33 +7744,37 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" + } + }, "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, + "license": "MIT", "dependencies": { "has-to-string-tag-x": "^1.2.0", "is-object": "^1.0.1" @@ -7446,9 +7785,8 @@ }, "node_modules/iterator.prototype": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -7459,9 +7797,8 @@ }, "node_modules/jackspeak": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7477,9 +7814,8 @@ }, "node_modules/jake": { "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -7495,9 +7831,8 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7510,9 +7845,8 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7526,9 +7860,8 @@ }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7538,15 +7871,13 @@ }, "node_modules/jake/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 + "dev": true, + "license": "MIT" }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7556,9 +7887,8 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -7571,9 +7901,8 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7586,9 +7915,8 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7602,9 +7930,8 @@ }, "node_modules/jest-diff/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7614,15 +7941,13 @@ }, "node_modules/jest-diff/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 + "dev": true, + "license": "MIT" }, "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7632,18 +7957,16 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -7656,9 +7979,8 @@ }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7671,9 +7993,8 @@ }, "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7687,9 +8008,8 @@ }, "node_modules/jest-matcher-utils/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7699,15 +8019,13 @@ }, "node_modules/jest-matcher-utils/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 + "dev": true, + "license": "MIT" }, "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7717,9 +8035,8 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -7737,9 +8054,8 @@ }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7752,9 +8068,8 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7768,9 +8083,8 @@ }, "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7780,15 +8094,13 @@ }, "node_modules/jest-message-util/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 + "dev": true, + "license": "MIT" }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7798,9 +8110,8 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -7815,9 +8126,8 @@ }, "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7830,9 +8140,8 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7846,9 +8155,8 @@ }, "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7858,15 +8166,13 @@ }, "node_modules/jest-util/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 + "dev": true, + "license": "MIT" }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7876,9 +8182,8 @@ }, "node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -7890,23 +8195,18 @@ }, "node_modules/jiti": { "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7914,62 +8214,63 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "license": "MIT" }, "node_modules/json-schema-ref-resolver": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "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", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, + "version": "2.2.3", + "license": "MIT", "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -7979,9 +8280,8 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -7994,9 +8294,8 @@ }, "node_modules/jszip": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -8004,29 +8303,37 @@ "setimmediate": "^1.0.5" } }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ky": { "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -8036,9 +8343,8 @@ }, "node_modules/lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -8046,11 +8352,18 @@ "node": ">= 0.6.3" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8061,50 +8374,56 @@ }, "node_modules/lie": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/light-my-request": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", - "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", + "version": "5.11.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "cookie": "^0.6.0", - "process-warning": "^3.0.0", + "cookie": "^0.5.0", + "process-warning": "^2.0.0", "set-cookie-parser": "^2.4.1" } }, + "node_modules/light-my-request/node_modules/process-warning": { + "version": "2.3.2", + "dev": true, + "license": "MIT" + }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "license": "MIT" + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } }, "node_modules/listenercount": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/loader-runner": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -8114,22 +8433,31 @@ "node": ">=4.0.0" } }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/locate-app": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.2.29.tgz", - "integrity": "sha512-OwxwMkhz+EpQIWRTe3JlgMwPdoT2HCNnKno/0BdNp4pPuB7qpNmf1L8p3EEEXCUQqh/kzA/RJ3ZkOlTeaq9Wrw==", + "version": "2.2.16", "dev": true, + "license": "SEE LICENSE IN LICENSE", "dependencies": { - "n12": "1.8.32", + "n12": "1.8.19", "type-fest": "2.13.0", "userhome": "1.0.0" } }, "node_modules/locate-app/node_modules/type-fest": { "version": "2.13.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.13.0.tgz", - "integrity": "sha512-lPfAm42MxE4/456+QyIaaVBAwgpJb6xZ8PRu09utnhPdWwcyj9vgy6Sq0Z5yNbJ21EdxB5dRU/Qg8bsyAMtlcw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -8137,11 +8465,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8154,57 +8486,48 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.pickby": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.union": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.zip": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -8218,9 +8541,8 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8233,9 +8555,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8249,9 +8570,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8261,15 +8581,13 @@ }, "node_modules/log-symbols/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 + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8279,9 +8597,8 @@ }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8291,9 +8608,8 @@ }, "node_modules/loglevel": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz", - "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -8304,14 +8620,12 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -8319,29 +8633,33 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" } }, "node_modules/magic-string": { - "version": "0.30.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", - "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", - "dev": true, + "version": "0.30.8", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -8351,9 +8669,8 @@ }, "node_modules/make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -8364,18 +8681,49 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "node_modules/memfs": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, + "license": "Unlicense", "dependencies": { "fs-monkey": "^1.0.4" }, @@ -8385,24 +8733,35 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, + "node_modules/meros": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", + "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "@types/node": ">=13" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -8413,9 +8772,8 @@ }, "node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8425,18 +8783,14 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8446,9 +8800,8 @@ }, "node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8458,18 +8811,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "version": "2.8.0", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -8487,9 +8838,8 @@ }, "node_modules/mini-css-extract-plugin/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -8503,9 +8853,8 @@ }, "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -8515,15 +8864,13 @@ }, "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -8540,9 +8887,7 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8552,60 +8897,53 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, + "devOptional": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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" - }, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/mnemonist": { "version": "0.39.6", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.6.tgz", - "integrity": "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==", "dev": true, + "license": "MIT", "dependencies": { "obliterator": "^2.0.1" } }, "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "version": "10.2.0", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -8614,12 +8952,13 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "8.1.0", + "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -8634,13 +8973,16 @@ }, "engines": { "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8651,47 +8993,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/mocha/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/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -8700,9 +9005,8 @@ }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8712,24 +9016,51 @@ }, "node_modules/mocha/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 + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8737,26 +9068,31 @@ "node": ">=10" } }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/mocha/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8766,9 +9102,8 @@ }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8783,9 +9118,8 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8801,36 +9135,25 @@ }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "license": "MIT" }, "node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/n12": { - "version": "1.8.32", - "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.32.tgz", - "integrity": "sha512-nLqtUdj2XNjBCku+s60zv/RXhatbXet2SynQhjOU1QTc+bqqwjp/bEV+WVcYLxLgv7K8ji5rlNrkBhfglx3ULQ==", - "dev": true + "version": "1.8.19", + "dev": true, + "license": "SEE LICENSE IN LICENSE" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8838,44 +9161,68 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "optional": true + }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.58.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.58.0.tgz", + "integrity": "sha512-pXY1jnGf5T7b8UNzWzIqf0EkX4bx/w8N2AvwlGnk2SYYA/kzDVPaH0Dh0UG4EwxBB5eKOIZKPr8VAHSHL1DPGg==", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-abort-controller": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "optional": true }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, "funding": [ { "type": "github", @@ -8886,15 +9233,14 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -8908,17 +9254,45 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-loader": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/node-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/node-releases": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -8931,18 +9305,16 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, + "license": "MIT", "dependencies": { "prepend-http": "^2.0.0", "query-string": "^5.0.1", @@ -8953,10 +9325,9 @@ } }, "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "version": "5.2.0", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -8969,48 +9340,58 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -9025,29 +9406,26 @@ } }, "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "version": "1.1.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "version": "2.0.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -9057,31 +9435,25 @@ } }, "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.1.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -9092,33 +9464,28 @@ }, "node_modules/obliterator": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-exit-leak-free": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -9131,9 +9498,8 @@ }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -9148,9 +9514,8 @@ }, "node_modules/ora": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -9171,9 +9536,8 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9186,9 +9550,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9202,9 +9565,8 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9214,15 +9576,13 @@ }, "node_modules/ora/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 + "dev": true, + "license": "MIT" }, "node_modules/ora/node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9232,9 +9592,8 @@ }, "node_modules/ora/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9244,9 +9603,8 @@ }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9256,27 +9614,24 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-cancelable": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-event": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^2.0.1" }, @@ -9286,27 +9641,23 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-is-promise": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9319,9 +9670,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9334,9 +9684,8 @@ }, "node_modules/p-timeout": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dev": true, + "license": "MIT", "dependencies": { "p-finally": "^1.0.0" }, @@ -9346,18 +9695,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pac-proxy-agent": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", @@ -9373,10 +9720,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -9385,10 +9731,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -9398,10 +9743,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -9411,12 +9755,12 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", + "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { @@ -9425,15 +9769,12 @@ }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9443,9 +9784,7 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -9461,53 +9800,94 @@ }, "node_modules/parse-ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.10.1", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", + "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -9519,45 +9899,53 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "license": "MIT" + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } }, "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9567,27 +9955,24 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -9596,15 +9981,14 @@ } }, "node_modules/pino": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz", - "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==", + "version": "8.18.0", "dev": true, + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.1.0", + "pino-abstract-transport": "v1.1.0", "pino-std-serializers": "^6.0.0", "process-warning": "^3.0.0", "quick-format-unescaped": "^4.0.3", @@ -9619,9 +10003,8 @@ }, "node_modules/pino-abstract-transport": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" @@ -9629,8 +10012,6 @@ }, "node_modules/pino-abstract-transport/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -9646,6 +10027,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -9653,9 +10035,8 @@ }, "node_modules/pino-abstract-transport/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -9669,8 +10050,6 @@ }, "node_modules/pino-abstract-transport/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": [ { @@ -9685,28 +10064,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/pino-abstract-transport/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/pino-std-serializers": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -9716,9 +10093,8 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -9729,9 +10105,8 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -9741,9 +10116,8 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -9756,9 +10130,8 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -9766,20 +10139,8 @@ "node": ">=8" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -9794,6 +10155,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -9805,9 +10167,8 @@ }, "node_modules/postcss-loader": { "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^8.3.5", "jiti": "^1.20.0", @@ -9827,9 +10188,8 @@ }, "node_modules/postcss-loader/node_modules/cosmiconfig": { "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, + "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -9852,10 +10212,9 @@ } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "version": "3.0.0", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -9864,10 +10223,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.0.4", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -9881,10 +10239,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.1.1", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -9897,9 +10254,8 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -9911,10 +10267,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.0.15", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9925,34 +10280,120 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/postcss/node_modules/source-map-js": { + "version": "1.2.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/prettier": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, - "optional": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9965,9 +10406,8 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -9979,9 +10419,8 @@ }, "node_modules/pretty-ms": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, + "license": "MIT", "dependencies": { "parse-ms": "^2.1.0" }, @@ -9994,39 +10433,34 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/process-warning": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -10035,15 +10469,13 @@ }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -10054,9 +10486,8 @@ }, "node_modules/proxy-agent": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -10072,10 +10503,9 @@ } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -10084,10 +10514,9 @@ } }, "node_modules/proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -10097,10 +10526,9 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -10109,17 +10537,23 @@ "node": ">= 14" } }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "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 + "dev": true, + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10127,18 +10561,16 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/puppeteer-core": { "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", @@ -10161,9 +10593,8 @@ }, "node_modules/puppeteer-core/node_modules/@puppeteer/browsers": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -10189,10 +10620,9 @@ } }, "node_modules/puppeteer-core/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -10202,15 +10632,13 @@ }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/puppeteer-core/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -10220,10 +10648,9 @@ } }, "node_modules/puppeteer-core/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -10232,11 +10659,18 @@ "node": ">= 14" } }, + "node_modules/puppeteer-core/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/puppeteer-core/node_modules/proxy-agent": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -10253,9 +10687,8 @@ }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -10274,9 +10707,8 @@ }, "node_modules/puppeteer-core/node_modules/yargs": { "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -10292,24 +10724,35 @@ }, "node_modules/puppeteer-core/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/query-selector-shadow-dom": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", - "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/query-string": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, + "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -10321,9 +10764,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -10337,25 +10777,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/quick-format-unescaped": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10365,17 +10803,39 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -10385,8 +10845,7 @@ }, "node_modules/react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -10397,15 +10856,24 @@ }, "node_modules/react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } }, "node_modules/read-pkg": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^6.0.0", @@ -10420,14 +10888,13 @@ } }, "node_modules/read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "version": "10.1.0", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" }, "engines": { "node": ">=16" @@ -10438,9 +10905,8 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -10454,9 +10920,8 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -10469,9 +10934,8 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -10484,9 +10948,8 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -10499,20 +10962,18 @@ }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "version": "4.10.2", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10520,9 +10981,8 @@ }, "node_modules/read-pkg-up/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -10532,27 +10992,24 @@ }, "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-pkg/node_modules/lines-and-columns": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/read-pkg/node_modules/parse-json": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", - "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", @@ -10569,9 +11026,8 @@ }, "node_modules/read-pkg/node_modules/parse-json/node_modules/type-fest": { "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=14.16" }, @@ -10580,10 +11036,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.15.0.tgz", - "integrity": "sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==", + "version": "4.10.2", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -10591,11 +11046,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10608,27 +11067,24 @@ }, "node_modules/readdir-glob": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } }, "node_modules/readdir-glob/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10638,9 +11094,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10650,18 +11105,16 @@ }, "node_modules/real-require": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12.13.0" } }, "node_modules/rechoir": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -10671,9 +11124,8 @@ }, "node_modules/rechoir/node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -10688,9 +11140,8 @@ }, "node_modules/recursive-readdir": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^3.0.5" }, @@ -10699,16 +11150,15 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.5", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.5", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -10720,15 +11170,13 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -10737,29 +11185,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -10774,15 +11224,13 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -10790,53 +11238,38 @@ "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/responselike": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^1.0.0" } }, "node_modules/resq": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", - "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^2.0.1" } }, "node_modules/resq/node_modules/fast-deep-equal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -10847,18 +11280,16 @@ }, "node_modules/restore-cursor/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/restore-cursor/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -10871,24 +11302,20 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ret": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10896,21 +11323,18 @@ }, "node_modules/rfdc": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rgb2hex": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", - "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -10923,9 +11347,8 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10943,18 +11366,14 @@ }, "node_modules/run-async": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -10969,33 +11388,31 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safaridriver": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.2.tgz", - "integrity": "sha512-4R309+gWflJktzPXBQCobbWEHlzC4aK3a+Ov3tz2Ib2aBxiwd11phkdIBH1l0EO22x24CJMUQkpKFumRriCSRg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -11008,24 +11425,21 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, "engines": { @@ -11037,33 +11451,29 @@ }, "node_modules/safe-regex2": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", - "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", "dev": true, + "license": "MIT", "dependencies": { "ret": "~0.2.0" } }, "node_modules/safe-stable-stringify": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sass": { - "version": "1.75.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", - "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", + "version": "1.70.0", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -11078,9 +11488,8 @@ }, "node_modules/sass-loader": { "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", "dev": true, + "license": "MIT", "dependencies": { "neo-async": "^2.6.2" }, @@ -11113,19 +11522,22 @@ } } }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, "node_modules/scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -11141,15 +11553,13 @@ }, "node_modules/secure-json-parse": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/seek-bzip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.8.1" }, @@ -11160,15 +11570,12 @@ }, "node_modules/seek-bzip/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 + "dev": true, + "license": "MIT" }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, + "version": "7.5.4", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11181,9 +11588,7 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11191,11 +11596,14 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, "node_modules/serialize-error": { "version": "11.0.3", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz", - "integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^2.12.2" }, @@ -11208,9 +11616,8 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -11220,24 +11627,21 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/set-cookie-parser": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11251,15 +11655,13 @@ } }, "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", + "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "has-property-descriptors": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11267,21 +11669,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -11291,9 +11690,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -11303,9 +11701,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11314,7 +11711,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -11330,9 +11726,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -11340,46 +11735,113 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.7.1", "dev": true, + "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.0.0", + "node": ">= 10.13.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", - "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "version": "8.0.2", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.0.2", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -11388,10 +11850,9 @@ } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -11399,20 +11860,23 @@ "node": ">= 14" } }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/sonic-boom": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", - "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "version": "3.8.0", "dev": true, + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } }, "node_modules/sort-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -11422,9 +11886,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "sort-keys": "^1.0.0" }, @@ -11434,9 +11897,8 @@ }, "node_modules/sort-keys-length/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==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -11446,27 +11908,23 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, + "version": "1.0.2", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11474,56 +11932,44 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "version": "2.4.0", + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true + "version": "3.0.16", + "dev": true, + "license": "CC0-1.0" }, "node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10.x" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, "node_modules/stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -11533,67 +11979,70 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stream-buffers": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", "dev": true, + "license": "Unlicense", "engines": { "node": ">= 0.10.0" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/streamx": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", - "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "version": "2.15.7", "dev": true, + "license": "MIT", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/strict-uri-encode": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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, + "devOptional": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/string-env-interpolation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", + "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==" + }, "node_modules/string-replace-loader": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", - "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -11602,23 +12051,10 @@ "webpack": "^5" } }, - "node_modules/string-replace-loader/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/string-replace-loader/node_modules/loader-utils": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -11630,9 +12066,8 @@ }, "node_modules/string-replace-loader/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -11648,9 +12083,8 @@ }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11663,9 +12097,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, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11677,9 +12110,8 @@ }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11689,9 +12121,8 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11700,41 +12131,32 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.10", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.8", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -11744,31 +12166,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11776,9 +12193,8 @@ }, "node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11792,9 +12208,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, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11804,9 +12219,8 @@ }, "node_modules/strip-ansi/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, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11816,18 +12230,16 @@ }, "node_modules/strip-dirs": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, + "license": "MIT", "dependencies": { "is-natural-number": "^4.0.1" } }, "node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11837,9 +12249,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11849,9 +12260,8 @@ }, "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, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -11861,18 +12271,16 @@ }, "node_modules/strip-outer/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11885,9 +12293,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11895,25 +12302,67 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svelte": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.14.tgz", + "integrity": "sha512-ry3+YlWqZpHxLy45MW4MZIxNdvB+Wl7p2nnstWKbOAewaJyNJuOtivSbRChcfIej6wFBjWqyKmf/NgK1uW2JAA==", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/svelte2tsx": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.6.tgz", + "integrity": "sha512-awHvYsakyiGjRqqSOhb2F+qJ6lUT9klQe0UQofAcdHNaKKeDHA8kEZ8zYKGG3BiDPurKYMGvH5/lZ+jeIoG7yQ==", + "dependencies": { + "dedent-js": "^1.0.1", + "pascal-case": "^3.1.1" + }, + "peerDependencies": { + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", + "typescript": "^4.9.4 || ^5.0.0" + } + }, "node_modules/tabbable": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", - "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" + "license": "MIT" }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar-fs": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -11922,9 +12371,8 @@ }, "node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -11933,9 +12381,8 @@ }, "node_modules/tcp-port-used": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", - "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4.3.1", "is2": "^2.0.6" @@ -11943,9 +12390,8 @@ }, "node_modules/tcp-port-used/node_modules/debug": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -11959,10 +12405,9 @@ } }, "node_modules/terser": { - "version": "5.30.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", - "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", + "version": "5.27.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -11978,9 +12423,8 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -12012,9 +12456,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12030,45 +12473,39 @@ }, "node_modules/terser/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 + "dev": true, + "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thread-stream": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", "dev": true, + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -12078,33 +12515,39 @@ }, "node_modules/tmp-promise": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, + "license": "MIT", "dependencies": { "tmp": "^0.2.0" } }, "node_modules/tmp-promise/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.1", "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, "engines": { - "node": ">=14.14" + "node": ">=8.17.0" + } + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" } }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -12114,42 +12557,33 @@ }, "node_modules/toad-cache": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "license": "MIT" }, "node_modules/traverse": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", "dev": true, - "engines": { - "node": "*" - } + "license": "MIT/X11" }, "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, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -12159,18 +12593,16 @@ }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/ts-loader": { "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -12188,9 +12620,8 @@ }, "node_modules/ts-loader/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12203,9 +12634,8 @@ }, "node_modules/ts-loader/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12219,9 +12649,8 @@ }, "node_modules/ts-loader/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12231,24 +12660,21 @@ }, "node_modules/ts-loader/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 + "dev": true, + "license": "MIT" }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/ts-loader/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12258,14 +12684,12 @@ }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "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, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -12278,15 +12702,33 @@ }, "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 + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -12296,9 +12738,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -12307,30 +12748,27 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.2", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -12340,17 +12778,15 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -12360,30 +12796,31 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.2", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "is-typed-array": "^1.1.9" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, "node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12392,11 +12829,15 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -12409,19 +12850,22 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "version": "5.28.3", "dev": true, + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -12431,24 +12875,43 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unzipper": { "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", "dev": true, + "license": "MIT", "dependencies": { "big-integer": "^1.6.17", "binary": "~0.3.0", @@ -12464,9 +12927,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -12481,6 +12941,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -12494,18 +12955,21 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, "node_modules/url-parse-lax": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, + "license": "MIT", "dependencies": { "prepend-http": "^2.0.0" }, @@ -12515,25 +12979,26 @@ }, "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, + "license": "MIT", "engines": { "node": ">= 4" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" + }, "node_modules/use-sync-external-store": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/userhome": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.0.tgz", - "integrity": "sha512-ayFKY3H+Pwfy4W98yPdtH1VqH4psDeyW8lYYFzfecR9d6hqLpqhecktvYR3SEEXt7vG0S1JEpciI3g94pMErig==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -12541,31 +13006,106 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.3" + }, + "engines": { + "vscode": "^1.67.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageserver": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", + "dependencies": { + "vscode-languageserver-protocol": "3.17.3" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.3", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" + } + }, + "node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": { + "version": "8.1.0", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { + "version": "3.17.3", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, "node_modules/vscode-uri": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true + "license": "MIT" }, "node_modules/wait-port": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-1.1.0.tgz", - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "commander": "^9.3.0", @@ -12580,9 +13120,8 @@ }, "node_modules/wait-port/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12595,9 +13134,8 @@ }, "node_modules/wait-port/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12611,9 +13149,8 @@ }, "node_modules/wait-port/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12623,15 +13160,13 @@ }, "node_modules/wait-port/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 + "dev": true, + "license": "MIT" }, "node_modules/wait-port/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12640,10 +13175,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.0", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -12654,18 +13188,16 @@ }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/wdio-chromedriver-service": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/wdio-chromedriver-service/-/wdio-chromedriver-service-8.1.1.tgz", - "integrity": "sha512-pN3GiOkTIMnalfq4PJAHdX95pDp1orHnTY8W1fIbd6ok81ba97UjerTgS7lUDRUh1p0MAm35Ww0uc0/9wzB7SA==", "dev": true, + "license": "MIT", "dependencies": { "@wdio/logger": "^8.1.0", "fs-extra": "^11.1.0", @@ -12694,9 +13226,8 @@ }, "node_modules/wdio-chromedriver-service/node_modules/fs-extra": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -12707,20 +13238,19 @@ } }, "node_modules/wdio-vscode-service": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/wdio-vscode-service/-/wdio-vscode-service-5.2.3.tgz", - "integrity": "sha512-8CcvVKzNAch4u9y57ZDbTbCCXzNNM5iCLW7NI2KmftpJb2n0uynf+EfcSS7719nVLKbtUPQqmyDwBpBCY5yDfA==", + "version": "5.2.2", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/cors": "^8.5.0", - "@fastify/static": "^6.12.0", - "@types/ws": "^8.5.10", - "@vscode/test-electron": "^2.3.8", - "@wdio/logger": "^8.24.12", + "@fastify/cors": "^8.3.0", + "@fastify/static": "^6.10.2", + "@types/ws": "^8.5.5", + "@vscode/test-electron": "^2.3.4", + "@wdio/logger": "^8.11.0", "clipboardy": "^3.0.0", "decamelize": "6.0.0", "download": "^8.0.0", - "fastify": "^4.25.2", + "fastify": "^4.21.0", "get-port": "7.0.0", "hpagent": "^1.2.0", "slash": "^5.1.0", @@ -12728,7 +13258,7 @@ "undici": "^5.23.0", "vscode-uri": "^3.0.8", "wdio-chromedriver-service": "^8.1.1", - "ws": "^8.16.0", + "ws": "^8.13.0", "yargs-parser": "^21.1.1" }, "engines": { @@ -12747,23 +13277,10 @@ } } }, - "node_modules/wdio-vscode-service/node_modules/get-port": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.0.0.tgz", - "integrity": "sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/wdio-vscode-service/node_modules/slash": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -12773,35 +13290,31 @@ }, "node_modules/wdio-vscode-service/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, + "version": "3.3.2", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webdriver": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.36.0.tgz", - "integrity": "sha512-6fmZI1+OCGbhuGMLBLvA7m9TJvHU1Cyzxqd8rGzIyb8hocR53yh/olfOL1BPcjU1NXmKuU1BePSGF+yiKajiEA==", + "version": "8.29.7", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.36.0", + "@wdio/config": "8.29.3", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.36.0", - "@wdio/utils": "8.36.0", + "@wdio/protocols": "8.29.7", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.3", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -12813,9 +13326,8 @@ }, "node_modules/webdriver/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -12824,19 +13336,17 @@ } }, "node_modules/webdriver/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/webdriver/node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -12852,9 +13362,8 @@ }, "node_modules/webdriver/node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -12867,9 +13376,8 @@ }, "node_modules/webdriver/node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12879,9 +13387,8 @@ }, "node_modules/webdriver/node_modules/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, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12891,9 +13398,8 @@ }, "node_modules/webdriver/node_modules/got": { "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -12916,15 +13422,13 @@ }, "node_modules/webdriver/node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/webdriver/node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -12934,9 +13438,8 @@ }, "node_modules/webdriver/node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -12945,10 +13448,9 @@ } }, "node_modules/webdriver/node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "version": "8.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -12958,18 +13460,16 @@ }, "node_modules/webdriver/node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" } }, "node_modules/webdriver/node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -12981,23 +13481,22 @@ } }, "node_modules/webdriverio": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.36.0.tgz", - "integrity": "sha512-4WnEI+OxslHpfSnDXuADaR6bL1M7QxBUEF1mTN56AroOCJelyPvt94yRhszwQnLcJJB2OLn49eUz8M4yBCB51w==", + "version": "8.29.7", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.36.0", + "@wdio/config": "8.29.3", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", + "@wdio/protocols": "8.29.7", "@wdio/repl": "8.24.12", - "@wdio/types": "8.36.0", - "@wdio/utils": "8.36.0", - "archiver": "^7.0.0", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.3", + "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1282316", + "devtools-protocol": "^0.0.1249869", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", @@ -13009,7 +13508,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.36.0" + "webdriver": "8.29.7" }, "engines": { "node": "^16.13 || >=18" @@ -13024,28 +13523,25 @@ } }, "node_modules/webdriverio/node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.11.16", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/webdriverio/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/webdriverio/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -13054,10 +13550,9 @@ } }, "node_modules/webdriverio/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.3", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -13070,31 +13565,28 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "version": "5.90.1", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", + "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", + "graceful-fs": "^4.2.9", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -13102,7 +13594,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "bin": { @@ -13123,9 +13615,8 @@ }, "node_modules/webpack-cli": { "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -13168,18 +13659,16 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/webpack-merge": { "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -13191,18 +13680,16 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -13218,9 +13705,7 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -13228,9 +13713,8 @@ }, "node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -13243,9 +13727,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -13259,9 +13742,8 @@ }, "node_modules/which-builtin-type": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, + "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", @@ -13285,39 +13767,33 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.14", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -13328,21 +13804,18 @@ }, "node_modules/wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "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, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13355,9 +13828,8 @@ "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, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13372,9 +13844,8 @@ }, "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, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13387,9 +13858,8 @@ }, "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, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13399,15 +13869,13 @@ }, "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 + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13417,9 +13885,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13432,9 +13899,8 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13444,15 +13910,13 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13462,15 +13926,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "license": "ISC" }, "node_modules/ws": { "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -13487,44 +13947,59 @@ } } }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -13540,18 +14015,16 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -13564,9 +14037,8 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13576,9 +14048,8 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13588,46 +14059,39 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "node_modules/yauzl/node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dependencies": { + "buffer-crc32": "~0.2.3" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13636,86 +14100,29 @@ } }, "node_modules/zip-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" + "archiver-utils": "^4.0.1", + "compress-commons": "^5.0.1", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/zip-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node": ">= 12.0.0" } }, "node_modules/zip-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "3.6.2", "dev": true, + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/zip-stream/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/zip-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "node": ">= 6" } } } diff --git a/firebase-vscode/package.json b/firebase-vscode/package.json index ec68824cb06..9fa0cdfcf1d 100644 --- a/firebase-vscode/package.json +++ b/firebase-vscode/package.json @@ -3,7 +3,7 @@ "displayName": "firebase-vscode", "publisher": "firebase", "description": "VSCode Extension for Firebase", - "version": "0.0.24", + "version": "0.1.0", "engines": { "vscode": "^1.69.0" }, @@ -13,14 +13,39 @@ "Other" ], "activationEvents": [ - "onStartupFinished" + "onStartupFinished", + "onLanguage:graphql", + "workspaceContains:**/.graphqlrc", + "workspaceContains:**/.graphqlrc.{json,yaml,yml,js,ts,toml}", + "workspaceContains:**/graphql.config.{json,yaml,yml,js,ts,toml}" ], "main": "./dist/extension.js", "contributes": { "commands": [ + { + "command": "fdc-graphql.showOutputChannel", + "title": "Firebase GraphQL Language Server: show output channel" + }, + { + "command": "fdc-graphql.restart", + "title": "Firebase GraphQL Language Server: Restart" + }, + { + "command": "fdc.deploy", + "title": "Firebase Data Connect: Deploy", + "icon": "$(cloud-upload)" + }, { "command": "firebase.selectProject", - "title": "Switch project" + "title": "Firebase: Switch project" + }, + { + "command": "firebase.emulators.start", + "title": "Firebase: Start emulators" + }, + { + "command": "firebase.emulators.stop", + "title": "Firebase: Stop emulators" } ], "configuration": { @@ -45,9 +70,22 @@ "type": "boolean", "default": true, "description": "Enable web frameworks" + }, + "firebase.dataConnect.alwaysAllowMutationsInProduction": { + "type": "boolean", + "default": false, + "description": "Always allow mutations in production. If false (default), trying to run a mutation in production will open a confirmation modal." } } }, + "keybindings": [ + { + "command": "firebase.dataConnect.executeOperationAtCursor", + "key": "ctrl+enter", + "mac": "cmd+enter", + "when": "editorLangId == gql || editorLangId == graphql" + } + ], "viewsContainers": { "activitybar": [ { @@ -55,6 +93,13 @@ "title": "Firebase", "icon": "$(mono-firebase)" } + ], + "panel": [ + { + "id": "firebase-data-connect-execution-view", + "title": "Data Connect Execution", + "icon": "$(mono-firebase)" + } ] }, "icons": { @@ -64,6 +109,13 @@ "fontPath": "./resources/Monicons.woff", "fontCharacter": "\\F101" } + }, + "data-connect": { + "description": "Data Connect icon", + "default": { + "fontPath": "./resources/GMPIcons.woff2", + "fontCharacter": "\\gmp_nav20_dataconnect" + } } }, "views": { @@ -71,10 +123,46 @@ { "type": "webview", "id": "sidebar", - "name": "Firebase" + "name": "Config" + }, + { + "type": "webview", + "id": "data-connect", + "name": "Firebase Data Connect", + "when": "firebase-vscode.fdc.enabled" + }, + { + "id": "firebase.dataConnect.explorerView", + "name": "FDC Explorer", + "when": "firebase-vscode.fdc.enabled" + } + ], + "firebase-data-connect-execution-view": [ + { + "type": "webview", + "id": "data-connect-execution-configuration", + "name": "Configuration", + "when": "firebase-vscode.fdc.enabled" + }, + { + "id": "data-connect-execution-history", + "name": "History", + "when": "firebase-vscode.fdc.enabled" + }, + { + "type": "webview", + "id": "data-connect-execution-results", + "name": "Results", + "when": "firebase-vscode.fdc.enabled" } ] }, + "viewsWelcome": [ + { + "view": "firebase.dataConnect.explorerView", + "contents": "Start the emulator in a Data Connect project to view your schema." + } + ], "jsonValidation": [ { "fileMatch": "firebase.json", @@ -85,6 +173,14 @@ { "fileMatch": "extension.yaml", "url": "https://raw.githubusercontent.com/firebase/firebase-tools/master/schema/extension-yaml.json" + }, + { + "fileMatch": "dataconnect.yaml", + "url": "./schema/dataconnect-yaml.json" + }, + { + "fileMatch": "connector.yaml", + "url": "./schema/connector-yaml.json" } ] }, @@ -105,15 +201,25 @@ "test": "npm run test:unit && npm run test:e2e", "pretest:unit": "npm run test-compile && npm run lint && tsc -p src/test/tsconfig.test.json", "test:unit": "node ./dist/test/firebase-vscode/src/test/runTest.js", - "test:e2e": "TS_NODE_PROJECT=\"./src/test/tsconfig.test.json\" wdio run ./src/test/wdio.conf.ts" + "test:e2e": "npm run test:e2e:empty && npm run test:e2e:fishfood", + "test:e2e:empty": "TS_NODE_PROJECT=\"./src/test/tsconfig.test.json\" TEST=true wdio run ./src/test/empty_wdio.conf.ts", + "test:e2e:fishfood": "TS_NODE_PROJECT=\"./src/test/tsconfig.test.json\" TEST=true wdio run ./src/test/fishfood_wdio.conf.ts", + "format": "npx prettier . -w" }, "dependencies": { - "@preact/signals-react": "^1.3.6", + "@preact/signals-core": "^1.4.0", + "@preact/signals-react": "1.3.6", "@vscode/codicons": "0.0.30", + "@vscode/vsce": "^2.25.0", "@vscode/webview-ui-toolkit": "^1.2.1", "classnames": "^2.3.2", + "exponential-backoff": "3.1.1", + "graphql-language-service": "file:graphql-language-service-5.2.0.tgz", + "graphql-language-service-server": "file:graphql-language-service-server-2.12.0.tgz", + "js-yaml": "^4.1.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "vscode-languageclient": "8.1.0" }, "devDependencies": { "@teamsupercell/typings-for-css-modules-loader": "^2.5.1", @@ -136,9 +242,12 @@ "eslint-plugin-react": "^7.32.2", "fork-ts-checker-webpack-plugin": "^7.3.0", "glob": "^8.0.3", + "graphql": "^16.7.1", "mini-css-extract-plugin": "^2.6.0", "mocha": "^10.1.0", + "node-loader": "2.0.0", "postcss-loader": "^7.0.0", + "prettier": "^3.1.1", "sass": "^1.52.0", "sass-loader": "^13.0.0", "string-replace-loader": "^3.1.0", diff --git a/firebase-vscode/resources/GMPIcons.woff2 b/firebase-vscode/resources/GMPIcons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..55a7fb94f48979ed5d56c42d0314c17ce1c4b49b GIT binary patch literal 8384 zcmV;xAV1%CPew8T0RR9103g5s5C8xG07?7+03cxi0RR9100000000000000000000 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 W?UV3{neI%!&fl}dVgJ|8k^%tJS|zUl literal 0 HcmV?d00001 diff --git a/firebase-vscode/scripts/swap-pkg.js b/firebase-vscode/scripts/swap-pkg.js index 92f68fce843..8a2ad521664 100644 --- a/firebase-vscode/scripts/swap-pkg.js +++ b/firebase-vscode/scripts/swap-pkg.js @@ -22,18 +22,17 @@ if (target === "vsce") { console.log( "Removing google.monospace extensionDependency for VSCE packaging." ); - pkg.contributes.configuration.properties['firebase.debug'].default = false; - pkg.contributes.configuration.properties['firebase.debugLogPath'].default = ""; - console.log( - "Setting default debug log settings to off for VSCE packaging." - ); + pkg.contributes.configuration.properties["firebase.debug"].default = false; + pkg.contributes.configuration.properties["firebase.debugLogPath"].default = + ""; + console.log("Setting default debug log settings to off for VSCE packaging."); } else if (target === "monospace") { pkg.extensionDependencies = ["google.monospace"]; console.log( "Adding google.monospace extensionDependency for Monospace packaging." ); - pkg.contributes.configuration.properties['firebase.debug'].default = true; - pkg.contributes.configuration.properties['firebase.debugLogPath'].default = + pkg.contributes.configuration.properties["firebase.debug"].default = true; + pkg.contributes.configuration.properties["firebase.debugLogPath"].default = "/tmp/firebase-plugin.log"; console.log( "Setting default debug log settings to on for Monospace packaging." diff --git a/firebase-vscode/src/auth/service.ts b/firebase-vscode/src/auth/service.ts new file mode 100644 index 00000000000..7d1b6525608 --- /dev/null +++ b/firebase-vscode/src/auth/service.ts @@ -0,0 +1,23 @@ +import { Disposable } from "vscode"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { UserMock } from "../../common/messaging/protocol"; + +export class AuthService implements Disposable { + constructor(readonly broker: ExtensionBrokerImpl) { + this.disposable.push({ + dispose: broker.on( + "notifyAuthUserMockChange", + (userMock) => (this.userMock = userMock) + ), + }); + } + + userMock: UserMock | undefined; + disposable: Disposable[] = []; + + dispose() { + for (const disposable of this.disposable) { + disposable.dispose(); + } + } +} diff --git a/firebase-vscode/src/cli.ts b/firebase-vscode/src/cli.ts index e0d72aa4a81..3a008fed6cc 100644 --- a/firebase-vscode/src/cli.ts +++ b/firebase-vscode/src/cli.ts @@ -29,10 +29,15 @@ import { cleanShutdown as stopAllEmulators, } from "../../src/emulator/controller"; import { EmulatorRegistry } from "../../src/emulator/registry"; -import { EmulatorInfo, Emulators } from "../../src/emulator/types"; +import { + DownloadableEmulatorDetails, + EmulatorInfo, + DownloadableEmulators, + Emulators, +} from "../../src/emulator/types"; import * as commandUtils from "../../src/emulator/commandUtils"; import { currentUser } from "./core/user"; - +export { Emulators }; /** * Try to get a service account by calling requireAuth() without * providing any account info. @@ -258,7 +263,10 @@ export async function initHosting(options: { useWebFrameworks: false, }; } - const commandOptions = await getCommandOptions(undefined, currentOptions.value); + const commandOptions = await getCommandOptions( + undefined, + currentOptions.value + ); const inquirerOptions = { ...commandOptions, ...options, @@ -333,12 +341,18 @@ export async function deployToHosting( export async function emulatorsStart( emulatorUiSelections: EmulatorUiSelections ) { + const only = + emulatorUiSelections.mode === "hosting" + ? "hosting" + : emulatorUiSelections.mode === "dataconnect" + ? `${Emulators.DATACONNECT},${Emulators.AUTH}` + : ""; const commandOptions = await getCommandOptions(undefined, { ...currentOptions.value, project: emulatorUiSelections.projectId, exportOnExit: emulatorUiSelections.exportStateOnExit, import: emulatorUiSelections.importStateFolderPath, - only: emulatorUiSelections.mode === "hosting" ? "hosting" : "", + only, }); // Adjusts some options, export on exit can be a boolean or a path. commandUtils.setExportOnExitOptions( @@ -359,3 +373,9 @@ export function getEmulatorUiUrl(): string | undefined { const url: URL = EmulatorRegistry.url(Emulators.UI); return url.hostname === "unknown" ? undefined : url.toString(); } + +export function getEmulatorDetails( + emulator: DownloadableEmulators +): DownloadableEmulatorDetails { + return EmulatorRegistry.getDetails(emulator); +} diff --git a/firebase-vscode/src/core/config.ts b/firebase-vscode/src/core/config.ts index 2bad23db56a..a1b543ab9d7 100644 --- a/firebase-vscode/src/core/config.ts +++ b/firebase-vscode/src/core/config.ts @@ -8,9 +8,10 @@ import { RC, RCData } from "../../../src/rc"; import { Config } from "../../../src/config"; import { globalSignal } from "../utils/globals"; import { workspace } from "../utils/test_hooks"; +import { ResolvedDataConnectConfigs } from "../data-connect/config"; import { ValueOrError } from "../../common/messaging/protocol"; import { firstWhereDefined, onChange } from "../utils/signal"; -import { Result, ResultError } from "../result"; +import { Result, ResultError, ResultValue } from "../result"; import { FirebaseConfig } from "../firebaseConfig"; import { effect } from "@preact/signals-react"; @@ -25,9 +26,13 @@ import { effect } from "@preact/signals-react"; * and also await for configs to be loaded (thanks to the {@link firstWhereDefined} util) */ export const firebaseRC = globalSignal | undefined>( - undefined, + undefined ); +export const dataConnectConfigs = globalSignal< + ResolvedDataConnectConfigs | undefined +>(undefined); + /** * The firebase.json configs. * @@ -47,7 +52,7 @@ export const firebaseConfig = globalSignal< */ export async function updateFirebaseRCProject( alias: string, - projectId: string, + projectId: string ) { const rc = firebaseRC.value.tryReadValue ?? @@ -73,7 +78,7 @@ function notifyFirebaseConfig(broker: ExtensionBrokerImpl) { ValueOrError | undefined >( (value) => ({ value: value?.data, error: undefined }), - (error) => ({ value: undefined, error: `${error}` }), + (error) => ({ value: undefined, error: `${error}` }) ), firebaseRC: firebaseRC.value?.switchCase< ValueOrError | undefined @@ -82,7 +87,7 @@ function notifyFirebaseConfig(broker: ExtensionBrokerImpl) { value: value?.data, error: undefined, }), - (error) => ({ value: undefined, error: `${error}` }), + (error) => ({ value: undefined, error: `${error}` }) ), }); } @@ -90,7 +95,7 @@ function notifyFirebaseConfig(broker: ExtensionBrokerImpl) { function registerRc(broker: ExtensionBrokerImpl): Disposable { firebaseRC.value = _readRC(); const rcRemoveListener = onChange(firebaseRC, () => - notifyFirebaseConfig(broker), + notifyFirebaseConfig(broker) ); const showToastOnError = effect(() => { @@ -103,12 +108,13 @@ function registerRc(broker: ExtensionBrokerImpl): Disposable { const rcWatcher = _createWatcher(".firebaserc"); rcWatcher?.onDidChange(() => (firebaseRC.value = _readRC())); rcWatcher?.onDidCreate(() => (firebaseRC.value = _readRC())); + // TODO handle deletion of .firebaserc/.firebase.json/firemat.yaml rcWatcher?.onDidDelete(() => (firebaseRC.value = undefined)); return Disposable.from( { dispose: rcRemoveListener }, { dispose: showToastOnError }, - { dispose: () => rcWatcher?.dispose() }, + { dispose: () => rcWatcher?.dispose() } ); } @@ -116,31 +122,31 @@ function registerFirebaseConfig(broker: ExtensionBrokerImpl): Disposable { firebaseConfig.value = _readFirebaseConfig(); const firebaseConfigRemoveListener = onChange(firebaseConfig, () => - notifyFirebaseConfig(broker), + notifyFirebaseConfig(broker) ); const showToastOnError = effect(() => { const config = firebaseConfig.value; if (config instanceof ResultError) { vscode.window.showErrorMessage( - `Error reading firebase.json:\n${config.error}`, + `Error reading firebase.json:\n${config.error}` ); } }); const configWatcher = _createWatcher("firebase.json"); configWatcher?.onDidChange( - () => (firebaseConfig.value = _readFirebaseConfig()), + () => (firebaseConfig.value = _readFirebaseConfig()) ); configWatcher?.onDidCreate( - () => (firebaseConfig.value = _readFirebaseConfig()), + () => (firebaseConfig.value = _readFirebaseConfig()) ); configWatcher?.onDidDelete(() => (firebaseConfig.value = undefined)); return Disposable.from( { dispose: firebaseConfigRemoveListener }, { dispose: showToastOnError }, - { dispose: () => configWatcher?.dispose() }, + { dispose: () => configWatcher?.dispose() } ); } @@ -215,7 +221,7 @@ export function _createWatcher(file: string): FileSystemWatcher | undefined { return workspace.value?.createFileSystemWatcher( // Using RelativePattern enables tests to use watchers too. - new vscode.RelativePattern(vscode.Uri.file(currentOptions.value.cwd), file), + new vscode.RelativePattern(vscode.Uri.file(currentOptions.value.cwd), file) ); } diff --git a/firebase-vscode/src/core/emulators.ts b/firebase-vscode/src/core/emulators.ts index 0fb445963bf..4688f83fe76 100644 --- a/firebase-vscode/src/core/emulators.ts +++ b/firebase-vscode/src/core/emulators.ts @@ -4,12 +4,172 @@ import { getEmulatorUiUrl, listRunningEmulators, stopEmulators, + getEmulatorDetails, + Emulators, } from "../cli"; import { ExtensionBrokerImpl } from "../extension-broker"; +import { computed, effect, signal } from "@preact/signals-core"; +import { + DEFAULT_EMULATOR_UI_SELECTIONS, + ExtensionToWebviewParamsMap, +} from "../../common/messaging/protocol"; +import { firebaseRC } from "./config"; +import { EmulatorUiSelections } from "../messaging/types"; + +export class EmulatorsController implements Disposable { + constructor(private broker: ExtensionBrokerImpl) { + this.subscriptions.push( + broker.on("getEmulatorUiSelections", () => + this.notifyUISelectionChangedListeners() + ) + ); + // Notify the UI of the emulator selections changes + this.subscriptions.push( + effect(() => { + // Listen for changes. + this.uiSelections.value; + + // TODO(christhompson): Save UI selections in the current workspace. + // Requires context object. + this.notifyUISelectionChangedListeners(); + }) + ); + + this.subscriptions.push( + broker.on("getEmulatorInfos", () => this.notifyEmulatorStateChanged()) + ); + this.subscriptions.push( + effect(() => { + // Listen for changes. + this.emulators.value; + + this.notifyEmulatorStateChanged(); + }) + ); + + this.subscriptions.push( + broker.on("updateEmulatorUiSelections", (uiSelections) => { + this.uiSelections.value = { + ...this.uiSelections.peek(), + ...uiSelections, + }; + }) + ); + + this.subscriptions.push( + broker.on("selectEmulatorImportFolder", async () => { + const options: vscode.OpenDialogOptions = { + canSelectMany: false, + openLabel: `Pick an import folder`, + title: `Pick an import folder`, + canSelectFiles: false, + canSelectFolders: true, + }; + const fileUri = await vscode.window.showOpenDialog(options); + // Update the UI of the selection + if (!fileUri || fileUri.length < 1) { + vscode.window.showErrorMessage("Invalid import folder selected."); + return; + } + broker.send("notifyEmulatorImportFolder", { + folder: fileUri[0].fsPath, + }); + }) + ); + + this.subscriptions.push( + broker.on("launchEmulators", this.startEmulators.bind(this)) + ); + this.subscriptions.push( + broker.on("stopEmulators", this.stopEmulators.bind(this)) + ); + + this.subscriptions.push( + effect(() => { + const projectId = firebaseRC.value?.tryReadValue?.projects?.default; + this.uiSelections.value = { + ...this.uiSelections.peek(), + projectId: this.getProjectIdForMode( + projectId, + this.uiSelections.peek().mode + ), + }; + }) + ); + } + + private readonly startCommand = vscode.commands.registerCommand( + "firebase.emulators.start", + this.startEmulators.bind(this) + ); + + private readonly stopCommand = vscode.commands.registerCommand( + "firebase.emulators.stop", + this.stopEmulators.bind(this) + ); + + readonly outputChannel = + vscode.window.createOutputChannel("Firebase Emulators"); + + // TODO(christhompson): Load UI selections from the current workspace. + // Requires context object. + readonly uiSelections = signal(DEFAULT_EMULATOR_UI_SELECTIONS); + + readonly emulatorStates = computed(() => { + if (!this.areEmulatorsRunning.value) { + return undefined; + } -export function registerEmulators(broker: ExtensionBrokerImpl): Disposable { - broker.on("launchEmulators", async ({ emulatorUiSelections }) => { - vscode.window.withProgress( + // TODO(rrousselGit) handle cases where one emulator is running, + // and a new one is started. + return listRunningEmulators(); + }); + + readonly emulators = signal< + ExtensionToWebviewParamsMap["notifyEmulatorStateChanged"] + >({ + status: "stopped", + infos: undefined, + }); + + readonly areEmulatorsRunning = computed(() => { + return this.emulators.value.status === "running"; + }); + + private readonly subscriptions: (() => void)[] = []; + + /** + * Formats a project ID with a demo prefix if we're in offline mode, or uses the + * regular ID if we're in hosting only mode. + */ + private getProjectIdForMode( + projectId: string | undefined, + mode: EmulatorUiSelections["mode"] + ): string { + if (!projectId) { + return "demo-something"; + } + if (mode === "hosting" || mode === "dataconnect") { + return projectId; + } + return "demo-" + projectId; + } + + notifyUISelectionChangedListeners() { + this.broker.send( + "notifyEmulatorUiSelectionsChanged", + this.uiSelections.value + ); + } + + notifyEmulatorStateChanged() { + this.broker.send("notifyEmulatorStateChanged", this.emulators.value); + } + + async startEmulators() { + const uiSelections = this.uiSelections.value; + + return vscode.window.withProgress( { location: vscode.ProgressLocation.Window, cancellable: false, @@ -18,16 +178,53 @@ export function registerEmulators(broker: ExtensionBrokerImpl): Disposable { async (progress) => { progress.report({ increment: 0 }); try { - await emulatorsStart(emulatorUiSelections); - broker.send("notifyRunningEmulatorInfo", { - uiUrl: getEmulatorUiUrl(), - displayInfo: listRunningEmulators(), - }); + this.emulators.value = { + status: "starting", + infos: this.emulators.value.infos, + }; + await emulatorsStart(uiSelections); + this.emulators.value = { + status: "running", + infos: { + uiUrl: getEmulatorUiUrl(), + displayInfo: listRunningEmulators(), + }, + }; + vscode.window.showInformationMessage( "Firebase Extension: Emulators started successfully" ); + + // data connect specifics; including temp logging implementation + if ( + listRunningEmulators().filter((emulatorInfos) => { + emulatorInfos.name === Emulators.DATACONNECT; + }) + ) { + const dataConnectEmulatorDetails = getEmulatorDetails( + Emulators.DATACONNECT + ); + + dataConnectEmulatorDetails.instance.stdout?.on("data", (data) => { + this.outputChannel.appendLine("DEBUG: " + data.toString()); + }); + dataConnectEmulatorDetails.instance.stderr?.on("data", (data) => { + if (data.toString().includes("Finished reloading")) { + vscode.commands.executeCommand("fdc-graphql.restart"); + vscode.commands.executeCommand( + "firebase.dataConnect.executeIntrospection" + ); + } else { + this.outputChannel.appendLine("ERROR: " + data.toString()); + } + }); + } } catch (e) { - broker.send("notifyEmulatorStartFailed"); + this.emulators.value = { + status: "stopped", + infos: undefined, + }; + vscode.window.showErrorMessage( "Firebase Extension: Emulators start failed - " + e ); @@ -35,10 +232,10 @@ export function registerEmulators(broker: ExtensionBrokerImpl): Disposable { progress.report({ increment: 100 }); } ); - }); + } - broker.on("stopEmulators", async () => { - vscode.window.withProgress( + async stopEmulators() { + return vscode.window.withProgress( { location: vscode.ProgressLocation.Window, cancellable: false, @@ -47,8 +244,16 @@ export function registerEmulators(broker: ExtensionBrokerImpl): Disposable { async (progress) => { progress.report({ increment: 0 }); + this.emulators.value = { + status: "stopping", + infos: this.emulators.value.infos, + }; await stopEmulators(); - broker.send("notifyEmulatorsStopped"); + this.emulators.value = { + status: "stopped", + infos: undefined, + }; + vscode.window.showInformationMessage( "Firebase Extension: Emulators stopped successfully" ); @@ -56,28 +261,12 @@ export function registerEmulators(broker: ExtensionBrokerImpl): Disposable { progress.report({ increment: 100 }); } ); - }); - - broker.on("selectEmulatorImportFolder", async () => { - const options: vscode.OpenDialogOptions = { - canSelectMany: false, - openLabel: `Pick an import folder`, - title: `Pick an import folder`, - canSelectFiles: false, - canSelectFolders: true, - }; - const fileUri = await vscode.window.showOpenDialog(options); - // Update the UI of the selection - if (!fileUri || fileUri.length < 1) { - vscode.window.showErrorMessage("Invalid import folder selected."); - return; - } - broker.send("notifyEmulatorImportFolder", { folder: fileUri[0].fsPath }); - }); + } - return { - dispose: async () => { - await stopEmulators(); - }, - }; + dispose(): void { + this.stopEmulators(); + this.subscriptions.forEach((subscription) => subscription()); + this.startCommand.dispose(); + this.stopCommand.dispose(); + } } diff --git a/firebase-vscode/src/core/index.ts b/firebase-vscode/src/core/index.ts index 9e34dbf6b4d..c1384f295c7 100644 --- a/firebase-vscode/src/core/index.ts +++ b/firebase-vscode/src/core/index.ts @@ -1,7 +1,7 @@ import vscode, { Disposable, ExtensionContext } from "vscode"; import { ExtensionBrokerImpl } from "../extension-broker"; import { registerConfig } from "./config"; -import { registerEmulators } from "./emulators"; +import { EmulatorsController } from "./emulators"; import { registerEnv } from "./env"; import { pluginLogger } from "../logger-wrapper"; import { getSettings } from "../utils/settings"; @@ -11,13 +11,13 @@ import { registerProject } from "./project"; import { registerQuickstart } from "./quickstart"; import { registerOptions } from "../options"; -export function registerCore({ +export async function registerCore({ broker, context, }: { broker: ExtensionBrokerImpl; context: ExtensionContext; -}): Disposable { +}): Promise<[EmulatorsController, vscode.Disposable]> { const settings = getSettings(); if (settings.npmPath) { @@ -52,17 +52,21 @@ export function registerCore({ ); }); - return Disposable.from( - registerOptions(context), - registerConfig(broker), - registerEmulators(broker), - registerEnv(broker), - registerUser(broker), - registerProject(broker), - registerQuickstart(broker), - { dispose: sub1 }, - { dispose: sub2 }, - { dispose: sub3 }, - { dispose: sub4 }, - ); + const emulatorsController = new EmulatorsController(broker); + return [ + emulatorsController, + Disposable.from( + emulatorsController, + registerOptions(context), + registerConfig(broker), + registerEnv(broker), + registerUser(broker), + registerProject(broker), + registerQuickstart(broker), + { dispose: sub1 }, + { dispose: sub2 }, + { dispose: sub3 }, + { dispose: sub4 }, + ), + ]; } diff --git a/firebase-vscode/src/core/project.ts b/firebase-vscode/src/core/project.ts index 31f2596f942..d14c5fe7294 100644 --- a/firebase-vscode/src/core/project.ts +++ b/firebase-vscode/src/core/project.ts @@ -13,7 +13,7 @@ import { firstWhereDefined } from "../utils/signal"; /** Available projects */ export const projects = globalSignal>( - {}, + {} ); /** Currently selected project ID */ @@ -22,7 +22,7 @@ export const currentProjectId = globalSignal(""); const userScopedProjects = computed( () => { return projects.value[currentUser.value?.email ?? ""]; - }, + } ); /** Gets the currently selected project, fallback to first default project in RC file */ @@ -41,7 +41,7 @@ export const currentProject = computed( } return userScopedProjects.value?.find((p) => p.projectId === wantProjectId); - }, + } ); export function registerProject(broker: ExtensionBrokerImpl): Disposable { @@ -90,7 +90,7 @@ export function registerProject(broker: ExtensionBrokerImpl): Disposable { if (process.env.MONOSPACE_ENV) { pluginLogger.debug( "selectProject: found MONOSPACE_ENV, " + - "prompting user using external flow", + "prompting user using external flow" ); /** * Monospace case: use Monospace flow @@ -124,11 +124,11 @@ export function registerProject(broker: ExtensionBrokerImpl): Disposable { vscode.window.showErrorMessage(e.message); } } - }, + } ); const sub6 = broker.on("selectProject", () => - vscode.commands.executeCommand("firebase.selectProject"), + vscode.commands.executeCommand("firebase.selectProject") ); return vscode.Disposable.from( @@ -138,7 +138,7 @@ export function registerProject(broker: ExtensionBrokerImpl): Disposable { { dispose: sub3 }, { dispose: sub4 }, { dispose: sub5 }, - { dispose: sub6 }, + { dispose: sub6 } ); } @@ -149,7 +149,7 @@ export function registerProject(broker: ExtensionBrokerImpl): Disposable { */ export async function _promptUserForProject( projects: Thenable, - token?: vscode.CancellationToken, + token?: vscode.CancellationToken ): Promise { const items = projects.then((projects) => { return projects.map((p) => ({ diff --git a/firebase-vscode/src/data-connect/ad-hoc-mutations.ts b/firebase-vscode/src/data-connect/ad-hoc-mutations.ts new file mode 100644 index 00000000000..dcb333590fc --- /dev/null +++ b/firebase-vscode/src/data-connect/ad-hoc-mutations.ts @@ -0,0 +1,102 @@ +import vscode, { Disposable, ExtensionContext } from "vscode"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { ObjectTypeDefinitionNode } from "graphql"; +import { checkIfFileExists } from "./file-utils"; + +export function registerAdHoc( + context: ExtensionContext, + broker: ExtensionBrokerImpl +): Disposable { + const pathSuffix = "_insert.gql"; + const defaultScalarValues = { + Any: "{}", + AuthUID: '""', + Boolean: "false", + Date: `"${new Date().toISOString().substring(0, 10)}"`, + Float: "0", + ID: '""', + Int: "0", + Int64: "0", + String: '""', + Timestamp: `"${new Date().toISOString()}"`, + Vector: "[]", + }; + + function isDataConnectScalarType(fieldType: string): boolean { + return fieldType in defaultScalarValues; + } + /** + * Creates a playground file with an ad-hoc mutation + * File will be created (unsaved) in operations/ folder, with an auto-generated named based on the schema type + * Mutation will be generated with all + * */ + async function schemaAddData( + ast: ObjectTypeDefinitionNode, + { documentPath, position } + ) { + // generate content for the file + const preamble = + "# This is a file for you to write an un-named mutation. \n# Only one un-named mutation is allowed per file."; + const adhocMutation = generateMutation(ast); + const content = [preamble, adhocMutation].join("\n"); + + const basePath = vscode.workspace.rootPath + "/dataconnect/"; + const filePath = vscode.Uri.file(basePath + ast.name.value + pathSuffix); + const doesFileExist = await checkIfFileExists(filePath); + + if (!doesFileExist) { + // opens unsaved text document with name "[mutationName]_insert.gql" + + vscode.workspace + .openTextDocument(filePath.with({ scheme: "untitled" })) + .then((doc) => { + vscode.window.showTextDocument(doc).then((openDoc) => { + openDoc.edit((edit) => { + edit.insert(new vscode.Position(0, 0), content); + }); + }); + }); + } else { + // Opens existing text document + vscode.workspace.openTextDocument(filePath).then((doc) => { + vscode.window.showTextDocument(doc); + }); + } + } + + function generateMutation(ast: ObjectTypeDefinitionNode): string { + const name = + ast.name.value.charAt(0).toLowerCase() + ast.name.value.slice(1); + const functionSpacing = "\t"; + const fieldSpacing = "\t\t"; + const mutation = []; + + mutation.push("mutation {"); // mutation header + mutation.push(`${functionSpacing}${name}_insert(data: {`); // insert function + for (const field of ast.fields) { + // necessary to avoid type error + const fieldType: any = field.type; + let fieldTypeName: string = fieldType.type.name.value; + let fieldName: string = field.name.value; + let defaultValue = defaultScalarValues[fieldTypeName] as string; + + if (!isDataConnectScalarType(fieldTypeName)) { + fieldTypeName += "Id"; + fieldName += "Id"; + defaultValue = '""'; + } + mutation.push( + `${fieldSpacing}${fieldName}: ${defaultValue} # ${fieldTypeName}` + ); // field name + temp value + comment + } + mutation.push(`${functionSpacing}})`, "}"); // closing braces/paren + return mutation.join("\n"); + } + + return Disposable.from( + vscode.commands.registerCommand( + "firebase.dataConnect.schemaAddData", + schemaAddData + ) + ); +} diff --git a/firebase-vscode/src/data-connect/code-lens-provider.ts b/firebase-vscode/src/data-connect/code-lens-provider.ts new file mode 100644 index 00000000000..894295990bb --- /dev/null +++ b/firebase-vscode/src/data-connect/code-lens-provider.ts @@ -0,0 +1,162 @@ +import * as vscode from "vscode"; +import { Kind, parse } from "graphql"; +import { OperationLocation } from "./types"; +import { Disposable } from "vscode"; + +import { Signal } from "@preact/signals-core"; +import { dataConnectConfigs, firebaseRC } from "./config"; +import { InstanceType } from "./emulators-status"; +import { EmulatorsController } from "../core/emulators"; + +abstract class ComputedCodeLensProvider implements vscode.CodeLensProvider { + private readonly _onChangeCodeLensesEmitter = new vscode.EventEmitter(); + onDidChangeCodeLenses = this._onChangeCodeLensesEmitter.event; + + private readonly subscriptions: Map, Disposable> = new Map(); + + watch(signal: Signal): T { + if (!this.subscriptions.has(signal)) { + let initialFire = true; + const disposable = signal.subscribe(() => { + // Signals notify their listeners immediately, even if no change were detected. + // This is undesired here as such notification would be picked up by vscode, + // triggering an infinite reload loop of the codelenses. + // We therefore skip this notification and only keep actual "change" notifications + if (initialFire) { + initialFire = false; + return; + } + + this._onChangeCodeLensesEmitter.fire(); + }); + + this.subscriptions.set(signal, { dispose: disposable }); + } + + return signal.peek(); + } + + dispose() { + for (const disposable of this.subscriptions.values()) { + disposable.dispose(); + } + this.subscriptions.clear(); + } + + abstract provideCodeLenses( + document: vscode.TextDocument, + token: vscode.CancellationToken + ): vscode.CodeLens[]; +} + +/** + * CodeLensProvider provides codelens for actions in graphql files. + */ +export class OperationCodeLensProvider extends ComputedCodeLensProvider { + constructor(readonly emulatorsController: EmulatorsController) { + super(); + } + + provideCodeLenses( + document: vscode.TextDocument, + token: vscode.CancellationToken + ): vscode.CodeLens[] { + // Wait for configs to be loaded and emulator to be running + const fdcConfigs = this.watch(dataConnectConfigs)?.tryReadValue; + const rc = this.watch(firebaseRC)?.tryReadValue; + if (!fdcConfigs || !rc) { + return []; + } + + const codeLenses: vscode.CodeLens[] = []; + + const documentText = document.getText(); + // TODO: replace w/ online-parser to work with malformed documents + const documentNode = parse(documentText); + + for (let i = 0; i < documentNode.definitions.length; i++) { + const x = documentNode.definitions[i]; + if (x.kind === Kind.OPERATION_DEFINITION && x.loc) { + const line = x.loc.startToken.line - 1; + const range = new vscode.Range(line, 0, line, 0); + const position = new vscode.Position(line, 0); + const operationLocation: OperationLocation = { + document: documentText, + documentPath: document.fileName, + position: position, + }; + const service = fdcConfigs.findEnclosingServiceForPath( + document.fileName + ); + + if (service) { + codeLenses.push( + new vscode.CodeLens(range, { + title: `$(play) Run (local)`, + command: "firebase.dataConnect.executeOperation", + tooltip: "Execute the operation (⌘+enter or Ctrl+Enter)", + arguments: [x, operationLocation, InstanceType.LOCAL], + }) + ); + + codeLenses.push( + new vscode.CodeLens(range, { + title: `$(play) Run (Production – Project: ${rc.projects.default})`, + command: "firebase.dataConnect.executeOperation", + tooltip: "Execute the operation (⌘+enter or Ctrl+Enter)", + arguments: [x, operationLocation, InstanceType.PRODUCTION], + }) + ); + } + } + } + + return codeLenses; + } +} + +/** + * CodeLensProvider for actions on the schema file + */ +export class SchemaCodeLensProvider extends ComputedCodeLensProvider { + constructor(readonly emulatorsController: EmulatorsController) { + super(); + } + + provideCodeLenses( + document: vscode.TextDocument, + token: vscode.CancellationToken + ): vscode.CodeLens[] { + if (!this.watch(this.emulatorsController.areEmulatorsRunning)) { + return []; + } + + const codeLenses: vscode.CodeLens[] = []; + + // TODO: replace w/ online-parser to work with malformed documents + const documentNode = parse(document.getText()); + + for (const x of documentNode.definitions) { + if (x.kind === Kind.OBJECT_TYPE_DEFINITION && x.loc) { + const line = x.loc.startToken.line - 1; + const range = new vscode.Range(line, 0, line, 0); + const position = new vscode.Position(line, 0); + const schemaLocation = { + documentPath: document.fileName, + position: position, + }; + + codeLenses.push( + new vscode.CodeLens(range, { + title: `$(database) Add data`, + command: "firebase.dataConnect.schemaAddData", + tooltip: "Generate a mutation to add data of this type", + arguments: [x, schemaLocation], + }) + ); + } + } + + return codeLenses; + } +} diff --git a/firebase-vscode/src/data-connect/config.ts b/firebase-vscode/src/data-connect/config.ts new file mode 100644 index 00000000000..6233aa2c680 --- /dev/null +++ b/firebase-vscode/src/data-connect/config.ts @@ -0,0 +1,190 @@ +import { isPathInside } from "./file-utils"; +import { DeepReadOnly } from "../metaprogramming"; +import { ConnectorYaml, DataConnectYaml } from "../dataconnect/types"; +import { Result, ResultError, ResultValue } from "../result"; +import { globalSignal } from "../utils/globals"; +import { computed, effect, signal } from "@preact/signals-core"; +import { + _createWatcher as createWatcher, + firebaseConfig, + getConfigPath, +} from "../core/config"; +import * as vscode from "vscode"; +import * as promise from "../utils/promise"; +import { + readConnectorYaml, + readDataConnectYaml, + readFirebaseJson as readFdcFirebaseJson, +} from "../../../src/dataconnect/fileUtils"; +import { Config } from "../config"; +import { DataConnectConfig, DataConnectMultiple } from "../firebaseConfig"; +import path from "path"; + +export * from "../core/config"; + +export const dataConnectConfigs = signal< + Result | undefined +>(undefined); + +export function registerDataConnectConfigs(): vscode.Disposable { + let cancel: () => void | undefined; + + function handleResult( + firebaseConfig: Result | undefined, + ) { + cancel?.(); + cancel = undefined; + + // While waiting for the promise to resolve, we clear the configs, to tell anything that depends + // on it that it's loading. + dataConnectConfigs.value = undefined; + + const configs = firebaseConfig?.followAsync( + async (config) => + new ResultValue( + await _readDataConnectConfigs(readFdcFirebaseJson(config)), + ), + ); + + cancel = + configs && + promise.cancelableThen( + configs, + (configs) => (dataConnectConfigs.value = configs.tryReadValue), + ).cancel; + } + + const sub = effect(() => handleResult(firebaseConfig.value)); + + const dataConnectWatcher = createWatcher("**/{dataconnect,connector}.yaml"); + dataConnectWatcher?.onDidChange(() => handleResult(firebaseConfig.value)); + dataConnectWatcher?.onDidCreate(() => handleResult(firebaseConfig.value)); + dataConnectWatcher?.onDidDelete(() => handleResult(undefined)); + // TODO watch connectors + + return vscode.Disposable.from( + { dispose: sub }, + { dispose: () => cancel?.() }, + dataConnectWatcher, + ); +} + +/** @internal */ +export async function _readDataConnectConfigs( + fdcConfig: DataConnectMultiple, +): Promise> { + return Result.guard(async () => { + const dataConnects = await Promise.all( + fdcConfig.map>(async (dataConnect) => { + // Paths may be relative to the firebase.json file. + const absoluteLocation = asAbsolutePath( + dataConnect.source, + getConfigPath(), + ); + const dataConnectYaml = await readDataConnectYaml(absoluteLocation); + const resolvedConnectors = await Promise.all( + dataConnectYaml.connectorDirs.map((connectorDir) => + Result.guard(async () => { + const connectorYaml = await readConnectorYaml( + // Paths may be relative to the dataconnect.yaml + asAbsolutePath(connectorDir, absoluteLocation), + ); + return new ResolvedConnectorYaml( + asAbsolutePath(connectorDir, absoluteLocation), + connectorYaml, + ); + }), + ), + ); + return new ResolvedDataConnectConfig( + absoluteLocation, + dataConnectYaml, + resolvedConnectors, + dataConnect.location, + ); + }), + ); + return new ResolvedDataConnectConfigs(dataConnects); + }); +} + +function asAbsolutePath(relativePath: string, from: string): string { + return path.normalize(path.join(from, relativePath)); +} + +export class ResolvedConnectorYaml { + constructor( + readonly path: string, + readonly value: DeepReadOnly + ) {} + + containsPath(path: string) { + return isPathInside(path, this.path); + } +} + +export class ResolvedDataConnectConfig { + constructor( + readonly path: string, + readonly value: DeepReadOnly, + readonly resolvedConnectors: Result[], + readonly dataConnectLocation: string, + ) {} + + get connectorIds(): string[] { + const result: string[] = []; + + for (const connector of this.resolvedConnectors) { + const id = connector.tryReadValue?.value.connectorId; + if (id) { + result.push(id); + } + } + + return result; + } + + containsPath(path: string) { + return isPathInside(path, this.path); + } + + findEnclosingConnectorForPath(filePath: string) { + return this.resolvedConnectors.find( + (connector) => connector.tryReadValue?.containsPath(filePath) ?? false, + ); + } +} + +/** The fully resolved `dataconnect.yaml` and its connectors */ +export class ResolvedDataConnectConfigs { + constructor(readonly values: DeepReadOnly) {} + + get serviceIds() { + return this.values.map((config) => config.value.serviceId); + } + + get allConnectors() { + return this.values.flatMap((dc) => dc.resolvedConnectors); + } + + findById(serviceId: string) { + return this.values.find((dc) => dc.value.serviceId === serviceId); + } + + findEnclosingServiceForPath(filePath: string) { + return this.values.find((dc) => dc.containsPath(filePath)); + } + + getApiServicePathByPath(projectId: string, path: string) { + const dataConnectConfig = this.findEnclosingServiceForPath(path); + const serviceId = dataConnectConfig.value.serviceId; + const locationId = dataConnectConfig.dataConnectLocation; + + return `projects/${projectId}/locations/${locationId}/services/${serviceId}`; + } +} + +// TODO: Expand this into a VSCode env config object/class +export enum VSCODE_ENV_VARS { + DATA_CONNECT_ORIGIN = "FIREBASE_DATACONNECT_URL", +} diff --git a/firebase-vscode/src/data-connect/connectors.ts b/firebase-vscode/src/data-connect/connectors.ts new file mode 100644 index 00000000000..d6baf53d0cf --- /dev/null +++ b/firebase-vscode/src/data-connect/connectors.ts @@ -0,0 +1,516 @@ +import vscode, { + Disposable, + ExtensionContext, + InputBoxValidationMessage, + InputBoxValidationSeverity, +} from "vscode"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { + ASTNode, + ArgumentNode, + ConstValueNode, + DocumentNode, + GraphQLInputType, + GraphQLLeafType, + GraphQLNonNull, + IntrospectionQuery, + Kind, + NamedTypeNode, + ObjectFieldNode, + OperationDefinitionNode, + Source, + TypeInfo, + TypeNode, + VariableNode, + buildClientSchema, + isConstValueNode, + isEnumType, + isLeafType, + isNonNullType, + parse, + print, + separateOperations, + visit, + visitWithTypeInfo, +} from "graphql"; +import { camelCase } from "lodash"; +import { DataConnectService } from "./service"; +import { OperationLocation } from "./types"; +import { checkIfFileExists } from "./file-utils"; +import * as path from "path"; + +export function registerConnectors( + context: ExtensionContext, + broker: ExtensionBrokerImpl, + dataConnectService: DataConnectService +): Disposable { + async function moveOperationToConnector( + defIndex: number, // The index of the definition to move. + { documentPath, document }: OperationLocation, + connectorPath: string + ) { + const ast = parse(new Source(document, documentPath)); + + const def = ast.definitions[defIndex]; + if (!def) { + throw new Error(`definitions[${defIndex}] not found.`); + } + if (def.kind !== Kind.OPERATION_DEFINITION) { + throw new Error(`definitions[${defIndex}] is not an operation.`); + } + const introspect = (await dataConnectService.introspect())?.data; + if (!introspect) { + vscode.window.showErrorMessage( + "Failed to introspect the types. (Is the emulator running?)" + ); + return; + } + const opKind = def.operation as string; // query or mutation + + let opName = def.name?.value; + if (!opName || (await validateOpName(opName)) !== null) { + opName = await vscode.window.showInputBox({ + title: `Pick a name for the ${opKind}`, + placeHolder: `e.g. ${camelCase("my-" + opKind)}`, + prompt: `Name of the ${opKind} (to be used with SDKs).`, + value: opName || suggestOpName(def, documentPath), + validateInput: validateOpName, + }); + + if (!opName) { + return; // Dialog dismissed by the developer. + } + } + + // While `parse` above tolerates operations with duplicate names (or + // multiple anonymous operations), `separateOperations` will misbehave. + // So we reassign the names to be all unique just in case. + let i = 0; + const opAst = separateOperations( + visit(ast, { + OperationDefinition(node) { + i++; + return { + ...node, + name: { + kind: Kind.NAME, + value: node === def ? opName : `ignored${i}`, + }, + }; + }, + }) + )[opName]; + // opAst contains only the operation we care about plus fragments used. + if (!opAst) { + throw new Error("Error separating operations."); + } + + const candidates = findExtractCandidates(opAst, introspect); + + const picked = await vscode.window.showQuickPick(candidates, { + title: `Extract variables that can be modified by clients`, + placeHolder: `(type to filter...)`, + canPickMany: true, + ignoreFocusOut: true, + }); + + if (!picked) { + return; // Dialog dismissed by the developer. + } + + const newAst = extractVariables(opAst, picked); + const content = print(newAst); + const filePath = getFilePath(opName); + + vscode.workspace + .openTextDocument(filePath.with({ scheme: "untitled" })) + .then((doc) => { + vscode.window.showTextDocument(doc).then((openDoc) => { + openDoc.edit((edit) => { + edit.insert(new vscode.Position(0, 0), content); + }); + }); + }); + + // TODO: Consider removing the operation from the original document? + + vscode.window.showInformationMessage( + `Moved ${opName} to ${vscode.workspace.asRelativePath(filePath)}` + ); + + async function validateOpName( + value: string + ): Promise { + if (!value) { + return { + severity: InputBoxValidationSeverity.Error, + message: `A name is required for each ${opKind} in a connector.`, + }; + } + // TODO: Check if an operation with the same name exists in basePath. + const fp = getFilePath(value); + + if (await checkIfFileExists(fp)) { + return { + // We're treating this as fatal under the assumption that the file may + // contain an operation with the same name. Once we can actually rule + // out naming conflicts above, we should handle this better, such as + // appending to that file or choosing a different file like xxx2.gql. + severity: InputBoxValidationSeverity.Error, + message: `${vscode.workspace.asRelativePath(fp)} already exists.`, + }; + } + } + + function getFilePath(opName: string) { + return vscode.Uri.file(path.join(connectorPath, `${opName}.gql`)); + } + } + + function suggestOpName(ast: OperationDefinitionNode, documentPath: string) { + if (documentPath) { + // Suggest name from basename (e.g. /foo/bar/baz_quax.gql => bazQuax). + const match = documentPath.match(/([^./\\]+)\./); + if (match) { + return camelCase(match[1]); + } + } + for (const sel of ast.selectionSet.selections) { + if (sel.kind === Kind.FIELD) { + // Suggest name from the first field (e.g. foo_insert => fooInsert). + return camelCase(sel.name.value); + } + } + return camelCase(`my-${ast.operation}-${Math.floor(Math.random() * 100)}`); + } + + function findExtractCandidates( + ast: DocumentNode, + introspect: IntrospectionQuery + ): ExtractCandidate[] { + const candidates: ExtractCandidate[] = []; + const seenVarNames = new Set(); + visit(ast, { + VariableDefinition(node) { + seenVarNames.add(node.variable.name.value); + }, + }); + // TODO: Make this work for inline and non-inline fragments. + const fieldPath: string[] = []; + let directiveName: string | undefined = undefined; + let argName: string | undefined = undefined; + const valuePath: string[] = []; + const schema = buildClientSchema(introspect, { assumeValid: true }); + const typeInfo = new TypeInfo(schema); + // Visits operations as well as fragments. + visit( + ast, + visitWithTypeInfo(typeInfo, { + VariableDefinition() { + // Do not extract literals in variable default values or directives. + return false; + }, + Directive: { + enter(node) { + if (node.name.value === "auth") { + // Auth should not be modifiable by clients. + return false; + } + // @skip(if: $boolVar) and @include(if: $boolVar) are actually good + // targets to extract. We may want to revisit when Data Connect adds more + // field-level directives. + directiveName = node.name.value; + }, + leave() { + directiveName = undefined; + }, + }, + Field: { + enter(node) { + fieldPath.push((node.alias ?? node.name).value); + }, + leave() { + fieldPath.pop(); + }, + }, + Argument: { + enter(node) { + if (argName) { + // This should be impossible to reach. + throw new Error( + `Found Argument within Argument: (${argName} > ${node.name.value}).` + ); + } + argName = node.name.value; + const arg = typeInfo.getArgument(); + if (!arg) { + throw new Error( + `Cannot resolve argument type for ${displayPath( + fieldPath, + directiveName, + argName + )}.` + ); + } + if (addCandidate(node, arg.type)) { + argName = undefined; + return false; // Skip extracting parts of this argument. + } + }, + leave() { + argName = undefined; + }, + }, + ObjectField: { + enter(node) { + valuePath.push(node.name.value); + const input = typeInfo.getInputType(); + if (!input) { + // This may happen if a scalar (such as JSON) type has a value of + // a nested structure (objects / lists). We cannot infer the + // actual required "type" of the sub-structure in this case. + return false; + } + if (addCandidate(node, input)) { + valuePath.pop(); + return false; // Skip extracting fields within this object. + } + }, + leave() { + valuePath.pop(); + }, + }, + ListValue: { + enter() { + // We don't know how to extract repeated variables yet. + // Exception: A key scalar may be extracted as a whole even if its + // value is in array format. Those cases are handled by the scalar + // checks in Argument and ObjectField and should never reach here. + return false; + }, + }, + }) + ); + return candidates; + + function addCandidate( + node: ObjectFieldNode | ArgumentNode, + type: GraphQLInputType + ): boolean { + if (!isConstValueNode(node.value)) { + return false; + } + if (!isExtractableType(type)) { + return false; + } + const varName = suggestVarName( + seenVarNames, + fieldPath, + directiveName, + argName, + valuePath + ); + seenVarNames.add(varName); + candidates.push({ + defaultValue: node.value, + parentNode: node, + varName, + type, + label: "$" + varName, + description: `: ${type} = ${print(node.value)}`, + detail: displayPath( + fieldPath, + directiveName, + argName, + valuePath, + "$" + varName + ), + // Typical enums such as OrderBy are unlikely to be made variables. + // Similarly, null literals aren't usually meant to be changed. + picked: !isEnumType(type) && node.value.kind !== Kind.NULL, + }); + return true; + } + } + + function extractVariables( + opAst: DocumentNode, + picked: ExtractCandidate[] + ): DocumentNode { + const pickedByParent = new Map(); + for (const p of picked) { + pickedByParent.set(p.parentNode, p); + } + + return visit(opAst, { + enter(node) { + const extract = pickedByParent.get(node); + if (extract) { + const newVal: VariableNode = { + kind: Kind.VARIABLE, + name: { + kind: Kind.NAME, + value: extract.varName, + }, + }; + return { ...node, value: newVal }; + } + }, + OperationDefinition: { + leave(node) { + const variableDefinitions = [...node.variableDefinitions]; + for (const extract of picked) { + variableDefinitions.push({ + kind: Kind.VARIABLE_DEFINITION, + variable: { + kind: Kind.VARIABLE, + name: { + kind: Kind.NAME, + value: extract.varName, + }, + }, + defaultValue: + extract.defaultValue.kind === Kind.NULL + ? undefined // Omit `= null`. + : extract.defaultValue, + type: toTypeNode(extract.type), + }); + } + const directives = [...node.directives]; + directives.push({ + kind: Kind.DIRECTIVE, + name: { + kind: Kind.NAME, + value: "auth", + }, + arguments: [ + { + kind: Kind.ARGUMENT, + name: { + kind: Kind.NAME, + value: "level", + }, + value: { + kind: Kind.ENUM, + value: "PUBLIC", + }, + }, + ], + }); + return { ...node, variableDefinitions, directives }; + }, + }, + }); + } + + function displayPath( + fieldPath: string[], + directiveName?: string, + argName?: string, + valuePath?: string[], + valueDisp = "" + ): string { + let fieldDisp = fieldPath.join("."); + if (directiveName) { + fieldDisp += ` @${directiveName}`; + } + if (!argName) { + return fieldDisp; + } + if (valuePath) { + // or {foo: } or {parent: {foo: }} or so on. + for (let i = valuePath.length - 1; i >= 0; i--) { + valueDisp = `{${valuePath[i]}: ${valueDisp}}`; + } + valueDisp = " " + valueDisp; + } else { + valueDisp = ""; + } + return fieldDisp + `(${argName}:${valueDisp})`; + } + + function suggestVarName( + seenVarNames: Set, + fieldPath: string[], + directiveName?: string, + argName?: string, + valuePath?: string[] + ): string { + const path = [...fieldPath]; + if (argName) { + path.push(argName); + } + if (directiveName) { + path.push(directiveName); + } + if (valuePath) { + path.push(...valuePath); + } + // Consider all path segments (starting from the local name) and keep adding + // more prefixes or numbers. e.g., for `foo_insert(data: {id: })`: + // $id => $dataId => $fooInsertDataId => $fooInsertDataId2, in that order. + let varName = path[path.length - 1]; + for (let i = path.length - 2; i >= 0; i--) { + if (seenVarNames.has(varName)) { + varName = camelCase(`${path[i]}-${varName}`); + } + } + if (seenVarNames.has(varName)) { + for (let i = 2; i < 100; i++) { + if (!seenVarNames.has(varName + i.toString())) { + varName += i.toString(); + break; + } + } + // In the extremely rare case, we may reach here and the variable name + // may be already taken and we'll let the developer resolve this problem. + } + return varName; + } + + return Disposable.from( + vscode.commands.registerCommand( + "firebase.dataConnect.moveOperationToConnector", + moveOperationToConnector + ) + ); +} + +interface ExtractCandidate extends vscode.QuickPickItem { + defaultValue: ConstValueNode; + parentNode: ArgumentNode | ObjectFieldNode; + varName: string; + type: ExtractableType; +} + +type ExtractableType = GraphQLLeafType | GraphQLNonNull; + +function isExtractableType(type: unknown): type is ExtractableType { + if (isNonNullType(type)) { + type = type.ofType; + } + if (isLeafType(type)) { + return true; + } + return false; +} + +function toTypeNode(type: ExtractableType): TypeNode { + if (isNonNullType(type)) { + return { + kind: Kind.NON_NULL_TYPE, + type: toNamedTypeNode(type.ofType), + }; + } + return toNamedTypeNode(type); +} + +function toNamedTypeNode(type: GraphQLLeafType): NamedTypeNode { + return { + kind: Kind.NAMED_TYPE, + name: { + kind: Kind.NAME, + value: type.name, + }, + }; +} diff --git a/firebase-vscode/src/data-connect/core-compiler.ts b/firebase-vscode/src/data-connect/core-compiler.ts new file mode 100644 index 00000000000..18f8cd0b2d2 --- /dev/null +++ b/firebase-vscode/src/data-connect/core-compiler.ts @@ -0,0 +1,139 @@ +import * as vscode from "vscode"; +import { Range, DiagnosticSeverity, Diagnostic, Uri, Position } from "vscode"; +import fetch from "node-fetch"; +import { GraphQLError } from "graphql"; +import { Observable, of } from "rxjs"; +import { backOff } from "exponential-backoff"; +import { ResolvedDataConnectConfigs, dataConnectConfigs } from "./config"; +import { DataConnectConfig } from "../firebaseConfig"; + +type DiagnosticTuple = [Uri, Diagnostic[]]; +type CompilerResponse = { result?: { errors?: GraphQLError[] } }; + +const fdcDiagnosticCollection = + vscode.languages.createDiagnosticCollection("Dataconnect"); +/** + * + * @param fdcEndpoint FDC Emulator endpoint + */ +export async function runDataConnectCompiler( + configs: ResolvedDataConnectConfigs, + fdcEndpoint: string, +) { + const obsErrors = await getCompilerStream(configs, fdcEndpoint); + const obsConverter = { + next(nextCompilerResponse: CompilerResponse) { + if (nextCompilerResponse.result && nextCompilerResponse.result.errors) { + fdcDiagnosticCollection.clear(); + const diagnostics = convertGQLErrorToDiagnostic( + configs, + nextCompilerResponse.result.errors, + ); + fdcDiagnosticCollection.set(diagnostics); + } + }, + error(e: Error) { + console.log("Stream closed with: ", e); + }, + complete() { + console.log("Stream Closed"); + }, + }; + obsErrors.subscribe(obsConverter); +} + +function convertGQLErrorToDiagnostic( + configs: ResolvedDataConnectConfigs, + gqlErrors: GraphQLError[], +): DiagnosticTuple[] { + const perFileDiagnostics = {}; + const dcPath = configs.values[0].path; + for (const error of gqlErrors) { + const absFilePath = `${dcPath}/${error.extensions["file"]}`; + const perFileDiagnostic = perFileDiagnostics[absFilePath] || []; + perFileDiagnostic.push({ + source: "Firebase Data Connect: Compiler", + message: error.message, + severity: DiagnosticSeverity.Error, + range: locationToRange(error.locations[0]), + } as Diagnostic); + perFileDiagnostics[absFilePath] = perFileDiagnostic; + } + return Object.keys(perFileDiagnostics).map((key) => { + return [ + Uri.file(key), + perFileDiagnostics[key] as Diagnostic[], + ] as DiagnosticTuple; + }); +} + +// Basic conversion from GraphQLError.SourceLocation to Range +function locationToRange(location: { line: number; column: number }): Range { + const pos1 = new Position(location["line"] - 1, location["column"]); + const pos2 = new Position(location["line"] - 1, location["column"]); + return new Range(pos1, pos2); +} + +/** + * Calls the DataConnect.StreamCompileErrors api. + * Converts ReadableStream into Observable + * */ + +export async function getCompilerStream( + configs: ResolvedDataConnectConfigs, + dataConnectEndpoint: string, +): Promise> { + try { + // TODO: eventually support multiple services + const serviceId = configs.serviceIds[0]; + const resp = await backOff(() => + fetch( + dataConnectEndpoint + `/emulator/stream_errors?serviceId=${serviceId}`, + { + headers: { + Accept: "application/json", + "Content-Type": "application/json", + "x-mantle-admin": "all", + }, + } + ) + ); + + function fromStream( + stream: NodeJS.ReadableStream, + finishEventName = "end", + dataEventName = "data" + ): Observable { + stream.pause(); + + return new Observable((observer) => { + function dataHandler(data: any) { + observer.next(JSON.parse(data)); + } + + function errorHandler(err: any) { + observer.error(JSON.parse(err)); + } + + function endHandler() { + observer.complete(); + } + + stream.addListener(dataEventName, dataHandler); + stream.addListener("error", errorHandler); + stream.addListener(finishEventName, endHandler); + + stream.resume(); + + return () => { + stream.removeListener(dataEventName, dataHandler); + stream.removeListener("error", errorHandler); + stream.removeListener(finishEventName, endHandler); + }; + }); + } + return fromStream(resp.body!); + } catch { + return of({}); + } +} diff --git a/firebase-vscode/src/data-connect/deploy.ts b/firebase-vscode/src/data-connect/deploy.ts new file mode 100644 index 00000000000..28b64b26029 --- /dev/null +++ b/firebase-vscode/src/data-connect/deploy.ts @@ -0,0 +1,126 @@ +import * as vscode from "vscode"; +import { firstWhere, firstWhereDefined } from "../utils/signal"; +import { currentOptions } from "../options"; +import { deploy as cliDeploy } from "../../../src/deploy"; +import { dataConnectConfigs } from "./config"; +import { createE2eMockable } from "../utils/test_hooks"; +import { runCommand } from "./terminal"; +import { ExtensionBrokerImpl } from "../extension-broker"; + +function createDeployOnlyCommand(serviceConnectorMap: { + [key: string]: string[]; +}): string { + // TODO: if all services/connectors are selected, just run "firebase deploy --only dataconnect" + return ( + "firebase deploy --only " + + Object.entries(serviceConnectorMap) + .map(([serviceId, connectorIds]) => { + return `dataconnect:${serviceId}:schema:${connectorIds.join(":")}`; + }) + .join(",") + ); +} + +export function registerFdcDeploy( + broker: ExtensionBrokerImpl, +): vscode.Disposable { + const deploySpy = createE2eMockable( + async (...args: Parameters) => { + // Have the "deploy" return "void" for easier mocking (no return value when spied). + cliDeploy(...args); + }, + "deploy", + async () => {}, + ); + + const deployAllCmd = vscode.commands.registerCommand("fdc.deploy-all", () => { + runCommand("firebase deploy --only dataconnect"); + }); + + const deployCmd = vscode.commands.registerCommand("fdc.deploy", async () => { + const configs = await firstWhereDefined(dataConnectConfigs).then( + (c) => c.requireValue, + ); + + const pickedServices = await pickServices(configs.serviceIds); + if (!pickedServices.length) { + return; + } + + const serviceConnectorMap: { [key: string]: string[] } = {}; + for (const serviceId of pickedServices) { + const connectorIds = configs.findById(serviceId)?.connectorIds; + serviceConnectorMap[serviceId] = await pickConnectors( + connectorIds, + serviceId, + ); + } + + runCommand(createDeployOnlyCommand(serviceConnectorMap)); // run from terminal + }); + + const deployAllSub = broker.on("fdc.deploy-all", async () => + vscode.commands.executeCommand("fdc.deploy-all"), + ); + + const deploySub = broker.on("fdc.deploy", async () => + vscode.commands.executeCommand("fdc.deploy"), + ); + + return vscode.Disposable.from( + deploySpy, + deployAllCmd, + deployCmd, + { dispose: deployAllSub }, + { dispose: deploySub }, + ); +} + +async function pickServices( + serviceIds: string[], +): Promise | undefined> { + const options = firstWhere( + currentOptions, + (options) => options.project?.length !== 0, + ).then((options) => { + return serviceIds.map((serviceId) => { + return { + label: serviceId, + options, + picked: true, + }; + }); + }); + + const picked = await vscode.window.showQuickPick(options, { + title: "Select services to deploy", + canPickMany: true, + }); + + return picked.filter((e) => e.picked).map((service) => service.label); +} + +async function pickConnectors( + connectorIds: string[] | undefined, + serviceId: string, +): Promise | undefined> { + const options = firstWhere( + currentOptions, + (options) => options.project?.length !== 0, + ).then((options) => { + return connectorIds?.map((connectorId) => { + return { + label: connectorId, + options, + picked: true, + }; + }); + }); + + const picked = await vscode.window.showQuickPick(options, { + title: `Select connectors to deploy for: ${serviceId}`, + canPickMany: true, + }); + + return picked.filter((e) => e.picked).map((connector) => connector.label); +} diff --git a/firebase-vscode/src/data-connect/emulators-status.ts b/firebase-vscode/src/data-connect/emulators-status.ts new file mode 100644 index 00000000000..742237c3540 --- /dev/null +++ b/firebase-vscode/src/data-connect/emulators-status.ts @@ -0,0 +1,61 @@ +import * as vscode from "vscode"; +import { registerWebview } from "../webview"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { effect } from "@preact/signals-core"; +import { EmulatorsController } from "../core/emulators"; +import { Emulators } from "../cli"; + +export enum InstanceType { + LOCAL = "local", + PRODUCTION = "production", +} + +export function registerFirebaseDataConnectView( + context: vscode.ExtensionContext, + broker: ExtensionBrokerImpl, + emulatorsController: EmulatorsController +): vscode.Disposable { + const emulatorsStatus = vscode.window.createStatusBarItem( + "emulators", + vscode.StatusBarAlignment.Left + ); + emulatorsStatus.tooltip = "The emulators status"; + + function syncStatusBarWithSelectedInstance() { + return effect(() => { + const emulators = emulatorsController.emulatorStates.value; + + const icons: string[] = []; + // TODO(rrousselGit) add icons for the other Firebase products + if (emulators?.find((e) => e.name === Emulators.DATACONNECT) ?? false) { + icons.push("$(data-connect)"); + } + + if (emulators?.find((e) => e.name !== Emulators.DATACONNECT) ?? false) { + icons.push("$(mono-firebase)"); + } + + if (icons.length === 0) { + emulatorsStatus.text = `No emulator running`; + emulatorsStatus.backgroundColor = new vscode.ThemeColor( + "statusBarItem.warningBackground" + ); + } else { + const label = icons.length === 1 ? "Emulator" : "Emulators"; + emulatorsStatus.backgroundColor = undefined; + emulatorsStatus.text = `${icons.join(" ")} ${label} running`; + emulatorsStatus.backgroundColor = undefined; + } + + emulatorsStatus.show(); + }); + } + + return vscode.Disposable.from( + emulatorsStatus, + { + dispose: syncStatusBarWithSelectedInstance(), + }, + registerWebview({ name: "data-connect", context, broker }) + ); +} diff --git a/firebase-vscode/src/data-connect/execution-history-provider.ts b/firebase-vscode/src/data-connect/execution-history-provider.ts new file mode 100644 index 00000000000..96cd6cdda79 --- /dev/null +++ b/firebase-vscode/src/data-connect/execution-history-provider.ts @@ -0,0 +1,96 @@ +import * as vscode from "vscode"; // from //third_party/vscode/src/vs:vscode +import { effect } from "@preact/signals-core"; +import { ExecutionItem, ExecutionState, executions } from "./execution-store"; + +const timeFormatter = new Intl.DateTimeFormat("default", { + timeStyle: "long", +}); + +/** + * The TreeItem for an execution. + */ +export class ExecutionTreeItem extends vscode.TreeItem { + parent?: ExecutionTreeItem; + children: ExecutionTreeItem[] = []; + + constructor(readonly item: ExecutionItem) { + super(item.label, vscode.TreeItemCollapsibleState.None); + this.item = item; + + // Renders arguments in a single line + const prettyArgs = this.item.args?.replaceAll(/[\n \t]+/g, " "); + this.description = `${timeFormatter.format( + item.timestamp + )} | Arguments: ${prettyArgs}`; + this.command = { + title: "Show result", + command: "firebase.dataConnect.selectExecutionResultToShow", + arguments: [item.executionId], + }; + this.updateContext(); + } + + updateContext() { + this.contextValue = "executionTreeItem-finished"; + if (this.item.state === ExecutionState.FINISHED) { + this.iconPath = new vscode.ThemeIcon( + "pass", + new vscode.ThemeColor("testing.iconPassed") + ); + } else if (this.item.state === ExecutionState.CANCELLED) { + this.iconPath = new vscode.ThemeIcon( + "warning", + new vscode.ThemeColor("testing.iconErrored") + ); + } else if (this.item.state === ExecutionState.ERRORED) { + this.iconPath = new vscode.ThemeIcon( + "close", + new vscode.ThemeColor("testing.iconFailed") + ); + } else if (this.item.state === ExecutionState.RUNNING) { + this.contextValue = "executionTreeItem-running"; + this.iconPath = new vscode.ThemeIcon( + "sync~spin", + new vscode.ThemeColor("testing.runAction") + ); + } + } +} + +/** + * The TreeDataProvider for data connect execution history. + */ +export class ExecutionHistoryTreeDataProvider + implements vscode.TreeDataProvider +{ + private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event = + this.onDidChangeTreeDataEmitter.event; + executionItems: ExecutionTreeItem[] = []; + + constructor() { + effect(() => { + this.executionItems = Object.values(executions.value) + .sort((a, b) => b.timestamp - a.timestamp) + .map((item) => new ExecutionTreeItem(item)); + + this.onDidChangeTreeDataEmitter.fire(); + }); + } + + getTreeItem(element: ExecutionTreeItem): vscode.TreeItem { + return element; + } + + getChildren(element?: ExecutionTreeItem): ExecutionTreeItem[] { + if (element) { + return element.children; + } else { + return this.executionItems; + } + } + + getParent(element?: ExecutionTreeItem): ExecutionTreeItem | undefined { + return element?.parent; + } +} diff --git a/firebase-vscode/src/data-connect/execution-store.ts b/firebase-vscode/src/data-connect/execution-store.ts new file mode 100644 index 00000000000..38f8c6c9eb1 --- /dev/null +++ b/firebase-vscode/src/data-connect/execution-store.ts @@ -0,0 +1,83 @@ +import { computed } from "@preact/signals-core"; +import { ExecutionResult, OperationDefinitionNode } from "graphql"; +import * as vscode from "vscode"; +import { globalSignal } from "../utils/globals"; + +export enum ExecutionState { + INIT, + RUNNING, + CANCELLED, + ERRORED, + FINISHED, +} + +export interface ExecutionItem { + executionId: string; + label: string; + timestamp: number; + state: ExecutionState; + operation: OperationDefinitionNode; + args?: string; + results?: ExecutionResult | Error; + documentPath: string; + position: vscode.Position; +} + +let executionId = 0; + +function nextExecutionId() { + executionId++; + return `${executionId}`; +} + +export const executions = globalSignal< + Record +>({}); + +export const selectedExecutionId = globalSignal(""); + +/** The unparsed JSON object mutation/query variables. + * + * The JSON may be invalid. + */ +export const executionArgsJSON = globalSignal("{}"); + +export function createExecution( + executionItem: Omit +) { + const item: ExecutionItem = { + executionId: nextExecutionId(), + ...executionItem, + }; + + executions.value = { + ...executions.value, + [executionId]: item, + }; + + return item; +} + +export function updateExecution( + executionId: string, + executionItem: ExecutionItem +) { + executions.value = { + ...executions.value, + [executionId]: executionItem, + }; +} + +export async function selectExecutionId(executionId: string) { + selectedExecutionId.value = executionId; + + // take user to operation location in editor + const { documentPath, position } = selectedExecution.value; + await vscode.window.showTextDocument(vscode.Uri.file(documentPath), { + selection: new vscode.Range(position, position), + }); +} + +export const selectedExecution = computed( + () => executions.value[selectedExecutionId.value] +); diff --git a/firebase-vscode/src/data-connect/execution.ts b/firebase-vscode/src/data-connect/execution.ts new file mode 100644 index 00000000000..44a973cd08e --- /dev/null +++ b/firebase-vscode/src/data-connect/execution.ts @@ -0,0 +1,210 @@ +import vscode, { + ConfigurationTarget, + Disposable, + ExtensionContext, +} from "vscode"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { registerWebview } from "../webview"; +import { ExecutionHistoryTreeDataProvider } from "./execution-history-provider"; +import { + ExecutionItem, + ExecutionState, + createExecution, + executionArgsJSON, + selectExecutionId, + selectedExecution, + selectedExecutionId, + updateExecution, +} from "./execution-store"; +import { batch, effect } from "@preact/signals-core"; +import { OperationDefinitionNode, OperationTypeNode, print } from "graphql"; +import { DataConnectService } from "./service"; +import { DataConnectError, toSerializedError } from "../../common/error"; +import { OperationLocation } from "./types"; +import { EmulatorsController } from "../core/emulators"; +import { InstanceType } from "./emulators-status"; + +export function registerExecution( + context: ExtensionContext, + broker: ExtensionBrokerImpl, + dataConnectService: DataConnectService, + emulatorsController: EmulatorsController +): Disposable { + const treeDataProvider = new ExecutionHistoryTreeDataProvider(); + const executionHistoryTreeView = vscode.window.createTreeView( + "data-connect-execution-history", + { + treeDataProvider, + } + ); + + // Select the corresponding tree-item when the selected-execution-id updates + effect(() => { + const id = selectedExecutionId.value; + const selectedItem = treeDataProvider.executionItems.find( + ({ item }) => item.executionId === id + ); + executionHistoryTreeView.reveal(selectedItem, { select: true }); + }); + + // Listen for changes to the selected-execution item + effect(() => { + const item = selectedExecution.value; + if (item) { + broker.send("notifyDataConnectResults", { + args: item.args ?? "{}", + query: print(item.operation), + results: + item.results instanceof Error + ? toSerializedError(item.results) + : item.results, + displayName: item.operation.operation, + }); + } + }); + + async function executeOperation( + ast: OperationDefinitionNode, + { document, documentPath, position }: OperationLocation, + instance: InstanceType + ) { + const configs = vscode.workspace.getConfiguration("firebase.dataConnect"); + const alwaysExecuteMutationsInProduction = + "alwaysAllowMutationsInProduction"; + const alwaysStartEmulator = "alwaysStartEmulator"; + + if ( + instance === InstanceType.LOCAL && + !emulatorsController.areEmulatorsRunning.value + ) { + const always = "Yes (always)"; + const yes = "Yes"; + const result = await vscode.window.showWarningMessage( + "Trying to execute an operation on the emulator, but it isn't started yet. " + + "Do you wish to start it?", + { modal: true }, + yes, + always + ); + + // If the user selects "always", we update User settings. + if (result === always) { + configs.update(alwaysStartEmulator, true, ConfigurationTarget.Global); + } + + if (result === yes || result === always) { + await vscode.commands.executeCommand("firebase.emulators.start"); + } + } + + // Warn against using mutations in production. + if ( + instance !== InstanceType.LOCAL && + !configs.get(alwaysExecuteMutationsInProduction) && + ast.operation === OperationTypeNode.MUTATION + ) { + const always = "Yes (always)"; + const yes = "Yes"; + const result = await vscode.window.showWarningMessage( + "You are about to perform a mutation in production environment. Are you sure?", + { modal: true }, + yes, + always + ); + + if (result !== always && result !== yes) { + return; + } + + // If the user selects "always", we update User settings. + if (result === always) { + configs.update( + alwaysExecuteMutationsInProduction, + true, + ConfigurationTarget.Global + ); + } + } + + const item = createExecution({ + label: ast.name?.value ?? "anonymous", + timestamp: Date.now(), + state: ExecutionState.RUNNING, + operation: ast, + args: executionArgsJSON.value, + documentPath, + position, + }); + + function updateAndSelect(updates: Partial) { + batch(() => { + updateExecution(item.executionId, { ...item, ...updates }); + selectExecutionId(item.executionId); + }); + } + + try { + // Execute queries/mutations from their source code. + // That ensures that we can execute queries in unsaved files. + + const results = await dataConnectService.executeGraphQL({ + operationName: ast.name?.value, + // We send the whole unparsed document to guarantee + // that there are no formatting differences between the real document + // and the document that is sent to the emulator. + query: document, + variables: executionArgsJSON.value, + path: documentPath, + instance, + }); + + updateAndSelect({ + state: + // Executing queries may return a response which contains errors + // without throwing. + // In that case, we mark the execution as errored. + (results.errors?.length ?? 0) > 0 + ? ExecutionState.ERRORED + : ExecutionState.FINISHED, + results, + }); + } catch (error) { + updateAndSelect({ + state: ExecutionState.ERRORED, + results: + error instanceof Error + ? error + : new DataConnectError("Unknown error", error), + }); + } + } + + broker.on( + "definedDataConnectArgs", + (value) => (executionArgsJSON.value = value) + ); + + return Disposable.from( + registerWebview({ + name: "data-connect-execution-configuration", + context, + broker, + }), + registerWebview({ + name: "data-connect-execution-results", + context, + broker, + }), + executionHistoryTreeView, + vscode.commands.registerCommand( + "firebase.dataConnect.executeOperation", + executeOperation + ), + vscode.commands.registerCommand( + "firebase.dataConnect.selectExecutionResultToShow", + (executionId) => { + selectExecutionId(executionId); + } + ) + ); +} diff --git a/firebase-vscode/src/data-connect/explorer-provider.ts b/firebase-vscode/src/data-connect/explorer-provider.ts new file mode 100644 index 00000000000..0eabe0cfffb --- /dev/null +++ b/firebase-vscode/src/data-connect/explorer-provider.ts @@ -0,0 +1,232 @@ +import * as vscode from "vscode"; // from //third_party/vscode/src/vs:vscode +import { CancellationToken, ExtensionContext } from "vscode"; + +import { + IntrospectionQuery, + IntrospectionType, + IntrospectionOutputType, + IntrospectionNamedTypeRef, + IntrospectionOutputTypeRef, + IntrospectionField, + TypeKind, +} from "graphql"; +import { effect } from "@preact/signals-core"; +import { introspectionQuery } from "./explorer"; +import { OPERATION_TYPE } from "./types"; + +interface Element { + name: string; + baseType: OPERATION_TYPE; +} + +export class ExplorerTreeDataProvider + implements vscode.TreeDataProvider +{ + private _onDidChangeTreeData = new vscode.EventEmitter(); + readonly onDidChangeTreeData = this._onDidChangeTreeData.event; + + private typeSystem: + | { + introspection: IntrospectionQuery; + typeForName: Map; + } + | undefined = undefined; + + constructor() { + // on introspection change, update typesystem + effect(() => { + const introspection = introspectionQuery.value; + if (introspection) { + const typeForName = new Map(); + for (const type of introspection.__schema.types) { + typeForName.set(type.name, type); + } + this.typeSystem = { + introspection, + typeForName, + }; + this.refresh(); + } + }); + } + + refresh(): void { + this._onDidChangeTreeData.fire(undefined); + } + + // sort by whether the element has children, so that list items show up last + private eleSortFn = (a: Element, b: Element) => { + const a_field = this._field(a); + const b_field = this._field(b); + const isAList = a_field.type.kind === TypeKind.OBJECT; + const isBList = b_field.type.kind === TypeKind.OBJECT; + if ((isAList && isBList) || (!isAList && !isBList)) { + return 0; + } else if (isAList) { + return 1; + } else { + return -1; + } + }; + + getTreeItem(element: Element): vscode.TreeItem { + // special cases for query and mutation root folders + if ( + Object.values(OPERATION_TYPE).includes(element.name as OPERATION_TYPE) + ) { + return new vscode.TreeItem( + element.name, + vscode.TreeItemCollapsibleState.Collapsed + ); + } + + const field = this._field(element); + if (!field) { + return undefined; + } + + const hasChildren = this._baseType(field).kind === TypeKind.OBJECT; + const label = field.name; + const treeItem = new vscode.TreeItem( + label, + hasChildren + ? vscode.TreeItemCollapsibleState.Collapsed + : vscode.TreeItemCollapsibleState.None + ); + + treeItem.description = this._formatType(field.type); + return treeItem; + } + + getChildren(element?: Element): Element[] { + // if the backend did not load yet + if (!introspectionQuery.value) { + return null; + } + // init the tree with two elements, query and mutation + if (!element) { + return [ + { name: OPERATION_TYPE.query, baseType: OPERATION_TYPE.query }, + { name: OPERATION_TYPE.mutation, baseType: OPERATION_TYPE.mutation }, + ]; + } + + if (element.name === OPERATION_TYPE.query) { + return this._unref(this.typeSystem.introspection.__schema.queryType) + .fields.filter((f) => f.name !== "_firebase") + .map((f) => { + return { name: f.name, baseType: OPERATION_TYPE.query }; + }); + } else if (element.name === OPERATION_TYPE.mutation) { + return this._unref(this.typeSystem.introspection.__schema.mutationType) + .fields.filter((f) => f.name !== "_firebase") + .map((f) => { + return { name: f.name, baseType: OPERATION_TYPE.mutation }; + }); + } + + const unwrapped = this._baseType(this._field(element)); + const type = this._unref(unwrapped); + if (type.kind === TypeKind.OBJECT) { + return type.fields + .map((field) => { + return { + name: `${element.name}.${field.name}`, + baseType: element.baseType, + }; + }) + .sort(this.eleSortFn); + } + return []; + } + + getParent(element: Element): vscode.ProviderResult { + const lastDot = element.name.indexOf("."); + if (lastDot <= 0) { + return undefined; + } + return { + name: element.name.substring(0, lastDot), + baseType: element.baseType, + }; + } + + resolveTreeItem( + item: vscode.TreeItem, + element: Element, + token: CancellationToken + ): vscode.ProviderResult { + const field = this._field(element); + item.tooltip = + field && field.description + ? new vscode.MarkdownString(field.description) + : ""; + + return item; + } + + private _field(element: Element): IntrospectionField | undefined { + const path = element.name.split("."); + const typeRef = + element.baseType === OPERATION_TYPE.query + ? this.typeSystem.introspection.__schema.queryType + : this.typeSystem.introspection.__schema.mutationType; + + if (!path.length) { + return undefined; + } + let field = undefined; + for (let i = 0; i < path.length; i++) { + const baseTypeRef = i === 0 ? typeRef : this._baseType(field); + + const type = this._unref(baseTypeRef); + if (type.kind !== TypeKind.OBJECT) { + return undefined; + } + const maybeField = type.fields.find((f) => f.name === path[i]); + if (!maybeField) { + return undefined; + } + field = maybeField; + } + return field; + } + + _unref(ref: IntrospectionNamedTypeRef): T { + const type = this.typeSystem.typeForName.get(ref.name); + if (!type) { + throw new Error( + `Introspection invariant violation: Ref type ${ref.name} does not exist` + ); + } + if (ref.kind && type.kind !== ref.kind) { + throw new Error( + `Introspection invariant violation: Ref kind ${ref.kind} does not match Type kind ${type.kind}` + ); + } + return type as T; + } + + _baseType( + field: IntrospectionField + ): IntrospectionNamedTypeRef { + let unwrapped = field.type; + while ( + unwrapped.kind === TypeKind.NON_NULL || + unwrapped.kind === TypeKind.LIST + ) { + unwrapped = unwrapped.ofType; + } + return unwrapped; + } + + _formatType(type: IntrospectionOutputTypeRef): string { + if (type.kind === TypeKind.NON_NULL) { + return this._formatType(type.ofType) + "!"; + } + if (type.kind === TypeKind.LIST) { + return `[${this._formatType(type.ofType)}]`; + } + return type.name; + } +} diff --git a/firebase-vscode/src/data-connect/explorer.ts b/firebase-vscode/src/data-connect/explorer.ts new file mode 100644 index 00000000000..823e28f262f --- /dev/null +++ b/firebase-vscode/src/data-connect/explorer.ts @@ -0,0 +1,38 @@ +import vscode, { Disposable, ExtensionContext } from "vscode"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { ExplorerTreeDataProvider } from "./explorer-provider"; +import { IntrospectionQuery } from "graphql"; +import { DataConnectService } from "./service"; +import { globalSignal } from "../utils/globals"; + +// explorer store +export const introspectionQuery = globalSignal( + undefined +); + +export function registerExplorer( + context: ExtensionContext, + broker: ExtensionBrokerImpl, + dataConnectService: DataConnectService +): Disposable { + const treeDataProvider = new ExplorerTreeDataProvider(); + const explorerTreeView = vscode.window.createTreeView( + "firebase.dataConnect.explorerView", + { + treeDataProvider, + } + ); + + async function executeIntrospection() { + const results = await dataConnectService.introspect(); + introspectionQuery.value = results.data; + } + + return Disposable.from( + explorerTreeView, + vscode.commands.registerCommand( + "firebase.dataConnect.executeIntrospection", + executeIntrospection + ) + ); +} diff --git a/firebase-vscode/src/data-connect/file-utils.ts b/firebase-vscode/src/data-connect/file-utils.ts new file mode 100644 index 00000000000..62e25cf7c35 --- /dev/null +++ b/firebase-vscode/src/data-connect/file-utils.ts @@ -0,0 +1,15 @@ +import vscode, { Uri } from "vscode"; +import path from "path"; +export async function checkIfFileExists(file: Uri) { + try { + await vscode.workspace.fs.stat(file); + return true; + } catch { + return false; + } +} + +export function isPathInside(childPath: string, parentPath: string): boolean { + const relative = path.relative(parentPath, childPath); + return !relative.startsWith("..") && !path.isAbsolute(relative); +} diff --git a/firebase-vscode/src/data-connect/index.ts b/firebase-vscode/src/data-connect/index.ts new file mode 100644 index 00000000000..5d0b1879350 --- /dev/null +++ b/firebase-vscode/src/data-connect/index.ts @@ -0,0 +1,246 @@ +import vscode, { Disposable, ExtensionContext } from "vscode"; +import { Signal, effect } from "@preact/signals-core"; +import { ExtensionBrokerImpl } from "../extension-broker"; +import { registerExecution } from "./execution"; +import { registerExplorer } from "./explorer"; +import { registerAdHoc } from "./ad-hoc-mutations"; +import { DataConnectService as FdcService, STAGING_API } from "./service"; +import { + OperationCodeLensProvider, + SchemaCodeLensProvider, +} from "./code-lens-provider"; +import { registerConnectors } from "./connectors"; +import { AuthService } from "../auth/service"; +import { registerFirebaseDataConnectView } from "./emulators-status"; +import { currentProjectId } from "../core/project"; +import { isTest } from "../utils/env"; +import { setupLanguageClient } from "./language-client"; +import { EmulatorsController } from "../core/emulators"; +import { registerFdcDeploy } from "./deploy"; +import * as graphql from "graphql"; +import { + ResolvedDataConnectConfigs, + VSCODE_ENV_VARS, + dataConnectConfigs, + registerDataConnectConfigs, +} from "./config"; +import { locationToRange } from "../utils/graphql"; +import { runDataConnectCompiler } from "./core-compiler"; +import { setVSCodeEnvVars } from "../../../src/utils"; +import { Result } from "../result"; +import { setTerminalEnvVars } from "./terminal"; + +class CodeActionsProvider implements vscode.CodeActionProvider { + constructor( + private configs: Signal< + Result | undefined + >, + ) {} + + provideCodeActions( + document: vscode.TextDocument, + range: vscode.Range | vscode.Selection, + context: vscode.CodeActionContext, + cancellationToken: vscode.CancellationToken, + ): vscode.ProviderResult<(vscode.CodeAction | vscode.Command)[]> { + const documentText = document.getText(); + const results: (vscode.CodeAction | vscode.Command)[] = []; + + // TODO: replace w/ online-parser to work with malformed documents + const documentNode = graphql.parse(documentText); + let definitionAtRange: graphql.DefinitionNode | undefined; + let definitionIndex: number | undefined; + + for (let i = 0; i < documentNode.definitions.length; i++) { + const definition = documentNode.definitions[i]; + + if ( + definition.kind === graphql.Kind.OPERATION_DEFINITION && + definition.loc + ) { + const definitionRange = locationToRange(definition.loc); + const line = definition.loc.startToken.line - 1; + + if (!definitionRange.intersection(range)) { + continue; + } + + definitionAtRange = definition; + definitionIndex = i; + } + } + + if (!definitionAtRange) { + return null; + } + + this.moveToConnector( + document, + documentText, + { index: definitionIndex! }, + results, + ); + + return results; + } + + private moveToConnector( + document: vscode.TextDocument, + documentText: string, + { index }: { index: number }, + results: (vscode.CodeAction | vscode.Command)[], + ) { + const enclosingService = + this.configs.value?.tryReadValue?.findEnclosingServiceForPath( + document.uri.fsPath, + ); + if (!enclosingService) { + return; + } + + const enclosingConnector = enclosingService.findEnclosingConnectorForPath( + document.uri.fsPath, + ); + if (enclosingConnector) { + // Already in a connector, don't suggest moving to another one + return; + } + + for (const connectorResult of enclosingService.resolvedConnectors) { + const connector = connectorResult.tryReadValue; + if (!connector) { + // Parsing error in the connector, skip + continue; + } + + results.push({ + title: `Move to "${connector.value.connectorId}"`, + kind: vscode.CodeActionKind.Refactor, + tooltip: `Move to the connector to "${connector.path}"`, + command: "firebase.dataConnect.moveOperationToConnector", + arguments: [ + index, + { + document: documentText, + documentPath: document.fileName, + }, + connector.path, + ], + }); + } + } +} + +export function registerFdc( + context: ExtensionContext, + broker: ExtensionBrokerImpl, + authService: AuthService, + emulatorController: EmulatorsController, +): Disposable { + const codeActions = vscode.languages.registerCodeActionsProvider( + [ + { scheme: "file", language: "graphql" }, + { scheme: "untitled", language: "graphql" }, + ], + new CodeActionsProvider(dataConnectConfigs), + { + providedCodeActionKinds: [vscode.CodeActionKind.Refactor], + }, + ); + + const fdcService = new FdcService(authService, emulatorController); + const operationCodeLensProvider = new OperationCodeLensProvider( + emulatorController, + ); + const schemaCodeLensProvider = new SchemaCodeLensProvider(emulatorController); + + const client = setupLanguageClient(context); + client.start(); + + // Perform some side-effects when the endpoint changes + context.subscriptions.push({ + dispose: effect(() => { + const configs = dataConnectConfigs.value?.tryReadValue; + + if (configs && fdcService.localEndpoint.value) { + // TODO move to client.start or setupLanguageClient + vscode.commands.executeCommand("fdc-graphql.restart"); + + vscode.commands.executeCommand( + "firebase.dataConnect.executeIntrospection", + ); + + runDataConnectCompiler(configs, fdcService.localEndpoint.value); + } + }), + }); + + setTerminalEnvVars(VSCODE_ENV_VARS.DATA_CONNECT_ORIGIN, STAGING_API); + + // TODO: Temporary hack to update staging api + setVSCodeEnvVars(VSCODE_ENV_VARS.DATA_CONNECT_ORIGIN, STAGING_API); + const selectedProjectStatus = vscode.window.createStatusBarItem( + "projectPicker", + vscode.StatusBarAlignment.Left, + ); + selectedProjectStatus.tooltip = "Select a Firebase project"; + selectedProjectStatus.command = "firebase.selectProject"; + + const sub1 = effect(() => { + // Enable FDC views only if at least one dataconnect.yaml is present. + // TODO don't start the related logic unless a dataconnect.yaml is present + vscode.commands.executeCommand( + "setContext", + "firebase-vscode.fdc.enabled", + (dataConnectConfigs.value?.tryReadValue?.values.length ?? 0) !== 0, + ); + }); + + return Disposable.from( + codeActions, + selectedProjectStatus, + {dispose: sub1}, + { + dispose: effect(() => { + selectedProjectStatus.text = `$(mono-firebase) ${ + currentProjectId.value ?? "" + }`; + selectedProjectStatus.show(); + }), + }, + registerDataConnectConfigs(), + registerExecution(context, broker, fdcService, emulatorController), + registerExplorer(context, broker, fdcService), + registerFirebaseDataConnectView(context, broker, emulatorController), + registerAdHoc(context, broker), + registerConnectors(context, broker, fdcService), + registerFdcDeploy(broker), + operationCodeLensProvider, + vscode.languages.registerCodeLensProvider( + // **Hack**: For testing purposes, enable code lenses on all graphql files + // inside the test_projects folder. + // This is because e2e tests start without graphQL installed, + // so code lenses would otherwise never show up. + isTest + ? [{ pattern: "/**/firebase-vscode/src/test/test_projects/**/*.gql" }] + : [ + { scheme: "file", language: "graphql" }, + { scheme: "untitled", language: "graphql" }, + ], + operationCodeLensProvider, + ), + schemaCodeLensProvider, + vscode.languages.registerCodeLensProvider( + [ + { scheme: "file", language: "graphql" }, + // Don't show in untitled files since the provider needs the file name. + ], + schemaCodeLensProvider, + ), + { + dispose: () => { + client.stop(); + }, + }, + ); +} diff --git a/firebase-vscode/src/data-connect/language-client.ts b/firebase-vscode/src/data-connect/language-client.ts new file mode 100644 index 00000000000..1008dad7f90 --- /dev/null +++ b/firebase-vscode/src/data-connect/language-client.ts @@ -0,0 +1,112 @@ +import * as vscode from "vscode"; +import { + LanguageClientOptions, + ServerOptions, + TransportKind, + RevealOutputChannelOn, + LanguageClient, +} from "vscode-languageclient/node"; +import * as path from "node:path"; +import { Signal } from "@preact/signals-core"; + +export function setupLanguageClient(context) { + // activate language client/serer + const outputChannel: vscode.OutputChannel = vscode.window.createOutputChannel( + "Firebase GraphQL Language Server" + ); + + const serverPath = path.join("dist", "server.js"); + const serverModule = context.asAbsolutePath(serverPath); + + const debugOptions = { + execArgv: ["--nolazy", "--inspect=localhost:6009"], + }; + + const serverOptions: ServerOptions = { + run: { + module: serverModule, + transport: TransportKind.ipc, + }, + debug: { + module: serverModule, + transport: TransportKind.ipc, + options: debugOptions, + }, + }; + + const clientOptions: LanguageClientOptions = { + documentSelector: [{ scheme: "file", language: "graphql" }], + synchronize: { + // TODO: This should include any referenced graphql files inside the graphql-config + fileEvents: [ + vscode.workspace.createFileSystemWatcher( + "/{graphql.config.*,.graphqlrc,.graphqlrc.*,package.json}", + false, + // Ignore change events for graphql config, we only care about create, delete and save events + // otherwise, the underlying language service is re-started on every key change. + // also, it makes sense that it should only re-load on file save, but we need to document that. + // TODO: perhaps we can intercept change events, and remind the user + // to save for the changes to take effect + true + ), + // TODO: load ignore file + // These ignore node_modules and .git by default + vscode.workspace.createFileSystemWatcher( + "**/{*.graphql,*.graphqls,*.gql,*.js,*.mjs,*.cjs,*.esm,*.es,*.es6,*.jsx,*.ts,*.tsx,*.vue,*.svelte,*.cts,*.mts}" + ), + ], + }, + outputChannel, + outputChannelName: "GraphQL Language Server", + revealOutputChannelOn: RevealOutputChannelOn.Never, + initializationFailedHandler: (err) => { + outputChannel.appendLine("Initialization failed"); + outputChannel.appendLine(err.message); + if (err.stack) { + outputChannel.appendLine(err.stack); + } + outputChannel.show(); + return false; + }, + }; + + // Create the language client and start the client. + const client = new LanguageClient( + "graphQLlanguageServer", + "GraphQL Language Server", + serverOptions, + clientOptions + ); + + // register commands + const commandShowOutputChannel = vscode.commands.registerCommand( + "fdc-graphql.showOutputChannel", + () => outputChannel.show() + ); + + context.subscriptions.push(commandShowOutputChannel); + + vscode.commands.registerCommand("fdc-graphql.restart", async () => { + outputChannel.appendLine("Stopping Firebase GraphQL Language Server"); + await client.stop(); + + outputChannel.appendLine("Restarting Firebase GraphQL Language Server"); + await client.start(); + outputChannel.appendLine("Firebase GraphQL Language Server restarted"); + }); + + const restartGraphqlLSP = () => { + vscode.commands.executeCommand("fdc-graphql.restart"); + }; + + // restart server whenever config file changes + const watcher = vscode.workspace.createFileSystemWatcher( + "**/.graphqlrc.*", // TODO: extend to schema files, and other config types + false, + false, + false + ); + watcher.onDidChange(() => restartGraphqlLSP()); + + return client; +} diff --git a/firebase-vscode/src/data-connect/language-server.ts b/firebase-vscode/src/data-connect/language-server.ts new file mode 100644 index 00000000000..9658c8f53e3 --- /dev/null +++ b/firebase-vscode/src/data-connect/language-server.ts @@ -0,0 +1,17 @@ +import { startServer } from "graphql-language-service-server"; + +// The npm scripts are configured to only build this once before +// watching the extension, so please restart the extension debugger for changes! + +async function start() { + try { + await startServer({ method: "node" }); + // eslint-disable-next-line no-console + console.log("Firebase GraphQL Language Server started!"); + } catch (err) { + // eslint-disable-next-line no-console + console.error(err); + } +} + +void start(); diff --git a/firebase-vscode/src/data-connect/service.ts b/firebase-vscode/src/data-connect/service.ts new file mode 100644 index 00000000000..dc7d6ca7a1c --- /dev/null +++ b/firebase-vscode/src/data-connect/service.ts @@ -0,0 +1,278 @@ +import fetch, { Response } from "node-fetch"; +import { + ExecutionResult, + IntrospectionQuery, + getIntrospectionQuery, +} from "graphql"; +import { computed } from "@preact/signals-core"; +import { assertExecutionResult } from "../../common/graphql"; +import { DataConnectError } from "../../common/error"; +import { AuthService } from "../auth/service"; +import { UserMockKind } from "../../common/messaging/protocol"; +import { firstWhereDefined } from "../utils/signal"; +import { EmulatorsController } from "../core/emulators"; +import { Emulators } from "../cli"; +import { dataConnectConfigs } from "../data-connect/config"; + +import { firebaseRC } from "../core/config"; +import { executeGraphQL } from "../../../src/dataconnect/dataplaneClient"; +import { + ExecuteGraphqlRequest, + ExecuteGraphqlResponse, + ExecuteGraphqlResponseError, + Impersonation, +} from "../dataconnect/types"; +import { ClientResponse } from "../apiv2"; +import { InstanceType } from "./emulators-status"; +// TODO: THIS SHOULDN'T BE HERE +export const STAGING_API = + "https://staging-firebasedataconnect.sandbox.googleapis.com"; + +/** + * DataConnect Emulator service + */ +export class DataConnectService { + constructor( + private authService: AuthService, + private emulatorsController: EmulatorsController + ) {} + + readonly localEndpoint = computed(() => { + const emulatorInfos = + this.emulatorsController.emulators.value.infos?.displayInfo; + const dataConnectEmulator = emulatorInfos?.find( + (emulatorInfo) => emulatorInfo.name === Emulators.DATACONNECT + ); + + if (!dataConnectEmulator) { + return undefined; + } + + return ( + "http://" + dataConnectEmulator.host + ":" + dataConnectEmulator.port + ); + }); + + async servicePath(path: string, instance: InstanceType): Promise { + const dataConnectConfigsValue = await firstWhereDefined(dataConnectConfigs); + // TODO: avoid calling this here and in getApiServicePathByPath + const serviceId = + dataConnectConfigsValue?.tryReadValue.findEnclosingServiceForPath(path).value.serviceId; + const projectId = firebaseRC.value?.tryReadValue?.projects?.default; + + if (serviceId === undefined || projectId === undefined) { + return undefined; + } + + return instance === InstanceType.PRODUCTION + ? dataConnectConfigsValue?.tryReadValue?.getApiServicePathByPath( + projectId, + path, + ) + : `projects/p/locations/l/services/${serviceId}`; + } + + private async decodeResponse( + response: Response, + format?: "application/json" + ): Promise { + const contentType = response.headers.get("Content-Type"); + if (!contentType) { + throw new Error("Invalid content type"); + } + + if (format && !contentType.includes(format)) { + throw new Error( + `Invalid content type. Expected ${format} but got ${contentType}` + ); + } + + if (contentType.includes("application/json")) { + return response.json(); + } + + return response.text(); + } + private async handleProdResponse( + clientResponse: ClientResponse< + ExecuteGraphqlResponse | ExecuteGraphqlResponseError + > + ): Promise { + if (!(clientResponse.status >= 200 && clientResponse.status < 300)) { + const errorResponse = + clientResponse as ClientResponse; + throw new DataConnectError( + `Request failed with status ${clientResponse.status}`, + errorResponse.body.error.message + ); + } + const successResponse = + clientResponse as ClientResponse; + return successResponse.body; + } + + private async handleValidResponse( + response: Response + ): Promise { + const json = await this.decodeResponse(response, "application/json"); + assertExecutionResult(json); + + return json; + } + + private async handleInvalidResponse(response: Response): Promise { + const cause = await this.decodeResponse(response); + + throw new DataConnectError( + `Request failed with status ${response.status}`, + cause + ); + } + + private handleResponse(response: Response): Promise { + if (response.status >= 200 && response.status < 300) { + return this.handleValidResponse(response); + } + + return this.handleInvalidResponse(response); + } + + /** Encode a body while handling the fact that "variables" is raw JSON. + * + * If the JSON is invalid, will throw. + */ + private _serializeBody(body: { variables?: string; [key: string]: unknown }) { + if (!body.variables || body.variables.trim().length === 0) { + body.variables = undefined; + return JSON.stringify(body); + } + + // TODO: make this more efficient than a plain JSON decode+encode. + const { variables, ...rest } = body; + + return JSON.stringify({ + ...rest, + variables: JSON.parse(variables), + }); + } + + private _auth(): { impersonate?: Impersonation } { + const userMock = this.authService.userMock; + if (userMock.kind === UserMockKind.ADMIN) { + return {}; + } + return { + impersonate: + userMock.kind === UserMockKind.AUTHENTICATED + ? { authClaims: JSON.parse(userMock.claims) } + : { unauthenticated: true }, + }; + } + + // This introspection is used to generate a basic graphql schema + // It will not include our predefined operations, which requires a DataConnect specific introspection query + async introspect(): Promise<{ data?: IntrospectionQuery }> { + try { + const introspectionResults = await this.executeGraphQLRead({ + query: getIntrospectionQuery(), + operationName: "IntrospectionQuery", + variables: "{}", + }); + console.log("introspection: ", introspectionResults); + // TODO: handle errors + if ((introspectionResults as any).errors.length > 0) { + return { data: undefined }; + } + // TODO: remove after core server handles this + for (let type of (introspectionResults as any).data.__schema.types) { + type.interfaces = []; + } + + return { data: (introspectionResults as any).data }; + } catch (e) { + // TODO: surface error that emulator is not connected + console.error("error: ", e); + return { data: undefined }; + } + } + + async executeGraphQLRead(params: { + query: string; + operationName: string; + variables: string; + }) { + // TODO: get introspections for all services + const configs = await firstWhereDefined(dataConnectConfigs); + // Using "requireValue", so that if configs are not available, the execution should throw. + const serviceId = configs.requireValue.serviceIds[0]; + try { + // TODO: get name programmatically + const body = this._serializeBody({ + ...params, + name: `projects/p/locations/l/services/${serviceId}`, + extensions: this._auth(), + }); + const resp = await fetch( + (await firstWhereDefined(this.localEndpoint)) + + `/v1alpha/projects/p/locations/l/services/${serviceId}:executeGraphqlRead`, + { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + "x-mantle-admin": "all", + }, + body, + } + ); + const result = await resp.json().catch(() => resp.text()); + return result; + } catch (e) { + // TODO: actual error handling + console.log(e); + return null; + } + } + + async executeGraphQL(params: { + query: string; + operationName?: string; + variables: string; + path: string; + instance: InstanceType; + }) { + const servicePath = await this.servicePath(params.path, params.instance); + if (!servicePath) { + throw new Error("No service found for path: " + params.path); + } + + const prodBody: ExecuteGraphqlRequest = { + operationName: params.operationName, + variables: JSON.parse(params.variables), + query: params.query, + name: `${servicePath}`, + extensions: this._auth(), + }; + + const body = this._serializeBody({ ...params }); + if (params.instance === InstanceType.PRODUCTION) { + const resp = await executeGraphQL(servicePath, prodBody); + return this.handleProdResponse(resp); + } else { + const resp = await fetch( + (await firstWhereDefined(this.localEndpoint)) + + `/v1alpha/${servicePath}:executeGraphql`, + { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + "x-mantle-admin": "all", + }, + body, + } + ); + return this.handleResponse(resp); + } + } +} diff --git a/firebase-vscode/src/data-connect/terminal.ts b/firebase-vscode/src/data-connect/terminal.ts new file mode 100644 index 00000000000..2411042d2af --- /dev/null +++ b/firebase-vscode/src/data-connect/terminal.ts @@ -0,0 +1,19 @@ +import { TerminalOptions } from "vscode"; +import * as vscode from "vscode"; + +const environmentVariables = {}; + +const terminalOptions: TerminalOptions = { + name: "Data Connect Terminal", + env: environmentVariables, +}; + +export function setTerminalEnvVars(envVar: string, value: string) { + environmentVariables[envVar] = value; +} + +export function runCommand(command: string) { + const terminal = vscode.window.createTerminal(terminalOptions); + terminal.show(); + terminal.sendText(command); +} diff --git a/firebase-vscode/src/data-connect/types.ts b/firebase-vscode/src/data-connect/types.ts new file mode 100644 index 00000000000..774b3320aaf --- /dev/null +++ b/firebase-vscode/src/data-connect/types.ts @@ -0,0 +1,12 @@ +import * as vscode from "vscode"; + +export enum OPERATION_TYPE { + query = "query", + mutation = "mutation", +} + +export interface OperationLocation { + document: string; + documentPath: string; + position: vscode.Position; +} diff --git a/firebase-vscode/src/extension-broker.ts b/firebase-vscode/src/extension-broker.ts index 7bd7d82f8cf..d323306b862 100644 --- a/firebase-vscode/src/extension-broker.ts +++ b/firebase-vscode/src/extension-broker.ts @@ -20,7 +20,10 @@ export class ExtensionBroker extends Broker< > { private webviews: Webview[] = []; - sendMessage(command: string, data: ExtensionToWebviewParamsMap[keyof ExtensionToWebviewParamsMap]): void { + sendMessage( + command: string, + data: ExtensionToWebviewParamsMap[keyof ExtensionToWebviewParamsMap] + ): void { for (const webview of this.webviews) { webview.postMessage({ command, data }); } @@ -32,7 +35,9 @@ export class ExtensionBroker extends Broker< webview.onDidReceiveMessage( (message: Message) => { this.executeListeners(message); - }, null); + }, + null + ); } delete(): void { diff --git a/firebase-vscode/src/extension.ts b/firebase-vscode/src/extension.ts index be0300ef974..570d4a926c2 100644 --- a/firebase-vscode/src/extension.ts +++ b/firebase-vscode/src/extension.ts @@ -1,5 +1,3 @@ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below import * as vscode from "vscode"; import { ExtensionBroker } from "./extension-broker"; @@ -13,9 +11,11 @@ import { registerWebview } from "./webview"; import { registerCore } from "./core"; import { getSettings } from "./utils/settings"; import { registerHosting } from "./hosting"; +import { registerFdc } from "./data-connect"; +import { AuthService } from "./auth/service"; // This method is called when your extension is activated -export function activate(context: vscode.ExtensionContext) { +export async function activate(context: vscode.ExtensionContext) { const settings = getSettings(); logSetup(settings); pluginLogger.debug("Activating Firebase extension."); @@ -26,13 +26,22 @@ export function activate(context: vscode.ExtensionContext) { vscode.Webview >(new ExtensionBroker()); + const authService = new AuthService(broker); + + const [emulatorsController, coreDisposable] = await registerCore({ + broker, + context, + }); + context.subscriptions.push( - registerCore({ broker, context }), + coreDisposable, registerWebview({ name: "sidebar", broker, context, }), - registerHosting(broker) + registerHosting(broker), + authService, + registerFdc(context, broker, authService, emulatorsController) ); } diff --git a/firebase-vscode/src/hosting/index.ts b/firebase-vscode/src/hosting/index.ts index d99f89db85a..af459ab851f 100644 --- a/firebase-vscode/src/hosting/index.ts +++ b/firebase-vscode/src/hosting/index.ts @@ -36,7 +36,7 @@ export function registerHosting(broker: ExtensionBrokerImpl): Disposable { "selectAndInitHostingFolder", async ({ singleAppSupport }) => { const configs = await firstWhereDefined(firebaseConfig).then( - (c) => c.requireValue, + (c) => c.requireValue ); showOutputChannel(); @@ -48,14 +48,14 @@ export function registerHosting(broker: ExtensionBrokerImpl): Disposable { if (useFrameworks) { currentFramework = await discover(currentOptions.value.cwd, false); pluginLogger.debug( - "(Hosting) Searching for a web framework in this project.", + "(Hosting) Searching for a web framework in this project." ); } let success = false; if (currentFramework) { pluginLogger.debug( - "(Hosting) Detected web framework, launching frameworks init.", + "(Hosting) Detected web framework, launching frameworks init." ); success = await initHosting({ spa: singleAppSupport, @@ -72,7 +72,7 @@ export function registerHosting(broker: ExtensionBrokerImpl): Disposable { if (fileUri && fileUri[0] && fileUri[0].fsPath) { const publicFolderFull = fileUri[0].fsPath; const publicFolder = publicFolderFull.substring( - currentOptions.value.cwd.length + 1, + currentOptions.value.cwd.length + 1 ); success = await initHosting({ spa: singleAppSupport, @@ -92,18 +92,18 @@ export function registerHosting(broker: ExtensionBrokerImpl): Disposable { if (success) { channels.value = await getChannels(configs); } - }, + } ); const sub4 = broker.on("hostingDeploy", async ({ target: deployTarget }) => { const configs = await firstWhereDefined(firebaseConfig).then( - (c) => c.requireValue, + (c) => c.requireValue ); showOutputChannel(); pluginLogger.info( `(Hosting) Starting deployment of project ` + - `${currentProject.value?.projectId} to channel: ${deployTarget}`, + `${currentProject.value?.projectId} to channel: ${deployTarget}` ); const deployResponse = await deployToHosting(configs, deployTarget); @@ -130,6 +130,6 @@ export function registerHosting(broker: ExtensionBrokerImpl): Disposable { { dispose: sub2 }, { dispose: sub3 }, { dispose: sub4 }, - { dispose: sub5 }, + { dispose: sub5 } ); } diff --git a/firebase-vscode/src/logger-wrapper.ts b/firebase-vscode/src/logger-wrapper.ts index 8c6f9d88235..0e387f079be 100644 --- a/firebase-vscode/src/logger-wrapper.ts +++ b/firebase-vscode/src/logger-wrapper.ts @@ -19,7 +19,7 @@ export const pluginLogger: Record void> = { error: () => {}, }; -const outputChannel = vscode.window.createOutputChannel('Firebase'); +const outputChannel = vscode.window.createOutputChannel("Firebase"); export function showOutputChannel() { outputChannel.show(); @@ -27,7 +27,7 @@ export function showOutputChannel() { for (const logLevel in pluginLogger) { pluginLogger[logLevel] = (...args) => { - const prefixedArgs = ['[Firebase Plugin]', ...args]; + const prefixedArgs = ["[Firebase Plugin]", ...args]; cliLogger[logLevel](...prefixedArgs); }; } @@ -35,12 +35,15 @@ for (const logLevel in pluginLogger) { /** * Logging setup for logging to console and to file. */ -export function logSetup({ shouldWriteDebug, debugLogPath }: { - shouldWriteDebug: boolean, - debugLogPath: string +export function logSetup({ + shouldWriteDebug, + debugLogPath, +}: { + shouldWriteDebug: boolean; + debugLogPath: string; }) { // Log to console (use built in CLI functionality) - process.env.DEBUG = 'true'; + process.env.DEBUG = "true"; setupLoggers(); // Log to file @@ -49,22 +52,22 @@ export function logSetup({ shouldWriteDebug, debugLogPath }: { // Re-implement file logger call from ../../src/bin/firebase.ts to not bring // in the entire firebase.ts file const rootFolders = getRootFolders(); - const filePath = debugLogPath || path.join(rootFolders[0], 'firebase-plugin-debug.log'); - pluginLogger.info('Logging to path', filePath); + const filePath = + debugLogPath || path.join(rootFolders[0], "firebase-plugin-debug.log"); + pluginLogger.info("Logging to path", filePath); cliLogger.add( new transports.File({ level: "debug", filename: filePath, format: format.printf((info) => { - const segments = [info.message, ...(info[SPLAT] || [])] - .map(tryStringify); + const segments = [info.message, ...(info[SPLAT] || [])].map( + tryStringify + ); return `[${info.level}] ${stripAnsi(segments.join(" "))}`; }), }) ); - cliLogger.add( - new VSCodeOutputTransport({ level: "info" }) - ); + cliLogger.add(new VSCodeOutputTransport({ level: "info" })); } } @@ -78,13 +81,12 @@ class VSCodeOutputTransport extends Transport { } log(info, callback) { setImmediate(() => { - this.emit('logged', info); + this.emit("logged", info); }); - const segments = [info.message, ...(info[SPLAT] || [])] - .map(tryStringify); + const segments = [info.message, ...(info[SPLAT] || [])].map(tryStringify); const text = `[${info.level}] ${stripAnsi(segments.join(" "))}`; - if (info.level !== 'debug') { + if (info.level !== "debug") { // info or greater: write to output window outputChannel.appendLine(text); } diff --git a/firebase-vscode/src/metaprogramming.ts b/firebase-vscode/src/metaprogramming.ts new file mode 100644 index 00000000000..2cb166f8c30 --- /dev/null +++ b/firebase-vscode/src/metaprogramming.ts @@ -0,0 +1,5 @@ +export type DeepReadOnly = T extends Record + ? { readonly [K in keyof T]: DeepReadOnly } + : T extends Array + ? ReadonlyArray> + : T; diff --git a/firebase-vscode/src/options.ts b/firebase-vscode/src/options.ts index 14fd9019476..715df10e827 100644 --- a/firebase-vscode/src/options.ts +++ b/firebase-vscode/src/options.ts @@ -7,11 +7,7 @@ import { Config } from "../../src/config"; import { globalSignal } from "./utils/globals"; import * as vscode from "vscode"; import { effect } from "@preact/signals-core"; -import { - firebaseConfig, - firebaseRC, - getConfigPath, -} from "./core/config"; +import { firebaseConfig, firebaseRC, getConfigPath } from "./core/config"; export type VsCodeOptions = Options & { isVSCE: boolean; rc: RC | null }; @@ -109,7 +105,7 @@ export function registerOptions(context: ExtensionContext): vscode.Disposable { cwdSync, { dispose: firebaseConfigSync }, { dispose: rcSync }, - { dispose: notifySync }, + { dispose: notifySync } ); } @@ -119,7 +115,7 @@ export function registerOptions(context: ExtensionContext): vscode.Disposable { */ export async function getCommandOptions( firebaseJSON: Config, - options: Options = currentOptions.value, + options: Options = currentOptions.value ): Promise { // Use any string, it doesn't affect `prepare()`. const command = new Command("deploy"); diff --git a/firebase-vscode/src/result.ts b/firebase-vscode/src/result.ts index c35304f6668..ec2b74dfeec 100644 --- a/firebase-vscode/src/result.ts +++ b/firebase-vscode/src/result.ts @@ -28,7 +28,7 @@ export abstract class Result { get tryReadValue(): T | undefined { return this.switchCase( (value) => value, - () => undefined, + () => undefined ); } @@ -39,13 +39,13 @@ export abstract class Result { throw new Error("Result in error state", { cause: error, }); - }, + } ); } switchCase( value: (value: T) => NewT, - error: (error: unknown) => NewT, + error: (error: unknown) => NewT ): NewT { const that: unknown = this; if (that instanceof ResultValue) { @@ -58,16 +58,16 @@ export abstract class Result { follow(cb: (prev: T) => Result): Result { return this.switchCase( (value) => cb(value), - (error) => new ResultError(error), + (error) => new ResultError(error) ); } followAsync( - cb: (prev: T) => Promise>, + cb: (prev: T) => Promise> ): Promise> { return this.switchCase>>( (value) => cb(value), - async (error) => new ResultError(error), + async (error) => new ResultError(error) ); } } diff --git a/firebase-vscode/src/stubs/inquirer-stub.js b/firebase-vscode/src/stubs/inquirer-stub.js index 5416fbc23b6..ede76f517d8 100644 --- a/firebase-vscode/src/stubs/inquirer-stub.js +++ b/firebase-vscode/src/stubs/inquirer-stub.js @@ -1,9 +1,9 @@ const inquirer = module.exports; let pluginLogger = { - debug: () => {} + debug: () => {}, }; -const optionsKey = Symbol('options'); +const optionsKey = Symbol("options"); inquirer[optionsKey] = {}; inquirer.setInquirerOptions = (inquirerOptions) => { @@ -30,4 +30,4 @@ inquirer.prompt = async (prompts) => { return answers; }; -inquirer.registerPrompt = () => {}; \ No newline at end of file +inquirer.registerPrompt = () => {}; diff --git a/firebase-vscode/src/test/wdio.conf.ts b/firebase-vscode/src/test/default_wdio.conf.ts similarity index 54% rename from firebase-vscode/src/test/wdio.conf.ts rename to firebase-vscode/src/test/default_wdio.conf.ts index ed4852fec90..0c98862a00a 100644 --- a/firebase-vscode/src/test/wdio.conf.ts +++ b/firebase-vscode/src/test/default_wdio.conf.ts @@ -1,5 +1,20 @@ import type { Options } from "@wdio/types"; import * as path from "path"; +import * as child_process from "child_process"; + +export const vscodeConfigs = { + browserName: "vscode", + // Workaround for https://github.com/webdriverio-community/wdio-vscode-service/issues/101#issuecomment-1928159399 + browserVersion: "1.85.0", // also possible: "insiders" or a specific version e.g. "1.80.0" + "wdio:vscodeOptions": { + // points to directory where extension package.json is located + extensionPath: path.join(__dirname, "..", ".."), + // optional VS Code settings + userSettings: { + "editor.fontSize": 14, + }, + }, +}; export const config: Options.Testrunner = { runner: "local", @@ -11,15 +26,6 @@ export const config: Options.Testrunner = { }, }, - specs: ["./integration/**/*.ts"], - // Patterns to exclude. - exclude: [ - // 'path/to/excluded/files' - ], - - // Redirect noisy chromedriver and browser logs to ./logs - outputDir: "./logs", - capabilities: [ { browserName: "vscode", @@ -36,12 +42,18 @@ export const config: Options.Testrunner = { }, ], + // Redirect noisy chromedriver and browser logs to ./logs + outputDir: "./logs", + + afterTest: async function () { + // Reset the test_projects directory to its original state after each test. + // This ensures tests do not modify the test_projects directory. + child_process.execSync( + `git restore --source=HEAD -- ./src/test/test_projects` + ); + }, + services: ["vscode"], framework: "mocha", reporters: ["spec"], - - mochaOpts: { - ui: "bdd", - timeout: 60000, - }, }; diff --git a/firebase-vscode/src/test/empty_wdio.conf.ts b/firebase-vscode/src/test/empty_wdio.conf.ts new file mode 100644 index 00000000000..83b2ac29b0a --- /dev/null +++ b/firebase-vscode/src/test/empty_wdio.conf.ts @@ -0,0 +1,7 @@ +import { config as baseConfig } from "./default_wdio.conf"; +import type { Options } from "@wdio/types"; + +export const config: Options.Testrunner = { + ...baseConfig, + specs: ["./integration/empty/**/*.ts"], +}; diff --git a/firebase-vscode/src/test/fishfood_wdio.conf.ts b/firebase-vscode/src/test/fishfood_wdio.conf.ts new file mode 100644 index 00000000000..6833d52304f --- /dev/null +++ b/firebase-vscode/src/test/fishfood_wdio.conf.ts @@ -0,0 +1,21 @@ +import { merge } from "lodash"; +import { config as baseConfig, vscodeConfigs } from "./default_wdio.conf"; +import type { Options } from "@wdio/types"; +import * as path from "path"; + +const fishfoodPath = path.resolve( + process.cwd(), + "src/test/test_projects/fishfood" +); + +export const config: Options.Testrunner = { + ...baseConfig, + // Disable concurrency as tests may write to the same files. + maxInstances: 1, + specs: ["./integration/fishfood/**/*.ts"], + capabilities: [ + merge(vscodeConfigs, { + "wdio:vscodeOptions": { workspacePath: fishfoodPath }, + }), + ], +}; diff --git a/firebase-vscode/src/test/integration/project.ts b/firebase-vscode/src/test/integration/empty/project.ts similarity index 82% rename from firebase-vscode/src/test/integration/project.ts rename to firebase-vscode/src/test/integration/empty/project.ts index ea506e7412e..a758d707907 100644 --- a/firebase-vscode/src/test/integration/project.ts +++ b/firebase-vscode/src/test/integration/empty/project.ts @@ -1,14 +1,15 @@ import { browser } from "@wdio/globals"; -import { openFirebaseSidebar } from "../utils/sidebar"; +import { FirebaseSidebar } from "../../utils/page_objects/sidebar"; describe("Select project command", () => { it("waits until projects are loaded", async function () { const workbench = await browser.getWorkbench(); + const sidebar = new FirebaseSidebar(workbench); // This shouldn't be necessary. But at the moment, // users aren't loaded until the sidebar is opened – // which blocks the loading of projects. - openFirebaseSidebar(); + await sidebar.open(); const picker = await workbench.executeCommand("firebase.selectProject"); diff --git a/firebase-vscode/src/test/integration/empty/sidebar.ts b/firebase-vscode/src/test/integration/empty/sidebar.ts new file mode 100644 index 00000000000..47aa81c3a59 --- /dev/null +++ b/firebase-vscode/src/test/integration/empty/sidebar.ts @@ -0,0 +1,13 @@ +import { browser } from "@wdio/globals"; +import { FirebaseSidebar } from "../../utils/page_objects/sidebar"; + +it("Supports opening empty projects", async function () { + const workbench = await browser.getWorkbench(); + const sidebar = new FirebaseSidebar(workbench); + + await sidebar.open(); + + await sidebar.runInFirebaseViewContext(async (firebase) => { + await firebase.connectProjectLinkElement.waitForDisplayed(); + }); +}); diff --git a/firebase-vscode/src/test/integration/fishfood/deploy.ts b/firebase-vscode/src/test/integration/fishfood/deploy.ts new file mode 100644 index 00000000000..9e394cd2af9 --- /dev/null +++ b/firebase-vscode/src/test/integration/fishfood/deploy.ts @@ -0,0 +1,41 @@ +import { browser } from "@wdio/globals"; +import { FirebaseSidebar } from "../../utils/page_objects/sidebar"; +import { firebaseTest } from "../../utils/test_hooks"; +import { QuickPick } from "../../utils/page_objects/quick_picks"; +import { e2eSpy, getE2eSpyCalls } from "../mock"; + +firebaseTest("Can deploy services", async function () { + const workbench = await browser.getWorkbench(); + const sidebar = new FirebaseSidebar(workbench); + const quickPicks = new QuickPick(workbench); + + await sidebar.open(); + await sidebar.fdcDeployElement.click(); + + const servicePicks = await quickPicks + .findQuickPicks() + .then((picks) => picks.map((p) => p.getText())); + + expect(servicePicks).toEqual(["us-east"]); + + e2eSpy("deploy"); + + await quickPicks.okElement.click(); + + const connectorPicks = await quickPicks + .findQuickPicks() + .then((picks) => picks.map((p) => p.getText())); + + expect(connectorPicks).toEqual(["a"]); + + await quickPicks.okElement.click(); + + const args = await getE2eSpyCalls("deploy"); + + expect(args.length).toBe(1); + + expect(args[0].length).toBe(3); + expect(args[0][0]).toEqual(["dataconnect"]); + expect(args[0][1].project).toEqual("dart-firebase-admin"); + expect(args[0][2]).toEqual({ context: "us-east" }); +}); diff --git a/firebase-vscode/src/test/integration/fishfood/emulator_status.ts b/firebase-vscode/src/test/integration/fishfood/emulator_status.ts new file mode 100644 index 00000000000..a01831cc004 --- /dev/null +++ b/firebase-vscode/src/test/integration/fishfood/emulator_status.ts @@ -0,0 +1,28 @@ +import { browser } from "@wdio/globals"; +import { StatusBar } from "../../utils/page_objects/status_bar"; +import { firebaseTest } from "../../utils/test_hooks"; +import { FirebaseCommands } from "../../utils/page_objects/commands"; + +firebaseTest( + "If the emulator is not started, the status bar says so", + async function () { + const workbench = await browser.getWorkbench(); + const statusBar = new StatusBar(workbench); + + expect(await statusBar.emulatorsStatus.getText()).toBe( + "No emulator running" + ); + } +); + +firebaseTest("When emulators are running, lists them", async function () { + const workbench = await browser.getWorkbench(); + const commands = new FirebaseCommands(); + const statusBar = new StatusBar(workbench); + + await commands.startEmulators(); + + expect(await statusBar.emulatorsStatus.getText()).toContain( + "Emulators running" + ); +}); diff --git a/firebase-vscode/src/test/integration/fishfood/execution.ts b/firebase-vscode/src/test/integration/fishfood/execution.ts new file mode 100644 index 00000000000..4b52ca51630 --- /dev/null +++ b/firebase-vscode/src/test/integration/fishfood/execution.ts @@ -0,0 +1,47 @@ +import { browser } from "@wdio/globals"; +import { FirebaseSidebar } from "../../utils/page_objects/sidebar"; +import { ExecutionPanel } from "../../utils/page_objects/execution"; +import { addTearDown, firebaseTest } from "../../utils/test_hooks"; +import { EditorView } from "../../utils/page_objects/editor"; +import { queriesPath } from "../../utils/projects"; +import { FirebaseCommands } from "../../utils/page_objects/commands"; + +firebaseTest("Can execute queries", async function () { + const workbench = await browser.getWorkbench(); + const sidebar = new FirebaseSidebar(workbench); + const execution = new ExecutionPanel(workbench); + const editor = new EditorView(workbench); + const commands = new FirebaseCommands(); + + await sidebar.startEmulators(); + addTearDown(() => commands.stopEmulators()); + + // Update arguments + await execution.open(); + + await execution.setVariables(`{ + "id": "42" +}`); + + // Execute query + await editor.openFile(queriesPath); + + await editor.firstCodeLense.waitForDisplayed(); + await editor.firstCodeLense.click(); + + // Check the history entry + // TODO - revert history and result view after test + const item = await execution.history.getSelectedItem(); + + // TODO this should work without opening the sidebar + // While the emulator correctly starts without, some leftover state + // still needs the sidebar. + expect(await item.getLabel()).toBe("getPost"); + + // Waiting for the execution to finish + browser.waitUntil(async () => { + (await item.getStatus()) === "success"; + }); + + expect(await item.getDescription()).toContain('Arguments: { "id": "42" }'); +}); diff --git a/firebase-vscode/src/test/integration/fishfood/sidebar.ts b/firebase-vscode/src/test/integration/fishfood/sidebar.ts new file mode 100644 index 00000000000..4893174b265 --- /dev/null +++ b/firebase-vscode/src/test/integration/fishfood/sidebar.ts @@ -0,0 +1,20 @@ +import { browser } from "@wdio/globals"; +import { FirebaseSidebar } from "../../utils/page_objects/sidebar"; +import { firebaseTest } from "../../utils/test_hooks"; +import { FirebaseCommands } from "../../utils/page_objects/commands"; + +firebaseTest( + "If emulators are started before opening the sidebar, get a clean initial state", + async function () { + const workbench = await browser.getWorkbench(); + const commands = new FirebaseCommands(); + const sidebar = new FirebaseSidebar(workbench); + + await commands.startEmulators(); + + await sidebar.open(); + await sidebar.runInFirebaseViewContext(async (firebase) => { + await sidebar.stopEmulatorBtn.waitForDisplayed(); + }); + } +); diff --git a/firebase-vscode/src/test/integration/mock.ts b/firebase-vscode/src/test/integration/mock.ts new file mode 100644 index 00000000000..d1b066fb335 --- /dev/null +++ b/firebase-vscode/src/test/integration/mock.ts @@ -0,0 +1,37 @@ +import { addTearDown } from "../utils/test_hooks"; +import { deploy as cliDeploy } from "../../../../src/deploy"; +import * as vscode from "vscode"; + +export async function e2eSpy(key: string): Promise { + addTearDown(async () => { + await callBrowserSpyCommand(key, { spy: false }); + }); + + await callBrowserSpyCommand(key, { spy: true }); +} + +export function getE2eSpyCalls( + key: "deploy" +): Promise>>; +export async function getE2eSpyCalls(key: string): Promise>> { + return callBrowserSpyCommand( + key, + // We don't mock anything, just read the call list. + { spy: undefined } + ); +} + +async function callBrowserSpyCommand( + key: string, + args: { spy: boolean | undefined } +): Promise>> { + const result = await browser.executeWorkbench( + (vs: typeof vscode, key, args) => { + return vs.commands.executeCommand(key, args); + }, + `fdc-graphql.spy.${key}`, + args + ); + + return result as Array>; +} diff --git a/firebase-vscode/src/test/integration/sidebar.ts b/firebase-vscode/src/test/integration/sidebar.ts deleted file mode 100644 index 7c0468bc39b..00000000000 --- a/firebase-vscode/src/test/integration/sidebar.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser, expect } from "@wdio/globals"; -import { - openFirebaseSidebar, - switchToFirebaseSidebarFrame, -} from "../utils/sidebar"; - -it("Supports opening empty projects", async function () { - const workbench = await browser.getWorkbench(); - - await openFirebaseSidebar(); - await switchToFirebaseSidebarFrame(workbench); - - await expect($("vscode-button=Try a Quickstart!")).toBeDisplayed(); -}); diff --git a/firebase-vscode/src/test/suite/src/cli.test.ts b/firebase-vscode/src/test/suite/src/cli.test.ts index bbaa1b28352..c0bba42d425 100644 --- a/firebase-vscode/src/test/suite/src/cli.test.ts +++ b/firebase-vscode/src/test/suite/src/cli.test.ts @@ -9,7 +9,7 @@ firebaseSuite("getChannels", () => { async () => { const result = await getChannels(null); assert.deepStrictEqual(result, []); - }, + } ); firebaseTest("returns an empty array if no project provided", async () => { diff --git a/firebase-vscode/src/test/suite/src/core/config.test.ts b/firebase-vscode/src/test/suite/src/core/config.test.ts index af0b8e78c8c..0b5534e668a 100644 --- a/firebase-vscode/src/test/suite/src/core/config.test.ts +++ b/firebase-vscode/src/test/suite/src/core/config.test.ts @@ -49,7 +49,7 @@ firebaseSuite("getRootFolders", () => { const result = getRootFolders(); assert.deepEqual(result, []); - }, + } ); firebaseTest("returns an array of paths", () => { @@ -135,7 +135,7 @@ firebaseSuite("getConfigPath", () => { mock(workspace, { workspaceFolders: [aFolder, cFolder, bFolder] }); assert.deepEqual(getConfigPath(), c, "firebase.json is found first"); - }, + } ); firebaseTest("if no firebase config found, returns the first folder", () => { @@ -234,9 +234,9 @@ firebaseSuite("_readFirebaseConfig", () => { .startsWith( `FirebaseError: There was an error loading ${path.join( dir, - "firebase.json", - )}:`, - ), + "firebase.json" + )}:` + ) ); assert.equal(logs.error.length, 1); @@ -266,7 +266,7 @@ firebaseSuite("_readRC", () => { const config = _readRC(); assert.deepEqual( config?.requireValue.data.projects, - expectedConfig.projects, + expectedConfig.projects ); }); @@ -304,13 +304,13 @@ firebaseSuite("_readRC", () => { () => _readRC(), (thrown) => thrown.toString() === - `SyntaxError: Unexpected token 'i', "invalid json" is not valid JSON`, + `SyntaxError: Unexpected token 'i', "invalid json" is not valid JSON` ); assert.equal(logs.error.length, 1); assert.equal( logs.error[0], - `Unexpected token 'i', "invalid json" is not valid JSON`, + `Unexpected token 'i', "invalid json" is not valid JSON` ); }); }); @@ -371,9 +371,9 @@ firebaseSuite("registerConfig", () => { assert.deepEqual(firebaseConfig.value.requireValue.data, expectedConfig); assert.deepEqual( firebaseRC.value.requireValue.data.projects, - expectedRc.projects, + expectedRc.projects ); - }, + } ); firebaseTest( @@ -392,7 +392,7 @@ firebaseSuite("registerConfig", () => { assert.deepEqual(broker.sentLogs, []); firebaseRC.value = new ResultValue( - new RC(firebaseRC.value.requireValue.path, newRC), + new RC(firebaseRC.value.requireValue.path, newRC) ); assert.deepEqual(broker.sentLogs, [ @@ -412,7 +412,7 @@ firebaseSuite("registerConfig", () => { ], }, ]); - }, + } ); firebaseTest( @@ -432,7 +432,7 @@ firebaseSuite("registerConfig", () => { fs.writeFileSync( workspaces.byIndex(0).firebaseConfigPath, - JSON.stringify(newConfig), + JSON.stringify(newConfig) ); firebaseConfig.value = _readFirebaseConfig()!; @@ -453,7 +453,7 @@ firebaseSuite("registerConfig", () => { ], }, ]); - }, + } ); firebaseTest("supports undefined working directory", async () => { @@ -491,7 +491,7 @@ firebaseSuite("registerConfig", () => { pendingWatchers.push(watcher); return watcher; }, - }), + }) ); const disposable = await registerConfig(broker); @@ -513,7 +513,7 @@ firebaseSuite("registerConfig", () => { }); firebaseTest( - "listens to create/update/delete events on firebase.json/.firebaserc/firemat.yaml", + "listens to create/update/delete events on firebase.json/.firebaserc/dataconnect.yaml", async () => { const watcherListeners: Record< string, @@ -527,7 +527,7 @@ firebaseSuite("registerConfig", () => { function addFSListener( pattern: string, type: "create" | "update" | "delete", - cb: (uri: vscode.Uri) => void, + cb: (uri: vscode.Uri) => void ) { const listeners = (watcherListeners[pattern] ??= {}); assert.equal(watcherListeners[pattern]?.create, undefined); @@ -552,7 +552,7 @@ firebaseSuite("registerConfig", () => { dispose: () => {}, }); }, - }), + }) ); const broker = createTestBroker(); @@ -569,7 +569,7 @@ firebaseSuite("registerConfig", () => { index: number, file: string, content: string, - fireWatcher: () => void, + fireWatcher: () => void ) { assert.equal(broker.sentLogs.length, index); @@ -581,13 +581,13 @@ firebaseSuite("registerConfig", () => { function testRcEvent( event: "create" | "update" | "delete", - index: number, + index: number ) { testEvent( index, rcFile, JSON.stringify({ projects: { default: event } }), - () => rcListeners[event]!(vscode.Uri.file(rcFile)), + () => rcListeners[event]!(vscode.Uri.file(rcFile)) ); assert.deepEqual(broker.sentLogs[index].args[0].firebaseRC.projects, { @@ -597,13 +597,13 @@ firebaseSuite("registerConfig", () => { function testConfigEvent( event: "create" | "update" | "delete", - index: number, + index: number ) { testEvent( index, configFile, JSON.stringify({ emulators: { auth: { port: index } } }), - () => configListeners[event]!(vscode.Uri.file(configFile)), + () => configListeners[event]!(vscode.Uri.file(configFile)) ); assert.deepEqual(broker.sentLogs[index].args[0].firebaseJson, { diff --git a/firebase-vscode/src/test/suite/index.ts b/firebase-vscode/src/test/suite/src/core/index.ts similarity index 100% rename from firebase-vscode/src/test/suite/index.ts rename to firebase-vscode/src/test/suite/src/core/index.ts diff --git a/firebase-vscode/src/test/suite/src/dataconnect/config.test.ts b/firebase-vscode/src/test/suite/src/dataconnect/config.test.ts new file mode 100644 index 00000000000..5a0ff4c221f --- /dev/null +++ b/firebase-vscode/src/test/suite/src/dataconnect/config.test.ts @@ -0,0 +1,111 @@ +import assert from "assert"; +import { createTestBroker } from "../../../utils/broker"; +import { firebaseSuite, addDisposable } from "../../../utils/test_hooks"; +import { setupMockTestWorkspaces } from "../../../utils/workspace"; +import { dataConnectConfigs, registerDataConnectConfigs } from "../../../../data-connect/config"; +import { createTemporaryDirectory } from "../../../utils/fs"; +import { createFake, mock } from "../../../utils/mock"; +import { workspace } from "../../../../utils/test_hooks"; +import * as vscode from "vscode"; +import * as fs from "fs"; +import * as path from "path"; + +firebaseSuite("registerDataConnectConfigs", async () => { + firebaseSuite("handles getInitialData requests", async () => { + const broker = createTestBroker(); + setupMockTestWorkspaces({ + firebaseRc: { projects: { default: "my-project" } }, + firebaseConfig: { emulators: { dataconnect: { port: 9399 } } }, + }); + + const disposable = registerDataConnectConfigs(); + addDisposable(disposable); + + broker.simulateOn("getInitialData"); + + assert.deepEqual(broker.sentLogs, [ + { + message: "notifyFirebaseConfig", + args: [ + { + firebaseJson: { + emulators: { + dataconnect: { + port: 9399, + }, + }, + }, + firebaseRC: { + etags: {}, + projects: { + default: "my-project", + }, + targets: {}, + }, + }, + ], + }, + ]); + }); + + firebaseSuite( + "listens to create/update/delete events on firebase.json/.firebaserc/firemat.yaml", + async () => { + const watcherListeners: Record< + string, + { + create?: (uri: vscode.Uri) => void; + update?: (uri: vscode.Uri) => void; + delete?: (uri: vscode.Uri) => void; + } + > = {}; + + function addFSListener( + pattern: string, + type: "create" | "update" | "delete", + cb: (uri: vscode.Uri) => void, + ) { + const listeners = (watcherListeners[pattern] ??= {}); + assert.equal(watcherListeners[pattern]?.create, undefined); + listeners[type] = cb; + return { dispose: () => {} }; + } + + const dir = createTemporaryDirectory(); + mock( + workspace, + createFake({ + workspaceFolders: [ + createFake({ uri: vscode.Uri.file(dir) }), + ], + // Override "createFileSystemWatcher" to spy on the watchers. + createFileSystemWatcher: (pattern) => { + const file = (pattern as vscode.RelativePattern).pattern; + return createFake({ + onDidCreate: (cb) => addFSListener(file, "create", cb), + onDidChange: (cb) => addFSListener(file, "update", cb), + onDidDelete: (cb) => addFSListener(file, "delete", cb), + dispose: () => {}, + }); + }, + }), + ); + + const disposable = await registerDataConnectConfigs(); + addDisposable(disposable); + + const dataConnectListeners = watcherListeners["**/{dataconnect,connector}.yaml"]!; + const dataConnectFile = path.join(dir, "**/{dataconnect,connector}.yaml"); + + function testDataConnectEvent(event: "create" | "update" | "delete") { + fs.writeFileSync(dataConnectFile, `specVersion: ${event}`); + dataConnectListeners[event]!(vscode.Uri.file(dataConnectFile)); + + assert.deepEqual(dataConnectConfigs.value, [{}]); + } + + testDataConnectEvent("create"); + testDataConnectEvent("update"); + }, + ); +}); diff --git a/firebase-vscode/src/test/test_projects/.gitignore b/firebase-vscode/src/test/test_projects/.gitignore new file mode 100644 index 00000000000..532fdcead69 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/.gitignore @@ -0,0 +1,2 @@ +# Don't commit generated files +**/.dataconnect/ \ No newline at end of file diff --git a/firebase-vscode/src/test/test_projects/fishfood/.firebaserc b/firebase-vscode/src/test/test_projects/fishfood/.firebaserc new file mode 100644 index 00000000000..433140fb0b2 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/.firebaserc @@ -0,0 +1,8 @@ +{ + "projects": { + "default": "dart-firebase-admin" + }, + "targets": {}, + "etags": {}, + "dataconnectEmulatorConfig": {} +} \ No newline at end of file diff --git a/firebase-vscode/src/test/test_projects/fishfood/.gitignore b/firebase-vscode/src/test/test_projects/fishfood/.gitignore new file mode 100644 index 00000000000..dbb58ffbfa3 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/.gitignore @@ -0,0 +1,66 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +firebase-debug.log* +firebase-debug.*.log* + +# Firebase cache +.firebase/ + +# Firebase config + +# Uncomment this if you'd like others to create their own Firebase project. +# For a team working on the same Firebase project(s), it is recommended to leave +# it commented so all members can deploy to the same project(s) in .firebaserc. +# .firebaserc + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env diff --git a/firebase-vscode/src/test/test_projects/fishfood/.graphqlrc b/firebase-vscode/src/test/test_projects/fishfood/.graphqlrc new file mode 100644 index 00000000000..1f7cc9f639f --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/.graphqlrc @@ -0,0 +1,9 @@ +schema: + - ./dataconnect/schema/**/*.gql + - ./dataconnect/.dataconnect/**/*.gql +documents: + - ./dataconnect/connectors/**/*.gql +extensions: + endpoints: + default: + url: http://127.0.0.1:8080/__/graphql diff --git a/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/connector.yaml b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/connector.yaml new file mode 100644 index 00000000000..d6e6b5dbb3e --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/connector.yaml @@ -0,0 +1,4 @@ +connectorId: "a" +authMode: "PUBLIC" +generate?: + outputDir: ../../a_connector_js_sdk diff --git a/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/mutations.gql b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/mutations.gql new file mode 100644 index 00000000000..2fb9447ab34 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/mutations.gql @@ -0,0 +1,10 @@ +mutation createPost($id: String, $content: String) @auth(level: PUBLIC) { + post_insert(data: { id: $id, content: $content }) +} +mutation deletePost($id: String!) @auth(level: PUBLIC) { + post_delete(id: $id) +} + +mutation createComment($id: String, $content: String) @auth(level: PUBLIC) { + comment_insert(data: { id: $id, content: $content }) +} diff --git a/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/queries.gql b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/queries.gql new file mode 100644 index 00000000000..86b19536f80 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/connectors/a/queries.gql @@ -0,0 +1,22 @@ +query getPost($id: String!) @auth(level: PUBLIC) { + post(id: $id) { + content + comments: comments_on_post { + id + content + } + } +} + +query listPostsForUser($userId: String!) @auth(level: PUBLIC) { + posts(where: { id: { eq: $userId } }) { + id + content + } +} + +query listPostsOnlyId @auth(level: PUBLIC) { + posts { + id + } +} diff --git a/firebase-vscode/src/test/test_projects/fishfood/dataconnect/dataconnect.yaml b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/dataconnect.yaml new file mode 100644 index 00000000000..960fac366fb --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/dataconnect.yaml @@ -0,0 +1,11 @@ +specVersion: v1alpha +serviceId: us-east +connectorDirs: + - ./connectors/a +schema: + source: ./schema + datasource: + postgresql: + database: "my-database" + cloudSql: + instanceId: "dataconnect-test" diff --git a/firebase-vscode/src/test/test_projects/fishfood/dataconnect/schema/schema.gql b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/schema/schema.gql new file mode 100644 index 00000000000..6f3a5c03a31 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/dataconnect/schema/schema.gql @@ -0,0 +1,10 @@ +type Post @table { + id: String! + content: String! +} + +type Comment @table { + id: String! + content: String! + post: Post! +} diff --git a/firebase-vscode/src/test/test_projects/fishfood/firebase.json b/firebase-vscode/src/test/test_projects/fishfood/firebase.json new file mode 100644 index 00000000000..5060f798c51 --- /dev/null +++ b/firebase-vscode/src/test/test_projects/fishfood/firebase.json @@ -0,0 +1,18 @@ +{ + "dataconnect": { + "source": "./dataconnect", + "location": "api" + }, + "emulators": { + "auth": { + "port": 9099 + }, + "dataconnect": { + "port": 9399 + }, + "ui": { + "enabled": false + }, + "singleProjectMode": true + } +} diff --git a/firebase-vscode/src/test/utils/broker.ts b/firebase-vscode/src/test/utils/broker.ts index 0a0e86163be..ae210477c82 100644 --- a/firebase-vscode/src/test/utils/broker.ts +++ b/firebase-vscode/src/test/utils/broker.ts @@ -2,7 +2,7 @@ import { BrokerImpl, Receiver } from "../../messaging/broker"; import { MessageParamsMap, WebviewToExtensionParamsMap, -} from "../../messaging/protocol"; +} from "../../../common/messaging/protocol"; import { createFake } from "./mock"; export type SentLog = { message: string; args: any[] }; diff --git a/firebase-vscode/src/test/utils/fs.ts b/firebase-vscode/src/test/utils/fs.ts index b4423ae1eb3..df2b447f8f9 100644 --- a/firebase-vscode/src/test/utils/fs.ts +++ b/firebase-vscode/src/test/utils/fs.ts @@ -14,10 +14,10 @@ export type CreateTemporaryDirectoryOptions = { let _increment = 0; export function createTemporaryDirectory( - options: CreateTemporaryDirectoryOptions = {}, + options: CreateTemporaryDirectoryOptions = {} ) { const debugLabel = `${ - options.debugLabel || "firemat-test" + options.debugLabel || "data-connect-test" }-${Date.now()}-${_increment++}`; const relativeDir = options.parent @@ -49,7 +49,8 @@ export function createFile( } fs.writeFileSync(filePath, content); - addTearDown(() => fs.rmSync(filePath)); + // Using "force" in case the file is deleted before tearDown is ran + addTearDown(() => fs.rmSync(filePath, { force: true })); return filePath; } diff --git a/firebase-vscode/src/test/utils/mock.ts b/firebase-vscode/src/test/utils/mock.ts index 858ac2ce50c..c64b6f8ead9 100644 --- a/firebase-vscode/src/test/utils/mock.ts +++ b/firebase-vscode/src/test/utils/mock.ts @@ -23,9 +23,12 @@ export function createFake(overrides: Partial = {}): T { return proxy as T; } +/** A function designed to mock objects inside unit tests */ export function mock(ref: Ref, value: Partial | undefined) { const current = ref.value; - addTearDown(() => (ref.value = current)); + addTearDown(() => { + ref.value = current; + }); const fake = !value ? value : createFake(value); diff --git a/firebase-vscode/src/test/utils/page_objects/commands.ts b/firebase-vscode/src/test/utils/page_objects/commands.ts new file mode 100644 index 00000000000..db2f79f4ca9 --- /dev/null +++ b/firebase-vscode/src/test/utils/page_objects/commands.ts @@ -0,0 +1,20 @@ +import * as vscode from "vscode"; +import { addTearDown } from "../test_hooks"; + +export class FirebaseCommands { + async startEmulators() { + await browser.executeWorkbench(async (vs: typeof vscode) => { + return vs.commands.executeCommand("firebase.emulators.start"); + }); + + // Stop emulators after tests to ensure follow-up tests + // start from a clean slate + addTearDown(() => this.stopEmulators()); + } + + async stopEmulators() { + await browser.executeWorkbench(async (vs: typeof vscode) => { + return vs.commands.executeCommand("firebase.emulators.stop"); + }); + } +} diff --git a/firebase-vscode/src/test/utils/page_objects/editor.ts b/firebase-vscode/src/test/utils/page_objects/editor.ts new file mode 100644 index 00000000000..d096474b8e3 --- /dev/null +++ b/firebase-vscode/src/test/utils/page_objects/editor.ts @@ -0,0 +1,26 @@ +import * as vscode from "vscode"; +import { Workbench } from "wdio-vscode-service"; +import { addTearDown } from "../test_hooks"; + +export class EditorView { + constructor(readonly workbench: Workbench) {} + + private readonly editorView = this.workbench.getEditorView(); + + get firstCodeLense() { + return this.editorView.elem.$(".codelens-decoration"); + } + + get codeLensesElements() { + return this.editorView.elem.$$(".codelens-decoration"); + } + + async openFile(path: string) { + // TODO - close opened editors after tests + return browser.executeWorkbench(async (vs: typeof vscode, path) => { + const doc = await vs.workspace.openTextDocument(path); + + return vs.window.showTextDocument(doc, 1, false); + }, path); + } +} diff --git a/firebase-vscode/src/test/utils/page_objects/execution.ts b/firebase-vscode/src/test/utils/page_objects/execution.ts new file mode 100644 index 00000000000..bc75680681c --- /dev/null +++ b/firebase-vscode/src/test/utils/page_objects/execution.ts @@ -0,0 +1,114 @@ +import { Workbench } from "wdio-vscode-service"; +import { findWebviewWithTitle, runInFrame } from "../webviews"; + +export class ExecutionPanel { + constructor(readonly workbench: Workbench) { + this.history = new HistoryView(workbench); + } + + readonly history: HistoryView; + + async open(): Promise { + await this.workbench.executeCommand( + "data-connect-execution-configuration.focus" + ); + } + + async setVariables(variables: string): Promise { + // TODO revert to the original value after test + + await this.runInConfigurationContext(async (configs) => { + await configs.variablesTextarea.setValue(variables); + }); + } + + async runInConfigurationContext( + cb: (configs: ConfigurationView) => Promise + ): Promise { + const [a, b] = await findWebviewWithTitle("Configuration"); + + return runInFrame(a, () => + runInFrame(b, () => cb(new ConfigurationView(this.workbench))) + ); + } +} + +export class ConfigurationView { + constructor(readonly workbench: Workbench) {} + + get variablesView() { + return $(`vscode-panel-view[aria-labelledby="tab-1"]`); + } + + get variablesTextarea() { + return this.variablesView.$("textarea"); + } +} + +export class HistoryView { + constructor(readonly workbench: Workbench) {} + + get itemsElement() { + return $$(".monaco-list-row"); + } + + get selectedItemElement() { + return $(".monaco-list-row.selected"); + } + + async getSelectedItem(): Promise { + return new HistoryItem(await this.selectedItemElement); + } + + async getItems(): Promise { + // Array.from as workaround to https://github.com/webdriverio-community/wdio-vscode-service/issues/100#issuecomment-1932468126 + const items = Array.from(await this.itemsElement); + + return items.map((item) => new HistoryItem(item)); + } +} + +export class HistoryItem { + constructor(private readonly elem: WebdriverIO.Element) {} + + get iconElement() { + return this.elem.$(".custom-view-tree-node-item-icon"); + } + + get labelElement() { + return this.elem.$(".label-name"); + } + + get descriptionElement() { + return this.elem.$(".label-description"); + } + + async getStatus(): Promise<"success" | "error" | "pending" | "warning"> { + const icon = await this.iconElement; + const clazz = await icon.getAttribute("class"); + + const classes = clazz.split(" "); + + if (classes.includes("codicon-pass")) { + return "success"; + } + + if (classes.includes("codicon-warning")) { + return "warning"; + } + + if (classes.includes("codicon-close")) { + return "error"; + } + + return "pending"; + } + + async getLabel() { + return this.labelElement.getText(); + } + + async getDescription() { + return this.descriptionElement.getText(); + } +} diff --git a/firebase-vscode/src/test/utils/page_objects/quick_picks.ts b/firebase-vscode/src/test/utils/page_objects/quick_picks.ts new file mode 100644 index 00000000000..c27adffc1dd --- /dev/null +++ b/firebase-vscode/src/test/utils/page_objects/quick_picks.ts @@ -0,0 +1,20 @@ +import { Workbench } from "wdio-vscode-service"; + +/* Workaround to workbench not exposing a way to get an InputBox + * without triggering a command. */ + +export class QuickPick { + constructor(readonly workbench: Workbench) {} + + get okElement() { + return $("a=OK"); + } + + async findQuickPicks() { + // TODO find a way to use InputBox manually that does not trigger a build error + return await $(".quick-input-widget") + .$(".quick-input-list") + .$(".monaco-list-rows") + .$$(".monaco-list-row"); + } +} diff --git a/firebase-vscode/src/test/utils/page_objects/sidebar.ts b/firebase-vscode/src/test/utils/page_objects/sidebar.ts new file mode 100644 index 00000000000..da564c77c9c --- /dev/null +++ b/firebase-vscode/src/test/utils/page_objects/sidebar.ts @@ -0,0 +1,70 @@ +import { Workbench } from "wdio-vscode-service"; +import { findWebviewWithTitle, runInFrame } from "../webviews"; +import * as vscode from "vscode"; + +export class FirebaseSidebar { + constructor(readonly workbench: Workbench) {} + + async open() { + await browser.executeWorkbench((vs: typeof vscode) => { + return vs.commands.executeCommand( + "firebase.dataConnect.explorerView.focus" + ); + }); + } + + get hostBtn() { + return $("vscode-button=Host your Web App"); + } + + get startEmulatorBtn() { + return $("vscode-button=Launch Data Connect emulator"); + } + + get stopEmulatorBtn() { + return $("vscode-button=Click to stop the emulators"); + } + + get fdcDeployElement() { + return $(".codicon-cloud-upload"); + } + + /** Starts the emulators and waits for the emulators to be started. + * + * This starts emulators by clicking on the button instead of using + * the command. + */ + async startEmulators() { + await this.open(); + + await this.runInFirebaseViewContext(async () => { + await this.startEmulatorBtn.click(); + + // Wait for the emulators to be started + await this.stopEmulatorBtn.waitForDisplayed(); + }); + } + + /** Runs the callback in the context of the Firebase view, within the sidebar */ + async runInFirebaseViewContext( + cb: (firebase: FirebaseView) => Promise + ): Promise { + const [a, b] = await findWebviewWithTitle("Config"); + + return runInFrame(a, () => + runInFrame(b, () => cb(new FirebaseView(this.workbench))) + ); + } +} + +export class FirebaseView { + constructor(readonly workbench: Workbench) {} + + get userIconElement() { + return $(".codicon-account"); + } + + get connectProjectLinkElement() { + return $("vscode-link=Connect a Firebase project"); + } +} diff --git a/firebase-vscode/src/test/utils/page_objects/status_bar.ts b/firebase-vscode/src/test/utils/page_objects/status_bar.ts new file mode 100644 index 00000000000..dbcfe0516c3 --- /dev/null +++ b/firebase-vscode/src/test/utils/page_objects/status_bar.ts @@ -0,0 +1,13 @@ +import { Workbench } from "wdio-vscode-service"; + +export class StatusBar { + constructor(readonly workbench: Workbench) {} + + get emulatorsStatus() { + return $('[id="firebase.firebase-vscode.emulators"]'); + } + + get currentProjectElement() { + return $('[id="firebase.firebase-vscode.projectPicker"]'); + } +} diff --git a/firebase-vscode/src/test/utils/projects.ts b/firebase-vscode/src/test/utils/projects.ts new file mode 100644 index 00000000000..735952af52e --- /dev/null +++ b/firebase-vscode/src/test/utils/projects.ts @@ -0,0 +1,11 @@ +import * as path from "path"; + +export const mutationsPath = path.resolve( + process.cwd(), + "src/test/test_projects/fishfood/dataconnect/connectors/a/mutations.gql" +); + +export const queriesPath = path.resolve( + process.cwd(), + "src/test/test_projects/fishfood/dataconnect/connectors/a/queries.gql" +); diff --git a/firebase-vscode/src/test/utils/test_hooks.ts b/firebase-vscode/src/test/utils/test_hooks.ts index fc8fa6b3648..a808ae7e082 100644 --- a/firebase-vscode/src/test/utils/test_hooks.ts +++ b/firebase-vscode/src/test/utils/test_hooks.ts @@ -1,6 +1,6 @@ import * as vscode from "vscode"; -let tearDowns: Array<() => void> = []; +let tearDowns: Array<() => void | Promise> = []; /** Registers a logic to run after the current test ends. * @@ -8,7 +8,7 @@ let tearDowns: Array<() => void> = []; * * The callback is bound to the suite, and when that suite/test ends, the callback is unregistered. */ -export function addTearDown(cb: () => void) { +export function addTearDown(cb: () => void | Promise) { tearDowns.push(cb); } @@ -22,39 +22,39 @@ export function addDisposable(disposable: vscode.Disposable | undefined) { } } -let setups: Array<() => void> = []; +let setups: Array<() => void | Promise> = []; /** Registers initialization logic to run before every tests in that suite. * * The callback is bound to the suite, and when that suite ends, the callback is unregistered. */ -export function setup(cb: () => void) { +export function setup(cb: () => void | Promise) { setups.push(cb); } /** A custom "test" to work around "afterEach" not working with the current configs */ export function firebaseTest( description: string, - cb: () => void | Promise, + cb: (this: Mocha.Context) => void | Promise ) { // Since tests may execute in any order, we dereference the list of setup callbacks // to unsure that other suites' setups don't affect this test. const testSetups = [...setups]; const testTearDowns = [...tearDowns]; - test(description, async () => { + test(description, async function () { // Tests may call addTearDown to register a callback to run after the test ends. // We make sure those callbacks are applied only to this test. const previousTearDowns = tearDowns; tearDowns = testTearDowns; - runGuarded(testSetups); + await runGuarded(testSetups); try { - await cb(); + await cb.call(this); } finally { + await runGuarded(testTearDowns.reverse()); tearDowns = previousTearDowns; - runGuarded(testTearDowns.reverse()); } }); } @@ -82,16 +82,16 @@ export function firebaseSuite(description: string, cb: () => void) { * * If at least one error is thrown, the first one is rethrown. */ -function runGuarded(callbacks: Array<() => void>) { +async function runGuarded(callbacks: Array<() => void | Promise>) { let firstError: Error | undefined; - callbacks.forEach((cb) => { + for (const cb of callbacks) { try { - cb(); + await cb(); } catch (e) { firstError ??= e; } - }); + } if (firstError) { throw firstError; diff --git a/firebase-vscode/src/test/utils/webviews.ts b/firebase-vscode/src/test/utils/webviews.ts new file mode 100644 index 00000000000..094828fe553 --- /dev/null +++ b/firebase-vscode/src/test/utils/webviews.ts @@ -0,0 +1,46 @@ +/** An utility to find a Webview with a given name. + * + * This uses a nested loop because the webviews are nested in iframes. + * + * Returns the path of elements pointing to the titled webview. + * This is typically then sent to [runInFrame]. + */ +export async function findWebviewWithTitle(title: string) { + const start = Date.now(); + + /* Keep running until at least 5 seconds have passed. */ + while (Date.now() - start < 5000) { + // Using Array.from because $$ returns a fake array object + const iFrames = Array.from(await $$("iframe.webview.ready")); + + for (const iframe of iFrames) { + try { + await browser.switchToFrame(iframe); + + const frameWithTitle = $(`iframe[title="${title}"]`); + if (await frameWithTitle.isExisting()) { + return [iframe, await frameWithTitle]; + } + } finally { + await browser.switchToParentFrame(); + } + } + } + + throw new Error(`Could not find webview with title: ${title}`); +} + +export async function runInFrame( + element: object, + cb: () => Promise +): Promise { + await browser.switchToFrame(element); + + // Using try/finally to ensure we switch back to the parent frame + // no matter if the test passes or fails. + try { + return await cb(); + } finally { + await browser.switchToParentFrame(); + } +} diff --git a/firebase-vscode/src/test/utils/workspace.ts b/firebase-vscode/src/test/utils/workspace.ts index 39c69a7aa30..3206778e09f 100644 --- a/firebase-vscode/src/test/utils/workspace.ts +++ b/firebase-vscode/src/test/utils/workspace.ts @@ -59,7 +59,7 @@ export function setupMockTestWorkspaces( workspaceFolders: workspaceFolders.map((workspace) => createFake({ uri: vscode.Uri.file(workspace.path), - }), + }) ), createFileSystemWatcher: (...args) => { // We don't mock watchers, so we defer to the real implementation. diff --git a/firebase-vscode/src/utils/env.ts b/firebase-vscode/src/utils/env.ts new file mode 100644 index 00000000000..4d2a6da47cb --- /dev/null +++ b/firebase-vscode/src/utils/env.ts @@ -0,0 +1,2 @@ +// Set by the `package.json` file +export const isTest = !!process.env.TEST; diff --git a/firebase-vscode/src/utils/graphql.ts b/firebase-vscode/src/utils/graphql.ts new file mode 100644 index 00000000000..603b6c72d13 --- /dev/null +++ b/firebase-vscode/src/utils/graphql.ts @@ -0,0 +1,12 @@ +import * as graphql from "graphql"; +import * as vscode from "vscode"; + +export function locationToRange(location: graphql.Location): vscode.Range { + // -1 because Range uses 0-based indexing but Location uses 1-based indexing + return new vscode.Range( + location.startToken.line - 1, + location.startToken.column - 1, + location.endToken.line - 1, + location.endToken.column - 1 + ); +} diff --git a/firebase-vscode/src/utils/promise.ts b/firebase-vscode/src/utils/promise.ts new file mode 100644 index 00000000000..e0b2f13069e --- /dev/null +++ b/firebase-vscode/src/utils/promise.ts @@ -0,0 +1,18 @@ +export function cancelableThen( + promise: Promise, + then: (t: T) => void, +): { cancel: () => void } { + let canceled = false; + function cancel() { + canceled = true; + } + + promise.then((t) => { + if (!canceled) { + then(t); + } + return t; + }); + + return { cancel }; +} diff --git a/firebase-vscode/src/utils/signal.ts b/firebase-vscode/src/utils/signal.ts index 3075cbc3805..8a45af35cd1 100644 --- a/firebase-vscode/src/utils/signal.ts +++ b/firebase-vscode/src/utils/signal.ts @@ -2,7 +2,7 @@ import { Signal } from "@preact/signals-react"; /** Waits for a signal value to not be undefined */ export async function firstWhereDefined( - signal: Signal + signal: Signal, ): Promise { const result = await firstWhere(signal, (v) => v !== undefined); return result!; @@ -11,7 +11,7 @@ export async function firstWhereDefined( /** Waits for a signal value to respect a certain condition */ export function firstWhere( signal: Signal, - predicate: (value: T) => boolean + predicate: (value: T) => boolean, ): Promise { return new Promise((resolve) => { const dispose = signal.subscribe((value) => { @@ -29,7 +29,7 @@ export function firstWhere( */ export function onChange( signal: Signal, - callback: (previous: T, value: T) => void + callback: (previous: T, value: T) => void, ): () => void { var previous: { value: T } | undefined = undefined; diff --git a/firebase-vscode/src/utils/test_hooks.ts b/firebase-vscode/src/utils/test_hooks.ts index 43aef36118b..2d55094c2c7 100644 --- a/firebase-vscode/src/utils/test_hooks.ts +++ b/firebase-vscode/src/utils/test_hooks.ts @@ -5,3 +5,43 @@ export type Ref = { value: T }; export type Workspace = typeof vscode.workspace; export const workspace: Ref = { value: vscode.workspace }; + +export interface Mockable any> { + call: (...args: Parameters) => ReturnType; + + dispose(): void; +} + +export function createE2eMockable any>( + cb: T, + key: string, + fallback: () => ReturnType +): Mockable { + let value: (...args: Parameters) => ReturnType = cb; + const calls: Parameters[] = []; + + // A command used by e2e tests to replace the `deploy` function with a mock. + // It is not part of the public API. + const command = vscode.commands.registerCommand( + `fdc-graphql.spy.${key}`, + (options?: { spy?: boolean }) => { + // Explicitly checking true/false to not update the value if `undefined`. + if (options?.spy === false) { + value = cb; + } else if (options?.spy === true) { + value = fallback; + } + + return calls; + } + ); + + return { + call: (...args: Parameters) => { + calls.push(args); + + return value(...args); + }, + dispose: command.dispose, + }; +} diff --git a/firebase-vscode/src/webview.ts b/firebase-vscode/src/webview.ts index 68eb093c86c..41d00e161a2 100644 --- a/firebase-vscode/src/webview.ts +++ b/firebase-vscode/src/webview.ts @@ -95,7 +95,11 @@ export function registerWebview(params: RegisterWebviewParams): Disposable { params.onResolve?.(webviewView.webview); } - return vscode.window.registerWebviewViewProvider(params.name, { - resolveWebviewView, - }); + return vscode.window.registerWebviewViewProvider( + params.name, + { + resolveWebviewView, + }, + { webviewOptions: { retainContextWhenHidden: true } } + ); } diff --git a/firebase-vscode/tsconfig.json b/firebase-vscode/tsconfig.json index d13ff9f0c38..8ea95f16b7f 100644 --- a/firebase-vscode/tsconfig.json +++ b/firebase-vscode/tsconfig.json @@ -15,5 +15,8 @@ "rootDirs": ["src", "../src", "common"], "strict": false /* enable all strict type-checking options */ }, + "ts-node": { + "esm": true + }, "include": ["src/**/*", "common/**/*"] } diff --git a/firebase-vscode/webpack.common.js b/firebase-vscode/webpack.common.js index 5e7a9da1da2..b251eafde0c 100644 --- a/firebase-vscode/webpack.common.js +++ b/firebase-vscode/webpack.common.js @@ -14,7 +14,13 @@ const extensionConfig = { name: "extension", target: "node", // vscode extensions run in webworker context for VS Code web 📖 -> https://webpack.js.org/configuration/target/#target - entry: "./src/extension.ts", // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + entry: { + extension: "./src/extension.ts", + server: { + import: "./src/data-connect/language-server.ts", + filename: "[name].js", + }, + }, // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ output: { // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ path: path.resolve(__dirname, "dist"), @@ -23,8 +29,45 @@ const extensionConfig = { devtoolModuleFilenameTemplate: "../[resource-path]", }, devtool: "source-map", + externalsType: "commonjs", externals: { - vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + vscode: "vscode", // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + // avoid dynamic depencies from @vue/compiler-sfc + squirrelly: "squirrelly", + teacup: "teacup", + "teacup/lib/express": "teacup/lib/express", + "coffee-script": "coffee-script", + marko: "marko", + slm: "slm", + vash: "vash", + plates: "plates", + "babel-core": "babel-core", + htmling: "htmling", + ractive: "ractive", + mote: "mote", + eco: "eco", + jqtpl: "jqtpl", + hamljs: "hamljs", + jazz: "jazz", + hamlet: "hamlet", + whiskers: "whiskers", + "haml-coffee": "haml-coffee", + "hogan.js": "hogan.js", + templayed: "templayed", + walrus: "walrus", + mustache: "mustache", + just: "just", + ect: "ect", + toffee: "toffee", + twing: "twing", + dot: "dot", + "bracket-template": "bracket-template", + velocityjs: "velocityjs", + "dustjs-linkedin": "dustjs-linkedin", + atpl: "atpl", + liquor: "liquor", + twig: "twig", + handlebars: "handlebars", }, resolve: { // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader @@ -33,15 +76,18 @@ const extensionConfig = { extensions: [".ts", ".js"], alias: { // provides alternate implementation for node module and source files - "marked-terminal": path.resolve(__dirname, 'src/stubs/empty-class.js'), + "marked-terminal": path.resolve(__dirname, "src/stubs/empty-class.js"), // "ora": path.resolve(__dirname, 'src/stubs/empty-function.js'), - "commander": path.resolve(__dirname, 'src/stubs/empty-class.js'), - "inquirer": path.resolve(__dirname, 'src/stubs/inquirer-stub.js'), - "inquirer-autocomplete-prompt": path.resolve(__dirname, 'src/stubs/inquirer-stub.js'), + commander: path.resolve(__dirname, "src/stubs/empty-class.js"), + inquirer: path.resolve(__dirname, "src/stubs/inquirer-stub.js"), + "inquirer-autocomplete-prompt": path.resolve( + __dirname, + "src/stubs/inquirer-stub.js" + ), // This is used for Github deploy to hosting - will need to restore // or find another solution if we add that feature. - "libsodium-wrappers": path.resolve(__dirname, 'src/stubs/empty-class.js'), - "marked": path.resolve(__dirname, 'src/stubs/marked.js') + "libsodium-wrappers": path.resolve(__dirname, "src/stubs/empty-class.js"), + marked: path.resolve(__dirname, "src/stubs/marked.js"), }, fallback: { // Webpack 5 no longer polyfills Node.js core modules automatically. @@ -93,13 +139,13 @@ const extensionConfig = { // a temporary fix. { search: /module\.exports\.([a-zA-Z0-9]+)\(/g, - replace: (match) => match.replace('module.exports.', '') + replace: (match) => match.replace("module.exports.", ""), }, // cloudtasks.ts type casts so there's an " as [type]" before the // starting paren to call the function { search: /module\.exports\.([a-zA-Z0-9]+) as/g, - replace: (match) => match.replace('module.exports.', '') + replace: (match) => match.replace("module.exports.", ""), }, // Disallow starting . to ensure it doesn't conflict with // module.exports @@ -107,8 +153,8 @@ const extensionConfig = { // such as "exports.something = value" { search: /[^\.]exports\.([a-zA-Z0-9]+)\(/g, - replace: (match) => match.replace('exports.', '') - } + replace: (match) => match.replace("exports.", ""), + }, ], }, }, @@ -122,18 +168,23 @@ const extensionConfig = { // TODO: copy the dependency into dist instead of removing them via search/replace. { search: 'RE2 = require("re2");', - replace: 'RE2 = null;' + replace: "RE2 = null;", }, // firebase-tools/node_modules/superstatic/lib/middleware/index.js // Stub out these runtime requirements // TODO: copy the dependencies into dist instead of removing them via search/replace. { - search: 'const mware = require("./" + _.kebabCase(name))(spec, config);', - replace: 'return "";' - } + search: + 'const mware = require("./" + _.kebabCase(name))(spec, config);', + replace: 'return "";', + }, ], - } - } + }, + }, + { + test: /.node$/, + loader: "node-loader", + }, ], }, plugins: [ @@ -151,24 +202,24 @@ const extensionConfig = { // firebase-tools/src/parseTriggers.ts { from: "*.js", - to: './', + to: "./", context: "../src/deploy/functions/runtimes/node", }, // Copy cross-env-shell.js used to run predeploy scripts // to ensure they work in Windows { from: "../node_modules/cross-env/dist", - to: './cross-env/dist', + to: "./cross-env/dist", }, ], - }) + }), ], infrastructureLogging: { level: "log", // enables logging required for problem matchers }, }; -function makeWebConfig(entryName) { +function makeWebConfig(entryName) { return { name: entryName, mode: "none", // this leaves the source code as close as possible to the original (when packaging we set this to 'production') @@ -231,7 +282,7 @@ function makeWebConfig(entryName) { ], devtool: "nosources-source-map", }; -}; +} // Using the workaround for the typings-for-css-modules-loader race condition // issue. It doesn't seem like you have to put any actual code into the hook, diff --git a/firebase-vscode/webpack.dev.js b/firebase-vscode/webpack.dev.js index d6fb16eed92..e30006a25eb 100644 --- a/firebase-vscode/webpack.dev.js +++ b/firebase-vscode/webpack.dev.js @@ -1,6 +1,8 @@ const { merge } = require("webpack-merge"); const common = require("./webpack.common.js"); -module.exports = common.map(config => merge(config, { - mode: "development" -})); +module.exports = common.map((config) => + merge(config, { + mode: "development", + }) +); diff --git a/firebase-vscode/webpack.prod.js b/firebase-vscode/webpack.prod.js index 75a648edc85..7f844f999e0 100644 --- a/firebase-vscode/webpack.prod.js +++ b/firebase-vscode/webpack.prod.js @@ -2,15 +2,20 @@ const { merge } = require("webpack-merge"); const TerserPlugin = require("terser-webpack-plugin"); const common = require("./webpack.common.js"); -module.exports = common.map(config => merge(config, { - mode: "production", - optimization: { - minimize: true, - minimizer: [new TerserPlugin({ - terserOptions: { - keep_classnames: /AbortSignal/, - keep_fnames: /AbortSignal/ - } - }), '...'] - } -})); +module.exports = common.map((config) => + merge(config, { + mode: "production", + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + terserOptions: { + keep_classnames: /AbortSignal/, + keep_fnames: /AbortSignal/, + }, + }), + "...", + ], + }, + }) +); diff --git a/firebase-vscode/webviews/DataConnectExecutionResultsApp.tsx b/firebase-vscode/webviews/DataConnectExecutionResultsApp.tsx new file mode 100644 index 00000000000..72eac34ad3f --- /dev/null +++ b/firebase-vscode/webviews/DataConnectExecutionResultsApp.tsx @@ -0,0 +1,144 @@ +import React, { useEffect, useState } from "react"; +import { broker } from "./globals/html-broker"; +import { Label } from "./components/ui/Text"; +import style from "./data-connect-execution-results.entry.scss"; +import { DataConnectResults } from "../common/messaging/protocol"; +import { SerializedError } from "../common/error"; +import { ExecutionResult, GraphQLError } from "graphql"; +import { isExecutionResult } from "../common/graphql"; + +// Prevent webpack from removing the `style` import above +style; + +export function DataConnectExecutionResultsApp() { + const [dataConnectResults, setResults] = useState< + DataConnectResults | undefined + >(undefined); + const results: ExecutionResult | SerializedError | undefined = + dataConnectResults?.results; + + useEffect(() => { + broker.on("notifyDataConnectResults", setResults); + }, []); + + if (!dataConnectResults || !results) { + return null; + } + + let response: unknown; + let errorsDisplay: JSX.Element | undefined; + + if (isExecutionResult(results)) { + // We display the response even if there are errors, just + // in case the user wants to see the response anyway. + response = results.data; + const errors = results.errors; + + if (errors && errors.length !== 0) { + errorsDisplay = ( + <> + + {errors.map((error) => ( + + ))} + + ); + } + } else { + // We don't display a "response" here, because this is an error + // that occurred without returning a valid GraphQL response. + errorsDisplay = ; + } + + let resultsDisplay: JSX.Element | undefined; + if (response) { + resultsDisplay = ( + <> + + +

{JSON.stringify(response, null, 2)}
+ + + ); + } + + return ( + <> + {errorsDisplay} + {resultsDisplay} + + + +
{dataConnectResults.query}
+
+ + + +
{dataConnectResults.args}
+
+ + ); +} + +/** A view for when executions either fail before the HTTP request is sent, + * or when the HTTP response is an error. + */ +function InternalErrorView({ error }: { error: SerializedError }) { + return ( +

+ + { + // Stacktraces usually already include the message, so we only + // display the message if there is no stacktrace. + error.stack ? : error.message + } + {error.cause && ( + <> +
+

Cause:

+ + + )} +

+ ); +} + +/** A view for when an execution returns status 200 but contains errors. */ +function GraphQLErrorView({ error }: { error: GraphQLError }) { + let pathDisplay: JSX.Element | undefined; + if (error.path) { + // Renders the path as a series of kbd elements separated by commas + pathDisplay = ( + <> + {error.path?.map((path, index) => { + const item = {path}; + + return index === 0 ? item : <>, {item}; + })}{" "} + + ); + } + + return ( +

+ {pathDisplay} + {error.message} + {error.stack && } +

+ ); +} + +function StackView({ stack }: { stack: string }) { + return ( + + {stack} + + ); +} diff --git a/firebase-vscode/webviews/SidebarApp.tsx b/firebase-vscode/webviews/SidebarApp.tsx index f24ac9084d4..953879b00e1 100644 --- a/firebase-vscode/webviews/SidebarApp.tsx +++ b/firebase-vscode/webviews/SidebarApp.tsx @@ -75,7 +75,7 @@ function SidebarContent(props: { webLogger.debug( "notifyFirebaseConfig", JSON.stringify(firebaseJson), - JSON.stringify(firebaseRC), + JSON.stringify(firebaseRC) ); if (firebaseJson?.value?.hosting) { webLogger.debug("Detected firebase.json"); @@ -102,7 +102,7 @@ function SidebarContent(props: { } else { setHostingInitState(null); } - }, + } ); broker.on("notifyHostingDeploy", ({ success }) => { @@ -168,13 +168,16 @@ function SidebarContent(props: { /> )} { + // disable emulator panel for now, as we have an individual emulator panel in the FDC section + } + {/* { // Only load the emulator panel if we have a user, firebase.json and this isn't Monospace // The user login requirement can be removed in the future but the panel will have to // be restricted to full-offline emulation only. !!user && firebaseJson && firebaseJson.value && ( ) - } + } */} ); } diff --git a/firebase-vscode/webviews/components/EmulatorPanel.tsx b/firebase-vscode/webviews/components/EmulatorPanel.tsx index 46003f1ebb7..729c3b05d2b 100644 --- a/firebase-vscode/webviews/components/EmulatorPanel.tsx +++ b/firebase-vscode/webviews/components/EmulatorPanel.tsx @@ -1,39 +1,18 @@ -import { - VSCodeButton, - VSCodeCheckbox, - VSCodeDivider, - VSCodeLink, - VSCodeProgressRing, - VSCodeTextField, -} from "@vscode/webview-ui-toolkit/react"; -import React, { useState } from "react"; +import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react"; +import React, { useEffect } from "react"; import { Spacer } from "./ui/Spacer"; -import { broker, useBrokerListener } from "../globals/html-broker"; +import { broker, useBroker, useBrokerListener } from "../globals/html-broker"; import { PanelSection } from "./ui/PanelSection"; import { FirebaseConfig } from "../../../src/firebaseConfig"; -import { - RunningEmulatorInfo, - EmulatorUiSelections, -} from "../../common/messaging/types"; -import { VSCodeDropdown } from "@vscode/webview-ui-toolkit/react"; -import { VSCodeOption } from "@vscode/webview-ui-toolkit/react"; import { EmulatorInfo } from "../../../src/emulator/types"; import { webLogger } from "../globals/web-logger"; - -const DEFAULT_EMULATOR_UI_SELECTIONS: EmulatorUiSelections = { - projectId: "demo-something", - importStateFolderPath: "", - exportStateOnExit: false, - mode: "all", - debugLogging: false, -}; +import { DEFAULT_EMULATOR_UI_SELECTIONS } from "../../common/messaging/protocol"; /** * Emulator panel component for the VSCode extension. Handles start/stop, import/export. */ export function EmulatorPanel({ firebaseJson, - projectId, }: { firebaseJson: FirebaseConfig; projectId?: string | undefined; @@ -41,48 +20,26 @@ export function EmulatorPanel({ if (!firebaseJson) { throw Error("Expected a valid FirebaseConfig."); } - const defaultState = DEFAULT_EMULATOR_UI_SELECTIONS; - if (projectId) { - defaultState.projectId = getProjectIdForMode(projectId, defaultState.mode); - } - const [emulatorUiSelections, setEmulatorUiSelections] = - useState(defaultState); - - webLogger.debug( - "initial state ui selections:" + JSON.stringify(emulatorUiSelections) - ); - function setEmulatorUiSelectionsAndSaveToWorkspace( - uiSelections: EmulatorUiSelections - ) { - // TODO(christhompson): Save UI selections in the current workspace. - // Requires context object. - setEmulatorUiSelections(uiSelections); - } - const [showEmulatorProgressIndicator, setShowEmulatorProgressIndicator] = - useState(false); - - // TODO(christhompson): Load UI selections from the current workspace. - // Requires context object. - // TODO(christhompson): Check if the emulators are running on extension start. - const [runningEmulatorInfo, setRunningEmulatorInfo] = - useState(); - - useBrokerListener("notifyEmulatorsStopped", () => { - setShowEmulatorProgressIndicator(false); - webLogger.debug(`notifyEmulatorsStopped received in sidebar`); - setRunningEmulatorInfo(null); - }); + const emulatorUiSelections = + useBroker("notifyEmulatorUiSelectionsChanged", { + initialRequest: "getEmulatorUiSelections", + }) ?? DEFAULT_EMULATOR_UI_SELECTIONS; + + useEffect(() => { + if (emulatorUiSelections) { + webLogger.debug( + `Emulator UI selections: ${JSON.stringify(emulatorUiSelections)}` + ); + } + }, [emulatorUiSelections]); - useBrokerListener("notifyEmulatorStartFailed", () => { - setShowEmulatorProgressIndicator(false); - webLogger.debug(`notifyEmulatorStartFailed received in sidebar`); - }); + const emulators = useBroker("notifyEmulatorStateChanged", { + initialRequest: "getEmulatorInfos", + }) ?? { status: "stopped", infos: undefined }; + const runningEmulatorInfo = emulators.infos; - useBrokerListener("notifyRunningEmulatorInfo", (info: RunningEmulatorInfo) => { - setShowEmulatorProgressIndicator(false); - webLogger.debug(`notifyRunningEmulatorInfo received in sidebar`); - setRunningEmulatorInfo(info); - }); + const showEmulatorProgressIndicator = + emulators.status === "starting" || emulators.status === "stopping"; useBrokerListener("notifyEmulatorImportFolder", ({ folder }) => { webLogger.debug( @@ -92,7 +49,7 @@ export function EmulatorPanel({ ...emulatorUiSelections, importStateFolderPath: folder, }; - setEmulatorUiSelectionsAndSaveToWorkspace(newSelections); + broker.send("updateEmulatorUiSelections", newSelections); }); function launchEmulators() { @@ -108,7 +65,7 @@ export function EmulatorPanel({ } if (!firebaseJson) { // TODO(christhompson): Consider using a default config in the case that - // firebase.json doesnt exist. + // firebase.json doesn't exist. broker.send("showMessage", { msg: "Missing firebase.json", options: { @@ -118,65 +75,17 @@ export function EmulatorPanel({ }); return; } - setShowEmulatorProgressIndicator(true); - broker.send("launchEmulators", { - emulatorUiSelections, - }); - } - - function stopEmulators() { - setShowEmulatorProgressIndicator(true); - broker.send("stopEmulators"); - } - - /** - * Called when import folder changes. - */ - function selectedImportFolder(event: any) { - event.preventDefault(); - broker.send("selectEmulatorImportFolder"); - } - - function toggleExportOnExit() { - const selections: EmulatorUiSelections = emulatorUiSelections; - selections.exportStateOnExit = !selections.exportStateOnExit; - webLogger.debug(`toggle export on exit : ${!selections.exportStateOnExit}`); - setEmulatorUiSelectionsAndSaveToWorkspace(selections); - } - - function emulatorModeChanged(event: React.ChangeEvent) { - webLogger.debug("emulatorModeChanged: " + event.target.value); - const newSelections: EmulatorUiSelections = { ...emulatorUiSelections }; - newSelections.mode = event.target.value as typeof emulatorUiSelections.mode; - newSelections.projectId = getProjectIdForMode( - projectId, - newSelections.mode - ); - setEmulatorUiSelectionsAndSaveToWorkspace(newSelections); - } - - function clearImportFolder() { - console.log(`clearImportFolder`); - const newSelections = { - ...emulatorUiSelections, - importStateFolderPath: "", - }; - setEmulatorUiSelectionsAndSaveToWorkspace(newSelections); - } - - // Make it pretty for the screen. Filter out the logging emulator since it's - // an implementation detail. - // TODO(christhompson): Add more info and sort this. - function formatEmulatorRunningInfo(emulatorInfos: EmulatorInfo[]): string { - return emulatorInfos - .map((info) => info.name) - .filter((name) => name !== "logging") - .join("
"); + broker.send("launchEmulators"); } return ( - -

Launch the Emulator Suite

+ {/* TODO(christhompson): Insert some education links or tooltips here. */} @@ -185,97 +94,47 @@ export function EmulatorPanel({ {emulatorUiSelections.projectId} - Import emulator state from directory: - - - selectedImportFolder(event)} - /> - - - Clear - - - toggleExportOnExit()} - > - Export emulator state on exit - - - {showEmulatorProgressIndicator ? : <>} - Emulator "mode" - emulatorModeChanged(event)} - > - All emulators - {!!firebaseJson.hosting && ( - Only hosting - )} - {runningEmulatorInfo ? ( <> - - - The emulators are running. + Running Emulators: + {!!runningEmulatorInfo.uiUrl && ( - - View them in the Emulator Suite UI - + <> + + + View them in the Emulator Suite UI + + )} - Running Emulators: - -
- - stopEmulators()}> + broker.send("stopEmulators")}> Click to stop the emulators ) : ( launchEmulators()} - disabled={showEmulatorProgressIndicator ? true : false} + disabled={showEmulatorProgressIndicator} > - Launch emulators + Launch Data Connect emulator )}
); } -/** - * Formats a project ID with a demo prefix if we're in offline mode, or uses the - * regular ID if we're in hosting only mode. - */ -function getProjectIdForMode( - projectId: string | undefined, - mode: "all" | "hosting" -): string { - if (!projectId) { - return "demo-something"; - } - if (mode === "hosting") { - return projectId; - } - return "demo-" + projectId; +// Make it pretty for the screen. Filter out the logging emulator since it's +// an implementation detail. +// TODO(christhompson): Add more info and sort this. +function FormatEmulatorRunningInfo({ infos }: { infos: EmulatorInfo[] }) { + return ( +
    + {infos + .filter((info) => info.name !== "logging") + .map((info, index) => ( +
  • {info.name}
  • + ))} +
+ ); } diff --git a/firebase-vscode/webviews/components/InitPanel.tsx b/firebase-vscode/webviews/components/InitPanel.tsx index b9363a63a30..75351eb1fff 100644 --- a/firebase-vscode/webviews/components/InitPanel.tsx +++ b/firebase-vscode/webviews/components/InitPanel.tsx @@ -1,4 +1,7 @@ -import { VSCodeButton, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"; +import { + VSCodeButton, + VSCodeProgressRing, +} from "@vscode/webview-ui-toolkit/react"; import cn from "classnames"; import { Body, Label } from "./ui/Text"; @@ -12,13 +15,13 @@ import { HostingInitState } from "../webview-types"; export function InitFirebasePanel({ onHostingInit, hostingInitState, - setHostingInitState + setHostingInitState, }: { onHostingInit: Function; hostingInitState: HostingInitState; setHostingInitState: (state: HostingInitState) => void; }) { - if (hostingInitState === 'pending') { + if (hostingInitState === "pending") { return ( @@ -39,7 +42,7 @@ export function InitFirebasePanel({ { onHostingInit(); - setHostingInitState('pending'); + setHostingInitState("pending"); }} > {TEXT.INIT_HOSTING_BUTTON} diff --git a/firebase-vscode/webviews/components/ui/PanelSection.tsx b/firebase-vscode/webviews/components/ui/PanelSection.tsx index 67ef6932281..b9c87018fc7 100644 --- a/firebase-vscode/webviews/components/ui/PanelSection.tsx +++ b/firebase-vscode/webviews/components/ui/PanelSection.tsx @@ -10,11 +10,13 @@ export function PanelSection({ title, children, isLast, -}: { + style, +}: React.PropsWithChildren<{ title?: ReactNode; - children: ReactNode; isLast?: boolean; -}) { + + style?: React.CSSProperties; +}>) { let [isExpanded, setExpanded] = useState(true); return ( @@ -24,6 +26,7 @@ export function PanelSection({ aria-label={(isExpanded ? "Hide" : "Toggle") + " " + title} className={cn(styles.panelExpando, isExpanded && styles.isExpanded)} onClick={() => setExpanded(!isExpanded)} + style={style} > {title} @@ -34,7 +37,7 @@ export function PanelSection({ {title && } {children} - {!isLast && } + {!isLast && } )} diff --git a/firebase-vscode/webviews/components/ui/SplitButton.scss b/firebase-vscode/webviews/components/ui/SplitButton.scss index 951be50ce25..056ec6dc113 100644 --- a/firebase-vscode/webviews/components/ui/SplitButton.scss +++ b/firebase-vscode/webviews/components/ui/SplitButton.scss @@ -30,7 +30,7 @@ top: var(--divider-vert-margin); width: 1px; height: calc(100% - var(--divider-vert-margin) * 2); - content: ''; + content: ""; background-color: var(--vscode-button-foreground); opacity: 0.2; pointer-events: none; diff --git a/firebase-vscode/webviews/data-connect-execution-configuration.entry.scss b/firebase-vscode/webviews/data-connect-execution-configuration.entry.scss new file mode 100644 index 00000000000..a75bec79bce --- /dev/null +++ b/firebase-vscode/webviews/data-connect-execution-configuration.entry.scss @@ -0,0 +1,59 @@ +@import "./globals/index.scss"; + +textarea { + border-radius: 5px; + background: var(--vscode-editor-background); + + // Prevent resizes as it is fullscreen + resize: none; + + font-family: monospace; + font-size: var(--type-ramp-base-font-size); + line-height: var(--type-ramp-base-line-height); + + padding: calc(var(--container-padding) / 2) var(--container-padding); + + color: var(--vscode-input-foreground); + background: var(--vscode-editor-background); + + border: none; + outline: none; +} + +textarea:focus { + border: none; + outline: none; +} + +html, +body, +body > *, +body > * > * { + height: 100%; +} + +vscode-panel-view { + padding-left: 0; + padding-right: 0; +} + +.variable { + display: grid; + align-items: stretch; + justify-content: stretch; +} + +.authentication { + display: flex; + flex-direction: column; + + span + * { + margin-top: 3px; + } +} + +// Make sure hidden panels are correctly hidden +// even if we override the display type for type purposes. +vscode-panel-view[hidden] { + display: none; +} diff --git a/firebase-vscode/webviews/data-connect-execution-configuration.entry.tsx b/firebase-vscode/webviews/data-connect-execution-configuration.entry.tsx new file mode 100644 index 00000000000..2be97f7ffad --- /dev/null +++ b/firebase-vscode/webviews/data-connect-execution-configuration.entry.tsx @@ -0,0 +1,117 @@ +import React, { useEffect, useRef, useState } from "react"; +import { createRoot } from "react-dom/client"; +import style from "./data-connect-execution-configuration.entry.scss"; +import { + VSCodeDropdown, + VSCodeOption, + VSCodePanels, + VSCodePanelTab, + VSCodePanelView, + VSCodeTextArea, +} from "@vscode/webview-ui-toolkit/react"; +import { broker } from "./globals/html-broker"; +import { Spacer } from "./components/ui/Spacer"; +import { UserMockKind } from "../common/messaging/protocol"; + +const root = createRoot(document.getElementById("root")!); +root.render(); + +export function DataConnectExecutionArgumentsApp() { + function handleVariableChange(e: React.ChangeEvent) { + broker.send("definedDataConnectArgs", e.target.value); + } + + // Due to webview-ui-toolkit adding shadow-roots, css alone is not + // enough to customize the look of the panels. + // We use some imperative code to manually inject some style. + // This is not ideal, but it's the best we can do for now. + // Those changes are needed for the textarea to fill the available + // space, to have a good scroll behavior. + const ref = useRef(undefined); + useEffect(() => { + if (!ref.current) { + return; + } + + const style = document.createElement("style"); + style.append(` + .tabpanel { + display: grid; + align-items: stretch; + justify-content: stretch; + } + `); + + ref.current.shadowRoot!.append(style); + }, []); + + return ( + + VARIABLES + AUTHENTICATION + + + + + + + + ); +} + +function AuthUserMockForm() { + const [selectedKind, setSelectedMockKind] = useState( + UserMockKind.ADMIN + ); + const [claims, setClaims] = useState( + `{\n "email_verified": true,\n "sub": "exampleUserId"\n}` + ); + + useEffect(() => { + broker.send("notifyAuthUserMockChange", { + kind: selectedKind, + claims: selectedKind === UserMockKind.AUTHENTICATED ? claims : undefined, + }); + }, [selectedKind, claims]); + + let expandedForm: JSX.Element | undefined; + if (selectedKind === UserMockKind.AUTHENTICATED) { + expandedForm = ( + <> + + Claim and values + setClaims(event.target.value)} + /> + + ); + } + + return ( + <> + Run as + setSelectedMockKind(event.target.value)} + > + Admin + + Unauthenticated + + + Authenticated + + + {expandedForm} + + ); +} diff --git a/firebase-vscode/webviews/data-connect-execution-results.entry.scss b/firebase-vscode/webviews/data-connect-execution-results.entry.scss new file mode 100644 index 00000000000..244c9e8371f --- /dev/null +++ b/firebase-vscode/webviews/data-connect-execution-results.entry.scss @@ -0,0 +1,37 @@ +@import "./globals/index.scss"; + +.l1 { + text-transform: capitalize; +} + +body { + padding: 0; + + // Somehow #root does not seem to be usable within this file. + & > div { + min-width: calc(100% - (var(--container-padding) * 2)); + // Fill the horizontal space, and on text overflow, + // have the text-overflow expand the horizontal space + display: inline-flex !important; + // If one item overflows horizontally, have all items + // use the same width for consistency + align-items: stretch; + + padding: var(--container-padding); + } + + code { + pre { + background-color: var(--vscode-input-background); + color: var(--vscode-input-foreground); + padding: 1em; + margin-top: 0; + font-family: monospace; + } + } + + // Placing in "body" to override the global styles + p { + margin-bottom: 1em; + } +} diff --git a/firebase-vscode/webviews/data-connect-execution-results.entry.tsx b/firebase-vscode/webviews/data-connect-execution-results.entry.tsx new file mode 100644 index 00000000000..5e9bff2df46 --- /dev/null +++ b/firebase-vscode/webviews/data-connect-execution-results.entry.tsx @@ -0,0 +1,6 @@ +import React from "react"; +import { createRoot } from "react-dom/client"; +import { DataConnectExecutionResultsApp } from "./DataConnectExecutionResultsApp"; + +const root = createRoot(document.getElementById("root")!); +root.render(); diff --git a/firebase-vscode/webviews/data-connect.entry.tsx b/firebase-vscode/webviews/data-connect.entry.tsx new file mode 100644 index 00000000000..e8b43ee9d5f --- /dev/null +++ b/firebase-vscode/webviews/data-connect.entry.tsx @@ -0,0 +1,69 @@ +import React from "react"; +import { createRoot } from "react-dom/client"; +import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"; +import { Spacer } from "./components/ui/Spacer"; +import styles from "./globals/index.scss"; +import { TEXT } from "./globals/ux-text"; +import { broker, useBroker } from "./globals/html-broker"; +import { Heading, Label } from "./components/ui/Text"; +import { PanelSection } from "./components/ui/PanelSection"; + +// Prevent webpack from removing the `style` import above +styles; + +const root = createRoot(document.getElementById("root")!); +root.render(); + +function DataConnect() { + const emulatorsStatus = + useBroker("notifyEmulatorStateChanged", { + initialRequest: "getEmulatorInfos", + })?.status ?? "stopped"; + + return ( + <> + +

+ Start the FDC emulator. See also:{" "} + + Working with the emulator + +

+ + {emulatorsStatus === "running" || emulatorsStatus === "stopping" ? ( + broker.send("stopEmulators")} + disabled={emulatorsStatus === "stopping"} + > + Stop emulator + + ) : ( + broker.send("launchEmulators")} + disabled={emulatorsStatus === "starting"} + > + Start emulator + + )} + + + +

+ Deploy FDC services and connectors to production. See also:{" "} + Deploying +

+ + broker.send("fdc.deploy")}> + Deploy + + + broker.send("fdc.deploy-all")} + > + Deploy all + +
+ + ); +} diff --git a/firebase-vscode/webviews/globals/html-broker.ts b/firebase-vscode/webviews/globals/html-broker.ts index 2399374ef96..59c6d2b9867 100644 --- a/firebase-vscode/webviews/globals/html-broker.ts +++ b/firebase-vscode/webviews/globals/html-broker.ts @@ -4,6 +4,7 @@ import { ExtensionToWebviewParamsMap, WebviewToExtensionParamsMap, } from "../../common/messaging/protocol"; +import { webLogger } from "./web-logger"; export function useBrokerListener< MessageT extends keyof ExtensionToWebviewParamsMap @@ -54,6 +55,23 @@ export class HtmlBroker extends Broker< window.addEventListener("message", (event) => this.executeListeners(event.data) ); + + // Log uncaught errors and unhandled rejections + window.addEventListener("error", (event) => { + webLogger.error( + event.error.message, + event.error.stack && "\n", + event.error.stack + ); + }); + window.addEventListener("unhandledrejection", (event) => { + webLogger.error( + "Unhandled rejected promise:", + event.reason, + event.reason.stack && "\n", + event.reason.stack + ); + }); } sendMessage( diff --git a/firebase-vscode/webviews/globals/ux-text.ts b/firebase-vscode/webviews/globals/ux-text.ts index 354a86a1896..4a2977ca7f5 100644 --- a/firebase-vscode/webviews/globals/ux-text.ts +++ b/firebase-vscode/webviews/globals/ux-text.ts @@ -1,8 +1,9 @@ export const TEXT = { INIT_HOSTING_BUTTON: "Host your Web App", - INIT_HOSTING_DESCRIPTION: "Deploy your app with Firebase Hosting" - + ", a high-performance static web host backed by a global CDN", + INIT_HOSTING_DESCRIPTION: + "Deploy your app with Firebase Hosting" + + ", a high-performance static web host backed by a global CDN", INIT_HOSTING_PROGRESS: "Initializing...", @@ -30,5 +31,17 @@ export const TEXT = { DEPLOYING_IN_PROGRESS: "Deploying...", - DEPLOYING_PROGRESS_FRAMEWORK: "Deploying... this may take a few minutes." + DEPLOYING_PROGRESS_FRAMEWORK: "Deploying... this may take a few minutes.", + + DEPLOY_FDC_ENABLED: "Deploy to production", + + DEPLOY_FDC_DISABLED: "Not connected to production", + + DEPLOY_FDC_DESCRIPTION: + "Deploy schema and operations to your production instance.", + + CONNECT_TO_INSTANCE: "Connect to instance", + + CONNECT_TO_INSTANCE_DESCRIPTION: + "Connect to the emulator or a production instance.", }; diff --git a/firebase-vscode/webviews/globals/web-logger.ts b/firebase-vscode/webviews/globals/web-logger.ts index b6468e9b2b8..c8f98188e52 100644 --- a/firebase-vscode/webviews/globals/web-logger.ts +++ b/firebase-vscode/webviews/globals/web-logger.ts @@ -1,7 +1,7 @@ import { broker } from "./html-broker"; -type Level = 'debug' | 'info' | 'error'; -const levels: Level[] = ['debug', 'info', 'error']; +type Level = "debug" | "info" | "error"; +const levels: Level[] = ["debug", "info", "error"]; type WebLogger = Record void>; @@ -9,7 +9,7 @@ const tempObject = {}; for (const level of levels) { tempObject[level] = (...args: string[]) => - broker.send('writeLog', { level, args }); + broker.send("writeLog", { level, args }); } // Recast it now that it's populated. diff --git a/firebase-vscode/webviews/sidebar.entry.scss b/firebase-vscode/webviews/sidebar.entry.scss index 07196d8bf56..560df56b36f 100644 --- a/firebase-vscode/webviews/sidebar.entry.scss +++ b/firebase-vscode/webviews/sidebar.entry.scss @@ -47,7 +47,7 @@ a:not(:hover):not(:focus) { display: flex; flex-direction: column; } - + &-test { display: flex; } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 4e3dafb8688..68cf1493a11 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -9,6 +9,7 @@ "version": "13.7.5", "license": "MIT", "dependencies": { + "@google-cloud/cloud-sql-connector": "^1.2.3", "@google-cloud/pubsub": "^3.0.1", "abort-controller": "^3.0.0", "ajv": "^6.12.6", @@ -33,8 +34,9 @@ "form-data": "^4.0.0", "fs-extra": "^10.1.0", "fuzzy": "^0.1.3", + "gaxios": "^6.1.1", "glob": "^7.1.2", - "google-auth-library": "^7.11.0", + "google-auth-library": "^9.7.0", "inquirer": "^8.2.6", "inquirer-autocomplete-prompt": "^2.0.1", "jsonwebtoken": "^9.0.0", @@ -50,12 +52,15 @@ "open": "^6.3.0", "ora": "^5.4.1", "p-limit": "^3.0.1", + "path": "0.12.7", + "pg": "^8.11.3", "portfinder": "^1.0.32", "progress": "^2.0.3", "proxy-agent": "^6.3.0", "retry": "^0.13.1", "rimraf": "^3.0.0", "semver": "^7.5.2", + "sql-formatter": "^15.3.0", "stream-chain": "^2.2.4", "stream-json": "^1.7.3", "strip-ansi": "^6.0.1", @@ -107,6 +112,8 @@ "@types/multer": "^1.4.3", "@types/node": "^18.19.1", "@types/node-fetch": "^2.5.12", + "@types/pg": "^8.11.2", + "@types/prettier": "^3.0.0", "@types/progress": "^2.0.3", "@types/puppeteer": "^5.4.2", "@types/react": "^18.2.58", @@ -137,7 +144,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsdoc": "^48.0.1", "eslint-plugin-prettier": "^5.1.3", - "firebase": "^9.16.0", "firebase-admin": "^11.5.0", "firebase-functions": "^4.3.1", "google-discovery-to-swagger": "^2.1.0", @@ -975,54 +981,6 @@ "node": ">=16" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz", - "integrity": "sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz", - "integrity": "sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.16.tgz", - "integrity": "sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.17.16", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz", @@ -1039,3048 +997,2628 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz", - "integrity": "sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz", - "integrity": "sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz", - "integrity": "sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz", - "integrity": "sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz", - "integrity": "sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz", - "integrity": "sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz", - "integrity": "sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==", - "cpu": [ - "loong64" - ], + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz", - "integrity": "sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz", - "integrity": "sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==", - "cpu": [ - "ppc64" - ], + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz", - "integrity": "sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==", - "cpu": [ - "riscv64" - ], + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz", - "integrity": "sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==", - "cpu": [ - "s390x" - ], + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz", - "integrity": "sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==", - "cpu": [ - "x64" - ], + "node_modules/@exodus/schemasafe": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.9.tgz", + "integrity": "sha512-dGGHpb61hLwifAu7sotuHFDBw6GTdpG8aKC0fsK17EuTzMRvUrH7lEAr6LTJ+sx3AZYed9yZ77rltVDHyg2hRg==", + "dev": true + }, + "node_modules/@fastify/busboy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.1.0.tgz", + "integrity": "sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "text-decoding": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10.17.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz", - "integrity": "sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } + "node_modules/@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", + "dev": true }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz", - "integrity": "sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==", - "cpu": [ - "x64" - ], + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==", + "dev": true + }, + "node_modules/@firebase/component": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.1.tgz", + "integrity": "sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@firebase/util": "1.9.0", + "tslib": "^2.1.0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz", - "integrity": "sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==", - "cpu": [ - "x64" - ], + "node_modules/@firebase/component/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@firebase/database": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.1.tgz", + "integrity": "sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.1", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz", - "integrity": "sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==", - "cpu": [ - "arm64" - ], + "node_modules/@firebase/database-compat": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.1.tgz", + "integrity": "sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@firebase/component": "0.6.1", + "@firebase/database": "0.14.1", + "@firebase/database-types": "0.10.1", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.0", + "tslib": "^2.1.0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz", - "integrity": "sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==", - "cpu": [ - "ia32" - ], + "node_modules/@firebase/database-compat/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@firebase/database-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.1.tgz", + "integrity": "sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz", - "integrity": "sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==", - "cpu": [ - "x64" - ], + "node_modules/@firebase/database/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@firebase/logger/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@firebase/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.0.tgz", + "integrity": "sha512-oeoq/6Sr9btbwUQs5HPfeww97bf7qgBbkknbDTXpRaph2LZ23O9XLCE5tJy856SBmGQfO4xBZP8dyryLLM2nSQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "tslib": "^2.1.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, + "node_modules/@firebase/util/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "node_modules/@google-cloud/cloud-sql-connector": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@google-cloud/cloud-sql-connector/-/cloud-sql-connector-1.2.3.tgz", + "integrity": "sha512-Johb/LuBv/s0EaoaoeliQCxdjuUN0of6PjdDhBxE7wEeyabli/4wtHOQChm6xtSA/i65ziBrSwSkBnnyHv/yIA==", + "dependencies": { + "@googleapis/sqladmin": "^14.0.0", + "gaxios": "^6.1.1", + "google-auth-library": "^9.2.0", + "p-throttle": "^5.1.0" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=14" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@google-cloud/firestore": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.4.2.tgz", + "integrity": "sha512-f7xFwINJveaqTFcgy0G4o2CBPm0Gv9lTGQ4dQt+7skwaHs3ytdue9ma8oQZYXKNoWcAoDIMQ929Dk0KOIocxFg==", "dev": true, + "optional": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^3.5.2", + "protobufjs": "^7.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/@google-cloud/firestore/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", + "dev": true, + "optional": true }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@google-cloud/firestore/node_modules/protobufjs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "dev": true, + "hasInstallScript": true, + "optional": true, "dependencies": { - "ms": "2.1.2" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", "dev": true, + "optional": true, "dependencies": { - "type-fest": "^0.20.2" + "arrify": "^2.0.0", + "extend": "^3.0.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/@google-cloud/precise-date": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.3.tgz", + "integrity": "sha512-+SDJ3ZvGkF7hzo6BGa8ZqeK3F6Z4+S+KviC9oOK+XCs3tfMyJCh/4j93XIWINgMMDIh9BgEvlw4306VxlXIlYA==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.4.0" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "node_modules/@google-cloud/projectify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.0.1.tgz", + "integrity": "sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ==", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true, + "node_modules/@google-cloud/promisify": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz", + "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/@exodus/schemasafe": { - "version": "1.0.0-rc.9", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.9.tgz", - "integrity": "sha512-dGGHpb61hLwifAu7sotuHFDBw6GTdpG8aKC0fsK17EuTzMRvUrH7lEAr6LTJ+sx3AZYed9yZ77rltVDHyg2hRg==", - "dev": true - }, - "node_modules/@fastify/busboy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.1.0.tgz", - "integrity": "sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==", - "dev": true, + "node_modules/@google-cloud/pubsub": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-3.0.1.tgz", + "integrity": "sha512-dznNbRd/Y8J0C0xvdvCPi3B1msK/dj/Nya+NQZ2doUOLT6eoa261tBwk9umOQs5L5GKcdlqQKbBjrNjDYVbzQA==", "dependencies": { - "text-decoding": "^1.0.0" + "@google-cloud/paginator": "^4.0.0", + "@google-cloud/precise-date": "^2.0.0", + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.0.0", + "@types/duplexify": "^3.6.0", + "@types/long": "^4.0.0", + "arrify": "^2.0.0", + "extend": "^3.0.2", + "google-auth-library": "^8.0.2", + "google-gax": "^3.0.1", + "is-stream-ended": "^0.1.4", + "lodash.snakecase": "^4.1.1", + "p-defer": "^3.0.0" }, "engines": { - "node": ">=10.17.0" + "node": ">=12.0.0" } }, - "node_modules/@firebase/analytics": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.9.1.tgz", - "integrity": "sha512-ARXtNHDrjDhVrs5MqmFDpr5yyCw89r1eHLd+Dw9fotAufxL1WTmo6O9bJqKb7QulIJaA84vsFokA3NaO2DNCnQ==", - "dev": true, + "node_modules/@google-cloud/pubsub/node_modules/@google-cloud/paginator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.0.tgz", + "integrity": "sha512-wNmCZl+2G2DmgT/VlF+AROf80SoaC/CwS8trwmjNaq26VRNK8yPbU5F/Vy+R9oDAGKWQU2k8+Op5H4kFJVXFaQ==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "arrify": "^2.0.0", + "extend": "^3.0.2" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@firebase/analytics-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.1.tgz", - "integrity": "sha512-qfFAGS4YFsBbmZwVa7xaDnGh7k9BKF4o/piyjySAv0lxRYd74/tSrm3kMk1YM7GCti7PdbgKvl6oSR70zMFQjw==", - "dev": true, + "node_modules/@google-cloud/pubsub/node_modules/gaxios": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.0.tgz", + "integrity": "sha512-VD/yc5ln6XU8Ch1hyYY6kRMBE0Yc2np3fPyeJeYHhrPs1i8rgnsApPMWyrugkl7LLoSqpOJVBWlQIa87OAvt8Q==", "dependencies": { - "@firebase/analytics": "0.9.1", - "@firebase/analytics-types": "0.8.0", - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/analytics-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/analytics-types": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", - "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==", - "dev": true - }, - "node_modules/@firebase/analytics/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/app": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.1.tgz", - "integrity": "sha512-Z8wOSol+pvp4CFyY1mW+aqdZlrwhW/ha2YXQ6/avJ56c5Hnvt4k6GktZE6o5NyzvfJTgNHryhMtnEJMIuLaT4w==", - "dev": true, + "node_modules/@google-cloud/pubsub/node_modules/gcp-metadata": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", + "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "idb": "7.0.1", - "tslib": "^2.1.0" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/app-check": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.6.1.tgz", - "integrity": "sha512-gDG4Gr4n3MnBZAAwLMynU9u/b+f1y87lCezfwlmN1gUxD85mJcvp4hLf87fACTyRkdVfe8hqSXm+MOYn2bMGLg==", - "dev": true, + "node_modules/@google-cloud/pubsub/node_modules/google-auth-library": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.0.2.tgz", + "integrity": "sha512-HoG+nWFAThLovKpvcbYzxgn+nBJPTfAwtq0GxPN821nOO+21+8oP7MoEHfd1sbDulUFFGfcjJr2CnJ4YssHcyg==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^5.3.2", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/app-check-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.1.tgz", - "integrity": "sha512-IaSYdmaoQgWUrN6rjAYJs1TGXj38Wl9damtrDEyJBf7+rrvKshPAP/CP6e2bd89XOMZKbvy8rKoe1CqX1K3ZjQ==", - "dev": true, - "dependencies": { - "@firebase/app-check": "0.6.1", - "@firebase/app-check-types": "0.5.0", - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "node_modules/@google-cloud/pubsub/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@firebase/app-check-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/app-check-interop-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.2.0.tgz", - "integrity": "sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ==", - "dev": true - }, - "node_modules/@firebase/app-check-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", - "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==", - "dev": true - }, - "node_modules/@firebase/app-check/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/app-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.1.tgz", - "integrity": "sha512-UgPy2ZO0li0j4hAkaZKY9P1TuJEx5RylhUWPzCb8DZhBm+uHdfsFI9Yr+wMlu6qQH2sWoweFtYU6ljGzxwdctw==", - "dev": true, + "node_modules/@google-cloud/pubsub/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "dependencies": { - "@firebase/app": "0.9.1", - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/@firebase/app-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/app-types": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", - "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", - "dev": true - }, - "node_modules/@firebase/app/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/auth": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.21.1.tgz", - "integrity": "sha512-/ap7eT9X7kZTD4Fn2m+nJyC1a9DfFo0H4euoJDN8U+JCMN+GOqkPbkMWCey7wV510WNoPCZQ05+nsAqKkbEVJw==", - "dev": true, + "node_modules/@google-cloud/pubsub/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/@firebase/auth-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.3.1.tgz", - "integrity": "sha512-Ndcaam+IL1TuJ6hZ0EcQ+v261cK3kPm4mvUtouoTfl3FNinm9XvhccN8ojuaRtIV9TiY18mzGjONKF5ZCXLIZw==", + "node_modules/@google-cloud/storage": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.9.0.tgz", + "integrity": "sha512-0mn9DUe3dtyTWLsWLplQP3gzPolJ5kD4PwHuzeD3ye0SAQ+oFfDbT8d+vNZxqyvddL2c6uNP72TKETN2PQxDKg==", "dev": true, + "optional": true, "dependencies": { - "@firebase/auth": "0.21.1", - "@firebase/auth-types": "0.12.0", - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/auth-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/auth-interop-types": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", - "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==", - "dev": true + "@google-cloud/paginator": "^3.0.7", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "gaxios": "^5.0.0", + "google-auth-library": "^8.0.1", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/@firebase/auth-types": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", - "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", + "node_modules/@google-cloud/storage/node_modules/@google-cloud/projectify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", "dev": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" + "optional": true, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@firebase/auth/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/component": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.1.tgz", - "integrity": "sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==", + "node_modules/@google-cloud/storage/node_modules/@google-cloud/promisify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", + "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", "dev": true, - "dependencies": { - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "optional": true, + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/component/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/database": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.1.tgz", - "integrity": "sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==", + "node_modules/@google-cloud/storage/node_modules/gaxios": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", "dev": true, + "optional": true, "dependencies": { - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "faye-websocket": "0.11.4", - "tslib": "^2.1.0" + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/database-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.1.tgz", - "integrity": "sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==", + "node_modules/@google-cloud/storage/node_modules/gcp-metadata": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", "dev": true, + "optional": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/database": "0.14.1", - "@firebase/database-types": "0.10.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/database-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/database-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.1.tgz", - "integrity": "sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==", + "node_modules/@google-cloud/storage/node_modules/google-auth-library": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", "dev": true, + "optional": true, "dependencies": { - "@firebase/app-types": "0.9.0", - "@firebase/util": "1.9.0" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@firebase/database/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/firestore": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.8.1.tgz", - "integrity": "sha512-oc2HMkUnq/zF+g9o974tp5RVCdXCnrU8e5S98ajfWG/hGV+8pr4i6vIa4z0yEXKWGi4X0FguxrC69z1dxEJbNg==", + "node_modules/@google-cloud/storage/node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", "dev": true, + "optional": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "@firebase/webchannel-wrapper": "0.9.0", - "@grpc/grpc-js": "~1.7.0", - "@grpc/proto-loader": "^0.6.13", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" + "node-forge": "^1.3.1" }, - "engines": { - "node": ">=10.10.0" + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@firebase/firestore-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.1.tgz", - "integrity": "sha512-7eE4O2ASyy5X2h4a+KCRt0ZpliUAKo2jrKxKl1ZVCnOOjSCkXXeRVRG9eNZRqBwukhdwskJTM9acs0WxmKOYLA==", + "node_modules/@google-cloud/storage/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", "dev": true, + "optional": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/firestore": "3.8.1", - "@firebase/firestore-types": "2.5.1", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@firebase/firestore-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/firestore-types": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", - "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==", + "node_modules/@google-cloud/storage/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@firebase/firestore/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/functions": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.1.tgz", - "integrity": "sha512-xCSSU4aVSqYU+lCqhn9o5jJcE1KLUOOKyJfCTdCSCyTn2J3vl9Vk4TDm3JSb1Eu6XsNWtxeMW188F/GYxuMWcw==", + "node_modules/@google-cloud/storage/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "dev": true, + "optional": true, "dependencies": { - "@firebase/app-check-interop-types": "0.2.0", - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.1", - "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/@firebase/functions-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.1.tgz", - "integrity": "sha512-f2D2XoRN+QCziCrUL7UrLaBEoG3v2iAeyNwbbOQ3vv0rI0mtku2/yeB2OINz5/iI6oIrBPUMNLr5fitofj7FpQ==", + "node_modules/@google-cloud/storage/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "dev": true, + "optional": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/functions": "0.9.1", - "@firebase/functions-types": "0.6.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/@firebase/functions-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/functions-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", - "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==", - "dev": true - }, - "node_modules/@firebase/functions/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/installations": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.1.tgz", - "integrity": "sha512-gpobP09LLLakBfNCL04fyblfyb3oX1pn+iNmELygrcAkXTO13IAMuOzThI+Xk4NHQZMX1p5GFSAiGbG4yfsSUQ==", + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, - "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "idb": "7.0.1", - "tslib": "^2.1.0" + "optional": true, + "bin": { + "mime": "cli.js" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@firebase/installations-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.1.tgz", - "integrity": "sha512-X4IBVKajEeaE45zWX0Y1q8ey39aPFLa+BsUoYzsduMzCxcMBIPZd5/lV1EVGt8SN3+unnC2J75flYkxXVlhBoQ==", + "node_modules/@google/events": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@google/events/-/events-5.1.1.tgz", + "integrity": "sha512-97u6AUfEXo6TxoBAdbziuhSL56+l69WzFahR6eTQE/bSjGPqT1+W4vS7eKaR7r60pGFrZZfqdFZ99uMbns3qgA==", "dev": true, - "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/installations-types": "0.5.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=10" } }, - "node_modules/@firebase/installations-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/installations-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", - "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", - "dev": true, - "peerDependencies": { - "@firebase/app-types": "0.x" + "node_modules/@googleapis/sqladmin": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-14.1.0.tgz", + "integrity": "sha512-bNly3YIE+aqHc3HfISfK69er0AbqpUlE3THY1XBgj4OHR3b7shDQJaBnzVJkdyfJCrixPKLpJQa4vS+IeDC2hA==", + "dependencies": { + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@firebase/installations/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/logger": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", - "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", - "dev": true, + "node_modules/@googleapis/sqladmin/node_modules/googleapis-common": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.0.1.tgz", + "integrity": "sha512-mgt5zsd7zj5t5QXvDanjWguMdHAcJmmDrF9RkInCecNsyV7S7YtGqm5v2IWONNID88osb7zmx5FtrAP12JfD0w==", "dependencies": { - "tslib": "^2.1.0" + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.0.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@firebase/logger/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true + "node_modules/@googleapis/sqladmin/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@firebase/messaging": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.1.tgz", - "integrity": "sha512-/F+2OWarR8TcJJVlQS6zBoHHfXMgfgR0/ukQ3h7Ow3WZ3WZ9+Sj/gvxzothXZm+WtBylfXuhiANFgHEDFL0J0w==", - "dev": true, + "node_modules/@grpc/grpc-js": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.0", - "idb": "7.0.1", - "tslib": "^2.1.0" + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@firebase/messaging-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.1.tgz", - "integrity": "sha512-BykvXtAWOs0W4Ik79lNfMKSxaUCtOJ47PJ9Vw2ySHZ14vFFNuDAtRTOBOlAFhUpsHqRoQFvFCkBGsRIQYq8hzw==", - "dev": true, + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", + "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/messaging": "0.12.1", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@firebase/messaging-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/messaging-interop-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", - "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==", - "dev": true + "node_modules/@grpc/grpc-js/node_modules/protobufjs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } }, - "node_modules/@firebase/messaging/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true + "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, - "node_modules/@firebase/performance": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.1.tgz", - "integrity": "sha512-mT/CWz3CLgyn/a3sO/TJgrTt+RA3DfuvWwGXY9zmIiuBZY2bDi1M2uMefJdJKc9sBUPRajNF6RL10nGYq3BAuQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@firebase/performance-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.1.tgz", - "integrity": "sha512-4mn6eS7r2r+ZAHvU0OHE+3ZO+x6gOVhf2ypBoijuDNaRNjSn9GcvA8udD4IbJ8FNv/k7mbbtA9AdxVb701Lr1g==", + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/performance": "0.6.1", - "@firebase/performance-types": "0.2.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "ms": "2.1.2" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@firebase/performance-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@firebase/performance-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", - "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==", - "dev": true + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, - "node_modules/@firebase/performance/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, - "node_modules/@firebase/remote-config": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.1.tgz", - "integrity": "sha512-RCzBH3FjAPRSP3M1T7jdxLYBesIdLtNIQ0fR9ywJpGSSa0kIXEJ9iSZMTP+9pJtaCxz8db07FvjEqg7Y+lgjzg==", + "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", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=8" } }, - "node_modules/@firebase/remote-config-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.1.tgz", - "integrity": "sha512-RPCj7c2Q3QxMgJH3YCt0iD57KppFApghxAGETzlr6Jm6vT7k0vqvk2KgRBgKa4koJBsgwlUtRn2roaCqUEadyg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/remote-config": "0.4.1", - "@firebase/remote-config-types": "0.3.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=8" } }, - "node_modules/@firebase/remote-config-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/remote-config-types": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", - "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==", - "dev": true - }, - "node_modules/@firebase/remote-config/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/storage": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.10.1.tgz", - "integrity": "sha512-eN4ME+TFCh5KfyG9uo8PhE6cgKjK5Rb9eucQg1XEyLHMiaZiUv2xSuWehJn0FaL+UdteoaWKuRUZ4WXRDskXrA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" + "p-locate": "^4.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=8" } }, - "node_modules/@firebase/storage-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.2.1.tgz", - "integrity": "sha512-H0oFdYsMn2Z6tP9tlVERBkJiZsCbFAcl3Li1dnpvDg9g323egdjCnUUgH/tJODRR/Y84iZSNRkg4FvHDVI/o7Q==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/storage": "0.10.1", - "@firebase/storage-types": "0.7.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "p-try": "^2.0.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@firebase/storage-compat/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/storage-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.7.0.tgz", - "integrity": "sha512-n/8pYd82hc9XItV3Pa2KGpnuJ/2h/n/oTAaBberhe6GeyWQPnsmwwRK94W3GxUwBA/ZsszBAYZd7w7tTE+6XXA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@firebase/storage/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.0.tgz", - "integrity": "sha512-oeoq/6Sr9btbwUQs5HPfeww97bf7qgBbkknbDTXpRaph2LZ23O9XLCE5tJy856SBmGQfO4xBZP8dyryLLM2nSQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "tslib": "^2.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/@firebase/util/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/@firebase/webchannel-wrapper": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.9.0.tgz", - "integrity": "sha512-BpiZLBWdLFw+qFel9p3Zs1jD6QmH7Ii4aTDu6+vx8ShdidChZUXqDhYJly4ZjSgQh54miXbBgBrk0S+jTIh/Qg==", - "dev": true - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true + "node_modules/@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/@google-cloud/firestore": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.4.2.tgz", - "integrity": "sha512-f7xFwINJveaqTFcgy0G4o2CBPm0Gv9lTGQ4dQt+7skwaHs3ytdue9ma8oQZYXKNoWcAoDIMQ929Dk0KOIocxFg==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, - "optional": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^3.5.2", - "protobufjs": "^7.0.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=12.0.0" + "node": ">=6.0.0" } }, - "node_modules/@google-cloud/firestore/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, - "optional": true + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@google-cloud/firestore/node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, "engines": { - "node": ">=12.0.0" + "node": ">=6.0.0" } }, - "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, "optional": true, + "peer": true, "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=10" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@google-cloud/precise-date": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.3.tgz", - "integrity": "sha512-+SDJ3ZvGkF7hzo6BGa8ZqeK3F6Z4+S+KviC9oOK+XCs3tfMyJCh/4j93XIWINgMMDIh9BgEvlw4306VxlXIlYA==", - "engines": { - "node": ">=10.4.0" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, - "node_modules/@google-cloud/projectify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.0.1.tgz", - "integrity": "sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ==", - "engines": { - "node": ">=10" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@google-cloud/promisify": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz", - "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==", - "engines": { - "node": ">=10" - } + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" }, - "node_modules/@google-cloud/pubsub": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-3.0.1.tgz", - "integrity": "sha512-dznNbRd/Y8J0C0xvdvCPi3B1msK/dj/Nya+NQZ2doUOLT6eoa261tBwk9umOQs5L5GKcdlqQKbBjrNjDYVbzQA==", + "node_modules/@jsdoc/salty": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.3.tgz", + "integrity": "sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==", "dependencies": { - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/duplexify": "^3.6.0", - "@types/long": "^4.0.0", - "arrify": "^2.0.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "google-gax": "^3.0.1", - "is-stream-ended": "^0.1.4", - "lodash.snakecase": "^4.1.1", - "p-defer": "^3.0.0" + "lodash": "^4.17.21" }, "engines": { - "node": ">=12.0.0" + "node": ">=v12.0.0" } }, - "node_modules/@google-cloud/pubsub/node_modules/@google-cloud/paginator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.0.tgz", - "integrity": "sha512-wNmCZl+2G2DmgT/VlF+AROf80SoaC/CwS8trwmjNaq26VRNK8yPbU5F/Vy+R9oDAGKWQU2k8+Op5H4kFJVXFaQ==", - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, + "node_modules/@ljharb/has-package-exports-patterns": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@ljharb/has-package-exports-patterns/-/has-package-exports-patterns-0.0.2.tgz", + "integrity": "sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==", + "dev": true + }, + "node_modules/@next/env": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", + "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==", + "dev": true + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", + "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12.0.0" + "node": ">= 10" } }, - "node_modules/@google-cloud/pubsub/node_modules/gaxios": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.0.tgz", - "integrity": "sha512-VD/yc5ln6XU8Ch1hyYY6kRMBE0Yc2np3fPyeJeYHhrPs1i8rgnsApPMWyrugkl7LLoSqpOJVBWlQIa87OAvt8Q==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", + "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@google-cloud/pubsub/node_modules/gcp-metadata": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", - "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", + "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@google-cloud/pubsub/node_modules/google-auth-library": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.0.2.tgz", - "integrity": "sha512-HoG+nWFAThLovKpvcbYzxgn+nBJPTfAwtq0GxPN821nOO+21+8oP7MoEHfd1sbDulUFFGfcjJr2CnJ4YssHcyg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^5.3.2", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", + "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@google-cloud/pubsub/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", + "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@google-cloud/pubsub/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "node": ">= 10" } }, - "node_modules/@google-cloud/pubsub/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", + "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@google-cloud/storage": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.9.0.tgz", - "integrity": "sha512-0mn9DUe3dtyTWLsWLplQP3gzPolJ5kD4PwHuzeD3ye0SAQ+oFfDbT8d+vNZxqyvddL2c6uNP72TKETN2PQxDKg==", + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", + "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "dependencies": { - "@google-cloud/paginator": "^3.0.7", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "compressible": "^2.0.12", - "duplexify": "^4.0.0", - "ent": "^2.2.0", - "extend": "^3.0.2", - "gaxios": "^5.0.0", - "google-auth-library": "^8.0.1", - "mime": "^3.0.0", - "mime-types": "^2.0.8", - "p-limit": "^3.0.1", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0", - "uuid": "^8.0.0" - }, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@google-cloud/storage/node_modules/@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", + "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", + "cpu": [ + "ia32" + ], "dev": true, "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12.0.0" + "node": ">= 10" } }, - "node_modules/@google-cloud/storage/node_modules/@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", + "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@google-cloud/storage/node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "optional": true, "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@google-cloud/storage/node_modules/gcp-metadata": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", - "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "optional": true, - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@google-cloud/storage/node_modules/google-auth-library": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", - "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "optional": true, "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@google-cloud/storage/node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dev": true, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "optional": true, "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">=12.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@google-cloud/storage/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dev": true, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "optional": true, "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@google-cloud/storage/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "optional": true, - "engines": { - "node": ">=8" + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/@google-cloud/storage/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, - "optional": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@google-cloud/storage/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, - "optional": true, - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" + "node_modules/@opentelemetry/api": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", + "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@google-cloud/storage/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.2.0.tgz", + "integrity": "sha512-BNKB9fiYVghALJzCuWO3eNYfdTExPVK4ykrtmfNfy0A6UWYhOYjGMXifUmkunDJNL8ju9tBobo8jF0WR9zGy1Q==", "engines": { - "node": ">=10.0.0" + "node": ">=8.12.0" } }, - "node_modules/@google/events": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@google/events/-/events-5.1.1.tgz", - "integrity": "sha512-97u6AUfEXo6TxoBAdbziuhSL56+l69WzFahR6eTQE/bSjGPqT1+W4vS7eKaR7r60pGFrZZfqdFZ99uMbns3qgA==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", - "dev": true, + "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", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" + "graceful-fs": "4.2.10" }, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": ">=12.22.0" } }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", - "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", - "dev": true, + "node_modules/@pnpm/npm-conf": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", + "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "dev": true, - "hasInstallScript": true, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", - "dev": true + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, - "node_modules/@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "node_modules/@sinonjs/commons": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", + "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", "dev": true, "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" + "type-detect": "4.0.8" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@sinonjs/samsam": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", + "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@swc/core": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.0.tgz", + "integrity": "sha512-0mshAzMvdhL0v3lNMJowzMd8Du0bJf+PUTxhVm4uIb/h8qCDQjFERXj0RGejcDFSL7fJzLI3MzS5WR45KDrrLA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "peer": true, + "bin": { + "swcx": "run_swcx.js" + }, "engines": { - "node": ">=12.22" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-android-arm-eabi": "1.3.0", + "@swc/core-android-arm64": "1.3.0", + "@swc/core-darwin-arm64": "1.3.0", + "@swc/core-darwin-x64": "1.3.0", + "@swc/core-freebsd-x64": "1.3.0", + "@swc/core-linux-arm-gnueabihf": "1.3.0", + "@swc/core-linux-arm64-gnu": "1.3.0", + "@swc/core-linux-arm64-musl": "1.3.0", + "@swc/core-linux-x64-gnu": "1.3.0", + "@swc/core-linux-x64-musl": "1.3.0", + "@swc/core-win32-arm64-msvc": "1.3.0", + "@swc/core-win32-ia32-msvc": "1.3.0", + "@swc/core-win32-x64-msvc": "1.3.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, - "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", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.4.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@types/archiver": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz", + "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/glob": "*" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@types/async-lock": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.3.0.tgz", + "integrity": "sha512-Z93wDSYW9aMgPR5t+7ouwTvy91Vp3M0Snh4Pd3tf+caSAq5bXZaGnnH9CDbjrwgmfDkRIX0Dx8GvSDgwuoaxoA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/types": "^7.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@types/babel__traverse": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/types": "^7.3.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "node_modules/@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@types/chai": "*" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + "node_modules/@types/cjson": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@types/cjson/-/cjson-0.5.0.tgz", + "integrity": "sha512-fZdrvfhUxvBDQ5+mksCUvUE+nLXwG416gz+iRdYGDEsQQD5mH0PeLzH0ACuRPbobpVvzKjDHo9VYpCKb1EwLIw==", + "dev": true }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + "node_modules/@types/cli-table": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.0.tgz", + "integrity": "sha512-QnZUISJJXyhyD6L1e5QwXDV/A5i2W1/gl6D6YMc8u0ncPepbv/B4w3S+izVvtAg60m6h+JP09+Y/0zF2mojlFQ==", + "dev": true }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "node_modules/@types/configstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-SvCBBPzOIe/3Tu7jTl2Q8NjITjLmq9m7obzjSyb8PXWWZ31xVK6w4T6v8fOx+lrgQnqk3Yxc00LDolFsSakKCA==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", + "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@types/node": "*" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "node_modules/@types/cookiejar": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz", + "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "node_modules/@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true + }, + "node_modules/@types/cross-spawn": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.1.tgz", + "integrity": "sha512-MtN1pDYdI6D6QFDzy39Q+6c9rl2o/xN7aWGe6oZuzqq5N6+YuwFsWiEAv3dNzvzN9YzU+itpN8lBzFpphQKLAw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@types/node": "*" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "node_modules/@jsdoc/salty": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz", - "integrity": "sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==", + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" + "@types/ms": "*" } }, - "node_modules/@ljharb/has-package-exports-patterns": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@ljharb/has-package-exports-patterns/-/has-package-exports-patterns-0.0.2.tgz", - "integrity": "sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==", - "dev": true - }, - "node_modules/@next/env": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", - "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==", + "node_modules/@types/deep-equal-in-any-order": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/deep-equal-in-any-order/-/deep-equal-in-any-order-1.0.3.tgz", + "integrity": "sha512-jT0O3hAILDKeKbdWJ9FZLD0Xdfhz7hMvfyFlRWpirjiEVr8G+GZ4kVIzPIqM6x6Rpp93TNPgOAed4XmvcuV6Qg==", "dev": true }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", - "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "node_modules/@types/duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==", + "dependencies": { + "@types/node": "*" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", - "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", - "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } + "node_modules/@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", - "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", - "cpu": [ - "arm64" - ], + "node_modules/@types/express": { + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz", + "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", - "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", - "cpu": [ - "x64" - ], + "node_modules/@types/express-serve-static-core": { + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", - "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", - "cpu": [ - "x64" - ], + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", - "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", - "cpu": [ - "arm64" - ], + "node_modules/@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", - "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", - "cpu": [ - "ia32" - ], + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", - "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } + "node_modules/@types/html-escaper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/html-escaper/-/html-escaper-3.0.0.tgz", + "integrity": "sha512-OcJcvP3Yk8mjYwf/IdXZtTE1tb/u0WF0qa29ER07ZHCYUBZXSN29Z1mBS+/96+kNMGTFUAbSz9X+pHmHpZrTCw==", + "dev": true }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@types/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QXlzybid60YtAwfgG3cpykptRYUx2KomzNutMlWsQC64J/WG/gQSl+P4w7A21sGN0VIxRVava4rgnT7FQmFCdg==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@types/through": "*" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@types/inquirer-autocomplete-prompt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.2.tgz", + "integrity": "sha512-Y7RM1dY3KVg11JnFkaQkTT+2Cgmn9K8De/VtrTT2a5grGIoMfkQuYM5Sss+65oiuqg1h1cTsKHG8pkoPsASdbQ==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "@types/inquirer": "^8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@types/js-yaml": { + "version": "3.12.10", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.10.tgz", + "integrity": "sha512-/Mtaq/wf+HxXpvhzFYzrzCqNRcA958sW++7JOFC8nPrZcvfi/TrzOaaGbvt27ltJB2NQbHVAg5a1wUCsyMH7NA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.30.tgz", + "integrity": "sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==", + "dev": true + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@types/node": "*" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "optional": true, + "node_modules/@types/libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-LisgKLlYQk19baQwjkBZZXdJL0KbeTpdEnrAfz5hQACbklCY0gVFnsKUyjfNWF1UQsCSjw93Sj5jSbiO8RPfdw==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "node_modules/@types/lodash": { + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", + "dev": true + }, + "node_modules/@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "@types/linkify-it": "*", + "@types/mdurl": "*" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "optional": true, + "node_modules/@types/marked": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.8.tgz", + "integrity": "sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw==", + "dev": true + }, + "node_modules/@types/marked-terminal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/marked-terminal/-/marked-terminal-3.1.3.tgz", + "integrity": "sha512-dKgOLKlI5zFb2jTbRcyQqbdrHxeU74DCOkVIZtsoB2sc1ctXZ1iB2uxG2jjAuzoLdvwHP065ijN6Q8HecWdWYg==", + "dev": true, "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "@types/marked": "^3", + "chalk": "^2.4.1" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/@types/marked-terminal/node_modules/@types/marked": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-3.0.3.tgz", + "integrity": "sha512-ZgAr847Wl68W+B0sWH7F4fDPxTzerLnRuUXjUpp1n4NjGSs8hgPAjAp7NQIXblG34MXTrf5wWkAK8PVJ2LIlVg==", + "dev": true }, - "node_modules/@opentelemetry/api": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", - "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", - "engines": { - "node": ">=8.0.0" + "node_modules/@types/mdast": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", + "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "dev": true, + "dependencies": { + "@types/unist": "*" } }, - "node_modules/@opentelemetry/semantic-conventions": { + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "node_modules/@types/minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.2.0.tgz", - "integrity": "sha512-BNKB9fiYVghALJzCuWO3eNYfdTExPVK4ykrtmfNfy0A6UWYhOYjGMXifUmkunDJNL8ju9tBobo8jF0WR9zGy1Q==", - "engines": { - "node": ">=8.12.0" - } + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@types/minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-IKmcvG5RnNUtRoxSsusfYnd7fPl8NCLjLutRDvpqwWUR55XvGfy6GIGQUSsKgT2A8qzMjsWfHZNU7d6gxFgqzQ==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "dependencies": { + "@types/node": "*" } }, - "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", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-wdfkiKBBEMTODNbuF3J+qDDSqJxt50yB9pgDiTcFew7f97Gcc7/sM4HR66ofGgpJPOALWOqKAch4gPyqEXSkeQ==", + "dev": true, "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" + "@types/express": "*" } }, - "node_modules/@pnpm/npm-conf": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", - "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "node_modules/@types/nlcst": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.0.tgz", + "integrity": "sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==", + "dev": true, "dependencies": { - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" + "@types/unist": "*" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "node_modules/@types/node": { + "version": "18.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.1.tgz", + "integrity": "sha512-mZJ9V11gG5Vp0Ox2oERpeFDl+JvCwK24PGy76vVY/UgBtjwJWc5rYBThFxmbnYOm9UPZNm6wEl/sxHt2SU7x9A==", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "undici-types": "~5.26.4" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "node_modules/@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true }, - "node_modules/@sinonjs/commons": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", - "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "node_modules/@types/pg": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.2.tgz", + "integrity": "sha512-G2Mjygf2jFMU/9hCaTYxJrwdObdcnuQde1gndooZSOHsNSaCehAuwc7EIuSA34Do8Jx2yZ19KtvW8P0j4EuUXw==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "node_modules/@types/pg/node_modules/pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@sinonjs/samsam": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", - "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", + "node_modules/@types/pg/node_modules/postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "engines": { + "node": ">=12" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "node_modules/@swc/core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.0.tgz", - "integrity": "sha512-0mshAzMvdhL0v3lNMJowzMd8Du0bJf+PUTxhVm4uIb/h8qCDQjFERXj0RGejcDFSL7fJzLI3MzS5WR45KDrrLA==", + "node_modules/@types/pg/node_modules/postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "bin": { - "swcx": "run_swcx.js" + "dependencies": { + "obuf": "~1.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-android-arm-eabi": "1.3.0", - "@swc/core-android-arm64": "1.3.0", - "@swc/core-darwin-arm64": "1.3.0", - "@swc/core-darwin-x64": "1.3.0", - "@swc/core-freebsd-x64": "1.3.0", - "@swc/core-linux-arm-gnueabihf": "1.3.0", - "@swc/core-linux-arm64-gnu": "1.3.0", - "@swc/core-linux-arm64-musl": "1.3.0", - "@swc/core-linux-x64-gnu": "1.3.0", - "@swc/core-linux-x64-musl": "1.3.0", - "@swc/core-win32-arm64-msvc": "1.3.0", - "@swc/core-win32-ia32-msvc": "1.3.0", - "@swc/core-win32-x64-msvc": "1.3.0" + "node": ">= 6" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.0.tgz", - "integrity": "sha512-eDa1EZAnchMtkdZ52bWfseKla370c8BCj/RWAtHJcZMon3WVkWcZlMgZPPiPIxYz8hGtomqs+pkQv34hEVcx0A==", - "cpu": [ - "x64" - ], + "node_modules/@types/pg/node_modules/postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "node_modules/@types/pg/node_modules/postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", "dev": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=12" } }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/@types/archiver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz", - "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==", + "node_modules/@types/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA==", + "deprecated": "This is a stub types definition. prettier provides its own type definitions, so you do not need this installed.", "dev": true, "dependencies": { - "@types/glob": "*" + "prettier": "*" } }, - "node_modules/@types/async-lock": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.3.0.tgz", - "integrity": "sha512-Z93wDSYW9aMgPR5t+7ouwTvy91Vp3M0Snh4Pd3tf+caSAq5bXZaGnnH9CDbjrwgmfDkRIX0Dx8GvSDgwuoaxoA==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "node_modules/@types/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-bPOsfCZ4tsTlKiBjBhKnM8jpY5nmIll166IPD58D92hR7G7kZDfx5iB9wGF4NfZrdKolebjeAr3GouYkSGoJ/A==", "dev": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@types/node": "*" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/@types/puppeteer": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.2.tgz", + "integrity": "sha512-yjbHoKjZFOGqA6bIEI2dfBE5UPqU0YGWzP+ipDVP1iGzmlhksVKTBVZfT3Aj3wnvmcJ2PQ9zcncwOwyavmafBw==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@types/node": "*" } }, - "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } + "node_modules/@types/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==", + "dev": true }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.58.tgz", + "integrity": "sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==", "dev": true, "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "node_modules/@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", - "dev": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "node_modules/@types/react-dom": { + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", + "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", "dev": true, "dependencies": { - "@types/chai": "*" + "@types/react": "*" } }, - "node_modules/@types/cjson": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@types/cjson/-/cjson-0.5.0.tgz", - "integrity": "sha512-fZdrvfhUxvBDQ5+mksCUvUE+nLXwG416gz+iRdYGDEsQQD5mH0PeLzH0ACuRPbobpVvzKjDHo9VYpCKb1EwLIw==", - "dev": true - }, - "node_modules/@types/cli-table": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.4.tgz", - "integrity": "sha512-GsALrTL69mlwbAw/MHF1IPTadSLZQnsxe7a80G8l4inN/iEXCOcVeT/S7aRc6hbhqzL9qZ314kHPDQnQ3ev+HA==", - "dev": true - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "node_modules/@types/configstore": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-4.0.0.tgz", - "integrity": "sha512-SvCBBPzOIe/3Tu7jTl2Q8NjITjLmq9m7obzjSyb8PXWWZ31xVK6w4T6v8fOx+lrgQnqk3Yxc00LDolFsSakKCA==", + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, - "node_modules/@types/connect": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "node_modules/@types/rimraf": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", + "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", "dev": true, "dependencies": { + "@types/glob": "*", "@types/node": "*" } }, - "node_modules/@types/cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", "dev": true }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "node_modules/@types/semver": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz", + "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", "dev": true, "dependencies": { + "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", + "node_modules/@types/sinon": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.10.tgz", + "integrity": "sha512-/faDC0erR06wMdybwI/uR8wEKV/E83T0k4sepIpB7gXuy2gzx2xiOjmztq6a2Y6rIGJ04D+6UU0VBmWy+4HEMA==", "dev": true, "dependencies": { - "@types/node": "*" + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "node_modules/@types/sinon-chai": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.2.tgz", + "integrity": "sha512-5zSs2AslzyPZdOsbm2NRtuSNAI2aTWzNKOHa/GRecKo7a5efYD7qGcPxMZXQDayVXT2Vnd5waXxBvV31eCZqiA==", "dev": true, "dependencies": { - "@types/ms": "*" + "@types/chai": "*", + "@types/sinon": "*" } }, - "node_modules/@types/deep-equal-in-any-order": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/deep-equal-in-any-order/-/deep-equal-in-any-order-1.0.3.tgz", - "integrity": "sha512-jT0O3hAILDKeKbdWJ9FZLD0Xdfhz7hMvfyFlRWpirjiEVr8G+GZ4kVIzPIqM6x6Rpp93TNPgOAed4XmvcuV6Qg==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", + "integrity": "sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==", "dev": true }, - "node_modules/@types/duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/@types/stream-chain": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", + "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", "dev": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@types/node": "*" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "node_modules/@types/stream-json": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.2.tgz", + "integrity": "sha512-i4LE2aWVb1R3p/Z6S6Sw9kmmOs4Drhg0SybZUyfM499I1c8p7MUKZHs4Sg9jL5eu4mDmcgfQ6eGIG3+rmfUWYw==", "dev": true, "dependencies": { "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@types/stream-chain": "*" } }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "node_modules/@types/superagent": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.3.tgz", + "integrity": "sha512-vy2licJQwOXrTAe+yz9SCyUVXAkMgCeDq9VHzS5CWJyDU1g6CI4xKb4d5sCEmyucjw5sG0y4k2/afS0iv/1D0Q==", "dev": true, "dependencies": { + "@types/cookiejar": "*", "@types/node": "*" } }, - "node_modules/@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dependencies": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "node_modules/@types/supertest": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", "dev": true, "dependencies": { - "@types/unist": "*" + "@types/superagent": "*" } }, - "node_modules/@types/html-escaper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/html-escaper/-/html-escaper-3.0.2.tgz", - "integrity": "sha512-A8vk09eyYzk8J/lFO4OUMKCmRN0rRzfZf4n3Olwapgox/PtTiU8zPYlL1UEkJ/WeHvV6v9Xnj3o/705PKz9r4Q==", - "dev": true - }, - "node_modules/@types/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QXlzybid60YtAwfgG3cpykptRYUx2KomzNutMlWsQC64J/WG/gQSl+P4w7A21sGN0VIxRVava4rgnT7FQmFCdg==", + "node_modules/@types/swagger2openapi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/swagger2openapi/-/swagger2openapi-7.0.0.tgz", + "integrity": "sha512-jbjunFpBQqbYt9JZYPDe1G9TkTVzQ8MqT1z7qMq/f7EZzdoA/G8WCZt8dr5gLkATkaE2n8FX7HlrBUTNyYRAJA==", "dev": true, "dependencies": { - "@types/through": "*" + "@types/node": "*", + "openapi-types": "^12.1.0" } }, - "node_modules/@types/inquirer-autocomplete-prompt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.2.tgz", - "integrity": "sha512-Y7RM1dY3KVg11JnFkaQkTT+2Cgmn9K8De/VtrTT2a5grGIoMfkQuYM5Sss+65oiuqg1h1cTsKHG8pkoPsASdbQ==", + "node_modules/@types/tar": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.1.tgz", + "integrity": "sha512-8mto3YZfVpqB1CHMaYz1TUYIQfZFbh/QbEq5Hsn6D0ilCfqRVCdalmc89B7vi3jhl9UYIk+dWDABShNfOkv5HA==", "dev": true, "dependencies": { - "@types/inquirer": "^8" + "@types/minipass": "*", + "@types/node": "*" } }, - "node_modules/@types/js-yaml": { - "version": "3.12.10", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.10.tgz", - "integrity": "sha512-/Mtaq/wf+HxXpvhzFYzrzCqNRcA958sW++7JOFC8nPrZcvfi/TrzOaaGbvt27ltJB2NQbHVAg5a1wUCsyMH7NA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.30.tgz", - "integrity": "sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==", + "node_modules/@types/tcp-port-used": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-6pwWTx8oUtWvsiZUCrhrK/53MzKVLnuNSSaZILPy3uMes9QnTrLMar9BDlJArbMOjDcjb3QXFk6Rz8qmmuySZw==", "dev": true }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", - "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", + "node_modules/@types/through": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.29.tgz", + "integrity": "sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/libsodium-wrappers": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", - "integrity": "sha512-KeAKtlObirLJk/na6jHBFEdTDjDfFS6Vcr0eG2FjiHKn3Nw8axJFfIu0Y9TpwaauRldQBj/pZm/MHtK76r6OWg==", + "node_modules/@types/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==", "dev": true }, - "node_modules/@types/linkify-it": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", - "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==" - }, - "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "node_modules/@types/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-tl34wMtk3q+fSdRSJ+N83f47IyXLXPPuLjHm7cmAx0fE2Wml2TZCQV3FmQdSR5J6UEGV3qafG054e0cVVFCqPA==", "dev": true }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true }, - "node_modules/@types/marked": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.8.tgz", - "integrity": "sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw==", + "node_modules/@types/universal-analytics": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@types/universal-analytics/-/universal-analytics-0.4.5.tgz", + "integrity": "sha512-Opb+Un786PS3te24VtJR/QPmX00P/pXaJQtLQYJklQefP4xP0Ic3mPc2z6SDz97OrITzR+RHTBEwjtNRjZ/nLQ==", "dev": true }, - "node_modules/@types/marked-terminal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/marked-terminal/-/marked-terminal-3.1.3.tgz", - "integrity": "sha512-dKgOLKlI5zFb2jTbRcyQqbdrHxeU74DCOkVIZtsoB2sc1ctXZ1iB2uxG2jjAuzoLdvwHP065ijN6Q8HecWdWYg==", + "node_modules/@types/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-aGY5pH1Q/DcToKXl4MCj1c0uDUB+zSVFDRCI7Q7js5sguzBTqJV/5kJA2awofbtWYF3xnon1TYdZYnFditRPtQ==", "dev": true, "dependencies": { - "@types/marked": "^3", - "chalk": "^2.4.1" + "@types/configstore": "*", + "boxen": "^4.2.0" } }, - "node_modules/@types/marked-terminal/node_modules/@types/marked": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-3.0.3.tgz", - "integrity": "sha512-ZgAr847Wl68W+B0sWH7F4fDPxTzerLnRuUXjUpp1n4NjGSs8hgPAjAp7NQIXblG34MXTrf5wWkAK8PVJ2LIlVg==", + "node_modules/@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", "dev": true }, - "node_modules/@types/mdast": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", - "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "node_modules/@types/ws": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.3.tgz", + "integrity": "sha512-VT/GK7nvDA7lfHy40G3LKM+ICqmdIsBLBHGXcWD97MtqQEjNMX+7Gudo8YGpaSlYdTX7IFThhCE8Jx09HegymQ==", "dev": true, "dependencies": { - "@types/unist": "*" + "@types/node": "*" } }, - "node_modules/@types/mdurl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", - "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "node_modules/@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@types/minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-IKmcvG5RnNUtRoxSsusfYnd7fPl8NCLjLutRDvpqwWUR55XvGfy6GIGQUSsKgT2A8qzMjsWfHZNU7d6gxFgqzQ==", + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, + "optional": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "node_modules/@types/multer": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", - "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz", + "integrity": "sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ==", "dev": true, "dependencies": { - "@types/express": "*" + "@typescript-eslint/scope-manager": "5.51.0", + "@typescript-eslint/type-utils": "5.51.0", + "@typescript-eslint/utils": "5.51.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.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/@types/nlcst": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.0.tgz", - "integrity": "sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@types/unist": "*" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/node": { - "version": "18.19.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.1.tgz", - "integrity": "sha512-mZJ9V11gG5Vp0Ox2oERpeFDl+JvCwK24PGy76vVY/UgBtjwJWc5rYBThFxmbnYOm9UPZNm6wEl/sxHt2SU7x9A==", - "dependencies": { - "undici-types": "~5.26.4" - } + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "node_modules/@types/node-fetch": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", - "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "node_modules/@typescript-eslint/parser": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.51.0.tgz", + "integrity": "sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA==", "dev": true, "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "@typescript-eslint/scope-manager": "5.51.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/typescript-estree": "5.51.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/@types/node-fetch/node_modules/form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "ms": "2.1.2" }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@types/progress": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/progress/-/progress-2.0.7.tgz", - "integrity": "sha512-iadjw02vte8qWx7U0YM++EybBha2CQLPGu9iJ97whVgJUT5Zq9MjAPYUnbfRI2Kpehimf1QjFJYxD0t8nqzu5w==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz", + "integrity": "sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==", "dev": true, "dependencies": { - "@types/node": "*" + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "node_modules/@typescript-eslint/type-utils": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz", + "integrity": "sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.51.0", + "@typescript-eslint/utils": "5.51.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/@types/puppeteer": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.2.tgz", - "integrity": "sha512-yjbHoKjZFOGqA6bIEI2dfBE5UPqU0YGWzP+ipDVP1iGzmlhksVKTBVZfT3Aj3wnvmcJ2PQ9zcncwOwyavmafBw==", + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@types/node": "*" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/qs": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==", + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true + "node_modules/@typescript-eslint/types": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.51.0.tgz", + "integrity": "sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@types/react": { - "version": "18.2.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.58.tgz", - "integrity": "sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz", + "integrity": "sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==", "dev": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.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/@types/react-dom": { - "version": "18.2.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", - "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@types/react": "*" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@types/retry": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "node_modules/@typescript-eslint/utils": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.51.0.tgz", + "integrity": "sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.51.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/typescript-estree": "5.51.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "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/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, - "node_modules/@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz", + "integrity": "sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==", "dev": true, "dependencies": { - "@types/glob": "*", - "@types/node": "*" + "@typescript-eslint/types": "5.51.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/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "node_modules/@types/semver": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz", - "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/@vscode/emmet-helper": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.6.tgz", + "integrity": "sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==", "dev": true, "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/sinon": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.10.tgz", - "integrity": "sha512-/faDC0erR06wMdybwI/uR8wEKV/E83T0k4sepIpB7gXuy2gzx2xiOjmztq6a2Y6rIGJ04D+6UU0VBmWy+4HEMA==", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.2.tgz", - "integrity": "sha512-5zSs2AslzyPZdOsbm2NRtuSNAI2aTWzNKOHa/GRecKo7a5efYD7qGcPxMZXQDayVXT2Vnd5waXxBvV31eCZqiA==", - "dev": true, - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" + "emmet": "^2.3.0", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^2.1.2" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", - "integrity": "sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==", + "node_modules/@vscode/emmet-helper/node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", "dev": true }, - "node_modules/@types/stream-chain": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stream-chain/-/stream-chain-2.0.1.tgz", - "integrity": "sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stream-json": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@types/stream-json/-/stream-json-1.7.2.tgz", - "integrity": "sha512-i4LE2aWVb1R3p/Z6S6Sw9kmmOs4Drhg0SybZUyfM499I1c8p7MUKZHs4Sg9jL5eu4mDmcgfQ6eGIG3+rmfUWYw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/stream-chain": "*" - } - }, - "node_modules/@types/superagent": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.3.tgz", - "integrity": "sha512-vy2licJQwOXrTAe+yz9SCyUVXAkMgCeDq9VHzS5CWJyDU1g6CI4xKb4d5sCEmyucjw5sG0y4k2/afS0iv/1D0Q==", - "dev": true, - "dependencies": { - "@types/cookiejar": "*", - "@types/node": "*" - } + "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "dev": true }, - "node_modules/@types/supertest": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", - "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", - "dev": true, - "dependencies": { - "@types/superagent": "*" - } + "node_modules/@vscode/l10n": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz", + "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==", + "dev": true }, - "node_modules/@types/swagger2openapi": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/swagger2openapi/-/swagger2openapi-7.0.4.tgz", - "integrity": "sha512-ffMqzciTDihOKH4Q//9Ond1yb5JP1P5FC/aFPsLK4blea1Fwk2aYctiNCkAh5etDYFswFXS+5LV/vuGkf+PU6A==", - "dev": true, - "dependencies": { - "@types/node": "*", - "openapi-types": "^12.1.0" - } + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true }, - "node_modules/@types/tar": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.1.tgz", - "integrity": "sha512-8mto3YZfVpqB1CHMaYz1TUYIQfZFbh/QbEq5Hsn6D0ilCfqRVCdalmc89B7vi3jhl9UYIk+dWDABShNfOkv5HA==", - "dev": true, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { - "@types/minipass": "*", - "@types/node": "*" + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "node_modules/@types/tcp-port-used": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/tcp-port-used/-/tcp-port-used-1.0.4.tgz", - "integrity": "sha512-0vQ4fz9TTM4bCdllYWEJ2JHBUXR9xqPtc70dJ7BMRDVfvZyYdrgey3nP5RRcVj+qAgnHJM8r9fvgrfnPMxdnhA==", - "dev": true - }, - "node_modules/@types/through": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.29.tgz", - "integrity": "sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==", - "dev": true, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "@types/node": "*" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "dev": true - }, - "node_modules/@types/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-tl34wMtk3q+fSdRSJ+N83f47IyXLXPPuLjHm7cmAx0fE2Wml2TZCQV3FmQdSR5J6UEGV3qafG054e0cVVFCqPA==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "node_modules/@types/universal-analytics": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@types/universal-analytics/-/universal-analytics-0.4.8.tgz", - "integrity": "sha512-HozCrji3dIImmQcKnP7cN0ZBiYTjuOavzgPRY0CbT4AQ2zH/ZRqYDNTMiYI7aBeMV5ylbu+h59WG/N8qGePmww==", - "dev": true - }, - "node_modules/@types/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-aGY5pH1Q/DcToKXl4MCj1c0uDUB+zSVFDRCI7Q7js5sguzBTqJV/5kJA2awofbtWYF3xnon1TYdZYnFditRPtQ==", - "dev": true, - "dependencies": { - "@types/configstore": "*", - "boxen": "^4.2.0" + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@types/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-VT/GK7nvDA7lfHy40G3LKM+ICqmdIsBLBHGXcWD97MtqQEjNMX+7Gudo8YGpaSlYdTX7IFThhCE8Jx09HegymQ==", - "dev": true, - "dependencies": { - "@types/node": "*" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "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, - "optional": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=0.4.0" } }, - "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, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "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" + "debug": "4" }, "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": ">= 6.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dependencies": { "ms": "2.1.2" }, @@ -4093,44 +3631,30 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "node_modules/agent-base/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "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, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "optional": 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" + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" }, "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": ">= 8.0.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { + "node_modules/agentkeepalive/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "optional": true, "dependencies": { "ms": "2.1.2" }, @@ -4143,459 +3667,494 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { + "node_modules/agentkeepalive/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "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, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "devOptional": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "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, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "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" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" }, "peerDependencies": { - "eslint": "*" + "ajv": "^8.0.0" }, "peerDependenciesMeta": { - "typescript": { + "ajv": { "optional": true } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "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==", + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" } }, - "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, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "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" + "type-fest": "^1.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "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==", + "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, - "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" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@typescript-eslint/utils/node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, - "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==", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "color-convert": "^1.9.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/@vscode/emmet-helper": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.6.tgz", - "integrity": "sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==", + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "dependencies": { - "emmet": "^2.3.0", - "jsonc-parser": "^2.3.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-languageserver-types": "^3.15.1", - "vscode-uri": "^2.1.2" + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@vscode/emmet-helper/node_modules/jsonc-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", - "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", - "dev": true - }, - "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", - "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", - "dev": true - }, - "node_modules/@vscode/l10n": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz", - "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "optional": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", "dependencies": { - "event-target-shim": "^5.0.0" + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" }, "engines": { - "node": ">=6.5" + "node": ">= 10" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "node_modules/archiver-utils/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==", + "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/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "node_modules/archiver/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, - "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==", + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=14" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, "dependencies": { - "debug": "4" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 6.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "sprintf-js": "~1.0.2" } }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "optional": true, + "node_modules/args": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", + "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", + "dev": true, "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/args/node_modules/camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=6" } }, - "node_modules/agentkeepalive/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "devOptional": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, + "node_modules/args/node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "dev": true, "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/as-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", + "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc=" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "tslib": "^2.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=4" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/ast-types/node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/astro": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/astro/-/astro-2.2.3.tgz", + "integrity": "sha512-Pd67ZBoYxqeyHCZ0UpdmDZYNgcs7JTwc0NMzUScrH4y2hjSY4S8iwmNUtd9pf65gkxMpEbqfvQj06kLzgi4HZg==", + "dev": true, "dependencies": { - "string-width": "^4.1.0" + "@astrojs/compiler": "^1.3.1", + "@astrojs/language-server": "^0.28.3", + "@astrojs/markdown-remark": "^2.1.3", + "@astrojs/telemetry": "^2.1.0", + "@astrojs/webapi": "^2.1.0", + "@babel/core": "^7.18.2", + "@babel/generator": "^7.18.2", + "@babel/parser": "^7.18.4", + "@babel/plugin-transform-react-jsx": "^7.17.12", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.4", + "@types/babel__core": "^7.1.19", + "@types/yargs-parser": "^21.0.0", + "acorn": "^8.8.1", + "boxen": "^6.2.1", + "chokidar": "^3.5.3", + "ci-info": "^3.3.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^0.5.0", + "debug": "^4.3.4", + "deepmerge-ts": "^4.2.2", + "devalue": "^4.2.0", + "diff": "^5.1.0", + "es-module-lexer": "^1.1.0", + "estree-walker": "^3.0.1", + "execa": "^6.1.0", + "fast-glob": "^3.2.11", + "github-slugger": "^2.0.0", + "gray-matter": "^4.0.3", + "html-escaper": "^3.0.3", + "kleur": "^4.1.4", + "magic-string": "^0.27.0", + "mime": "^3.0.0", + "ora": "^6.1.0", + "path-to-regexp": "^6.2.1", + "preferred-pm": "^3.0.3", + "prompts": "^2.4.2", + "rehype": "^12.0.1", + "semver": "^7.3.8", + "server-destroy": "^1.0.1", + "shiki": "^0.11.1", + "slash": "^4.0.0", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "supports-esm": "^1.0.0", + "tsconfig-resolver": "^3.0.1", + "typescript": "*", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2", + "vite": "^4.2.1", + "vitefu": "^0.2.4", + "yargs-parser": "^21.0.1", + "zod": "^3.17.3" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": ">=16.12.0", + "npm": ">=6.14.0" + }, + "peerDependencies": { + "sharp": "^0.31.3" + }, + "peerDependenciesMeta": { + "sharp": { + "optional": true + } } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/astro/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": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "node_modules/astro/node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dev": true, "dependencies": { - "type-fest": "^1.0.2" + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "node_modules/astro/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -4603,958 +4162,960 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/astro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/astro/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + "node_modules/astro/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/astro/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "node_modules/astro/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": { - "default-require-extensions": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "optional": true + "node_modules/astro/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/archiver": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", - "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "node_modules/astro/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" + "ms": "2.1.2" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" + "node": ">=6.0" }, - "engines": { - "node": ">= 6" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/archiver-utils/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==", - "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/astro/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" } }, - "node_modules/archiver/node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "node_modules/astro/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/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "node_modules/astro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, + "node_modules/astro/node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "dev": true + }, + "node_modules/astro/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" + "node_modules/astro/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", + "node_modules/astro/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", "dev": true, "dependencies": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/args/node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "node_modules/astro/node_modules/log-symbols/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, "engines": { - "node": ">=6" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/args/node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "node_modules/astro/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, + "bin": { + "mime": "cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "node_modules/astro/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "node_modules/array-iterate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", - "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "node_modules/astro/node_modules/ora": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", + "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/astro/node_modules/ora/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/astro/node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/astro/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/as-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", - "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc=" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/astro/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/astro/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": { - "tslib": "^2.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/astro": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/astro/-/astro-2.2.3.tgz", - "integrity": "sha512-Pd67ZBoYxqeyHCZ0UpdmDZYNgcs7JTwc0NMzUScrH4y2hjSY4S8iwmNUtd9pf65gkxMpEbqfvQj06kLzgi4HZg==", + "node_modules/astro/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": { - "@astrojs/compiler": "^1.3.1", - "@astrojs/language-server": "^0.28.3", - "@astrojs/markdown-remark": "^2.1.3", - "@astrojs/telemetry": "^2.1.0", - "@astrojs/webapi": "^2.1.0", - "@babel/core": "^7.18.2", - "@babel/generator": "^7.18.2", - "@babel/parser": "^7.18.4", - "@babel/plugin-transform-react-jsx": "^7.17.12", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.4", - "@types/babel__core": "^7.1.19", - "@types/yargs-parser": "^21.0.0", - "acorn": "^8.8.1", - "boxen": "^6.2.1", - "chokidar": "^3.5.3", - "ci-info": "^3.3.1", - "common-ancestor-path": "^1.0.1", - "cookie": "^0.5.0", - "debug": "^4.3.4", - "deepmerge-ts": "^4.2.2", - "devalue": "^4.2.0", - "diff": "^5.1.0", - "es-module-lexer": "^1.1.0", - "estree-walker": "^3.0.1", - "execa": "^6.1.0", - "fast-glob": "^3.2.11", - "github-slugger": "^2.0.0", - "gray-matter": "^4.0.3", - "html-escaper": "^3.0.3", - "kleur": "^4.1.4", - "magic-string": "^0.27.0", - "mime": "^3.0.0", - "ora": "^6.1.0", - "path-to-regexp": "^6.2.1", - "preferred-pm": "^3.0.3", - "prompts": "^2.4.2", - "rehype": "^12.0.1", - "semver": "^7.3.8", - "server-destroy": "^1.0.1", - "shiki": "^0.11.1", - "slash": "^4.0.0", - "string-width": "^5.1.2", - "strip-ansi": "^7.0.1", - "supports-esm": "^1.0.0", - "tsconfig-resolver": "^3.0.1", - "typescript": "*", - "unist-util-visit": "^4.1.0", - "vfile": "^5.3.2", - "vite": "^4.2.1", - "vitefu": "^0.2.4", - "yargs-parser": "^21.0.1", - "zod": "^3.17.3" - }, - "bin": { - "astro": "astro.js" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=16.12.0", - "npm": ">=6.14.0" - }, - "peerDependencies": { - "sharp": "^0.31.3" + "node": ">=12" }, - "peerDependenciesMeta": { - "sharp": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/astro/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==", + "node_modules/astro/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/astro/node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "node_modules/astro/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astro/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/astro/node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, + "dependencies": { + "string-width": "^5.0.1" + }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astro/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/astro/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": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/astro/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "node_modules/astro/node_modules/wrap-ansi/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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/astro/node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "node_modules/astro/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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/astro/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "lodash": "^4.17.14" } }, - "node_modules/astro/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==", + "node_modules/async-lock": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.3.2.tgz", + "integrity": "sha512-phnXdS3RP7PPcmP6NWWzWMU0sLTeyvtZCxBPpZdkYE3seGLKSQZs9FrmVO/qwypq98FUtWWUEYxziLkdGk5nnA==" + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, + "optional": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "retry": "0.13.1" } }, - "node_modules/astro/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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "node_modules/astro/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/atlassian-openapi": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/atlassian-openapi/-/atlassian-openapi-1.0.15.tgz", + "integrity": "sha512-HzgdBHJ/9jZWZfass5DRJNG4vLxoFl6Zcl3B+8Cp2VSpEH7t0laBGnGtcthvj2h73hq8dzjKtVlG30agBZ4OPw==", "dev": true, "dependencies": { - "ms": "2.1.2" - }, + "jsonpointer": "^5.0.0", + "urijs": "^1.18.10" + } + }, + "node_modules/atlassian-openapi/node_modules/jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "dev": true, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/astro/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, "engines": { - "node": ">=0.3.1" + "node": ">= 0.8" } }, - "node_modules/astro/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==", + "node_modules/basic-auth-connect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=" + }, + "node_modules/basic-auth-parser": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/basic-auth-parser/-/basic-auth-parser-0.0.2.tgz", + "integrity": "sha1-zp5xp38jwSee7NJlmypGJEwVbkE=", "dev": true }, - "node_modules/astro/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "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==", "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/astro/node_modules/html-escaper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", - "dev": true + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "engines": { + "node": "*" + } }, - "node_modules/astro/node_modules/is-interactive": { + "node_modules/binary-extensions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/astro/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">=12" + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8" } }, - "node_modules/astro/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", "dev": true, "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astro/node_modules/log-symbols/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/astro/node_modules/mime": { + "node_modules/boxen/node_modules/chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/astro/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/astro/node_modules/ora": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", - "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "node_modules/boxen/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": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/astro/node_modules/ora/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "node_modules/boxen/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/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/astro/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/astro/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "node_modules/boxen/node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/astro/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/astro/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, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/astro/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==", + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "ansi-regex": "^6.0.1" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, - "engines": { - "node": ">=12" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/astro/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "has-flag": "^4.0.0" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/astro/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/astro/node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, - "dependencies": { - "string-width": "^5.0.1" - }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astro/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==", + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "streamsearch": "^1.1.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=10.16.0" } }, - "node_modules/astro/node_modules/wrap-ansi/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, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/astro/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, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/cacache/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==", + "optional": true, "dependencies": { - "lodash": "^4.17.14" + "balanced-match": "^1.0.0" } }, - "node_modules/async-lock": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.3.2.tgz", - "integrity": "sha512-phnXdS3RP7PPcmP6NWWzWMU0sLTeyvtZCxBPpZdkYE3seGLKSQZs9FrmVO/qwypq98FUtWWUEYxziLkdGk5nnA==" - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dev": true, + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "optional": true, - "dependencies": { - "retry": "0.13.1" + "engines": { + "node": ">=10" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/atlassian-openapi": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/atlassian-openapi/-/atlassian-openapi-1.0.15.tgz", - "integrity": "sha512-HzgdBHJ/9jZWZfass5DRJNG4vLxoFl6Zcl3B+8Cp2VSpEH7t0laBGnGtcthvj2h73hq8dzjKtVlG30agBZ4OPw==", - "dev": true, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "optional": true, "dependencies": { - "jsonpointer": "^5.0.0", - "urijs": "^1.18.10" - } - }, - "node_modules/atlassian-openapi/node_modules/jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", - "dev": true, + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, + "node": ">=12" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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/cacache/node_modules/lru-cache": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "optional": true, + "engines": { + "node": ">=12" + } }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "optional": true, "dependencies": { - "safe-buffer": "5.1.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/basic-auth-connect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", - "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=" - }, - "node_modules/basic-auth-parser": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/basic-auth-parser/-/basic-auth-parser-0.0.2.tgz", - "integrity": "sha1-zp5xp38jwSee7NJlmypGJEwVbkE=", - "dev": true - }, - "node_modules/basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=10.0.0" + "node": ">=10" } }, - "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/call-bind": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/body-parser/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { - "ansi-align": "^3.0.0", "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { "node": ">=8" @@ -5563,175 +5124,207 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "node_modules/caniuse-lite": { + "version": "1.0.30001589", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", + "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", "dev": true, - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "cdl": "bin/cdl.js" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "lodash": "^4.17.15" }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/boxen/node_modules/color-convert": { + "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/boxen/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/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "individual", + "url": "https://paulmillr.com/funding/" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/cjson": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", + "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "json-parse-helpfulerror": "^1.0.3" + }, + "engines": { + "node": ">= 0.3.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "devOptional": true, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "engines": { "node": ">=6" }, @@ -5739,1606 +5332,1596 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "streamsearch": "^1.1.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=10.16.0" + "node": ">=8" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "optional": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "node": ">=6" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/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==", - "optional": true, + "node_modules/cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, + "colors": "1.0.3" + }, "engines": { - "node": ">=10" + "node": ">= 0.2.0" } }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "optional": true, + "node_modules/cli-table3": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "string-width": "^4.2.0" }, "engines": { - "node": ">=12" + "node": "10.* || >= 12.*" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", - "optional": true, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "optional": true, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/cacache/node_modules/mkdirp": { + "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/cacache/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, + "node_modules/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" + "color-name": "1.1.3" } }, - "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "node_modules/colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", "engines": { - "node": ">=6" + "node": ">=0.1.90" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001589", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", - "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, + "node_modules/commander": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", + "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==", "engines": { - "node": ">= 10" + "node": ">= 6" } }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 12.0.0" } }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, + "node_modules/compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dependencies": { - "check-error": "^1.0.2" + "mime-db": ">= 1.40.0 < 2" }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" + "engines": { + "node": ">= 0.6" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, + "node_modules/configstore/node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/configstore/node_modules/dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "is-obj": "^2.0.0" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=8" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/ci-info": { + "node_modules/configstore/node_modules/unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/cjson": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", - "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dependencies": { - "json-parse-helpfulerror": "^1.0.3" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">= 0.3.0" + "node": ">= 0.10.0" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "devOptional": true, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/content-disposition/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==", + "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/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.1" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { - "colors": "1.0.3" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">= 0.2.0" + "node": ">= 0.10" } }, - "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "dependencies": { - "string-width": "^4.2.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "engines": { + "node": ">=0.8" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, "engines": { "node": ">= 10" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/cross-env": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", + "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, "engines": { - "node": ">=0.8" + "node": ">=4.8" } }, - "node_modules/color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "node_modules/cross-env/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "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==", + "dev": true, "dependencies": { - "color-name": "1.1.3" + "node-fetch": "2.6.7" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, + "node_modules/cross-spawn/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "color-support": "bin.js" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true }, - "node_modules/colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + "node_modules/csv-parse": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.0.4.tgz", + "integrity": "sha512-5AIdl8l6n3iYQYxan5djB5eKDa+vBnhfWZtRpJTcrETWfVLYN0WSj3L9RwvgYt+psoO77juUr8TG8qpfGZifVQ==" }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "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==", "engines": { - "node": ">=0.1.90" + "node": ">= 14" } }, - "node_modules/colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "color": "3.0.x", - "text-hex": "1.0.x" + "ms": "2.0.0" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, + "dependencies": { + "character-entities": "^2.0.0" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/commander": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", - "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==", + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=0.12" } }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, + "node_modules/deep-equal-in-any-order": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-2.0.6.tgz", + "integrity": "sha512-RfnWHQzph10YrUjvWwhd15Dne8ciSJcZ3U6OD7owPwiVwsdE5IFSoZGg8rlwJD11ES+9H5y8j3fCofviRHOqLQ==", + "dependencies": { + "lodash.mapvalues": "^4.6.0", + "sort-any": "^2.0.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { - "node": ">= 12.0.0" + "node": ">=4.0.0" } }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true + "node_modules/deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=" }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "node_modules/deepmerge-ts": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz", + "integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } }, - "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dependencies": { - "mime-db": ">= 1.40.0 < 2" - }, - "engines": { - "node": ">= 0.6" + "clone": "^1.0.2" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "node_modules/degenerator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.0.tgz", + "integrity": "sha512-pdRxyYVe0unlUE/eeXBxFdB8w8J7QNNf7hFE/BKOAlTCz0bkF9h1MC82ii0r1ypqB/PTKYDbg4K9SZT9yfd9Fg==", "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "ast-types": "^0.13.4", + "escodegen": "^1.14.3", + "esprima": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/configstore/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/configstore/node_modules/dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dependencies": { - "is-obj": "^2.0.0" - }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "devOptional": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/configstore/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">= 0.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true + "node_modules/devalue": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz", + "integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==", + "dev": true }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/devtools-protocol": { + "version": "0.0.1056733", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1056733.tgz", + "integrity": "sha512-CmTu6SQx2g3TbZzDCAV58+LTxVdKplS7xip0g5oDXpZ+isr0rv5dDP8ToyVRywzPHkCCPKgKgScEcwz4uPWDIA==", + "dev": true + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/content-disposition/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==", - "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/diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.3.1" } }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "path-type": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/cosmiconfig/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", "dev": true, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" + "node_modules/duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" } }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/cross-env": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dependencies": { - "cross-spawn": "^6.0.5", - "is-windows": "^1.0.0" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=4.0" + "safe-buffer": "^5.0.1" } }, - "node_modules/cross-env/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "node_modules/cross-env/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } + "node_modules/electron-to-chromium": { + "version": "1.4.256", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz", + "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==", + "dev": true }, - "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==", + "node_modules/emmet": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.2.tgz", + "integrity": "sha512-YgmsMkhUgzhJMgH5noGudfxqrQn1bapvF0y7C1e7A0jWFImsRrrvVslzyZz0919NED/cjFOpVWx7c973V+2S/w==", "dev": true, "dependencies": { - "node-fetch": "2.6.7" + "@emmetio/abbreviation": "^2.3.1", + "@emmetio/css-abbreviation": "^2.1.6" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "env-variable": "0.0.x" } }, - "node_modules/cross-spawn/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/cross-spawn/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" + "iconv-lite": "^0.6.2" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/csv-parse": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.0.4.tgz", - "integrity": "sha512-5AIdl8l6n3iYQYxan5djB5eKDa+vBnhfWZtRpJTcrETWfVLYN0WSj3L9RwvgYt+psoO77juUr8TG8qpfGZifVQ==" - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", - "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "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/end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dependencies": { - "ms": "2.0.0" + "once": "^1.4.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "node_modules/env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "is-arrayish": "^0.2.1" } }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { - "node": ">=0.12" + "node": ">= 0.4" } }, - "node_modules/deep-equal-in-any-order": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-2.0.6.tgz", - "integrity": "sha512-RfnWHQzph10YrUjvWwhd15Dne8ciSJcZ3U6OD7owPwiVwsdE5IFSoZGg8rlwJD11ES+9H5y8j3fCofviRHOqLQ==", - "dependencies": { - "lodash.mapvalues": "^4.6.0", - "sort-any": "^2.0.0" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-freeze": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=" + "node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, - "node_modules/deepmerge-ts": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz", - "integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==", - "dev": true, - "engines": { - "node": ">=12.4.0" - } + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "node_modules/esbuild": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz", + "integrity": "sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==", "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.16", + "@esbuild/android-arm64": "0.17.16", + "@esbuild/android-x64": "0.17.16", + "@esbuild/darwin-arm64": "0.17.16", + "@esbuild/darwin-x64": "0.17.16", + "@esbuild/freebsd-arm64": "0.17.16", + "@esbuild/freebsd-x64": "0.17.16", + "@esbuild/linux-arm": "0.17.16", + "@esbuild/linux-arm64": "0.17.16", + "@esbuild/linux-ia32": "0.17.16", + "@esbuild/linux-loong64": "0.17.16", + "@esbuild/linux-mips64el": "0.17.16", + "@esbuild/linux-ppc64": "0.17.16", + "@esbuild/linux-riscv64": "0.17.16", + "@esbuild/linux-s390x": "0.17.16", + "@esbuild/linux-x64": "0.17.16", + "@esbuild/netbsd-x64": "0.17.16", + "@esbuild/openbsd-x64": "0.17.16", + "@esbuild/sunos-x64": "0.17.16", + "@esbuild/win32-arm64": "0.17.16", + "@esbuild/win32-ia32": "0.17.16", + "@esbuild/win32-x64": "0.17.16" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" } }, - "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { - "node": ">= 14" + "node": ">=0.8.0" } }, - "node_modules/degenerator/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "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==", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=6.0" + "node": ">=4.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, - "node_modules/degenerator/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "devOptional": true, - "engines": { - "node": ">= 0.6" + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/eslint-plugin-jsdoc": { + "version": "48.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.1.0.tgz", + "integrity": "sha512-g9S8ukmTd1DVcV/xeBYPPXOZ6rc8WJ4yi0+MVxJ1jBOrz5kmxV9gJJQ64ltCqIWFnBChLIhLVx3tbTSarqVyFA==", "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.42.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.6.0", + "spdx-expression-parse": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/eslint-plugin-jsdoc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/devalue": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz", - "integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==", - "dev": true + "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/devtools-protocol": { - "version": "0.0.1056733", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1056733.tgz", - "integrity": "sha512-CmTu6SQx2g3TbZzDCAV58+LTxVdKplS7xip0g5oDXpZ+isr0rv5dDP8ToyVRywzPHkCCPKgKgScEcwz4uPWDIA==", + "node_modules/eslint-plugin-jsdoc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, "engines": { - "node": ">=0.3.1" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/doctrine": { + "node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6.0.0" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/dset": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/duplexify": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", - "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/eslint/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": { - "safe-buffer": "^5.0.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz", - "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/emmet": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.2.tgz", - "integrity": "sha512-YgmsMkhUgzhJMgH5noGudfxqrQn1bapvF0y7C1e7A0jWFImsRrrvVslzyZz0919NED/cjFOpVWx7c973V+2S/w==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { - "@emmetio/abbreviation": "^2.3.1", - "@emmetio/css-abbreviation": "^2.1.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "node_modules/eslint/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": { - "env-variable": "0.0.x" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 0.8" + "node": ">=7.0.0" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } + "node_modules/eslint/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/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dependencies": { - "once": "^1.4.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "optional": true - }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/esbuild": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz", - "integrity": "sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==", + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.16", - "@esbuild/android-arm64": "0.17.16", - "@esbuild/android-x64": "0.17.16", - "@esbuild/darwin-arm64": "0.17.16", - "@esbuild/darwin-x64": "0.17.16", - "@esbuild/freebsd-arm64": "0.17.16", - "@esbuild/freebsd-x64": "0.17.16", - "@esbuild/linux-arm": "0.17.16", - "@esbuild/linux-arm64": "0.17.16", - "@esbuild/linux-ia32": "0.17.16", - "@esbuild/linux-loong64": "0.17.16", - "@esbuild/linux-mips64el": "0.17.16", - "@esbuild/linux-ppc64": "0.17.16", - "@esbuild/linux-riscv64": "0.17.16", - "@esbuild/linux-s390x": "0.17.16", - "@esbuild/linux-x64": "0.17.16", - "@esbuild/netbsd-x64": "0.17.16", - "@esbuild/openbsd-x64": "0.17.16", - "@esbuild/sunos-x64": "0.17.16", - "@esbuild/win32-arm64": "0.17.16", - "@esbuild/win32-ia32": "0.17.16", - "@esbuild/win32-x64": "0.17.16" + "node": ">= 0.8.0" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "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==", + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "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" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">= 0.8.0" } }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" }, - "bin": { - "eslint": "bin/eslint.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7347,755 +6930,826 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "peerDependencies": { - "eslint": ">=5.16.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "estraverse": "^5.1.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=0.10" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "48.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.0.6.tgz", - "integrity": "sha512-LgwXOX6TWxxFYcbdVe+BJ94Kl/pgjSPYHLzqEdAMXTA1BH9WDx7iJ+9/iDajPF64LtzWX8C1mCfpbMZjJGhAOw==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.42.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.6.0", - "spdx-expression-parse": "^4.0.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": ">=4.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "ms": "2.1.2" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=4.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } }, - "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@types/estree": "^1.0.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" - }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { - "node": ">=8.0.0" + "node": ">= 0.6" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6" } }, - "node_modules/eslint/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==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.8.x" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/events-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz", + "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==" }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/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" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint/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/eslint/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, "engines": { - "node": ">=6.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { + "node_modules/execa/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "node_modules/exegesis": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.0.tgz", + "integrity": "sha512-iqc55n+hmv8d1KYNMjq7bCcp4u74oRY6MBcj6Vsux7Wd4mRvlgahKqrBTyLIWwscNjEF3qvPmeJ0RPTj8ORMNg==", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.3", + "ajv": "^8.3.0", + "ajv-formats": "^2.1.0", + "body-parser": "^1.18.3", + "content-type": "^1.0.4", + "deep-freeze": "0.0.1", + "events-listener": "^1.1.0", + "glob": "^7.1.3", + "json-ptr": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "lodash": "^4.17.11", + "openapi3-ts": "^2.0.1", + "promise-breaker": "^5.0.0", + "pump": "^3.0.0", + "qs": "^6.6.0", + "raw-body": "^2.3.3", + "semver": "^7.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=6.0.0", + "npm": ">5.0.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, + "node_modules/exegesis-express": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz", + "integrity": "sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw==", "dependencies": { - "is-glob": "^4.0.3" + "exegesis": "^4.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6.0.0", + "npm": ">5.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, + "node_modules/exegesis/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/exegesis/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "argparse": "^2.0.1" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } + "node_modules/express/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==", + "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/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.6.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "extract-zip": "cli.js" }, "engines": { - "node": ">=4" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "ms": "2.1.2" }, "engines": { - "node": ">=0.10" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=4.0" + "node": ">=8.6.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dependencies": { + "punycode": "^1.3.2" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/fast-url-parser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0" + "reusify": "^1.0.4" } }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=0.8.x" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/events-listener": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz", - "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==" - }, - "node_modules/execa": { + "node_modules/filesize": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=8" } }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8" } }, - "node_modules/execa/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/execa/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "mimic-fn": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exegesis": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.1.tgz", - "integrity": "sha512-PvSqaMOw2absLBgsthtJyVOeCHN4lxQ1dM7ibXb6TfZZJaoXtGELoEAGJRFvdN16+u9kg8oy1okZXRk8VpimWA==", + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", + "dev": true, "dependencies": { - "@apidevtools/json-schema-ref-parser": "^9.0.3", - "ajv": "^8.3.0", - "ajv-formats": "^2.1.0", - "body-parser": "^1.18.3", - "content-type": "^1.0.4", - "deep-freeze": "0.0.1", - "events-listener": "^1.1.0", - "glob": "^7.1.3", - "json-ptr": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "lodash": "^4.17.11", - "openapi3-ts": "^3.1.1", - "promise-breaker": "^6.0.0", - "pump": "^3.0.0", - "qs": "^6.6.0", - "raw-body": "^2.3.3", - "semver": "^7.0.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">5.0.0" + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" } }, - "node_modules/exegesis-express": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz", - "integrity": "sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw==", + "node_modules/firebase-admin": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.5.0.tgz", + "integrity": "sha512-bBdlYtNvXx8yZGdCd00NrfZl1o1A0aXOw5h8q5PwC8RXikOLNXq8vYtSKW44dj8zIaafVP6jFdcUXZem/LMsHA==", + "dev": true, "dependencies": { - "exegesis": "^4.1.0" + "@fastify/busboy": "^1.1.0", + "@firebase/database-compat": "^0.3.0", + "@firebase/database-types": "^0.10.0", + "@types/node": ">=12.12.47", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.0.1", + "node-forge": "^1.3.1", + "uuid": "^9.0.0" }, "engines": { - "node": ">=6.0.0", - "npm": ">5.0.0" - } - }, - "node_modules/exegesis/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node": ">=14" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "optionalDependencies": { + "@google-cloud/firestore": "^6.4.0", + "@google-cloud/storage": "^6.5.2" } }, - "node_modules/exegesis/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/firebase-admin/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "node_modules/firebase-functions": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-4.3.1.tgz", + "integrity": "sha512-sbitfzHcuWsLD03/EgeIRIfkVGeyGjNo3IEA2z+mDIkK1++LhKLCWwVQXrMqeeATOG04CAp30guAagsNElVlng==", + "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@types/cors": "^2.8.5", + "@types/express": "4.17.3", + "cors": "^2.8.5", + "express": "^4.17.1", + "node-fetch": "^2.6.7", + "protobufjs": "^7.2.2" + }, + "bin": { + "firebase-functions": "lib/bin/firebase-functions.js" }, "engines": { - "node": ">= 0.10.0" + "node": ">=14.10.0" + }, + "peerDependencies": { + "firebase-admin": "^10.0.0 || ^11.0.0" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "node_modules/firebase-functions/node_modules/@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", + "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "node_modules/firebase-functions/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true + }, + "node_modules/firebase-functions/node_modules/protobufjs": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12.0.0" } }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">= 0.8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">= 0.8" + "node": ">=8.0.0" } }, - "node_modules/express/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "ee-first": "1.1.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/formidable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", + "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", + "dev": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/express/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==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fromentries": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz", + "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw==", + "dev": true, "funding": [ { "type": "github", @@ -8111,80 +7765,143 @@ } ] }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "is-extendable": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">=4" + "node": ">= 10.0.0" } }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "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==", "dependencies": { - "os-tmpdir": "~1.0.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">= 8" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/extract-zip/node_modules/debug": { + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true, + "optional": true + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gaxios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.3.0.tgz", + "integrity": "sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gaxios/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==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -8197,1091 +7914,876 @@ } } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dependencies": { - "pump": "^3.0.0" + "agent-base": "^7.0.2", + "debug": "4" }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extract-zip/node_modules/ms": { + "node_modules/gaxios/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, + "node_modules/gaxios/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=8.6.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", "dependencies": { - "punycode": "^1.3.2" + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">=0.8.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true, - "dependencies": { - "pend": "~1.2.0" + "engines": { + "node": "*" } }, - "node_modules/fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/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, - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8.0.0" } }, - "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "engines": { - "node": ">= 0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "node_modules/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, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "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==", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^5.0.1", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "ms": "2.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "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==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6 <7 || >=8" } }, - "node_modules/find-yarn-workspace-root2": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", - "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2", - "pkg-dir": "^4.2.0" - } + "node_modules/get-uri/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/firebase": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.16.0.tgz", - "integrity": "sha512-nNLpDwJvfP3crRc6AjnHH46TAkFzk8zimNVMJfYRCwAf5amOSGyU8duuc3IsJF6dQGiYLSfzfr2tMCsQa+rhKQ==", - "dev": true, - "dependencies": { - "@firebase/analytics": "0.9.1", - "@firebase/analytics-compat": "0.2.1", - "@firebase/app": "0.9.1", - "@firebase/app-check": "0.6.1", - "@firebase/app-check-compat": "0.3.1", - "@firebase/app-compat": "0.2.1", - "@firebase/app-types": "0.9.0", - "@firebase/auth": "0.21.1", - "@firebase/auth-compat": "0.3.1", - "@firebase/database": "0.14.1", - "@firebase/database-compat": "0.3.1", - "@firebase/firestore": "3.8.1", - "@firebase/firestore-compat": "0.3.1", - "@firebase/functions": "0.9.1", - "@firebase/functions-compat": "0.3.1", - "@firebase/installations": "0.6.1", - "@firebase/installations-compat": "0.2.1", - "@firebase/messaging": "0.12.1", - "@firebase/messaging-compat": "0.2.1", - "@firebase/performance": "0.6.1", - "@firebase/performance-compat": "0.2.1", - "@firebase/remote-config": "0.4.1", - "@firebase/remote-config-compat": "0.2.1", - "@firebase/storage": "0.10.1", - "@firebase/storage-compat": "0.2.1", - "@firebase/util": "1.9.0" - } + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true }, - "node_modules/firebase-admin": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.5.0.tgz", - "integrity": "sha512-bBdlYtNvXx8yZGdCd00NrfZl1o1A0aXOw5h8q5PwC8RXikOLNXq8vYtSKW44dj8zIaafVP6jFdcUXZem/LMsHA==", - "dev": true, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { - "@fastify/busboy": "^1.1.0", - "@firebase/database-compat": "^0.3.0", - "@firebase/database-types": "^0.10.0", - "@types/node": ">=12.12.47", - "jsonwebtoken": "^9.0.0", - "jwks-rsa": "^3.0.1", - "node-forge": "^1.3.1", - "uuid": "^9.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=14" + "node": "*" }, - "optionalDependencies": { - "@google-cloud/firestore": "^6.4.0", - "@google-cloud/storage": "^6.5.2" - } - }, - "node_modules/firebase-admin/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/firebase-functions": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-4.3.1.tgz", - "integrity": "sha512-sbitfzHcuWsLD03/EgeIRIfkVGeyGjNo3IEA2z+mDIkK1++LhKLCWwVQXrMqeeATOG04CAp30guAagsNElVlng==", - "dev": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "@types/cors": "^2.8.5", - "@types/express": "4.17.3", - "cors": "^2.8.5", - "express": "^4.17.1", - "node-fetch": "^2.6.7", - "protobufjs": "^7.2.2" - }, - "bin": { - "firebase-functions": "lib/bin/firebase-functions.js" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=14.10.0" - }, - "peerDependencies": { - "firebase-admin": "^10.0.0 || ^11.0.0" + "node": ">= 6" } }, - "node_modules/firebase-functions/node_modules/@types/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", - "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", - "dev": true, + "node_modules/glob-slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", + "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=" + }, + "node_modules/glob-slasher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", + "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "glob-slash": "^1.0.0", + "lodash.isobject": "^2.4.1", + "toxic": "^1.0.0" } }, - "node_modules/firebase-functions/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true - }, - "node_modules/firebase-functions/node_modules/protobufjs": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", - "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", - "dev": true, - "hasInstallScript": true, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" + "ini": "2.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", "dev": true }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/google-auth-library": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.7.0.tgz", + "integrity": "sha512-I/AvzBiUXDzLOy4iIZ2W+Zq33W4lcukQv1nl7C8WUA6SQwyQwUwu3waNmWNAvzds//FG8SZ+DnKnW/2k6mQS8A==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=14" } }, - "node_modules/formidable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", - "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", - "dev": true, + "node_modules/google-auth-library/node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" + "gaxios": "^6.0.0", + "jws": "^4.0.0" }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" + "node_modules/google-auth-library/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" + "node_modules/google-auth-library/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/fromentries": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz", - "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw==", + "node_modules/google-discovery-to-swagger": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/google-discovery-to-swagger/-/google-discovery-to-swagger-2.1.0.tgz", + "integrity": "sha512-MI1gfmWPkuXCp6yH+9rfd8ZG8R1R5OIyY4WlKDTqr2+ere1gt2Ne4DSEu8HM7NkwKpuVCE5TrTRAPfm3ownMUQ==", "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" - } - ] + "dependencies": { + "json-schema-compatibility": "^1.1.0", + "jsonpath": "^1.0.2", + "lodash": "^4.17.15", + "mime-db": "^1.21.0", + "mime-lookup": "^0.0.2", + "traverse": "~0.6.6", + "urijs": "^1.17.0" + } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "node_modules/google-discovery-to-swagger/node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/google-gax": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.3.tgz", + "integrity": "sha512-caItkifbcPDVf5xW2j6xLXmuX9bh2dheJN9AzMuQj6VvWacUVV5d0BkjL+Ia8sgX9VvXtbqjf4NKK3nTgV9UUQ==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@grpc/grpc-js": "~1.7.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.1.2", + "protobufjs-cli": "1.1.0", + "retry-request": "^5.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" }, "engines": { "node": ">=12" } }, - "node_modules/fs-extra/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/google-gax/node_modules/@grpc/proto-loader": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", + "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", "dependencies": { - "universalify": "^2.0.0" + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">= 10.0.0" + "node": ">=6" } }, - "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==", + "node_modules/google-gax/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==", "dependencies": { - "minipass": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node": ">=8" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true, - "optional": true - }, - "node_modules/fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", - "engines": { - "node": ">= 0.6.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, + "node_modules/google-gax/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==", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/gaxios": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.1.0.tgz", - "integrity": "sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg==", + "node_modules/google-gax/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/gaxios/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "node_modules/google-gax/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==", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/gcp-metadata": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.0.tgz", - "integrity": "sha512-vQZD57cQkqIA6YPGXM/zc+PIZfNRFdukWGsGZ5+LcJzesi5xp6Gn7a02wRJi4eXPyArNMIYpPET4QMxGqtlk6Q==", - "dependencies": { - "gaxios": "^3.0.0", - "json-bigint": "^1.0.0" - }, + "node_modules/google-gax/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==" + }, + "node_modules/google-gax/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">=10" + "node": ">=4.0" } }, - "node_modules/gcp-metadata/node_modules/gaxios": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz", - "integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==", + "node_modules/google-gax/node_modules/gaxios": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", "dependencies": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.7" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/gcp-metadata/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "node_modules/google-gax/node_modules/gcp-metadata": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, + "node_modules/google-gax/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/google-gax/node_modules/google-auth-library": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12" } }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, + "node_modules/google-gax/node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, "engines": { - "node": "*" + "node": ">=12.0.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/google-gax/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.0.0" } }, - "node_modules/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, + "node_modules/google-gax/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/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, + "node_modules/google-gax/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "node_modules/google-gax/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">= 14" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/google-gax/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" } }, - "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==", + "node_modules/google-gax/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=10" } }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/google-gax/node_modules/protobufjs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "hasInstallScript": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12.0.0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/google-gax/node_modules/protobufjs-cli": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.0.tgz", + "integrity": "sha512-VXMQn+z3yG2WbN2E+mx5vcyIHF7yJSg2jqyqfxcZLWNOSTqUzSSgAE5vu04/JEpwxTI04JGyrZRDHC36wr04uw==", "dependencies": { - "is-glob": "^4.0.1" + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" }, "engines": { - "node": ">= 6" + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" } }, - "node_modules/glob-slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", - "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=" + "node_modules/google-gax/node_modules/protobufjs/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, - "node_modules/glob-slasher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", - "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", + "node_modules/google-gax/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "glob-slash": "^1.0.0", - "lodash.isobject": "^2.4.1", - "toxic": "^1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "node_modules/google-p12-pem": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.3.tgz", + "integrity": "sha512-MC0jISvzymxePDVembypNefkAQp+DRP7dBE+zNUPaIjEspIlYg0++OrsNr248V9tPbz6iqtZ7rX1hxWA5B8qBQ==", "dependencies": { - "ini": "2.0.0" + "node-forge": "^1.0.0" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "node_modules/googleapis": { + "version": "105.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-105.0.0.tgz", + "integrity": "sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==", + "dev": true, + "dependencies": { + "google-auth-library": "^8.0.2", + "googleapis-common": "^6.0.0" + }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/googleapis-common": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.3.tgz", + "integrity": "sha512-Xyb4FsQ6PQDu4tAE/M/ev4yzZhFe2Gc7+rKmuCX2ZGk1ajBKbafsGlVYpmzGqQOT93BRDe8DiTmQb6YSkbICrA==", "dev": true, + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^5.0.1", + "google-auth-library": "^8.0.2", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, "engines": { - "node": ">=4" + "node": ">=12.0.0" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/googleapis-common/node_modules/gaxios": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", + "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true + "node_modules/googleapis-common/node_modules/gcp-metadata": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", + "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", + "dev": true, + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "node_modules/googleapis-common/node_modules/google-auth-library": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.5.1.tgz", + "integrity": "sha512-7jNMDRhenfw2HLfL9m0ZP/Jw5hzXygfSprzBdypG3rZ+q2gIUbVC/osrFB7y/Z5dkrUr1mnLoDNlerF+p6VXZA==", + "dev": true, "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", "jws": "^4.0.0", "lru-cache": "^6.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/google-auth-library/node_modules/jwa": { + "node_modules/googleapis-common/node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dev": true, + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dev": true, + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/googleapis-common/node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "node_modules/google-auth-library/node_modules/jws": { + "node_modules/googleapis-common/node_modules/jws": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, - "node_modules/google-discovery-to-swagger": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/google-discovery-to-swagger/-/google-discovery-to-swagger-2.1.0.tgz", - "integrity": "sha512-MI1gfmWPkuXCp6yH+9rfd8ZG8R1R5OIyY4WlKDTqr2+ere1gt2Ne4DSEu8HM7NkwKpuVCE5TrTRAPfm3ownMUQ==", + "node_modules/googleapis-common/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, - "dependencies": { - "json-schema-compatibility": "^1.1.0", - "jsonpath": "^1.0.2", - "lodash": "^4.17.15", - "mime-db": "^1.21.0", - "mime-lookup": "^0.0.2", - "traverse": "~0.6.6", - "urijs": "^1.17.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/google-discovery-to-swagger/node_modules/traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "node_modules/google-gax": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", - "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "node_modules/googleapis/node_modules/gaxios": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", + "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", + "dev": true, "dependencies": { - "@grpc/grpc-js": "~1.8.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "@types/rimraf": "^3.0.2", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.4", - "protobufjs-cli": "1.1.1", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, "engines": { "node": ">=12" } }, - "node_modules/google-gax/node_modules/@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "node_modules/googleapis/node_modules/gcp-metadata": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", + "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", + "dev": true, "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" }, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": ">=12" } }, - "node_modules/google-gax/node_modules/@grpc/proto-loader": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", - "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/google-gax/node_modules/@types/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "node_modules/google-gax/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/google-gax/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==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/google-gax/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/google-gax/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/google-gax/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==" - }, - "node_modules/google-gax/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/google-gax/node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax/node_modules/gcp-metadata": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", - "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/google-gax/node_modules/google-auth-library": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", - "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "node_modules/googleapis/node_modules/google-auth-library": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.5.1.tgz", + "integrity": "sha512-7jNMDRhenfw2HLfL9m0ZP/Jw5hzXygfSprzBdypG3rZ+q2gIUbVC/osrFB7y/Z5dkrUr1mnLoDNlerF+p6VXZA==", + "dev": true, "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -9297,10 +8799,11 @@ "node": ">=12" } }, - "node_modules/google-gax/node_modules/google-p12-pem": { + "node_modules/googleapis/node_modules/google-p12-pem": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dev": true, "dependencies": { "node-forge": "^1.3.1" }, @@ -9311,10 +8814,11 @@ "node": ">=12.0.0" } }, - "node_modules/google-gax/node_modules/gtoken": { + "node_modules/googleapis/node_modules/gtoken": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dev": true, "dependencies": { "gaxios": "^5.0.1", "google-p12-pem": "^4.0.0", @@ -9324,18 +8828,11 @@ "node": ">=12.0.0" } }, - "node_modules/google-gax/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/google-gax/node_modules/is-stream": { + "node_modules/googleapis/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { "node": ">=8" }, @@ -9343,228 +8840,111 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/google-gax/node_modules/jwa": { + "node_modules/googleapis/node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "node_modules/google-gax/node_modules/jws": { + "node_modules/googleapis/node_modules/jws": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, - "node_modules/google-gax/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "brace-expansion": "^2.0.1" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/google-gax/node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "hasInstallScript": true, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "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/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=6.0" } }, - "node_modules/google-gax/node_modules/protobufjs-cli": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", - "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^4.0.0", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" + "node": ">=4.x" } }, - "node_modules/google-gax/node_modules/protobufjs/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" - }, - "node_modules/google-gax/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", "dependencies": { - "has-flag": "^4.0.0" + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/google-p12-pem": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.3.tgz", - "integrity": "sha512-MC0jISvzymxePDVembypNefkAQp+DRP7dBE+zNUPaIjEspIlYg0++OrsNr248V9tPbz6iqtZ7rX1hxWA5B8qBQ==", + "node_modules/gtoken/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", "dependencies": { - "node-forge": "^1.0.0" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, "engines": { "node": ">=10" } }, - "node_modules/googleapis": { - "version": "105.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-105.0.0.tgz", - "integrity": "sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==", - "dev": true, - "dependencies": { - "google-auth-library": "^8.0.2", - "googleapis-common": "^6.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis-common": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.3.tgz", - "integrity": "sha512-Xyb4FsQ6PQDu4tAE/M/ev4yzZhFe2Gc7+rKmuCX2ZGk1ajBKbafsGlVYpmzGqQOT93BRDe8DiTmQb6YSkbICrA==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "gaxios": "^5.0.1", - "google-auth-library": "^8.0.2", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis-common/node_modules/gaxios": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", - "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis-common/node_modules/gcp-metadata": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", - "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", - "dev": true, - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis-common/node_modules/google-auth-library": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.5.1.tgz", - "integrity": "sha512-7jNMDRhenfw2HLfL9m0ZP/Jw5hzXygfSprzBdypG3rZ+q2gIUbVC/osrFB7y/Z5dkrUr1mnLoDNlerF+p6VXZA==", - "dev": true, - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/googleapis-common/node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dev": true, - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis-common/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dev": true, - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/googleapis-common/node_modules/is-stream": { + "node_modules/gtoken/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -9572,336 +8952,137 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/googleapis-common/node_modules/jwa": { + "node_modules/gtoken/node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "node_modules/googleapis-common/node_modules/jws": { + "node_modules/gtoken/node_modules/jws": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, - "node_modules/googleapis-common/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=6" } }, - "node_modules/googleapis/node_modules/gaxios": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", - "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4.0" } }, - "node_modules/googleapis/node_modules/gcp-metadata": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", - "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/googleapis/node_modules/google-auth-library": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.5.1.tgz", - "integrity": "sha512-7jNMDRhenfw2HLfL9m0ZP/Jw5hzXygfSprzBdypG3rZ+q2gIUbVC/osrFB7y/Z5dkrUr1mnLoDNlerF+p6VXZA==", + "node_modules/has-package-exports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/has-package-exports/-/has-package-exports-1.3.0.tgz", + "integrity": "sha512-e9OeXPQnmPhYoJ63lXC4wWe34TxEGZDZ3OQX9XRqp2VwsfLl3bQBy7VehLnd34g3ef8CmYlBLGqEMKXuz8YazQ==", "dev": true, "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "@ljharb/has-package-exports-patterns": "^0.0.2" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/googleapis/node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "node-forge": "^1.3.1" + "get-intrinsic": "^1.2.2" }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/googleapis/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz", + "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==", "dev": true, "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/googleapis/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/googleapis/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/googleapis/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "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/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gtoken/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/gtoken/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-package-exports": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/has-package-exports/-/has-package-exports-1.3.0.tgz", - "integrity": "sha512-e9OeXPQnmPhYoJ63lXC4wWe34TxEGZDZ3OQX9XRqp2VwsfLl3bQBy7VehLnd34g3ef8CmYlBLGqEMKXuz8YazQ==", - "dev": true, - "dependencies": { - "@ljharb/has-package-exports-patterns": "^0.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz", - "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasha/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { + "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", @@ -10181,19 +9362,12 @@ } }, "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ms": "^2.1.1" } }, "node_modules/https-proxy-agent/node_modules/ms": { @@ -10230,12 +9404,6 @@ "node": ">=0.10.0" } }, - "node_modules/idb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", - "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", - "dev": true - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -10256,9 +9424,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -11037,11 +10205,11 @@ } }, "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.0.tgz", + "integrity": "sha512-tzTgkklbWKrlaQL2+e3NNgLcZu3NaK2vsHRx7tyHQ+H5jcB9Gx0txSd2eJWlMC/xU1+7LQu4s58Ry0RkuaEQVg==", "dependencies": { - "@babel/parser": "^7.20.15", + "@babel/parser": "^7.9.4", "@jsdoc/salty": "^0.2.1", "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", @@ -11073,6 +10241,11 @@ "node": ">=12.0.0" } }, + "node_modules/jsdoc/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "node_modules/jsdoc/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -11243,20 +10416,14 @@ "dev": true }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "dependencies": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^7.5.4" + "semver": "^7.3.8" }, "engines": { "node": ">=12", @@ -11413,16 +10580,16 @@ } }, "node_modules/libsodium": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.13.tgz", - "integrity": "sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==" + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz", + "integrity": "sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ==" }, "node_modules/libsodium-wrappers": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", - "integrity": "sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", + "integrity": "sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg==", "dependencies": { - "libsodium": "^0.7.13" + "libsodium": "^0.7.0" } }, "node_modules/limiter": { @@ -11532,26 +10699,6 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, "node_modules/lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", @@ -11565,11 +10712,6 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, "node_modules/lodash.mapvalues": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", @@ -11581,11 +10723,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "node_modules/lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -11798,11 +10935,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/make-error": { @@ -11932,9 +11069,9 @@ } }, "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.6.tgz", + "integrity": "sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA==", "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" @@ -13228,6 +12365,11 @@ "node": ">= 8" } }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -13300,6 +12442,32 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/nearley/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==" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -14051,6 +13219,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -14272,9 +13446,9 @@ } }, "node_modules/openapi3-ts": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-3.2.0.tgz", - "integrity": "sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.1.tgz", + "integrity": "sha512-v6X3iwddhi276siej96jHGIqTx3wzVfMTmpGJEQDt7GPI7pI6sywItURLzpEci21SBRpPN/aOWSF5mVfFVNmcg==", "dependencies": { "yaml": "^2.2.1" } @@ -14438,6 +13612,17 @@ "node": ">=8" } }, + "node_modules/p-throttle": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-5.1.0.tgz", + "integrity": "sha512-+N+s2g01w1Zch4D0K3OpnPDqLOKmLcQ4BvIFq3JC0K29R28vUOjWpO+OJZBNt8X9i3pFCksZJZ0YXkUGjaFE6g==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -14448,18 +13633,18 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.0.tgz", + "integrity": "sha512-t4tRAMx0uphnZrio0S0Jw9zg3oDbz1zVhQ/Vy18FjLfP1XOLNUEjaVxYCYRI6NS+BsMBXKIzV6cTLOkO9AtywA==", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.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.2", + "https-proxy-agent": "^7.0.0", "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.1" }, "engines": { "node": ">= 14" @@ -14493,9 +13678,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -14537,6 +13722,11 @@ "node": ">=8" } }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -14596,6 +13786,15 @@ "node": ">= 0.8" } }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14656,6 +13855,98 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -14817,6 +14108,47 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "dev": true + }, "node_modules/preferred-pm": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", @@ -14913,6 +14245,14 @@ "node": ">=6" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -14939,9 +14279,9 @@ } }, "node_modules/promise-breaker": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", - "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz", + "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA==" }, "node_modules/promise-inflight": { "version": "1.0.1", @@ -15034,9 +14374,9 @@ "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, "node_modules/proto3-json-serializer/node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -15056,32 +14396,6 @@ "node": ">=12.0.0" } }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, "node_modules/proxy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/proxy/-/proxy-1.0.2.tgz", @@ -15109,18 +14423,18 @@ } }, "node_modules/proxy-agent": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.0", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.0.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.1" }, "engines": { "node": ">= 14" @@ -15154,9 +14468,9 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -15366,6 +14680,23 @@ "node": ">=8" } }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -15384,9 +14715,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -15605,6 +14936,18 @@ "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, "node_modules/registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", @@ -15819,6 +15162,14 @@ "node": ">=8" } }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/retext": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", @@ -16115,9 +15466,9 @@ } }, "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } @@ -16455,11 +15806,11 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.0.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -16614,11 +15965,37 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "node_modules/sql-formatter": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.3.0.tgz", + "integrity": "sha512-1aDYVEX+dwOSCkRYns4HEGupRZoaivcsNpU4IzR+MVC+cWFYK9/dce7pr4aId4+ED2iK9PNs3j1Vdf8C+SIvDg==", + "dependencies": { + "argparse": "^2.0.1", + "get-stdin": "=8.0.0", + "nearley": "^2.20.1" + }, + "bin": { + "sql-formatter": "bin/sql-formatter-cli.cjs" + } + }, + "node_modules/sql-formatter/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -16707,9 +16084,9 @@ } }, "node_modules/stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.4.tgz", + "integrity": "sha512-9lsl3YM53V5N/I1C2uJtc3Kavyi3kNYN83VkKb/bMWRk7D9imiFyUPYa0PoZbLohSVOX1mYE9YsmwObZUsth6Q==" }, "node_modules/stream-events": { "version": "1.0.5", @@ -17541,9 +16918,9 @@ "dev": true }, "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -18235,14 +17612,26 @@ "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", - "dev": true + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -18658,9 +18047,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "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==", "engines": { "node": ">=0.10.0" } @@ -18766,6 +18155,14 @@ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", @@ -19076,675 +18473,68 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@astrojs/markdown-remark": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-2.1.3.tgz", - "integrity": "sha512-Di8Qbit9p7L7eqKklAJmiW9nVD+XMsNHpaNzCLduWjOonDu9fVgEzdjeDrTVCDtgrvkfhpAekuNXrp5+w4F91g==", - "dev": true, - "requires": { - "@astrojs/prism": "^2.1.0", - "github-slugger": "^1.4.0", - "import-meta-resolve": "^2.1.0", - "rehype-raw": "^6.1.1", - "rehype-stringify": "^9.0.3", - "remark-gfm": "^3.0.1", - "remark-parse": "^10.0.1", - "remark-rehype": "^10.1.0", - "remark-smartypants": "^2.0.0", - "shiki": "^0.11.1", - "unified": "^10.1.2", - "unist-util-visit": "^4.1.0", - "vfile": "^5.3.2" - }, - "dependencies": { - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "dev": true - } - } - }, - "@astrojs/prism": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-2.1.1.tgz", - "integrity": "sha512-Gnwnlb1lGJzCQEg89r4/WqgfCGPNFC7Kuh2D/k289Cbdi/2PD7Lrdstz86y1itDvcb2ijiRqjqWnJ5rsfu/QOA==", - "dev": true, - "requires": { - "prismjs": "^1.28.0" - } - }, - "@astrojs/telemetry": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-2.1.0.tgz", - "integrity": "sha512-P3gXNNOkRJM8zpnasNoi5kXp3LnFt0smlOSUXhkynfJpTJMIDrcMbKpNORN0OYbqpKt9JPdgRN7nsnGWpbH1ww==", - "dev": true, - "requires": { - "ci-info": "^3.3.1", - "debug": "^4.3.4", - "dlv": "^1.1.3", - "dset": "^3.1.2", - "is-docker": "^3.0.0", - "is-wsl": "^2.2.0", - "undici": "^5.20.0", - "which-pm-runs": "^1.1.0" - }, - "dependencies": { - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - }, - "dependencies": { - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@astrojs/webapi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@astrojs/webapi/-/webapi-2.1.0.tgz", - "integrity": "sha512-sbF44s/uU33jAdefzKzXZaENPeXR0sR3ptLs+1xp9xf5zIBhedH2AfaFB5qTEv9q5udUVoKxubZGT3G1nWs6rA==", - "dev": true, - "requires": { - "undici": "5.20.0" - }, - "dependencies": { - "undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } - } - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", - "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", - "dev": true - }, - "@babel/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", - "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", - "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", - "dev": true, - "requires": { - "@babel/types": "^7.19.0", - "@jridgewell/gen-mapping": "^0.3.2", - "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==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", - "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@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==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@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==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "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==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" - }, - "@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", - "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.1", - "@babel/types": "^7.19.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@emmetio/abbreviation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.1.tgz", - "integrity": "sha512-QXgYlXZGprqb6aCBJPPWVBN/Jb69khJF73GGJkOk//PoMgSbPGuaHn1hCRolctnzlBHjCIC6Om97Pw46/1A23g==", - "dev": true, - "requires": { - "@emmetio/scanner": "^1.0.2" - } - }, - "@emmetio/css-abbreviation": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.6.tgz", - "integrity": "sha512-bvuPogt0OvwcILRg+ZD/oej1H72xwOhUDPWOmhCWLJrZZ8bMTazsWnvw8a8noaaVqUhOE9PsC0tYgGVv5N7fsw==", - "dev": true, - "requires": { - "@emmetio/scanner": "^1.0.2" - } - }, - "@emmetio/scanner": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.2.tgz", - "integrity": "sha512-1ESCGgXRgn1r29hRmz8K0G4Ywr5jDWezMgRnICComBCWmg3znLWU8+tmakuM1og1Vn4W/sauvlABl/oq2pve8w==", - "dev": true - }, - "@es-joy/jsdoccomment": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", - "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==", - "dev": true, - "requires": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - } - }, - "@esbuild/android-arm": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz", - "integrity": "sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz", - "integrity": "sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.16.tgz", - "integrity": "sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz", - "integrity": "sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz", - "integrity": "sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz", - "integrity": "sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz", - "integrity": "sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz", - "integrity": "sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz", - "integrity": "sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz", - "integrity": "sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz", - "integrity": "sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz", - "integrity": "sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz", - "integrity": "sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz", - "integrity": "sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz", - "integrity": "sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz", - "integrity": "sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz", - "integrity": "sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz", - "integrity": "sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz", - "integrity": "sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz", - "integrity": "sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz", - "integrity": "sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==", - "dev": true, - "optional": true + "dev": true + } + } }, - "@esbuild/win32-x64": { - "version": "0.17.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz", - "integrity": "sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==", + "@astrojs/markdown-remark": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-2.1.3.tgz", + "integrity": "sha512-Di8Qbit9p7L7eqKklAJmiW9nVD+XMsNHpaNzCLduWjOonDu9fVgEzdjeDrTVCDtgrvkfhpAekuNXrp5+w4F91g==", "dev": true, - "optional": true + "requires": { + "@astrojs/prism": "^2.1.0", + "github-slugger": "^1.4.0", + "import-meta-resolve": "^2.1.0", + "rehype-raw": "^6.1.1", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", + "remark-smartypants": "^2.0.0", + "shiki": "^0.11.1", + "unified": "^10.1.2", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2" + }, + "dependencies": { + "github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + } + } }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "@astrojs/prism": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-2.1.1.tgz", + "integrity": "sha512-Gnwnlb1lGJzCQEg89r4/WqgfCGPNFC7Kuh2D/k289Cbdi/2PD7Lrdstz86y1itDvcb2ijiRqjqWnJ5rsfu/QOA==", "dev": true, "requires": { - "eslint-visitor-keys": "^3.3.0" + "prismjs": "^1.28.0" } }, - "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "@astrojs/telemetry": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-2.1.0.tgz", + "integrity": "sha512-P3gXNNOkRJM8zpnasNoi5kXp3LnFt0smlOSUXhkynfJpTJMIDrcMbKpNORN0OYbqpKt9JPdgRN7nsnGWpbH1ww==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "ci-info": "^3.3.1", + "debug": "^4.3.4", + "dlv": "^1.1.3", + "dset": "^3.1.2", + "is-docker": "^3.0.0", + "is-wsl": "^2.2.0", + "undici": "^5.20.0", + "which-pm-runs": "^1.1.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, "debug": { @@ -19756,22 +18546,21 @@ "ms": "2.1.2" } }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "argparse": "^2.0.1" + "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + } } }, "ms": { @@ -19779,566 +18568,521 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, - "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true - }, - "@exodus/schemasafe": { - "version": "1.0.0-rc.9", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.9.tgz", - "integrity": "sha512-dGGHpb61hLwifAu7sotuHFDBw6GTdpG8aKC0fsK17EuTzMRvUrH7lEAr6LTJ+sx3AZYed9yZ77rltVDHyg2hRg==", - "dev": true - }, - "@fastify/busboy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.1.0.tgz", - "integrity": "sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==", - "dev": true, - "requires": { - "text-decoding": "^1.0.0" - } - }, - "@firebase/analytics": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.9.1.tgz", - "integrity": "sha512-ARXtNHDrjDhVrs5MqmFDpr5yyCw89r1eHLd+Dw9fotAufxL1WTmo6O9bJqKb7QulIJaA84vsFokA3NaO2DNCnQ==", + "@astrojs/webapi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/webapi/-/webapi-2.1.0.tgz", + "integrity": "sha512-sbF44s/uU33jAdefzKzXZaENPeXR0sR3ptLs+1xp9xf5zIBhedH2AfaFB5qTEv9q5udUVoKxubZGT3G1nWs6rA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "undici": "5.20.0" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true + "undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } } } }, - "@firebase/analytics-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.1.tgz", - "integrity": "sha512-qfFAGS4YFsBbmZwVa7xaDnGh7k9BKF4o/piyjySAv0lxRYd74/tSrm3kMk1YM7GCti7PdbgKvl6oSR70zMFQjw==", + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@firebase/analytics": "0.9.1", - "@firebase/analytics-types": "0.8.0", - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/highlight": "^7.18.6" } }, - "@firebase/analytics-types": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", - "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==", + "@babel/compat-data": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", "dev": true }, - "@firebase/app": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.1.tgz", - "integrity": "sha512-Z8wOSol+pvp4CFyY1mW+aqdZlrwhW/ha2YXQ6/avJ56c5Hnvt4k6GktZE6o5NyzvfJTgNHryhMtnEJMIuLaT4w==", + "@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "idb": "7.0.1", - "tslib": "^2.1.0" + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "@firebase/app-check": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.6.1.tgz", - "integrity": "sha512-gDG4Gr4n3MnBZAAwLMynU9u/b+f1y87lCezfwlmN1gUxD85mJcvp4hLf87fACTyRkdVfe8hqSXm+MOYn2bMGLg==", + "@babel/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/types": "^7.19.0", + "@jridgewell/gen-mapping": "^0.3.2", + "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==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" } }, - "@firebase/app-check-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.1.tgz", - "integrity": "sha512-IaSYdmaoQgWUrN6rjAYJs1TGXj38Wl9damtrDEyJBf7+rrvKshPAP/CP6e2bd89XOMZKbvy8rKoe1CqX1K3ZjQ==", + "@babel/helper-compilation-targets": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", "dev": true, "requires": { - "@firebase/app-check": "0.6.1", - "@firebase/app-check-types": "0.5.0", - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "@babel/compat-data": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "@firebase/app-check-interop-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.2.0.tgz", - "integrity": "sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ==", - "dev": true - }, - "@firebase/app-check-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", - "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==", + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true }, - "@firebase/app-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.1.tgz", - "integrity": "sha512-UgPy2ZO0li0j4hAkaZKY9P1TuJEx5RylhUWPzCb8DZhBm+uHdfsFI9Yr+wMlu6qQH2sWoweFtYU6ljGzxwdctw==", + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "requires": { - "@firebase/app": "0.9.1", - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, - "@firebase/app-types": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", - "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", - "dev": true + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } }, - "@firebase/auth": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.21.1.tgz", - "integrity": "sha512-/ap7eT9X7kZTD4Fn2m+nJyC1a9DfFo0H4euoJDN8U+JCMN+GOqkPbkMWCey7wV510WNoPCZQ05+nsAqKkbEVJw==", + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/types": "^7.18.6" } }, - "@firebase/auth-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.3.1.tgz", - "integrity": "sha512-Ndcaam+IL1TuJ6hZ0EcQ+v261cK3kPm4mvUtouoTfl3FNinm9XvhccN8ojuaRtIV9TiY18mzGjONKF5ZCXLIZw==", + "@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", "dev": true, "requires": { - "@firebase/auth": "0.21.1", - "@firebase/auth-types": "0.12.0", - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, - "@firebase/auth-interop-types": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", - "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==", + "@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==", "dev": true }, - "@firebase/auth-types": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", - "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", - "dev": true, - "requires": {} - }, - "@firebase/component": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.1.tgz", - "integrity": "sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==", + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "requires": { - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/types": "^7.18.6" } }, - "@firebase/database": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.1.tgz", - "integrity": "sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==", + "@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==", "dev": true, "requires": { - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "faye-websocket": "0.11.4", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/types": "^7.18.6" } }, - "@firebase/database-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.1.tgz", - "integrity": "sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==", + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "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==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/database": "0.14.1", - "@firebase/database-types": "0.10.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, - "@firebase/database-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.1.tgz", - "integrity": "sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==", + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "requires": { - "@firebase/app-types": "0.9.0", - "@firebase/util": "1.9.0" + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "@firebase/firestore": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.8.1.tgz", - "integrity": "sha512-oc2HMkUnq/zF+g9o974tp5RVCdXCnrU8e5S98ajfWG/hGV+8pr4i6vIa4z0yEXKWGi4X0FguxrC69z1dxEJbNg==", + "@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "@firebase/webchannel-wrapper": "0.9.0", - "@grpc/grpc-js": "~1.7.0", - "@grpc/proto-loader": "^0.6.13", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.20.2" } }, - "@firebase/firestore-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.1.tgz", - "integrity": "sha512-7eE4O2ASyy5X2h4a+KCRt0ZpliUAKo2jrKxKl1ZVCnOOjSCkXXeRVRG9eNZRqBwukhdwskJTM9acs0WxmKOYLA==", + "@babel/plugin-transform-react-jsx": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/firestore": "3.8.1", - "@firebase/firestore-types": "2.5.1", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.21.0" } }, - "@firebase/firestore-types": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", - "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==", + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, - "requires": {} + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } }, - "@firebase/functions": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.1.tgz", - "integrity": "sha512-xCSSU4aVSqYU+lCqhn9o5jJcE1KLUOOKyJfCTdCSCyTn2J3vl9Vk4TDm3JSb1Eu6XsNWtxeMW188F/GYxuMWcw==", + "@babel/traverse": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "dev": true, "requires": { - "@firebase/app-check-interop-types": "0.2.0", - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.1", - "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.1", + "@babel/types": "^7.19.0", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, - "@firebase/functions-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.1.tgz", - "integrity": "sha512-f2D2XoRN+QCziCrUL7UrLaBEoG3v2iAeyNwbbOQ3vv0rI0mtku2/yeB2OINz5/iI6oIrBPUMNLr5fitofj7FpQ==", + "@babel/types": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/functions": "0.9.1", - "@firebase/functions-types": "0.6.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" } }, - "@firebase/functions-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", - "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==", - "dev": true + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true }, - "@firebase/installations": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.1.tgz", - "integrity": "sha512-gpobP09LLLakBfNCL04fyblfyb3oX1pn+iNmELygrcAkXTO13IAMuOzThI+Xk4NHQZMX1p5GFSAiGbG4yfsSUQ==", + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "idb": "7.0.1", - "tslib": "^2.1.0" + "@jridgewell/trace-mapping": "0.3.9" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } } } }, - "@firebase/installations-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.1.tgz", - "integrity": "sha512-X4IBVKajEeaE45zWX0Y1q8ey39aPFLa+BsUoYzsduMzCxcMBIPZd5/lV1EVGt8SN3+unnC2J75flYkxXVlhBoQ==", + "@emmetio/abbreviation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.1.tgz", + "integrity": "sha512-QXgYlXZGprqb6aCBJPPWVBN/Jb69khJF73GGJkOk//PoMgSbPGuaHn1hCRolctnzlBHjCIC6Om97Pw46/1A23g==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/installations-types": "0.5.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@emmetio/scanner": "^1.0.2" } }, - "@firebase/installations-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", - "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", + "@emmetio/css-abbreviation": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.6.tgz", + "integrity": "sha512-bvuPogt0OvwcILRg+ZD/oej1H72xwOhUDPWOmhCWLJrZZ8bMTazsWnvw8a8noaaVqUhOE9PsC0tYgGVv5N7fsw==", "dev": true, - "requires": {} + "requires": { + "@emmetio/scanner": "^1.0.2" + } }, - "@firebase/logger": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", - "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "@emmetio/scanner": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.2.tgz", + "integrity": "sha512-1ESCGgXRgn1r29hRmz8K0G4Ywr5jDWezMgRnICComBCWmg3znLWU8+tmakuM1og1Vn4W/sauvlABl/oq2pve8w==", + "dev": true + }, + "@es-joy/jsdoccomment": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", + "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==", "dev": true, "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "comment-parser": "1.4.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" } }, - "@firebase/messaging": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.1.tgz", - "integrity": "sha512-/F+2OWarR8TcJJVlQS6zBoHHfXMgfgR0/ukQ3h7Ow3WZ3WZ9+Sj/gvxzothXZm+WtBylfXuhiANFgHEDFL0J0w==", + "@esbuild/darwin-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz", + "integrity": "sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.0", - "idb": "7.0.1", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "eslint-visitor-keys": "^3.3.0" } }, - "@firebase/messaging-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.1.tgz", - "integrity": "sha512-BykvXtAWOs0W4Ik79lNfMKSxaUCtOJ47PJ9Vw2ySHZ14vFFNuDAtRTOBOlAFhUpsHqRoQFvFCkBGsRIQYq8hzw==", + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/messaging": "0.12.1", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, - "@firebase/messaging-interop-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", - "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==", + "@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true + }, + "@exodus/schemasafe": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.9.tgz", + "integrity": "sha512-dGGHpb61hLwifAu7sotuHFDBw6GTdpG8aKC0fsK17EuTzMRvUrH7lEAr6LTJ+sx3AZYed9yZ77rltVDHyg2hRg==", "dev": true }, - "@firebase/performance": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.1.tgz", - "integrity": "sha512-mT/CWz3CLgyn/a3sO/TJgrTt+RA3DfuvWwGXY9zmIiuBZY2bDi1M2uMefJdJKc9sBUPRajNF6RL10nGYq3BAuQ==", + "@fastify/busboy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.1.0.tgz", + "integrity": "sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "text-decoding": "^1.0.0" } }, - "@firebase/performance-compat": { + "@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", + "dev": true + }, + "@firebase/auth-interop-types": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.1.tgz", - "integrity": "sha512-4mn6eS7r2r+ZAHvU0OHE+3ZO+x6gOVhf2ypBoijuDNaRNjSn9GcvA8udD4IbJ8FNv/k7mbbtA9AdxVb701Lr1g==", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==", + "dev": true + }, + "@firebase/component": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.1.tgz", + "integrity": "sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/logger": "0.4.0", - "@firebase/performance": "0.6.1", - "@firebase/performance-types": "0.2.0", "@firebase/util": "1.9.0", "tslib": "^2.1.0" }, @@ -20351,22 +19095,17 @@ } } }, - "@firebase/performance-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", - "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==", - "dev": true - }, - "@firebase/remote-config": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.1.tgz", - "integrity": "sha512-RCzBH3FjAPRSP3M1T7jdxLYBesIdLtNIQ0fR9ywJpGSSa0kIXEJ9iSZMTP+9pJtaCxz8db07FvjEqg7Y+lgjzg==", + "@firebase/database": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.1.tgz", + "integrity": "sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==", "dev": true, "requires": { + "@firebase/auth-interop-types": "0.2.1", "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.0", + "faye-websocket": "0.11.4", "tslib": "^2.1.0" }, "dependencies": { @@ -20378,16 +19117,16 @@ } } }, - "@firebase/remote-config-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.1.tgz", - "integrity": "sha512-RPCj7c2Q3QxMgJH3YCt0iD57KppFApghxAGETzlr6Jm6vT7k0vqvk2KgRBgKa4koJBsgwlUtRn2roaCqUEadyg==", + "@firebase/database-compat": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.1.tgz", + "integrity": "sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==", "dev": true, "requires": { "@firebase/component": "0.6.1", + "@firebase/database": "0.14.1", + "@firebase/database-types": "0.10.1", "@firebase/logger": "0.4.0", - "@firebase/remote-config": "0.4.1", - "@firebase/remote-config-types": "0.3.0", "@firebase/util": "1.9.0", "tslib": "^2.1.0" }, @@ -20400,42 +19139,22 @@ } } }, - "@firebase/remote-config-types": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", - "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==", - "dev": true - }, - "@firebase/storage": { + "@firebase/database-types": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.10.1.tgz", - "integrity": "sha512-eN4ME+TFCh5KfyG9uo8PhE6cgKjK5Rb9eucQg1XEyLHMiaZiUv2xSuWehJn0FaL+UdteoaWKuRUZ4WXRDskXrA==", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.1.tgz", + "integrity": "sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - } + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.0" } }, - "@firebase/storage-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.2.1.tgz", - "integrity": "sha512-H0oFdYsMn2Z6tP9tlVERBkJiZsCbFAcl3Li1dnpvDg9g323egdjCnUUgH/tJODRR/Y84iZSNRkg4FvHDVI/o7Q==", + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", "dev": true, "requires": { - "@firebase/component": "0.6.1", - "@firebase/storage": "0.10.1", - "@firebase/storage-types": "0.7.0", - "@firebase/util": "1.9.0", "tslib": "^2.1.0" }, "dependencies": { @@ -20447,13 +19166,6 @@ } } }, - "@firebase/storage-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.7.0.tgz", - "integrity": "sha512-n/8pYd82hc9XItV3Pa2KGpnuJ/2h/n/oTAaBberhe6GeyWQPnsmwwRK94W3GxUwBA/ZsszBAYZd7w7tTE+6XXA==", - "dev": true, - "requires": {} - }, "@firebase/util": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.0.tgz", @@ -20471,18 +19183,23 @@ } } }, - "@firebase/webchannel-wrapper": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.9.0.tgz", - "integrity": "sha512-BpiZLBWdLFw+qFel9p3Zs1jD6QmH7Ii4aTDu6+vx8ShdidChZUXqDhYJly4ZjSgQh54miXbBgBrk0S+jTIh/Qg==", - "dev": true - }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "optional": true }, + "@google-cloud/cloud-sql-connector": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@google-cloud/cloud-sql-connector/-/cloud-sql-connector-1.2.3.tgz", + "integrity": "sha512-Johb/LuBv/s0EaoaoeliQCxdjuUN0of6PjdDhBxE7wEeyabli/4wtHOQChm6xtSA/i65ziBrSwSkBnnyHv/yIA==", + "requires": { + "@googleapis/sqladmin": "^14.0.0", + "gaxios": "^6.1.1", + "google-auth-library": "^9.2.0", + "p-throttle": "^5.1.0" + } + }, "@google-cloud/firestore": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.4.2.tgz", @@ -20504,9 +19221,9 @@ "optional": true }, "protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "dev": true, "optional": true, "requires": { @@ -20795,11 +19512,38 @@ "integrity": "sha512-97u6AUfEXo6TxoBAdbziuhSL56+l69WzFahR6eTQE/bSjGPqT1+W4vS7eKaR7r60pGFrZZfqdFZ99uMbns3qgA==", "dev": true }, + "@googleapis/sqladmin": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-14.1.0.tgz", + "integrity": "sha512-bNly3YIE+aqHc3HfISfK69er0AbqpUlE3THY1XBgj4OHR3b7shDQJaBnzVJkdyfJCrixPKLpJQa4vS+IeDC2hA==", + "requires": { + "googleapis-common": "^7.0.0" + }, + "dependencies": { + "googleapis-common": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.0.1.tgz", + "integrity": "sha512-mgt5zsd7zj5t5QXvDanjWguMdHAcJmmDrF9RkInCecNsyV7S7YtGqm5v2IWONNID88osb7zmx5FtrAP12JfD0w==", + "requires": { + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.0.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + } + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, "@grpc/grpc-js": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", - "dev": true, "requires": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" @@ -20809,7 +19553,6 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", - "dev": true, "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -20819,10 +19562,9 @@ } }, "protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "dev": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -20841,34 +19583,20 @@ "long": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", - "dev": true + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" } } } } }, - "@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", - "dev": true, - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" - } - }, "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "dependencies": { @@ -20896,9 +19624,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -21022,9 +19750,9 @@ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" }, "@jsdoc/salty": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz", - "integrity": "sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.3.tgz", + "integrity": "sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==", "requires": { "lodash": "^4.17.21" } @@ -21303,14 +20031,6 @@ "@swc/core-win32-x64-msvc": "1.3.0" } }, - "@swc/core-darwin-x64": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.0.tgz", - "integrity": "sha512-eDa1EZAnchMtkdZ52bWfseKla370c8BCj/RWAtHJcZMon3WVkWcZlMgZPPiPIxYz8hGtomqs+pkQv34hEVcx0A==", - "dev": true, - "optional": true, - "peer": true - }, "@swc/helpers": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", @@ -21414,9 +20134,9 @@ } }, "@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "dev": true, "requires": { "@types/connect": "*", @@ -21430,9 +20150,9 @@ "dev": true }, "@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", "dev": true, "requires": { "@types/chai": "*" @@ -21445,9 +20165,9 @@ "dev": true }, "@types/cli-table": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.4.tgz", - "integrity": "sha512-GsALrTL69mlwbAw/MHF1IPTadSLZQnsxe7a80G8l4inN/iEXCOcVeT/S7aRc6hbhqzL9qZ314kHPDQnQ3ev+HA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.0.tgz", + "integrity": "sha512-QnZUISJJXyhyD6L1e5QwXDV/A5i2W1/gl6D6YMc8u0ncPepbv/B4w3S+izVvtAg60m6h+JP09+Y/0zF2mojlFQ==", "dev": true }, "@types/color-name": { @@ -21478,18 +20198,15 @@ "dev": true }, "@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "requires": { - "@types/node": "*" - } + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true }, "@types/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.1.tgz", + "integrity": "sha512-MtN1pDYdI6D6QFDzy39Q+6c9rl2o/xN7aWGe6oZuzqq5N6+YuwFsWiEAv3dNzvzN9YzU+itpN8lBzFpphQKLAw==", "dev": true, "requires": { "@types/node": "*" @@ -21527,30 +20244,30 @@ "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true }, "@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz", + "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", + "@types/express-serve-static-core": "^4.17.31", "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@types/range-parser": "*" } }, "@types/fs-extra": { @@ -21566,6 +20283,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, "requires": { "@types/events": "*", "@types/minimatch": "*", @@ -21582,9 +20300,9 @@ } }, "@types/html-escaper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/html-escaper/-/html-escaper-3.0.2.tgz", - "integrity": "sha512-A8vk09eyYzk8J/lFO4OUMKCmRN0rRzfZf4n3Olwapgox/PtTiU8zPYlL1UEkJ/WeHvV6v9Xnj3o/705PKz9r4Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/html-escaper/-/html-escaper-3.0.0.tgz", + "integrity": "sha512-OcJcvP3Yk8mjYwf/IdXZtTE1tb/u0WF0qa29ER07ZHCYUBZXSN29Z1mBS+/96+kNMGTFUAbSz9X+pHmHpZrTCw==", "dev": true }, "@types/inquirer": { @@ -21612,9 +20330,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/json5": { @@ -21633,20 +20351,20 @@ } }, "@types/libsodium-wrappers": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", - "integrity": "sha512-KeAKtlObirLJk/na6jHBFEdTDjDfFS6Vcr0eG2FjiHKn3Nw8axJFfIu0Y9TpwaauRldQBj/pZm/MHtK76r6OWg==", + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-LisgKLlYQk19baQwjkBZZXdJL0KbeTpdEnrAfz5hQACbklCY0gVFnsKUyjfNWF1UQsCSjw93Sj5jSbiO8RPfdw==", "dev": true }, "@types/linkify-it": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", - "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" }, "@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", "dev": true }, "@types/long": { @@ -21697,9 +20415,9 @@ } }, "@types/mdurl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", - "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, "@types/mime": { "version": "1.3.2", @@ -21710,7 +20428,8 @@ "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true }, "@types/minimist": { "version": "1.2.0", @@ -21740,9 +20459,9 @@ "dev": true }, "@types/multer": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", - "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-wdfkiKBBEMTODNbuF3J+qDDSqJxt50yB9pgDiTcFew7f97Gcc7/sM4HR66ofGgpJPOALWOqKAch4gPyqEXSkeQ==", "dev": true, "requires": { "@types/express": "*" @@ -21806,10 +20525,74 @@ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", "dev": true }, + "@types/pg": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.2.tgz", + "integrity": "sha512-G2Mjygf2jFMU/9hCaTYxJrwdObdcnuQde1gndooZSOHsNSaCehAuwc7EIuSA34Do8Jx2yZ19KtvW8P0j4EuUXw==", + "dev": true, + "requires": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + }, + "dependencies": { + "pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", + "dev": true, + "requires": { + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + } + }, + "postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "dev": true + }, + "postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "dev": true, + "requires": { + "obuf": "~1.1.2" + } + }, + "postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", + "dev": true + }, + "postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "dev": true + } + } + }, + "@types/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA==", + "dev": true, + "requires": { + "prettier": "*" + } + }, "@types/progress": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/progress/-/progress-2.0.7.tgz", - "integrity": "sha512-iadjw02vte8qWx7U0YM++EybBha2CQLPGu9iJ97whVgJUT5Zq9MjAPYUnbfRI2Kpehimf1QjFJYxD0t8nqzu5w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-bPOsfCZ4tsTlKiBjBhKnM8jpY5nmIll166IPD58D92hR7G7kZDfx5iB9wGF4NfZrdKolebjeAr3GouYkSGoJ/A==", "dev": true, "requires": { "@types/node": "*" @@ -21869,9 +20652,9 @@ "dev": true }, "@types/retry": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, "@types/rimraf": { @@ -21896,16 +20679,6 @@ "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==", "dev": true }, - "@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, "@types/serve-static": { "version": "1.13.9", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", @@ -21980,9 +20753,9 @@ } }, "@types/swagger2openapi": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/swagger2openapi/-/swagger2openapi-7.0.4.tgz", - "integrity": "sha512-ffMqzciTDihOKH4Q//9Ond1yb5JP1P5FC/aFPsLK4blea1Fwk2aYctiNCkAh5etDYFswFXS+5LV/vuGkf+PU6A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/swagger2openapi/-/swagger2openapi-7.0.0.tgz", + "integrity": "sha512-jbjunFpBQqbYt9JZYPDe1G9TkTVzQ8MqT1z7qMq/f7EZzdoA/G8WCZt8dr5gLkATkaE2n8FX7HlrBUTNyYRAJA==", "dev": true, "requires": { "@types/node": "*", @@ -22000,9 +20773,9 @@ } }, "@types/tcp-port-used": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/tcp-port-used/-/tcp-port-used-1.0.4.tgz", - "integrity": "sha512-0vQ4fz9TTM4bCdllYWEJ2JHBUXR9xqPtc70dJ7BMRDVfvZyYdrgey3nP5RRcVj+qAgnHJM8r9fvgrfnPMxdnhA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-6pwWTx8oUtWvsiZUCrhrK/53MzKVLnuNSSaZILPy3uMes9QnTrLMar9BDlJArbMOjDcjb3QXFk6Rz8qmmuySZw==", "dev": true }, "@types/through": { @@ -22015,9 +20788,9 @@ } }, "@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==", "dev": true }, "@types/triple-beam": { @@ -22033,9 +20806,9 @@ "dev": true }, "@types/universal-analytics": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@types/universal-analytics/-/universal-analytics-0.4.8.tgz", - "integrity": "sha512-HozCrji3dIImmQcKnP7cN0ZBiYTjuOavzgPRY0CbT4AQ2zH/ZRqYDNTMiYI7aBeMV5ylbu+h59WG/N8qGePmww==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@types/universal-analytics/-/universal-analytics-0.4.5.tgz", + "integrity": "sha512-Opb+Un786PS3te24VtJR/QPmX00P/pXaJQtLQYJklQefP4xP0Ic3mPc2z6SDz97OrITzR+RHTBEwjtNRjZ/nLQ==", "dev": true }, "@types/update-notifier": { @@ -22080,19 +20853,19 @@ } }, "@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==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz", + "integrity": "sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ==", "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", + "@typescript-eslint/scope-manager": "5.51.0", + "@typescript-eslint/type-utils": "5.51.0", + "@typescript-eslint/utils": "5.51.0", "debug": "^4.3.4", - "graphemer": "^1.4.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -22115,14 +20888,14 @@ } }, "@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==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.51.0.tgz", + "integrity": "sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "5.51.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/typescript-estree": "5.51.0", "debug": "^4.3.4" }, "dependencies": { @@ -22144,23 +20917,23 @@ } }, "@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==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz", + "integrity": "sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.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==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz", + "integrity": "sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "5.51.0", + "@typescript-eslint/utils": "5.51.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -22183,19 +20956,19 @@ } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.51.0.tgz", + "integrity": "sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==", "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==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz", + "integrity": "sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -22221,36 +20994,36 @@ } }, "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.51.0.tgz", + "integrity": "sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw==", "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", + "@typescript-eslint/scope-manager": "5.51.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/typescript-estree": "5.51.0", "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "dependencies": { "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true } } }, "@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==", + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz", + "integrity": "sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/types": "5.51.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -22674,9 +21447,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" } } }, @@ -23093,9 +21866,9 @@ "dev": true }, "basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==" + "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==" }, "bignumber.js": { "version": "9.0.2", @@ -23117,18 +21890,13 @@ "readable-stream": "^3.4.0" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { "bytes": "3.1.2", - "content-type": "~1.0.5", + "content-type": "~1.0.4", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -23136,7 +21904,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.2", + "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -23284,6 +22052,11 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, "builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -23672,9 +22445,9 @@ "optional": true }, "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "colornames": { "version": "1.1.1", @@ -23861,9 +22634,9 @@ } }, "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { "version": "1.7.0", @@ -24032,9 +22805,9 @@ "integrity": "sha512-5AIdl8l6n3iYQYxan5djB5eKDa+vBnhfWZtRpJTcrETWfVLYN0WSj3L9RwvgYt+psoO77juUr8TG8qpfGZifVQ==" }, "data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", + "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==" }, "debug": { "version": "2.6.9", @@ -24145,31 +22918,13 @@ } }, "degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.0.tgz", + "integrity": "sha512-pdRxyYVe0unlUE/eeXBxFdB8w8J7QNNf7hFE/BKOAlTCz0bkF9h1MC82ii0r1ypqB/PTKYDbg4K9SZT9yfd9Fg==", "requires": { "ast-types": "^0.13.4", - "escodegen": "^2.1.0", + "escodegen": "^1.14.3", "esprima": "^4.0.1" - }, - "dependencies": { - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } } }, "delayed-stream": { @@ -24247,6 +23002,11 @@ "path-type": "^4.0.0" } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -24710,9 +23470,9 @@ "requires": {} }, "eslint-plugin-jsdoc": { - "version": "48.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.0.6.tgz", - "integrity": "sha512-LgwXOX6TWxxFYcbdVe+BJ94Kl/pgjSPYHLzqEdAMXTA1BH9WDx7iJ+9/iDajPF64LtzWX8C1mCfpbMZjJGhAOw==", + "version": "48.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.1.0.tgz", + "integrity": "sha512-g9S8ukmTd1DVcV/xeBYPPXOZ6rc8WJ4yi0+MVxJ1jBOrz5kmxV9gJJQ64ltCqIWFnBChLIhLVx3tbTSarqVyFA==", "dev": true, "requires": { "@es-joy/jsdoccomment": "~0.42.0", @@ -24779,6 +23539,23 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -24914,9 +23691,9 @@ } }, "exegesis": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.1.tgz", - "integrity": "sha512-PvSqaMOw2absLBgsthtJyVOeCHN4lxQ1dM7ibXb6TfZZJaoXtGELoEAGJRFvdN16+u9kg8oy1okZXRk8VpimWA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.0.tgz", + "integrity": "sha512-iqc55n+hmv8d1KYNMjq7bCcp4u74oRY6MBcj6Vsux7Wd4mRvlgahKqrBTyLIWwscNjEF3qvPmeJ0RPTj8ORMNg==", "requires": { "@apidevtools/json-schema-ref-parser": "^9.0.3", "ajv": "^8.3.0", @@ -24929,8 +23706,8 @@ "json-ptr": "^3.0.1", "json-schema-traverse": "^1.0.0", "lodash": "^4.17.11", - "openapi3-ts": "^3.1.1", - "promise-breaker": "^6.0.0", + "openapi3-ts": "^2.0.1", + "promise-breaker": "^5.0.0", "pump": "^3.0.0", "qs": "^6.6.0", "raw-body": "^2.3.3", @@ -25001,25 +23778,6 @@ "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -25047,17 +23805,6 @@ "ee-first": "1.1.1" } }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -25308,40 +24055,6 @@ "pkg-dir": "^4.2.0" } }, - "firebase": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.16.0.tgz", - "integrity": "sha512-nNLpDwJvfP3crRc6AjnHH46TAkFzk8zimNVMJfYRCwAf5amOSGyU8duuc3IsJF6dQGiYLSfzfr2tMCsQa+rhKQ==", - "dev": true, - "requires": { - "@firebase/analytics": "0.9.1", - "@firebase/analytics-compat": "0.2.1", - "@firebase/app": "0.9.1", - "@firebase/app-check": "0.6.1", - "@firebase/app-check-compat": "0.3.1", - "@firebase/app-compat": "0.2.1", - "@firebase/app-types": "0.9.0", - "@firebase/auth": "0.21.1", - "@firebase/auth-compat": "0.3.1", - "@firebase/database": "0.14.1", - "@firebase/database-compat": "0.3.1", - "@firebase/firestore": "3.8.1", - "@firebase/firestore-compat": "0.3.1", - "@firebase/functions": "0.9.1", - "@firebase/functions-compat": "0.3.1", - "@firebase/installations": "0.6.1", - "@firebase/installations-compat": "0.2.1", - "@firebase/messaging": "0.12.1", - "@firebase/messaging-compat": "0.2.1", - "@firebase/performance": "0.6.1", - "@firebase/performance-compat": "0.2.1", - "@firebase/remote-config": "0.4.1", - "@firebase/remote-config-compat": "0.2.1", - "@firebase/storage": "0.10.1", - "@firebase/storage-compat": "0.2.1", - "@firebase/util": "1.9.0" - } - }, "firebase-admin": { "version": "11.5.0", "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.5.0.tgz", @@ -25575,50 +24288,68 @@ } }, "gaxios": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.1.0.tgz", - "integrity": "sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.3.0.tgz", + "integrity": "sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==", "requires": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", + "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.9" }, "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==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, "gcp-metadata": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.0.tgz", - "integrity": "sha512-vQZD57cQkqIA6YPGXM/zc+PIZfNRFdukWGsGZ5+LcJzesi5xp6Gn7a02wRJi4eXPyArNMIYpPET4QMxGqtlk6Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", "requires": { - "gaxios": "^3.0.0", + "gaxios": "^6.0.0", "json-bigint": "^1.0.0" - }, - "dependencies": { - "gaxios": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz", - "integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } } }, "gensync": { @@ -25656,6 +24387,11 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -25663,12 +24399,12 @@ "dev": true }, "get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", + "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", "requires": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^5.0.1", "debug": "^4.3.4", "fs-extra": "^8.1.0" }, @@ -25788,21 +24524,27 @@ "dev": true }, "google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.7.0.tgz", + "integrity": "sha512-I/AvzBiUXDzLOy4iIZ2W+Zq33W4lcukQv1nl7C8WUA6SQwyQwUwu3waNmWNAvzds//FG8SZ+DnKnW/2k6mQS8A==", "requires": { - "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" }, "dependencies": { + "gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "requires": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + } + }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -25848,14 +24590,13 @@ } }, "google-gax": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", - "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.3.tgz", + "integrity": "sha512-caItkifbcPDVf5xW2j6xLXmuX9bh2dheJN9AzMuQj6VvWacUVV5d0BkjL+Ia8sgX9VvXtbqjf4NKK3nTgV9UUQ==", "requires": { - "@grpc/grpc-js": "~1.8.0", + "@grpc/grpc-js": "~1.7.0", "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", - "@types/rimraf": "^3.0.2", "abort-controller": "^3.0.0", "duplexify": "^4.0.0", "fast-text-encoding": "^1.0.3", @@ -25864,20 +24605,11 @@ "node-fetch": "^2.6.1", "object-hash": "^3.0.0", "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.4", - "protobufjs-cli": "1.1.1", + "protobufjs": "7.1.2", + "protobufjs-cli": "1.1.0", "retry-request": "^5.0.0" }, "dependencies": { - "@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", - "requires": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - } - }, "@grpc/proto-loader": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", @@ -25890,15 +24622,6 @@ "yargs": "^16.2.0" } }, - "@types/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -26046,9 +24769,9 @@ } }, "protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -26072,9 +24795,9 @@ } }, "protobufjs-cli": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", - "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.0.tgz", + "integrity": "sha512-VXMQn+z3yG2WbN2E+mx5vcyIHF7yJSg2jqyqfxcZLWNOSTqUzSSgAE5vu04/JEpwxTI04JGyrZRDHC36wr04uw==", "requires": { "chalk": "^4.0.0", "escodegen": "^1.13.0", @@ -26325,6 +25048,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -26359,6 +25088,23 @@ "jws": "^4.0.0" }, "dependencies": { + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -26674,11 +25420,11 @@ }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "ms": { @@ -26711,21 +25457,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "idb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", - "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", - "dev": true - }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -27290,11 +26030,11 @@ } }, "jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.0.tgz", + "integrity": "sha512-tzTgkklbWKrlaQL2+e3NNgLcZu3NaK2vsHRx7tyHQ+H5jcB9Gx0txSd2eJWlMC/xU1+7LQu4s58Ry0RkuaEQVg==", "requires": { - "@babel/parser": "^7.20.15", + "@babel/parser": "^7.9.4", "@jsdoc/salty": "^0.2.1", "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", @@ -27311,6 +26051,11 @@ "underscore": "~1.13.2" }, "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -27451,20 +26196,14 @@ } }, "jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "requires": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^7.5.4" + "semver": "^7.3.8" }, "dependencies": { "ms": { @@ -27597,16 +26336,16 @@ } }, "libsodium": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.13.tgz", - "integrity": "sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==" + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz", + "integrity": "sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ==" }, "libsodium-wrappers": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", - "integrity": "sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", + "integrity": "sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg==", "requires": { - "libsodium": "^0.7.13" + "libsodium": "^0.7.0" } }, "limiter": { @@ -27706,26 +26445,6 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, "lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", @@ -27739,11 +26458,6 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, "lodash.mapvalues": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", @@ -27755,11 +26469,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -27929,9 +26638,9 @@ }, "dependencies": { "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -28042,9 +26751,9 @@ } }, "markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.6.tgz", + "integrity": "sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA==", "requires": {} }, "markdown-table": { @@ -28899,6 +27608,11 @@ } } }, + "moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -28958,6 +27672,24 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "requires": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "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==" + } + } + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -29533,6 +28265,12 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -29697,9 +28435,9 @@ } }, "openapi3-ts": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-3.2.0.tgz", - "integrity": "sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.1.tgz", + "integrity": "sha512-v6X3iwddhi276siej96jHGIqTx3wzVfMTmpGJEQDt7GPI7pI6sywItURLzpEci21SBRpPN/aOWSF5mVfFVNmcg==", "requires": { "yaml": "^2.2.1" } @@ -29814,6 +28552,11 @@ "aggregate-error": "^3.0.0" } }, + "p-throttle": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-5.1.0.tgz", + "integrity": "sha512-+N+s2g01w1Zch4D0K3OpnPDqLOKmLcQ4BvIFq3JC0K29R28vUOjWpO+OJZBNt8X9i3pFCksZJZ0YXkUGjaFE6g==" + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -29821,18 +28564,18 @@ "dev": true }, "pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.0.tgz", + "integrity": "sha512-t4tRAMx0uphnZrio0S0Jw9zg3oDbz1zVhQ/Vy18FjLfP1XOLNUEjaVxYCYRI6NS+BsMBXKIzV6cTLOkO9AtywA==", "requires": { "@tootallnate/quickjs-emscripten": "^0.23.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.2", + "https-proxy-agent": "^7.0.0", "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.1" }, "dependencies": { "agent-base": { @@ -29852,9 +28595,9 @@ } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -29889,6 +28632,11 @@ "release-zalgo": "^1.0.0" } }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -29932,6 +28680,15 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -29977,6 +28734,74 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-cloudflare": "^1.1.1", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "dev": true + }, + "pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "requires": {} + }, + "pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "requires": { + "split2": "^4.1.0" + } + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -30085,6 +28910,35 @@ } } }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "dev": true + }, "preferred-pm": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", @@ -30149,6 +29003,11 @@ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -30169,9 +29028,9 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise-breaker": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", - "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz", + "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA==" }, "promise-inflight": { "version": "1.0.1", @@ -30246,9 +29105,9 @@ "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, "protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -30266,27 +29125,6 @@ } } }, - "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, "proxy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/proxy/-/proxy-1.0.2.tgz", @@ -30325,18 +29163,18 @@ } }, "proxy-agent": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "requires": { "agent-base": "^7.0.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.0", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.0.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.1" }, "dependencies": { "agent-base": { @@ -30356,9 +29194,9 @@ } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -30485,6 +29323,20 @@ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -30500,9 +29352,9 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -30673,6 +29525,12 @@ "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", "dev": true }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", @@ -30832,6 +29690,11 @@ "signal-exit": "^3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, "retext": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", @@ -31052,9 +29915,9 @@ }, "dependencies": { "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -31344,11 +30207,11 @@ } }, "socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.0.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -31469,11 +30332,33 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "sql-formatter": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.3.0.tgz", + "integrity": "sha512-1aDYVEX+dwOSCkRYns4HEGupRZoaivcsNpU4IzR+MVC+cWFYK9/dce7pr4aId4+ED2iK9PNs3j1Vdf8C+SIvDg==", + "requires": { + "argparse": "^2.0.1", + "get-stdin": "=8.0.0", + "nearley": "^2.20.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + } + } + }, "ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -31535,9 +30420,9 @@ } }, "stream-chain": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.4.tgz", + "integrity": "sha512-9lsl3YM53V5N/I1C2uJtc3Kavyi3kNYN83VkKb/bMWRk7D9imiFyUPYa0PoZbLohSVOX1mYE9YsmwObZUsth6Q==" }, "stream-events": { "version": "1.0.5", @@ -32182,9 +31067,9 @@ "dev": true }, "ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -32665,8 +31550,22 @@ "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", - "dev": true + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + } + } }, "util-deprecate": { "version": "1.0.2", @@ -32986,9 +31885,9 @@ } }, "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + "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==" }, "workerpool": { "version": "6.2.0", @@ -33061,6 +31960,11 @@ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", diff --git a/package.json b/package.json index 2e4c856bdc9..d5741cb0677 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "test": "npm run lint:quiet && npm run test:compile && npm run mocha", "test:client-integration": "bash ./scripts/client-integration-tests/run.sh", "test:compile": "tsc --project tsconfig.compile.json", + "test:dataconnect-deploy": "bash ./scripts/dataconnect-test/run.sh", "test:all-emulators": "npm run test:emulator && npm run test:extensions-emulator && npm run test:import-export && npm run test:storage-emulator-integration", "test:emulator": "bash ./scripts/emulator-tests/run.sh", "test:extensions-deploy": "bash ./scripts/extensions-deploy-tests/run.sh", @@ -94,6 +95,7 @@ ] }, "dependencies": { + "@google-cloud/cloud-sql-connector": "^1.2.3", "@google-cloud/pubsub": "^3.0.1", "abort-controller": "^3.0.0", "ajv": "^6.12.6", @@ -118,8 +120,9 @@ "form-data": "^4.0.0", "fs-extra": "^10.1.0", "fuzzy": "^0.1.3", + "gaxios": "^6.1.1", "glob": "^7.1.2", - "google-auth-library": "^7.11.0", + "google-auth-library": "^9.7.0", "inquirer": "^8.2.6", "inquirer-autocomplete-prompt": "^2.0.1", "jsonwebtoken": "^9.0.0", @@ -135,12 +138,15 @@ "open": "^6.3.0", "ora": "^5.4.1", "p-limit": "^3.0.1", + "path": "0.12.7", + "pg": "^8.11.3", "portfinder": "^1.0.32", "progress": "^2.0.3", "proxy-agent": "^6.3.0", "retry": "^0.13.1", "rimraf": "^3.0.0", "semver": "^7.5.2", + "sql-formatter": "^15.3.0", "stream-chain": "^2.2.4", "stream-json": "^1.7.3", "strip-ansi": "^6.0.1", @@ -189,6 +195,8 @@ "@types/multer": "^1.4.3", "@types/node": "^18.19.1", "@types/node-fetch": "^2.5.12", + "@types/pg": "^8.11.2", + "@types/prettier": "^3.0.0", "@types/progress": "^2.0.3", "@types/puppeteer": "^5.4.2", "@types/react": "^18.2.58", @@ -219,7 +227,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsdoc": "^48.0.1", "eslint-plugin-prettier": "^5.1.3", - "firebase": "^9.16.0", "firebase-admin": "^11.5.0", "firebase-functions": "^4.3.1", "google-discovery-to-swagger": "^2.1.0", diff --git a/schema/connector-yaml.json b/schema/connector-yaml.json new file mode 100644 index 00000000000..a1e7af383e8 --- /dev/null +++ b/schema/connector-yaml.json @@ -0,0 +1,54 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "definitions": { + "generatable": { + "additionalProperties": true, + "type": "object", + "properties": { + "outputDir": { + "type": "string", + "description": "Path to the directory where generated files should be written to." + } + } + } + }, + "properties": { + "connectorId": { + "type": "string", + "description": "The ID of the Firebase Data Connect connector." + }, + "authMode": { + "type": "string", + "description": "The authentication strategy to use for this connector" + + }, + "generate": { + "type": "object", + "additionalProperties": false, + "properties": { + "javascriptSdk": { + "type": "array", + "items": { + "$ref": "#/definitions/generatable" + }, + "description": "Configuration for a generated Javascript SDK" + }, + "kotlinSdk": { + "type": "array", + "items": { + "$ref": "#/definitions/generatable" + }, + "description": "Configuration for a generated Kotlin SDK" + }, + "swiftSdk": { + "type": "array", + "items": { + "$ref": "#/definitions/generatable" + }, + "description": "Configuration for a generated Swift SDK" + } + } + } + } +} diff --git a/schema/dataconnect-yaml.json b/schema/dataconnect-yaml.json new file mode 100644 index 00000000000..8fd59136b87 --- /dev/null +++ b/schema/dataconnect-yaml.json @@ -0,0 +1,72 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "definitions": { + "postgresql": { + "additionalProperties": false, + "type": "object", + "properties": { + "database": { + "type": "string", + "description": "The name of the PostgreSQL database." + }, + "cloudSql": { + "additionalProperties": false, + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "description": "The ID of the CloudSQL instance for this database" + } + } + } + } + }, + "dataSource": { + "oneOf": [ + { + "additionalProperties": false, + "type": "object", + "properties": { + "postgresql": { + "$ref": "#/definitions/postgresql" + } + } + } + ] + }, + "schema": { + "additionalProperties": false, + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Relative path to directory containing GQL files defining the schema. If omitted, defaults to ./schema." + }, + "datasource": { + "$ref": "#/definitions/dataSource" + } + } + } + }, + "properties": { + "specVersion": { + "type": "string", + "description": "The Firebase Data Connect API version to target. If omitted, defaults to the latest version" + }, + "serviceId": { + "type": "string", + "description": "The ID of the Firebase Data Connect service." + }, + "connectorDirs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of directories containing conector.yaml files describing a connector to deploy." + }, + "schema": { + "$ref": "#/definitions/schema" + } + } +} diff --git a/schema/firebase-config.json b/schema/firebase-config.json index 4fa4305c5e5..45adfe999fe 100644 --- a/schema/firebase-config.json +++ b/schema/firebase-config.json @@ -271,6 +271,97 @@ } ] }, + "dataconnect": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "location": { + "type": "string" + }, + "postdeploy": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "predeploy": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "source": { + "type": "string" + } + }, + "required": [ + "location", + "source" + ], + "type": "object" + }, + { + "items": { + "additionalProperties": false, + "properties": { + "location": { + "type": "string" + }, + "postdeploy": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "predeploy": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "source": { + "type": "string" + } + }, + "required": [ + "location", + "source" + ], + "type": "object" + }, + "type": "array" + } + ] + }, "emulators": { "additionalProperties": false, "properties": { @@ -298,6 +389,18 @@ }, "type": "object" }, + "dataconnect": { + "additionalProperties": false, + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "number" + } + }, + "type": "object" + }, "eventarc": { "additionalProperties": false, "properties": { diff --git a/scripts/dataconnect-test/.firebaserc b/scripts/dataconnect-test/.firebaserc new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/scripts/dataconnect-test/.firebaserc @@ -0,0 +1 @@ +{} diff --git a/scripts/dataconnect-test/.gitignore b/scripts/dataconnect-test/.gitignore new file mode 100644 index 00000000000..dbb58ffbfa3 --- /dev/null +++ b/scripts/dataconnect-test/.gitignore @@ -0,0 +1,66 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +firebase-debug.log* +firebase-debug.*.log* + +# Firebase cache +.firebase/ + +# Firebase config + +# Uncomment this if you'd like others to create their own Firebase project. +# For a team working on the same Firebase project(s), it is recommended to leave +# it commented so all members can deploy to the same project(s) in .firebaserc. +# .firebaserc + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env diff --git a/scripts/dataconnect-test/fdc-test/connector/connector.yaml b/scripts/dataconnect-test/fdc-test/connector/connector.yaml new file mode 100644 index 00000000000..68215053ca4 --- /dev/null +++ b/scripts/dataconnect-test/fdc-test/connector/connector.yaml @@ -0,0 +1,2 @@ +connectorId: "connectorId" +authMode: "PUBLIC" diff --git a/scripts/dataconnect-test/fdc-test/connector/mutations.gql b/scripts/dataconnect-test/fdc-test/connector/mutations.gql new file mode 100644 index 00000000000..51e05570ca5 --- /dev/null +++ b/scripts/dataconnect-test/fdc-test/connector/mutations.gql @@ -0,0 +1,3 @@ +mutation createOrder($name: String!) { + order_insert(data : {name: $name}) +} diff --git a/scripts/dataconnect-test/fdc-test/dataconnect.yaml b/scripts/dataconnect-test/fdc-test/dataconnect.yaml new file mode 100644 index 00000000000..09b3b25fb8a --- /dev/null +++ b/scripts/dataconnect-test/fdc-test/dataconnect.yaml @@ -0,0 +1,10 @@ +specVersion: "v1alpha" +serviceId: "integration-test" +schema: + source: "./schema" + datasource: + postgresql: + database: "dataconnect-test" + cloudSql: + instanceId: "dataconnect-test" +connectorDirs: ["./connector"] diff --git a/scripts/dataconnect-test/fdc-test/schema/schema.gql b/scripts/dataconnect-test/fdc-test/schema/schema.gql new file mode 100644 index 00000000000..49fe95f27db --- /dev/null +++ b/scripts/dataconnect-test/fdc-test/schema/schema.gql @@ -0,0 +1,14 @@ +type Product @table { + name: String! + price: Int! +} + +type Order @table { + name: String! +} + +type OrderItem @table(key: ["order", "product"]) { + order: Order! + product: Product! + quantity: Int! +} \ No newline at end of file diff --git a/scripts/dataconnect-test/firebase.json b/scripts/dataconnect-test/firebase.json new file mode 100644 index 00000000000..2b6aad2c7c9 --- /dev/null +++ b/scripts/dataconnect-test/firebase.json @@ -0,0 +1,6 @@ +{ + "dataconnect": { + "source": "fdc-test", + "location": "us-central1" + } +} diff --git a/scripts/dataconnect-test/run.sh b/scripts/dataconnect-test/run.sh new file mode 100644 index 00000000000..de0ecb0555f --- /dev/null +++ b/scripts/dataconnect-test/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# Globally link the CLI for the testing framework +./scripts/clean-install.sh + +mocha scripts/dataconnect-test/tests.ts +rm -rf ../../clean \ No newline at end of file diff --git a/scripts/dataconnect-test/tests.ts b/scripts/dataconnect-test/tests.ts new file mode 100644 index 00000000000..364e1473102 --- /dev/null +++ b/scripts/dataconnect-test/tests.ts @@ -0,0 +1,72 @@ +import * as cli from "../functions-deploy-tests/cli"; +import { expect } from "chai"; + +const FIREBASE_PROJECT = process.env.FBTOOLS_TARGET_PROJECT || ""; +const expected = { + serviceId: "integration-test", + location: "us-central1", + datasource: "CloudSQL Instance: dataconnect-test Database:dataconnect-test", + schemaUpdateTime: "", + connectors: [ + { + connectorId: "connectorId", + connectorLastUpdated: "", + }, + ], +}; + +async function list() { + return await cli.exec( + "dataconnect:list", + FIREBASE_PROJECT, + ["--json"], + __dirname, + /** quiet=*/ false, + { + FIREBASE_CLI_EXPERIMENTS: "dataconnect", + }, + ); +} + +async function migrate() { + return await cli.exec( + "dataconnect:sql:migrate", + FIREBASE_PROJECT, + ["--force"], + __dirname, + /** quiet=*/ false, + { FIREBASE_CLI_EXPERIMENTS: "dataconnect" }, + ); +} + +async function deploy() { + return await cli.exec( + "deploy", + FIREBASE_PROJECT, + ["--only", "dataconnect", "--force"], + __dirname, + /** quiet=*/ false, + { FIREBASE_CLI_EXPERIMENTS: "dataconnect" }, + ); +} + +describe("firebase deploy", () => { + before(() => { + expect(FIREBASE_PROJECT).not.to.equal("", "No FBTOOLS_TARGET_PROJECT env var set."); + }); + + it("should deploy expected connectors and services", async () => { + await migrate(); + await deploy(); + + const result = await list(); + const out = JSON.parse(result.stdout); + expect(out?.status).to.equal("success"); + expect(out?.result?.services?.length).to.equal(1); + const service = out.result.services[0]; + // Don't need to check update times. + expected.schemaUpdateTime = service["schemaUpdateTime"]; + expected.connectors[0].connectorLastUpdated = service["connectors"][0]["connectorLastUpdated"]; + expect(service).to.deep.equal(expected); + }).timeout(2000000); // Insanely long timeout in case of cSQL deploy. Should almost never be hit. +}); diff --git a/scripts/functions-deploy-tests/cli.ts b/scripts/functions-deploy-tests/cli.ts index f8f8476c07a..8a34f229e82 100644 --- a/scripts/functions-deploy-tests/cli.ts +++ b/scripts/functions-deploy-tests/cli.ts @@ -21,14 +21,18 @@ export function exec( additionalArgs: string[], cwd: string, quiet = true, + extraEnv: Record = {}, ): Promise { const args = [cmd, "--project", project]; if (additionalArgs) { args.push(...additionalArgs); } - - const proc = spawn("firebase", args, { cwd }); + const env = { + ...process.env, + ...extraEnv, + }; + const proc = spawn("firebase", args, { cwd, env }); if (!proc) { throw new Error("Failed to start firebase CLI"); } diff --git a/src/api.ts b/src/api.ts old mode 100644 new mode 100755 index 59454f43c68..31913262fa8 --- a/src/api.ts +++ b/src/api.ts @@ -144,6 +144,15 @@ export const githubClientId = () => utils.envOverride("GITHUB_CLIENT_ID", "89cf5 export const githubClientSecret = () => utils.envOverride("GITHUB_CLIENT_SECRET", "3330d14abc895d9a74d5f17cd7a00711fa2c5bf0"); +export const dataconnectOrigin = () => + utils.envOverride("FIREBASE_DATACONNECT_URL", "https://firebasedataconnect.googleapis.com"); +export const dataConnectLocalConnString = () => + utils.envOverride("FIREBASE_DATACONNECT_POSTGRESQL_STRING", ""); +export const cloudSQLAdminOrigin = () => + utils.envOverride("CLOUD_SQL_URL", "https://sqladmin.googleapis.com"); +export const vertexAIOrigin = () => + utils.envOverride("VERTEX_AI_URL", "https://aiplatform.googleapis.com"); + /** Gets scopes that have been set. */ export function getScopes(): string[] { return Array.from(commandScopes); diff --git a/src/apiv2.ts b/src/apiv2.ts index 33ff1e81b2b..e892b5feb0e 100644 --- a/src/apiv2.ts +++ b/src/apiv2.ts @@ -23,13 +23,30 @@ const GOOG_QUOTA_USER_HEADER = "x-goog-quota-user"; const GOOG_USER_PROJECT_HEADER = "x-goog-user-project"; const GOOGLE_CLOUD_QUOTA_PROJECT = process.env.GOOGLE_CLOUD_QUOTA_PROJECT; -export type HttpMethod = "GET" | "PUT" | "POST" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD"; +export type HttpMethod = + | "GET" + | "PUT" + | "POST" + | "DELETE" + | "PATCH" + | "OPTIONS" + | "HEAD" + | "CONNECT" + | "TRACE"; interface BaseRequestOptions extends VerbOptions { method: HttpMethod; - path: string; + path?: string; body?: T | string | NodeJS.ReadableStream; - responseType?: "json" | "stream" | "xml"; + responseType?: + | "json" + | "xml" + | "stream" + | "arraybuffer" + | "blob" + | "text" + | "unknown" + | undefined; redirect?: "error" | "follow" | "manual"; compress?: boolean; ignoreQuotaProject?: boolean; @@ -118,7 +135,7 @@ function proxyURIFromEnv(): string | undefined { } export type ClientOptions = { - urlPrefix: string; + urlPrefix?: string; apiVersion?: string; auth?: boolean; }; @@ -128,7 +145,7 @@ export class Client { if (this.opts.auth === undefined) { this.opts.auth = true; } - if (this.opts.urlPrefix.endsWith("/")) { + if (this.opts.urlPrefix?.endsWith("/")) { this.opts.urlPrefix = this.opts.urlPrefix.substring(0, this.opts.urlPrefix.length - 1); } } @@ -295,7 +312,18 @@ export class Client { return reqOptions; } - private async getAccessToken(): Promise { + public async getHeaders(): Promise> { + const opts: InternalClientRequestOptions = { method: "GET" }; + this.addRequestHeaders(opts); + await this.addAuthHeader(opts); + const map: Record = {}; + for (const h of opts.headers!) { + map[h[0]] = h[1]; + } + return map; + } + + public async getAccessToken(): Promise { // Runtime fetch of Auth singleton to prevent circular module dependencies if (accessToken) { return accessToken; @@ -305,6 +333,9 @@ export class Client { } private requestURL(options: InternalClientRequestOptions): string { + if (!this.opts.urlPrefix) { + throw new FirebaseError("unable to requestURL: urlPrefix is undefined"); + } const versionPath = this.opts.apiVersion ? `/${this.opts.apiVersion}` : ""; return `${this.opts.urlPrefix}${versionPath}${options.path}`; } @@ -312,7 +343,7 @@ export class Client { private async doRequest( options: InternalClientRequestOptions, ): Promise> { - if (!options.path.startsWith("/")) { + if (!options.path?.startsWith("/")) { options.path = "/" + options.path; } @@ -509,7 +540,10 @@ export class Client { } } -function isLocalInsecureRequest(urlPrefix: string): boolean { +function isLocalInsecureRequest(urlPrefix?: string): boolean { + if (!urlPrefix) { + return false; + } const u = new URL(urlPrefix); return u.protocol === "http:"; } diff --git a/src/auth.ts b/src/auth.ts index d335ed8363a..dfa9189090f 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -714,7 +714,6 @@ export async function getAccessToken(refreshToken: string, authScopes: string[]) if (haveValidTokens(refreshToken, authScopes) && lastAccessToken) { return lastAccessToken; } - return refreshTokens(refreshToken, authScopes); } diff --git a/src/checkValidTargetFilters.ts b/src/checkValidTargetFilters.ts index 49d13a97827..211deeaf33d 100644 --- a/src/checkValidTargetFilters.ts +++ b/src/checkValidTargetFilters.ts @@ -23,7 +23,14 @@ function targetsHaveNoFilters(...targets: string[]): boolean { return targets.some((t) => !t.includes(":")); } -const FILTERABLE_TARGETS = new Set(["hosting", "functions", "firestore", "storage", "database"]); +const FILTERABLE_TARGETS = new Set([ + "hosting", + "functions", + "firestore", + "storage", + "database", + "dataconnect", +]); /** * Validates that the target filters in options.only are valid. diff --git a/src/commands/dataconnect-list.ts b/src/commands/dataconnect-list.ts new file mode 100644 index 00000000000..62caf48e759 --- /dev/null +++ b/src/commands/dataconnect-list.ts @@ -0,0 +1,60 @@ +import { Command } from "../command"; +import { Options } from "../options"; +import { needProjectId } from "../projectUtils"; +import * as names from "../dataconnect/names"; +import * as client from "../dataconnect/client"; +import { logger } from "../logger"; +import { requirePermissions } from "../requirePermissions"; +const Table = require("cli-table"); + +export const command = new Command("dataconnect:list") + .description("list all deployed services in your Firebase project") + .before(requirePermissions, [ + "dataconnect.services.list", + "dataconnect.schemas.list", + "dataconnect.connectors.list", + ]) + .action(async (options: Options) => { + const projectId = needProjectId(options); + const services = await client.listAllServices(projectId); + const table: Record[] = new Table({ + head: [ + "Service ID", + "Location", + "Data Source", + "Schema Last Updated", + "Connector ID", + "Connector Last Updated", + ], + style: { head: ["yellow"] }, + }); + const jsonOutput: { services: Record[] } = { services: [] }; + for (const service of services) { + const schema = await client.getSchema(service.name); + const connectors = await client.listConnectors(service.name); + const serviceName = names.parseServiceName(service.name); + const instanceName = schema?.primaryDatasource.postgresql?.cloudSql.instance ?? ""; + const instanceId = instanceName.split("/").pop(); + const dbId = schema?.primaryDatasource.postgresql?.database ?? ""; + const dbName = `CloudSQL Instance: ${instanceId} Database:${dbId}`; + table.push([serviceName.serviceId, serviceName.location, dbName, schema?.updateTime, "", ""]); + const serviceJson = { + serviceId: serviceName.serviceId, + location: serviceName.location, + datasource: dbName, + schemaUpdateTime: schema?.updateTime, + connectors: [] as { connectorId: string; connectorLastUpdated: string }[], + }; + for (const conn of connectors) { + const connectorName = names.parseConnectorName(conn.name); + table.push(["", "", "", "", connectorName.connectorId, conn.updateTime]); + serviceJson.connectors.push({ + connectorId: connectorName.connectorId, + connectorLastUpdated: conn.updateTime ?? "", + }); + } + jsonOutput.services.push(serviceJson); + } + logger.info(table.toString()); + return jsonOutput; + }); diff --git a/src/commands/dataconnect-sdk-generate.ts b/src/commands/dataconnect-sdk-generate.ts new file mode 100644 index 00000000000..c849e11e5c0 --- /dev/null +++ b/src/commands/dataconnect-sdk-generate.ts @@ -0,0 +1,37 @@ +import * as path from "path"; + +import { Command } from "../command"; +import { Options } from "../options"; +import { DataConnectEmulator, DataConnectEmulatorArgs } from "../emulator/dataconnectEmulator"; +import { needProjectId } from "../projectUtils"; +import { load } from "../dataconnect/load"; +import { readFirebaseJson } from "../dataconnect/fileUtils"; +import { logger } from "../logger"; + +export const command = new Command("dataconnect:sdk:generate") + .description("generates typed SDKs for your Data Connect connectors") + .action(async (options: Options) => { + const projectId = needProjectId(options); + + const services = readFirebaseJson(options.config); + for (const service of services) { + let configDir = service.source; + if (!path.isAbsolute(configDir)) { + const cwd = options.cwd || process.cwd(); + configDir = path.resolve(path.join(cwd), configDir); + } + const serviceInfo = await load(projectId, service.location, configDir); + const args: DataConnectEmulatorArgs = { + projectId, + configDir, + auto_download: true, + rc: options.rc, + }; + const dataconnectEmulator = new DataConnectEmulator(args); + for (const conn of serviceInfo.connectorInfo) { + const output = await dataconnectEmulator.generate(conn.connectorYaml.connectorId); + console.log(output); + logger.info(`Generated SDKs for ${conn.connectorYaml.connectorId}`); + } + } + }); diff --git a/src/commands/dataconnect-sql-diff.ts b/src/commands/dataconnect-sql-diff.ts new file mode 100644 index 00000000000..4ccf012a8a4 --- /dev/null +++ b/src/commands/dataconnect-sql-diff.ts @@ -0,0 +1,23 @@ +import { Command } from "../command"; +import { Options } from "../options"; +import { needProjectId } from "../projectUtils"; +import { ensure } from "../ensureApiEnabled"; +import { dataconnectOrigin } from "../api"; +import { pickService } from "../dataconnect/fileUtils"; +import { diffSchema } from "../dataconnect/schemaMigration"; +import { requireAuth } from "../requireAuth"; + +export const command = new Command("dataconnect:sql:diff [serviceId]") + .description( + "displays the differences between a local DataConnect schema and your CloudSQL database's current schema", + ) + // .before(requirePermissions, ["dataconnect.services.list", "dataconnect.schemas.list", "dataconnect.connectors.list"]) + .before(requireAuth) + .action(async (serviceId: string, options: Options) => { + const projectId = needProjectId(options); + await ensure(projectId, new URL(dataconnectOrigin()).hostname, "dataconnect"); + const serviceInfo = await pickService(projectId, options.config, serviceId); + + const diffs = await diffSchema(serviceInfo.schema); + return { projectId, serviceId, diffs }; + }); diff --git a/src/commands/dataconnect-sql-migrate.ts b/src/commands/dataconnect-sql-migrate.ts new file mode 100644 index 00000000000..2f438c579c8 --- /dev/null +++ b/src/commands/dataconnect-sql-migrate.ts @@ -0,0 +1,41 @@ +import { Command } from "../command"; +import { Options } from "../options"; +import { needProjectId } from "../projectUtils"; +import { ensure } from "../ensureApiEnabled"; +import { dataconnectOrigin } from "../api"; +import { pickService } from "../dataconnect/fileUtils"; +import { logger } from "../logger"; +import { FirebaseError } from "../error"; +import { migrateSchema } from "../dataconnect/schemaMigration"; +import { requireAuth } from "../requireAuth"; + +export const command = new Command("dataconnect:sql:migrate [serviceId]") + .description("migrates your CloudSQL database's schema to match your local DataConnect schema") + // .before(requirePermissions, ["dataconnect.services.list", "dataconnect.schemas.list", "dataconnect.connectors.list"]) + .before(requireAuth) + .withForce("Execute any required database changes without prompting") + .action(async (serviceId: string, options: Options) => { + const projectId = needProjectId(options); + await ensure(projectId, new URL(dataconnectOrigin()).hostname, "dataconnect"); + const serviceInfo = await pickService(projectId, options.config, serviceId); + const instanceId = + serviceInfo.dataConnectYaml.schema.datasource.postgresql?.cloudSql.instanceId; + if (!instanceId) { + throw new FirebaseError( + "dataconnect.yaml is missing field schema.datasource.postgresql.cloudsql.instanceId", + ); + } + const diffs = await migrateSchema( + options, + serviceInfo.schema, + /** allowNonInteractiveMigration=*/ true, + ); + if (diffs.length) { + logger.info( + `Schema sucessfully migrated! Run 'firebase deploy' to deploy your new schema to your Data Connect service.`, + ); + } else { + logger.info("Schema was already up to date!"); + } + return { projectId, serviceId, diffs }; + }); diff --git a/src/commands/deploy.ts b/src/commands/deploy.ts index 8380a298c51..2bcf98a38bf 100644 --- a/src/commands/deploy.ts +++ b/src/commands/deploy.ts @@ -22,6 +22,7 @@ export const VALID_DEPLOY_TARGETS = [ "hosting", "remoteconfig", "extensions", + "dataconnect", ]; export const TARGET_PERMISSIONS: Record<(typeof VALID_DEPLOY_TARGETS)[number], string[]> = { database: ["firebasedatabase.instances.update"], @@ -46,6 +47,7 @@ export const TARGET_PERMISSIONS: Record<(typeof VALID_DEPLOY_TARGETS)[number], s "firebaserules.releases.update", ], remoteconfig: ["cloudconfig.configs.get", "cloudconfig.configs.update"], + dataconnect: [], // TODO: add required permissions }; export const command = new Command("deploy") @@ -60,7 +62,9 @@ export const command = new Command("deploy") 'only deploy to specified, comma-separated targets (e.g. "hosting,storage"). For functions, ' + 'can specify filters with colons to scope function deploys to only those functions (e.g. "--only functions:func1,functions:func2"). ' + "When filtering based on export groups (the exported module object keys), use dots to specify group names " + - '(e.g. "--only functions:group1.subgroup1,functions:group2)"', + '(e.g. "--only functions:group1.subgroup1,functions:group2)"' + + "For data connect, can specify filters with colons to deploy only a service, connector, or schema" + + '(e.g. "--only dataconnect:serviceId,dataconnect:serviceId:connectorId,dataconnect:serviceId:schema"). ', ) .option("--except ", 'deploy to all targets except specified (e.g. "database")') .before(requireConfig) diff --git a/src/commands/index.ts b/src/commands/index.ts index cd5fb8e44e7..70743eff4ea 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -1,5 +1,4 @@ import * as experiments from "../experiments"; - /** * Loads all commands for our parser. */ @@ -206,6 +205,16 @@ export function load(client: any): any { client.setup.emulators.pubsub = loadCommand("setup-emulators-pubsub"); client.setup.emulators.storage = loadCommand("setup-emulators-storage"); client.setup.emulators.ui = loadCommand("setup-emulators-ui"); + if (experiments.isEnabled("dataconnect")) { + client.dataconnect = {}; + client.setup.emulators.dataconnect = loadCommand("setup-emulators-dataconnect"); + client.dataconnect.list = loadCommand("dataconnect-list"); + client.dataconnect.sql = {}; + client.dataconnect.sql.diff = loadCommand("dataconnect-sql-diff"); + client.dataconnect.sql.migrate = loadCommand("dataconnect-sql-migrate"); + client.dataconnect.sdk = {}; + client.dataconnect.sdk.generate = loadCommand("dataconnect-sdk-generate"); + } client.target = loadCommand("target"); client.target.apply = loadCommand("target-apply"); client.target.clear = loadCommand("target-clear"); diff --git a/src/commands/init.ts b/src/commands/init.ts index 82a78e0277a..832f4ec1b89 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -81,6 +81,14 @@ if (isEnabled("apphosting")) { }); } +if (isEnabled("dataconnect")) { + choices.push({ + value: "dataconnect", + name: "Data Connect: Set up a Firebase Data Connect service.", + checked: false, + }); +} + const featureNames = choices.map((choice) => choice.value); const DESCRIPTION = `Interactively configure the current directory as a Firebase project or initialize new features in an already configured Firebase project directory. diff --git a/src/commands/setup-emulators-dataconnect.ts b/src/commands/setup-emulators-dataconnect.ts new file mode 100644 index 00000000000..fb0ea0758b4 --- /dev/null +++ b/src/commands/setup-emulators-dataconnect.ts @@ -0,0 +1,11 @@ +import { Command } from "../command"; +import { downloadEmulator } from "../emulator/download"; +import { Emulators } from "../emulator/types"; + +const NAME = Emulators.DATACONNECT; + +export const command = new Command(`setup:emulators:${NAME}`) + .description(`downloads the ${NAME} emulator`) + .action(() => { + return downloadEmulator(NAME); + }); diff --git a/src/config.ts b/src/config.ts index e9ce99febc7..5e253317980 100644 --- a/src/config.ts +++ b/src/config.ts @@ -32,6 +32,7 @@ export class Config { "hosting", "storage", "remoteconfig", + "dataconnect", ]; public options: any; diff --git a/src/dataconnect/build.ts b/src/dataconnect/build.ts new file mode 100644 index 00000000000..f2c3cd97a78 --- /dev/null +++ b/src/dataconnect/build.ts @@ -0,0 +1,24 @@ +import { DataConnectEmulator, DataConnectEmulatorArgs } from "../emulator/dataconnectEmulator"; +import { Options } from "../options"; +import { FirebaseError } from "../error"; +import { prettify } from "./graphqlError"; +import { DeploymentMetadata } from "./types"; + +export async function build(options: Options, configDir: string): Promise { + // We can build even if there is no project declared. + const projectId = options.project ?? "demo-test"; + const args: DataConnectEmulatorArgs = { + projectId, + configDir, + auto_download: true, + rc: options.rc, + }; + const dataconnectEmulator = new DataConnectEmulator(args); + const buildResult = await dataconnectEmulator.build(); + if (buildResult?.errors?.length) { + throw new FirebaseError( + `There are errors in your schema and connector files:\n${buildResult.errors.map(prettify).join("\n")}`, + ); + } + return buildResult?.metadata ?? {}; +} diff --git a/src/dataconnect/checkIam.ts b/src/dataconnect/checkIam.ts new file mode 100644 index 00000000000..cd9cd061275 --- /dev/null +++ b/src/dataconnect/checkIam.ts @@ -0,0 +1,30 @@ +import * as iam from "../gcp/iam"; +import { getIamPolicy, setIamPolicy } from "../gcp/resourceManager"; +import * as cloudSqlAdmin from "../gcp/cloudsql/cloudsqladmin"; +import { FirebaseError } from "../error"; + +export async function grantRolesToCloudSqlServiceAccount( + projectId: string, + instanceId: string, + roles: string[], +): Promise { + const instance = await cloudSqlAdmin.getInstance(projectId, instanceId); + const saEmail = instance.serviceAccountEmailAddress; + const policy = await getIamPolicy(projectId); + const requiredBindings = roles.map((r) => { + const binding: iam.Binding = { + role: r, + members: [saEmail], + }; + return binding; + }); + const updated = iam.mergeBindings(policy, requiredBindings); + if (updated) { + try { + await setIamPolicy(projectId, policy, "bindings"); + } catch (err: any) { + iam.printManualIamConfig(requiredBindings, projectId, "dataconnect"); + throw new FirebaseError("Unable to make required IAM policy changes."); + } + } +} diff --git a/src/dataconnect/client.ts b/src/dataconnect/client.ts new file mode 100644 index 00000000000..28b28b6d038 --- /dev/null +++ b/src/dataconnect/client.ts @@ -0,0 +1,150 @@ +import { dataconnectOrigin } from "../api"; +import { Client } from "../apiv2"; +import * as operationPoller from "../operation-poller"; +import * as types from "./types"; +import { logger } from "../logger"; + +const DATACONNECT_API_VERSION = "v1alpha"; +const dataconnectClient = () => + new Client({ + urlPrefix: dataconnectOrigin(), + apiVersion: DATACONNECT_API_VERSION, + auth: true, + }); + +export async function listLocations(projectId: string): Promise { + const res = await dataconnectClient().get<{ + locations: { + name: string; + locationId: string; + displayName: string; + }[]; + }>(`/projects/${projectId}/locations`); + return res.body?.locations?.map((l) => l.locationId) ?? []; +} + +/** Service methods */ +export async function listAllServices(projectId: string): Promise { + const locations = await listLocations(projectId); + let services: types.Service[] = []; + for (const l of locations) { + try { + const locationServices = await listServices(projectId, l); + services = services.concat(locationServices); + } catch (err) { + logger.debug(`Unable to listServices in ${l}: ${err}`); + } + } + return services; +} + +export async function listServices( + projectId: string, + locationId: string, +): Promise { + const res = await dataconnectClient().get<{ services: types.Service[] }>( + `/projects/${projectId}/locations/${locationId}/services`, + ); + return res.body.services ?? []; +} + +export async function createService( + projectId: string, + locationId: string, + serviceId: string, +): Promise { + const op = await dataconnectClient().post( + `/projects/${projectId}/locations/${locationId}/services`, + { + name: `projects/${projectId}/locations/${locationId}/services/${serviceId}`, + }, + { + queryParams: { + service_id: serviceId, + }, + }, + ); + const pollRes = await operationPoller.pollOperation({ + apiOrigin: dataconnectOrigin(), + apiVersion: DATACONNECT_API_VERSION, + operationResourceName: op.body.name, + }); + return pollRes; +} + +export async function deleteService( + projectId: string, + locationId: string, + serviceId: string, +): Promise { + const op = await dataconnectClient().delete( + `projects/${projectId}/locations/${locationId}/services/${serviceId}?force=true`, + ); + const pollRes = await operationPoller.pollOperation({ + apiOrigin: dataconnectOrigin(), + apiVersion: DATACONNECT_API_VERSION, + operationResourceName: op.body.name, + }); + return pollRes; +} + +/** Schema methods */ + +export async function getSchema(serviceName: string): Promise { + const res = await dataconnectClient().get( + `${serviceName}/schemas/${types.SCHEMA_ID}`, + ); + return res.body; +} + +export async function upsertSchema( + schema: types.Schema, + validateOnly: boolean = false, +): Promise { + const op = await dataconnectClient().patch(`${schema.name}`, schema, { + queryParams: { + allowMissing: "true", + validateOnly: validateOnly ? "true" : "false", + }, + }); + if (validateOnly) { + return; + } + return operationPoller.pollOperation({ + apiOrigin: dataconnectOrigin(), + apiVersion: DATACONNECT_API_VERSION, + operationResourceName: op.body.name, + }); +} + +/** Connector methods */ + +export async function getConnector(name: string): Promise { + const res = await dataconnectClient().get(name); + return res.body; +} + +export async function deleteConnector(name: string): Promise { + const res = await dataconnectClient().delete(name); + return res.body; +} + +export async function listConnectors(serviceName: string) { + const res = await dataconnectClient().get<{ connectors: types.Connector[] }>( + `${serviceName}/connectors`, + ); + return res.body?.connectors || []; +} + +export async function upsertConnector(connector: types.Connector) { + const op = await dataconnectClient().patch( + `${connector.name}?allow_missing=true`, + connector, + ); + const pollRes = await operationPoller.pollOperation({ + apiOrigin: dataconnectOrigin(), + apiVersion: DATACONNECT_API_VERSION, + operationResourceName: op.body.name, + }); + return pollRes; +} diff --git a/src/dataconnect/dataplaneClient.ts b/src/dataconnect/dataplaneClient.ts new file mode 100644 index 00000000000..13f9a800567 --- /dev/null +++ b/src/dataconnect/dataplaneClient.ts @@ -0,0 +1,20 @@ +import { dataconnectOrigin } from "../api"; +import { Client } from "../apiv2"; +import * as types from "./types"; + +const DATACONNECT_API_VERSION = "v1alpha"; + +const dataconnectDataplaneClient = () => + new Client({ + urlPrefix: dataconnectOrigin(), + apiVersion: DATACONNECT_API_VERSION, + auth: true, + }); + +export async function executeGraphQL(servicePath: string, body: types.ExecuteGraphqlRequest) { + const res = await dataconnectDataplaneClient().post< + types.ExecuteGraphqlRequest, + types.ExecuteGraphqlResponse | types.ExecuteGraphqlResponseError + >(`${servicePath}:executeGraphql`, body, { resolveOnHTTPError: true }); + return res; +} diff --git a/src/dataconnect/fileUtils.ts b/src/dataconnect/fileUtils.ts new file mode 100644 index 00000000000..5c1f84fa2b2 --- /dev/null +++ b/src/dataconnect/fileUtils.ts @@ -0,0 +1,104 @@ +import * as fs from "fs-extra"; +import * as path from "path"; + +import { FirebaseError } from "../error"; +import { ConnectorYaml, DataConnectYaml, File, ServiceInfo } from "./types"; +import { readFileFromDirectory, wrappedSafeLoad } from "../utils"; +import { Config } from "../config"; +import { DataConnectMultiple } from "../firebaseConfig"; +import { load } from "./load"; + +export function readFirebaseJson(config: Config): DataConnectMultiple { + if (!config.has("dataconnect")) { + return []; + } + const validator = (cfg: any) => { + if (!cfg["source"] && !cfg["location"]) { + throw new FirebaseError( + "Invalid firebase.json: DataConnect requires `source` and `location`", + ); + } + return { + source: cfg["source"], + location: cfg["location"], + }; + }; + const configs = config.get("dataconnect"); + if (typeof configs === "object" && !Array.isArray(configs)) { + return [validator(configs)]; + } else if (Array.isArray(configs)) { + return configs.map(validator); + } else { + throw new FirebaseError( + "Invalid firebase.json: dataconnect should be of the form { source: string, location: string }", + ); + } +} + +export async function readDataConnectYaml(sourceDirectory: string): Promise { + const file = await readFileFromDirectory(sourceDirectory, "dataconnect.yaml"); + const dataconnectYaml = await wrappedSafeLoad(file.source); + return validateDataConnectYaml(dataconnectYaml); +} + +function validateDataConnectYaml(unvalidated: any): DataConnectYaml { + // TODO: Add validation + return unvalidated as DataConnectYaml; +} + +export async function readConnectorYaml(sourceDirectory: string): Promise { + const file = await readFileFromDirectory(sourceDirectory, "connector.yaml"); + const connectorYaml = await wrappedSafeLoad(file.source); + return validateConnectorYaml(connectorYaml); +} + +function validateConnectorYaml(unvalidated: any): ConnectorYaml { + // TODO: Add validation + return unvalidated as ConnectorYaml; +} + +export async function readGQLFiles(sourceDir: string): Promise { + const files = await fs.readdir(sourceDir); + return files.filter((f) => f.endsWith(".gql")).map((f) => toFile(path.join(sourceDir, f))); +} + +function toFile(path: string): File { + if (!fs.existsSync(path)) { + throw new FirebaseError(`file ${path} not found`); + } + const file = fs.readFileSync(path).toString(); + return { + path: path, + content: file, + }; +} + +// pickService reads firebase.json and returns all services with a given serviceId. +// If serviceID is not provided and there is a single service, return that. +export async function pickService( + projectId: string, + config: Config, + serviceId?: string, +): Promise { + const serviceCfgs = readFirebaseJson(config); + let serviceInfo: ServiceInfo; + if (serviceCfgs.length === 0) { + throw new FirebaseError("No Data Connect services found in firebase.json."); + } else if (serviceCfgs.length === 1) { + serviceInfo = await load(projectId, serviceCfgs[0].location, serviceCfgs[0].source); + } else { + if (!serviceId) { + throw new FirebaseError( + "Multiple Data Connect services found in firebase.json. Please specify a service ID to use.", + ); + } + const infos = await Promise.all(serviceCfgs.map((c) => load(projectId, c.location, c.source))); + // TODO: handle cases where there are services with the same ID in 2 locations. + const maybe = infos.find((i) => i.dataConnectYaml.serviceId === serviceId); + if (!maybe) { + throw new FirebaseError(`No service named ${serviceId} declared in firebase.json.`); + } + serviceInfo = maybe; + } + return serviceInfo; +} diff --git a/src/dataconnect/filters.ts b/src/dataconnect/filters.ts new file mode 100644 index 00000000000..89db0153b8e --- /dev/null +++ b/src/dataconnect/filters.ts @@ -0,0 +1,49 @@ +import { FirebaseError } from "../error"; + +export interface ResourceFilter { + serviceId: string; + fullService?: boolean; + schemaOnly?: boolean; + connectorId?: string; +} + +export function getResourceFilters(options: { only?: string }): ResourceFilter[] | undefined { + if (!options.only) { + return undefined; + } + + const selectors = options.only.split(","); + const filters: ResourceFilter[] = []; + for (let selector of selectors) { + if (selector.startsWith("dataconnect:")) { + selector = selector.replace("dataconnect:", ""); + if (selector.length > 0) { + filters.push(parseSelector(selector)); + } + } + } + + if (filters.length === 0) { + return undefined; + } + return filters; +} + +function parseSelector(selector: string): ResourceFilter { + const parts = selector.split(":"); + const filter: ResourceFilter = { + serviceId: parts[0], + }; + if (parts.length === 2) { + if (parts[1] === "schema") { + filter.schemaOnly = true; + } else { + filter.connectorId = parts[1]; + } + } else if (parts.length === 1) { + filter.fullService = true; + } else { + throw new FirebaseError(`Invalid '--only' filter dataconnect:${selector}`); + } + return filter; +} diff --git a/src/dataconnect/freeTrial.ts b/src/dataconnect/freeTrial.ts new file mode 100644 index 00000000000..c5b3528e61b --- /dev/null +++ b/src/dataconnect/freeTrial.ts @@ -0,0 +1,22 @@ +import { listInstances } from "../gcp/cloudsql/cloudsqladmin"; +import * as utils from "../utils"; + +export function freeTrialTermsLink(): string { + // TODO: Link to the free trial terms here. + return ""; +} + +// Checks whether there is already a free trial instance on a project. +export async function checkForFreeTrialInstance(projectId: string): Promise { + const instances = await listInstances(projectId); + return instances.find((i) => i.settings.userLabels?.["firebase-data-connect"] === "ft")?.name; +} + +export function printFreeTrialUnavailable(projectId: string, instanceId: string) { + const message = + `Project '${projectId}' already has a CloudSQL instance '${instanceId}' on the Firebase Data Connect free trial. ` + + "The free trial only includes one CloudSQL instance. " + + `Consider using a separate database on ${instanceId}, or creating a new CloudSQL instance at ` + + "https://console.cloud.google.com/sql/instances"; + utils.logLabeledError("dataconnect", message); +} diff --git a/src/dataconnect/graphqlError.ts b/src/dataconnect/graphqlError.ts new file mode 100644 index 00000000000..a9bb83d31ac --- /dev/null +++ b/src/dataconnect/graphqlError.ts @@ -0,0 +1,10 @@ +import { GraphqlError } from "./types"; + +export function prettify(err: GraphqlError): string { + const message = err.message; + let header = err.extensions.file ?? ""; + for (const loc of err.locations) { + header += `(${loc.line}, ${loc.column})`; + } + return header.length ? `${header}: ${message}` : message; +} diff --git a/src/dataconnect/load.ts b/src/dataconnect/load.ts new file mode 100644 index 00000000000..cd5a8ea2f92 --- /dev/null +++ b/src/dataconnect/load.ts @@ -0,0 +1,47 @@ +import * as path from "path"; +import * as fileUtils from "./fileUtils"; +import { ServiceInfo, toDatasource, SCHEMA_ID } from "./types"; + +/** + * loads schemas and connectors from {sourceDirectory}/dataconnect.yaml + */ +export async function load( + projectId: string, + locationId: string, + sourceDirectory: string, +): Promise { + const dataConnectYaml = await fileUtils.readDataConnectYaml(sourceDirectory); + const serviceName = `projects/${projectId}/locations/${locationId}/services/${dataConnectYaml.serviceId}`; + const schemaDir = path.join(sourceDirectory, dataConnectYaml.schema.source); + const schemaGQLs = await fileUtils.readGQLFiles(schemaDir); + const connectorInfo = await Promise.all( + dataConnectYaml.connectorDirs.map(async (dir) => { + const connectorDir = path.join(sourceDirectory, dir); + const connectorYaml = await fileUtils.readConnectorYaml(connectorDir); + const connectorGqls = await fileUtils.readGQLFiles(connectorDir); + return { + connectorYaml, + connector: { + name: `${serviceName}/connectors/${connectorYaml.connectorId}`, + source: { + files: connectorGqls, + }, + }, + }; + }), + ); + + return { + serviceName, + sourceDirectory, + schema: { + name: `${serviceName}/schemas/${SCHEMA_ID}`, + primaryDatasource: toDatasource(projectId, locationId, dataConnectYaml.schema.datasource), + source: { + files: schemaGQLs, + }, + }, + dataConnectYaml, + connectorInfo, + }; +} diff --git a/src/dataconnect/names.ts b/src/dataconnect/names.ts new file mode 100644 index 00000000000..4b4fa282cfc --- /dev/null +++ b/src/dataconnect/names.ts @@ -0,0 +1,62 @@ +import { FirebaseError } from "../error"; + +interface serviceName { + projectId: string; + location: string; + serviceId: string; + toString(): string; +} + +const serviceNameRegex = + /projects\/(?[^\/]+)\/locations\/(?[^\/]+)\/services\/(?[^\/]+)/; + +export function parseServiceName(serviceName: string): serviceName { + const res = serviceNameRegex.exec(serviceName); + const projectId = res?.groups?.projectId; + const location = res?.groups?.location; + const serviceId = res?.groups?.serviceId; + if (!projectId || !location || !serviceId) { + throw new FirebaseError(`${serviceName} is not a valid service name`); + } + const toString = () => { + return `projects/${projectId}/locations/${location}/services/${serviceId}`; + }; + return { + projectId, + location, + serviceId, + toString, + }; +} + +interface connectorName { + projectId: string; + location: string; + serviceId: string; + connectorId: string; + toString(): string; +} + +const connectorNameRegex = + /projects\/(?[^\/]+)\/locations\/(?[^\/]+)\/services\/(?[^\/]+)\/connectors\/(?[^\/]+)/; + +export function parseConnectorName(connectorName: string): connectorName { + const res = connectorNameRegex.exec(connectorName); + const projectId = res?.groups?.projectId; + const location = res?.groups?.location; + const serviceId = res?.groups?.serviceId; + const connectorId = res?.groups?.connectorId; + if (!projectId || !location || !serviceId || !connectorId) { + throw new FirebaseError(`${connectorName} is not a valid connector name`); + } + const toString = () => { + return `projects/${projectId}/locations/${location}/services/${serviceId}/connectors/${connectorId}`; + }; + return { + projectId, + location, + serviceId, + connectorId, + toString, + }; +} diff --git a/src/dataconnect/prompts.ts b/src/dataconnect/prompts.ts new file mode 100644 index 00000000000..6dc45257d68 --- /dev/null +++ b/src/dataconnect/prompts.ts @@ -0,0 +1,23 @@ +import { confirm } from "../prompt"; +import * as utils from "../utils"; +import { deleteConnector } from "./client"; + +export async function promptDeleteConnector( + options: { force?: boolean; nonInteractive?: boolean }, + connectorName: string, +): Promise { + utils.logLabeledWarning( + "dataconnect", + `Connector ${connectorName} exists but is not listed in dataconnect.yaml.`, + ); + const confirmDeletion = await confirm({ + default: false, + message: `Do you want to delete ${connectorName}?`, + force: options.force, + nonInteractive: options.nonInteractive, + }); + if (confirmDeletion) { + await deleteConnector(connectorName); + utils.logLabeledSuccess("dataconnect", `Connector ${connectorName} deleted`); + } +} diff --git a/src/dataconnect/provisionCloudSql.ts b/src/dataconnect/provisionCloudSql.ts new file mode 100755 index 00000000000..622130aa9d9 --- /dev/null +++ b/src/dataconnect/provisionCloudSql.ts @@ -0,0 +1,139 @@ +import * as cloudSqlAdminClient from "../gcp/cloudsql/cloudsqladmin"; +import { execute } from "../gcp/cloudsql/connect"; +import * as utils from "../utils"; +import { grantRolesToCloudSqlServiceAccount } from "./checkIam"; +import { Instance } from "../gcp/cloudsql/types"; + +const GOOGLE_ML_INTEGRATION_ROLE = "roles/aiplatform.user"; + +import { + checkForFreeTrialInstance, + freeTrialTermsLink, + printFreeTrialUnavailable, +} from "./freeTrial"; +import { FirebaseError } from "../error"; + +export async function provisionCloudSql(args: { + projectId: string; + locationId: string; + instanceId: string; + databaseId: string; + enableGoogleMlIntegration: boolean; + silent?: boolean; +}): Promise { + let connectionName: string; // Not used yet, will be used for schema migration + const { projectId, locationId, instanceId, databaseId, enableGoogleMlIntegration, silent } = args; + try { + const existingInstance = await cloudSqlAdminClient.getInstance(projectId, instanceId); + silent || utils.logLabeledBullet("dataconnect", `Found existing instance ${instanceId}.`); + connectionName = existingInstance?.connectionName || ""; + if (!checkInstanceConfig(existingInstance, enableGoogleMlIntegration)) { + // TODO: Return message from checkInstanceConfig to explain exactly what changes are made + silent || + utils.logLabeledBullet( + "dataconnect", + `Instance ${instanceId} settings not compatible with Firebase Data Connect.` + + `Updating instance to enable Cloud IAM authentication and public IP. This may take a few minutes...`, + ); + await cloudSqlAdminClient.updateInstanceForDataConnect( + existingInstance, + enableGoogleMlIntegration, + ); + silent || utils.logLabeledBullet("dataconnect", "Instance updated"); + } + } catch (err: any) { + // We only should catch NOT FOUND errors + if (err.status !== 404) { + throw err; + } + const freeTrialInstanceId = await checkForFreeTrialInstance(projectId); + if (freeTrialInstanceId) { + printFreeTrialUnavailable(projectId, freeTrialInstanceId); + throw new FirebaseError("Free trial unavailable."); + } + silent || + utils.logLabeledBullet( + "dataconnect", + `CloudSQL instance '${instanceId}' not found, creating it. This instance is provided under the terms of the Data Connect free trial ${freeTrialTermsLink()}`, + ); + silent || utils.logLabeledBullet("dataconnect", `This may take while...`); + const newInstance = await cloudSqlAdminClient.createInstance( + projectId, + locationId, + instanceId, + enableGoogleMlIntegration, + ); + silent || utils.logLabeledBullet("dataconnect", "Instance created"); + connectionName = newInstance?.connectionName || ""; + } + try { + await cloudSqlAdminClient.getDatabase(projectId, instanceId, databaseId); + silent || utils.logLabeledBullet("dataconnect", `Found existing database ${databaseId}.`); + } catch (err) { + silent || + utils.logLabeledBullet("dataconnect", `Database ${databaseId} not found, creating it now...`); + await cloudSqlAdminClient.createDatabase(projectId, instanceId, databaseId); + silent || utils.logLabeledBullet("dataconnect", `Database ${databaseId} created.`); + } + if (enableGoogleMlIntegration) { + await grantRolesToCloudSqlServiceAccount(projectId, instanceId, [GOOGLE_ML_INTEGRATION_ROLE]); + } + return connectionName; +} + +export const REQUIRED_EXTENSIONS_COMMANDS = [ + `CREATE SCHEMA IF NOT EXISTS "public"`, + `CREATE EXTENSION IF NOT EXISTS "uuid-ossp" with SCHEMA public`, + `CREATE EXTENSION IF NOT EXISTS "vector" with SCHEMA public`, + `CREATE EXTENSION IF NOT EXISTS "google_ml_integration" with SCHEMA public CASCADE`, +]; +// TODO: This should not be hardcoded, instead should be returned during schema migration +export async function installRequiredExtensions( + projectId: string, + instanceId: string, + databaseId: string, + username: string, +) { + await execute(REQUIRED_EXTENSIONS_COMMANDS, { + projectId, + instanceId, + databaseId, + username, + silent: true, + }); +} + +/** + * Validate that existing CloudSQL instances have the necessary settings. + */ +export function checkInstanceConfig( + instance: Instance, + requireGoogleMlIntegration: boolean, +): boolean { + const settings = instance.settings; + // CloudSQL instances must have public IP enabled to be used with Firebase Data Connect. + if (!settings.ipConfiguration?.ipv4Enabled) { + return false; + } + + if (requireGoogleMlIntegration) { + if (!settings.enableGoogleMlIntegration) { + return false; + } + if ( + !settings.databaseFlags?.some( + (f) => f.name === "cloudsql.enable_google_ml_integration" && f.value === "on", + ) + ) { + return false; + } + } + + // CloudSQL instances must have IAM authentication enabled to be used with Firebase Data Connect. + const isIamEnabled = + settings.databaseFlags?.some( + (f) => f.name === "cloudsql.iam_authentication" && f.value === "on", + ) ?? false; + + return isIamEnabled; +} diff --git a/src/dataconnect/schemaMigration.ts b/src/dataconnect/schemaMigration.ts new file mode 100644 index 00000000000..3794252365c --- /dev/null +++ b/src/dataconnect/schemaMigration.ts @@ -0,0 +1,167 @@ +import * as clc from "colorette"; +import { format } from "sql-formatter"; + +import { IncompatibleSqlSchemaError, Diff } from "./types"; +import { upsertSchema } from "./client"; +import { execute, setupIAMUser } from "../gcp/cloudsql/connect"; +import { promptOnce } from "../prompt"; +import { logger } from "../logger"; +import { Schema } from "./types"; +import { Options } from "../options"; +import { FirebaseError } from "../error"; +import { REQUIRED_EXTENSIONS_COMMANDS } from "./provisionCloudSql"; +import { needProjectId } from "../projectUtils"; +import { logLabeledWarning } from "../utils"; + +const IMCOMPATIBLE_SCHEMA_ERROR_TYPESTRING = + "type.googleapis.com/google.firebase.dataconnect.v1main.IncompatibleSqlSchemaError"; + +export async function diffSchema(schema: Schema): Promise { + const dbName = schema.primaryDatasource.postgresql?.database; + const instanceName = schema.primaryDatasource.postgresql?.cloudSql.instance; + if (!instanceName || !dbName) { + throw new FirebaseError(`tried to diff schema but ${instanceName} was undefined`); + } + try { + // TODO: Handle cases where error only comes back after validateOnly=false + await upsertSchema(schema, /** validateOnly=*/ true); + } catch (err: any) { + const incompatible = getIncompatibleSchemaError(err); + if (incompatible) { + displaySchemaChanges(incompatible); + return incompatible.diffs; + } + throw err; + } + logger.debug(`Schema was up to date for ${instanceName}:${dbName}`); + return []; +} + +export async function migrateSchema( + options: Options, + schema: Schema, + allowNonInteractiveMigration: boolean, +): Promise { + const projectId = needProjectId(options); + const databaseId = schema.primaryDatasource.postgresql?.database; + if (!databaseId) { + throw new FirebaseError( + "Schema is missing primaryDatasource.postgresql?.database, cannot migrate", + ); + } + const instanceId = schema.primaryDatasource.postgresql?.cloudSql.instance.split("/").pop(); + if (!instanceId) { + throw new FirebaseError(`tried to migrate schema but ${instanceId} was undefined`); + } + const iamUser = await setupIAMUser(instanceId, databaseId, options); + try { + // TODO(b/330596914): Handle cases where error only comes back after validateOnly=false + await upsertSchema(schema, /** validateOnly=*/ true); + } catch (err: any) { + const incompatible = getIncompatibleSchemaError(err); + if (incompatible) { + const choice = await promptForSchemaMigration( + options, + databaseId, + incompatible, + allowNonInteractiveMigration, + ); + const commandsToExecute = incompatible.diffs + .filter((d) => { + switch (choice) { + case "all": + return true; + case "safe": + return !d.destructive; + case "none": + return false; + } + }) + .map((d) => d.sql); + if (commandsToExecute.length) { + await execute( + [ + ...REQUIRED_EXTENSIONS_COMMANDS, + ...commandsToExecute, + `GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "public" TO PUBLIC`, + ], + { + projectId, + instanceId, + databaseId, + username: iamUser, + }, + ); + return incompatible.diffs; + } + } + throw err; + } + logger.debug(`Schema was up to date for ${instanceId}:${databaseId}`); + return []; +} + +async function promptForSchemaMigration( + options: Options, + databaseName: string, + err: IncompatibleSqlSchemaError, + allowNonInteractiveMigration: boolean, +): Promise<"none" | "safe" | "all"> { + displaySchemaChanges(err); + if (!options.nonInteractive) { + // Always prompt in interactive mode. Desturctive migrations are too potentially dangerous to not prompt for with --force + const choices = err.destructive + ? [ + { name: "Execute all changes (including destructive changes)", value: "all" }, + { name: "Execute only safe changes", value: "safe" }, + { name: "Abort changes", value: "none" }, + ] + : [ + { name: "Execute changes", value: "safe" }, + { name: "Abort changes", value: "none" }, + ]; + return await promptOnce({ + message: `Would you like to execute these changes against ${databaseName}?`, + type: "list", + choices, + }); + } else if (!allowNonInteractiveMigration) { + // `deploy --nonInteractive` performs no migrations + logger.error( + "Your database schema is incompatible with your Data Connect schema. Run `firebase dataconnect:sql:migrate` to migrate your database schema", + ); + return "none"; + } else if (options.force) { + // `dataconnect:sql:migrate --nonInteractive --force` performs all migrations + return "all"; + } else if (!err.destructive) { + // `dataconnect:sql:migrate --nonInteractive` performs only safe migrations + return "safe"; + } else { + // `dataconnect:sql:migrate --nonInteractive` errors out if there are destructive migrations + logger.error( + "This schema migration includes potentially destructive changes. If you'd like to execute it anyway, rerun this command with --force", + ); + return "none"; + } +} + +function displaySchemaChanges(error: IncompatibleSqlSchemaError) { + const message = + "Your new schema is incompatible with the schema of your CloudSQL database. " + + "The following SQL statements will migrate your database schema to match your new Data Connect schema.\n" + + error.diffs.map(toString).join("\n"); + logLabeledWarning("dataconnect", message); +} + +function toString(diff: Diff) { + return `\/** ${diff.destructive ? clc.red("Destructive: ") : ""}${diff.description}*\/\n${format(diff.sql, { language: "postgresql" })}`; +} + +function getIncompatibleSchemaError(err: any): IncompatibleSqlSchemaError | undefined { + const original = err.context?.body.error; + const details: any[] = original.details; + const incompatibles = details.filter((d) => d["@type"] === IMCOMPATIBLE_SCHEMA_ERROR_TYPESTRING); + // Should never get multiple incompatible schema errors + return incompatibles[0]; +} diff --git a/src/dataconnect/types.ts b/src/dataconnect/types.ts new file mode 100644 index 00000000000..4f14a1beb8f --- /dev/null +++ b/src/dataconnect/types.ts @@ -0,0 +1,198 @@ +// Schema is a singleton, so we always call it 'main' +export const SCHEMA_ID = "main"; + +// API Types +interface BaseResource { + createTime?: string; + updateTime?: string; + uid?: string; + reconciling?: boolean; +} + +export interface Service extends BaseResource { + name: string; +} + +export interface Schema extends BaseResource { + name: string; + + primaryDatasource: Datasource; + source: Source; +} + +export interface Connector extends BaseResource { + name: string; + source: Source; +} + +export interface Datasource { + postgresql?: PostgreSql; +} + +export interface PostgreSql { + database: string; + cloudSql: CloudSqlInstance; +} + +export interface CloudSqlInstance { + instance: string; +} + +export interface Source { + files: File[]; +} + +export interface File { + path: string; + content: string; +} + +// An error indicating that the SQL database schema is incomptible with a data connect schema. +export interface IncompatibleSqlSchemaError { + // A list of differences between the two schema with instrucitons how to resolve them. + diffs: Diff[]; + // Whether any of the changes included are destructive. + destructive: boolean; +} + +export interface Diff { + // A SQL migration command (i.e. `CREATE TABLE …`, etc.) that should be run in order to bring + // the underlying SQL schema in line with the GQL application schema. + sql: string; + // A description of the changes to be applied with sql_migration_command. + description: string; + // Whether the SQL migration command is destructive. + destructive: boolean; +} + +export interface GraphqlError { + message: string; + locations: { + line: number; + column: number; + }[]; + extensions: { + file?: string; + [key: string]: any; + }; +} +export interface BuildResult { + errors?: GraphqlError[]; + metadata?: DeploymentMetadata; +} + +export interface DeploymentMetadata { + primaryDataSource?: { + postgres?: { + requiredExtensions?: string[]; + }; + }; +} + +export function requiresVector(dm?: DeploymentMetadata): boolean { + return dm?.primaryDataSource?.postgres?.requiredExtensions?.includes("vector") ?? false; +} + +// YAML types +export interface DataConnectYaml { + specVersion?: string; + serviceId: string; + schema: SchemaYaml; + connectorDirs: string[]; +} + +export interface SchemaYaml { + source: string; + datasource: DatasourceYaml; +} + +export interface DatasourceYaml { + postgresql?: { + database: string; + cloudSql: { + instanceId: string; + }; + }; +} + +export interface ConnectorYaml { + connectorId: string; + authMode?: "ADMIN" | "PUBLIC"; + generate?: Generate; +} + +export interface Generate { + javascriptSdk?: JavascriptSDK[]; + swiftSdk?: SwiftSDK[]; + kotlinSdk?: KotlinSDK[]; +} + +export interface JavascriptSDK { + outputDir: string; +} +export interface SwiftSDK { + // Optional for Swift becasue XCode makes you import files. + outputDir?: string; +} +export interface KotlinSDK { + outputDir: string; +} + +// Helper types && converters +export interface ServiceInfo { + serviceName: string; + sourceDirectory: string; + schema: Schema; + connectorInfo: { + connector: Connector; + connectorYaml: ConnectorYaml; + }[]; + dataConnectYaml: DataConnectYaml; + deploymentMetadata?: DeploymentMetadata; +} + +export function toDatasource( + projectId: string, + locationId: string, + ds: DatasourceYaml, +): Datasource { + if (ds.postgresql) { + return { + postgresql: { + database: ds.postgresql.database, + cloudSql: { + instance: `projects/${projectId}/locations/${locationId}/instances/${ds.postgresql.cloudSql.instanceId}`, + }, + }, + }; + } + return {}; +} + +/** Start Dataplane Client Types */ +export interface ExecuteGraphqlRequest { + name: string; + query: string; + operationName?: string; + variables?: { [key: string]: string }; + extensions?: { impersonate?: Impersonation }; +} + +export interface ExecuteGraphqlResponse { + data: Record; + errors: any[]; +} + +export interface ExecuteGraphqlResponseError { + error: { code: number; message: string; status: string; details: any[] }; +} + +interface ImpersonationAuthenticated { + authClaims: any; +} +interface ImpersonationUnauthenticated { + unauthenticated: boolean; +} +export type Impersonation = ImpersonationAuthenticated | ImpersonationUnauthenticated; + +/** End Dataplane Client Types */ diff --git a/src/deploy/dataconnect/deploy.ts b/src/deploy/dataconnect/deploy.ts new file mode 100644 index 00000000000..511afd7dd8e --- /dev/null +++ b/src/deploy/dataconnect/deploy.ts @@ -0,0 +1,122 @@ +import { Options } from "../../options"; +import * as client from "../../dataconnect/client"; +import * as utils from "../../utils"; +import { Service, ServiceInfo, requiresVector } from "../../dataconnect/types"; +import { needProjectId } from "../../projectUtils"; +import { provisionCloudSql } from "../../dataconnect/provisionCloudSql"; +import { parseServiceName } from "../../dataconnect/names"; +import { confirm } from "../../prompt"; +import { ResourceFilter } from "../../dataconnect/filters"; +import { vertexAIOrigin } from "../../api"; +import * as ensureApiEnabled from "../../ensureApiEnabled"; + +/** + * Checks for and creates a Firebase DataConnect service, if needed. + * TODO: Also checks for and creates a CloudSQL instance and database. + * @param context The deploy context. + * @param options The CLI options object. + */ +export default async function ( + context: { + dataconnect: { + serviceInfos: ServiceInfo[]; + filters?: ResourceFilter[]; + }; + }, + options: Options, +): Promise { + const projectId = needProjectId(options); + const serviceInfos = context.dataconnect.serviceInfos as ServiceInfo[]; + const services = await client.listAllServices(projectId); + const filters = context.dataconnect.filters; + + if ( + serviceInfos.some((si) => { + return requiresVector(si.deploymentMetadata); + }) + ) { + await ensureApiEnabled.ensure(projectId, vertexAIOrigin(), "dataconnect"); + } + + const servicesToCreate = serviceInfos + .filter((si) => !services.some((s) => matches(si, s))) + .filter((si) => { + return !filters || filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId); + }); + // When --only filters are passed, don't delete anything. + const servicesToDelete = filters + ? [] + : services.filter((s) => !serviceInfos.some((si) => matches(si, s))); + await Promise.all( + servicesToCreate.map(async (s) => { + const { projectId, locationId, serviceId } = splitName(s.serviceName); + await client.createService(projectId, locationId, serviceId); + utils.logLabeledSuccess("dataconnect", `Created service ${s.serviceName}`); + }), + ); + + if (servicesToDelete.length) { + if ( + await confirm({ + force: options.force, + nonInteractive: options.nonInteractive, + message: `The following services exist on ${projectId} but are not listed in your 'firebase.json'\n${servicesToDelete + .map((s) => s.name) + .join("\n")}\nWould you like to delete these services?`, + }) + ) { + await Promise.all( + servicesToDelete.map(async (s) => { + const { projectId, locationId, serviceId } = splitName(s.name); + await client.deleteService(projectId, locationId, serviceId); + utils.logLabeledSuccess("dataconnect", `Deleted service ${s.name}`); + }), + ); + } + } + + // Provision CloudSQL resources + utils.logLabeledBullet("dataconnect", "Checking for CloudSQL resources..."); + + await Promise.all( + serviceInfos + .filter((si) => { + return !filters || filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId); + }) + .map(async (s) => { + const instanceId = s.schema.primaryDatasource.postgresql?.cloudSql.instance + .split("/") + .pop(); + const databaseId = s.schema.primaryDatasource.postgresql?.database; + if (!instanceId || !databaseId) { + return Promise.resolve(); + } + const enableGoogleMlIntegration = requiresVector(s.deploymentMetadata); + return provisionCloudSql({ + projectId, + locationId: parseServiceName(s.serviceName).location, + instanceId, + databaseId, + enableGoogleMlIntegration, + }); + }), + ); + return; +} + +function matches(si: ServiceInfo, s: Service) { + return si.serviceName === s.name; +} + +function splitName(serviceName: string): { + projectId: string; + locationId: string; + serviceId: string; +} { + const parts = serviceName.split("/"); + return { + projectId: parts[1], + locationId: parts[3], + serviceId: parts[5], + }; +} diff --git a/src/deploy/dataconnect/index.ts b/src/deploy/dataconnect/index.ts new file mode 100644 index 00000000000..6827ff14f87 --- /dev/null +++ b/src/deploy/dataconnect/index.ts @@ -0,0 +1,5 @@ +import prepare from "./prepare"; +import deploy from "./deploy"; +import release from "./release"; + +export { prepare, deploy, release }; diff --git a/src/deploy/dataconnect/prepare.ts b/src/deploy/dataconnect/prepare.ts new file mode 100644 index 00000000000..24c460124f8 --- /dev/null +++ b/src/deploy/dataconnect/prepare.ts @@ -0,0 +1,40 @@ +import * as path from "path"; + +import { Options } from "../../options"; +import { load } from "../../dataconnect/load"; +import { readFirebaseJson } from "../../dataconnect/fileUtils"; +import { logger } from "../../logger"; +import * as utils from "../../utils"; +import { ensure } from "../../ensureApiEnabled"; +import { needProjectId } from "../../projectUtils"; +import { dataconnectOrigin } from "../../api"; +import { getResourceFilters } from "../../dataconnect/filters"; +import { build } from "../../dataconnect/build"; + +/** + * Prepares for a Firebase DataConnect deployment by loading schemas and connectors from file. + * @param context The deploy context. + * @param options The CLI options object. + */ +export default async function (context: any, options: Options): Promise { + const projectId = needProjectId(options); + await ensure(projectId, new URL(dataconnectOrigin()).hostname, "dataconnect"); + const serviceCfgs = readFirebaseJson(options.config); + utils.logLabeledBullet("dataconnect", `Preparing to deploy`); + const filters = getResourceFilters(options); + const serviceInfos = await Promise.all( + serviceCfgs.map((c) => + load(projectId, c.location, path.join(options.cwd || process.cwd(), c.source)), + ), + ); + for (const si of serviceInfos) { + si.deploymentMetadata = await build(options, si.sourceDirectory); + } + context.dataconnect = { + serviceInfos, + filters, + }; + utils.logLabeledBullet("dataconnect", `Successfully prepared schema and connectors`); + logger.debug(JSON.stringify(context.dataconnect, null, 2)); + return; +} diff --git a/src/deploy/dataconnect/release.ts b/src/deploy/dataconnect/release.ts new file mode 100644 index 00000000000..389c11ea1c0 --- /dev/null +++ b/src/deploy/dataconnect/release.ts @@ -0,0 +1,112 @@ +import * as utils from "../../utils"; +import { Connector, ServiceInfo } from "../../dataconnect/types"; +import { listConnectors, upsertSchema, upsertConnector } from "../../dataconnect/client"; +import { promptDeleteConnector } from "../../dataconnect/prompts"; +import { Options } from "../../options"; +import { FirebaseError } from "../../error"; +import { ResourceFilter } from "../../dataconnect/filters"; +import { migrateSchema } from "../../dataconnect/schemaMigration"; + +/** + * Release deploys schemas and connectors. + * TODO: Also prompt user to delete unused schemas/connectors + * @param context The deploy context. + * @param options The CLI options object. + */ +export default async function ( + context: { + dataconnect: { + serviceInfos: ServiceInfo[]; + filters?: ResourceFilter[]; + }; + }, + options: Options, +): Promise { + const serviceInfos = context.dataconnect.serviceInfos; + const filters = context.dataconnect.filters; + + // First, migrate and deploy schemas + const wantSchemas = serviceInfos + .filter((si) => { + return ( + !filters || + filters.some((f) => { + return f.serviceId === si.dataConnectYaml.serviceId && (f.schemaOnly || f.fullService); + }) + ); + }) + .map((s) => s.schema); + + if (wantSchemas.length) { + // If needed, migrate schemas + utils.logLabeledBullet( + "dataconnect", + "Checking if database schemas match Data Connect schemas...", + ); + for (const s of wantSchemas) { + await migrateSchema(options, s, /** allowNonInteractiveMigration=*/ false); + } + // Then, deploy schemas + utils.logLabeledBullet("dataconnect", "Releasing schemas..."); + const schemaPromises = await Promise.allSettled(wantSchemas.map((s) => upsertSchema(s))); + const failedSchemas = schemaPromises.filter( + (p): p is PromiseRejectedResult => p.status === "rejected", + ); + if (failedSchemas.length) { + throw new FirebaseError( + `Errors while updating your schemas:\n ${failedSchemas.map((f) => f.reason).join("\n")}`, + ); + } + utils.logLabeledBullet("dataconnect", "Schemas released."); + } + + // Next, deploy connectors + let wantConnectors: Connector[] = []; + wantConnectors = wantConnectors.concat( + ...serviceInfos.map((si) => + si.connectorInfo + .filter((c) => { + return ( + !filters || + filters.some((f) => { + return ( + f.serviceId === si.dataConnectYaml.serviceId && + (f.connectorId === c.connectorYaml.connectorId || f.fullService) + ); + }) + ); + }) + .map((c) => c.connector), + ), + ); + const haveConnectors = await have(serviceInfos); + const connectorsToDelete = filters + ? [] + : haveConnectors.filter((h) => !wantConnectors.some((w) => w.name === h.name)); + + if (wantConnectors.length) { + utils.logLabeledBullet("dataconnect", "Releasing connectors..."); + await Promise.all( + wantConnectors.map(async (c) => { + await upsertConnector(c); + utils.logLabeledSuccess("dataconnect", `Deployed connector ${c.name}`); + }), + ); + for (const c of connectorsToDelete) { + await promptDeleteConnector(options, c.name); + } + utils.logLabeledBullet("dataconnect", "Connectors released."); + } + utils.logLabeledSuccess("dataconnect", "Deploy complete!"); + return; +} + +// have lists out all of the connectors currently deployed to the services we are deploying. +// We don't need to worry about connectors on other services because we will delete/ignore the service during deploy +async function have(serviceInfos: ServiceInfo[]): Promise { + let connectors: Connector[] = []; + for (const si of serviceInfos) { + connectors = connectors.concat(await listConnectors(si.serviceName)); + } + return connectors; +} diff --git a/src/deploy/functions/checkIam.ts b/src/deploy/functions/checkIam.ts index 7d578a68b5c..695cc4de3ff 100644 --- a/src/deploy/functions/checkIam.ts +++ b/src/deploy/functions/checkIam.ts @@ -166,51 +166,6 @@ export function obtainDefaultComputeServiceAgentBindings(projectNumber: string): return [runInvokerBinding, eventarcEventReceiverBinding]; } -/** Helper to merge all required bindings into the IAM policy, returns boolean if the policy has been updated */ -export function mergeBindings(policy: iam.Policy, requiredBindings: iam.Binding[]): boolean { - let updated = false; - for (const requiredBinding of requiredBindings) { - const match = policy.bindings.find((b) => b.role === requiredBinding.role); - if (!match) { - updated = true; - policy.bindings.push(requiredBinding); - continue; - } - for (const requiredMember of requiredBinding.members) { - if (!match.members.find((m) => m === requiredMember)) { - updated = true; - match.members.push(requiredMember); - } - } - } - return updated; -} - -/** Utility to print the required binding commands */ -function printManualIamConfig(requiredBindings: iam.Binding[], projectId: string) { - utils.logLabeledBullet( - "functions", - "Failed to verify the project has the correct IAM bindings for a successful deployment.", - "warn", - ); - utils.logLabeledBullet( - "functions", - "You can either re-run `firebase deploy` as a project owner or manually run the following set of `gcloud` commands:", - "warn", - ); - for (const binding of requiredBindings) { - for (const member of binding.members) { - utils.logLabeledBullet( - "functions", - `\`gcloud projects add-iam-policy-binding ${projectId} ` + - `--member=${member} ` + - `--role=${binding.role}\``, - "warn", - ); - } - } -} - /** * Checks and sets the roles for specific resource service agents * @param projectId human readable project id @@ -254,7 +209,7 @@ export async function ensureServiceAgentRoles( try { policy = await getIamPolicy(projectNumber); } catch (err: any) { - printManualIamConfig(requiredBindings, projectId); + iam.printManualIamConfig(requiredBindings, projectId, "functions"); utils.logLabeledBullet( "functions", "Could not verify the necessary IAM configuration for the following newly-integrated services: " + @@ -264,7 +219,7 @@ export async function ensureServiceAgentRoles( ); return; } - const hasUpdatedBindings = mergeBindings(policy, requiredBindings); + const hasUpdatedBindings = iam.mergeBindings(policy, requiredBindings); if (!hasUpdatedBindings) { return; } @@ -273,7 +228,7 @@ export async function ensureServiceAgentRoles( try { await setIamPolicy(projectNumber, policy, "bindings"); } catch (err: any) { - printManualIamConfig(requiredBindings, projectId); + iam.printManualIamConfig(requiredBindings, projectId, "functions"); throw new FirebaseError( "We failed to modify the IAM policy for the project. The functions " + "deployment requires specific roles to be granted to service agents," + diff --git a/src/deploy/index.ts b/src/deploy/index.ts index c1146a4d003..2e690d1c70d 100644 --- a/src/deploy/index.ts +++ b/src/deploy/index.ts @@ -16,6 +16,7 @@ import * as FunctionsTarget from "./functions"; import * as StorageTarget from "./storage"; import * as RemoteConfigTarget from "./remoteconfig"; import * as ExtensionsTarget from "./extensions"; +import * as DataConnectTarget from "./dataconnect"; import { prepareFrameworks } from "../frameworks"; import { HostingDeploy } from "./hosting/context"; import { addPinnedFunctionsToOnlyString, hasPinnedFunctions } from "./hosting/prepare"; @@ -31,6 +32,7 @@ const TARGETS = { storage: StorageTarget, remoteconfig: RemoteConfigTarget, extensions: ExtensionsTarget, + dataconnect: DataConnectTarget, }; type Chain = ((context: any, options: any, payload: any) => Promise)[]; diff --git a/src/downloadUtils.ts b/src/downloadUtils.ts index dd39c28cbc6..4d3addff762 100644 --- a/src/downloadUtils.ts +++ b/src/downloadUtils.ts @@ -10,10 +10,11 @@ import { FirebaseError } from "./error"; * Downloads the resource at `remoteUrl` to a temporary file. * Resolves to the temporary file's name, rejects if there's any error. * @param remoteUrl URL to download. + * @param auth Whether to include an access token in the download request. Defaults to false. */ -export async function downloadToTmp(remoteUrl: string): Promise { +export async function downloadToTmp(remoteUrl: string, auth: boolean = false): Promise { const u = new URL(remoteUrl); - const c = new Client({ urlPrefix: u.origin, auth: false }); + const c = new Client({ urlPrefix: u.origin, auth }); const tmpfile = tmp.fileSync(); const writeStream = fs.createWriteStream(tmpfile.name); diff --git a/src/emulator/constants.ts b/src/emulator/constants.ts index 1d0e51a5d72..5731ae2cb72 100644 --- a/src/emulator/constants.ts +++ b/src/emulator/constants.ts @@ -13,6 +13,7 @@ export const DEFAULT_PORTS: { [s in Emulators]: number } = { auth: 9099, storage: 9199, eventarc: 9299, + dataconnect: 9399, }; export const FIND_AVAILBLE_PORT_BY_DEFAULT: Record = { @@ -28,6 +29,7 @@ export const FIND_AVAILBLE_PORT_BY_DEFAULT: Record = { storage: false, extensions: false, eventarc: true, + dataconnect: true, }; export const EMULATOR_DESCRIPTION: Record = { @@ -43,6 +45,7 @@ export const EMULATOR_DESCRIPTION: Record = { storage: "Storage Emulator", extensions: "Extensions Emulator", eventarc: "Eventarc Emulator", + dataconnect: "Data Connect Emulator", }; export const DEFAULT_HOST = "localhost"; diff --git a/src/emulator/controller.ts b/src/emulator/controller.ts old mode 100644 new mode 100755 index a9e5e4d7657..8a547a74cda --- a/src/emulator/controller.ts +++ b/src/emulator/controller.ts @@ -18,14 +18,8 @@ import { } from "./types"; import { Constants, FIND_AVAILBLE_PORT_BY_DEFAULT } from "./constants"; import { EmulatableBackend, FunctionsEmulator } from "./functionsEmulator"; -import { AuthEmulator, SingleProjectMode } from "./auth"; -import { DatabaseEmulator, DatabaseEmulatorArgs } from "./databaseEmulator"; -import { FirestoreEmulator, FirestoreEmulatorArgs } from "./firestoreEmulator"; -import { HostingEmulator } from "./hostingEmulator"; -import { EventarcEmulator } from "./eventarcEmulator"; import { FirebaseError } from "../error"; import { getProjectId, needProjectId, getAliases, needProjectNumber } from "../projectUtils"; -import { PubsubEmulator } from "./pubsubEmulator"; import * as commandUtils from "./commandUtils"; import { EmulatorHub } from "./hub"; import { ExportMetadata, HubExport } from "./hubExport"; @@ -41,7 +35,6 @@ import { MIN_SUPPORTED_JAVA_MAJOR_VERSION, } from "./commandUtils"; import { fileExistsSync } from "../fsutils"; -import { StorageEmulator } from "./storage"; import { getStorageRulesConfig } from "./storage/rules/config"; import { getDefaultDatabaseInstance } from "../getDefaultDatabaseInstance"; import { getProjectDefaultAccount } from "../auth"; @@ -55,6 +48,16 @@ import * as experiments from "../experiments"; import { EmulatorListenConfig, PortName, resolveHostAndAssignPorts } from "./portUtils"; import { Runtime, isRuntime } from "../deploy/functions/runtimes/supported"; +import { AuthEmulator, SingleProjectMode } from "./auth"; +import { DatabaseEmulator, DatabaseEmulatorArgs } from "./databaseEmulator"; +import { EventarcEmulator } from "./eventarcEmulator"; +import { DataConnectEmulator } from "./dataconnectEmulator"; +import { FirestoreEmulator, FirestoreEmulatorArgs } from "./firestoreEmulator"; +import { HostingEmulator } from "./hostingEmulator"; +import { PubsubEmulator } from "./pubsubEmulator"; +import { StorageEmulator } from "./storage"; +import { readFirebaseJson } from "../dataconnect/fileUtils"; + const START_LOGGING_EMULATOR = utils.envOverride( "START_LOGGING_EMULATOR", "false", @@ -817,6 +820,32 @@ export async function startAll( await startEmulator(pubsubEmulator); } + if (listenForEmulator.dataconnect) { + const dataConnectAddr = legacyGetFirstAddr(Emulators.DATACONNECT); + const config = readFirebaseJson(options.config); + if (!config.length) { + throw new FirebaseError("No Data Connect service found in firebase.json"); + } else if (config.length > 1) { + logger.warn( + `TODO: Add support for multiple services in the Data Connect emulator. Currently emulating first service ${config[0].source}`, + ); + } + let configDir = config[0].source; + if (!path.isAbsolute(configDir)) { + const cwd = options.cwd || process.cwd(); + configDir = path.resolve(path.join(cwd), configDir); + } + const dataConnectEmulator = new DataConnectEmulator({ + host: dataConnectAddr.host, + port: dataConnectAddr.port, + projectId, + auto_download: true, + configDir, + rc: options.rc, + }); + await startEmulator(dataConnectEmulator); + } + if (listenForEmulator.storage) { const storageAddr = legacyGetFirstAddr(Emulators.STORAGE); diff --git a/src/emulator/dataconnectEmulator.ts b/src/emulator/dataconnectEmulator.ts new file mode 100644 index 00000000000..91836bb972d --- /dev/null +++ b/src/emulator/dataconnectEmulator.ts @@ -0,0 +1,100 @@ +import * as childProcess from "child_process"; + +import { dataConnectLocalConnString } from "../api"; +import { Constants } from "./constants"; +import { getPID, start, stop, downloadIfNecessary } from "./downloadableEmulators"; +import { EmulatorInfo, EmulatorInstance, Emulators } from "./types"; +import { FirebaseError } from "../error"; +import { EmulatorLogger } from "./emulatorLogger"; +import { RC } from "../rc"; +import { BuildResult } from "../dataconnect/types"; + +export interface DataConnectEmulatorArgs { + projectId?: string; + port?: number; + host?: string; + configDir?: string; + auto_download?: boolean; + rc: RC; +} + +export class DataConnectEmulator implements EmulatorInstance { + constructor(private args: DataConnectEmulatorArgs) {} + private logger = EmulatorLogger.forEmulator(Emulators.DATACONNECT); + + start(): Promise { + const port = this.args.port || Constants.getDefaultPort(Emulators.DATACONNECT); + this.logger.log("DEBUG", `Using Postgres connection string: ${this.getLocalConectionString()}`); + return start(Emulators.DATACONNECT, { + ...this.args, + http_port: port, + grpc_port: port + 1, + config_dir: this.args.configDir, + local_connection_string: this.getLocalConectionString(), + project_id: this.args.projectId, + }); + } + + connect(): Promise { + // TODO: Do some kind of uptime check. + return Promise.resolve(); + } + + stop(): Promise { + return stop(Emulators.DATACONNECT); + } + + getInfo(): EmulatorInfo { + const host = this.args.host || Constants.getDefaultHost(); + const port = this.args.port || Constants.getDefaultPort(Emulators.DATACONNECT); + + return { + name: this.getName(), + host, + port, + pid: getPID(Emulators.DATACONNECT), + }; + } + getName(): Emulators { + return Emulators.DATACONNECT; + } + + async generate(connectorId: string): Promise { + const commandInfo = await downloadIfNecessary(Emulators.DATACONNECT); + const cmd = [ + "generate", + `--config_dir=${this.args.configDir}`, + `--connector_id=${connectorId}`, + ]; + const res = childProcess.spawnSync(commandInfo.binary, cmd, { encoding: "utf-8" }); + if (res.error) { + throw new FirebaseError(`Error starting up Data Connect emulator: ${res.error}`); + } + return res.stdout; + } + + async build(): Promise { + const commandInfo = await downloadIfNecessary(Emulators.DATACONNECT); + const cmd = ["build", `--config_dir=${this.args.configDir}`]; + + const res = childProcess.spawnSync(commandInfo.binary, cmd, { encoding: "utf-8" }); + if (res.stderr) { + throw new FirebaseError( + `Unable to build your Data Connect schema and connectors: ${res.stderr}`, + ); + } + try { + return JSON.parse(res.stdout) as BuildResult; + } catch (err) { + // JSON parse errors are unreadable. + throw new FirebaseError(`Unable to parse 'fdc build' output: ${res.stdout ?? res.stderr}`); + } + } + + private getLocalConectionString() { + if (dataConnectLocalConnString()) { + return dataConnectLocalConnString(); + } + return this.args.rc.getDataconnect()?.postgres?.localConnectionString; + } +} diff --git a/src/emulator/download.ts b/src/emulator/download.ts index 2a729bab073..8544c6c21d4 100644 --- a/src/emulator/download.ts +++ b/src/emulator/download.ts @@ -21,7 +21,7 @@ export async function downloadEmulator(name: DownloadableEmulators): Promise { /** * @param targetName */ -export async function downloadIfNecessary(targetName: DownloadableEmulators): Promise { +export async function downloadIfNecessary( + targetName: DownloadableEmulators, +): Promise { const hasEmulator = fs.existsSync(getExecPath(targetName)); - if (hasEmulator) { - return; + if (!hasEmulator) { + await downloadEmulator(targetName); } - - await downloadEmulator(targetName); + return Commands[targetName]; } /** @@ -508,7 +557,12 @@ export async function downloadIfNecessary(targetName: DownloadableEmulators): Pr */ export async function start( targetName: DownloadableEmulators, - args: any, + args: { + auto_download?: boolean; + port?: number; + host?: string; + [k: string]: any; + }, extraEnv: Partial = {}, ): Promise { const downloadDetails = DownloadDetails[targetName]; diff --git a/src/emulator/portUtils.ts b/src/emulator/portUtils.ts index d233be79041..95593151b8b 100644 --- a/src/emulator/portUtils.ts +++ b/src/emulator/portUtils.ts @@ -160,11 +160,11 @@ export async function checkListenable( } /** - * Wait for a port to be available on the given host. Checks every 250ms for up to 60s. + * Wait for a port to be available on the given host. Checks every 250ms for up to 5s. */ export async function waitForPortUsed(port: number, host: string): Promise { - const interval = 250; - const timeout = 60_000; + const interval = 200; + const timeout = 5_000; try { await tcpport.waitUntilUsedOnHost(port, host, interval, timeout); } catch (e: any) { @@ -181,6 +181,7 @@ const EMULATOR_CAN_LISTEN_ON_PRIMARY_ONLY: Record = { firestore: true, "firestore.websocket": true, pubsub: true, + dataconnect: true, // Listening on multiple addresses to maximize the chance of discovery. hub: false, diff --git a/src/emulator/registry.ts b/src/emulator/registry.ts index e1f852225d5..fc41ad47826 100644 --- a/src/emulator/registry.ts +++ b/src/emulator/registry.ts @@ -1,4 +1,11 @@ -import { ALL_EMULATORS, EmulatorInstance, Emulators, EmulatorInfo } from "./types"; +import { + ALL_EMULATORS, + EmulatorInstance, + Emulators, + EmulatorInfo, + DownloadableEmulatorDetails, + DownloadableEmulators, +} from "./types"; import { FirebaseError } from "../error"; import * as portUtils from "./portUtils"; import { Constants } from "./constants"; @@ -6,7 +13,7 @@ import { EmulatorLogger } from "./emulatorLogger"; import * as express from "express"; import { connectableHostname } from "../utils"; import { Client, ClientOptions } from "../apiv2"; - +import { get as getDownloadableEmulatorDetails } from "./downloadableEmulators"; /** * Static registry for running emulators to discover each other. * @@ -80,6 +87,7 @@ export class EmulatorRegistry { auth: 3.3, storage: 3.5, eventarc: 3.6, + dataconnect: 3.7, // Hub shuts down once almost everything else is done hub: 4, @@ -134,6 +142,10 @@ export class EmulatorRegistry { }; } + static getDetails(emulator: DownloadableEmulators): DownloadableEmulatorDetails { + return getDownloadableEmulatorDetails(emulator); + } + /** * Return a URL object with the emulator protocol, host, and port populated. * diff --git a/src/emulator/types.ts b/src/emulator/types.ts index 606eae9b8c0..74dd055ec18 100644 --- a/src/emulator/types.ts +++ b/src/emulator/types.ts @@ -14,6 +14,7 @@ export enum Emulators { STORAGE = "storage", EXTENSIONS = "extensions", EVENTARC = "eventarc", + DATACONNECT = "dataconnect", } export type DownloadableEmulators = @@ -21,13 +22,15 @@ export type DownloadableEmulators = | Emulators.DATABASE | Emulators.PUBSUB | Emulators.UI - | Emulators.STORAGE; + | Emulators.STORAGE + | Emulators.DATACONNECT; export const DOWNLOADABLE_EMULATORS = [ Emulators.FIRESTORE, Emulators.DATABASE, Emulators.PUBSUB, Emulators.UI, Emulators.STORAGE, + Emulators.DATACONNECT, ]; export type ImportExportEmulators = Emulators.FIRESTORE | Emulators.DATABASE | Emulators.AUTH; @@ -47,6 +50,7 @@ export const ALL_SERVICE_EMULATORS = [ Emulators.PUBSUB, Emulators.STORAGE, Emulators.EVENTARC, + Emulators.DATACONNECT, ].filter((v) => v); export const EMULATORS_SUPPORTED_BY_FUNCTIONS = [ @@ -158,6 +162,7 @@ export interface EmulatorDownloadOptions { namePrefix: string; skipChecksumAndSize?: boolean; skipCache?: boolean; + auth?: boolean; } export interface EmulatorUpdateDetails { diff --git a/src/experiments.ts b/src/experiments.ts index ee53d56ea1c..0a84f52d931 100644 --- a/src/experiments.ts +++ b/src/experiments.ts @@ -118,6 +118,12 @@ export const ALL_EXPERIMENTS = experiments({ default: false, public: false, }, + + dataconnect: { + shortDescription: "Enable Data Connect related features.", + fullDescription: "Enable Data Connect related features.", + public: false, + }, }); export type ExperimentName = keyof typeof ALL_EXPERIMENTS; diff --git a/src/extensions/emulator/specHelper.ts b/src/extensions/emulator/specHelper.ts index f12d0f48e0a..add2a3dad0f 100644 --- a/src/extensions/emulator/specHelper.ts +++ b/src/extensions/emulator/specHelper.ts @@ -1,12 +1,9 @@ -import * as yaml from "yaml"; -import * as path from "path"; -import * as fs from "fs-extra"; - import * as supported from "../../deploy/functions/runtimes/supported"; import { ExtensionSpec, Resource } from "../types"; import { FirebaseError } from "../../error"; import { substituteParams } from "../extensionsHelper"; import { getResourceRuntime } from "../utils"; +import { readFileFromDirectory, wrappedSafeLoad } from "../../utils"; const SPEC_FILE = "extension.yaml"; const POSTINSTALL_FILE = "POSTINSTALL.md"; @@ -16,21 +13,6 @@ const validFunctionTypes = [ "firebaseextensions.v1beta.scheduledFunction", ]; -/** - * Wrapps `yaml.safeLoad` with an error handler to present better YAML parsing - * errors. - */ -function wrappedSafeLoad(source: string): any { - try { - return yaml.parse(source); - } catch (err: any) { - if (err instanceof yaml.YAMLParseError) { - throw new FirebaseError(`YAML Error: ${err.message}`, { original: err }); - } - throw err; - } -} - /** * Reads an extension.yaml and parses its contents into an ExtensionSpec. * @param directory the directory to look for a extensionYaml in. @@ -62,36 +44,6 @@ export async function readPostinstall(directory: string): Promise { return content.source; } -/** - * Retrieves a file from the directory. - */ -export function readFileFromDirectory( - directory: string, - file: string, -): Promise<{ source: string; sourceDirectory: string }> { - return new Promise((resolve, reject) => { - fs.readFile(path.resolve(directory, file), "utf8", (err, data) => { - if (err) { - if (err.code === "ENOENT") { - return reject( - new FirebaseError(`Could not find "${file}" in "${directory}"`, { original: err }), - ); - } - reject( - new FirebaseError(`Failed to read file "${file}" in "${directory}"`, { original: err }), - ); - } else { - resolve(data); - } - }); - }).then((source) => { - return { - source, - sourceDirectory: directory, - }; - }); -} - /** * Substitue parameters of function resources in the extensions spec. */ diff --git a/src/firebaseConfig.ts b/src/firebaseConfig.ts index 87271926804..f59ae81da0f 100644 --- a/src/firebaseConfig.ts +++ b/src/firebaseConfig.ts @@ -230,10 +230,25 @@ export type EmulatorsConfig = { port?: number; }; singleProjectMode?: boolean; + dataconnect?: { + host?: string; + port?: number; + }; }; export type ExtensionsConfig = Record; +export type DataConnectSingle = { + // The directory containing dataconnect.yaml for this service + source: string; + // The location to deploy this service to (ie 'us-central1') + location: string; +} & Deployable; + +export type DataConnectMultiple = DataConnectSingle[]; + +export type DataConnectConfig = DataConnectSingle | DataConnectMultiple; + export type FirebaseConfig = { /** * @TJS-format uri @@ -247,4 +262,5 @@ export type FirebaseConfig = { remoteconfig?: RemoteConfigConfig; emulators?: EmulatorsConfig; extensions?: ExtensionsConfig; + dataconnect?: DataConnectConfig; }; diff --git a/src/gcp/cloudsql/cloudsqladmin.ts b/src/gcp/cloudsql/cloudsqladmin.ts new file mode 100755 index 00000000000..defc704bfd2 --- /dev/null +++ b/src/gcp/cloudsql/cloudsqladmin.ts @@ -0,0 +1,204 @@ +import { Client } from "../../apiv2"; +import { cloudSQLAdminOrigin } from "../../api"; +import * as operationPoller from "../../operation-poller"; +import { Instance, Database, User, UserType } from "./types"; +const API_VERSION = "v1"; + +const client = new Client({ + urlPrefix: cloudSQLAdminOrigin(), + auth: true, + apiVersion: API_VERSION, +}); + +interface Operation { + status: "RUNNING" | "DONE"; + name: string; +} + +export async function listInstances(projectId: string): Promise { + const res = await client.get<{ items: Instance[] }>(`projects/${projectId}/instances`); + return res.body.items ?? []; +} + +export async function getInstance(projectId: string, instanceId: string): Promise { + const res = await client.get(`projects/${projectId}/instances/${instanceId}`); + return res.body; +} + +export async function createInstance( + projectId: string, + location: string, + instanceId: string, + enableGoogleMlIntegration: boolean, +): Promise { + const databaseFlags = [{ name: "cloudsql.iam_authentication", value: "on" }]; + if (enableGoogleMlIntegration) { + databaseFlags.push({ name: "cloudsql.enable_google_ml_integration", value: "on" }); + } + const op = await client.post, Operation>(`projects/${projectId}/instances`, { + name: instanceId, + region: location, + databaseVersion: "POSTGRES_15", + settings: { + tier: "db-f1-micro", + edition: "ENTERPRISE", + ipConfiguration: { + authorizedNetworks: [], + }, + enableGoogleMlIntegration, + databaseFlags, + storageAutoResize: false, + userLabels: { "firebase-data-connect": "ft" }, + insightsConfig: { + queryInsightsEnabled: true, + }, + }, + }); + const opName = `projects/${projectId}/operations/${op.body.name}`; + const pollRes = await operationPoller.pollOperation({ + apiOrigin: cloudSQLAdminOrigin(), + apiVersion: API_VERSION, + operationResourceName: opName, + doneFn: (op: Operation) => op.status === "DONE", + masterTimeout: 1_200_000, // This operation frequently takes 5+ minutes + }); + return pollRes; +} + +/** + * Update an existing CloudSQL instance to have any required settings for Firebase Data Connect. + */ +export async function updateInstanceForDataConnect( + instance: Instance, + enableGoogleMlIntegration: boolean, +): Promise { + const dbFlags = + instance.settings.databaseFlags?.filter((f) => f.name !== "cloudsql.iam_authentication") ?? []; + dbFlags.push({ name: "cloudsql.iam_authentication", value: "on" }); + if (enableGoogleMlIntegration) { + dbFlags.push({ name: "cloudsql.enable_google_ml_integration", value: "on" }); + } + + const op = await client.patch, Operation>( + `projects/${instance.project}/instances/${instance.name}`, + { + settings: { + ipConfiguration: { + ipv4Enabled: true, + }, + databaseFlags: dbFlags, + enableGoogleMlIntegration, + }, + }, + ); + const opName = `projects/${instance.project}/operations/${op.body.name}`; + const pollRes = await operationPoller.pollOperation({ + apiOrigin: cloudSQLAdminOrigin(), + apiVersion: API_VERSION, + operationResourceName: opName, + doneFn: (op: Operation) => op.status === "DONE", + masterTimeout: 1_200_000, // This operation frequently takes 5+ minutes + }); + return pollRes; +} + +export async function listDatabases(projectId: string, instanceId: string): Promise { + const res = await client.get<{ items: Database[] }>( + `projects/${projectId}/instances/${instanceId}/databases`, + ); + return res.body.items; +} + +export async function getDatabase( + projectId: string, + instanceId: string, + databaseId: string, +): Promise { + const res = await client.get( + `projects/${projectId}/instances/${instanceId}/databases/${databaseId}`, + ); + return res.body; +} + +export async function createDatabase( + projectId: string, + instanceId: string, + databaseId: string, +): Promise { + const op = await client.post<{ project: string; instance: string; name: string }, Operation>( + `projects/${projectId}/instances/${instanceId}/databases`, + { + project: projectId, + instance: instanceId, + name: databaseId, + }, + ); + + const opName = `projects/${projectId}/operations/${op.body.name}`; + const pollRes = await operationPoller.pollOperation({ + apiOrigin: cloudSQLAdminOrigin(), + apiVersion: API_VERSION, + operationResourceName: opName, + doneFn: (op: Operation) => op.status === "DONE", + }); + + return pollRes; +} + +export async function createUser( + projectId: string, + instanceId: string, + type: UserType, + username: string, + password?: string, +): Promise { + const op = await client.post( + `projects/${projectId}/instances/${instanceId}/users`, + { + name: username, + instance: instanceId, + project: projectId, + password: password, + sqlserverUserDetails: { + disabled: false, + serverRoles: ["cloudsqlsuperuser"], + }, + type, + }, + ); + const opName = `projects/${projectId}/operations/${op.body.name}`; + const pollRes = await operationPoller.pollOperation({ + apiOrigin: cloudSQLAdminOrigin(), + apiVersion: API_VERSION, + operationResourceName: opName, + doneFn: (op: Operation) => op.status === "DONE", + }); + return pollRes; +} + +export async function getUser( + projectId: string, + instanceId: string, + username: string, +): Promise { + const res = await client.get( + `projects/${projectId}/instances/${instanceId}/users/${username}`, + ); + return res.body; +} + +export async function deleteUser(projectId: string, instanceId: string, username: string) { + const res = await client.delete(`projects/${projectId}/instances/${instanceId}/users`, { + queryParams: { + name: username, + }, + }); + return res.body; +} + +export async function listUsers(projectId: string, instanceId: string): Promise { + const res = await client.get<{ items: User[] }>( + `projects/${projectId}/instances/${instanceId}/users`, + ); + return res.body.items; +} diff --git a/src/gcp/cloudsql/connect.ts b/src/gcp/cloudsql/connect.ts new file mode 100644 index 00000000000..e88af3ce880 --- /dev/null +++ b/src/gcp/cloudsql/connect.ts @@ -0,0 +1,191 @@ +import * as pg from "pg"; +import { Connector, IpAddressTypes, AuthTypes } from "@google-cloud/cloud-sql-connector"; + +import { requireAuth } from "../../requireAuth"; +import { needProjectId } from "../../projectUtils"; +import * as cloudSqlAdminClient from "./cloudsqladmin"; +import { UserType } from "./types"; +import * as utils from "../../utils"; +import { logger } from "../../logger"; +import { FirebaseError } from "../../error"; +import { Options } from "../../options"; +import { FBToolsAuthClient } from "./fbToolsAuthClient"; + +export async function execute( + sqlStatements: string[], + opts: { + projectId: string; + instanceId: string; + databaseId: string; + username: string; + password?: string; + silent?: boolean; + }, +) { + const logFn = opts.silent ? logger.debug : logger.info; + const instance = await cloudSqlAdminClient.getInstance(opts.projectId, opts.instanceId); + const user = await cloudSqlAdminClient.getUser(opts.projectId, opts.instanceId, opts.username); + const connectionName = instance.connectionName; + if (!connectionName) { + throw new FirebaseError( + `Could not get instance conection string for ${opts.instanceId}:${opts.databaseId}`, + ); + } + let connector: Connector; + let pool: pg.Pool; + switch (user.type) { + case "CLOUD_IAM_USER": { + connector = new Connector({ + auth: new FBToolsAuthClient(), + }); + const clientOpts = await connector.getOptions({ + instanceConnectionName: connectionName, + ipType: IpAddressTypes.PUBLIC, + authType: AuthTypes.IAM, + }); + pool = new pg.Pool({ + ...clientOpts, + user: opts.username, + database: opts.databaseId, + max: 1, + }); + break; + } + case "CLOUD_IAM_SERVICE_ACCOUNT": { + connector = new Connector(); + // Currently, this only works with Application Default credentials + // https://github.com/GoogleCloudPlatform/cloud-sql-nodejs-connector/issues/61 is an open + // FR to add support for OAuth2 tokens. + const clientOpts = await connector.getOptions({ + instanceConnectionName: connectionName, + ipType: IpAddressTypes.PUBLIC, + authType: AuthTypes.IAM, + }); + pool = new pg.Pool({ + ...clientOpts, + user: opts.username, + database: opts.databaseId, + max: 1, + }); + break; + } + default: { + // cSQL doesn't return user.type for BUILT_IN users... + if (!opts.password) { + throw new FirebaseError(`Cannot connect as BUILT_IN user without a password.`); + } + connector = new Connector({ + auth: new FBToolsAuthClient(), + }); + const clientOpts = await connector.getOptions({ + instanceConnectionName: connectionName, + ipType: IpAddressTypes.PUBLIC, + }); + pool = new pg.Pool({ + ...clientOpts, + user: opts.username, + password: opts.password, + database: opts.databaseId, + max: 1, + }); + break; + } + } + + for (const s of sqlStatements) { + logFn(`Executing: '${s}' as ${opts.username}`); + try { + await pool.query(s); + } catch (err) { + throw new FirebaseError(`Error executing ${err}`); + } + } + + await pool.end(); + connector.close(); +} + +// setupIAMUser sets up the current user identity to connect to CloudSQL. +// Steps: +// 2. Create an IAM user for the current identity +// 3. Connect to the DB as the temporary user and run the necessary grants +// 4. Deletes the temporary user +export async function setupIAMUser( + instanceId: string, + databaseId: string, + options: Options, +): Promise { + // TODO: Is there a good way to short circuit this by checking if the IAM user exists and has the appropriate role first? + const projectId = needProjectId(options); + // 0. Get the current identity + const account = await requireAuth(options); + if (!account) { + throw new FirebaseError( + "No account to set up! Run `firebase login` or set Application Default Credentials", + ); + } + // 1. Create a temporary builtin user + const setupUser = "firebasesuperuser"; + const temporaryPassword = utils.generateId(20); + await cloudSqlAdminClient.createUser( + projectId, + instanceId, + "BUILT_IN", + setupUser, + temporaryPassword, + ); + + // 2. Create an IAM user for the current identity + const { user, mode } = toDatabaseUser(account); + await cloudSqlAdminClient.createUser(projectId, instanceId, mode, user); + + // 3. Connect to the DB as the temporary user and run the necessary grants + // TODO: I think we're missing something here, sometimes backend can't see the tables. + const grants = [ + `do + $$ + begin + if not exists (select FROM pg_catalog.pg_roles + WHERE rolname = '${firebaseowner(databaseId)}') then + CREATE ROLE "${firebaseowner(databaseId)}" WITH ADMIN "${setupUser}"; + end if; + end + $$ + ;`, + `GRANT ALL PRIVILEGES ON DATABASE "${databaseId}" TO "${firebaseowner(databaseId)}"`, + `GRANT cloudsqlsuperuser TO "${firebaseowner(databaseId)}"`, + `GRANT "${firebaseowner(databaseId)}" TO "${setupUser}"`, + `GRANT "${firebaseowner(databaseId)}" TO "${user}"`, + `ALTER SCHEMA public OWNER TO "${firebaseowner(databaseId)}"`, + `GRANT USAGE ON SCHEMA "public" TO PUBLIC`, + `GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "public" TO PUBLIC`, + `GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA "public" TO PUBLIC`, + ]; + await execute(grants, { + projectId, + instanceId, + databaseId, + username: setupUser, + password: temporaryPassword, + silent: true, + }); + return user; +} + +function firebaseowner(databaseId: string) { + return `firebaseowner_${databaseId}_public`; +} + +// Converts a account name to the equivalent SQL user. +// - Postgres: https://cloud.google.com/sql/docs/postgres/iam-logins#log-in-with-automatic +// - For user: it's full email address. +// - For service account: it's email address without the .gserviceaccount.com domain suffix. +function toDatabaseUser(account: string): { user: string; mode: UserType } { + let mode: UserType = "CLOUD_IAM_USER"; + let user = account; + if (account.endsWith(".gserviceaccount.com")) { + user = account.replace(".gserviceaccount.com", ""); + mode = "CLOUD_IAM_SERVICE_ACCOUNT"; + } + return { user, mode }; +} diff --git a/src/gcp/cloudsql/fbToolsAuthClient.ts b/src/gcp/cloudsql/fbToolsAuthClient.ts new file mode 100644 index 00000000000..0c9d13a8fc7 --- /dev/null +++ b/src/gcp/cloudsql/fbToolsAuthClient.ts @@ -0,0 +1,45 @@ +import { AuthClient } from "google-auth-library"; +import { GaxiosOptions, GaxiosPromise, GaxiosResponse } from "gaxios"; + +import * as apiv2 from "../../apiv2"; +import { FirebaseError } from "../../error"; + +// FBToolsAuthClient implements google-auth-library.AuthClient +// using apiv2.ts and our normal OAuth2 flow. +export class FBToolsAuthClient extends AuthClient { + public async request(opts: GaxiosOptions): GaxiosPromise { + if (!opts.url) { + throw new FirebaseError("opts.url was undefined"); + } + const url = new URL(opts.url); + const client = new apiv2.Client({ + urlPrefix: url.origin, + auth: true, + }); + const res = await client.request({ + method: opts.method ?? "POST", + path: url.pathname, + queryParams: opts.params, + body: opts.data, + responseType: opts.responseType, + }); + return { + config: opts, + status: res.status, + statusText: res.response.statusText, + data: res.body, + headers: res.response.headers, + request: {} as any, + }; + } + public async getAccessToken(): Promise<{ token?: string; res?: GaxiosResponse }> { + const client = new apiv2.Client({}); + return { token: await client.getAccessToken() }; + } + public async getRequestHeaders(url?: string | undefined): Promise> { + const client = new apiv2.Client({ + urlPrefix: url, + }); + return client.getHeaders(); + } +} diff --git a/src/gcp/cloudsql/types.ts b/src/gcp/cloudsql/types.ts new file mode 100644 index 00000000000..fe8244f728d --- /dev/null +++ b/src/gcp/cloudsql/types.ts @@ -0,0 +1,113 @@ +export interface Database { + etag?: string; + name: string; + instance: string; + project: string; +} + +export interface IpConfiguration { + ipv4Enabled?: boolean; + privateNetwork?: string; + requireSsl?: boolean; + authorizedNetworks?: { + value: string; + expirationTime?: string; + name?: string; + }[]; + allocatedIpRange?: string; + sslMode?: + | "ALLOW_UNENCRYPTED_AND_ENCRYPTED" + | "ENCRYPTED_ONLY" + | "TRUSTED_CLIENT_CERTIFICATE_REQUIRED"; + pscConfig?: { + allowedConsumerProjects: string[]; + pscEnabled: boolean; + }; +} + +export interface InstanceSettings { + authorizedGaeApplications?: string[]; + tier?: string; + edition?: "ENTERPRISE_PLUS" | "ENTERPRISE"; + availabilityType?: "ZONAL" | "REGIONAL"; + pricingPlan?: "PER_USE" | "PACKAGE"; + replicationType?: "SYNCHRONOUS" | "ASYNCHRONOUS"; + activationPolicy?: "ALWAYS" | "NEVER"; + ipConfiguration?: IpConfiguration; + locationPreference?: [Object]; + databaseFlags?: { name: string; value: string }[]; + dataDiskType?: "PD_SSD" | "PD_HDD"; + storageAutoResizeLimit?: string; + storageAutoResize?: boolean; + dataDiskSizeGb?: string; + deletionProtectionEnabled?: boolean; + dataCacheConfig?: { + dataCacheEnabled: boolean; + }; + enableGoogleMlIntegration?: boolean; + insightsConfig?: InsightsConfig; + userLabels?: { [key: string]: string }; +} + +interface InsightsConfig { + queryInsightsEnabled: boolean; +} + +// TODO: Consider splitting off return only fields and input fields into different types. +export interface Instance { + state?: "RUNNABLE" | "SUSPENDED" | "PENDING_DELETE" | "PENDING_CREATE" | "MAINTENANCE" | "FAILED"; + databaseVersion: + | "POSTGRES_15" + | "POSTGRES_14" + | "POSTGRES_13" + | "POSTGRES_12" + | "POSTGRES_11" + | string; + settings: InstanceSettings; + etag?: string; + rootPassword: string; + ipAddresses: { + type: "PRIMARY" | "OUTGOING" | "PRIVATE"; + ipAddress: string; + timeToRetire?: string; + }[]; + serverCaCert?: SslCert; + instanceType: "CLOUD_SQL_INSTANCE" | "ON_PREMISES_INSTANCE" | "READ_REPLICA_INSTANCE"; + project: string; + serviceAccountEmailAddress: string; + backendType: "SECOND_GEN" | "EXTERNAL"; + selfLink?: string; + connectionName?: string; + name: string; + region: string; + gceZone?: string; + databaseInstalledVersion?: string; + maintenanceVersion?: string; + createTime?: string; + sqlNetworkArchitecture?: string; +} + +export interface SslCert { + certSerialNumber: string; + cert: string; + commonName: string; + sha1Fingerprint: string; + instance: string; + createTime?: string; + expirationTime?: string; +} + +export interface User { + password?: string; + name: string; + host?: string; + instance: string; + project: string; + type: UserType; + sqlserverUserDetails: { + disabled: boolean; + serverRoles: string[]; + }; +} + +export type UserType = "BUILT_IN" | "CLOUD_IAM_USER" | "CLOUD_IAM_SERVICE_ACCOUNT"; diff --git a/src/gcp/iam.ts b/src/gcp/iam.ts index 394ab06bc7f..6b722f1f43a 100644 --- a/src/gcp/iam.ts +++ b/src/gcp/iam.ts @@ -1,6 +1,7 @@ import { resourceManagerOrigin, iamOrigin } from "../api"; import { logger } from "../logger"; import { Client } from "../apiv2"; +import * as utils from "../utils"; const apiClient = new Client({ urlPrefix: iamOrigin(), apiVersion: "v1" }); @@ -229,3 +230,52 @@ export async function testIamPermissions( `projects/${projectId}`, ); } + +/** Helper to merge all required bindings into the IAM policy, returns boolean if the policy has been updated */ +export function mergeBindings(policy: Policy, requiredBindings: Binding[]): boolean { + let updated = false; + for (const requiredBinding of requiredBindings) { + const match = policy.bindings.find((b) => b.role === requiredBinding.role); + if (!match) { + updated = true; + policy.bindings.push(requiredBinding); + continue; + } + for (const requiredMember of requiredBinding.members) { + if (!match.members.find((m) => m === requiredMember)) { + updated = true; + match.members.push(requiredMember); + } + } + } + return updated; +} + +/** Utility to print the required binding commands */ +export function printManualIamConfig( + requiredBindings: Binding[], + projectId: string, + prefix: string, +) { + utils.logLabeledBullet( + prefix, + "Failed to verify the project has the correct IAM bindings for a successful deployment.", + "warn", + ); + utils.logLabeledBullet( + prefix, + "You can either re-run this command as a project owner or manually run the following set of `gcloud` commands:", + "warn", + ); + for (const binding of requiredBindings) { + for (const member of binding.members) { + utils.logLabeledBullet( + prefix, + `\`gcloud projects add-iam-policy-binding ${projectId} ` + + `--member=${member} ` + + `--role=${binding.role}\``, + "warn", + ); + } + } +} diff --git a/src/init/features/dataconnect/index.ts b/src/init/features/dataconnect/index.ts new file mode 100644 index 00000000000..384be6c4f82 --- /dev/null +++ b/src/init/features/dataconnect/index.ts @@ -0,0 +1,130 @@ +import { join, resolve } from "path"; +import { confirm, promptOnce } from "../../../prompt"; +import { readFileSync } from "fs"; +import { Config } from "../../../config"; +import { Setup } from "../.."; +import { provisionCloudSql } from "../../../dataconnect/provisionCloudSql"; + +const TEMPLATE_ROOT = resolve(__dirname, "../../../../templates/init/dataconnect/"); + +const DATACONNECT_YAML_TEMPLATE = readFileSync(join(TEMPLATE_ROOT, "dataconnect.yaml"), "utf8"); +const CONNECTOR_YAML_TEMPLATE = readFileSync(join(TEMPLATE_ROOT, "connector.yaml"), "utf8"); +const SCHEMA_TEMPLATE = readFileSync(join(TEMPLATE_ROOT, "schema.gql"), "utf8"); +const QUERIES_TEMPLATE = readFileSync(join(TEMPLATE_ROOT, "queries.gql"), "utf8"); +const MUTATIONS_TEMPLATE = readFileSync(join(TEMPLATE_ROOT, "mutations.gql"), "utf8"); + +export async function doSetup(setup: Setup, config: Config): Promise { + const serviceId = await promptOnce({ + message: "What ID would you like to use for this service?", + type: "input", + default: "dataconnect", + }); + // TODO: use listLocations API instead of hardcoding this + const locationId = await promptOnce({ + message: "What location would you like to deploy this service into?", + type: "list", + choices: [ + { name: "us-central1", value: "us-central1" }, + { name: "asia-southeast1", value: "asia-southeast1" }, + ], + }); + // TODO: Guided prompts to set up connector auth mode and generate + const connectorId = await promptOnce({ + message: "What ID would you like to use for your connector?", + type: "input", + default: "my-connector", + }); + const dir: string = + config.get("dataconnect.source") || + (await promptOnce({ + message: "What directory should be used for DataConnect config and schema?", + type: "input", + default: "dataconnect", + })); + if (!config.has("dataconnect")) { + config.set("dataconnect.source", dir); + config.set("dataconnect.location", locationId); + } + // TODO: Listinstances from CloudSQL, and filter to only the free trial appropriate ones. + const cloudSqlInstanceId = await promptOnce({ + message: `What CloudSQL instance would you like to use? Please enter the ID of an existing instance in ${locationId}`, + type: "input", + default: `dataconnect-test`, + }); + // TODO: ListDatabases from CloudSQL. + const cloudSqlDatabase = await promptOnce({ + message: `Which database would you like to use from ${cloudSqlInstanceId}?`, + type: "input", + default: `dataconnect-test`, + }); + + // postgresql://localhost:5432 is a default out of the box value for most installations of Postgres + const defaultConnectionString = + setup.rcfile.dataconnectEmulatorConfig?.postgres?.localConnectionString ?? + "postgresql://localhost:5432?sslmode=disable"; + // TODO: Download Postgres + const localConnectionString = await promptOnce({ + type: "input", + name: "localConnectionString", + message: `What is the connection string of the local Postgres instance you would like to use with the Data Connect emulator?`, + default: defaultConnectionString, + }); + setup.rcfile.dataconnectEmulatorConfig = { postgres: { localConnectionString } }; + const subbedDataconnectYaml = subValues(DATACONNECT_YAML_TEMPLATE, { + serviceId, + cloudSqlInstanceId, + cloudSqlDatabase, + connectorId, + }); + + const subbedConnectorYaml = subValues(CONNECTOR_YAML_TEMPLATE, { + serviceId, + cloudSqlInstanceId, + cloudSqlDatabase, + connectorId, + }); + await config.askWriteProjectFile(join(dir, "dataconnect.yaml"), subbedDataconnectYaml); + await config.askWriteProjectFile(join(dir, "connector", "connector.yaml"), subbedConnectorYaml); + await config.askWriteProjectFile(join(dir, "schema", "schema.gql"), SCHEMA_TEMPLATE); + await config.askWriteProjectFile(join(dir, "connector", "queries.gql"), QUERIES_TEMPLATE); + await config.askWriteProjectFile(join(dir, "connector", "mutations.gql"), MUTATIONS_TEMPLATE); + // TODO: Skip this for existing instances + if ( + setup.projectId && + (await confirm({ + message: + "Would you like to provision your CloudSQL instance and database now? This will take a few minutes.", + default: true, + })) + ) { + await provisionCloudSql({ + projectId: setup.projectId, + locationId, + instanceId: cloudSqlInstanceId, + databaseId: cloudSqlDatabase, + enableGoogleMlIntegration: false, + }); + } +} + +function subValues( + template: string, + replacementValues: { + serviceId: string; + cloudSqlInstanceId: string; + cloudSqlDatabase: string; + connectorId: string; + }, +): string { + const replacements: Record = { + serviceId: "__serviceId__", + cloudSqlDatabase: "__cloudSqlDatabase__", + cloudSqlInstanceId: "__cloudSqlInstanceId__", + connectorId: "__connectorId__", + }; + let replaced = template; + for (const [k, v] of Object.entries(replacementValues)) { + replaced = replaced.replace(replacements[k], v); + } + return replaced; +} diff --git a/src/init/features/emulators.ts b/src/init/features/emulators.ts index 8a4aca8c814..da8c17dec24 100644 --- a/src/init/features/emulators.ts +++ b/src/init/features/emulators.ts @@ -5,13 +5,14 @@ import { prompt } from "../../prompt"; import { Emulators, ALL_SERVICE_EMULATORS, isDownloadableEmulator } from "../../emulator/types"; import { Constants } from "../../emulator/constants"; import { downloadIfNecessary } from "../../emulator/downloadableEmulators"; +import { Setup } from "../index"; interface EmulatorsInitSelections { emulators?: Emulators[]; download?: boolean; } -export async function doSetup(setup: any, config: any) { +export async function doSetup(setup: Setup, config: any) { const choices = ALL_SERVICE_EMULATORS.map((e) => { return { value: e, @@ -90,6 +91,23 @@ export async function doSetup(setup: any, config: any) { } } + if (selections.emulators.includes(Emulators.DATACONNECT)) { + // postgresql://localhost:5432 is a default out of the box value for most installations of Postgres + const defaultConnectionString = + setup.rcfile.dataconnectEmulatorConfig?.postgres?.localConnectionString ?? + "postgresql://localhost:5432"; + // TODO: Download Postgres + const localConnectionString = await prompt(setup.config.emulators[Emulators.DATACONNECT], [ + { + type: "input", + name: "localConnectionString", + message: `What is the connection string of the local Postgres instance you would like to use with the Data Connect emulator?`, + default: defaultConnectionString, + }, + ]); + setup.rcfile.dataconnectEmulatorConfig = { postgres: { localConnectionString } }; + } + await prompt(selections, [ { name: "download", diff --git a/src/init/features/index.ts b/src/init/features/index.ts index fe90a7f5a21..5e796ac288b 100644 --- a/src/init/features/index.ts +++ b/src/init/features/index.ts @@ -10,4 +10,5 @@ export { doSetup as extensions } from "./extensions"; export { doSetup as project } from "./project"; export { doSetup as remoteconfig } from "./remoteconfig"; export { initGitHub as hostingGithub } from "./hosting/github"; +export { doSetup as dataconnect } from "./dataconnect"; export { doSetup as apphosting } from "../../apphosting"; diff --git a/src/init/index.ts b/src/init/index.ts index a540270f4e7..09c6f54586e 100644 --- a/src/init/index.ts +++ b/src/init/index.ts @@ -4,12 +4,11 @@ import * as clc from "colorette"; import { FirebaseError } from "../error"; import { logger } from "../logger"; import * as features from "./features"; +import { RCData } from "../rc"; export interface Setup { config: Record; - rcfile: { - projects: Record; - }; + rcfile: RCData; features?: string[]; featureArg?: boolean; project?: Record; @@ -21,6 +20,7 @@ const featureFns = new Map P ["account", features.account], ["database", features.database], ["firestore", features.firestore], + ["dataconnect", features.dataconnect], ["functions", features.functions], ["hosting", features.hosting], ["storage", features.storage], diff --git a/src/logger.ts b/src/logger.ts index c8189fcef46..dc411690d78 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,6 +1,21 @@ import * as winston from "winston"; import * as Transport from "winston-transport"; +import { isVSCodeExtension } from "./utils"; +import { EventEmitter } from "events"; + +/** vsceLogEmitter passes CLI logs along to VSCode. + Events are of the format winston.LogEntry + Example usage: + + vsceLogEmitter.on("log", (logEntry) => { + if (logEntry.level == "error") { + console.log(logEntry.message) + } + }) +*/ +export const vsceLogEmitter = new EventEmitter(); + export type LogLevel = | "error" | "warn" @@ -80,6 +95,27 @@ function annotateDebugLines(logger: winston.Logger): winston.Logger { return logger; } +function maybeUseVSCodeLogger(logger: winston.Logger): winston.Logger { + if (!isVSCodeExtension()) { + return logger; + } + const oldLogFunc = logger.log.bind(logger); + const vsceLogger: winston.LogMethod = function ( + levelOrEntry: string | winston.LogEntry, + message?: string | Error, + ...meta: any[] + ): winston.Logger { + if (message) { + vsceLogEmitter.emit("log", { level: levelOrEntry, message }); + } else { + vsceLogEmitter.emit("log", levelOrEntry); + } + return oldLogFunc(levelOrEntry as string, message as string, ...meta); + }; + logger.log = vsceLogger; + return logger; +} + const rawLogger = winston.createLogger(); // Set a default silent logger to suppress logs during tests rawLogger.add(new winston.transports.Console({ silent: true })); @@ -91,4 +127,6 @@ rawLogger.exitOnError = false; // allow error parameters. // Casting looks super dodgy, but it should be safe because we know the underlying code // handles all parameter types we care about. -export const logger = annotateDebugLines(expandErrors(rawLogger)) as unknown as Logger; +export const logger = maybeUseVSCodeLogger( + annotateDebugLines(expandErrors(rawLogger)), +) as unknown as Logger; diff --git a/src/operation-poller.ts b/src/operation-poller.ts index c602f066133..505224a5cd7 100644 --- a/src/operation-poller.ts +++ b/src/operation-poller.ts @@ -22,6 +22,7 @@ export interface OperationPollerOptions { maxBackoff?: number; masterTimeout?: number; onPoll?: (operation: OperationResult) => any; + doneFn?: (op: any) => boolean; } const DEFAULT_INITIAL_BACKOFF_DELAY_MILLIS = 250; @@ -88,7 +89,12 @@ export class OperationPoller { if (options.onPoll) { options.onPoll(res.body); } - if (!res.body.done) { + if (options.doneFn) { + const done = options.doneFn(res.body); + if (!done) { + throw new Error("Polling incomplete, should trigger retry with backoff"); + } + } else if (!res.body.done) { throw new Error("Polling incomplete, should trigger retry with backoff"); } return res.body; diff --git a/src/rc.ts b/src/rc.ts index 8182cf549b5..43bbe2b9ed6 100644 --- a/src/rc.ts +++ b/src/rc.ts @@ -37,6 +37,11 @@ export interface RCData { etags: { [projectId: string]: Record>; }; + dataconnectEmulatorConfig: { + postgres?: { + localConnectionString: string; + }; + }; } export class RC { @@ -58,7 +63,7 @@ export class RC { constructor(rcpath?: string, data?: Partial) { this.path = rcpath; - this.data = { projects: {}, targets: {}, etags: {}, ...data }; + this.data = { projects: {}, targets: {}, etags: {}, dataconnectEmulatorConfig: {}, ...data }; } private set(key: string | string[], value: any): void { @@ -230,6 +235,16 @@ export class RC { this.save(); } + getDataconnect() { + return this.data.dataconnectEmulatorConfig ?? {}; + } + + setDataconnect(localConnectionString: string) { + if (!this.data.dataconnectEmulatorConfig) { + this.data.dataconnectEmulatorConfig = { postgres: { localConnectionString } }; + } + } + /** * Persists the RC file to disk, or returns false if no path on the instance. */ diff --git a/src/requireAuth.ts b/src/requireAuth.ts index 029cc1b89fc..93757e1f3a0 100644 --- a/src/requireAuth.ts +++ b/src/requireAuth.ts @@ -39,7 +39,6 @@ function getAuthClient(config: GoogleAuthOptions): GoogleAuth { */ async function autoAuth(options: Options, authScopes: string[]): Promise { const client = getAuthClient({ scopes: authScopes, projectId: options.project }); - const token = await client.getAccessToken(); token !== null ? apiv2.setAccessToken(token) : false; @@ -112,4 +111,5 @@ export async function requireAuth(options: any): Promise { } setActiveAccount(options, { user, tokens }); + return user.email; } diff --git a/src/test/dataconnect/filters.spec.ts b/src/test/dataconnect/filters.spec.ts new file mode 100644 index 00000000000..ea284295b75 --- /dev/null +++ b/src/test/dataconnect/filters.spec.ts @@ -0,0 +1,82 @@ +import { expect } from "chai"; +import { getResourceFilters, ResourceFilter } from "../../dataconnect/filters"; + +describe("getResourceFilters", () => { + const cases: { + desc: string; + input?: string; + output?: ResourceFilter[]; + expectErr?: boolean; + }[] = [ + { + desc: "No filter", + }, + { + desc: "Product level", + input: "dataconnect", + }, + { + desc: "Service level", + input: "dataconnect:my-service", + output: [ + { + serviceId: "my-service", + fullService: true, + }, + ], + }, + { + desc: "Connector level", + input: "dataconnect:my-service:my-connector", + output: [ + { + serviceId: "my-service", + connectorId: "my-connector", + }, + ], + }, + { + desc: "Schema only", + input: "dataconnect:my-service:schema", + output: [ + { + serviceId: "my-service", + schemaOnly: true, + }, + ], + }, + { + desc: "Multiple filters", + input: + "dataconnect:my-service:schema,dataconnect:my-other-service:my-connector,dataconnect:my-other-service", + output: [ + { + serviceId: "my-service", + schemaOnly: true, + }, + { + serviceId: "my-other-service", + connectorId: "my-connector", + }, + { + serviceId: "my-other-service", + fullService: true, + }, + ], + }, + { + desc: "Invalid filter", + input: "dataconnect:service:conn:schema", + expectErr: true, + }, + ]; + for (const c of cases) { + it(c.desc, () => { + try { + expect(getResourceFilters({ only: c.input })).to.deep.equal(c.output); + } catch (err) { + expect(c.expectErr, `Unexepcted error ${err}`).to.be.true; + } + }); + } +}); diff --git a/src/test/dataconnect/names.spec.ts b/src/test/dataconnect/names.spec.ts new file mode 100644 index 00000000000..b216adfe30b --- /dev/null +++ b/src/test/dataconnect/names.spec.ts @@ -0,0 +1,93 @@ +import { expect } from "chai"; +import * as names from "../../dataconnect/names"; + +describe("names.ts", () => { + describe("parseServiceName", () => { + const cases: { + desc: string; + input: string; + want: { + projectId?: string; + location?: string; + serviceId?: string; + error?: boolean; + }; + }[] = [ + { + desc: "should parse a well formed service name, and convert back", + input: "projects/proj/locations/us-central1/services/serve", + want: { + projectId: "proj", + location: "us-central1", + serviceId: "serve", + }, + }, + { + desc: "should error on an invalid service name", + input: "projects/proj/locations/us-central1/functions/funky", + want: { + error: true, + }, + }, + ]; + for (const c of cases) { + it(c.desc, () => { + try { + const got = names.parseServiceName(c.input); + expect(got.projectId).to.equal(c.want.projectId); + expect(got.location).to.equal(c.want.location); + expect(got.serviceId).to.equal(c.want.serviceId); + expect(got.toString()).to.equal(c.input); + } catch (err) { + expect(c.want.error, `Unexpected error: ${err}`).to.be.true; + } + }); + } + }); + + describe("parseConnectorName", () => { + const cases: { + desc: string; + input: string; + want: { + projectId?: string; + location?: string; + serviceId?: string; + connectorId?: string; + error?: boolean; + }; + }[] = [ + { + desc: "should parse a well formed service name, and convert back", + input: "projects/proj/locations/us-central1/services/serve/connectors/connect", + want: { + projectId: "proj", + location: "us-central1", + serviceId: "serve", + connectorId: "connect", + }, + }, + { + desc: "should error on an invalid connector name", + input: "projects/proj/locations/us-central1/functions/funky", + want: { + error: true, + }, + }, + ]; + for (const c of cases) { + it(c.desc, () => { + try { + const got = names.parseConnectorName(c.input); + expect(got.projectId).to.equal(c.want.projectId); + expect(got.location).to.equal(c.want.location); + expect(got.serviceId).to.equal(c.want.serviceId); + expect(got.connectorId).to.equal(c.want.connectorId); + expect(got.toString()).to.equal(c.input); + } catch (err) { + expect(c.want.error, `Unexpected error: ${err}`).to.be.true; + } + }); + } + }); +}); diff --git a/src/test/deploy/functions/checkIam.spec.ts b/src/test/deploy/functions/checkIam.spec.ts index ee51211dd9b..f6272157b44 100644 --- a/src/test/deploy/functions/checkIam.spec.ts +++ b/src/test/deploy/functions/checkIam.spec.ts @@ -75,52 +75,6 @@ describe("checkIam", () => { }); }); - describe("mergeBindings", () => { - it("should not update the policy when the bindings are present", () => { - const policy = { - etag: "etag", - version: 3, - bindings: [BINDING], - }; - - const updated = checkIam.mergeBindings(policy, [BINDING]); - - expect(updated).to.be.false; - expect(policy.bindings).to.deep.equal([BINDING]); - }); - - it("should update the members of a binding in the policy", () => { - const policy = { - etag: "etag", - version: 3, - bindings: [BINDING], - }; - - const updated = checkIam.mergeBindings(policy, [{ role: "some/role", members: ["newuser"] }]); - - expect(updated).to.be.true; - expect(policy.bindings).to.deep.equal([ - { - role: "some/role", - members: ["someuser", "newuser"], - }, - ]); - }); - - it("should add a new binding to the policy", () => { - const policy = { - etag: "etag", - version: 3, - bindings: [], - }; - - const updated = checkIam.mergeBindings(policy, [BINDING]); - - expect(updated).to.be.true; - expect(policy.bindings).to.deep.equal([BINDING]); - }); - }); - describe("ensureServiceAgentRoles", () => { it("should return early if we do not have new services", async () => { const v1EventFn: backend.Endpoint = { diff --git a/src/test/gcp/iam.spec.ts b/src/test/gcp/iam.spec.ts index 2c4bd4eb0e9..38d9b1853ba 100644 --- a/src/test/gcp/iam.spec.ts +++ b/src/test/gcp/iam.spec.ts @@ -4,7 +4,58 @@ import * as nock from "nock"; import { resourceManagerOrigin } from "../../api"; import * as iam from "../../gcp/iam"; +const BINDING = { + role: "some/role", + members: ["someuser"], +}; + describe("iam", () => { + describe("mergeBindings", () => { + it("should not update the policy when the bindings are present", () => { + const policy = { + etag: "etag", + version: 3, + bindings: [BINDING], + }; + + const updated = iam.mergeBindings(policy, [BINDING]); + + expect(updated).to.be.false; + expect(policy.bindings).to.deep.equal([BINDING]); + }); + + it("should update the members of a binding in the policy", () => { + const policy = { + etag: "etag", + version: 3, + bindings: [BINDING], + }; + + const updated = iam.mergeBindings(policy, [{ role: "some/role", members: ["newuser"] }]); + + expect(updated).to.be.true; + expect(policy.bindings).to.deep.equal([ + { + role: "some/role", + members: ["someuser", "newuser"], + }, + ]); + }); + + it("should add a new binding to the policy", () => { + const policy = { + etag: "etag", + version: 3, + bindings: [], + }; + + const updated = iam.mergeBindings(policy, [BINDING]); + + expect(updated).to.be.true; + expect(policy.bindings).to.deep.equal([BINDING]); + }); + }); + describe("testIamPermissions", () => { const tests: { desc: string; diff --git a/src/test/init/features/functions.spec.ts b/src/test/init/features/functions.spec.ts index cc0430d7c95..48cc900162c 100644 --- a/src/test/init/features/functions.spec.ts +++ b/src/test/init/features/functions.spec.ts @@ -24,7 +24,7 @@ function createExistingTestSetupAndConfig(): { setup: Setup; config: Config } { config: { functions: [cbconfig], }, - rcfile: { projects: {} }, + rcfile: { projects: {}, targets: {}, etags: {}, dataconnectEmulatorConfig: {} }, featureArg: true, }, config: new Config({ functions: [cbconfig] }, { projectDir: "test", cwd: "test" }), diff --git a/src/test/rc.spec.ts b/src/test/rc.spec.ts index a06441449bd..cdffdcd8ec6 100644 --- a/src/test/rc.spec.ts +++ b/src/test/rc.spec.ts @@ -4,7 +4,7 @@ import { RC, loadRC, RCData } from "../rc"; const fixturesDir = path.resolve(__dirname, "./fixtures"); -const EMPTY_DATA: RCData = { projects: {}, targets: {}, etags: {} }; +const EMPTY_DATA: RCData = { projects: {}, targets: {}, etags: {}, dataconnectEmulatorConfig: {} }; describe("RC", () => { describe(".load", () => { diff --git a/src/utils.ts b/src/utils.ts index 9c29a0cda4b..422fb6eebb5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,6 +1,7 @@ -import * as fs from "node:fs"; +import * as fs from "fs-extra"; import * as tty from "tty"; import * as path from "node:path"; +import * as yaml from "yaml"; import { Socket } from "node:net"; import * as _ from "lodash"; @@ -30,7 +31,7 @@ const ERROR_CHAR = IS_WINDOWS ? "!!" : "⬢"; const THIRTY_DAYS_IN_MILLISECONDS = 30 * 24 * 60 * 60 * 1000; export const envOverrides: string[] = []; - +export const vscodeEnvVars: { [key: string]: string } = {}; /** * Create a Firebase Console URL for the specified path and project. */ @@ -53,6 +54,15 @@ export function getInheritedOption(options: any, key: string): any { } } +/** + * Sets the VSCode environment variables to be used by the CLI when called by VSCode + * @param envVar name of the environment variable + * @param value value of the environment variable + */ +export function setVSCodeEnvVars(envVar: string, value: string) { + vscodeEnvVars[envVar] = value; +} + /** * Override a value with supplied environment variable if present. A function * that returns the environment variable in an acceptable format can be @@ -63,7 +73,8 @@ export function envOverride( value: string, coerce?: (value: string, defaultValue: string) => any, ): string { - const currentEnvValue = process.env[envname]; + const currentEnvValue = + isVSCodeExtension() && vscodeEnvVars[envname] ? vscodeEnvVars[envname] : process.env[envname]; if (currentEnvValue && currentEnvValue.length) { envOverrides.push(envname); if (coerce) { @@ -824,6 +835,65 @@ export function getHostnameFromUrl(url: string): string | null { } } +/** + * Retrieves a file from the directory. + */ +export function readFileFromDirectory( + directory: string, + file: string, +): Promise<{ source: string; sourceDirectory: string }> { + return new Promise((resolve, reject) => { + fs.readFile(path.resolve(directory, file), "utf8", (err, data) => { + if (err) { + if (err.code === "ENOENT") { + return reject( + new FirebaseError(`Could not find "${file}" in "${directory}"`, { original: err }), + ); + } + reject( + new FirebaseError(`Failed to read file "${file}" in "${directory}"`, { original: err }), + ); + } else { + resolve(data); + } + }); + }).then((source) => { + return { + source, + sourceDirectory: directory, + }; + }); +} + +/** + * Wrapps `yaml.safeLoad` with an error handler to present better YAML parsing + * errors. + */ +export function wrappedSafeLoad(source: string): any { + try { + return yaml.parse(source); + } catch (err: any) { + throw new FirebaseError(`YAML Error: ${err.message}`, { original: err }); + } +} + +/** + * Generate id meeting the following criterias: + * - Lowercase, digits, and hyphens only + * - Must begin with letter + * - Cannot end with hyphen + */ +export function generateId(n = 6): string { + const letters = "abcdefghijklmnopqrstuvwxyz"; + const allChars = "01234567890-abcdefghijklmnopqrstuvwxyz"; + let id = letters[Math.floor(Math.random() * letters.length)]; + for (let i = 1; i < n; i++) { + const idx = Math.floor(Math.random() * allChars.length); + id += allChars[idx]; + } + return id; +} + /** * Reads a secret value from either a file or a prompt. * If dataFile is falsy and this is a tty, uses prompty. Otherwise reads from dataFile. diff --git a/templates/init/dataconnect/connector.yaml b/templates/init/dataconnect/connector.yaml new file mode 100644 index 00000000000..009eabe29a4 --- /dev/null +++ b/templates/init/dataconnect/connector.yaml @@ -0,0 +1,2 @@ +connectorId: "__connectorId__" +authMode: "PUBLIC" diff --git a/templates/init/dataconnect/dataconnect.yaml b/templates/init/dataconnect/dataconnect.yaml new file mode 100644 index 00000000000..acc85adb201 --- /dev/null +++ b/templates/init/dataconnect/dataconnect.yaml @@ -0,0 +1,10 @@ +specVersion: "v1alpha" +serviceId: "__serviceId__" +schema: + source: "./schema" + datasource: + postgresql: + database: "__cloudSqlDatabase__" + cloudSql: + instanceId: "__cloudSqlInstanceId__" +connectorDirs: ["./connector"] diff --git a/templates/init/dataconnect/mutations.gql b/templates/init/dataconnect/mutations.gql new file mode 100644 index 00000000000..442700acf8a --- /dev/null +++ b/templates/init/dataconnect/mutations.gql @@ -0,0 +1,5 @@ +# # Example mutations +# # TODO: Replace with a really good illustrative example from devrel! +# mutation createOrder($name: String!) { +# order_insert(data : {name: $name}) +# } diff --git a/templates/init/dataconnect/queries.gql b/templates/init/dataconnect/queries.gql new file mode 100644 index 00000000000..ff73242e244 --- /dev/null +++ b/templates/init/dataconnect/queries.gql @@ -0,0 +1,7 @@ +# # Example query +# # TODO: Replace with a really good illustrative example from devrel! +# query listOrders { +# orders { +# name +# } +# } diff --git a/templates/init/dataconnect/schema.gql b/templates/init/dataconnect/schema.gql new file mode 100644 index 00000000000..7b9d02967ae --- /dev/null +++ b/templates/init/dataconnect/schema.gql @@ -0,0 +1,16 @@ +# # Example schema +# # TODO: Replace with a really good illustrative example from devrel! +# type Product @table { +# name: String! +# price: Int! +# } + +# type Order @table { +# name: String! +# } + +# type OrderItem @table(key: ["order", "product"]) { +# order: Order! +# product: Product! +# quantity: Int! +# } diff --git a/tsconfig.json b/tsconfig.json index 42283c7e128..1cb63de99d4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,11 @@ "src/types" ] }, + "lib": [ + "dom", + "dom.iterable", + "es2019" + ], "include": ["src/**/*"], "exclude": ["src/dynamicImport.js"] }