diff --git a/.eslintrc.js b/.eslintrc.js index 523add9ca7..5de4d0edf6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -36,6 +36,10 @@ module.exports = { ], alphabetize: { order: 'asc' }, 'newlines-between': 'never', + // By default pathGroups don't apply to 'external' imports, which + // breaks the next/react-first ordering below now that packages + // resolve from node_modules; only exclude builtins + pathGroupsExcludedImportTypes: ['builtin'], pathGroups: [ { pattern: '{next,next/**,react}', @@ -104,5 +108,14 @@ module.exports = { 'jsx-a11y/no-static-element-interactions': 'off', }, }, + { + // The service worker runs in a browser worker context, not Node.js. + // eslint-plugin-import's node resolver cannot resolve @serwist/next/worker + // (a package.json subpath export) so we disable the unresolved check here. + files: ['src/service-worker/**'], + rules: { + 'import/no-unresolved': 'off', + }, + }, ], }; diff --git a/.pnp.cjs b/.pnp.cjs deleted file mode 100755 index c1b22ce3e3..0000000000 --- a/.pnp.cjs +++ /dev/null @@ -1,33422 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -// @ts-nocheck -"use strict"; - -const RAW_RUNTIME_STATE = -'{\ - "__info": [\ - "This file is automatically generated. Do not touch it, or risk",\ - "your modifications being lost."\ - ],\ - "dependencyTreeRoots": [\ - {\ - "name": "mpdx-react",\ - "reference": "workspace:."\ - }\ - ],\ - "enableTopLevelFallback": true,\ - "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ - "pnpZipBackend": "libzip",\ - "fallbackExclusionList": [\ - ["mpdx-react", ["workspace:."]]\ - ],\ - "fallbackPool": [\ - ],\ - "packageRegistryData": [\ - [null, [\ - [null, {\ - "packageLocation": "./",\ - "packageDependencies": [\ - ["@apollo/client", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.7.1"],\ - ["@apollo/datasource-rest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.4.1"],\ - ["@apollo/server", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.11.2"],\ - ["@apollo/subgraph", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.1.3"],\ - ["@apollo/utils.fetcher", "npm:3.0.0"],\ - ["@as-integrations/next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.2.0"],\ - ["@crowdin/cli", "npm:4.9.1"],\ - ["@emotion/cache", "npm:11.11.0"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@graphql-codegen/add", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/cli", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/fragment-matcher", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/near-operation-file-preset", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.0.0"],\ - ["@graphql-codegen/schema-ast", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.2"],\ - ["@graphql-codegen/typescript", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.2"],\ - ["@graphql-codegen/typescript-operations", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.0"],\ - ["@graphql-codegen/typescript-react-apollo", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.3.7"],\ - ["@graphql-codegen/typescript-resolvers", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.6"],\ - ["@graphql-tools/jest-transform", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.2.2"],\ - ["@graphql-tools/schema", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.0.4"],\ - ["@lhci/cli", "npm:0.13.0"],\ - ["@mdi/js", "npm:7.0.96"],\ - ["@mdi/react", "npm:1.6.1"],\ - ["@mui/icons-material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/lab", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.0-alpha.100"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/styles", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/utils", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0"],\ - ["@mui/x-data-grid", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.9.2"],\ - ["@mui/x-date-pickers", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.0.0-beta.7"],\ - ["@next/bundle-analyzer", "npm:15.0.3"],\ - ["@next/eslint-plugin-next", "npm:15.0.3"],\ - ["@parcel/watcher", "npm:2.4.1"],\ - ["@react-google-maps/api", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.20.3"],\ - ["@rollbar/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.11.1"],\ - ["@testing-library/dom", "npm:8.18.1"],\ - ["@testing-library/jest-dom", "npm:5.16.5"],\ - ["@testing-library/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.4.0"],\ - ["@testing-library/react-hooks", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.0.1"],\ - ["@testing-library/user-event", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.5.0"],\ - ["@types/formidable", "npm:3.4.5"],\ - ["@types/google.maps", "npm:3.50.2"],\ - ["@types/jest", "npm:29.5.14"],\ - ["@types/lodash", "npm:4.14.191"],\ - ["@types/luxon", "npm:3.4.2"],\ - ["@types/node", "npm:22.13.14"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/testing-library__jest-dom", "npm:5.14.5"],\ - ["@typescript-eslint/eslint-plugin", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.5.0"],\ - ["@typescript-eslint/parser", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0"],\ - ["apollo3-cache-persist", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.14.1"],\ - ["clsx", "npm:2.1.1"],\ - ["concurrently", "npm:8.2.2"],\ - ["css-mediaquery", "npm:0.1.2"],\ - ["dnd-core", "npm:16.0.1"],\ - ["dotenv", "npm:16.0.1"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-config-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.5.0"],\ - ["eslint-plugin-import", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.26.0"],\ - ["eslint-plugin-jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:27.0.4"],\ - ["eslint-plugin-jsx-a11y", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.6.1"],\ - ["eslint-plugin-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.1"],\ - ["eslint-plugin-react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.31.8"],\ - ["formidable", "npm:3.5.4"],\ - ["formik", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.2.9"],\ - ["framer-motion", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.3.6"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-ergonomock", [\ - "@cruglobal/graphql-ergonomock",\ - "npm:1.2.2"\ - ]],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["husky", "npm:8.0.1"],\ - ["i18next", "npm:21.9.2"],\ - ["i18next-browser-languagedetector", "npm:6.1.5"],\ - ["i18next-http-backend", "npm:1.4.4"],\ - ["i18next-parser", "npm:9.0.2"],\ - ["isomorphic-fetch", "npm:3.0.0"],\ - ["jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:29.0.3"],\ - ["jest-environment-jsdom", "npm:29.0.3"],\ - ["jest-fetch-mock", "npm:3.0.3"],\ - ["lighthouse", "npm:11.7.1"],\ - ["lint-staged", "npm:13.0.3"],\ - ["lodash", "npm:4.17.21"],\ - ["luxon", "npm:3.4.4"],\ - ["micro-cors", "npm:0.1.1"],\ - ["mpdx-react", "workspace:."],\ - ["next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3"],\ - ["next-auth", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.24.11"],\ - ["next-compose-plugins", "npm:2.2.1"],\ - ["next-optimized-images", "npm:2.6.2"],\ - ["next-pwa", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.6.0"],\ - ["node-mocks-http", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.16.2"],\ - ["notistack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.0.5"],\ - ["prettier", "npm:3.6.2"],\ - ["prop-types", "npm:15.8.1"],\ - ["puppeteer", "npm:24.4.0"],\ - ["react", "npm:18.2.0"],\ - ["react-csv", "npm:2.2.2"],\ - ["react-dnd", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:14.0.5"],\ - ["react-dnd-html5-backend", "npm:14.1.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-i18next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.18.6"],\ - ["react-virtuoso", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.19.0"],\ - ["recharts", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.3.2"],\ - ["rollbar", "npm:2.26.4"],\ - ["ts-essentials", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.3.0"],\ - ["tslib", "npm:2.4.0"],\ - ["tss-react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.3"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"],\ - ["url-loader", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.1"],\ - ["webpack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.96.1"],\ - ["yup", "npm:1.4.0"]\ - ],\ - "linkType": "SOFT"\ - }]\ - ]],\ - ["@aashutoshrathi/word-wrap", [\ - ["npm:1.2.6", {\ - "packageLocation": "./.yarn/cache/@aashutoshrathi-word-wrap-npm-1.2.6-5b1d95e487-6eebd12a5c.zip/node_modules/@aashutoshrathi/word-wrap/",\ - "packageDependencies": [\ - ["@aashutoshrathi/word-wrap", "npm:1.2.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@adobe/css-tools", [\ - ["npm:4.4.0", {\ - "packageLocation": "./.yarn/cache/@adobe-css-tools-npm-4.4.0-3e89ecd033-9c6315fe9e.zip/node_modules/@adobe/css-tools/",\ - "packageDependencies": [\ - ["@adobe/css-tools", "npm:4.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@ampproject/remapping", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/@ampproject-remapping-npm-2.2.0-114878fa50-503a58d6e9.zip/node_modules/@ampproject/remapping/",\ - "packageDependencies": [\ - ["@ampproject/remapping", "npm:2.2.0"],\ - ["@jridgewell/gen-mapping", "npm:0.1.1"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/@ampproject-remapping-npm-2.3.0-559c14eee4-f345152537.zip/node_modules/@ampproject/remapping/",\ - "packageDependencies": [\ - ["@ampproject/remapping", "npm:2.3.0"],\ - ["@jridgewell/gen-mapping", "npm:0.3.5"],\ - ["@jridgewell/trace-mapping", "npm:0.3.25"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apideck/better-ajv-errors", [\ - ["npm:0.3.6", {\ - "packageLocation": "./.yarn/cache/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-d638f4d565.zip/node_modules/@apideck/better-ajv-errors/",\ - "packageDependencies": [\ - ["@apideck/better-ajv-errors", "npm:0.3.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:0.3.6", {\ - "packageLocation": "./.yarn/__virtual__/@apideck-better-ajv-errors-virtual-46c07aacb0/0/cache/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-d638f4d565.zip/node_modules/@apideck/better-ajv-errors/",\ - "packageDependencies": [\ - ["@apideck/better-ajv-errors", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:0.3.6"],\ - ["@types/ajv", null],\ - ["ajv", "npm:8.11.0"],\ - ["json-schema", "npm:0.4.0"],\ - ["jsonpointer", "npm:5.0.1"],\ - ["leven", "npm:3.1.0"]\ - ],\ - "packagePeers": [\ - "@types/ajv",\ - "ajv"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/cache-control-types", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/@apollo-cache-control-types-npm-1.0.2-bcc1d8bf57-1e00c57b45.zip/node_modules/@apollo/cache-control-types/",\ - "packageDependencies": [\ - ["@apollo/cache-control-types", "npm:1.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/@apollo-cache-control-types-npm-1.0.3-2a44d8278e-a588e52bfa.zip/node_modules/@apollo/cache-control-types/",\ - "packageDependencies": [\ - ["@apollo/cache-control-types", "npm:1.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2818cc1776b2119c566a828579b40e4623e119b99a39b204dfbe4af7f16d7128aa1acea1f31059df0c7ea03d75a2fd264c877da90bdc32dd5c4f934a5236e8c5#npm:1.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-cache-control-types-virtual-dd38f237a5/0/cache/@apollo-cache-control-types-npm-1.0.2-bcc1d8bf57-1e00c57b45.zip/node_modules/@apollo/cache-control-types/",\ - "packageDependencies": [\ - ["@apollo/cache-control-types", "virtual:2818cc1776b2119c566a828579b40e4623e119b99a39b204dfbe4af7f16d7128aa1acea1f31059df0c7ea03d75a2fd264c877da90bdc32dd5c4f934a5236e8c5#npm:1.0.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:1.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-cache-control-types-virtual-a42c5d01d1/0/cache/@apollo-cache-control-types-npm-1.0.3-2a44d8278e-a588e52bfa.zip/node_modules/@apollo/cache-control-types/",\ - "packageDependencies": [\ - ["@apollo/cache-control-types", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:1.0.3"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/client", [\ - ["npm:3.7.1", {\ - "packageLocation": "./.yarn/cache/@apollo-client-npm-3.7.1-a80032e019-120ce98179.zip/node_modules/@apollo/client/",\ - "packageDependencies": [\ - ["@apollo/client", "npm:3.7.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.7.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-client-virtual-bc99b96f0f/0/cache/@apollo-client-npm-3.7.1-a80032e019-120ce98179.zip/node_modules/@apollo/client/",\ - "packageDependencies": [\ - ["@apollo/client", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.7.1"],\ - ["@graphql-typed-document-node/core", "virtual:bc99b96f0fa44ff66df334d122615311570797565c101108585b0b92e2494d2fed2cf8ba41ed928eae637e83e04b4b5643319fc12af526fe8ab7798b1c35dda0#npm:3.1.1"],\ - ["@types/graphql", null],\ - ["@types/graphql-ws", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@types/subscriptions-transport-ws", null],\ - ["@wry/context", "npm:0.7.0"],\ - ["@wry/equality", "npm:0.5.3"],\ - ["@wry/trie", "npm:0.3.2"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["graphql-ws", null],\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["optimism", "npm:0.16.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["response-iterator", "npm:0.2.6"],\ - ["subscriptions-transport-ws", null],\ - ["symbol-observable", "npm:4.0.0"],\ - ["ts-invariant", "npm:0.10.3"],\ - ["tslib", "npm:2.4.0"],\ - ["zen-observable-ts", "npm:1.2.5"]\ - ],\ - "packagePeers": [\ - "@types/graphql-ws",\ - "@types/graphql",\ - "@types/react-dom",\ - "@types/react",\ - "@types/subscriptions-transport-ws",\ - "graphql-ws",\ - "graphql",\ - "react-dom",\ - "react",\ - "subscriptions-transport-ws"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/datasource-rest", [\ - ["npm:6.4.1", {\ - "packageLocation": "./.yarn/cache/@apollo-datasource-rest-npm-6.4.1-099182eeb2-8fb932e632.zip/node_modules/@apollo/datasource-rest/",\ - "packageDependencies": [\ - ["@apollo/datasource-rest", "npm:6.4.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.4.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-datasource-rest-virtual-de194801e4/0/cache/@apollo-datasource-rest-npm-6.4.1-099182eeb2-8fb932e632.zip/node_modules/@apollo/datasource-rest/",\ - "packageDependencies": [\ - ["@apollo/datasource-rest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.4.1"],\ - ["@apollo/utils.fetcher", "npm:3.1.0"],\ - ["@apollo/utils.keyvaluecache", "npm:3.1.0"],\ - ["@apollo/utils.logger", "npm:3.0.0"],\ - ["@apollo/utils.withrequired", "npm:3.0.0"],\ - ["@types/graphql", null],\ - ["@types/http-cache-semantics", "npm:4.0.4"],\ - ["graphql", "npm:16.9.0"],\ - ["http-cache-semantics", "npm:4.1.1"],\ - ["lodash.clonedeep", "npm:4.5.0"],\ - ["lodash.isplainobject", "npm:4.0.6"],\ - ["node-fetch", "virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/federation-internals", [\ - ["npm:2.1.3", {\ - "packageLocation": "./.yarn/cache/@apollo-federation-internals-npm-2.1.3-334e4b0620-953fa2836d.zip/node_modules/@apollo/federation-internals/",\ - "packageDependencies": [\ - ["@apollo/federation-internals", "npm:2.1.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2818cc1776b2119c566a828579b40e4623e119b99a39b204dfbe4af7f16d7128aa1acea1f31059df0c7ea03d75a2fd264c877da90bdc32dd5c4f934a5236e8c5#npm:2.1.3", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-federation-internals-virtual-37e0746162/0/cache/@apollo-federation-internals-npm-2.1.3-334e4b0620-953fa2836d.zip/node_modules/@apollo/federation-internals/",\ - "packageDependencies": [\ - ["@apollo/federation-internals", "virtual:2818cc1776b2119c566a828579b40e4623e119b99a39b204dfbe4af7f16d7128aa1acea1f31059df0c7ea03d75a2fd264c877da90bdc32dd5c4f934a5236e8c5#npm:2.1.3"],\ - ["@types/graphql", null],\ - ["chalk", "npm:4.1.2"],\ - ["graphql", "npm:16.9.0"],\ - ["js-levenshtein", "npm:1.1.6"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/protobufjs", [\ - ["npm:1.2.7", {\ - "packageLocation": "./.yarn/unplugged/@apollo-protobufjs-npm-1.2.7-6c6eb49b51/node_modules/@apollo/protobufjs/",\ - "packageDependencies": [\ - ["@apollo/protobufjs", "npm:1.2.7"],\ - ["@protobufjs/aspromise", "npm:1.1.2"],\ - ["@protobufjs/base64", "npm:1.1.2"],\ - ["@protobufjs/codegen", "npm:2.0.4"],\ - ["@protobufjs/eventemitter", "npm:1.1.0"],\ - ["@protobufjs/fetch", "npm:1.1.0"],\ - ["@protobufjs/float", "npm:1.0.2"],\ - ["@protobufjs/inquire", "npm:1.1.0"],\ - ["@protobufjs/path", "npm:1.1.2"],\ - ["@protobufjs/pool", "npm:1.1.0"],\ - ["@protobufjs/utf8", "npm:1.1.0"],\ - ["@types/long", "npm:4.0.2"],\ - ["long", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/server", [\ - ["npm:4.11.2", {\ - "packageLocation": "./.yarn/cache/@apollo-server-npm-4.11.2-4f65cc9a9e-88137c67b7.zip/node_modules/@apollo/server/",\ - "packageDependencies": [\ - ["@apollo/server", "npm:4.11.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.11.2", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-server-virtual-f578131a86/0/cache/@apollo-server-npm-4.11.2-4f65cc9a9e-88137c67b7.zip/node_modules/@apollo/server/",\ - "packageDependencies": [\ - ["@apollo/cache-control-types", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:1.0.3"],\ - ["@apollo/server", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.11.2"],\ - ["@apollo/server-gateway-interface", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:1.1.1"],\ - ["@apollo/usage-reporting-protobuf", "npm:4.1.1"],\ - ["@apollo/utils.createhash", "npm:2.0.1"],\ - ["@apollo/utils.fetcher", "npm:2.0.1"],\ - ["@apollo/utils.isnodelike", "npm:2.0.1"],\ - ["@apollo/utils.keyvaluecache", "npm:2.1.1"],\ - ["@apollo/utils.logger", "npm:2.0.1"],\ - ["@apollo/utils.usagereporting", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:2.1.0"],\ - ["@apollo/utils.withrequired", "npm:2.0.1"],\ - ["@graphql-tools/schema", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:9.0.19"],\ - ["@types/express", "npm:4.17.21"],\ - ["@types/express-serve-static-core", "npm:4.19.6"],\ - ["@types/graphql", null],\ - ["@types/node-fetch", "npm:2.6.12"],\ - ["async-retry", "npm:1.3.3"],\ - ["cors", "npm:2.8.5"],\ - ["express", "npm:4.21.2"],\ - ["graphql", "npm:16.9.0"],\ - ["loglevel", "npm:1.8.0"],\ - ["lru-cache", "npm:7.14.0"],\ - ["negotiator", "npm:0.6.3"],\ - ["node-abort-controller", "npm:3.1.1"],\ - ["node-fetch", "virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7"],\ - ["uuid", "npm:9.0.0"],\ - ["whatwg-mimetype", "npm:3.0.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/server-gateway-interface", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/@apollo-server-gateway-interface-npm-1.1.1-a9440657b6-af0e953992.zip/node_modules/@apollo/server-gateway-interface/",\ - "packageDependencies": [\ - ["@apollo/server-gateway-interface", "npm:1.1.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:1.1.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-server-gateway-interface-virtual-7cd074a784/0/cache/@apollo-server-gateway-interface-npm-1.1.1-a9440657b6-af0e953992.zip/node_modules/@apollo/server-gateway-interface/",\ - "packageDependencies": [\ - ["@apollo/server-gateway-interface", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:1.1.1"],\ - ["@apollo/usage-reporting-protobuf", "npm:4.1.1"],\ - ["@apollo/utils.fetcher", "npm:2.0.1"],\ - ["@apollo/utils.keyvaluecache", "npm:2.1.1"],\ - ["@apollo/utils.logger", "npm:2.0.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/subgraph", [\ - ["npm:2.1.3", {\ - "packageLocation": "./.yarn/cache/@apollo-subgraph-npm-2.1.3-1dbebfcc85-2c932eeaf3.zip/node_modules/@apollo/subgraph/",\ - "packageDependencies": [\ - ["@apollo/subgraph", "npm:2.1.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.1.3", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-subgraph-virtual-2818cc1776/0/cache/@apollo-subgraph-npm-2.1.3-1dbebfcc85-2c932eeaf3.zip/node_modules/@apollo/subgraph/",\ - "packageDependencies": [\ - ["@apollo/cache-control-types", "virtual:2818cc1776b2119c566a828579b40e4623e119b99a39b204dfbe4af7f16d7128aa1acea1f31059df0c7ea03d75a2fd264c877da90bdc32dd5c4f934a5236e8c5#npm:1.0.2"],\ - ["@apollo/federation-internals", "virtual:2818cc1776b2119c566a828579b40e4623e119b99a39b204dfbe4af7f16d7128aa1acea1f31059df0c7ea03d75a2fd264c877da90bdc32dd5c4f934a5236e8c5#npm:2.1.3"],\ - ["@apollo/subgraph", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.1.3"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/usage-reporting-protobuf", [\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/@apollo-usage-reporting-protobuf-npm-4.1.1-e619ee6cb3-07679e0058.zip/node_modules/@apollo/usage-reporting-protobuf/",\ - "packageDependencies": [\ - ["@apollo/protobufjs", "npm:1.2.7"],\ - ["@apollo/usage-reporting-protobuf", "npm:4.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.createhash", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.createhash-npm-2.0.1-8a9e347c9f-9e3ba58fd4.zip/node_modules/@apollo/utils.createhash/",\ - "packageDependencies": [\ - ["@apollo/utils.createhash", "npm:2.0.1"],\ - ["@apollo/utils.isnodelike", "npm:2.0.1"],\ - ["sha.js", "npm:2.4.11"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.dropunuseddefinitions", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.dropunuseddefinitions-npm-2.0.1-df9dff59af-c12166f255.zip/node_modules/@apollo/utils.dropunuseddefinitions/",\ - "packageDependencies": [\ - ["@apollo/utils.dropunuseddefinitions", "npm:2.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-utils.dropunuseddefinitions-virtual-483b46db25/0/cache/@apollo-utils.dropunuseddefinitions-npm-2.0.1-df9dff59af-c12166f255.zip/node_modules/@apollo/utils.dropunuseddefinitions/",\ - "packageDependencies": [\ - ["@apollo/utils.dropunuseddefinitions", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.fetcher", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.fetcher-npm-2.0.1-3ab6263d9d-e173d215c3.zip/node_modules/@apollo/utils.fetcher/",\ - "packageDependencies": [\ - ["@apollo/utils.fetcher", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.fetcher-npm-3.0.0-280fe1314e-4fd48978c0.zip/node_modules/@apollo/utils.fetcher/",\ - "packageDependencies": [\ - ["@apollo/utils.fetcher", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.fetcher-npm-3.1.0-8274a522b0-be536a773c.zip/node_modules/@apollo/utils.fetcher/",\ - "packageDependencies": [\ - ["@apollo/utils.fetcher", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.isnodelike", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.isnodelike-npm-2.0.1-9cc16d5d43-c2e858186a.zip/node_modules/@apollo/utils.isnodelike/",\ - "packageDependencies": [\ - ["@apollo/utils.isnodelike", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.keyvaluecache", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.keyvaluecache-npm-2.1.1-848804a26e-9a6bc7c464.zip/node_modules/@apollo/utils.keyvaluecache/",\ - "packageDependencies": [\ - ["@apollo/utils.keyvaluecache", "npm:2.1.1"],\ - ["@apollo/utils.logger", "npm:2.0.1"],\ - ["lru-cache", "npm:7.18.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.keyvaluecache-npm-3.1.0-e6fe933ed1-a0e1a84f76.zip/node_modules/@apollo/utils.keyvaluecache/",\ - "packageDependencies": [\ - ["@apollo/utils.keyvaluecache", "npm:3.1.0"],\ - ["@apollo/utils.logger", "npm:3.0.0"],\ - ["lru-cache", "npm:10.4.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.logger", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.logger-npm-2.0.1-689a30cab5-f975c81fcc.zip/node_modules/@apollo/utils.logger/",\ - "packageDependencies": [\ - ["@apollo/utils.logger", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.logger-npm-3.0.0-950f3c2094-e3bd3e55e7.zip/node_modules/@apollo/utils.logger/",\ - "packageDependencies": [\ - ["@apollo/utils.logger", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.printwithreducedwhitespace", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.printwithreducedwhitespace-npm-2.0.1-7bced48ce5-16cd191e66.zip/node_modules/@apollo/utils.printwithreducedwhitespace/",\ - "packageDependencies": [\ - ["@apollo/utils.printwithreducedwhitespace", "npm:2.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-utils.printwithreducedwhitespace-virtual-311442da26/0/cache/@apollo-utils.printwithreducedwhitespace-npm-2.0.1-7bced48ce5-16cd191e66.zip/node_modules/@apollo/utils.printwithreducedwhitespace/",\ - "packageDependencies": [\ - ["@apollo/utils.printwithreducedwhitespace", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.removealiases", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.removealiases-npm-2.0.1-3400c22b9b-2f3f925b23.zip/node_modules/@apollo/utils.removealiases/",\ - "packageDependencies": [\ - ["@apollo/utils.removealiases", "npm:2.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-utils.removealiases-virtual-52da65d9ad/0/cache/@apollo-utils.removealiases-npm-2.0.1-3400c22b9b-2f3f925b23.zip/node_modules/@apollo/utils.removealiases/",\ - "packageDependencies": [\ - ["@apollo/utils.removealiases", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.sortast", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.sortast-npm-2.0.1-50ae35efaf-b71245558e.zip/node_modules/@apollo/utils.sortast/",\ - "packageDependencies": [\ - ["@apollo/utils.sortast", "npm:2.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-utils.sortast-virtual-c60f126af0/0/cache/@apollo-utils.sortast-npm-2.0.1-50ae35efaf-b71245558e.zip/node_modules/@apollo/utils.sortast/",\ - "packageDependencies": [\ - ["@apollo/utils.sortast", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["lodash.sortby", "npm:4.7.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.stripsensitiveliterals", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.stripsensitiveliterals-npm-2.0.1-6ee81b6b8c-a3f74af062.zip/node_modules/@apollo/utils.stripsensitiveliterals/",\ - "packageDependencies": [\ - ["@apollo/utils.stripsensitiveliterals", "npm:2.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-utils.stripsensitiveliterals-virtual-b7db8695ff/0/cache/@apollo-utils.stripsensitiveliterals-npm-2.0.1-6ee81b6b8c-a3f74af062.zip/node_modules/@apollo/utils.stripsensitiveliterals/",\ - "packageDependencies": [\ - ["@apollo/utils.stripsensitiveliterals", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.usagereporting", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.usagereporting-npm-2.1.0-df6b791c39-8af4b23000.zip/node_modules/@apollo/utils.usagereporting/",\ - "packageDependencies": [\ - ["@apollo/utils.usagereporting", "npm:2.1.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:2.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@apollo-utils.usagereporting-virtual-281e59953a/0/cache/@apollo-utils.usagereporting-npm-2.1.0-df6b791c39-8af4b23000.zip/node_modules/@apollo/utils.usagereporting/",\ - "packageDependencies": [\ - ["@apollo/usage-reporting-protobuf", "npm:4.1.1"],\ - ["@apollo/utils.dropunuseddefinitions", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@apollo/utils.printwithreducedwhitespace", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@apollo/utils.removealiases", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@apollo/utils.sortast", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@apollo/utils.stripsensitiveliterals", "virtual:281e59953ad6cff5b4752db057a0bc50d41e551fa7280416c8852e6fda921f0a92178c4de15644c39788fa7ea9f661b0d8bfd5a20085aa3a8ddf9caa2a9b6e7b#npm:2.0.1"],\ - ["@apollo/utils.usagereporting", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:2.1.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@apollo/utils.withrequired", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.withrequired-npm-2.0.1-27d706fe47-ddd3a72d0f.zip/node_modules/@apollo/utils.withrequired/",\ - "packageDependencies": [\ - ["@apollo/utils.withrequired", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@apollo-utils.withrequired-npm-3.0.0-988216b530-63fb7e93a6.zip/node_modules/@apollo/utils.withrequired/",\ - "packageDependencies": [\ - ["@apollo/utils.withrequired", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@ardatan/relay-compiler", [\ - ["npm:12.0.0", {\ - "packageLocation": "./.yarn/cache/@ardatan-relay-compiler-npm-12.0.0-03a59496e5-60896560fd.zip/node_modules/@ardatan/relay-compiler/",\ - "packageDependencies": [\ - ["@ardatan/relay-compiler", "npm:12.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:e16902fd004b55a738b7b49ed2f4d71fc0a80419a713c332f3b61e8c9c8a60d1340c889ae83dc6fe2e429e62cd79246761ed5e174b9b7b2a74f2edab818b7a37#npm:12.0.0", {\ - "packageLocation": "./.yarn/__virtual__/@ardatan-relay-compiler-virtual-8105636463/0/cache/@ardatan-relay-compiler-npm-12.0.0-03a59496e5-60896560fd.zip/node_modules/@ardatan/relay-compiler/",\ - "packageDependencies": [\ - ["@ardatan/relay-compiler", "virtual:e16902fd004b55a738b7b49ed2f4d71fc0a80419a713c332f3b61e8c9c8a60d1340c889ae83dc6fe2e429e62cd79246761ed5e174b9b7b2a74f2edab818b7a37#npm:12.0.0"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/generator", "npm:7.18.12"],\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/graphql", null],\ - ["babel-preset-fbjs", "virtual:810563646393289aef3f5730d25cc237a004cd4995a46dd0b453e47cf80f062b2554c37f72b4a61f9eada5c63c89a2a9a1c25f72c144d07c46ef79e873265ac4#npm:3.4.0"],\ - ["chalk", "npm:4.1.2"],\ - ["fb-watchman", "npm:2.0.1"],\ - ["fbjs", "npm:3.0.4"],\ - ["glob", "npm:7.2.3"],\ - ["graphql", "npm:16.9.0"],\ - ["immutable", "npm:3.7.6"],\ - ["invariant", "npm:2.2.4"],\ - ["nullthrows", "npm:1.1.1"],\ - ["relay-runtime", "npm:12.0.0"],\ - ["signedsource", "npm:1.0.0"],\ - ["yargs", "npm:15.4.1"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@ardatan/sync-fetch", [\ - ["npm:0.0.1", {\ - "packageLocation": "./.yarn/cache/@ardatan-sync-fetch-npm-0.0.1-77efa386d1-ee21741bad.zip/node_modules/@ardatan/sync-fetch/",\ - "packageDependencies": [\ - ["@ardatan/sync-fetch", "npm:0.0.1"],\ - ["node-fetch", "virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@as-integrations/next", [\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/@as-integrations-next-npm-3.2.0-fcfd76b818-0ed9eb1a01.zip/node_modules/@as-integrations/next/",\ - "packageDependencies": [\ - ["@as-integrations/next", "npm:3.2.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.2.0", {\ - "packageLocation": "./.yarn/__virtual__/@as-integrations-next-virtual-433050339d/0/cache/@as-integrations-next-npm-3.2.0-fcfd76b818-0ed9eb1a01.zip/node_modules/@as-integrations/next/",\ - "packageDependencies": [\ - ["@apollo/server", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.11.2"],\ - ["@as-integrations/next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.2.0"],\ - ["@types/apollo__server", null],\ - ["@types/next", null],\ - ["next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3"]\ - ],\ - "packagePeers": [\ - "@apollo/server",\ - "@types/apollo__server",\ - "@types/next",\ - "next"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/code-frame", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-code-frame-npm-7.18.6-25229a7e34-195e2be317.zip/node_modules/@babel/code-frame/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@babel/highlight", "npm:7.18.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.13", {\ - "packageLocation": "./.yarn/cache/@babel-code-frame-npm-7.22.13-2782581d20-bf6ae6ba3a.zip/node_modules/@babel/code-frame/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.22.13"],\ - ["@babel/highlight", "npm:7.22.20"],\ - ["chalk", "npm:2.4.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.2", {\ - "packageLocation": "./.yarn/cache/@babel-code-frame-npm-7.24.2-e104352cc7-7db8f5b36f.zip/node_modules/@babel/code-frame/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.24.2"],\ - ["@babel/highlight", "npm:7.24.2"],\ - ["picocolors", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/compat-data", [\ - ["npm:7.18.8", {\ - "packageLocation": "./.yarn/cache/@babel-compat-data-npm-7.18.8-207acebb97-85d41394bf.zip/node_modules/@babel/compat-data/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.18.8"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.4", {\ - "packageLocation": "./.yarn/cache/@babel-compat-data-npm-7.24.4-9f90706503-e51faec0ac.zip/node_modules/@babel/compat-data/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.24.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/core", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-core-npm-7.18.10-4dfa3bcaee-2cf2f0a9cb.zip/node_modules/@babel/core/",\ - "packageDependencies": [\ - ["@ampproject/remapping", "npm:2.2.0"],\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/generator", "npm:7.18.12"],\ - ["@babel/helper-compilation-targets", "virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9"],\ - ["@babel/helper-module-transforms", "npm:7.18.9"],\ - ["@babel/helpers", "npm:7.18.9"],\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"],\ - ["convert-source-map", "npm:1.8.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["gensync", "npm:1.0.0-beta.2"],\ - ["json5", "npm:2.2.3"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.4", {\ - "packageLocation": "./.yarn/cache/@babel-core-npm-7.24.4-5e34d46aa7-1e049f8df2.zip/node_modules/@babel/core/",\ - "packageDependencies": [\ - ["@ampproject/remapping", "npm:2.3.0"],\ - ["@babel/code-frame", "npm:7.24.2"],\ - ["@babel/core", "npm:7.24.4"],\ - ["@babel/generator", "npm:7.24.4"],\ - ["@babel/helper-compilation-targets", "npm:7.23.6"],\ - ["@babel/helper-module-transforms", "virtual:5e34d46aa74c70cb7efddf34af306cce3c5a77fafdbeb34016491b6c28ff1bafaca3f3ec18f3da9ee08c42afd1ceb5f551451330c94717f204e27e3872331d2f#npm:7.23.3"],\ - ["@babel/helpers", "npm:7.24.4"],\ - ["@babel/parser", "npm:7.24.4"],\ - ["@babel/template", "npm:7.24.0"],\ - ["@babel/traverse", "npm:7.24.1"],\ - ["@babel/types", "npm:7.24.0"],\ - ["convert-source-map", "npm:2.0.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["gensync", "npm:1.0.0-beta.2"],\ - ["json5", "npm:2.2.3"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/generator", [\ - ["npm:7.18.12", {\ - "packageLocation": "./.yarn/cache/@babel-generator-npm-7.18.12-280dfc3ba1-90746592a5.zip/node_modules/@babel/generator/",\ - "packageDependencies": [\ - ["@babel/generator", "npm:7.18.12"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@jridgewell/gen-mapping", "npm:0.3.2"],\ - ["jsesc", "npm:2.5.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.19.3", {\ - "packageLocation": "./.yarn/cache/@babel-generator-npm-7.19.3-da37552a7d-7e486ef57f.zip/node_modules/@babel/generator/",\ - "packageDependencies": [\ - ["@babel/generator", "npm:7.19.3"],\ - ["@babel/types", "npm:7.19.3"],\ - ["@jridgewell/gen-mapping", "npm:0.3.2"],\ - ["jsesc", "npm:2.5.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.23.0", {\ - "packageLocation": "./.yarn/cache/@babel-generator-npm-7.23.0-08841c5369-bd1598bd35.zip/node_modules/@babel/generator/",\ - "packageDependencies": [\ - ["@babel/generator", "npm:7.23.0"],\ - ["@babel/types", "npm:7.23.0"],\ - ["@jridgewell/gen-mapping", "npm:0.3.2"],\ - ["@jridgewell/trace-mapping", "npm:0.3.20"],\ - ["jsesc", "npm:2.5.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.4", {\ - "packageLocation": "./.yarn/cache/@babel-generator-npm-7.24.4-0bda5be79e-69e1772dcf.zip/node_modules/@babel/generator/",\ - "packageDependencies": [\ - ["@babel/generator", "npm:7.24.4"],\ - ["@babel/types", "npm:7.24.0"],\ - ["@jridgewell/gen-mapping", "npm:0.3.5"],\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["jsesc", "npm:2.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-annotate-as-pure", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-annotate-as-pure-npm-7.18.6-36e25293d8-88ccd15ced.zip/node_modules/@babel/helper-annotate-as-pure/",\ - "packageDependencies": [\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-builder-binary-assignment-operator-visitor", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.18.9-a2c86d7a16-b4bc214cb5.zip/node_modules/@babel/helper-builder-binary-assignment-operator-visitor/",\ - "packageDependencies": [\ - ["@babel/helper-builder-binary-assignment-operator-visitor", "npm:7.18.9"],\ - ["@babel/helper-explode-assignable-expression", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-compilation-targets", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-compilation-targets-npm-7.18.9-522dfb8a7f-74f9cff292.zip/node_modules/@babel/helper-compilation-targets/",\ - "packageDependencies": [\ - ["@babel/helper-compilation-targets", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:7.23.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-compilation-targets-npm-7.23.6-aa6f07f088-05595cd730.zip/node_modules/@babel/helper-compilation-targets/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.24.4"],\ - ["@babel/helper-compilation-targets", "npm:7.23.6"],\ - ["@babel/helper-validator-option", "npm:7.23.5"],\ - ["browserslist", "npm:4.23.0"],\ - ["lru-cache", "npm:5.1.1"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-compilation-targets-virtual-85cfc66f0a/0/cache/@babel-helper-compilation-targets-npm-7.18.9-522dfb8a7f-74f9cff292.zip/node_modules/@babel/helper-compilation-targets/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.18.8"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-compilation-targets", "virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9"],\ - ["@babel/helper-validator-option", "npm:7.18.6"],\ - ["@types/babel__core", null],\ - ["browserslist", "npm:4.21.3"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-create-class-features-plugin", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.18.9-3c99e4cac5-035c20e7a9.zip/node_modules/@babel/helper-create-class-features-plugin/",\ - "packageDependencies": [\ - ["@babel/helper-create-class-features-plugin", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:aba18254a34b9b2b7d6b5f46dc92407e016daacb18f300ff91c36cc94b1d99dc3760cf8fc53ee8a3abdb843fa5a11e476f9a69a9d9a470d1706b00978c7a6a25#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-create-class-features-plugin-virtual-87fd68372a/0/cache/@babel-helper-create-class-features-plugin-npm-7.18.9-3c99e4cac5-035c20e7a9.zip/node_modules/@babel/helper-create-class-features-plugin/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/helper-create-class-features-plugin", "virtual:aba18254a34b9b2b7d6b5f46dc92407e016daacb18f300ff91c36cc94b1d99dc3760cf8fc53ee8a3abdb843fa5a11e476f9a69a9d9a470d1706b00978c7a6a25#npm:7.18.9"],\ - ["@babel/helper-environment-visitor", "npm:7.18.9"],\ - ["@babel/helper-function-name", "npm:7.18.9"],\ - ["@babel/helper-member-expression-to-functions", "npm:7.18.9"],\ - ["@babel/helper-optimise-call-expression", "npm:7.18.6"],\ - ["@babel/helper-replace-supers", "npm:7.18.9"],\ - ["@babel/helper-split-export-declaration", "npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-create-regexp-features-plugin", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.18.6-96a83bc902-8864e3a89f.zip/node_modules/@babel/helper-create-regexp-features-plugin/",\ - "packageDependencies": [\ - ["@babel/helper-create-regexp-features-plugin", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2309bfa61407fc5584a6befef7c9652d31a81fd2d22a62f4f56fde5d8aaad70cc121f02855cc8bc8d7865037800ab96a605a695dc088fb4da535e3274b1bc01d#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-create-regexp-features-plugin-virtual-634aa22bf9/0/cache/@babel-helper-create-regexp-features-plugin-npm-7.18.6-96a83bc902-8864e3a89f.zip/node_modules/@babel/helper-create-regexp-features-plugin/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/helper-create-regexp-features-plugin", "virtual:2309bfa61407fc5584a6befef7c9652d31a81fd2d22a62f4f56fde5d8aaad70cc121f02855cc8bc8d7865037800ab96a605a695dc088fb4da535e3274b1bc01d#npm:7.18.6"],\ - ["@types/babel__core", null],\ - ["regexpu-core", "npm:5.1.0"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-define-polyfill-provider", [\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/@babel-helper-define-polyfill-provider-npm-0.3.2-bf05572988-5f6f7676de.zip/node_modules/@babel/helper-define-polyfill-provider/",\ - "packageDependencies": [\ - ["@babel/helper-define-polyfill-provider", "npm:0.3.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:622a10b85ff6ff549fdab08148e1702f05c38402252f08c9582af435a3e34602ad990ada82f1839e977eeef66a6ea46b09f045efccdbf9cd2018384f7324c185#npm:0.3.2", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-define-polyfill-provider-virtual-63f383bc2e/0/cache/@babel-helper-define-polyfill-provider-npm-0.3.2-bf05572988-5f6f7676de.zip/node_modules/@babel/helper-define-polyfill-provider/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-compilation-targets", "virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9"],\ - ["@babel/helper-define-polyfill-provider", "virtual:622a10b85ff6ff549fdab08148e1702f05c38402252f08c9582af435a3e34602ad990ada82f1839e977eeef66a6ea46b09f045efccdbf9cd2018384f7324c185#npm:0.3.2"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@types/babel__core", null],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["lodash.debounce", "npm:4.0.8"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-environment-visitor", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-environment-visitor-npm-7.18.9-9f5b3635a1-b25101f616.zip/node_modules/@babel/helper-environment-visitor/",\ - "packageDependencies": [\ - ["@babel/helper-environment-visitor", "npm:7.18.9"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.20", {\ - "packageLocation": "./.yarn/cache/@babel-helper-environment-visitor-npm-7.22.20-260909e014-d80ee98ff6.zip/node_modules/@babel/helper-environment-visitor/",\ - "packageDependencies": [\ - ["@babel/helper-environment-visitor", "npm:7.22.20"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-explode-assignable-expression", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.18.6-9b20d989e6-7f298a2572.zip/node_modules/@babel/helper-explode-assignable-expression/",\ - "packageDependencies": [\ - ["@babel/helper-explode-assignable-expression", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-function-name", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-function-name-npm-7.18.9-89df62ccc8-c133393a97.zip/node_modules/@babel/helper-function-name/",\ - "packageDependencies": [\ - ["@babel/helper-function-name", "npm:7.18.9"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.23.0", {\ - "packageLocation": "./.yarn/cache/@babel-helper-function-name-npm-7.23.0-ce38271242-7b2ae024cd.zip/node_modules/@babel/helper-function-name/",\ - "packageDependencies": [\ - ["@babel/helper-function-name", "npm:7.23.0"],\ - ["@babel/template", "npm:7.22.15"],\ - ["@babel/types", "npm:7.23.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-hoist-variables", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-hoist-variables-npm-7.18.6-6eb061f405-fd9c35bb43.zip/node_modules/@babel/helper-hoist-variables/",\ - "packageDependencies": [\ - ["@babel/helper-hoist-variables", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.5", {\ - "packageLocation": "./.yarn/cache/@babel-helper-hoist-variables-npm-7.22.5-6db3192347-394ca191b4.zip/node_modules/@babel/helper-hoist-variables/",\ - "packageDependencies": [\ - ["@babel/helper-hoist-variables", "npm:7.22.5"],\ - ["@babel/types", "npm:7.23.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-member-expression-to-functions", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.18.9-3d2128582a-3f69edfd91.zip/node_modules/@babel/helper-member-expression-to-functions/",\ - "packageDependencies": [\ - ["@babel/helper-member-expression-to-functions", "npm:7.18.9"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-module-imports", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-module-imports-npm-7.18.6-1031faa864-75b0d51027.zip/node_modules/@babel/helper-module-imports/",\ - "packageDependencies": [\ - ["@babel/helper-module-imports", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.3", {\ - "packageLocation": "./.yarn/cache/@babel-helper-module-imports-npm-7.24.3-edb733448b-42fe124130.zip/node_modules/@babel/helper-module-imports/",\ - "packageDependencies": [\ - ["@babel/helper-module-imports", "npm:7.24.3"],\ - ["@babel/types", "npm:7.24.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-module-transforms", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-module-transforms-npm-7.18.9-1405897f74-2e64d72340.zip/node_modules/@babel/helper-module-transforms/",\ - "packageDependencies": [\ - ["@babel/helper-environment-visitor", "npm:7.18.9"],\ - ["@babel/helper-module-imports", "npm:7.18.6"],\ - ["@babel/helper-module-transforms", "npm:7.18.9"],\ - ["@babel/helper-simple-access", "npm:7.18.6"],\ - ["@babel/helper-split-export-declaration", "npm:7.18.6"],\ - ["@babel/helper-validator-identifier", "npm:7.18.6"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.23.3", {\ - "packageLocation": "./.yarn/cache/@babel-helper-module-transforms-npm-7.23.3-69078a931c-583fa580f8.zip/node_modules/@babel/helper-module-transforms/",\ - "packageDependencies": [\ - ["@babel/helper-module-transforms", "npm:7.23.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:5e34d46aa74c70cb7efddf34af306cce3c5a77fafdbeb34016491b6c28ff1bafaca3f3ec18f3da9ee08c42afd1ceb5f551451330c94717f204e27e3872331d2f#npm:7.23.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-module-transforms-virtual-e7b48542e6/0/cache/@babel-helper-module-transforms-npm-7.23.3-69078a931c-583fa580f8.zip/node_modules/@babel/helper-module-transforms/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.24.4"],\ - ["@babel/helper-environment-visitor", "npm:7.22.20"],\ - ["@babel/helper-module-imports", "npm:7.24.3"],\ - ["@babel/helper-module-transforms", "virtual:5e34d46aa74c70cb7efddf34af306cce3c5a77fafdbeb34016491b6c28ff1bafaca3f3ec18f3da9ee08c42afd1ceb5f551451330c94717f204e27e3872331d2f#npm:7.23.3"],\ - ["@babel/helper-simple-access", "npm:7.22.5"],\ - ["@babel/helper-split-export-declaration", "npm:7.22.6"],\ - ["@babel/helper-validator-identifier", "npm:7.22.20"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-optimise-call-expression", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-optimise-call-expression-npm-7.18.6-65705387c4-e518fe8418.zip/node_modules/@babel/helper-optimise-call-expression/",\ - "packageDependencies": [\ - ["@babel/helper-optimise-call-expression", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-plugin-utils", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-plugin-utils-npm-7.18.9-00d0302512-ebae876cd6.zip/node_modules/@babel/helper-plugin-utils/",\ - "packageDependencies": [\ - ["@babel/helper-plugin-utils", "npm:7.18.9"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.0", {\ - "packageLocation": "./.yarn/cache/@babel-helper-plugin-utils-npm-7.24.0-24ea3c3608-dc8c7af321.zip/node_modules/@babel/helper-plugin-utils/",\ - "packageDependencies": [\ - ["@babel/helper-plugin-utils", "npm:7.24.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-remap-async-to-generator", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.18.9-c29d128186-4be6076192.zip/node_modules/@babel/helper-remap-async-to-generator/",\ - "packageDependencies": [\ - ["@babel/helper-remap-async-to-generator", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:de71fbeae229d103df0b0c1b759a3c7d8fa6981fa230877dc1712277650fb6b9d9ccc8eddd5874c0a3d1a21bcc5d220a5034be413ed9eafcf40bc7924335993d#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-remap-async-to-generator-virtual-da1a3566eb/0/cache/@babel-helper-remap-async-to-generator-npm-7.18.9-c29d128186-4be6076192.zip/node_modules/@babel/helper-remap-async-to-generator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/helper-environment-visitor", "npm:7.18.9"],\ - ["@babel/helper-remap-async-to-generator", "virtual:de71fbeae229d103df0b0c1b759a3c7d8fa6981fa230877dc1712277650fb6b9d9ccc8eddd5874c0a3d1a21bcc5d220a5034be413ed9eafcf40bc7924335993d#npm:7.18.9"],\ - ["@babel/helper-wrap-function", "npm:7.18.11"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-replace-supers", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-replace-supers-npm-7.18.9-90b3bab25c-d5e9a3a913.zip/node_modules/@babel/helper-replace-supers/",\ - "packageDependencies": [\ - ["@babel/helper-environment-visitor", "npm:7.18.9"],\ - ["@babel/helper-member-expression-to-functions", "npm:7.18.9"],\ - ["@babel/helper-optimise-call-expression", "npm:7.18.6"],\ - ["@babel/helper-replace-supers", "npm:7.18.9"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-simple-access", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-simple-access-npm-7.18.6-4ef4976ebe-37cd36eef1.zip/node_modules/@babel/helper-simple-access/",\ - "packageDependencies": [\ - ["@babel/helper-simple-access", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.5", {\ - "packageLocation": "./.yarn/cache/@babel-helper-simple-access-npm-7.22.5-0a3f578780-7d5430eecf.zip/node_modules/@babel/helper-simple-access/",\ - "packageDependencies": [\ - ["@babel/helper-simple-access", "npm:7.22.5"],\ - ["@babel/types", "npm:7.23.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-skip-transparent-expression-wrappers", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helper-skip-transparent-expression-wrappers-npm-7.18.9-25945bbc6b-19bd2bda97.zip/node_modules/@babel/helper-skip-transparent-expression-wrappers/",\ - "packageDependencies": [\ - ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.18.9"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-split-export-declaration", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-split-export-declaration-npm-7.18.6-53ebf8ad4c-c6d3dede53.zip/node_modules/@babel/helper-split-export-declaration/",\ - "packageDependencies": [\ - ["@babel/helper-split-export-declaration", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-split-export-declaration-npm-7.22.6-e723505aef-e141cace58.zip/node_modules/@babel/helper-split-export-declaration/",\ - "packageDependencies": [\ - ["@babel/helper-split-export-declaration", "npm:7.22.6"],\ - ["@babel/types", "npm:7.23.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-string-parser", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-helper-string-parser-npm-7.18.10-cf6fe67f9a-a126898b54.zip/node_modules/@babel/helper-string-parser/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.5", {\ - "packageLocation": "./.yarn/cache/@babel-helper-string-parser-npm-7.22.5-448ff0e489-7f275a7f1a.zip/node_modules/@babel/helper-string-parser/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.22.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.1", {\ - "packageLocation": "./.yarn/cache/@babel-helper-string-parser-npm-7.24.1-0a40ece7f8-04c0ede77b.zip/node_modules/@babel/helper-string-parser/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.24.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-validator-identifier", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-validator-identifier-npm-7.18.6-357e4653ab-9386e19302.zip/node_modules/@babel/helper-validator-identifier/",\ - "packageDependencies": [\ - ["@babel/helper-validator-identifier", "npm:7.18.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.19.1", {\ - "packageLocation": "./.yarn/cache/@babel-helper-validator-identifier-npm-7.19.1-d84f19e1dc-30ecd53b72.zip/node_modules/@babel/helper-validator-identifier/",\ - "packageDependencies": [\ - ["@babel/helper-validator-identifier", "npm:7.19.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.20", {\ - "packageLocation": "./.yarn/cache/@babel-helper-validator-identifier-npm-7.22.20-18305bb306-df882d2675.zip/node_modules/@babel/helper-validator-identifier/",\ - "packageDependencies": [\ - ["@babel/helper-validator-identifier", "npm:7.22.20"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-validator-option", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-helper-validator-option-npm-7.18.6-cc7d1a3315-f9cc6eb7cc.zip/node_modules/@babel/helper-validator-option/",\ - "packageDependencies": [\ - ["@babel/helper-validator-option", "npm:7.18.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.23.5", {\ - "packageLocation": "./.yarn/cache/@babel-helper-validator-option-npm-7.23.5-d83bbfe738-537cde2330.zip/node_modules/@babel/helper-validator-option/",\ - "packageDependencies": [\ - ["@babel/helper-validator-option", "npm:7.23.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helper-wrap-function", [\ - ["npm:7.18.11", {\ - "packageLocation": "./.yarn/cache/@babel-helper-wrap-function-npm-7.18.11-170b33a6a7-e2fb909cde.zip/node_modules/@babel/helper-wrap-function/",\ - "packageDependencies": [\ - ["@babel/helper-function-name", "npm:7.18.9"],\ - ["@babel/helper-wrap-function", "npm:7.18.11"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/helpers", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-helpers-npm-7.18.9-2efa3e417c-8949183b2e.zip/node_modules/@babel/helpers/",\ - "packageDependencies": [\ - ["@babel/helpers", "npm:7.18.9"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.4", {\ - "packageLocation": "./.yarn/cache/@babel-helpers-npm-7.24.4-2ebaac1a34-54a9d0f86f.zip/node_modules/@babel/helpers/",\ - "packageDependencies": [\ - ["@babel/helpers", "npm:7.24.4"],\ - ["@babel/template", "npm:7.24.0"],\ - ["@babel/traverse", "npm:7.24.1"],\ - ["@babel/types", "npm:7.24.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/highlight", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-highlight-npm-7.18.6-9d35ad2e27-92d8ee6154.zip/node_modules/@babel/highlight/",\ - "packageDependencies": [\ - ["@babel/helper-validator-identifier", "npm:7.18.6"],\ - ["@babel/highlight", "npm:7.18.6"],\ - ["chalk", "npm:2.4.2"],\ - ["js-tokens", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.20", {\ - "packageLocation": "./.yarn/cache/@babel-highlight-npm-7.22.20-5de7aba88d-1aabc95b2c.zip/node_modules/@babel/highlight/",\ - "packageDependencies": [\ - ["@babel/helper-validator-identifier", "npm:7.22.20"],\ - ["@babel/highlight", "npm:7.22.20"],\ - ["chalk", "npm:2.4.2"],\ - ["js-tokens", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.2", {\ - "packageLocation": "./.yarn/cache/@babel-highlight-npm-7.24.2-d2e9453f0c-4555124235.zip/node_modules/@babel/highlight/",\ - "packageDependencies": [\ - ["@babel/helper-validator-identifier", "npm:7.22.20"],\ - ["@babel/highlight", "npm:7.24.2"],\ - ["chalk", "npm:2.4.2"],\ - ["js-tokens", "npm:4.0.0"],\ - ["picocolors", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/parser", [\ - ["npm:7.18.11", {\ - "packageLocation": "./.yarn/cache/@babel-parser-npm-7.18.11-a2b80029aa-02cd2c235d.zip/node_modules/@babel/parser/",\ - "packageDependencies": [\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.23.0", {\ - "packageLocation": "./.yarn/cache/@babel-parser-npm-7.23.0-8a7b151672-201641e068.zip/node_modules/@babel/parser/",\ - "packageDependencies": [\ - ["@babel/parser", "npm:7.23.0"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.4", {\ - "packageLocation": "./.yarn/cache/@babel-parser-npm-7.24.4-f329cbb36f-3742cc5068.zip/node_modules/@babel/parser/",\ - "packageDependencies": [\ - ["@babel/parser", "npm:7.24.4"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.18.6-f7c2554216-845bd280c5.zip/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/",\ - "packageDependencies": [\ - ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-virtual-a3017d6c6f/0/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.18.6-f7c2554216-845bd280c5.zip/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.18.9-4ab877f7f6-93abb5cb17.zip/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-virtual-8b932b454c/0/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.18.9-4ab877f7f6-93abb5cb17.zip/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.18.9"],\ - ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-proposal-optional-chaining", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-async-generator-functions", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.18.10-989de7a51c-3a6c250850.zip/node_modules/@babel/plugin-proposal-async-generator-functions/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-async-generator-functions", "npm:7.18.10"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.10", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-async-generator-functions-virtual-de71fbeae2/0/cache/@babel-plugin-proposal-async-generator-functions-npm-7.18.10-989de7a51c-3a6c250850.zip/node_modules/@babel/plugin-proposal-async-generator-functions/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-environment-visitor", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-remap-async-to-generator", "virtual:de71fbeae229d103df0b0c1b759a3c7d8fa6981fa230877dc1712277650fb6b9d9ccc8eddd5874c0a3d1a21bcc5d220a5034be413ed9eafcf40bc7924335993d#npm:7.18.9"],\ - ["@babel/plugin-proposal-async-generator-functions", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.10"],\ - ["@babel/plugin-syntax-async-generators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-class-properties", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.18.6-5f5c2d730f-49a78a2773.zip/node_modules/@babel/plugin-proposal-class-properties/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-class-properties", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-class-properties-virtual-aba18254a3/0/cache/@babel-plugin-proposal-class-properties-npm-7.18.6-5f5c2d730f-49a78a2773.zip/node_modules/@babel/plugin-proposal-class-properties/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-class-features-plugin", "virtual:aba18254a34b9b2b7d6b5f46dc92407e016daacb18f300ff91c36cc94b1d99dc3760cf8fc53ee8a3abdb843fa5a11e476f9a69a9d9a470d1706b00978c7a6a25#npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-class-static-block", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.6-abe0aa00be-b8d7ae99ed.zip/node_modules/@babel/plugin-proposal-class-static-block/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-class-static-block", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-class-static-block-virtual-876ec9e684/0/cache/@babel-plugin-proposal-class-static-block-npm-7.18.6-abe0aa00be-b8d7ae99ed.zip/node_modules/@babel/plugin-proposal-class-static-block/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-class-features-plugin", "virtual:aba18254a34b9b2b7d6b5f46dc92407e016daacb18f300ff91c36cc94b1d99dc3760cf8fc53ee8a3abdb843fa5a11e476f9a69a9d9a470d1706b00978c7a6a25#npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-class-static-block", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-class-static-block", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-dynamic-import", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-dynamic-import-npm-7.18.6-73822d1a00-96b1c8a8ad.zip/node_modules/@babel/plugin-proposal-dynamic-import/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-dynamic-import", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-dynamic-import-virtual-a5fefed88b/0/cache/@babel-plugin-proposal-dynamic-import-npm-7.18.6-73822d1a00-96b1c8a8ad.zip/node_modules/@babel/plugin-proposal-dynamic-import/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-dynamic-import", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-dynamic-import", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-export-namespace-from", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.18.9-6093116864-84ff22bacc.zip/node_modules/@babel/plugin-proposal-export-namespace-from/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-export-namespace-from", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-export-namespace-from-virtual-478d86c67d/0/cache/@babel-plugin-proposal-export-namespace-from-npm-7.18.9-6093116864-84ff22bacc.zip/node_modules/@babel/plugin-proposal-export-namespace-from/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-export-namespace-from", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-syntax-export-namespace-from", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-json-strings", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.18.6-af58bc33f9-25ba0e6b9d.zip/node_modules/@babel/plugin-proposal-json-strings/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-json-strings", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-json-strings-virtual-82704ad113/0/cache/@babel-plugin-proposal-json-strings-npm-7.18.6-af58bc33f9-25ba0e6b9d.zip/node_modules/@babel/plugin-proposal-json-strings/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-json-strings", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-json-strings", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-logical-assignment-operators", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.18.9-53329219f5-dd87fa4a48.zip/node_modules/@babel/plugin-proposal-logical-assignment-operators/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-logical-assignment-operators", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-logical-assignment-operators-virtual-2d5ce04e2a/0/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.18.9-53329219f5-dd87fa4a48.zip/node_modules/@babel/plugin-proposal-logical-assignment-operators/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-logical-assignment-operators", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-syntax-logical-assignment-operators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-nullish-coalescing-operator", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.18.6-cf22ea8526-949c9ddcde.zip/node_modules/@babel/plugin-proposal-nullish-coalescing-operator/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-nullish-coalescing-operator", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-nullish-coalescing-operator-virtual-7cca431dfb/0/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.18.6-cf22ea8526-949c9ddcde.zip/node_modules/@babel/plugin-proposal-nullish-coalescing-operator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-nullish-coalescing-operator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-numeric-separator", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-numeric-separator-npm-7.18.6-cfcd55888a-f370ea584c.zip/node_modules/@babel/plugin-proposal-numeric-separator/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-numeric-separator", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-numeric-separator-virtual-9eb257c7ad/0/cache/@babel-plugin-proposal-numeric-separator-npm-7.18.6-cfcd55888a-f370ea584c.zip/node_modules/@babel/plugin-proposal-numeric-separator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-numeric-separator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-numeric-separator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-object-rest-spread", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.18.9-9df6f4ecf8-acc6b16f20.zip/node_modules/@babel/plugin-proposal-object-rest-spread/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-object-rest-spread", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-object-rest-spread-virtual-754bbd5c9b/0/cache/@babel-plugin-proposal-object-rest-spread-npm-7.18.9-9df6f4ecf8-acc6b16f20.zip/node_modules/@babel/plugin-proposal-object-rest-spread/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.18.8"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-compilation-targets", "virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.8.3"],\ - ["@babel/plugin-transform-parameters", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-optional-catch-binding", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.18.6-a4235a25be-7b5b39fb5d.zip/node_modules/@babel/plugin-proposal-optional-catch-binding/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-optional-catch-binding", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-optional-catch-binding-virtual-cad71518b6/0/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.18.6-a4235a25be-7b5b39fb5d.zip/node_modules/@babel/plugin-proposal-optional-catch-binding/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-optional-catch-binding", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-optional-catch-binding", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-optional-chaining", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.18.9-f7302c42f9-a822140947.zip/node_modules/@babel/plugin-proposal-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-optional-chaining", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-optional-chaining-virtual-2ff2d21a93/0/cache/@babel-plugin-proposal-optional-chaining-npm-7.18.9-f7302c42f9-a822140947.zip/node_modules/@babel/plugin-proposal-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.18.9"],\ - ["@babel/plugin-proposal-optional-chaining", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-syntax-optional-chaining", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-private-methods", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.18.6-55729207b7-22d8502ee9.zip/node_modules/@babel/plugin-proposal-private-methods/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-private-methods", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-private-methods-virtual-275d3205b2/0/cache/@babel-plugin-proposal-private-methods-npm-7.18.6-55729207b7-22d8502ee9.zip/node_modules/@babel/plugin-proposal-private-methods/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-class-features-plugin", "virtual:aba18254a34b9b2b7d6b5f46dc92407e016daacb18f300ff91c36cc94b1d99dc3760cf8fc53ee8a3abdb843fa5a11e476f9a69a9d9a470d1706b00978c7a6a25#npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-private-methods", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-private-property-in-object", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.18.6-755223e615-c8e56a9729.zip/node_modules/@babel/plugin-proposal-private-property-in-object/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-private-property-in-object", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-private-property-in-object-virtual-2f166e9ecb/0/cache/@babel-plugin-proposal-private-property-in-object-npm-7.18.6-755223e615-c8e56a9729.zip/node_modules/@babel/plugin-proposal-private-property-in-object/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/helper-create-class-features-plugin", "virtual:aba18254a34b9b2b7d6b5f46dc92407e016daacb18f300ff91c36cc94b1d99dc3760cf8fc53ee8a3abdb843fa5a11e476f9a69a9d9a470d1706b00978c7a6a25#npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-private-property-in-object", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-private-property-in-object", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-proposal-unicode-property-regex", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.18.6-3a6294aa39-a8575ecb7f.zip/node_modules/@babel/plugin-proposal-unicode-property-regex/",\ - "packageDependencies": [\ - ["@babel/plugin-proposal-unicode-property-regex", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-unicode-property-regex-virtual-2309bfa614/0/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.18.6-3a6294aa39-a8575ecb7f.zip/node_modules/@babel/plugin-proposal-unicode-property-regex/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-regexp-features-plugin", "virtual:2309bfa61407fc5584a6befef7c9652d31a81fd2d22a62f4f56fde5d8aaad70cc121f02855cc8bc8d7865037800ab96a605a695dc088fb4da535e3274b1bc01d#npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-unicode-property-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-async-generators", [\ - ["npm:7.8.4", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-7ed1c1d9b9.zip/node_modules/@babel/plugin-syntax-async-generators/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-async-generators", "npm:7.8.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-async-generators-virtual-f56dc93050/0/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-7ed1c1d9b9.zip/node_modules/@babel/plugin-syntax-async-generators/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-async-generators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-async-generators-virtual-d0c79eb0fb/0/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-7ed1c1d9b9.zip/node_modules/@babel/plugin-syntax-async-generators/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-async-generators", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.4"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-bigint", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip/node_modules/@babel/plugin-syntax-bigint/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-bigint", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-bigint-virtual-2c2bebd24d/0/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip/node_modules/@babel/plugin-syntax-bigint/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-bigint", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-bigint-virtual-7efcfa015d/0/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip/node_modules/@babel/plugin-syntax-bigint/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-bigint", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-class-properties", [\ - ["npm:7.12.13", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-24f34b196d.zip/node_modules/@babel/plugin-syntax-class-properties/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-class-properties", "npm:7.12.13"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.12.13", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-class-properties-virtual-734539d6cb/0/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-24f34b196d.zip/node_modules/@babel/plugin-syntax-class-properties/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-class-properties", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.12.13"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.12.13", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-class-properties-virtual-fd01c56bb8/0/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-24f34b196d.zip/node_modules/@babel/plugin-syntax-class-properties/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.12.13"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-class-static-block", [\ - ["npm:7.14.5", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-3e80814b5b.zip/node_modules/@babel/plugin-syntax-class-static-block/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-class-static-block", "npm:7.14.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-class-static-block-virtual-6d493b641c/0/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-3e80814b5b.zip/node_modules/@babel/plugin-syntax-class-static-block/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-class-static-block", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-dynamic-import", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-ce307af83c.zip/node_modules/@babel/plugin-syntax-dynamic-import/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-dynamic-import", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-dynamic-import-virtual-7c3be93bb8/0/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-ce307af83c.zip/node_modules/@babel/plugin-syntax-dynamic-import/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-dynamic-import", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-export-namespace-from", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-85740478be.zip/node_modules/@babel/plugin-syntax-export-namespace-from/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-export-namespace-from", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-export-namespace-from-virtual-931df57298/0/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-85740478be.zip/node_modules/@babel/plugin-syntax-export-namespace-from/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-export-namespace-from", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-flow", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-flow-npm-7.18.6-4d4d494639-abe82062b3.zip/node_modules/@babel/plugin-syntax-flow/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-flow", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-flow-virtual-f1932545a7/0/cache/@babel-plugin-syntax-flow-npm-7.18.6-4d4d494639-abe82062b3.zip/node_modules/@babel/plugin-syntax-flow/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-flow", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-import-assertions", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.18.6-b2578fc1d0-15feccba34.zip/node_modules/@babel/plugin-syntax-import-assertions/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-import-assertions", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:7.24.1", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.24.1-70d4eb103e-2a463928a6.zip/node_modules/@babel/plugin-syntax-import-assertions/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-import-assertions", "npm:7.24.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:22ad24226385078c74141223ef7b11769d4474eceb19a8cd7e3355fb14f594d29f98db4bdf482d835617497bbd39156c3e4aaf815d4dfd0d40a4846a300e01a0#npm:7.24.1", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-assertions-virtual-2f5df3b01b/0/cache/@babel-plugin-syntax-import-assertions-npm-7.24.1-70d4eb103e-2a463928a6.zip/node_modules/@babel/plugin-syntax-import-assertions/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.24.4"],\ - ["@babel/helper-plugin-utils", "npm:7.24.0"],\ - ["@babel/plugin-syntax-import-assertions", "virtual:22ad24226385078c74141223ef7b11769d4474eceb19a8cd7e3355fb14f594d29f98db4bdf482d835617497bbd39156c3e4aaf815d4dfd0d40a4846a300e01a0#npm:7.24.1"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-assertions-virtual-663c104f2e/0/cache/@babel-plugin-syntax-import-assertions-npm-7.18.6-b2578fc1d0-15feccba34.zip/node_modules/@babel/plugin-syntax-import-assertions/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-import-assertions", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-import-meta", [\ - ["npm:7.10.4", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-166ac1125d.zip/node_modules/@babel/plugin-syntax-import-meta/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-import-meta", "npm:7.10.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-meta-virtual-e119a59eff/0/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-166ac1125d.zip/node_modules/@babel/plugin-syntax-import-meta/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-import-meta", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-meta-virtual-4aee704b94/0/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-166ac1125d.zip/node_modules/@babel/plugin-syntax-import-meta/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-import-meta", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-json-strings", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-bf5aea1f31.zip/node_modules/@babel/plugin-syntax-json-strings/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-json-strings", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-json-strings-virtual-88756fa7e0/0/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-bf5aea1f31.zip/node_modules/@babel/plugin-syntax-json-strings/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-json-strings", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-json-strings-virtual-ec3c0e1f56/0/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-bf5aea1f31.zip/node_modules/@babel/plugin-syntax-json-strings/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-json-strings", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-jsx", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-jsx-npm-7.18.6-3e378d5f11-6d37ea9729.zip/node_modules/@babel/plugin-syntax-jsx/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-jsx", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-jsx-virtual-8cf2e6131e/0/cache/@babel-plugin-syntax-jsx-npm-7.18.6-3e378d5f11-6d37ea9729.zip/node_modules/@babel/plugin-syntax-jsx/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-jsx", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-logical-assignment-operators", [\ - ["npm:7.10.4", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-logical-assignment-operators", "npm:7.10.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-logical-assignment-operators-virtual-172c439a83/0/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-logical-assignment-operators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-logical-assignment-operators-virtual-da1f91d1c0/0/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-logical-assignment-operators", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-87aca49189.zip/node_modules/@babel/plugin-syntax-nullish-coalescing-operator/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-nullish-coalescing-operator-virtual-a9438b4e9a/0/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-87aca49189.zip/node_modules/@babel/plugin-syntax-nullish-coalescing-operator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-nullish-coalescing-operator-virtual-e7041e6996/0/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-87aca49189.zip/node_modules/@babel/plugin-syntax-nullish-coalescing-operator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-numeric-separator", [\ - ["npm:7.10.4", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-01ec5547bd.zip/node_modules/@babel/plugin-syntax-numeric-separator/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-numeric-separator", "npm:7.10.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-numeric-separator-virtual-43f7931dcb/0/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-01ec5547bd.zip/node_modules/@babel/plugin-syntax-numeric-separator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-numeric-separator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-numeric-separator-virtual-3672570fe4/0/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-01ec5547bd.zip/node_modules/@babel/plugin-syntax-numeric-separator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-numeric-separator", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-object-rest-spread", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-fddcf581a5.zip/node_modules/@babel/plugin-syntax-object-rest-spread/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-object-rest-spread", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-object-rest-spread-virtual-8b2998a22a/0/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-fddcf581a5.zip/node_modules/@babel/plugin-syntax-object-rest-spread/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-object-rest-spread-virtual-aacf97adee/0/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-fddcf581a5.zip/node_modules/@babel/plugin-syntax-object-rest-spread/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-optional-catch-binding", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-910d90e72b.zip/node_modules/@babel/plugin-syntax-optional-catch-binding/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-optional-catch-binding", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-optional-catch-binding-virtual-58e241fc45/0/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-910d90e72b.zip/node_modules/@babel/plugin-syntax-optional-catch-binding/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-optional-catch-binding", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-optional-catch-binding-virtual-3f38a941d3/0/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-910d90e72b.zip/node_modules/@babel/plugin-syntax-optional-catch-binding/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-optional-catch-binding", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-optional-chaining", [\ - ["npm:7.8.3", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-eef94d53a1.zip/node_modules/@babel/plugin-syntax-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-optional-chaining", "npm:7.8.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-optional-chaining-virtual-95389e165b/0/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-eef94d53a1.zip/node_modules/@babel/plugin-syntax-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-optional-chaining", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-optional-chaining-virtual-40adef8ff3/0/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-eef94d53a1.zip/node_modules/@babel/plugin-syntax-optional-chaining/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-optional-chaining", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-private-property-in-object", [\ - ["npm:7.14.5", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-b317174783.zip/node_modules/@babel/plugin-syntax-private-property-in-object/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-private-property-in-object", "npm:7.14.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-private-property-in-object-virtual-08d49fc0e9/0/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-b317174783.zip/node_modules/@babel/plugin-syntax-private-property-in-object/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-private-property-in-object", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-top-level-await", [\ - ["npm:7.14.5", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-top-level-await-npm-7.14.5-60a0a2e83b-bbd1a56b09.zip/node_modules/@babel/plugin-syntax-top-level-await/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-top-level-await", "npm:7.14.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.14.5", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-top-level-await-virtual-88c9045f1b/0/cache/@babel-plugin-syntax-top-level-await-npm-7.14.5-60a0a2e83b-bbd1a56b09.zip/node_modules/@babel/plugin-syntax-top-level-await/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-top-level-await", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.14.5"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.14.5", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-top-level-await-virtual-0ea869ac47/0/cache/@babel-plugin-syntax-top-level-await-npm-7.14.5-60a0a2e83b-bbd1a56b09.zip/node_modules/@babel/plugin-syntax-top-level-await/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-top-level-await", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.14.5"],\ - ["@types/babel__core", "npm:7.1.19"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-syntax-typescript", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-syntax-typescript-npm-7.18.6-4ad9dd7d2a-2cde73725e.zip/node_modules/@babel/plugin-syntax-typescript/",\ - "packageDependencies": [\ - ["@babel/plugin-syntax-typescript", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9e09885f9230460743134ac3f855149d037f404c5fef36fab473527d42c6f22166530bb1cd3d50372a4ee47440322e9e4fa8cec9356b06e975558682285157dd#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-typescript-virtual-1ae07258c7/0/cache/@babel-plugin-syntax-typescript-npm-7.18.6-4ad9dd7d2a-2cde73725e.zip/node_modules/@babel/plugin-syntax-typescript/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-typescript", "virtual:9e09885f9230460743134ac3f855149d037f404c5fef36fab473527d42c6f22166530bb1cd3d50372a4ee47440322e9e4fa8cec9356b06e975558682285157dd#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-arrow-functions", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.18.6-ffcfe88ab6-900f5c6957.zip/node_modules/@babel/plugin-transform-arrow-functions/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-arrow-functions", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-arrow-functions-virtual-df7e95a17e/0/cache/@babel-plugin-transform-arrow-functions-npm-7.18.6-ffcfe88ab6-900f5c6957.zip/node_modules/@babel/plugin-transform-arrow-functions/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-arrow-functions", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-async-to-generator", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.18.6-17dc8a459f-c2cca47468.zip/node_modules/@babel/plugin-transform-async-to-generator/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-async-to-generator", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-async-to-generator-virtual-7633290e81/0/cache/@babel-plugin-transform-async-to-generator-npm-7.18.6-17dc8a459f-c2cca47468.zip/node_modules/@babel/plugin-transform-async-to-generator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-module-imports", "npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-remap-async-to-generator", "virtual:de71fbeae229d103df0b0c1b759a3c7d8fa6981fa230877dc1712277650fb6b9d9ccc8eddd5874c0a3d1a21bcc5d220a5034be413ed9eafcf40bc7924335993d#npm:7.18.9"],\ - ["@babel/plugin-transform-async-to-generator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-block-scoped-functions", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-block-scoped-functions-npm-7.18.6-34b3375353-0a0df61f94.zip/node_modules/@babel/plugin-transform-block-scoped-functions/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-block-scoped-functions", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-block-scoped-functions-virtual-f33ea33990/0/cache/@babel-plugin-transform-block-scoped-functions-npm-7.18.6-34b3375353-0a0df61f94.zip/node_modules/@babel/plugin-transform-block-scoped-functions/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-block-scoped-functions", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-block-scoping", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.18.9-9ba425a161-c8495bc3f0.zip/node_modules/@babel/plugin-transform-block-scoping/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-block-scoping", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-block-scoping-virtual-2782efdafc/0/cache/@babel-plugin-transform-block-scoping-npm-7.18.9-9ba425a161-c8495bc3f0.zip/node_modules/@babel/plugin-transform-block-scoping/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-block-scoping", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-classes", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-classes-npm-7.18.9-cac3a4f399-78b40ec535.zip/node_modules/@babel/plugin-transform-classes/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-classes", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-classes-virtual-4018352ed6/0/cache/@babel-plugin-transform-classes-npm-7.18.9-cac3a4f399-78b40ec535.zip/node_modules/@babel/plugin-transform-classes/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/helper-environment-visitor", "npm:7.18.9"],\ - ["@babel/helper-function-name", "npm:7.18.9"],\ - ["@babel/helper-optimise-call-expression", "npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-replace-supers", "npm:7.18.9"],\ - ["@babel/helper-split-export-declaration", "npm:7.18.6"],\ - ["@babel/plugin-transform-classes", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null],\ - ["globals", "npm:11.12.0"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-computed-properties", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.18.9-bc774f46b8-16e2820b67.zip/node_modules/@babel/plugin-transform-computed-properties/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-computed-properties", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-computed-properties-virtual-4674dd6735/0/cache/@babel-plugin-transform-computed-properties-npm-7.18.9-bc774f46b8-16e2820b67.zip/node_modules/@babel/plugin-transform-computed-properties/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-computed-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-destructuring", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-destructuring-npm-7.18.9-7bc301ee69-4a08cef916.zip/node_modules/@babel/plugin-transform-destructuring/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-destructuring", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-destructuring-virtual-35da9a57a7/0/cache/@babel-plugin-transform-destructuring-npm-7.18.9-7bc301ee69-4a08cef916.zip/node_modules/@babel/plugin-transform-destructuring/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-destructuring", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-dotall-regex", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.18.6-6cf8766a0f-cbe5d7063e.zip/node_modules/@babel/plugin-transform-dotall-regex/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-dotall-regex", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-dotall-regex-virtual-d63a46d898/0/cache/@babel-plugin-transform-dotall-regex-npm-7.18.6-6cf8766a0f-cbe5d7063e.zip/node_modules/@babel/plugin-transform-dotall-regex/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-regexp-features-plugin", "virtual:2309bfa61407fc5584a6befef7c9652d31a81fd2d22a62f4f56fde5d8aaad70cc121f02855cc8bc8d7865037800ab96a605a695dc088fb4da535e3274b1bc01d#npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-dotall-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-duplicate-keys", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.18.9-5c77fd31ac-220bf4a9fe.zip/node_modules/@babel/plugin-transform-duplicate-keys/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-duplicate-keys", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-duplicate-keys-virtual-2480565cfe/0/cache/@babel-plugin-transform-duplicate-keys-npm-7.18.9-5c77fd31ac-220bf4a9fe.zip/node_modules/@babel/plugin-transform-duplicate-keys/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-duplicate-keys", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-exponentiation-operator", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.18.6-2c202b4eb5-7f70222f68.zip/node_modules/@babel/plugin-transform-exponentiation-operator/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-exponentiation-operator", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-exponentiation-operator-virtual-aae88eb344/0/cache/@babel-plugin-transform-exponentiation-operator-npm-7.18.6-2c202b4eb5-7f70222f68.zip/node_modules/@babel/plugin-transform-exponentiation-operator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-builder-binary-assignment-operator-visitor", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-exponentiation-operator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-flow-strip-types", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-flow-strip-types-npm-7.18.9-26367fad32-f25fe67b49.zip/node_modules/@babel/plugin-transform-flow-strip-types/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-flow-strip-types", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-flow-strip-types-virtual-e3c25eab0e/0/cache/@babel-plugin-transform-flow-strip-types-npm-7.18.9-26367fad32-f25fe67b49.zip/node_modules/@babel/plugin-transform-flow-strip-types/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-flow", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-flow-strip-types", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-for-of", [\ - ["npm:7.18.8", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-for-of-npm-7.18.8-ae76b5daf1-03073bdb5e.zip/node_modules/@babel/plugin-transform-for-of/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-for-of", "npm:7.18.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-for-of-virtual-e795163ee8/0/cache/@babel-plugin-transform-for-of-npm-7.18.8-ae76b5daf1-03073bdb5e.zip/node_modules/@babel/plugin-transform-for-of/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-for-of", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-function-name", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-function-name-npm-7.18.9-4e425dceeb-62dd9c6cdc.zip/node_modules/@babel/plugin-transform-function-name/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-function-name", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-function-name-virtual-81cd7b87ac/0/cache/@babel-plugin-transform-function-name-npm-7.18.9-4e425dceeb-62dd9c6cdc.zip/node_modules/@babel/plugin-transform-function-name/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-compilation-targets", "virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9"],\ - ["@babel/helper-function-name", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-function-name", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-literals", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-literals-npm-7.18.9-d87aa5e6d7-3458dd2f1a.zip/node_modules/@babel/plugin-transform-literals/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-literals", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-literals-virtual-7dfa6f90b8/0/cache/@babel-plugin-transform-literals-npm-7.18.9-d87aa5e6d7-3458dd2f1a.zip/node_modules/@babel/plugin-transform-literals/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-member-expression-literals", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-member-expression-literals-npm-7.18.6-a4d6fae7df-35a3d04f66.zip/node_modules/@babel/plugin-transform-member-expression-literals/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-member-expression-literals", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-member-expression-literals-virtual-737c1022b5/0/cache/@babel-plugin-transform-member-expression-literals-npm-7.18.6-a4d6fae7df-35a3d04f66.zip/node_modules/@babel/plugin-transform-member-expression-literals/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-member-expression-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-modules-amd", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.6-bb510ab5c3-f60c4c4e0e.zip/node_modules/@babel/plugin-transform-modules-amd/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-modules-amd", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-amd-virtual-6d7c772e9d/0/cache/@babel-plugin-transform-modules-amd-npm-7.18.6-bb510ab5c3-f60c4c4e0e.zip/node_modules/@babel/plugin-transform-modules-amd/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-module-transforms", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-modules-amd", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null],\ - ["babel-plugin-dynamic-import-node", "npm:2.3.3"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-modules-commonjs", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.18.6-1e83be3fa4-e088f319c9.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-modules-commonjs", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-commonjs-virtual-ed2b2ab320/0/cache/@babel-plugin-transform-modules-commonjs-npm-7.18.6-1e83be3fa4-e088f319c9.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-module-transforms", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-simple-access", "npm:7.18.6"],\ - ["@babel/plugin-transform-modules-commonjs", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null],\ - ["babel-plugin-dynamic-import-node", "npm:2.3.3"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-modules-systemjs", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.9-9ded98c00e-22a28b5002.zip/node_modules/@babel/plugin-transform-modules-systemjs/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-modules-systemjs", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-systemjs-virtual-0219258012/0/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.9-9ded98c00e-22a28b5002.zip/node_modules/@babel/plugin-transform-modules-systemjs/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-hoist-variables", "npm:7.18.6"],\ - ["@babel/helper-module-transforms", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-validator-identifier", "npm:7.18.6"],\ - ["@babel/plugin-transform-modules-systemjs", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@types/babel__core", null],\ - ["babel-plugin-dynamic-import-node", "npm:2.3.3"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-modules-umd", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.6-d649b47a80-664367f26f.zip/node_modules/@babel/plugin-transform-modules-umd/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-modules-umd", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-umd-virtual-fc0da86f80/0/cache/@babel-plugin-transform-modules-umd-npm-7.18.6-d649b47a80-664367f26f.zip/node_modules/@babel/plugin-transform-modules-umd/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-module-transforms", "npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-modules-umd", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-named-capturing-groups-regex", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.18.6-dc604756da-6ef64aa3da.zip/node_modules/@babel/plugin-transform-named-capturing-groups-regex/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-named-capturing-groups-regex", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-named-capturing-groups-regex-virtual-fd6ee00768/0/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.18.6-dc604756da-6ef64aa3da.zip/node_modules/@babel/plugin-transform-named-capturing-groups-regex/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-regexp-features-plugin", "virtual:2309bfa61407fc5584a6befef7c9652d31a81fd2d22a62f4f56fde5d8aaad70cc121f02855cc8bc8d7865037800ab96a605a695dc088fb4da535e3274b1bc01d#npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-named-capturing-groups-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-new-target", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-new-target-npm-7.18.6-1067ae195f-bd780e14f4.zip/node_modules/@babel/plugin-transform-new-target/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-new-target", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-new-target-virtual-b090dcd9e3/0/cache/@babel-plugin-transform-new-target-npm-7.18.6-1067ae195f-bd780e14f4.zip/node_modules/@babel/plugin-transform-new-target/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-new-target", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-object-super", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-object-super-npm-7.18.6-d30d73d9fb-0fcb04e15d.zip/node_modules/@babel/plugin-transform-object-super/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-object-super", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-object-super-virtual-56a0512f04/0/cache/@babel-plugin-transform-object-super-npm-7.18.6-d30d73d9fb-0fcb04e15d.zip/node_modules/@babel/plugin-transform-object-super/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-replace-supers", "npm:7.18.9"],\ - ["@babel/plugin-transform-object-super", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-parameters", [\ - ["npm:7.18.8", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-parameters-npm-7.18.8-4c778bfd7e-afe0d687ab.zip/node_modules/@babel/plugin-transform-parameters/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-parameters", "npm:7.18.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-parameters-virtual-516e90711e/0/cache/@babel-plugin-transform-parameters-npm-7.18.8-4c778bfd7e-afe0d687ab.zip/node_modules/@babel/plugin-transform-parameters/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-parameters", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-property-literals", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-property-literals-npm-7.18.6-e5f7030fd5-1c16e64de5.zip/node_modules/@babel/plugin-transform-property-literals/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-property-literals", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-property-literals-virtual-7671d9e826/0/cache/@babel-plugin-transform-property-literals-npm-7.18.6-e5f7030fd5-1c16e64de5.zip/node_modules/@babel/plugin-transform-property-literals/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-property-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-react-display-name", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-react-display-name-npm-7.18.6-dad446a24b-51c087ab9e.zip/node_modules/@babel/plugin-transform-react-display-name/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-react-display-name", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-display-name-virtual-8b14971a64/0/cache/@babel-plugin-transform-react-display-name-npm-7.18.6-dad446a24b-51c087ab9e.zip/node_modules/@babel/plugin-transform-react-display-name/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-react-display-name", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-react-jsx", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.18.10-44e844357e-e93ab1332f.zip/node_modules/@babel/plugin-transform-react-jsx/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-react-jsx", "npm:7.18.10"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.10", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-jsx-virtual-6bfe350a0b/0/cache/@babel-plugin-transform-react-jsx-npm-7.18.10-44e844357e-e93ab1332f.zip/node_modules/@babel/plugin-transform-react-jsx/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-annotate-as-pure", "npm:7.18.6"],\ - ["@babel/helper-module-imports", "npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-syntax-jsx", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-react-jsx", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.10"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-regenerator", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.6-176f080664-60bd482cb0.zip/node_modules/@babel/plugin-transform-regenerator/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-regenerator", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-regenerator-virtual-b8847d91e3/0/cache/@babel-plugin-transform-regenerator-npm-7.18.6-176f080664-60bd482cb0.zip/node_modules/@babel/plugin-transform-regenerator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-regenerator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null],\ - ["regenerator-transform", "npm:0.15.0"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-reserved-words", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.18.6-9136c5120e-0738cdc30a.zip/node_modules/@babel/plugin-transform-reserved-words/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-reserved-words", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-reserved-words-virtual-eaabfa7070/0/cache/@babel-plugin-transform-reserved-words-npm-7.18.6-9136c5120e-0738cdc30a.zip/node_modules/@babel/plugin-transform-reserved-words/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-reserved-words", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-shorthand-properties", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-shorthand-properties-npm-7.18.6-ceff6bef39-b8e4e8acc2.zip/node_modules/@babel/plugin-transform-shorthand-properties/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-shorthand-properties", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-shorthand-properties-virtual-1e2a98a489/0/cache/@babel-plugin-transform-shorthand-properties-npm-7.18.6-ceff6bef39-b8e4e8acc2.zip/node_modules/@babel/plugin-transform-shorthand-properties/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-shorthand-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-spread", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-spread-npm-7.18.9-bc56807a9f-22bc50375e.zip/node_modules/@babel/plugin-transform-spread/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-spread", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-spread-virtual-108528a2ee/0/cache/@babel-plugin-transform-spread-npm-7.18.9-bc56807a9f-22bc50375e.zip/node_modules/@babel/plugin-transform-spread/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.18.9"],\ - ["@babel/plugin-transform-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-sticky-regex", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.18.6-a75414f831-68ea18884a.zip/node_modules/@babel/plugin-transform-sticky-regex/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-sticky-regex", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-sticky-regex-virtual-2701411b25/0/cache/@babel-plugin-transform-sticky-regex-npm-7.18.6-a75414f831-68ea18884a.zip/node_modules/@babel/plugin-transform-sticky-regex/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-sticky-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-template-literals", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-template-literals-npm-7.18.9-787bf6a528-3d2fcd79b7.zip/node_modules/@babel/plugin-transform-template-literals/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-template-literals", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-template-literals-virtual-6dff71d840/0/cache/@babel-plugin-transform-template-literals-npm-7.18.9-787bf6a528-3d2fcd79b7.zip/node_modules/@babel/plugin-transform-template-literals/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-template-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-typeof-symbol", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.18.9-0775d325d9-e754e0d8b8.zip/node_modules/@babel/plugin-transform-typeof-symbol/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-typeof-symbol", "npm:7.18.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-typeof-symbol-virtual-9319962ebe/0/cache/@babel-plugin-transform-typeof-symbol-npm-7.18.9-0775d325d9-e754e0d8b8.zip/node_modules/@babel/plugin-transform-typeof-symbol/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-typeof-symbol", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-unicode-escapes", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-unicode-escapes-npm-7.18.10-83a00fbee1-f5baca55cb.zip/node_modules/@babel/plugin-transform-unicode-escapes/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-unicode-escapes", "npm:7.18.10"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.10", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-unicode-escapes-virtual-4d21706481/0/cache/@babel-plugin-transform-unicode-escapes-npm-7.18.10-83a00fbee1-f5baca55cb.zip/node_modules/@babel/plugin-transform-unicode-escapes/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-unicode-escapes", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.10"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/plugin-transform-unicode-regex", [\ - ["npm:7.18.6", {\ - "packageLocation": "./.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.18.6-0f8a7395d6-d9e18d5753.zip/node_modules/@babel/plugin-transform-unicode-regex/",\ - "packageDependencies": [\ - ["@babel/plugin-transform-unicode-regex", "npm:7.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-unicode-regex-virtual-e5900194c3/0/cache/@babel-plugin-transform-unicode-regex-npm-7.18.6-0f8a7395d6-d9e18d5753.zip/node_modules/@babel/plugin-transform-unicode-regex/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-create-regexp-features-plugin", "virtual:2309bfa61407fc5584a6befef7c9652d31a81fd2d22a62f4f56fde5d8aaad70cc121f02855cc8bc8d7865037800ab96a605a695dc088fb4da535e3274b1bc01d#npm:7.18.6"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-transform-unicode-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@types/babel__core", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/preset-env", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-preset-env-npm-7.18.10-929f463951-87f99240fc.zip/node_modules/@babel/preset-env/",\ - "packageDependencies": [\ - ["@babel/preset-env", "npm:7.18.10"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:7.18.10", {\ - "packageLocation": "./.yarn/__virtual__/@babel-preset-env-virtual-9f93d16801/0/cache/@babel-preset-env-npm-7.18.10-929f463951-87f99240fc.zip/node_modules/@babel/preset-env/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.18.8"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-compilation-targets", "virtual:4dfa3bcaeeccbb6989c334632fe93409071b65e94404dd43f69a5beff2a90e45f2d592410678b90d4145a115e5bf4ae2bb4dbadea7a225f1b71f7ba57d54f831#npm:7.18.9"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/helper-validator-option", "npm:7.18.6"],\ - ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-proposal-async-generator-functions", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.10"],\ - ["@babel/plugin-proposal-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-proposal-class-static-block", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-dynamic-import", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-export-namespace-from", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-proposal-json-strings", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-logical-assignment-operators", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-proposal-nullish-coalescing-operator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-numeric-separator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-proposal-optional-catch-binding", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-optional-chaining", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-proposal-private-methods", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-private-property-in-object", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-proposal-unicode-property-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-async-generators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.4"],\ - ["@babel/plugin-syntax-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.12.13"],\ - ["@babel/plugin-syntax-class-static-block", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5"],\ - ["@babel/plugin-syntax-dynamic-import", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3"],\ - ["@babel/plugin-syntax-export-namespace-from", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.8.3"],\ - ["@babel/plugin-syntax-import-assertions", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-syntax-json-strings", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-logical-assignment-operators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-numeric-separator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.8.3"],\ - ["@babel/plugin-syntax-optional-catch-binding", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-optional-chaining", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-private-property-in-object", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.14.5"],\ - ["@babel/plugin-syntax-top-level-await", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.14.5"],\ - ["@babel/plugin-transform-arrow-functions", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-async-to-generator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-block-scoped-functions", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-block-scoping", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-classes", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-computed-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-destructuring", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-dotall-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-duplicate-keys", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-transform-exponentiation-operator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-for-of", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@babel/plugin-transform-function-name", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-member-expression-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-modules-amd", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-modules-commonjs", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-modules-systemjs", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-transform-modules-umd", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-named-capturing-groups-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-new-target", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-object-super", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-parameters", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@babel/plugin-transform-property-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-regenerator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-reserved-words", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-shorthand-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-sticky-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-template-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-typeof-symbol", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.9"],\ - ["@babel/plugin-transform-unicode-escapes", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.10"],\ - ["@babel/plugin-transform-unicode-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/preset-env", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:7.18.10"],\ - ["@babel/preset-modules", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.1.5"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__core", null],\ - ["babel-plugin-polyfill-corejs2", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.3.2"],\ - ["babel-plugin-polyfill-corejs3", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.5.3"],\ - ["babel-plugin-polyfill-regenerator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.4.0"],\ - ["core-js-compat", "npm:3.24.1"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/preset-modules", [\ - ["npm:0.1.5", {\ - "packageLocation": "./.yarn/cache/@babel-preset-modules-npm-0.1.5-15ffcd64c2-41583c1774.zip/node_modules/@babel/preset-modules/",\ - "packageDependencies": [\ - ["@babel/preset-modules", "npm:0.1.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.1.5", {\ - "packageLocation": "./.yarn/__virtual__/@babel-preset-modules-virtual-cdb4993c86/0/cache/@babel-preset-modules-npm-0.1.5-15ffcd64c2-41583c1774.zip/node_modules/@babel/preset-modules/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@babel/plugin-proposal-unicode-property-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/plugin-transform-dotall-regex", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:7.18.6"],\ - ["@babel/preset-modules", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.1.5"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__core", null],\ - ["esutils", "npm:2.0.3"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/runtime", [\ - ["npm:7.28.2", {\ - "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.28.2-0c89c5b111-a0965fbdd6.zip/node_modules/@babel/runtime/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/runtime-corejs3", [\ - ["npm:7.18.9", {\ - "packageLocation": "./.yarn/cache/@babel-runtime-corejs3-npm-7.18.9-bf8545f42c-34979cc68e.zip/node_modules/@babel/runtime-corejs3/",\ - "packageDependencies": [\ - ["@babel/runtime-corejs3", "npm:7.18.9"],\ - ["core-js-pure", "npm:3.24.1"],\ - ["regenerator-runtime", "npm:0.13.9"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/template", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-template-npm-7.18.10-b6d6fdbaf8-b5d02b484a.zip/node_modules/@babel/template/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/types", "npm:7.18.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.22.15", {\ - "packageLocation": "./.yarn/cache/@babel-template-npm-7.22.15-0b464facb4-21e768e4ee.zip/node_modules/@babel/template/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.22.13"],\ - ["@babel/parser", "npm:7.23.0"],\ - ["@babel/template", "npm:7.22.15"],\ - ["@babel/types", "npm:7.23.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.0", {\ - "packageLocation": "./.yarn/cache/@babel-template-npm-7.24.0-674650c96c-8c538338c7.zip/node_modules/@babel/template/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.24.2"],\ - ["@babel/parser", "npm:7.24.4"],\ - ["@babel/template", "npm:7.24.0"],\ - ["@babel/types", "npm:7.24.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/traverse", [\ - ["npm:7.23.2", {\ - "packageLocation": "./.yarn/cache/@babel-traverse-npm-7.23.2-4758feee42-e4fcb8f839.zip/node_modules/@babel/traverse/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.22.13"],\ - ["@babel/generator", "npm:7.23.0"],\ - ["@babel/helper-environment-visitor", "npm:7.22.20"],\ - ["@babel/helper-function-name", "npm:7.23.0"],\ - ["@babel/helper-hoist-variables", "npm:7.22.5"],\ - ["@babel/helper-split-export-declaration", "npm:7.22.6"],\ - ["@babel/parser", "npm:7.23.0"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.23.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["globals", "npm:11.12.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.1", {\ - "packageLocation": "./.yarn/cache/@babel-traverse-npm-7.24.1-8b235322a8-b9b0173c28.zip/node_modules/@babel/traverse/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.24.2"],\ - ["@babel/generator", "npm:7.24.4"],\ - ["@babel/helper-environment-visitor", "npm:7.22.20"],\ - ["@babel/helper-function-name", "npm:7.23.0"],\ - ["@babel/helper-hoist-variables", "npm:7.22.5"],\ - ["@babel/helper-split-export-declaration", "npm:7.22.6"],\ - ["@babel/parser", "npm:7.24.4"],\ - ["@babel/traverse", "npm:7.24.1"],\ - ["@babel/types", "npm:7.24.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["globals", "npm:11.12.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@babel/types", [\ - ["npm:7.18.10", {\ - "packageLocation": "./.yarn/cache/@babel-types-npm-7.18.10-8502ea016c-1ff160304d.zip/node_modules/@babel/types/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.18.10"],\ - ["@babel/helper-validator-identifier", "npm:7.18.6"],\ - ["@babel/types", "npm:7.18.10"],\ - ["to-fast-properties", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.19.3", {\ - "packageLocation": "./.yarn/cache/@babel-types-npm-7.19.3-ef28011ef2-f36576df66.zip/node_modules/@babel/types/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.18.10"],\ - ["@babel/helper-validator-identifier", "npm:7.19.1"],\ - ["@babel/types", "npm:7.19.3"],\ - ["to-fast-properties", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.23.0", {\ - "packageLocation": "./.yarn/cache/@babel-types-npm-7.23.0-332fd21daf-ca5b896a26.zip/node_modules/@babel/types/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.22.5"],\ - ["@babel/helper-validator-identifier", "npm:7.22.20"],\ - ["@babel/types", "npm:7.23.0"],\ - ["to-fast-properties", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.24.0", {\ - "packageLocation": "./.yarn/cache/@babel-types-npm-7.24.0-a0508cb308-a0b4875ce2.zip/node_modules/@babel/types/",\ - "packageDependencies": [\ - ["@babel/helper-string-parser", "npm:7.24.1"],\ - ["@babel/helper-validator-identifier", "npm:7.22.20"],\ - ["@babel/types", "npm:7.24.0"],\ - ["to-fast-properties", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@bcoe/v8-coverage", [\ - ["npm:0.2.3", {\ - "packageLocation": "./.yarn/cache/@bcoe-v8-coverage-npm-0.2.3-9e27b3c57e-1a1f0e356a.zip/node_modules/@bcoe/v8-coverage/",\ - "packageDependencies": [\ - ["@bcoe/v8-coverage", "npm:0.2.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@crowdin/cli", [\ - ["npm:4.9.1", {\ - "packageLocation": "./.yarn/unplugged/@crowdin-cli-npm-4.9.1-dfcfc67991/node_modules/@crowdin/cli/",\ - "packageDependencies": [\ - ["@crowdin/cli", "npm:4.9.1"],\ - ["command-exists-promise", "npm:2.0.2"],\ - ["node-fetch", "virtual:dfcfc67991ac79ee17f4166409b8a921ae22a3c95c0664e0dd400f8bfd02301635390fb1015901b934cee853640ffefebb140939b33e21467c8ccac2823382a1#npm:2.7.0"],\ - ["shelljs", "npm:0.8.5"],\ - ["tar", "npm:7.4.3"],\ - ["yauzl", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@cruglobal/graphql-ergonomock", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/@cruglobal-graphql-ergonomock-npm-1.2.2-405bbafe34-ee9f3341c2.zip/node_modules/@cruglobal/graphql-ergonomock/",\ - "packageDependencies": [\ - ["@cruglobal/graphql-ergonomock", "npm:1.2.2"],\ - ["fast-json-stable-stringify", "npm:2.1.0"],\ - ["graphql", "npm:16.9.0"],\ - ["seedrandom", "npm:3.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@discoveryjs/json-ext", [\ - ["npm:0.5.7", {\ - "packageLocation": "./.yarn/cache/@discoveryjs-json-ext-npm-0.5.7-fe04af1f31-b95682a852.zip/node_modules/@discoveryjs/json-ext/",\ - "packageDependencies": [\ - ["@discoveryjs/json-ext", "npm:0.5.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emnapi/runtime", [\ - ["npm:1.3.1", {\ - "packageLocation": "./.yarn/cache/@emnapi-runtime-npm-1.3.1-64fd359241-619915ee44.zip/node_modules/@emnapi/runtime/",\ - "packageDependencies": [\ - ["@emnapi/runtime", "npm:1.3.1"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/babel-plugin", [\ - ["npm:11.11.0", {\ - "packageLocation": "./.yarn/cache/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-8de0176668.zip/node_modules/@emotion/babel-plugin/",\ - "packageDependencies": [\ - ["@babel/helper-module-imports", "npm:7.18.6"],\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/babel-plugin", "npm:11.11.0"],\ - ["@emotion/hash", "npm:0.9.1"],\ - ["@emotion/memoize", "npm:0.8.1"],\ - ["@emotion/serialize", "npm:1.1.3"],\ - ["babel-plugin-macros", "npm:3.1.0"],\ - ["convert-source-map", "npm:1.8.0"],\ - ["escape-string-regexp", "npm:4.0.0"],\ - ["find-root", "npm:1.1.0"],\ - ["source-map", "npm:0.5.7"],\ - ["stylis", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/cache", [\ - ["npm:11.11.0", {\ - "packageLocation": "./.yarn/cache/@emotion-cache-npm-11.11.0-3e6e449071-ef29756247.zip/node_modules/@emotion/cache/",\ - "packageDependencies": [\ - ["@emotion/cache", "npm:11.11.0"],\ - ["@emotion/memoize", "npm:0.8.1"],\ - ["@emotion/sheet", "npm:1.2.2"],\ - ["@emotion/utils", "npm:1.2.1"],\ - ["@emotion/weak-memoize", "npm:0.3.1"],\ - ["stylis", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/hash", [\ - ["npm:0.9.1", {\ - "packageLocation": "./.yarn/cache/@emotion-hash-npm-0.9.1-650576c2b1-716e17e48b.zip/node_modules/@emotion/hash/",\ - "packageDependencies": [\ - ["@emotion/hash", "npm:0.9.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/is-prop-valid", [\ - ["npm:0.8.8", {\ - "packageLocation": "./.yarn/cache/@emotion-is-prop-valid-npm-0.8.8-261a0f2426-e85bdeb9d9.zip/node_modules/@emotion/is-prop-valid/",\ - "packageDependencies": [\ - ["@emotion/is-prop-valid", "npm:0.8.8"],\ - ["@emotion/memoize", "npm:0.7.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-0fa3960abf.zip/node_modules/@emotion/is-prop-valid/",\ - "packageDependencies": [\ - ["@emotion/is-prop-valid", "npm:1.2.2"],\ - ["@emotion/memoize", "npm:0.8.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/memoize", [\ - ["npm:0.7.4", {\ - "packageLocation": "./.yarn/cache/@emotion-memoize-npm-0.7.4-5648cf11b8-4e3920d4ec.zip/node_modules/@emotion/memoize/",\ - "packageDependencies": [\ - ["@emotion/memoize", "npm:0.7.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.8.1", {\ - "packageLocation": "./.yarn/cache/@emotion-memoize-npm-0.8.1-9b1e35ff15-a19cc01a29.zip/node_modules/@emotion/memoize/",\ - "packageDependencies": [\ - ["@emotion/memoize", "npm:0.8.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/react", [\ - ["npm:11.11.4", {\ - "packageLocation": "./.yarn/cache/@emotion-react-npm-11.11.4-52eda8b8fe-e7da3a1ddc.zip/node_modules/@emotion/react/",\ - "packageDependencies": [\ - ["@emotion/react", "npm:11.11.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4", {\ - "packageLocation": "./.yarn/__virtual__/@emotion-react-virtual-66d5d6b284/0/cache/@emotion-react-npm-11.11.4-52eda8b8fe-e7da3a1ddc.zip/node_modules/@emotion/react/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/babel-plugin", "npm:11.11.0"],\ - ["@emotion/cache", "npm:11.11.0"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/serialize", "npm:1.1.3"],\ - ["@emotion/use-insertion-effect-with-fallbacks", "virtual:66d5d6b284a00c2e645b17ba04ba65ed3ef566088730c25f0235fc23e914989e94c258b361e4650203a4942411daecb598bfb16fa335e637706b1c904f8069b7#npm:1.0.1"],\ - ["@emotion/utils", "npm:1.2.1"],\ - ["@emotion/weak-memoize", "npm:0.3.1"],\ - ["@types/react", "npm:18.0.21"],\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/serialize", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/@emotion-serialize-npm-1.1.3-0ce9e71d95-48d8892366.zip/node_modules/@emotion/serialize/",\ - "packageDependencies": [\ - ["@emotion/hash", "npm:0.9.1"],\ - ["@emotion/memoize", "npm:0.8.1"],\ - ["@emotion/serialize", "npm:1.1.3"],\ - ["@emotion/unitless", "npm:0.8.1"],\ - ["@emotion/utils", "npm:1.2.1"],\ - ["csstype", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/sheet", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/@emotion-sheet-npm-1.2.2-a918ac483c-cc46b20ef7.zip/node_modules/@emotion/sheet/",\ - "packageDependencies": [\ - ["@emotion/sheet", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/styled", [\ - ["npm:11.11.0", {\ - "packageLocation": "./.yarn/cache/@emotion-styled-npm-11.11.0-9a95c8527d-ac471a4064.zip/node_modules/@emotion/styled/",\ - "packageDependencies": [\ - ["@emotion/styled", "npm:11.11.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0", {\ - "packageLocation": "./.yarn/__virtual__/@emotion-styled-virtual-4206c347ed/0/cache/@emotion-styled-npm-11.11.0-9a95c8527d-ac471a4064.zip/node_modules/@emotion/styled/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/babel-plugin", "npm:11.11.0"],\ - ["@emotion/is-prop-valid", "npm:1.2.2"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/serialize", "npm:1.1.3"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@emotion/use-insertion-effect-with-fallbacks", "virtual:66d5d6b284a00c2e645b17ba04ba65ed3ef566088730c25f0235fc23e914989e94c258b361e4650203a4942411daecb598bfb16fa335e637706b1c904f8069b7#npm:1.0.1"],\ - ["@emotion/utils", "npm:1.2.1"],\ - ["@types/emotion__react", null],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@types/emotion__react",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/unitless", [\ - ["npm:0.8.1", {\ - "packageLocation": "./.yarn/cache/@emotion-unitless-npm-0.8.1-bcf0a8f565-918f73c46a.zip/node_modules/@emotion/unitless/",\ - "packageDependencies": [\ - ["@emotion/unitless", "npm:0.8.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/use-insertion-effect-with-fallbacks", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-7d7ead9ba3.zip/node_modules/@emotion/use-insertion-effect-with-fallbacks/",\ - "packageDependencies": [\ - ["@emotion/use-insertion-effect-with-fallbacks", "npm:1.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:66d5d6b284a00c2e645b17ba04ba65ed3ef566088730c25f0235fc23e914989e94c258b361e4650203a4942411daecb598bfb16fa335e637706b1c904f8069b7#npm:1.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@emotion-use-insertion-effect-with-fallbacks-virtual-07a3d5120d/0/cache/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-7d7ead9ba3.zip/node_modules/@emotion/use-insertion-effect-with-fallbacks/",\ - "packageDependencies": [\ - ["@emotion/use-insertion-effect-with-fallbacks", "virtual:66d5d6b284a00c2e645b17ba04ba65ed3ef566088730c25f0235fc23e914989e94c258b361e4650203a4942411daecb598bfb16fa335e637706b1c904f8069b7#npm:1.0.1"],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/utils", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/@emotion-utils-npm-1.2.1-3d04f99348-472fa529c6.zip/node_modules/@emotion/utils/",\ - "packageDependencies": [\ - ["@emotion/utils", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@emotion/weak-memoize", [\ - ["npm:0.3.1", {\ - "packageLocation": "./.yarn/cache/@emotion-weak-memoize-npm-0.3.1-bfc18213af-b2be47caa2.zip/node_modules/@emotion/weak-memoize/",\ - "packageDependencies": [\ - ["@emotion/weak-memoize", "npm:0.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/aix-ppc64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-aix-ppc64-npm-0.23.1-6bc19cda8c/node_modules/@esbuild/aix-ppc64/",\ - "packageDependencies": [\ - ["@esbuild/aix-ppc64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/android-arm", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.23.1-09e5958f8e/node_modules/@esbuild/android-arm/",\ - "packageDependencies": [\ - ["@esbuild/android-arm", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/android-arm64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.23.1-2e5f190ab3/node_modules/@esbuild/android-arm64/",\ - "packageDependencies": [\ - ["@esbuild/android-arm64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/android-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.23.1-a63593927b/node_modules/@esbuild/android-x64/",\ - "packageDependencies": [\ - ["@esbuild/android-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/darwin-arm64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.23.1-1d26281f3d/node_modules/@esbuild/darwin-arm64/",\ - "packageDependencies": [\ - ["@esbuild/darwin-arm64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/darwin-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.23.1-2ea8826480/node_modules/@esbuild/darwin-x64/",\ - "packageDependencies": [\ - ["@esbuild/darwin-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/freebsd-arm64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.23.1-ef4bbf1f68/node_modules/@esbuild/freebsd-arm64/",\ - "packageDependencies": [\ - ["@esbuild/freebsd-arm64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/freebsd-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.23.1-671d4db88d/node_modules/@esbuild/freebsd-x64/",\ - "packageDependencies": [\ - ["@esbuild/freebsd-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-arm", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.23.1-e0122f8477/node_modules/@esbuild/linux-arm/",\ - "packageDependencies": [\ - ["@esbuild/linux-arm", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-arm64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.23.1-9b07bf2e0f/node_modules/@esbuild/linux-arm64/",\ - "packageDependencies": [\ - ["@esbuild/linux-arm64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-ia32", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.23.1-d7b08946f9/node_modules/@esbuild/linux-ia32/",\ - "packageDependencies": [\ - ["@esbuild/linux-ia32", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-loong64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.23.1-4e0e785ef6/node_modules/@esbuild/linux-loong64/",\ - "packageDependencies": [\ - ["@esbuild/linux-loong64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-mips64el", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.23.1-755712f850/node_modules/@esbuild/linux-mips64el/",\ - "packageDependencies": [\ - ["@esbuild/linux-mips64el", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-ppc64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.23.1-a34f454e6a/node_modules/@esbuild/linux-ppc64/",\ - "packageDependencies": [\ - ["@esbuild/linux-ppc64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-riscv64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.23.1-76d285f12f/node_modules/@esbuild/linux-riscv64/",\ - "packageDependencies": [\ - ["@esbuild/linux-riscv64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-s390x", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.23.1-96ae466b27/node_modules/@esbuild/linux-s390x/",\ - "packageDependencies": [\ - ["@esbuild/linux-s390x", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/linux-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.23.1-e5d2d8764d/node_modules/@esbuild/linux-x64/",\ - "packageDependencies": [\ - ["@esbuild/linux-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/netbsd-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.23.1-e2ffc3ff9c/node_modules/@esbuild/netbsd-x64/",\ - "packageDependencies": [\ - ["@esbuild/netbsd-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/openbsd-arm64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-arm64-npm-0.23.1-13d56ede32/node_modules/@esbuild/openbsd-arm64/",\ - "packageDependencies": [\ - ["@esbuild/openbsd-arm64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/openbsd-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.23.1-421f99f53f/node_modules/@esbuild/openbsd-x64/",\ - "packageDependencies": [\ - ["@esbuild/openbsd-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/sunos-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.23.1-02b128cd7b/node_modules/@esbuild/sunos-x64/",\ - "packageDependencies": [\ - ["@esbuild/sunos-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/win32-arm64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.23.1-d957320ec4/node_modules/@esbuild/win32-arm64/",\ - "packageDependencies": [\ - ["@esbuild/win32-arm64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/win32-ia32", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.23.1-7fb99a1c68/node_modules/@esbuild/win32-ia32/",\ - "packageDependencies": [\ - ["@esbuild/win32-ia32", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@esbuild/win32-x64", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.23.1-41fdbc02b5/node_modules/@esbuild/win32-x64/",\ - "packageDependencies": [\ - ["@esbuild/win32-x64", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@eslint-community/eslint-utils", [\ - ["npm:4.4.0", {\ - "packageLocation": "./.yarn/cache/@eslint-community-eslint-utils-npm-4.4.0-d1791bd5a3-8d70bcdcd8.zip/node_modules/@eslint-community/eslint-utils/",\ - "packageDependencies": [\ - ["@eslint-community/eslint-utils", "npm:4.4.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:4286e12a3a0f74af013bc8f16c6d8fdde823cfbf6389660266b171e551f576c805b0a7a8eb2a7087a5cee7dfe6ebb6e1ea3808d93daf915edc95656907a381bb#npm:4.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-1c7da85a1a/0/cache/@eslint-community-eslint-utils-npm-4.4.0-d1791bd5a3-8d70bcdcd8.zip/node_modules/@eslint-community/eslint-utils/",\ - "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:4286e12a3a0f74af013bc8f16c6d8fdde823cfbf6389660266b171e551f576c805b0a7a8eb2a7087a5cee7dfe6ebb6e1ea3808d93daf915edc95656907a381bb#npm:4.4.0"],\ - ["@types/eslint", null],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-visitor-keys", "npm:3.3.0"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@eslint-community/regexpp", [\ - ["npm:4.10.0", {\ - "packageLocation": "./.yarn/cache/@eslint-community-regexpp-npm-4.10.0-6bfb984c81-8c36169c81.zip/node_modules/@eslint-community/regexpp/",\ - "packageDependencies": [\ - ["@eslint-community/regexpp", "npm:4.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@eslint/eslintrc", [\ - ["npm:2.1.4", {\ - "packageLocation": "./.yarn/cache/@eslint-eslintrc-npm-2.1.4-1ff4b5f908-7a3b14f4b4.zip/node_modules/@eslint/eslintrc/",\ - "packageDependencies": [\ - ["@eslint/eslintrc", "npm:2.1.4"],\ - ["ajv", "npm:6.12.6"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["espree", "npm:9.6.1"],\ - ["globals", "npm:13.24.0"],\ - ["ignore", "npm:5.2.0"],\ - ["import-fresh", "npm:3.3.0"],\ - ["js-yaml", "npm:4.1.0"],\ - ["minimatch", "npm:3.1.2"],\ - ["strip-json-comments", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@eslint/js", [\ - ["npm:8.57.0", {\ - "packageLocation": "./.yarn/cache/@eslint-js-npm-8.57.0-00ead3710a-3c501ce8a9.zip/node_modules/@eslint/js/",\ - "packageDependencies": [\ - ["@eslint/js", "npm:8.57.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@floating-ui/core", [\ - ["npm:1.6.0", {\ - "packageLocation": "./.yarn/cache/@floating-ui-core-npm-1.6.0-47cc2a9b3a-d6a47cacde.zip/node_modules/@floating-ui/core/",\ - "packageDependencies": [\ - ["@floating-ui/core", "npm:1.6.0"],\ - ["@floating-ui/utils", "npm:0.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@floating-ui/dom", [\ - ["npm:1.6.3", {\ - "packageLocation": "./.yarn/cache/@floating-ui-dom-npm-1.6.3-cf39e1c671-83e97076c7.zip/node_modules/@floating-ui/dom/",\ - "packageDependencies": [\ - ["@floating-ui/core", "npm:1.6.0"],\ - ["@floating-ui/dom", "npm:1.6.3"],\ - ["@floating-ui/utils", "npm:0.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@floating-ui/react-dom", [\ - ["npm:2.0.8", {\ - "packageLocation": "./.yarn/cache/@floating-ui-react-dom-npm-2.0.8-adede82f46-e57b2a498a.zip/node_modules/@floating-ui/react-dom/",\ - "packageDependencies": [\ - ["@floating-ui/react-dom", "npm:2.0.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:4f5a8553376d031144fb26c5efe82f65203d4ddbb00eef62543a7320f45e3f8639d616acedd88fcf907fe54f839230d9b7cf4aec2dabfacd59f08c6a08ff9111#npm:2.0.8", {\ - "packageLocation": "./.yarn/__virtual__/@floating-ui-react-dom-virtual-205b13dfbb/0/cache/@floating-ui-react-dom-npm-2.0.8-adede82f46-e57b2a498a.zip/node_modules/@floating-ui/react-dom/",\ - "packageDependencies": [\ - ["@floating-ui/dom", "npm:1.6.3"],\ - ["@floating-ui/react-dom", "virtual:4f5a8553376d031144fb26c5efe82f65203d4ddbb00eef62543a7320f45e3f8639d616acedd88fcf907fe54f839230d9b7cf4aec2dabfacd59f08c6a08ff9111#npm:2.0.8"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@floating-ui/utils", [\ - ["npm:0.2.1", {\ - "packageLocation": "./.yarn/cache/@floating-ui-utils-npm-0.2.1-5ad70234fc-33c9ab346e.zip/node_modules/@floating-ui/utils/",\ - "packageDependencies": [\ - ["@floating-ui/utils", "npm:0.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@formatjs/ecma402-abstract", [\ - ["npm:1.18.2", {\ - "packageLocation": "./.yarn/cache/@formatjs-ecma402-abstract-npm-1.18.2-281c9afdd0-e761653887.zip/node_modules/@formatjs/ecma402-abstract/",\ - "packageDependencies": [\ - ["@formatjs/ecma402-abstract", "npm:1.18.2"],\ - ["@formatjs/intl-localematcher", "npm:0.5.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@formatjs/fast-memoize", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/@formatjs-fast-memoize-npm-2.2.0-4a46a61b8b-8697fe72a7.zip/node_modules/@formatjs/fast-memoize/",\ - "packageDependencies": [\ - ["@formatjs/fast-memoize", "npm:2.2.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@formatjs/icu-messageformat-parser", [\ - ["npm:2.7.6", {\ - "packageLocation": "./.yarn/cache/@formatjs-icu-messageformat-parser-npm-2.7.6-59cd895220-5baf9c1cf4.zip/node_modules/@formatjs/icu-messageformat-parser/",\ - "packageDependencies": [\ - ["@formatjs/ecma402-abstract", "npm:1.18.2"],\ - ["@formatjs/icu-messageformat-parser", "npm:2.7.6"],\ - ["@formatjs/icu-skeleton-parser", "npm:1.8.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@formatjs/icu-skeleton-parser", [\ - ["npm:1.8.0", {\ - "packageLocation": "./.yarn/cache/@formatjs-icu-skeleton-parser-npm-1.8.0-0f1fd4bf3f-8cd96d9075.zip/node_modules/@formatjs/icu-skeleton-parser/",\ - "packageDependencies": [\ - ["@formatjs/ecma402-abstract", "npm:1.18.2"],\ - ["@formatjs/icu-skeleton-parser", "npm:1.8.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@formatjs/intl-localematcher", [\ - ["npm:0.5.4", {\ - "packageLocation": "./.yarn/cache/@formatjs-intl-localematcher-npm-0.5.4-e30cfcd8fd-780cb29b42.zip/node_modules/@formatjs/intl-localematcher/",\ - "packageDependencies": [\ - ["@formatjs/intl-localematcher", "npm:0.5.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@gar/promisify", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/@gar-promisify-npm-1.1.3-ac1a325862-052dd23214.zip/node_modules/@gar/promisify/",\ - "packageDependencies": [\ - ["@gar/promisify", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@googlemaps/js-api-loader", [\ - ["npm:1.16.8", {\ - "packageLocation": "./.yarn/cache/@googlemaps-js-api-loader-npm-1.16.8-81aa9d2a9a-63771c7536.zip/node_modules/@googlemaps/js-api-loader/",\ - "packageDependencies": [\ - ["@googlemaps/js-api-loader", "npm:1.16.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@googlemaps/markerclusterer", [\ - ["npm:2.5.3", {\ - "packageLocation": "./.yarn/cache/@googlemaps-markerclusterer-npm-2.5.3-fff312e138-68590483e6.zip/node_modules/@googlemaps/markerclusterer/",\ - "packageDependencies": [\ - ["@googlemaps/markerclusterer", "npm:2.5.3"],\ - ["fast-deep-equal", "npm:3.1.3"],\ - ["supercluster", "npm:8.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/add", [\ - ["npm:3.2.1", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-add-npm-3.2.1-46748f36f7-1dce80b2af.zip/node_modules/@graphql-codegen/add/",\ - "packageDependencies": [\ - ["@graphql-codegen/add", "npm:3.2.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:5.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-add-npm-5.0.2-8203cb2a85-60f32609d9.zip/node_modules/@graphql-codegen/add/",\ - "packageDependencies": [\ - ["@graphql-codegen/add", "npm:5.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:3.2.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-add-virtual-cfe4d6ac4b/0/cache/@graphql-codegen-add-npm-3.2.1-46748f36f7-1dce80b2af.zip/node_modules/@graphql-codegen/add/",\ - "packageDependencies": [\ - ["@graphql-codegen/add", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:3.2.1"],\ - ["@graphql-codegen/plugin-helpers", "virtual:cfe4d6ac4b4246dfc487752866fe8235565ffa494bf5c25134ccb875ac385f53a440cd7cc48b3ab18b0d4b679923a5e74145935a1072e05eb2429a53b5edc681#npm:2.6.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-add-virtual-2df0e2cc2e/0/cache/@graphql-codegen-add-npm-5.0.2-8203cb2a85-60f32609d9.zip/node_modules/@graphql-codegen/add/",\ - "packageDependencies": [\ - ["@graphql-codegen/add", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/cli", [\ - ["npm:5.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-cli-npm-5.0.2-2b55a036e6-24f5a4d441.zip/node_modules/@graphql-codegen/cli/",\ - "packageDependencies": [\ - ["@graphql-codegen/cli", "npm:5.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-cli-virtual-cd321fe144/0/cache/@graphql-codegen-cli-npm-5.0.2-2b55a036e6-24f5a4d441.zip/node_modules/@graphql-codegen/cli/",\ - "packageDependencies": [\ - ["@babel/generator", "npm:7.19.3"],\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/types", "npm:7.19.3"],\ - ["@graphql-codegen/cli", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/client-preset", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:4.2.5"],\ - ["@graphql-codegen/core", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:4.0.2"],\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-tools/apollo-engine-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/code-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.1.1"],\ - ["@graphql-tools/git-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.5"],\ - ["@graphql-tools/github-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/graphql-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/json-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/load", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/prisma-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.3"],\ - ["@graphql-tools/url-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@parcel/watcher", "npm:2.4.1"],\ - ["@types/graphql", null],\ - ["@types/parcel__watcher", null],\ - ["@whatwg-node/fetch", "npm:0.8.8"],\ - ["chalk", "npm:4.1.2"],\ - ["cosmiconfig", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.3.6"],\ - ["debounce", "npm:1.2.1"],\ - ["detect-indent", "npm:6.1.0"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-config", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:5.0.3"],\ - ["inquirer", "npm:8.2.4"],\ - ["is-glob", "npm:4.0.3"],\ - ["jiti", "npm:1.21.0"],\ - ["json-to-pretty-yaml", "npm:1.2.2"],\ - ["listr2", "virtual:5f9010e5ff1626822e95f9478abbca9d06865e771c302ab7261d07ee4d7fe4994efa0046bb5f7982f8af81ec57df4734f10c32785310c1db8be5aaf37cb23c05#npm:4.0.5"],\ - ["log-symbols", "npm:4.1.0"],\ - ["micromatch", "npm:4.0.8"],\ - ["shell-quote", "npm:1.7.4"],\ - ["string-env-interpolation", "npm:1.0.1"],\ - ["ts-log", "npm:2.2.4"],\ - ["tslib", "npm:2.4.0"],\ - ["yaml", "npm:2.6.0"],\ - ["yargs", "npm:17.5.1"]\ - ],\ - "packagePeers": [\ - "@parcel/watcher",\ - "@types/graphql",\ - "@types/parcel__watcher",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/client-preset", [\ - ["npm:4.2.5", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-client-preset-npm-4.2.5-20533b483f-9990caa887.zip/node_modules/@graphql-codegen/client-preset/",\ - "packageDependencies": [\ - ["@graphql-codegen/client-preset", "npm:4.2.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:4.2.5", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-client-preset-virtual-b30c0460c7/0/cache/@graphql-codegen-client-preset-npm-4.2.5-20533b483f-9990caa887.zip/node_modules/@graphql-codegen/client-preset/",\ - "packageDependencies": [\ - ["@babel/helper-plugin-utils", "npm:7.24.0"],\ - ["@babel/template", "npm:7.24.0"],\ - ["@graphql-codegen/add", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/client-preset", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:4.2.5"],\ - ["@graphql-codegen/gql-tag-operations", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6"],\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/typed-document-node", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.0.6"],\ - ["@graphql-codegen/typescript", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6"],\ - ["@graphql-codegen/typescript-operations", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.0"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@graphql-tools/documents", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:1.0.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@graphql-typed-document-node/core", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:3.2.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/core", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-core-npm-4.0.2-3135edacf9-09aa9d5b32.zip/node_modules/@graphql-codegen/core/",\ - "packageDependencies": [\ - ["@graphql-codegen/core", "npm:4.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:4.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-core-virtual-043b488eb9/0/cache/@graphql-codegen-core-npm-4.0.2-3135edacf9-09aa9d5b32.zip/node_modules/@graphql-codegen/core/",\ - "packageDependencies": [\ - ["@graphql-codegen/core", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:4.0.2"],\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-tools/schema", "virtual:043b488eb9b1864448aac2aaac288c7c7c5cf00da50a6e7ab8636fbd0ac6af465c42b024e5f90329a76a3e50a9ca4de9c9928375dd642a072d60a472d08cb835#npm:10.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/fragment-matcher", [\ - ["npm:5.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-fragment-matcher-npm-5.0.2-49071a5b43-4934035313.zip/node_modules/@graphql-codegen/fragment-matcher/",\ - "packageDependencies": [\ - ["@graphql-codegen/fragment-matcher", "npm:5.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-fragment-matcher-virtual-325f75960a/0/cache/@graphql-codegen-fragment-matcher-npm-5.0.2-49071a5b43-4934035313.zip/node_modules/@graphql-codegen/fragment-matcher/",\ - "packageDependencies": [\ - ["@graphql-codegen/fragment-matcher", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/gql-tag-operations", [\ - ["npm:4.0.6", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-gql-tag-operations-npm-4.0.6-6af952cb2a-7668da39e7.zip/node_modules/@graphql-codegen/gql-tag-operations/",\ - "packageDependencies": [\ - ["@graphql-codegen/gql-tag-operations", "npm:4.0.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-gql-tag-operations-virtual-cc77b364a6/0/cache/@graphql-codegen-gql-tag-operations-npm-4.0.6-6af952cb2a-7668da39e7.zip/node_modules/@graphql-codegen/gql-tag-operations/",\ - "packageDependencies": [\ - ["@graphql-codegen/gql-tag-operations", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6"],\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/near-operation-file-preset", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-near-operation-file-preset-npm-3.0.0-6cff737515-0a9bfaa703.zip/node_modules/@graphql-codegen/near-operation-file-preset/",\ - "packageDependencies": [\ - ["@graphql-codegen/near-operation-file-preset", "npm:3.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.0.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-near-operation-file-preset-virtual-98f267c03c/0/cache/@graphql-codegen-near-operation-file-preset-npm-3.0.0-6cff737515-0a9bfaa703.zip/node_modules/@graphql-codegen/near-operation-file-preset/",\ - "packageDependencies": [\ - ["@graphql-codegen/add", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:3.2.1"],\ - ["@graphql-codegen/near-operation-file-preset", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.0.0"],\ - ["@graphql-codegen/plugin-helpers", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:3.1.2"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:2.13.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["parse-filepath", "npm:1.0.2"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/plugin-helpers", [\ - ["npm:2.6.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-plugin-helpers-npm-2.6.2-289502c684-e2362f1e6a.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "npm:2.6.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.7.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-plugin-helpers-npm-2.7.2-61eb917d4d-db5e387be1.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "npm:2.7.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-plugin-helpers-npm-3.1.2-24626282d0-184736c4e2.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "npm:3.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:5.0.3", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-plugin-helpers-npm-5.0.3-e3267cb0ad-15e9962aff.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "npm:5.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-plugin-helpers-npm-5.1.0-0a6a0a39b4-415e79be90.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "npm:5.1.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:2.7.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-plugin-helpers-virtual-480a97a17a/0/cache/@graphql-codegen-plugin-helpers-npm-2.7.2-61eb917d4d-db5e387be1.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:2.7.2"],\ - ["@graphql-tools/utils", "virtual:ccedc0f301ef31fb562ff342759a5bc7a17e354478fabefbbaea70292378ac6a56e529a64deafa6a01e0875f41c116b946d051591dfc9b24a5945ddb92aa48b7#npm:8.10.0"],\ - ["@types/graphql", null],\ - ["change-case-all", "npm:1.0.14"],\ - ["common-tags", "npm:1.8.2"],\ - ["graphql", "npm:16.9.0"],\ - ["import-from", "npm:4.0.0"],\ - ["lodash", "npm:4.17.21"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-plugin-helpers-virtual-44d00fbedb/0/cache/@graphql-codegen-plugin-helpers-npm-5.0.3-e3267cb0ad-15e9962aff.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["change-case-all", "npm:1.0.15"],\ - ["common-tags", "npm:1.8.2"],\ - ["graphql", "npm:16.9.0"],\ - ["import-from", "npm:4.0.0"],\ - ["lodash", "npm:4.17.21"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:3.1.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-plugin-helpers-virtual-1f0d0eb0cb/0/cache/@graphql-codegen-plugin-helpers-npm-3.1.2-24626282d0-184736c4e2.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:3.1.2"],\ - ["@graphql-tools/utils", "virtual:1f0d0eb0cb93c7ed4306e06815f5ed1423e1648dfe7250fd8d7f071e218684795a9e95e112395a3818b94eea58cf0a4721e70768380db0569403e5563f2301ee#npm:9.2.0"],\ - ["@types/graphql", null],\ - ["change-case-all", "npm:1.0.15"],\ - ["common-tags", "npm:1.8.2"],\ - ["graphql", "npm:16.9.0"],\ - ["import-from", "npm:4.0.0"],\ - ["lodash", "npm:4.17.21"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:cfe4d6ac4b4246dfc487752866fe8235565ffa494bf5c25134ccb875ac385f53a440cd7cc48b3ab18b0d4b679923a5e74145935a1072e05eb2429a53b5edc681#npm:2.6.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-plugin-helpers-virtual-ccedc0f301/0/cache/@graphql-codegen-plugin-helpers-npm-2.6.2-289502c684-e2362f1e6a.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:cfe4d6ac4b4246dfc487752866fe8235565ffa494bf5c25134ccb875ac385f53a440cd7cc48b3ab18b0d4b679923a5e74145935a1072e05eb2429a53b5edc681#npm:2.6.2"],\ - ["@graphql-tools/utils", "virtual:ccedc0f301ef31fb562ff342759a5bc7a17e354478fabefbbaea70292378ac6a56e529a64deafa6a01e0875f41c116b946d051591dfc9b24a5945ddb92aa48b7#npm:8.10.0"],\ - ["@types/graphql", null],\ - ["change-case-all", "npm:1.0.14"],\ - ["common-tags", "npm:1.8.2"],\ - ["graphql", "npm:16.9.0"],\ - ["import-from", "npm:4.0.0"],\ - ["lodash", "npm:4.17.21"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-plugin-helpers-virtual-ffa6d78804/0/cache/@graphql-codegen-plugin-helpers-npm-5.1.0-0a6a0a39b4-415e79be90.zip/node_modules/@graphql-codegen/plugin-helpers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.1.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["change-case-all", "npm:1.0.15"],\ - ["common-tags", "npm:1.8.2"],\ - ["graphql", "npm:16.9.0"],\ - ["import-from", "npm:4.0.0"],\ - ["lodash", "npm:4.17.21"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/schema-ast", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-schema-ast-npm-4.0.2-203fff5459-f6097ceac7.zip/node_modules/@graphql-codegen/schema-ast/",\ - "packageDependencies": [\ - ["@graphql-codegen/schema-ast", "npm:4.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-schema-ast-virtual-c89d431c7b/0/cache/@graphql-codegen-schema-ast-npm-4.0.2-203fff5459-f6097ceac7.zip/node_modules/@graphql-codegen/schema-ast/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/schema-ast", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.2"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/typed-document-node", [\ - ["npm:5.0.6", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-typed-document-node-npm-5.0.6-0251563a24-10bf408f3e.zip/node_modules/@graphql-codegen/typed-document-node/",\ - "packageDependencies": [\ - ["@graphql-codegen/typed-document-node", "npm:5.0.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.0.6", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-typed-document-node-virtual-50f05f7c06/0/cache/@graphql-codegen-typed-document-node-npm-5.0.6-0251563a24-10bf408f3e.zip/node_modules/@graphql-codegen/typed-document-node/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/typed-document-node", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.0.6"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["change-case-all", "npm:1.0.15"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/typescript", [\ - ["npm:4.0.6", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-typescript-npm-4.0.6-4305e1e8b2-1de84b810d.zip/node_modules/@graphql-codegen/typescript/",\ - "packageDependencies": [\ - ["@graphql-codegen/typescript", "npm:4.0.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:4.1.2", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-typescript-npm-4.1.2-86b8cf8db9-a0a853a403.zip/node_modules/@graphql-codegen/typescript/",\ - "packageDependencies": [\ - ["@graphql-codegen/typescript", "npm:4.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-typescript-virtual-e30689d5b9/0/cache/@graphql-codegen-typescript-npm-4.1.2-86b8cf8db9-a0a853a403.zip/node_modules/@graphql-codegen/typescript/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.1.0"],\ - ["@graphql-codegen/schema-ast", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.2"],\ - ["@graphql-codegen/typescript", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.2"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.6.0"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-typescript-virtual-df42fdda57/0/cache/@graphql-codegen-typescript-npm-4.0.6-4305e1e8b2-1de84b810d.zip/node_modules/@graphql-codegen/typescript/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/schema-ast", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.2"],\ - ["@graphql-codegen/typescript", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/typescript-operations", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-typescript-operations-npm-4.2.0-88a2ab6be4-a3fd0d8648.zip/node_modules/@graphql-codegen/typescript-operations/",\ - "packageDependencies": [\ - ["@graphql-codegen/typescript-operations", "npm:4.2.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-typescript-operations-virtual-e2ea56033c/0/cache/@graphql-codegen-typescript-operations-npm-4.2.0-88a2ab6be4-a3fd0d8648.zip/node_modules/@graphql-codegen/typescript-operations/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/typescript", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6"],\ - ["@graphql-codegen/typescript-operations", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.0"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/typescript-react-apollo", [\ - ["npm:3.3.7", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-typescript-react-apollo-npm-3.3.7-617151d5c5-73dd4cb20b.zip/node_modules/@graphql-codegen/typescript-react-apollo/",\ - "packageDependencies": [\ - ["@graphql-codegen/typescript-react-apollo", "npm:3.3.7"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.3.7", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-typescript-react-apollo-virtual-e55e59572c/0/cache/@graphql-codegen-typescript-react-apollo-npm-3.3.7-617151d5c5-73dd4cb20b.zip/node_modules/@graphql-codegen/typescript-react-apollo/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:2.7.2"],\ - ["@graphql-codegen/typescript-react-apollo", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.3.7"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:2.13.1"],\ - ["@types/graphql", null],\ - ["@types/graphql-tag", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["change-case-all", "npm:1.0.14"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql-tag",\ - "@types/graphql",\ - "graphql-tag",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/typescript-resolvers", [\ - ["npm:4.0.6", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-typescript-resolvers-npm-4.0.6-a5ef24442a-c284a2714b.zip/node_modules/@graphql-codegen/typescript-resolvers/",\ - "packageDependencies": [\ - ["@graphql-codegen/typescript-resolvers", "npm:4.0.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.6", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-typescript-resolvers-virtual-7e242eeaad/0/cache/@graphql-codegen-typescript-resolvers-npm-4.0.6-a5ef24442a-c284a2714b.zip/node_modules/@graphql-codegen/typescript-resolvers/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/typescript", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:4.0.6"],\ - ["@graphql-codegen/typescript-resolvers", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.6"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-codegen/visitor-plugin-common", [\ - ["npm:2.13.1", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-visitor-plugin-common-npm-2.13.1-434ccef87e-215a9bdcd8.zip/node_modules/@graphql-codegen/visitor-plugin-common/",\ - "packageDependencies": [\ - ["@graphql-codegen/visitor-plugin-common", "npm:2.13.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-visitor-plugin-common-npm-5.1.0-951ba1b135-c933fa5650.zip/node_modules/@graphql-codegen/visitor-plugin-common/",\ - "packageDependencies": [\ - ["@graphql-codegen/visitor-plugin-common", "npm:5.1.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:5.6.0", {\ - "packageLocation": "./.yarn/cache/@graphql-codegen-visitor-plugin-common-npm-5.6.0-7dbfa7baf8-3e398546cc.zip/node_modules/@graphql-codegen/visitor-plugin-common/",\ - "packageDependencies": [\ - ["@graphql-codegen/visitor-plugin-common", "npm:5.6.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:2.13.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-visitor-plugin-common-virtual-0ccab3f55e/0/cache/@graphql-codegen-visitor-plugin-common-npm-2.13.1-434ccef87e-215a9bdcd8.zip/node_modules/@graphql-codegen/visitor-plugin-common/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:2.7.2"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:98f267c03c6fe53b0fb4b0bdd21b9c275244a1ecf32032b523e51160d1f4834893a3c03315f4aad1358e4f036ef17aead63d265dd1e895eba8fe9f0f7263b66e#npm:2.13.1"],\ - ["@graphql-tools/optimize", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:1.3.1"],\ - ["@graphql-tools/relay-operation-optimizer", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:6.5.3"],\ - ["@graphql-tools/utils", "virtual:ccedc0f301ef31fb562ff342759a5bc7a17e354478fabefbbaea70292378ac6a56e529a64deafa6a01e0875f41c116b946d051591dfc9b24a5945ddb92aa48b7#npm:8.10.0"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["change-case-all", "npm:1.0.14"],\ - ["dependency-graph", "npm:0.11.0"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["parse-filepath", "npm:1.0.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-visitor-plugin-common-virtual-b6f708e52f/0/cache/@graphql-codegen-visitor-plugin-common-npm-5.1.0-951ba1b135-c933fa5650.zip/node_modules/@graphql-codegen/visitor-plugin-common/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:2df0e2cc2eb42cf93882bfe591aa0869accc7e04d111089023efc572c33516233e211566248ddc2d8f9e8967f59a2c722801a89a245507c6c240fb70d5f3c7b1#npm:5.0.3"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:5.1.0"],\ - ["@graphql-tools/optimize", "virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:2.0.0"],\ - ["@graphql-tools/relay-operation-optimizer", "virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:7.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["change-case-all", "npm:1.0.15"],\ - ["dependency-graph", "npm:0.11.0"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["parse-filepath", "npm:1.0.2"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.6.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-codegen-visitor-plugin-common-virtual-b22b8434ca/0/cache/@graphql-codegen-visitor-plugin-common-npm-5.6.0-7dbfa7baf8-3e398546cc.zip/node_modules/@graphql-codegen/visitor-plugin-common/",\ - "packageDependencies": [\ - ["@graphql-codegen/plugin-helpers", "virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.1.0"],\ - ["@graphql-codegen/visitor-plugin-common", "virtual:e30689d5b9a69a0cec4241772323588494f4642be6b1b498fef4f8676c4fb14dd32945b84c1bbffedb6d6733ed48ec676786d2bcb1cb45ba2dea2eab2e0db18e#npm:5.6.0"],\ - ["@graphql-tools/optimize", "virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:2.0.0"],\ - ["@graphql-tools/relay-operation-optimizer", "virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:7.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["auto-bind", "npm:4.0.0"],\ - ["change-case-all", "npm:1.0.15"],\ - ["dependency-graph", "npm:0.11.0"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["parse-filepath", "npm:1.0.2"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/apollo-engine-loader", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-apollo-engine-loader-npm-8.0.1-e976011c0d-4baef5a8fd.zip/node_modules/@graphql-tools/apollo-engine-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/apollo-engine-loader", "npm:8.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-apollo-engine-loader-virtual-8d0b8ddc95/0/cache/@graphql-tools-apollo-engine-loader-npm-8.0.1-e976011c0d-4baef5a8fd.zip/node_modules/@graphql-tools/apollo-engine-loader/",\ - "packageDependencies": [\ - ["@ardatan/sync-fetch", "npm:0.0.1"],\ - ["@graphql-tools/apollo-engine-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["@whatwg-node/fetch", "npm:0.9.17"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/batch-execute", [\ - ["npm:9.0.4", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-batch-execute-npm-9.0.4-3fb3972a45-955647a094.zip/node_modules/@graphql-tools/batch-execute/",\ - "packageDependencies": [\ - ["@graphql-tools/batch-execute", "npm:9.0.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:913db0733a8d3d72a25fd55e419a74aaadf4b05d8ece54524a311b7e7aca6e0982b3a690a0fc1faa751c8d64f248bbcd54f432fb695f69f827952f3c908dfdb5#npm:9.0.4", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-batch-execute-virtual-0e59f1bad9/0/cache/@graphql-tools-batch-execute-npm-9.0.4-3fb3972a45-955647a094.zip/node_modules/@graphql-tools/batch-execute/",\ - "packageDependencies": [\ - ["@graphql-tools/batch-execute", "virtual:913db0733a8d3d72a25fd55e419a74aaadf4b05d8ece54524a311b7e7aca6e0982b3a690a0fc1faa751c8d64f248bbcd54f432fb695f69f827952f3c908dfdb5#npm:9.0.4"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["dataloader", "npm:2.2.2"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/code-file-loader", [\ - ["npm:8.1.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-code-file-loader-npm-8.1.1-d98c15ed41-4f6f1c92ad.zip/node_modules/@graphql-tools/code-file-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/code-file-loader", "npm:8.1.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.1.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-code-file-loader-virtual-c7476d3629/0/cache/@graphql-tools-code-file-loader-npm-8.1.1-d98c15ed41-4f6f1c92ad.zip/node_modules/@graphql-tools/code-file-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/code-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.1.1"],\ - ["@graphql-tools/graphql-tag-pluck", "virtual:c7476d3629f733066e4bfc5a4dd36a9925aa42a6069d60b32ebe9b5cb452da1297d48fe24fd9068c86909f6b063e838d9374c0f6ddc752bf0e5e061448599bfc#npm:8.3.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["globby", "npm:11.1.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["unixify", "npm:1.0.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/delegate", [\ - ["npm:10.0.4", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-delegate-npm-10.0.4-d5fc5d79e2-558be5552c.zip/node_modules/@graphql-tools/delegate/",\ - "packageDependencies": [\ - ["@graphql-tools/delegate", "npm:10.0.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.4", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-delegate-virtual-913db0733a/0/cache/@graphql-tools-delegate-npm-10.0.4-d5fc5d79e2-558be5552c.zip/node_modules/@graphql-tools/delegate/",\ - "packageDependencies": [\ - ["@graphql-tools/batch-execute", "virtual:913db0733a8d3d72a25fd55e419a74aaadf4b05d8ece54524a311b7e7aca6e0982b3a690a0fc1faa751c8d64f248bbcd54f432fb695f69f827952f3c908dfdb5#npm:9.0.4"],\ - ["@graphql-tools/delegate", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.4"],\ - ["@graphql-tools/executor", "virtual:913db0733a8d3d72a25fd55e419a74aaadf4b05d8ece54524a311b7e7aca6e0982b3a690a0fc1faa751c8d64f248bbcd54f432fb695f69f827952f3c908dfdb5#npm:1.2.5"],\ - ["@graphql-tools/schema", "virtual:043b488eb9b1864448aac2aaac288c7c7c5cf00da50a6e7ab8636fbd0ac6af465c42b024e5f90329a76a3e50a9ca4de9c9928375dd642a072d60a472d08cb835#npm:10.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["dataloader", "npm:2.2.2"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.6.2"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/documents", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-documents-npm-1.0.0-f5b88c8c88-4fe29835ab.zip/node_modules/@graphql-tools/documents/",\ - "packageDependencies": [\ - ["@graphql-tools/documents", "npm:1.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:1.0.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-documents-virtual-e9ff220015/0/cache/@graphql-tools-documents-npm-1.0.0-f5b88c8c88-4fe29835ab.zip/node_modules/@graphql-tools/documents/",\ - "packageDependencies": [\ - ["@graphql-tools/documents", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:1.0.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["lodash.sortby", "npm:4.7.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/executor", [\ - ["npm:1.2.5", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-executor-npm-1.2.5-649510c6da-520d75360a.zip/node_modules/@graphql-tools/executor/",\ - "packageDependencies": [\ - ["@graphql-tools/executor", "npm:1.2.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:913db0733a8d3d72a25fd55e419a74aaadf4b05d8ece54524a311b7e7aca6e0982b3a690a0fc1faa751c8d64f248bbcd54f432fb695f69f827952f3c908dfdb5#npm:1.2.5", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-executor-virtual-7d158dea2e/0/cache/@graphql-tools-executor-npm-1.2.5-649510c6da-520d75360a.zip/node_modules/@graphql-tools/executor/",\ - "packageDependencies": [\ - ["@graphql-tools/executor", "virtual:913db0733a8d3d72a25fd55e419a74aaadf4b05d8ece54524a311b7e7aca6e0982b3a690a0fc1faa751c8d64f248bbcd54f432fb695f69f827952f3c908dfdb5#npm:1.2.5"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@graphql-typed-document-node/core", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:3.2.0"],\ - ["@repeaterjs/repeater", "npm:3.0.5"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/executor-graphql-ws", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-executor-graphql-ws-npm-1.1.2-d9128d4963-5273c3bace.zip/node_modules/@graphql-tools/executor-graphql-ws/",\ - "packageDependencies": [\ - ["@graphql-tools/executor-graphql-ws", "npm:1.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:1.1.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-executor-graphql-ws-virtual-aa308e849a/0/cache/@graphql-tools-executor-graphql-ws-npm-1.1.2-d9128d4963-5273c3bace.zip/node_modules/@graphql-tools/executor-graphql-ws/",\ - "packageDependencies": [\ - ["@graphql-tools/executor-graphql-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:1.1.2"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["@types/ws", "npm:8.5.3"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-ws", "virtual:aa308e849afde1efb91bc483aaa2b2944766d1d052f7b43837a755bd8c2ae0a0681422e9369a134c52733cc64ae026edb2bb9773398f500a2299768d304a64e3#npm:5.16.0"],\ - ["isomorphic-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:5.0.0"],\ - ["tslib", "npm:2.4.0"],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/executor-http", [\ - ["npm:1.0.9", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-executor-http-npm-1.0.9-355a7891af-07cb8e170a.zip/node_modules/@graphql-tools/executor-http/",\ - "packageDependencies": [\ - ["@graphql-tools/executor-http", "npm:1.0.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:ff92fe2f1ef93a6042fbe73d6837b79bb0a6219c1900add1584397ce079d24d054ceda4c7f873114172aa7d47c668e9dac6f717a7521b5a8d2b737e05be6b264#npm:1.0.9", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-executor-http-virtual-fc910a5b45/0/cache/@graphql-tools-executor-http-npm-1.0.9-355a7891af-07cb8e170a.zip/node_modules/@graphql-tools/executor-http/",\ - "packageDependencies": [\ - ["@graphql-tools/executor-http", "virtual:ff92fe2f1ef93a6042fbe73d6837b79bb0a6219c1900add1584397ce079d24d054ceda4c7f873114172aa7d47c668e9dac6f717a7521b5a8d2b737e05be6b264#npm:1.0.9"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@repeaterjs/repeater", "npm:3.0.5"],\ - ["@types/graphql", null],\ - ["@whatwg-node/fetch", "npm:0.9.17"],\ - ["extract-files", "npm:11.0.0"],\ - ["graphql", "npm:16.9.0"],\ - ["meros", "virtual:fc910a5b45feb2b7cbfc0576ee10b096529c8e8c413877b663c2f3829cad00d05479874b90d25146b2fc3b60b138c6ab1293f475521f4b9c33bc1d1326fe22c5#npm:1.3.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/executor-legacy-ws", [\ - ["npm:1.0.6", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-executor-legacy-ws-npm-1.0.6-f80c33271d-1333ed9bb4.zip/node_modules/@graphql-tools/executor-legacy-ws/",\ - "packageDependencies": [\ - ["@graphql-tools/executor-legacy-ws", "npm:1.0.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:1.0.6", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-executor-legacy-ws-virtual-af14102e85/0/cache/@graphql-tools-executor-legacy-ws-npm-1.0.6-f80c33271d-1333ed9bb4.zip/node_modules/@graphql-tools/executor-legacy-ws/",\ - "packageDependencies": [\ - ["@graphql-tools/executor-legacy-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:1.0.6"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["@types/ws", "npm:8.5.3"],\ - ["graphql", "npm:16.9.0"],\ - ["isomorphic-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:5.0.0"],\ - ["tslib", "npm:2.4.0"],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/git-loader", [\ - ["npm:8.0.5", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-git-loader-npm-8.0.5-d5b783d151-6a0bce681c.zip/node_modules/@graphql-tools/git-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/git-loader", "npm:8.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.5", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-git-loader-virtual-6f7570fb35/0/cache/@graphql-tools-git-loader-npm-8.0.5-d5b783d151-6a0bce681c.zip/node_modules/@graphql-tools/git-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/git-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.5"],\ - ["@graphql-tools/graphql-tag-pluck", "virtual:c7476d3629f733066e4bfc5a4dd36a9925aa42a6069d60b32ebe9b5cb452da1297d48fe24fd9068c86909f6b063e838d9374c0f6ddc752bf0e5e061448599bfc#npm:8.3.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["is-glob", "npm:4.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["tslib", "npm:2.4.0"],\ - ["unixify", "npm:1.0.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/github-loader", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-github-loader-npm-8.0.1-0c2f41018b-d309e8330b.zip/node_modules/@graphql-tools/github-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/github-loader", "npm:8.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-github-loader-virtual-ff92fe2f1e/0/cache/@graphql-tools-github-loader-npm-8.0.1-0c2f41018b-d309e8330b.zip/node_modules/@graphql-tools/github-loader/",\ - "packageDependencies": [\ - ["@ardatan/sync-fetch", "npm:0.0.1"],\ - ["@graphql-tools/executor-http", "virtual:ff92fe2f1ef93a6042fbe73d6837b79bb0a6219c1900add1584397ce079d24d054ceda4c7f873114172aa7d47c668e9dac6f717a7521b5a8d2b737e05be6b264#npm:1.0.9"],\ - ["@graphql-tools/github-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/graphql-tag-pluck", "virtual:c7476d3629f733066e4bfc5a4dd36a9925aa42a6069d60b32ebe9b5cb452da1297d48fe24fd9068c86909f6b063e838d9374c0f6ddc752bf0e5e061448599bfc#npm:8.3.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["@whatwg-node/fetch", "npm:0.9.17"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/graphql-file-loader", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-graphql-file-loader-npm-8.0.1-b6d30cc823-fceb035cac.zip/node_modules/@graphql-tools/graphql-file-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/graphql-file-loader", "npm:8.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-graphql-file-loader-virtual-42fa0c3950/0/cache/@graphql-tools-graphql-file-loader-npm-8.0.1-b6d30cc823-fceb035cac.zip/node_modules/@graphql-tools/graphql-file-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/graphql-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/import", "virtual:42fa0c3950898ef6ed92b06a4efcabd30de194840715ac45ea935a0e2747fe837a1fa37d6328e509d249d4aded621a529ac12a9d816d2e8e338fa1183ad7c25b#npm:7.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["globby", "npm:11.1.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["unixify", "npm:1.0.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/graphql-tag-pluck", [\ - ["npm:8.3.0", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-graphql-tag-pluck-npm-8.3.0-f2c1abcfe5-45d4216d09.zip/node_modules/@graphql-tools/graphql-tag-pluck/",\ - "packageDependencies": [\ - ["@graphql-tools/graphql-tag-pluck", "npm:8.3.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:c7476d3629f733066e4bfc5a4dd36a9925aa42a6069d60b32ebe9b5cb452da1297d48fe24fd9068c86909f6b063e838d9374c0f6ddc752bf0e5e061448599bfc#npm:8.3.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-graphql-tag-pluck-virtual-22ad242263/0/cache/@graphql-tools-graphql-tag-pluck-npm-8.3.0-f2c1abcfe5-45d4216d09.zip/node_modules/@graphql-tools/graphql-tag-pluck/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.24.4"],\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/plugin-syntax-import-assertions", "virtual:22ad24226385078c74141223ef7b11769d4474eceb19a8cd7e3355fb14f594d29f98db4bdf482d835617497bbd39156c3e4aaf815d4dfd0d40a4846a300e01a0#npm:7.24.1"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@graphql-tools/graphql-tag-pluck", "virtual:c7476d3629f733066e4bfc5a4dd36a9925aa42a6069d60b32ebe9b5cb452da1297d48fe24fd9068c86909f6b063e838d9374c0f6ddc752bf0e5e061448599bfc#npm:8.3.0"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/import", [\ - ["npm:7.0.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-import-npm-7.0.1-9f60498c03-ff578aad5e.zip/node_modules/@graphql-tools/import/",\ - "packageDependencies": [\ - ["@graphql-tools/import", "npm:7.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:42fa0c3950898ef6ed92b06a4efcabd30de194840715ac45ea935a0e2747fe837a1fa37d6328e509d249d4aded621a529ac12a9d816d2e8e338fa1183ad7c25b#npm:7.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-import-virtual-4fefb5bab2/0/cache/@graphql-tools-import-npm-7.0.1-9f60498c03-ff578aad5e.zip/node_modules/@graphql-tools/import/",\ - "packageDependencies": [\ - ["@graphql-tools/import", "virtual:42fa0c3950898ef6ed92b06a4efcabd30de194840715ac45ea935a0e2747fe837a1fa37d6328e509d249d4aded621a529ac12a9d816d2e8e338fa1183ad7c25b#npm:7.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["resolve-from", "npm:5.0.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/jest-transform", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-jest-transform-npm-1.2.2-03d83d1a93-da556e5cf7.zip/node_modules/@graphql-tools/jest-transform/",\ - "packageDependencies": [\ - ["@graphql-tools/jest-transform", "npm:1.2.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.2.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-jest-transform-virtual-5653d5543e/0/cache/@graphql-tools-jest-transform-npm-1.2.2-03d83d1a93-da556e5cf7.zip/node_modules/@graphql-tools/jest-transform/",\ - "packageDependencies": [\ - ["@graphql-tools/jest-transform", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.2.2"],\ - ["@graphql-tools/webpack-loader", "virtual:5653d5543e654e993b733adc86a6ce6375e0ca9e98314fe957727159f7afb71341aca35397bcc56d2dcb90806fd788a1add71be5c376279ebe604b505d9928a4#npm:6.7.1"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/json-file-loader", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-json-file-loader-npm-8.0.1-9c0768d795-db19f579d8.zip/node_modules/@graphql-tools/json-file-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/json-file-loader", "npm:8.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-json-file-loader-virtual-2b108876a2/0/cache/@graphql-tools-json-file-loader-npm-8.0.1-9c0768d795-db19f579d8.zip/node_modules/@graphql-tools/json-file-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/json-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["globby", "npm:11.1.0"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["unixify", "npm:1.0.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/load", [\ - ["npm:8.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-load-npm-8.0.2-0d1e8c157c-ca291b6790.zip/node_modules/@graphql-tools/load/",\ - "packageDependencies": [\ - ["@graphql-tools/load", "npm:8.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-load-virtual-b9912b7119/0/cache/@graphql-tools-load-npm-8.0.2-0d1e8c157c-ca291b6790.zip/node_modules/@graphql-tools/load/",\ - "packageDependencies": [\ - ["@graphql-tools/load", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/schema", "virtual:043b488eb9b1864448aac2aaac288c7c7c5cf00da50a6e7ab8636fbd0ac6af465c42b024e5f90329a76a3e50a9ca4de9c9928375dd642a072d60a472d08cb835#npm:10.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["p-limit", "npm:3.1.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/merge", [\ - ["npm:8.3.6", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-merge-npm-8.3.6-ad2d6061ff-511136c82c.zip/node_modules/@graphql-tools/merge/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "npm:8.3.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.4.2", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-merge-npm-8.4.2-26df56fe04-62a4e93812.zip/node_modules/@graphql-tools/merge/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "npm:8.4.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:9.0.3", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-merge-npm-9.0.3-6ecd052f85-c2162297d3.zip/node_modules/@graphql-tools/merge/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "npm:9.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:074de4dbd2214ff5c93772188fb056cf823461fcfbaee16186cc554351ccc073947accf6dc11479ac292ad7b597b10dfdcda69119b0ab04d5899d9ed52009a0a#npm:9.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-merge-virtual-daceb4eb99/0/cache/@graphql-tools-merge-npm-9.0.3-6ecd052f85-c2162297d3.zip/node_modules/@graphql-tools/merge/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "virtual:074de4dbd2214ff5c93772188fb056cf823461fcfbaee16186cc554351ccc073947accf6dc11479ac292ad7b597b10dfdcda69119b0ab04d5899d9ed52009a0a#npm:9.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.3.6", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-merge-virtual-7fcfa1518c/0/cache/@graphql-tools-merge-npm-8.3.6-ad2d6061ff-511136c82c.zip/node_modules/@graphql-tools/merge/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.3.6"],\ - ["@graphql-tools/utils", "virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.12.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-merge-virtual-24e6a06b13/0/cache/@graphql-tools-merge-npm-8.4.2-26df56fe04-62a4e93812.zip/node_modules/@graphql-tools/merge/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:8.4.2"],\ - ["@graphql-tools/utils", "virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:9.2.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/optimize", [\ - ["npm:1.3.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-optimize-npm-1.3.1-88bd9c3d29-4eed041bc3.zip/node_modules/@graphql-tools/optimize/",\ - "packageDependencies": [\ - ["@graphql-tools/optimize", "npm:1.3.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-optimize-npm-2.0.0-710bf461f3-7f79c0e185.zip/node_modules/@graphql-tools/optimize/",\ - "packageDependencies": [\ - ["@graphql-tools/optimize", "npm:2.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:1.3.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-optimize-virtual-7fba058f7b/0/cache/@graphql-tools-optimize-npm-1.3.1-88bd9c3d29-4eed041bc3.zip/node_modules/@graphql-tools/optimize/",\ - "packageDependencies": [\ - ["@graphql-tools/optimize", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:1.3.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:2.0.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-optimize-virtual-4f603f4c05/0/cache/@graphql-tools-optimize-npm-2.0.0-710bf461f3-7f79c0e185.zip/node_modules/@graphql-tools/optimize/",\ - "packageDependencies": [\ - ["@graphql-tools/optimize", "virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:2.0.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/prisma-loader", [\ - ["npm:8.0.3", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-prisma-loader-npm-8.0.3-90f38b262b-5e40b054cf.zip/node_modules/@graphql-tools/prisma-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/prisma-loader", "npm:8.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-prisma-loader-virtual-6795cf3897/0/cache/@graphql-tools-prisma-loader-npm-8.0.3-90f38b262b-5e40b054cf.zip/node_modules/@graphql-tools/prisma-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/prisma-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.3"],\ - ["@graphql-tools/url-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["@types/js-yaml", "npm:4.0.5"],\ - ["@types/json-stable-stringify", "npm:1.0.34"],\ - ["@whatwg-node/fetch", "npm:0.9.17"],\ - ["chalk", "npm:4.1.2"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["dotenv", "npm:16.0.1"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-request", "virtual:6795cf38976456a9da7dbfcb7f2eced3581dbb1f1cdf16fa3fca3909c41b5ba349cf3f29407050ae75dd12ede3739c3faa09e770bca90ce610deb4f7d6cbb837#npm:6.1.0"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.4"],\ - ["jose", "npm:5.9.6"],\ - ["js-yaml", "npm:4.1.0"],\ - ["json-stable-stringify", "npm:1.0.1"],\ - ["lodash", "npm:4.17.21"],\ - ["scuid", "npm:1.1.0"],\ - ["tslib", "npm:2.4.0"],\ - ["yaml-ast-parser", "npm:0.0.43"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/relay-operation-optimizer", [\ - ["npm:6.5.3", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-relay-operation-optimizer-npm-6.5.3-33f309547c-08a78a0d88.zip/node_modules/@graphql-tools/relay-operation-optimizer/",\ - "packageDependencies": [\ - ["@graphql-tools/relay-operation-optimizer", "npm:6.5.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:7.0.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-relay-operation-optimizer-npm-7.0.1-637e63a4de-24a29aea91.zip/node_modules/@graphql-tools/relay-operation-optimizer/",\ - "packageDependencies": [\ - ["@graphql-tools/relay-operation-optimizer", "npm:7.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:6.5.3", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-relay-operation-optimizer-virtual-a288840856/0/cache/@graphql-tools-relay-operation-optimizer-npm-6.5.3-33f309547c-08a78a0d88.zip/node_modules/@graphql-tools/relay-operation-optimizer/",\ - "packageDependencies": [\ - ["@ardatan/relay-compiler", "virtual:e16902fd004b55a738b7b49ed2f4d71fc0a80419a713c332f3b61e8c9c8a60d1340c889ae83dc6fe2e429e62cd79246761ed5e174b9b7b2a74f2edab818b7a37#npm:12.0.0"],\ - ["@graphql-tools/relay-operation-optimizer", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:6.5.3"],\ - ["@graphql-tools/utils", "virtual:ccedc0f301ef31fb562ff342759a5bc7a17e354478fabefbbaea70292378ac6a56e529a64deafa6a01e0875f41c116b946d051591dfc9b24a5945ddb92aa48b7#npm:8.10.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:7.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-relay-operation-optimizer-virtual-e16902fd00/0/cache/@graphql-tools-relay-operation-optimizer-npm-7.0.1-637e63a4de-24a29aea91.zip/node_modules/@graphql-tools/relay-operation-optimizer/",\ - "packageDependencies": [\ - ["@ardatan/relay-compiler", "virtual:e16902fd004b55a738b7b49ed2f4d71fc0a80419a713c332f3b61e8c9c8a60d1340c889ae83dc6fe2e429e62cd79246761ed5e174b9b7b2a74f2edab818b7a37#npm:12.0.0"],\ - ["@graphql-tools/relay-operation-optimizer", "virtual:b6f708e52fc59972b9a3a6d12339c28ca7c6a4f5e9fb11f5c3737a532eb381160d484dad997e21b7c114fc270822c1caf2bd8ad970975ba864b5c2752185a16a#npm:7.0.1"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/schema", [\ - ["npm:10.0.3", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-schema-npm-10.0.3-dd8d6e4a1a-dbe8ea12ea.zip/node_modules/@graphql-tools/schema/",\ - "packageDependencies": [\ - ["@graphql-tools/schema", "npm:10.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:9.0.19", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-schema-npm-9.0.19-2dd6a9ed56-762811fe08.zip/node_modules/@graphql-tools/schema/",\ - "packageDependencies": [\ - ["@graphql-tools/schema", "npm:9.0.19"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:9.0.4", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-schema-npm-9.0.4-897a8f53ac-8478d77b9d.zip/node_modules/@graphql-tools/schema/",\ - "packageDependencies": [\ - ["@graphql-tools/schema", "npm:9.0.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:043b488eb9b1864448aac2aaac288c7c7c5cf00da50a6e7ab8636fbd0ac6af465c42b024e5f90329a76a3e50a9ca4de9c9928375dd642a072d60a472d08cb835#npm:10.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-schema-virtual-074de4dbd2/0/cache/@graphql-tools-schema-npm-10.0.3-dd8d6e4a1a-dbe8ea12ea.zip/node_modules/@graphql-tools/schema/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "virtual:074de4dbd2214ff5c93772188fb056cf823461fcfbaee16186cc554351ccc073947accf6dc11479ac292ad7b597b10dfdcda69119b0ab04d5899d9ed52009a0a#npm:9.0.3"],\ - ["@graphql-tools/schema", "virtual:043b488eb9b1864448aac2aaac288c7c7c5cf00da50a6e7ab8636fbd0ac6af465c42b024e5f90329a76a3e50a9ca4de9c9928375dd642a072d60a472d08cb835#npm:10.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.0.4", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-schema-virtual-6f052b9bbe/0/cache/@graphql-tools-schema-npm-9.0.4-897a8f53ac-8478d77b9d.zip/node_modules/@graphql-tools/schema/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.3.6"],\ - ["@graphql-tools/schema", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.0.4"],\ - ["@graphql-tools/utils", "virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.12.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.11"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:9.0.19", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-schema-virtual-802213ad90/0/cache/@graphql-tools-schema-npm-9.0.19-2dd6a9ed56-762811fe08.zip/node_modules/@graphql-tools/schema/",\ - "packageDependencies": [\ - ["@graphql-tools/merge", "virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:8.4.2"],\ - ["@graphql-tools/schema", "virtual:f578131a86afa2ff6e55211bcd1615d6f453a54804246b5cb4f163f4497feed2196e72f5796a9df2ec0603a2e79c6b32d3db79165c272493a523173666de0ca8#npm:9.0.19"],\ - ["@graphql-tools/utils", "virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:9.2.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/url-loader", [\ - ["npm:8.0.2", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-url-loader-npm-8.0.2-8210244171-0b5c7a5593.zip/node_modules/@graphql-tools/url-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/url-loader", "npm:8.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-url-loader-virtual-68b7f07aa1/0/cache/@graphql-tools-url-loader-npm-8.0.2-8210244171-0b5c7a5593.zip/node_modules/@graphql-tools/url-loader/",\ - "packageDependencies": [\ - ["@ardatan/sync-fetch", "npm:0.0.1"],\ - ["@graphql-tools/delegate", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.4"],\ - ["@graphql-tools/executor-graphql-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:1.1.2"],\ - ["@graphql-tools/executor-http", "virtual:ff92fe2f1ef93a6042fbe73d6837b79bb0a6219c1900add1584397ce079d24d054ceda4c7f873114172aa7d47c668e9dac6f717a7521b5a8d2b737e05be6b264#npm:1.0.9"],\ - ["@graphql-tools/executor-legacy-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:1.0.6"],\ - ["@graphql-tools/url-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@graphql-tools/wrap", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.5"],\ - ["@types/graphql", null],\ - ["@types/ws", "npm:8.5.3"],\ - ["@whatwg-node/fetch", "npm:0.9.17"],\ - ["graphql", "npm:16.9.0"],\ - ["isomorphic-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:5.0.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.11"],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/utils", [\ - ["npm:10.1.2", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-utils-npm-10.1.2-2606110440-e2e8362ac5.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "npm:10.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.10.0", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-utils-npm-8.10.0-89863318e8-2c79da754e.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "npm:8.10.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.12.0", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-utils-npm-8.12.0-ffa93e9c17-9a3f377a7b.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "npm:8.12.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:9.2.0", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-utils-npm-9.2.0-924077613e-1bfd52a9aa.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "npm:9.2.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:9.2.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-utils-npm-9.2.1-ed63b70392-b1665043c2.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "npm:9.2.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:1f0d0eb0cb93c7ed4306e06815f5ed1423e1648dfe7250fd8d7f071e218684795a9e95e112395a3818b94eea58cf0a4721e70768380db0569403e5563f2301ee#npm:9.2.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-utils-virtual-1919d5682d/0/cache/@graphql-tools-utils-npm-9.2.0-924077613e-1bfd52a9aa.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "virtual:1f0d0eb0cb93c7ed4306e06815f5ed1423e1648dfe7250fd8d7f071e218684795a9e95e112395a3818b94eea58cf0a4721e70768380db0569403e5563f2301ee#npm:9.2.0"],\ - ["@graphql-typed-document-node/core", "virtual:bc99b96f0fa44ff66df334d122615311570797565c101108585b0b92e2494d2fed2cf8ba41ed928eae637e83e04b4b5643319fc12af526fe8ab7798b1c35dda0#npm:3.1.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-utils-virtual-b3a0bb1589/0/cache/@graphql-tools-utils-npm-10.1.2-2606110440-e2e8362ac5.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@graphql-typed-document-node/core", "virtual:bc99b96f0fa44ff66df334d122615311570797565c101108585b0b92e2494d2fed2cf8ba41ed928eae637e83e04b4b5643319fc12af526fe8ab7798b1c35dda0#npm:3.1.1"],\ - ["@types/graphql", null],\ - ["cross-inspect", "npm:1.0.0"],\ - ["dset", "npm:3.1.4"],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.12.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-utils-virtual-8db942fd12/0/cache/@graphql-tools-utils-npm-8.12.0-ffa93e9c17-9a3f377a7b.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "virtual:6f052b9bbe3ea773eba62f8f90eff400d397209557d99538f918c2dbb850db69601a4176dae72ce44d18ee7a683b74dd5f418d1ab8345087c0d5c49b8e8c1379#npm:8.12.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:9.2.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-utils-virtual-d8558a2f42/0/cache/@graphql-tools-utils-npm-9.2.1-ed63b70392-b1665043c2.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "virtual:802213ad9039efdf1c71756fc458514400a7e0fa5ee26fa945f87dc6bba6cc67d4d41f21760a015b6991da6b589034e0d511bb17d66021c5d8a578dea242fbf3#npm:9.2.1"],\ - ["@graphql-typed-document-node/core", "virtual:bc99b96f0fa44ff66df334d122615311570797565c101108585b0b92e2494d2fed2cf8ba41ed928eae637e83e04b4b5643319fc12af526fe8ab7798b1c35dda0#npm:3.1.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:ccedc0f301ef31fb562ff342759a5bc7a17e354478fabefbbaea70292378ac6a56e529a64deafa6a01e0875f41c116b946d051591dfc9b24a5945ddb92aa48b7#npm:8.10.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-utils-virtual-48b06859fc/0/cache/@graphql-tools-utils-npm-8.10.0-89863318e8-2c79da754e.zip/node_modules/@graphql-tools/utils/",\ - "packageDependencies": [\ - ["@graphql-tools/utils", "virtual:ccedc0f301ef31fb562ff342759a5bc7a17e354478fabefbbaea70292378ac6a56e529a64deafa6a01e0875f41c116b946d051591dfc9b24a5945ddb92aa48b7#npm:8.10.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/webpack-loader", [\ - ["npm:6.7.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-webpack-loader-npm-6.7.1-268fb34415-0cdf25b265.zip/node_modules/@graphql-tools/webpack-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/webpack-loader", "npm:6.7.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:5653d5543e654e993b733adc86a6ce6375e0ca9e98314fe957727159f7afb71341aca35397bcc56d2dcb90806fd788a1add71be5c376279ebe604b505d9928a4#npm:6.7.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-webpack-loader-virtual-059cc9e1ef/0/cache/@graphql-tools-webpack-loader-npm-6.7.1-268fb34415-0cdf25b265.zip/node_modules/@graphql-tools/webpack-loader/",\ - "packageDependencies": [\ - ["@graphql-tools/optimize", "virtual:0ccab3f55e149c6d3535dc676530b557de431d7ad76accfc27f19610c9714a3be8034a4d2fc9f6d5cae149e4829c2ab59b7c1fbec7b58f895584fdc2b415c570#npm:1.3.1"],\ - ["@graphql-tools/webpack-loader", "virtual:5653d5543e654e993b733adc86a6ce6375e0ca9e98314fe957727159f7afb71341aca35397bcc56d2dcb90806fd788a1add71be5c376279ebe604b505d9928a4#npm:6.7.1"],\ - ["@graphql-tools/webpack-loader-runtime", "virtual:059cc9e1efd21508bc9b6e92ea4006193a879d44bee9cad0e9faa8f2c74e67c55cd827884ae306debc4d958eaccc9b5ebcf2688fba76ea595c988cb66cba326c#npm:6.4.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/webpack-loader-runtime", [\ - ["npm:6.4.1", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-webpack-loader-runtime-npm-6.4.1-6c731fe447-462d4e5a56.zip/node_modules/@graphql-tools/webpack-loader-runtime/",\ - "packageDependencies": [\ - ["@graphql-tools/webpack-loader-runtime", "npm:6.4.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:059cc9e1efd21508bc9b6e92ea4006193a879d44bee9cad0e9faa8f2c74e67c55cd827884ae306debc4d958eaccc9b5ebcf2688fba76ea595c988cb66cba326c#npm:6.4.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-webpack-loader-runtime-virtual-e3398be4de/0/cache/@graphql-tools-webpack-loader-runtime-npm-6.4.1-6c731fe447-462d4e5a56.zip/node_modules/@graphql-tools/webpack-loader-runtime/",\ - "packageDependencies": [\ - ["@graphql-tools/webpack-loader-runtime", "virtual:059cc9e1efd21508bc9b6e92ea4006193a879d44bee9cad0e9faa8f2c74e67c55cd827884ae306debc4d958eaccc9b5ebcf2688fba76ea595c988cb66cba326c#npm:6.4.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-tools/wrap", [\ - ["npm:10.0.5", {\ - "packageLocation": "./.yarn/cache/@graphql-tools-wrap-npm-10.0.5-3ddae5a409-02d5278bf1.zip/node_modules/@graphql-tools/wrap/",\ - "packageDependencies": [\ - ["@graphql-tools/wrap", "npm:10.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.5", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-tools-wrap-virtual-e20a67ad25/0/cache/@graphql-tools-wrap-npm-10.0.5-3ddae5a409-02d5278bf1.zip/node_modules/@graphql-tools/wrap/",\ - "packageDependencies": [\ - ["@graphql-tools/delegate", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.4"],\ - ["@graphql-tools/schema", "virtual:043b488eb9b1864448aac2aaac288c7c7c5cf00da50a6e7ab8636fbd0ac6af465c42b024e5f90329a76a3e50a9ca4de9c9928375dd642a072d60a472d08cb835#npm:10.0.3"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@graphql-tools/wrap", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:10.0.5"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["tslib", "npm:2.4.0"],\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@graphql-typed-document-node/core", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/@graphql-typed-document-node-core-npm-3.1.1-b1b114073d-87ff4cee30.zip/node_modules/@graphql-typed-document-node/core/",\ - "packageDependencies": [\ - ["@graphql-typed-document-node/core", "npm:3.1.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/@graphql-typed-document-node-core-npm-3.2.0-505adb1e90-fa44443acc.zip/node_modules/@graphql-typed-document-node/core/",\ - "packageDependencies": [\ - ["@graphql-typed-document-node/core", "npm:3.2.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:3.2.0", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-typed-document-node-core-virtual-c364588e10/0/cache/@graphql-typed-document-node-core-npm-3.2.0-505adb1e90-fa44443acc.zip/node_modules/@graphql-typed-document-node/core/",\ - "packageDependencies": [\ - ["@graphql-typed-document-node/core", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:3.2.0"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:bc99b96f0fa44ff66df334d122615311570797565c101108585b0b92e2494d2fed2cf8ba41ed928eae637e83e04b4b5643319fc12af526fe8ab7798b1c35dda0#npm:3.1.1", {\ - "packageLocation": "./.yarn/__virtual__/@graphql-typed-document-node-core-virtual-b6fa27cfe8/0/cache/@graphql-typed-document-node-core-npm-3.1.1-b1b114073d-87ff4cee30.zip/node_modules/@graphql-typed-document-node/core/",\ - "packageDependencies": [\ - ["@graphql-typed-document-node/core", "virtual:bc99b96f0fa44ff66df334d122615311570797565c101108585b0b92e2494d2fed2cf8ba41ed928eae637e83e04b4b5643319fc12af526fe8ab7798b1c35dda0#npm:3.1.1"],\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@gulpjs/to-absolute-glob", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/@gulpjs-to-absolute-glob-npm-4.0.0-e28e1619ba-30ec782506.zip/node_modules/@gulpjs/to-absolute-glob/",\ - "packageDependencies": [\ - ["@gulpjs/to-absolute-glob", "npm:4.0.0"],\ - ["is-negated-glob", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@humanwhocodes/config-array", [\ - ["npm:0.11.14", {\ - "packageLocation": "./.yarn/cache/@humanwhocodes-config-array-npm-0.11.14-94a02fcc87-3ffb24ecdf.zip/node_modules/@humanwhocodes/config-array/",\ - "packageDependencies": [\ - ["@humanwhocodes/config-array", "npm:0.11.14"],\ - ["@humanwhocodes/object-schema", "npm:2.0.3"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["minimatch", "npm:3.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@humanwhocodes/module-importer", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/@humanwhocodes-module-importer-npm-1.0.1-9d07ed2e4a-e993950e34.zip/node_modules/@humanwhocodes/module-importer/",\ - "packageDependencies": [\ - ["@humanwhocodes/module-importer", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@humanwhocodes/object-schema", [\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/@humanwhocodes-object-schema-npm-2.0.3-4f0e508cd9-05bb99ed06.zip/node_modules/@humanwhocodes/object-schema/",\ - "packageDependencies": [\ - ["@humanwhocodes/object-schema", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-darwin-arm64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-darwin-arm64-npm-0.33.5-c319591c53/node_modules/@img/sharp-darwin-arm64/",\ - "packageDependencies": [\ - ["@img/sharp-darwin-arm64", "npm:0.33.5"],\ - ["@img/sharp-libvips-darwin-arm64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-darwin-x64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-darwin-x64-npm-0.33.5-785c54564a/node_modules/@img/sharp-darwin-x64/",\ - "packageDependencies": [\ - ["@img/sharp-darwin-x64", "npm:0.33.5"],\ - ["@img/sharp-libvips-darwin-x64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-darwin-arm64", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-darwin-arm64-npm-1.0.4-d0d063884a/node_modules/@img/sharp-libvips-darwin-arm64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-darwin-arm64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-darwin-x64", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-darwin-x64-npm-1.0.4-6fde8e50e0/node_modules/@img/sharp-libvips-darwin-x64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-darwin-x64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-linux-arm", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-linux-arm-npm-1.0.5-99ec104f55/node_modules/@img/sharp-libvips-linux-arm/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-arm", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-linux-arm64", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-linux-arm64-npm-1.0.4-24a3d8b19a/node_modules/@img/sharp-libvips-linux-arm64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-arm64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-linux-s390x", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-linux-s390x-npm-1.0.4-c4ea54fdc1/node_modules/@img/sharp-libvips-linux-s390x/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-s390x", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-linux-x64", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-linux-x64-npm-1.0.4-0974f077b7/node_modules/@img/sharp-libvips-linux-x64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-x64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-linuxmusl-arm64", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-linuxmusl-arm64-npm-1.0.4-c63b2fb991/node_modules/@img/sharp-libvips-linuxmusl-arm64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linuxmusl-arm64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-libvips-linuxmusl-x64", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-libvips-linuxmusl-x64-npm-1.0.4-ea67a00cef/node_modules/@img/sharp-libvips-linuxmusl-x64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linuxmusl-x64", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-linux-arm", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-linux-arm-npm-0.33.5-2c7cd6ba15/node_modules/@img/sharp-linux-arm/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-arm", "npm:1.0.5"],\ - ["@img/sharp-linux-arm", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-linux-arm64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-linux-arm64-npm-0.33.5-9d6c17ffc3/node_modules/@img/sharp-linux-arm64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-arm64", "npm:1.0.4"],\ - ["@img/sharp-linux-arm64", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-linux-s390x", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-linux-s390x-npm-0.33.5-e9edc1d1ea/node_modules/@img/sharp-linux-s390x/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-s390x", "npm:1.0.4"],\ - ["@img/sharp-linux-s390x", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-linux-x64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-linux-x64-npm-0.33.5-1b6c430eb4/node_modules/@img/sharp-linux-x64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linux-x64", "npm:1.0.4"],\ - ["@img/sharp-linux-x64", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-linuxmusl-arm64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-linuxmusl-arm64-npm-0.33.5-686a8ec1a7/node_modules/@img/sharp-linuxmusl-arm64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linuxmusl-arm64", "npm:1.0.4"],\ - ["@img/sharp-linuxmusl-arm64", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-linuxmusl-x64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-linuxmusl-x64-npm-0.33.5-b88b11869b/node_modules/@img/sharp-linuxmusl-x64/",\ - "packageDependencies": [\ - ["@img/sharp-libvips-linuxmusl-x64", "npm:1.0.4"],\ - ["@img/sharp-linuxmusl-x64", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-wasm32", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-wasm32-npm-0.33.5-e49bff60db/node_modules/@img/sharp-wasm32/",\ - "packageDependencies": [\ - ["@emnapi/runtime", "npm:1.3.1"],\ - ["@img/sharp-wasm32", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-win32-ia32", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-win32-ia32-npm-0.33.5-531493b2d4/node_modules/@img/sharp-win32-ia32/",\ - "packageDependencies": [\ - ["@img/sharp-win32-ia32", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@img/sharp-win32-x64", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/@img-sharp-win32-x64-npm-0.33.5-e9e45d0448/node_modules/@img/sharp-win32-x64/",\ - "packageDependencies": [\ - ["@img/sharp-win32-x64", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@isaacs/fs-minipass", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/@isaacs-fs-minipass-npm-4.0.1-677026e841-4412e9e671.zip/node_modules/@isaacs/fs-minipass/",\ - "packageDependencies": [\ - ["@isaacs/fs-minipass", "npm:4.0.1"],\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@istanbuljs/load-nyc-config", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/@istanbuljs-load-nyc-config-npm-1.1.0-42d17c9cb1-b000a5acd8.zip/node_modules/@istanbuljs/load-nyc-config/",\ - "packageDependencies": [\ - ["@istanbuljs/load-nyc-config", "npm:1.1.0"],\ - ["camelcase", "npm:5.3.1"],\ - ["find-up", "npm:4.1.0"],\ - ["get-package-type", "npm:0.1.0"],\ - ["js-yaml", "npm:3.14.1"],\ - ["resolve-from", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@istanbuljs/schema", [\ - ["npm:0.1.3", {\ - "packageLocation": "./.yarn/cache/@istanbuljs-schema-npm-0.1.3-466bd3eaaa-a9b1e49acd.zip/node_modules/@istanbuljs/schema/",\ - "packageDependencies": [\ - ["@istanbuljs/schema", "npm:0.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/console", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-console-npm-29.0.3-6a344e7027-17aa162a03.zip/node_modules/@jest/console/",\ - "packageDependencies": [\ - ["@jest/console", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["chalk", "npm:4.1.2"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/core", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-core-npm-29.0.3-1420f6bb71-9eb3587e4e.zip/node_modules/@jest/core/",\ - "packageDependencies": [\ - ["@jest/core", "npm:29.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@jest-core-virtual-739c50a76b/0/cache/@jest-core-npm-29.0.3-1420f6bb71-9eb3587e4e.zip/node_modules/@jest/core/",\ - "packageDependencies": [\ - ["@jest/console", "npm:29.0.3"],\ - ["@jest/core", "virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3"],\ - ["@jest/reporters", "virtual:739c50a76be63255a82c405af312b0fa0d0ba64c2b2c0c94d164c5e0eda383ee8cc0564b793eb81b473e9a2e5dd933ed4849606da3bd4643ccd6a9d9f7e98577#npm:29.0.3"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/node-notifier", null],\ - ["ansi-escapes", "npm:4.3.2"],\ - ["chalk", "npm:4.1.2"],\ - ["ci-info", "npm:3.3.2"],\ - ["exit", "npm:0.1.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-changed-files", "npm:29.0.0"],\ - ["jest-config", "virtual:739c50a76be63255a82c405af312b0fa0d0ba64c2b2c0c94d164c5e0eda383ee8cc0564b793eb81b473e9a2e5dd933ed4849606da3bd4643ccd6a9d9f7e98577#npm:29.0.3"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-resolve", "npm:29.0.3"],\ - ["jest-resolve-dependencies", "npm:29.0.3"],\ - ["jest-runner", "npm:29.0.3"],\ - ["jest-runtime", "npm:29.0.3"],\ - ["jest-snapshot", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-validate", "npm:29.0.3"],\ - ["jest-watcher", "npm:29.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["node-notifier", null],\ - ["pretty-format", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "packagePeers": [\ - "@types/node-notifier",\ - "node-notifier"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/environment", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-environment-npm-29.0.3-7a7de56ebf-a95caa5882.zip/node_modules/@jest/environment/",\ - "packageDependencies": [\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/fake-timers", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["jest-mock", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/expect", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-expect-npm-29.0.3-e537139782-06b2b316be.zip/node_modules/@jest/expect/",\ - "packageDependencies": [\ - ["@jest/expect", "npm:29.0.3"],\ - ["expect", "npm:29.0.3"],\ - ["jest-snapshot", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/expect-utils", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/@jest-expect-utils-npm-28.1.3-d83dfb8847-f48e4c5b26.zip/node_modules/@jest/expect-utils/",\ - "packageDependencies": [\ - ["@jest/expect-utils", "npm:28.1.3"],\ - ["jest-get-type", "npm:28.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-expect-utils-npm-29.0.3-418f13fbb0-c98a3a0bcd.zip/node_modules/@jest/expect-utils/",\ - "packageDependencies": [\ - ["@jest/expect-utils", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/fake-timers", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-fake-timers-npm-29.0.3-307d7651cf-a4cbc3b88f.zip/node_modules/@jest/fake-timers/",\ - "packageDependencies": [\ - ["@jest/fake-timers", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@sinonjs/fake-timers", "npm:9.1.2"],\ - ["@types/node", "npm:18.7.6"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-mock", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/globals", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-globals-npm-29.0.3-9fa881535e-ab6a3f93b9.zip/node_modules/@jest/globals/",\ - "packageDependencies": [\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/expect", "npm:29.0.3"],\ - ["@jest/globals", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["jest-mock", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/reporters", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-reporters-npm-29.0.3-8b5ec3b6fe-a5c62bd28b.zip/node_modules/@jest/reporters/",\ - "packageDependencies": [\ - ["@jest/reporters", "npm:29.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:739c50a76be63255a82c405af312b0fa0d0ba64c2b2c0c94d164c5e0eda383ee8cc0564b793eb81b473e9a2e5dd933ed4849606da3bd4643ccd6a9d9f7e98577#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/@jest-reporters-virtual-f4321bc8ef/0/cache/@jest-reporters-npm-29.0.3-8b5ec3b6fe-a5c62bd28b.zip/node_modules/@jest/reporters/",\ - "packageDependencies": [\ - ["@bcoe/v8-coverage", "npm:0.2.3"],\ - ["@jest/console", "npm:29.0.3"],\ - ["@jest/reporters", "virtual:739c50a76be63255a82c405af312b0fa0d0ba64c2b2c0c94d164c5e0eda383ee8cc0564b793eb81b473e9a2e5dd933ed4849606da3bd4643ccd6a9d9f7e98577#npm:29.0.3"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/node-notifier", null],\ - ["chalk", "npm:4.1.2"],\ - ["collect-v8-coverage", "npm:1.0.1"],\ - ["exit", "npm:0.1.2"],\ - ["glob", "npm:7.2.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["istanbul-lib-coverage", "npm:3.2.0"],\ - ["istanbul-lib-instrument", "npm:5.2.0"],\ - ["istanbul-lib-report", "npm:3.0.0"],\ - ["istanbul-lib-source-maps", "npm:4.0.1"],\ - ["istanbul-reports", "npm:3.1.5"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-worker", "npm:29.0.3"],\ - ["node-notifier", null],\ - ["slash", "npm:3.0.0"],\ - ["string-length", "npm:4.0.2"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["terminal-link", "npm:2.1.1"],\ - ["v8-to-istanbul", "npm:9.0.1"]\ - ],\ - "packagePeers": [\ - "@types/node-notifier",\ - "node-notifier"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/schemas", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/@jest-schemas-npm-28.1.3-231835b296-3cf1d4b66c.zip/node_modules/@jest/schemas/",\ - "packageDependencies": [\ - ["@jest/schemas", "npm:28.1.3"],\ - ["@sinclair/typebox", "npm:0.24.28"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/@jest-schemas-npm-29.0.0-5d6c90262d-41355c78f0.zip/node_modules/@jest/schemas/",\ - "packageDependencies": [\ - ["@jest/schemas", "npm:29.0.0"],\ - ["@sinclair/typebox", "npm:0.24.28"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/source-map", [\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/@jest-source-map-npm-29.0.0-ab558ac87f-dd97bc5826.zip/node_modules/@jest/source-map/",\ - "packageDependencies": [\ - ["@jest/source-map", "npm:29.0.0"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"],\ - ["callsites", "npm:3.1.0"],\ - ["graceful-fs", "npm:4.2.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/test-result", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-test-result-npm-29.0.3-dd19adb6f4-cf393da7ea.zip/node_modules/@jest/test-result/",\ - "packageDependencies": [\ - ["@jest/console", "npm:29.0.3"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/istanbul-lib-coverage", "npm:2.0.4"],\ - ["collect-v8-coverage", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/test-sequencer", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-test-sequencer-npm-29.0.3-7cd04b82a4-46be05c329.zip/node_modules/@jest/test-sequencer/",\ - "packageDependencies": [\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/test-sequencer", "npm:29.0.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/transform", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-transform-npm-29.0.3-8947e581e9-0a4023ab07.zip/node_modules/@jest/transform/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"],\ - ["babel-plugin-istanbul", "npm:6.1.1"],\ - ["chalk", "npm:4.1.2"],\ - ["convert-source-map", "npm:1.8.0"],\ - ["fast-json-stable-stringify", "npm:2.1.0"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-util", "npm:29.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["pirates", "npm:4.0.5"],\ - ["slash", "npm:3.0.0"],\ - ["write-file-atomic", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jest/types", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/@jest-types-npm-28.1.3-422ad1bd71-a90e636df7.zip/node_modules/@jest/types/",\ - "packageDependencies": [\ - ["@jest/schemas", "npm:28.1.3"],\ - ["@jest/types", "npm:28.1.3"],\ - ["@types/istanbul-lib-coverage", "npm:2.0.4"],\ - ["@types/istanbul-reports", "npm:3.0.1"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/yargs", "npm:17.0.11"],\ - ["chalk", "npm:4.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/@jest-types-npm-29.0.3-5cd97a4e8b-dc95e31331.zip/node_modules/@jest/types/",\ - "packageDependencies": [\ - ["@jest/schemas", "npm:29.0.0"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/istanbul-lib-coverage", "npm:2.0.4"],\ - ["@types/istanbul-reports", "npm:3.0.1"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/yargs", "npm:17.0.11"],\ - ["chalk", "npm:4.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jridgewell/gen-mapping", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/@jridgewell-gen-mapping-npm-0.1.1-3bad172ac6-ba76fae1d8.zip/node_modules/@jridgewell/gen-mapping/",\ - "packageDependencies": [\ - ["@jridgewell/gen-mapping", "npm:0.1.1"],\ - ["@jridgewell/set-array", "npm:1.1.2"],\ - ["@jridgewell/sourcemap-codec", "npm:1.4.14"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/@jridgewell-gen-mapping-npm-0.3.2-c64eeb4a4e-7ba0070be1.zip/node_modules/@jridgewell/gen-mapping/",\ - "packageDependencies": [\ - ["@jridgewell/gen-mapping", "npm:0.3.2"],\ - ["@jridgewell/set-array", "npm:1.1.2"],\ - ["@jridgewell/sourcemap-codec", "npm:1.4.14"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.3.5", {\ - "packageLocation": "./.yarn/cache/@jridgewell-gen-mapping-npm-0.3.5-d8b85ebeaf-81587b3c4d.zip/node_modules/@jridgewell/gen-mapping/",\ - "packageDependencies": [\ - ["@jridgewell/gen-mapping", "npm:0.3.5"],\ - ["@jridgewell/set-array", "npm:1.2.1"],\ - ["@jridgewell/sourcemap-codec", "npm:1.4.14"],\ - ["@jridgewell/trace-mapping", "npm:0.3.25"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jridgewell/resolve-uri", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/@jridgewell-resolve-uri-npm-3.1.0-6ff2351e61-320ceb37af.zip/node_modules/@jridgewell/resolve-uri/",\ - "packageDependencies": [\ - ["@jridgewell/resolve-uri", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/@jridgewell-resolve-uri-npm-3.1.1-aa2de3f210-64d59df8ae.zip/node_modules/@jridgewell/resolve-uri/",\ - "packageDependencies": [\ - ["@jridgewell/resolve-uri", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jridgewell/set-array", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/@jridgewell-set-array-npm-1.1.2-45b82d7fb6-69a84d5980.zip/node_modules/@jridgewell/set-array/",\ - "packageDependencies": [\ - ["@jridgewell/set-array", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/@jridgewell-set-array-npm-1.2.1-2312928209-832e513a85.zip/node_modules/@jridgewell/set-array/",\ - "packageDependencies": [\ - ["@jridgewell/set-array", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jridgewell/source-map", [\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/@jridgewell-source-map-npm-0.3.2-6fd1f37b22-1aaa42075b.zip/node_modules/@jridgewell/source-map/",\ - "packageDependencies": [\ - ["@jridgewell/gen-mapping", "npm:0.3.2"],\ - ["@jridgewell/source-map", "npm:0.3.2"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.3.6", {\ - "packageLocation": "./.yarn/cache/@jridgewell-source-map-npm-0.3.6-fe0849eb05-0a9aca9320.zip/node_modules/@jridgewell/source-map/",\ - "packageDependencies": [\ - ["@jridgewell/gen-mapping", "npm:0.3.5"],\ - ["@jridgewell/source-map", "npm:0.3.6"],\ - ["@jridgewell/trace-mapping", "npm:0.3.25"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jridgewell/sourcemap-codec", [\ - ["npm:1.4.14", {\ - "packageLocation": "./.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.14-f5f0630788-26e768fae6.zip/node_modules/@jridgewell/sourcemap-codec/",\ - "packageDependencies": [\ - ["@jridgewell/sourcemap-codec", "npm:1.4.14"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.4.15", {\ - "packageLocation": "./.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.15-a055fb62cf-89960ac087.zip/node_modules/@jridgewell/sourcemap-codec/",\ - "packageDependencies": [\ - ["@jridgewell/sourcemap-codec", "npm:1.4.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@jridgewell/trace-mapping", [\ - ["npm:0.3.15", {\ - "packageLocation": "./.yarn/cache/@jridgewell-trace-mapping-npm-0.3.15-7357dbf648-c889039e05.zip/node_modules/@jridgewell/trace-mapping/",\ - "packageDependencies": [\ - ["@jridgewell/resolve-uri", "npm:3.1.0"],\ - ["@jridgewell/sourcemap-codec", "npm:1.4.14"],\ - ["@jridgewell/trace-mapping", "npm:0.3.15"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.3.20", {\ - "packageLocation": "./.yarn/cache/@jridgewell-trace-mapping-npm-0.3.20-d90f282910-683117e4e6.zip/node_modules/@jridgewell/trace-mapping/",\ - "packageDependencies": [\ - ["@jridgewell/resolve-uri", "npm:3.1.1"],\ - ["@jridgewell/sourcemap-codec", "npm:1.4.15"],\ - ["@jridgewell/trace-mapping", "npm:0.3.20"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.3.25", {\ - "packageLocation": "./.yarn/cache/@jridgewell-trace-mapping-npm-0.3.25-c076fd2279-dced32160a.zip/node_modules/@jridgewell/trace-mapping/",\ - "packageDependencies": [\ - ["@jridgewell/resolve-uri", "npm:3.1.1"],\ - ["@jridgewell/sourcemap-codec", "npm:1.4.15"],\ - ["@jridgewell/trace-mapping", "npm:0.3.25"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@kamilkisiela/fast-url-parser", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/@kamilkisiela-fast-url-parser-npm-1.1.4-5f8517435b-5b79438235.zip/node_modules/@kamilkisiela/fast-url-parser/",\ - "packageDependencies": [\ - ["@kamilkisiela/fast-url-parser", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@lhci/cli", [\ - ["npm:0.13.0", {\ - "packageLocation": "./.yarn/cache/@lhci-cli-npm-0.13.0-230a37c347-93ee05d057.zip/node_modules/@lhci/cli/",\ - "packageDependencies": [\ - ["@lhci/cli", "npm:0.13.0"],\ - ["@lhci/utils", "npm:0.13.0"],\ - ["chrome-launcher", "npm:0.13.4"],\ - ["compression", "npm:1.7.4"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["express", "npm:4.21.1"],\ - ["https-proxy-agent", "npm:5.0.1"],\ - ["inquirer", "npm:6.5.2"],\ - ["isomorphic-fetch", "npm:3.0.0"],\ - ["lighthouse", "npm:11.4.0"],\ - ["lighthouse-logger", "npm:1.2.0"],\ - ["open", "npm:7.4.2"],\ - ["tmp", "npm:0.1.0"],\ - ["uuid", "npm:8.3.2"],\ - ["yargs", "npm:15.4.1"],\ - ["yargs-parser", "npm:13.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@lhci/utils", [\ - ["npm:0.13.0", {\ - "packageLocation": "./.yarn/cache/@lhci-utils-npm-0.13.0-f33eff2f16-86123e978d.zip/node_modules/@lhci/utils/",\ - "packageDependencies": [\ - ["@lhci/utils", "npm:0.13.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["isomorphic-fetch", "npm:3.0.0"],\ - ["js-yaml", "npm:3.14.1"],\ - ["lighthouse", "npm:11.4.0"],\ - ["tree-kill", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mdi/js", [\ - ["npm:7.0.96", {\ - "packageLocation": "./.yarn/cache/@mdi-js-npm-7.0.96-2cbb743e8b-e2788b2451.zip/node_modules/@mdi/js/",\ - "packageDependencies": [\ - ["@mdi/js", "npm:7.0.96"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mdi/react", [\ - ["npm:1.6.1", {\ - "packageLocation": "./.yarn/cache/@mdi-react-npm-1.6.1-00754d4c4a-c72eb3e3d5.zip/node_modules/@mdi/react/",\ - "packageDependencies": [\ - ["@mdi/react", "npm:1.6.1"],\ - ["prop-types", "npm:15.8.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@motionone/animation", [\ - ["npm:10.14.0", {\ - "packageLocation": "./.yarn/cache/@motionone-animation-npm-10.14.0-26ae26acd7-19dfd6f50d.zip/node_modules/@motionone/animation/",\ - "packageDependencies": [\ - ["@motionone/animation", "npm:10.14.0"],\ - ["@motionone/easing", "npm:10.14.0"],\ - ["@motionone/types", "npm:10.14.0"],\ - ["@motionone/utils", "npm:10.14.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@motionone/dom", [\ - ["npm:10.13.1", {\ - "packageLocation": "./.yarn/cache/@motionone-dom-npm-10.13.1-2b54608f7c-721669c40b.zip/node_modules/@motionone/dom/",\ - "packageDependencies": [\ - ["@motionone/animation", "npm:10.14.0"],\ - ["@motionone/dom", "npm:10.13.1"],\ - ["@motionone/generators", "npm:10.14.0"],\ - ["@motionone/types", "npm:10.14.0"],\ - ["@motionone/utils", "npm:10.14.0"],\ - ["hey-listen", "npm:1.0.8"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@motionone/easing", [\ - ["npm:10.14.0", {\ - "packageLocation": "./.yarn/cache/@motionone-easing-npm-10.14.0-97af278bce-52c1b3888c.zip/node_modules/@motionone/easing/",\ - "packageDependencies": [\ - ["@motionone/easing", "npm:10.14.0"],\ - ["@motionone/utils", "npm:10.14.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@motionone/generators", [\ - ["npm:10.14.0", {\ - "packageLocation": "./.yarn/cache/@motionone-generators-npm-10.14.0-ffd261b86d-2e6a9bc856.zip/node_modules/@motionone/generators/",\ - "packageDependencies": [\ - ["@motionone/generators", "npm:10.14.0"],\ - ["@motionone/types", "npm:10.14.0"],\ - ["@motionone/utils", "npm:10.14.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@motionone/types", [\ - ["npm:10.14.0", {\ - "packageLocation": "./.yarn/cache/@motionone-types-npm-10.14.0-209a936e66-2fbd65f925.zip/node_modules/@motionone/types/",\ - "packageDependencies": [\ - ["@motionone/types", "npm:10.14.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@motionone/utils", [\ - ["npm:10.14.0", {\ - "packageLocation": "./.yarn/cache/@motionone-utils-npm-10.14.0-0281934633-62c792a000.zip/node_modules/@motionone/utils/",\ - "packageDependencies": [\ - ["@motionone/types", "npm:10.14.0"],\ - ["@motionone/utils", "npm:10.14.0"],\ - ["hey-listen", "npm:1.0.8"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mrmlnc/readdir-enhanced", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/@mrmlnc-readdir-enhanced-npm-2.2.1-5286808663-55d898d3d6.zip/node_modules/@mrmlnc/readdir-enhanced/",\ - "packageDependencies": [\ - ["@mrmlnc/readdir-enhanced", "npm:2.2.1"],\ - ["call-me-maybe", "npm:1.0.1"],\ - ["glob-to-regexp", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/base", [\ - ["npm:5.0.0-alpha.98", {\ - "packageLocation": "./.yarn/cache/@mui-base-npm-5.0.0-alpha.98-f4d605d753-b9c6dd74ec.zip/node_modules/@mui/base/",\ - "packageDependencies": [\ - ["@mui/base", "npm:5.0.0-alpha.98"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["patch:@mui/base@npm%3A5.0.0-beta.40#./.yarn/patches/@mui-base-npm-5.0.0-beta.40-248417914d.patch::version=5.0.0-beta.40&hash=6b20e2&locator=mpdx-react%40workspace%3A.", {\ - "packageLocation": "./.yarn/cache/@mui-base-patch-6da654589f-e68f3ba124.zip/node_modules/@mui/base/",\ - "packageDependencies": [\ - ["@mui/base", "patch:@mui/base@npm%3A5.0.0-beta.40#./.yarn/patches/@mui-base-npm-5.0.0-beta.40-248417914d.patch::version=5.0.0-beta.40&hash=6b20e2&locator=mpdx-react%40workspace%3A."]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.0.0-alpha.98", {\ - "packageLocation": "./.yarn/__virtual__/@mui-base-virtual-58dcf0ac0b/0/cache/@mui-base-npm-5.0.0-alpha.98-f4d605d753-b9c6dd74ec.zip/node_modules/@mui/base/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/is-prop-valid", "npm:1.2.2"],\ - ["@mui/base", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.0.0-alpha.98"],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@popperjs/core", "npm:2.11.6"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["clsx", "npm:1.2.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-is", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#patch:@mui/base@npm%3A5.0.0-beta.40#./.yarn/patches/@mui-base-npm-5.0.0-beta.40-248417914d.patch::version=5.0.0-beta.40&hash=6b20e2&locator=mpdx-react%40workspace%3A.", {\ - "packageLocation": "./.yarn/__virtual__/@mui-base-virtual-4f5a855337/0/cache/@mui-base-patch-6da654589f-e68f3ba124.zip/node_modules/@mui/base/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@floating-ui/react-dom", "virtual:4f5a8553376d031144fb26c5efe82f65203d4ddbb00eef62543a7320f45e3f8639d616acedd88fcf907fe54f839230d9b7cf4aec2dabfacd59f08c6a08ff9111#npm:2.0.8"],\ - ["@mui/base", "virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#patch:@mui/base@npm%3A5.0.0-beta.40#./.yarn/patches/@mui-base-npm-5.0.0-beta.40-248417914d.patch::version=5.0.0-beta.40&hash=6b20e2&locator=mpdx-react%40workspace%3A."],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@popperjs/core", "npm:2.11.8"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["clsx", "npm:2.1.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/core-downloads-tracker", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-core-downloads-tracker-npm-5.15.14-64629ad8a1-0a1c63d906.zip/node_modules/@mui/core-downloads-tracker/",\ - "packageDependencies": [\ - ["@mui/core-downloads-tracker", "npm:5.15.14"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/icons-material", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-icons-material-npm-5.15.14-f6bb058c61-a5033b67d4.zip/node_modules/@mui/icons-material/",\ - "packageDependencies": [\ - ["@mui/icons-material", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-icons-material-virtual-8f36da4fbb/0/cache/@mui-icons-material-npm-5.15.14-f6bb058c61-a5033b67d4.zip/node_modules/@mui/icons-material/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/icons-material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@types/mui__material", null],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@mui/material",\ - "@types/mui__material",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/lab", [\ - ["npm:5.0.0-alpha.100", {\ - "packageLocation": "./.yarn/cache/@mui-lab-npm-5.0.0-alpha.100-a923acd5e8-ecc300a32e.zip/node_modules/@mui/lab/",\ - "packageDependencies": [\ - ["@mui/lab", "npm:5.0.0-alpha.100"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.0-alpha.100", {\ - "packageLocation": "./.yarn/__virtual__/@mui-lab-virtual-4f3246b2cc/0/cache/@mui-lab-npm-5.0.0-alpha.100-a923acd5e8-ecc300a32e.zip/node_modules/@mui/lab/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/base", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.0.0-alpha.98"],\ - ["@mui/lab", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.0-alpha.100"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/mui__material", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["clsx", "npm:1.2.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-is", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@mui/material",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/mui__material",\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/material", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-material-npm-5.15.14-c27014d763-a2c3355b39.zip/node_modules/@mui/material/",\ - "packageDependencies": [\ - ["@mui/material", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-material-virtual-5c92ca6ffb/0/cache/@mui-material-npm-5.15.14-c27014d763-a2c3355b39.zip/node_modules/@mui/material/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/base", "virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#patch:@mui/base@npm%3A5.0.0-beta.40#./.yarn/patches/@mui-base-npm-5.0.0-beta.40-248417914d.patch::version=5.0.0-beta.40&hash=6b20e2&locator=mpdx-react%40workspace%3A."],\ - ["@mui/core-downloads-tracker", "npm:5.15.14"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@types/react-transition-group", "npm:4.4.10"],\ - ["clsx", "npm:2.1.1"],\ - ["csstype", "npm:3.1.3"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-is", "npm:18.2.0"],\ - ["react-transition-group", "virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#npm:4.4.5"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/private-theming", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-private-theming-npm-5.15.14-da7d55aa3f-6a14311ed5.zip/node_modules/@mui/private-theming/",\ - "packageDependencies": [\ - ["@mui/private-theming", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:4597957013948cde5838fa26088971a7a707a539a30538795c72a77132fe5fe0027746ec778f891d0868ecb9bfaae0371d77c058234c00c4da39d79b6ca2731a#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-private-theming-virtual-34c339e2a9/0/cache/@mui-private-theming-npm-5.15.14-da7d55aa3f-6a14311ed5.zip/node_modules/@mui/private-theming/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/private-theming", "virtual:4597957013948cde5838fa26088971a7a707a539a30538795c72a77132fe5fe0027746ec778f891d0868ecb9bfaae0371d77c058234c00c4da39d79b6ca2731a#npm:5.15.14"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@types/react", "npm:18.0.21"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/styled-engine", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-styled-engine-npm-5.15.14-f2c4d6b014-2a5e03bb20.zip/node_modules/@mui/styled-engine/",\ - "packageDependencies": [\ - ["@mui/styled-engine", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:32bcc1c87736def3169654c22d87dfd31c87f021211b10dde767af20eafb4571c5612b697e2ddeb63a51410ca3a78737c86ade7c10721ab63de0772108922a88#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-styled-engine-virtual-97385b6433/0/cache/@mui-styled-engine-npm-5.15.14-f2c4d6b014-2a5e03bb20.zip/node_modules/@mui/styled-engine/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/cache", "npm:11.11.0"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/styled-engine", "virtual:32bcc1c87736def3169654c22d87dfd31c87f021211b10dde767af20eafb4571c5612b697e2ddeb63a51410ca3a78737c86ade7c10721ab63de0772108922a88#npm:5.15.14"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/react", "npm:18.0.21"],\ - ["csstype", "npm:3.1.3"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/styles", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-styles-npm-5.15.14-e2a433bf05-1fa11e8cff.zip/node_modules/@mui/styles/",\ - "packageDependencies": [\ - ["@mui/styles", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-styles-virtual-4597957013/0/cache/@mui-styles-npm-5.15.14-e2a433bf05-1fa11e8cff.zip/node_modules/@mui/styles/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/hash", "npm:0.9.1"],\ - ["@mui/private-theming", "virtual:4597957013948cde5838fa26088971a7a707a539a30538795c72a77132fe5fe0027746ec778f891d0868ecb9bfaae0371d77c058234c00c4da39d79b6ca2731a#npm:5.15.14"],\ - ["@mui/styles", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@types/react", "npm:18.0.21"],\ - ["clsx", "npm:2.1.1"],\ - ["csstype", "npm:3.1.3"],\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-camel-case", "npm:10.10.0"],\ - ["jss-plugin-default-unit", "npm:10.10.0"],\ - ["jss-plugin-global", "npm:10.10.0"],\ - ["jss-plugin-nested", "npm:10.10.0"],\ - ["jss-plugin-props-sort", "npm:10.10.0"],\ - ["jss-plugin-rule-value-function", "npm:10.10.0"],\ - ["jss-plugin-vendor-prefixer", "npm:10.10.0"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/system", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-system-npm-5.15.14-7001c56e01-64a9eac1be.zip/node_modules/@mui/system/",\ - "packageDependencies": [\ - ["@mui/system", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-system-virtual-32bcc1c877/0/cache/@mui-system-npm-5.15.14-7001c56e01-64a9eac1be.zip/node_modules/@mui/system/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/private-theming", "virtual:4597957013948cde5838fa26088971a7a707a539a30538795c72a77132fe5fe0027746ec778f891d0868ecb9bfaae0371d77c058234c00c4da39d79b6ca2731a#npm:5.15.14"],\ - ["@mui/styled-engine", "virtual:32bcc1c87736def3169654c22d87dfd31c87f021211b10dde767af20eafb4571c5612b697e2ddeb63a51410ca3a78737c86ade7c10721ab63de0772108922a88#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/react", "npm:18.0.21"],\ - ["clsx", "npm:2.1.1"],\ - ["csstype", "npm:3.1.3"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/types", [\ - ["npm:7.4.4", {\ - "packageLocation": "./.yarn/cache/@mui-types-npm-7.4.4-2ea4e141ad-4b9de1abe3.zip/node_modules/@mui/types/",\ - "packageDependencies": [\ - ["@mui/types", "npm:7.4.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4", {\ - "packageLocation": "./.yarn/__virtual__/@mui-types-virtual-38827b3519/0/cache/@mui-types-npm-7.4.4-2ea4e141ad-4b9de1abe3.zip/node_modules/@mui/types/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@types/react", "npm:18.0.21"]\ - ],\ - "packagePeers": [\ - "@types/react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/utils", [\ - ["npm:5.15.14", {\ - "packageLocation": "./.yarn/cache/@mui-utils-npm-5.15.14-0912681c9c-b3cbe2d0aa.zip/node_modules/@mui/utils/",\ - "packageDependencies": [\ - ["@mui/utils", "npm:5.15.14"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/@mui-utils-npm-7.2.0-6ca3e0d8ae-de2ef4a4b4.zip/node_modules/@mui/utils/",\ - "packageDependencies": [\ - ["@mui/utils", "npm:7.2.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14", {\ - "packageLocation": "./.yarn/__virtual__/@mui-utils-virtual-0f04b59f72/0/cache/@mui-utils-npm-5.15.14-0912681c9c-b3cbe2d0aa.zip/node_modules/@mui/utils/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@types/prop-types", "npm:15.7.15"],\ - ["@types/react", "npm:18.0.21"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-is", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0", {\ - "packageLocation": "./.yarn/__virtual__/@mui-utils-virtual-73ffa2b313/0/cache/@mui-utils-npm-7.2.0-6ca3e0d8ae-de2ef4a4b4.zip/node_modules/@mui/utils/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/types", "virtual:58dcf0ac0b97facdc2369967c9c1c667d36eaa20c7fc1b1d4449b795972e5e3c7e2852cbe3774e594cfbbf659ab289e290312976f893404adef9493d6f4bea66#npm:7.4.4"],\ - ["@mui/utils", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0"],\ - ["@types/prop-types", "npm:15.7.15"],\ - ["@types/react", "npm:18.0.21"],\ - ["clsx", "npm:2.1.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-is", "npm:19.1.1"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/x-data-grid", [\ - ["npm:8.9.2", {\ - "packageLocation": "./.yarn/cache/@mui-x-data-grid-npm-8.9.2-1f863b8b4c-a41324566e.zip/node_modules/@mui/x-data-grid/",\ - "packageDependencies": [\ - ["@mui/x-data-grid", "npm:8.9.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.9.2", {\ - "packageLocation": "./.yarn/__virtual__/@mui-x-data-grid-virtual-b37d6a7108/0/cache/@mui-x-data-grid-npm-8.9.2-1f863b8b4c-a41324566e.zip/node_modules/@mui/x-data-grid/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/utils", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0"],\ - ["@mui/x-data-grid", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.9.2"],\ - ["@mui/x-internals", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:8.9.2"],\ - ["@mui/x-virtualizer", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:0.1.0"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/mui__material", null],\ - ["@types/mui__system", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["clsx", "npm:2.1.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["use-sync-external-store", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:1.5.0"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@mui/material",\ - "@mui/system",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/mui__material",\ - "@types/mui__system",\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/x-date-pickers", [\ - ["npm:7.0.0-beta.7", {\ - "packageLocation": "./.yarn/cache/@mui-x-date-pickers-npm-7.0.0-beta.7-d2863d0509-40e5880650.zip/node_modules/@mui/x-date-pickers/",\ - "packageDependencies": [\ - ["@mui/x-date-pickers", "npm:7.0.0-beta.7"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.0.0-beta.7", {\ - "packageLocation": "./.yarn/__virtual__/@mui-x-date-pickers-virtual-42f4a8fa6c/0/cache/@mui-x-date-pickers-npm-7.0.0-beta.7-d2863d0509-40e5880650.zip/node_modules/@mui/x-date-pickers/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/base", "virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#patch:@mui/base@npm%3A5.0.0-beta.40#./.yarn/patches/@mui-base-npm-5.0.0-beta.40-248417914d.patch::version=5.0.0-beta.40&hash=6b20e2&locator=mpdx-react%40workspace%3A."],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/utils", "virtual:4f3246b2cc09eb53ba2d876816336ba940a2597884de4b16b2746ae853bb5ba9b89ceee3abb6a5224f639c4bfd29159eb397daeed280ae07d7afcddc6b77536d#npm:5.15.14"],\ - ["@mui/x-date-pickers", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.0.0-beta.7"],\ - ["@types/date-fns", null],\ - ["@types/date-fns-jalali", null],\ - ["@types/dayjs", null],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/luxon", "npm:3.4.2"],\ - ["@types/moment", null],\ - ["@types/moment-hijri", null],\ - ["@types/moment-jalaali", null],\ - ["@types/mui__material", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@types/react-transition-group", "npm:4.4.10"],\ - ["clsx", "npm:2.1.1"],\ - ["date-fns", null],\ - ["date-fns-jalali", null],\ - ["dayjs", null],\ - ["luxon", "npm:3.4.4"],\ - ["moment", null],\ - ["moment-hijri", null],\ - ["moment-jalaali", null],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-transition-group", "virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#npm:4.4.5"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@mui/material",\ - "@types/date-fns-jalali",\ - "@types/date-fns",\ - "@types/dayjs",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/luxon",\ - "@types/moment-hijri",\ - "@types/moment-jalaali",\ - "@types/moment",\ - "@types/mui__material",\ - "@types/react-dom",\ - "@types/react",\ - "date-fns-jalali",\ - "date-fns",\ - "dayjs",\ - "luxon",\ - "moment-hijri",\ - "moment-jalaali",\ - "moment",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/x-internals", [\ - ["npm:8.9.2", {\ - "packageLocation": "./.yarn/cache/@mui-x-internals-npm-8.9.2-2b6ff7319b-7c99c9623c.zip/node_modules/@mui/x-internals/",\ - "packageDependencies": [\ - ["@mui/x-internals", "npm:8.9.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:5bc94a5c9794e18b37a695e8a1bbcec9c15a5d6589201b58865ee2e386351d3c92b11b4abe1681980a3a252f1cc89fa19ca0c99ee69c35fba2f6f48fc7e5d99a#npm:8.9.2", {\ - "packageLocation": "./.yarn/__virtual__/@mui-x-internals-virtual-7102068bef/0/cache/@mui-x-internals-npm-8.9.2-2b6ff7319b-7c99c9623c.zip/node_modules/@mui/x-internals/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/system", null],\ - ["@mui/utils", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0"],\ - ["@mui/x-internals", "virtual:5bc94a5c9794e18b37a695e8a1bbcec9c15a5d6589201b58865ee2e386351d3c92b11b4abe1681980a3a252f1cc89fa19ca0c99ee69c35fba2f6f48fc7e5d99a#npm:8.9.2"],\ - ["@types/mui__system", null],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"],\ - ["reselect", "npm:5.1.1"],\ - ["use-sync-external-store", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:1.5.0"]\ - ],\ - "packagePeers": [\ - "@mui/system",\ - "@types/mui__system",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:8.9.2", {\ - "packageLocation": "./.yarn/__virtual__/@mui-x-internals-virtual-a501e624b1/0/cache/@mui-x-internals-npm-8.9.2-2b6ff7319b-7c99c9623c.zip/node_modules/@mui/x-internals/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/utils", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0"],\ - ["@mui/x-internals", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:8.9.2"],\ - ["@types/mui__system", null],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"],\ - ["reselect", "npm:5.1.1"],\ - ["use-sync-external-store", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:1.5.0"]\ - ],\ - "packagePeers": [\ - "@mui/system",\ - "@types/mui__system",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@mui/x-virtualizer", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/@mui-x-virtualizer-npm-0.1.0-5bbb36f14f-cf20c75b0c.zip/node_modules/@mui/x-virtualizer/",\ - "packageDependencies": [\ - ["@mui/x-virtualizer", "npm:0.1.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:0.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@mui-x-virtualizer-virtual-5bc94a5c97/0/cache/@mui-x-virtualizer-npm-0.1.0-5bbb36f14f-cf20c75b0c.zip/node_modules/@mui/x-virtualizer/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@mui/x-internals", "virtual:5bc94a5c9794e18b37a695e8a1bbcec9c15a5d6589201b58865ee2e386351d3c92b11b4abe1681980a3a252f1cc89fa19ca0c99ee69c35fba2f6f48fc7e5d99a#npm:8.9.2"],\ - ["@mui/x-virtualizer", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:0.1.0"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/bundle-analyzer", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/cache/@next-bundle-analyzer-npm-15.0.3-b8906b7328-79c7c3bfdc.zip/node_modules/@next/bundle-analyzer/",\ - "packageDependencies": [\ - ["@next/bundle-analyzer", "npm:15.0.3"],\ - ["webpack-bundle-analyzer", "npm:4.10.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/env", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/cache/@next-env-npm-15.0.3-9609e01b90-50103908b2.zip/node_modules/@next/env/",\ - "packageDependencies": [\ - ["@next/env", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/eslint-plugin-next", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/cache/@next-eslint-plugin-next-npm-15.0.3-c7563bf8c7-ef0d68b3e0.zip/node_modules/@next/eslint-plugin-next/",\ - "packageDependencies": [\ - ["@next/eslint-plugin-next", "npm:15.0.3"],\ - ["fast-glob", "npm:3.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-darwin-arm64", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-darwin-arm64-npm-15.0.3-d34fe8dc69/node_modules/@next/swc-darwin-arm64/",\ - "packageDependencies": [\ - ["@next/swc-darwin-arm64", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-darwin-x64", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-darwin-x64-npm-15.0.3-3a6cf7c8b2/node_modules/@next/swc-darwin-x64/",\ - "packageDependencies": [\ - ["@next/swc-darwin-x64", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-linux-arm64-gnu", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-linux-arm64-gnu-npm-15.0.3-6e6a387a7f/node_modules/@next/swc-linux-arm64-gnu/",\ - "packageDependencies": [\ - ["@next/swc-linux-arm64-gnu", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-linux-arm64-musl", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-linux-arm64-musl-npm-15.0.3-c3cefb93a7/node_modules/@next/swc-linux-arm64-musl/",\ - "packageDependencies": [\ - ["@next/swc-linux-arm64-musl", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-linux-x64-gnu", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-linux-x64-gnu-npm-15.0.3-01f7649907/node_modules/@next/swc-linux-x64-gnu/",\ - "packageDependencies": [\ - ["@next/swc-linux-x64-gnu", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-linux-x64-musl", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-linux-x64-musl-npm-15.0.3-94660cdd53/node_modules/@next/swc-linux-x64-musl/",\ - "packageDependencies": [\ - ["@next/swc-linux-x64-musl", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-win32-arm64-msvc", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-win32-arm64-msvc-npm-15.0.3-3e579a9267/node_modules/@next/swc-win32-arm64-msvc/",\ - "packageDependencies": [\ - ["@next/swc-win32-arm64-msvc", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@next/swc-win32-x64-msvc", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/unplugged/@next-swc-win32-x64-msvc-npm-15.0.3-38c4f0ffa7/node_modules/@next/swc-win32-x64-msvc/",\ - "packageDependencies": [\ - ["@next/swc-win32-x64-msvc", "npm:15.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@noble/hashes", [\ - ["npm:1.8.0", {\ - "packageLocation": "./.yarn/cache/@noble-hashes-npm-1.8.0-a397449e64-474b7f56bc.zip/node_modules/@noble/hashes/",\ - "packageDependencies": [\ - ["@noble/hashes", "npm:1.8.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@nodelib/fs.scandir", [\ - ["npm:2.1.5", {\ - "packageLocation": "./.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip/node_modules/@nodelib/fs.scandir/",\ - "packageDependencies": [\ - ["@nodelib/fs.scandir", "npm:2.1.5"],\ - ["@nodelib/fs.stat", "npm:2.0.5"],\ - ["run-parallel", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@nodelib/fs.stat", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/@nodelib-fs.stat-npm-1.1.3-95bc1892a0-318deab369.zip/node_modules/@nodelib/fs.stat/",\ - "packageDependencies": [\ - ["@nodelib/fs.stat", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip/node_modules/@nodelib/fs.stat/",\ - "packageDependencies": [\ - ["@nodelib/fs.stat", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@nodelib/fs.walk", [\ - ["npm:1.2.8", {\ - "packageLocation": "./.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip/node_modules/@nodelib/fs.walk/",\ - "packageDependencies": [\ - ["@nodelib/fs.scandir", "npm:2.1.5"],\ - ["@nodelib/fs.walk", "npm:1.2.8"],\ - ["fastq", "npm:1.13.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@npmcli/fs", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/@npmcli-fs-npm-2.1.2-08d434e77b-c5d4dfee80.zip/node_modules/@npmcli/fs/",\ - "packageDependencies": [\ - ["@gar/promisify", "npm:1.1.3"],\ - ["@npmcli/fs", "npm:2.1.2"],\ - ["semver", "npm:7.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@npmcli/move-file", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@npmcli-move-file-npm-2.0.1-b593d8f741-52dc02259d.zip/node_modules/@npmcli/move-file/",\ - "packageDependencies": [\ - ["@npmcli/move-file", "npm:2.0.1"],\ - ["mkdirp", "npm:1.0.4"],\ - ["rimraf", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@panva/hkdf", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/@panva-hkdf-npm-1.0.4-f5e148cb52-d93b511eba.zip/node_modules/@panva/hkdf/",\ - "packageDependencies": [\ - ["@panva/hkdf", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@paralleldrive/cuid2", [\ - ["npm:2.2.2", {\ - "packageLocation": "./.yarn/cache/@paralleldrive-cuid2-npm-2.2.2-e6061749b2-40ee269d6e.zip/node_modules/@paralleldrive/cuid2/",\ - "packageDependencies": [\ - ["@noble/hashes", "npm:1.8.0"],\ - ["@paralleldrive/cuid2", "npm:2.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/cache/@parcel-watcher-npm-2.4.1-2b3c6bb4aa-c163dff182.zip/node_modules/@parcel/watcher/",\ - "packageDependencies": [\ - ["@parcel/watcher", "npm:2.4.1"],\ - ["@parcel/watcher-android-arm64", "npm:2.4.1"],\ - ["@parcel/watcher-darwin-arm64", "npm:2.4.1"],\ - ["@parcel/watcher-darwin-x64", "npm:2.4.1"],\ - ["@parcel/watcher-freebsd-x64", "npm:2.4.1"],\ - ["@parcel/watcher-linux-arm-glibc", "npm:2.4.1"],\ - ["@parcel/watcher-linux-arm64-glibc", "npm:2.4.1"],\ - ["@parcel/watcher-linux-arm64-musl", "npm:2.4.1"],\ - ["@parcel/watcher-linux-x64-glibc", "npm:2.4.1"],\ - ["@parcel/watcher-linux-x64-musl", "npm:2.4.1"],\ - ["@parcel/watcher-win32-arm64", "npm:2.4.1"],\ - ["@parcel/watcher-win32-ia32", "npm:2.4.1"],\ - ["@parcel/watcher-win32-x64", "npm:2.4.1"],\ - ["detect-libc", "npm:1.0.3"],\ - ["is-glob", "npm:4.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["node-addon-api", "npm:7.1.0"],\ - ["node-gyp", "npm:9.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-android-arm64", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-android-arm64-npm-2.4.1-f16637b8e9/node_modules/@parcel/watcher-android-arm64/",\ - "packageDependencies": [\ - ["@parcel/watcher-android-arm64", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-darwin-arm64", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-darwin-arm64-npm-2.4.1-7294eb72cd/node_modules/@parcel/watcher-darwin-arm64/",\ - "packageDependencies": [\ - ["@parcel/watcher-darwin-arm64", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-darwin-x64", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-darwin-x64-npm-2.4.1-e905ba5776/node_modules/@parcel/watcher-darwin-x64/",\ - "packageDependencies": [\ - ["@parcel/watcher-darwin-x64", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-freebsd-x64", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-freebsd-x64-npm-2.4.1-e791fddc80/node_modules/@parcel/watcher-freebsd-x64/",\ - "packageDependencies": [\ - ["@parcel/watcher-freebsd-x64", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-linux-arm-glibc", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-linux-arm-glibc-npm-2.4.1-30dc29e34e/node_modules/@parcel/watcher-linux-arm-glibc/",\ - "packageDependencies": [\ - ["@parcel/watcher-linux-arm-glibc", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-linux-arm64-glibc", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-linux-arm64-glibc-npm-2.4.1-a58b99833d/node_modules/@parcel/watcher-linux-arm64-glibc/",\ - "packageDependencies": [\ - ["@parcel/watcher-linux-arm64-glibc", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-linux-arm64-musl", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-linux-arm64-musl-npm-2.4.1-88674463a0/node_modules/@parcel/watcher-linux-arm64-musl/",\ - "packageDependencies": [\ - ["@parcel/watcher-linux-arm64-musl", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-linux-x64-glibc", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-linux-x64-glibc-npm-2.4.1-e13cc4f7d9/node_modules/@parcel/watcher-linux-x64-glibc/",\ - "packageDependencies": [\ - ["@parcel/watcher-linux-x64-glibc", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-linux-x64-musl", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-linux-x64-musl-npm-2.4.1-5f47bb6a24/node_modules/@parcel/watcher-linux-x64-musl/",\ - "packageDependencies": [\ - ["@parcel/watcher-linux-x64-musl", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-win32-arm64", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-win32-arm64-npm-2.4.1-9bd9bde302/node_modules/@parcel/watcher-win32-arm64/",\ - "packageDependencies": [\ - ["@parcel/watcher-win32-arm64", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-win32-ia32", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-win32-ia32-npm-2.4.1-cf6408ff95/node_modules/@parcel/watcher-win32-ia32/",\ - "packageDependencies": [\ - ["@parcel/watcher-win32-ia32", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@parcel/watcher-win32-x64", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/unplugged/@parcel-watcher-win32-x64-npm-2.4.1-770608937e/node_modules/@parcel/watcher-win32-x64/",\ - "packageDependencies": [\ - ["@parcel/watcher-win32-x64", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@paulirish/trace_engine", [\ - ["npm:0.0.19", {\ - "packageLocation": "./.yarn/cache/@paulirish-trace_engine-npm-0.0.19-26fdc31b2a-a7852a6a61.zip/node_modules/@paulirish/trace_engine/",\ - "packageDependencies": [\ - ["@paulirish/trace_engine", "npm:0.0.19"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@peculiar/asn1-schema", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/@peculiar-asn1-schema-npm-2.3.0-9f2ea2bc2b-0eff81db61.zip/node_modules/@peculiar/asn1-schema/",\ - "packageDependencies": [\ - ["@peculiar/asn1-schema", "npm:2.3.0"],\ - ["asn1js", "npm:3.0.5"],\ - ["pvtsutils", "npm:1.3.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@peculiar/json-schema", [\ - ["npm:1.1.12", {\ - "packageLocation": "./.yarn/cache/@peculiar-json-schema-npm-1.1.12-f914d2ea65-dfec178afe.zip/node_modules/@peculiar/json-schema/",\ - "packageDependencies": [\ - ["@peculiar/json-schema", "npm:1.1.12"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@peculiar/webcrypto", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/@peculiar-webcrypto-npm-1.4.0-9c0343a222-125596cdc9.zip/node_modules/@peculiar/webcrypto/",\ - "packageDependencies": [\ - ["@peculiar/asn1-schema", "npm:2.3.0"],\ - ["@peculiar/json-schema", "npm:1.1.12"],\ - ["@peculiar/webcrypto", "npm:1.4.0"],\ - ["pvtsutils", "npm:1.3.2"],\ - ["tslib", "npm:2.4.0"],\ - ["webcrypto-core", "npm:1.7.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@polka/url", [\ - ["npm:1.0.0-next.28", {\ - "packageLocation": "./.yarn/cache/@polka-url-npm-1.0.0-next.28-024769eda8-7402aaf1de.zip/node_modules/@polka/url/",\ - "packageDependencies": [\ - ["@polka/url", "npm:1.0.0-next.28"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@popperjs/core", [\ - ["npm:2.11.6", {\ - "packageLocation": "./.yarn/cache/@popperjs-core-npm-2.11.6-5bcdc104bd-37f5b021d9.zip/node_modules/@popperjs/core/",\ - "packageDependencies": [\ - ["@popperjs/core", "npm:2.11.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.11.8", {\ - "packageLocation": "./.yarn/cache/@popperjs-core-npm-2.11.8-f1692e11a0-ddd16090cd.zip/node_modules/@popperjs/core/",\ - "packageDependencies": [\ - ["@popperjs/core", "npm:2.11.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/aspromise", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/@protobufjs-aspromise-npm-1.1.2-71d00b938f-8a938d84fe.zip/node_modules/@protobufjs/aspromise/",\ - "packageDependencies": [\ - ["@protobufjs/aspromise", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/base64", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/@protobufjs-base64-npm-1.1.2-cd8ca6814a-c71b100dae.zip/node_modules/@protobufjs/base64/",\ - "packageDependencies": [\ - ["@protobufjs/base64", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/codegen", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/@protobufjs-codegen-npm-2.0.4-36e188bbe6-c6ee5fa172.zip/node_modules/@protobufjs/codegen/",\ - "packageDependencies": [\ - ["@protobufjs/codegen", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/eventemitter", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/@protobufjs-eventemitter-npm-1.1.0-029cc7d431-03af3e99f1.zip/node_modules/@protobufjs/eventemitter/",\ - "packageDependencies": [\ - ["@protobufjs/eventemitter", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/fetch", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/@protobufjs-fetch-npm-1.1.0-ca857b7df4-67ae40572a.zip/node_modules/@protobufjs/fetch/",\ - "packageDependencies": [\ - ["@protobufjs/aspromise", "npm:1.1.2"],\ - ["@protobufjs/fetch", "npm:1.1.0"],\ - ["@protobufjs/inquire", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/float", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/@protobufjs-float-npm-1.0.2-5678f64d08-634c2c989d.zip/node_modules/@protobufjs/float/",\ - "packageDependencies": [\ - ["@protobufjs/float", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/inquire", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/@protobufjs-inquire-npm-1.1.0-3c7759e9ce-c09efa34a5.zip/node_modules/@protobufjs/inquire/",\ - "packageDependencies": [\ - ["@protobufjs/inquire", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/path", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/@protobufjs-path-npm-1.1.2-641d08de76-bb70956793.zip/node_modules/@protobufjs/path/",\ - "packageDependencies": [\ - ["@protobufjs/path", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/pool", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/@protobufjs-pool-npm-1.1.0-47a76f96a1-b9c7047647.zip/node_modules/@protobufjs/pool/",\ - "packageDependencies": [\ - ["@protobufjs/pool", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@protobufjs/utf8", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/@protobufjs-utf8-npm-1.1.0-02c590807c-131e289c57.zip/node_modules/@protobufjs/utf8/",\ - "packageDependencies": [\ - ["@protobufjs/utf8", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@puppeteer/browsers", [\ - ["npm:1.9.1", {\ - "packageLocation": "./.yarn/cache/@puppeteer-browsers-npm-1.9.1-f9743bc3b8-804cbc18bc.zip/node_modules/@puppeteer/browsers/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:1.9.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["extract-zip", "npm:2.0.1"],\ - ["progress", "npm:2.0.3"],\ - ["proxy-agent", "npm:6.3.1"],\ - ["tar-fs", "npm:3.0.4"],\ - ["unbzip2-stream", "npm:1.4.3"],\ - ["yargs", "npm:17.7.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/@puppeteer-browsers-npm-2.2.1-439a67632d-c56a3ce491.zip/node_modules/@puppeteer/browsers/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:2.2.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["extract-zip", "npm:2.0.1"],\ - ["progress", "npm:2.0.3"],\ - ["proxy-agent", "npm:6.4.0"],\ - ["semver", "npm:7.6.0"],\ - ["tar-fs", "npm:3.0.5"],\ - ["unbzip2-stream", "npm:1.4.3"],\ - ["yargs", "npm:17.7.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.8.0", {\ - "packageLocation": "./.yarn/cache/@puppeteer-browsers-npm-2.8.0-86b8ae036e-168a258032.zip/node_modules/@puppeteer/browsers/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:2.8.0"],\ - ["debug", "virtual:86b8ae036e89845a28aefecc65bd65d2738a830eb6a00c5352fb262a2aba7a81b4e6225fff99608007b3c030e444c526c81ca016a41e26c06d475e0335df3777#npm:4.4.0"],\ - ["extract-zip", "npm:2.0.1"],\ - ["progress", "npm:2.0.3"],\ - ["proxy-agent", "npm:6.5.0"],\ - ["semver", "npm:7.7.1"],\ - ["tar-fs", "npm:3.0.8"],\ - ["yargs", "npm:17.7.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@react-dnd/asap", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/@react-dnd-asap-npm-4.0.1-046dd45f9c-4fd8912de1.zip/node_modules/@react-dnd/asap/",\ - "packageDependencies": [\ - ["@react-dnd/asap", "npm:4.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.2", {\ - "packageLocation": "./.yarn/cache/@react-dnd-asap-npm-5.0.2-66021d3d61-a75039720b.zip/node_modules/@react-dnd/asap/",\ - "packageDependencies": [\ - ["@react-dnd/asap", "npm:5.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@react-dnd/invariant", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/@react-dnd-invariant-npm-2.0.0-e055f1025b-ef1e989920.zip/node_modules/@react-dnd/invariant/",\ - "packageDependencies": [\ - ["@react-dnd/invariant", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/@react-dnd-invariant-npm-4.0.2-826eacc1ea-b638e9643e.zip/node_modules/@react-dnd/invariant/",\ - "packageDependencies": [\ - ["@react-dnd/invariant", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@react-dnd/shallowequal", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/@react-dnd-shallowequal-npm-2.0.0-2a10dca275-b5bbdc795d.zip/node_modules/@react-dnd/shallowequal/",\ - "packageDependencies": [\ - ["@react-dnd/shallowequal", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@react-google-maps/api", [\ - ["npm:2.20.3", {\ - "packageLocation": "./.yarn/cache/@react-google-maps-api-npm-2.20.3-df6d2079b6-0399925a11.zip/node_modules/@react-google-maps/api/",\ - "packageDependencies": [\ - ["@react-google-maps/api", "npm:2.20.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.20.3", {\ - "packageLocation": "./.yarn/__virtual__/@react-google-maps-api-virtual-9d88a4e2dc/0/cache/@react-google-maps-api-npm-2.20.3-df6d2079b6-0399925a11.zip/node_modules/@react-google-maps/api/",\ - "packageDependencies": [\ - ["@googlemaps/js-api-loader", "npm:1.16.8"],\ - ["@googlemaps/markerclusterer", "npm:2.5.3"],\ - ["@react-google-maps/api", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.20.3"],\ - ["@react-google-maps/infobox", "npm:2.20.0"],\ - ["@react-google-maps/marker-clusterer", "npm:2.20.0"],\ - ["@types/google.maps", "npm:3.58.1"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["invariant", "npm:2.2.4"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@react-google-maps/infobox", [\ - ["npm:2.20.0", {\ - "packageLocation": "./.yarn/cache/@react-google-maps-infobox-npm-2.20.0-8b0393549b-ad8dcf905c.zip/node_modules/@react-google-maps/infobox/",\ - "packageDependencies": [\ - ["@react-google-maps/infobox", "npm:2.20.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@react-google-maps/marker-clusterer", [\ - ["npm:2.20.0", {\ - "packageLocation": "./.yarn/cache/@react-google-maps-marker-clusterer-npm-2.20.0-7f44bf4e63-28da905ea1.zip/node_modules/@react-google-maps/marker-clusterer/",\ - "packageDependencies": [\ - ["@react-google-maps/marker-clusterer", "npm:2.20.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@repeaterjs/repeater", [\ - ["npm:3.0.5", {\ - "packageLocation": "./.yarn/cache/@repeaterjs-repeater-npm-3.0.5-d9ac5261d5-7478df13bd.zip/node_modules/@repeaterjs/repeater/",\ - "packageDependencies": [\ - ["@repeaterjs/repeater", "npm:3.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@rollbar/react", [\ - ["npm:0.11.1", {\ - "packageLocation": "./.yarn/cache/@rollbar-react-npm-0.11.1-c55f37ea04-64f35d0c68.zip/node_modules/@rollbar/react/",\ - "packageDependencies": [\ - ["@rollbar/react", "npm:0.11.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.11.1", {\ - "packageLocation": "./.yarn/__virtual__/@rollbar-react-virtual-4a58967cc9/0/cache/@rollbar-react-npm-0.11.1-c55f37ea04-64f35d0c68.zip/node_modules/@rollbar/react/",\ - "packageDependencies": [\ - ["@rollbar/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.11.1"],\ - ["@types/prop-types", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/rollbar", null],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["rollbar", "npm:2.26.4"],\ - ["tiny-invariant", "npm:1.2.0"]\ - ],\ - "packagePeers": [\ - "@types/prop-types",\ - "@types/react",\ - "@types/rollbar",\ - "prop-types",\ - "react",\ - "rollbar"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@rollup/plugin-babel", [\ - ["npm:5.3.1", {\ - "packageLocation": "./.yarn/cache/@rollup-plugin-babel-npm-5.3.1-6039a4d033-eb3ee5fedd.zip/node_modules/@rollup/plugin-babel/",\ - "packageDependencies": [\ - ["@rollup/plugin-babel", "npm:5.3.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:5.3.1", {\ - "packageLocation": "./.yarn/__virtual__/@rollup-plugin-babel-virtual-48b162daea/0/cache/@rollup-plugin-babel-npm-5.3.1-6039a4d033-eb3ee5fedd.zip/node_modules/@rollup/plugin-babel/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-module-imports", "npm:7.18.6"],\ - ["@rollup/plugin-babel", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:5.3.1"],\ - ["@rollup/pluginutils", "virtual:48b162daea0c118d7faf0304ab8992ae2eed4930ca7f9bb03d63d10c1003707b290b5c925bc8474b493d22187d8efebd8d4056c7e06a4ca4a9ecfa903bba6032#npm:3.1.0"],\ - ["@types/babel__core", null],\ - ["@types/rollup", null],\ - ["rollup", "npm:2.79.2"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core",\ - "@types/rollup",\ - "rollup"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@rollup/plugin-node-resolve", [\ - ["npm:11.2.1", {\ - "packageLocation": "./.yarn/cache/@rollup-plugin-node-resolve-npm-11.2.1-1cea144df4-8007f6a01d.zip/node_modules/@rollup/plugin-node-resolve/",\ - "packageDependencies": [\ - ["@rollup/plugin-node-resolve", "npm:11.2.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:11.2.1", {\ - "packageLocation": "./.yarn/__virtual__/@rollup-plugin-node-resolve-virtual-94dccd2eb0/0/cache/@rollup-plugin-node-resolve-npm-11.2.1-1cea144df4-8007f6a01d.zip/node_modules/@rollup/plugin-node-resolve/",\ - "packageDependencies": [\ - ["@rollup/plugin-node-resolve", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:11.2.1"],\ - ["@rollup/pluginutils", "virtual:48b162daea0c118d7faf0304ab8992ae2eed4930ca7f9bb03d63d10c1003707b290b5c925bc8474b493d22187d8efebd8d4056c7e06a4ca4a9ecfa903bba6032#npm:3.1.0"],\ - ["@types/resolve", "npm:1.17.1"],\ - ["@types/rollup", null],\ - ["builtin-modules", "npm:3.3.0"],\ - ["deepmerge", "npm:4.2.2"],\ - ["is-module", "npm:1.0.0"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"],\ - ["rollup", "npm:2.79.2"]\ - ],\ - "packagePeers": [\ - "@types/rollup",\ - "rollup"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@rollup/plugin-replace", [\ - ["npm:2.4.2", {\ - "packageLocation": "./.yarn/cache/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-fc4844c4cd.zip/node_modules/@rollup/plugin-replace/",\ - "packageDependencies": [\ - ["@rollup/plugin-replace", "npm:2.4.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:2.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@rollup-plugin-replace-virtual-46f80bd767/0/cache/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-fc4844c4cd.zip/node_modules/@rollup/plugin-replace/",\ - "packageDependencies": [\ - ["@rollup/plugin-replace", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:2.4.2"],\ - ["@rollup/pluginutils", "virtual:48b162daea0c118d7faf0304ab8992ae2eed4930ca7f9bb03d63d10c1003707b290b5c925bc8474b493d22187d8efebd8d4056c7e06a4ca4a9ecfa903bba6032#npm:3.1.0"],\ - ["@types/rollup", null],\ - ["magic-string", "npm:0.25.9"],\ - ["rollup", "npm:2.79.2"]\ - ],\ - "packagePeers": [\ - "@types/rollup",\ - "rollup"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@rollup/pluginutils", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/@rollup-pluginutils-npm-3.1.0-b44b222e7d-3b69f02893.zip/node_modules/@rollup/pluginutils/",\ - "packageDependencies": [\ - ["@rollup/pluginutils", "npm:3.1.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:48b162daea0c118d7faf0304ab8992ae2eed4930ca7f9bb03d63d10c1003707b290b5c925bc8474b493d22187d8efebd8d4056c7e06a4ca4a9ecfa903bba6032#npm:3.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@rollup-pluginutils-virtual-9474d4f4cc/0/cache/@rollup-pluginutils-npm-3.1.0-b44b222e7d-3b69f02893.zip/node_modules/@rollup/pluginutils/",\ - "packageDependencies": [\ - ["@rollup/pluginutils", "virtual:48b162daea0c118d7faf0304ab8992ae2eed4930ca7f9bb03d63d10c1003707b290b5c925bc8474b493d22187d8efebd8d4056c7e06a4ca4a9ecfa903bba6032#npm:3.1.0"],\ - ["@types/estree", "npm:0.0.39"],\ - ["@types/rollup", null],\ - ["estree-walker", "npm:1.0.1"],\ - ["picomatch", "npm:2.3.1"],\ - ["rollup", "npm:2.79.2"]\ - ],\ - "packagePeers": [\ - "@types/rollup",\ - "rollup"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sentry/core", [\ - ["npm:6.19.7", {\ - "packageLocation": "./.yarn/cache/@sentry-core-npm-6.19.7-4cbb62d040-75f98ae1ad.zip/node_modules/@sentry/core/",\ - "packageDependencies": [\ - ["@sentry/core", "npm:6.19.7"],\ - ["@sentry/hub", "npm:6.19.7"],\ - ["@sentry/minimal", "npm:6.19.7"],\ - ["@sentry/types", "npm:6.19.7"],\ - ["@sentry/utils", "npm:6.19.7"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sentry/hub", [\ - ["npm:6.19.7", {\ - "packageLocation": "./.yarn/cache/@sentry-hub-npm-6.19.7-6469362c23-ef2381ec39.zip/node_modules/@sentry/hub/",\ - "packageDependencies": [\ - ["@sentry/hub", "npm:6.19.7"],\ - ["@sentry/types", "npm:6.19.7"],\ - ["@sentry/utils", "npm:6.19.7"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sentry/minimal", [\ - ["npm:6.19.7", {\ - "packageLocation": "./.yarn/cache/@sentry-minimal-npm-6.19.7-7527a9814c-eac4f79f71.zip/node_modules/@sentry/minimal/",\ - "packageDependencies": [\ - ["@sentry/hub", "npm:6.19.7"],\ - ["@sentry/minimal", "npm:6.19.7"],\ - ["@sentry/types", "npm:6.19.7"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sentry/node", [\ - ["npm:6.19.7", {\ - "packageLocation": "./.yarn/cache/@sentry-node-npm-6.19.7-edcd5da482-8769b31f57.zip/node_modules/@sentry/node/",\ - "packageDependencies": [\ - ["@sentry/core", "npm:6.19.7"],\ - ["@sentry/hub", "npm:6.19.7"],\ - ["@sentry/node", "npm:6.19.7"],\ - ["@sentry/types", "npm:6.19.7"],\ - ["@sentry/utils", "npm:6.19.7"],\ - ["cookie", "npm:0.4.2"],\ - ["https-proxy-agent", "npm:5.0.1"],\ - ["lru_map", "npm:0.3.3"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sentry/types", [\ - ["npm:6.19.7", {\ - "packageLocation": "./.yarn/cache/@sentry-types-npm-6.19.7-f75535a9f4-f9f70e94c4.zip/node_modules/@sentry/types/",\ - "packageDependencies": [\ - ["@sentry/types", "npm:6.19.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sentry/utils", [\ - ["npm:6.19.7", {\ - "packageLocation": "./.yarn/cache/@sentry-utils-npm-6.19.7-d61c6c8632-0ea94d3294.zip/node_modules/@sentry/utils/",\ - "packageDependencies": [\ - ["@sentry/types", "npm:6.19.7"],\ - ["@sentry/utils", "npm:6.19.7"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sinclair/typebox", [\ - ["npm:0.24.28", {\ - "packageLocation": "./.yarn/cache/@sinclair-typebox-npm-0.24.28-570126c7aa-326152428f.zip/node_modules/@sinclair/typebox/",\ - "packageDependencies": [\ - ["@sinclair/typebox", "npm:0.24.28"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sinonjs/commons", [\ - ["npm:1.8.3", {\ - "packageLocation": "./.yarn/cache/@sinonjs-commons-npm-1.8.3-30cf78d93f-910720ef0a.zip/node_modules/@sinonjs/commons/",\ - "packageDependencies": [\ - ["@sinonjs/commons", "npm:1.8.3"],\ - ["type-detect", "npm:4.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@sinonjs/fake-timers", [\ - ["npm:9.1.2", {\ - "packageLocation": "./.yarn/cache/@sinonjs-fake-timers-npm-9.1.2-3ff37ab7fb-033c74ad38.zip/node_modules/@sinonjs/fake-timers/",\ - "packageDependencies": [\ - ["@sinonjs/commons", "npm:1.8.3"],\ - ["@sinonjs/fake-timers", "npm:9.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@surma/rollup-plugin-off-main-thread", [\ - ["npm:2.2.3", {\ - "packageLocation": "./.yarn/unplugged/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded/node_modules/@surma/rollup-plugin-off-main-thread/",\ - "packageDependencies": [\ - ["@surma/rollup-plugin-off-main-thread", "npm:2.2.3"],\ - ["ejs", "npm:3.1.10"],\ - ["json5", "npm:2.2.3"],\ - ["magic-string", "npm:0.25.9"],\ - ["string.prototype.matchall", "npm:4.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@swc/counter", [\ - ["npm:0.1.3", {\ - "packageLocation": "./.yarn/cache/@swc-counter-npm-0.1.3-ce42b0e3f5-df8f9cfba9.zip/node_modules/@swc/counter/",\ - "packageDependencies": [\ - ["@swc/counter", "npm:0.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@swc/helpers", [\ - ["npm:0.5.13", {\ - "packageLocation": "./.yarn/cache/@swc-helpers-npm-0.5.13-763e72c536-6ba2f7e215.zip/node_modules/@swc/helpers/",\ - "packageDependencies": [\ - ["@swc/helpers", "npm:0.5.13"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@testing-library/dom", [\ - ["npm:8.18.1", {\ - "packageLocation": "./.yarn/cache/@testing-library-dom-npm-8.18.1-59f24b2394-fba296bd5a.zip/node_modules/@testing-library/dom/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@testing-library/dom", "npm:8.18.1"],\ - ["@types/aria-query", "npm:4.2.2"],\ - ["aria-query", "npm:5.0.0"],\ - ["chalk", "npm:4.1.2"],\ - ["dom-accessibility-api", "npm:0.5.14"],\ - ["lz-string", "npm:1.4.4"],\ - ["pretty-format", "npm:27.5.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@testing-library/jest-dom", [\ - ["npm:5.16.5", {\ - "packageLocation": "./.yarn/cache/@testing-library-jest-dom-npm-5.16.5-b6d1f4e02f-472a14b629.zip/node_modules/@testing-library/jest-dom/",\ - "packageDependencies": [\ - ["@adobe/css-tools", "npm:4.4.0"],\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@testing-library/jest-dom", "npm:5.16.5"],\ - ["@types/testing-library__jest-dom", "npm:5.14.5"],\ - ["aria-query", "npm:5.0.0"],\ - ["chalk", "npm:3.0.0"],\ - ["css.escape", "npm:1.5.1"],\ - ["dom-accessibility-api", "npm:0.5.14"],\ - ["lodash", "npm:4.17.21"],\ - ["redent", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@testing-library/react", [\ - ["npm:13.4.0", {\ - "packageLocation": "./.yarn/cache/@testing-library-react-npm-13.4.0-eaa652c0f5-788249aad2.zip/node_modules/@testing-library/react/",\ - "packageDependencies": [\ - ["@testing-library/react", "npm:13.4.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@testing-library-react-virtual-66046d1fe4/0/cache/@testing-library-react-npm-13.4.0-eaa652c0f5-788249aad2.zip/node_modules/@testing-library/react/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@testing-library/dom", "npm:8.18.1"],\ - ["@testing-library/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.4.0"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", "npm:18.0.6"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@testing-library/react-hooks", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/@testing-library-react-hooks-npm-8.0.1-e0c7be6ffb-f7b69373fe.zip/node_modules/@testing-library/react-hooks/",\ - "packageDependencies": [\ - ["@testing-library/react-hooks", "npm:8.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@testing-library-react-hooks-virtual-37b0a3d677/0/cache/@testing-library-react-hooks-npm-8.0.1-e0c7be6ffb-f7b69373fe.zip/node_modules/@testing-library/react-hooks/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@testing-library/react-hooks", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.0.1"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@types/react-test-renderer", null],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-error-boundary", "virtual:37b0a3d67710607667f5fa638dcf2f391e4ee43d9413c56f8427c23ee78c48e4e0a4d7d18ae5eb11a0182f6341ad84b4aa7719f4aeb0cdc600c8a7c14987f98d#npm:3.1.4"],\ - ["react-test-renderer", null]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react-test-renderer",\ - "@types/react",\ - "react-dom",\ - "react-test-renderer",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@testing-library/user-event", [\ - ["npm:13.5.0", {\ - "packageLocation": "./.yarn/cache/@testing-library-user-event-npm-13.5.0-1ff89b703a-e2bdf2b237.zip/node_modules/@testing-library/user-event/",\ - "packageDependencies": [\ - ["@testing-library/user-event", "npm:13.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.5.0", {\ - "packageLocation": "./.yarn/__virtual__/@testing-library-user-event-virtual-46aee72819/0/cache/@testing-library-user-event-npm-13.5.0-1ff89b703a-e2bdf2b237.zip/node_modules/@testing-library/user-event/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@testing-library/dom", "npm:8.18.1"],\ - ["@testing-library/user-event", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.5.0"],\ - ["@types/testing-library__dom", null]\ - ],\ - "packagePeers": [\ - "@testing-library/dom",\ - "@types/testing-library__dom"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@tootallnate/once", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/@tootallnate-once-npm-2.0.0-e36cf4f140-ad87447820.zip/node_modules/@tootallnate/once/",\ - "packageDependencies": [\ - ["@tootallnate/once", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@tootallnate/quickjs-emscripten", [\ - ["npm:0.23.0", {\ - "packageLocation": "./.yarn/unplugged/@tootallnate-quickjs-emscripten-npm-0.23.0-a889ea7aeb/node_modules/@tootallnate/quickjs-emscripten/",\ - "packageDependencies": [\ - ["@tootallnate/quickjs-emscripten", "npm:0.23.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/aria-query", [\ - ["npm:4.2.2", {\ - "packageLocation": "./.yarn/cache/@types-aria-query-npm-4.2.2-c7fefe27a4-3ab0476e1d.zip/node_modules/@types/aria-query/",\ - "packageDependencies": [\ - ["@types/aria-query", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/babel__core", [\ - ["npm:7.1.19", {\ - "packageLocation": "./.yarn/cache/@types-babel__core-npm-7.1.19-bd8ad53364-cd68502271.zip/node_modules/@types/babel__core/",\ - "packageDependencies": [\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__core", "npm:7.1.19"],\ - ["@types/babel__generator", "npm:7.6.4"],\ - ["@types/babel__template", "npm:7.4.1"],\ - ["@types/babel__traverse", "npm:7.18.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/babel__generator", [\ - ["npm:7.6.4", {\ - "packageLocation": "./.yarn/cache/@types-babel__generator-npm-7.6.4-03e776f956-34f361a0d5.zip/node_modules/@types/babel__generator/",\ - "packageDependencies": [\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__generator", "npm:7.6.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/babel__template", [\ - ["npm:7.4.1", {\ - "packageLocation": "./.yarn/cache/@types-babel__template-npm-7.4.1-fe1db49e53-649fe8b42c.zip/node_modules/@types/babel__template/",\ - "packageDependencies": [\ - ["@babel/parser", "npm:7.18.11"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__template", "npm:7.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/babel__traverse", [\ - ["npm:7.18.0", {\ - "packageLocation": "./.yarn/cache/@types-babel__traverse-npm-7.18.0-11f6ad2401-1d5baf182c.zip/node_modules/@types/babel__traverse/",\ - "packageDependencies": [\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__traverse", "npm:7.18.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/body-parser", [\ - ["npm:1.19.5", {\ - "packageLocation": "./.yarn/cache/@types-body-parser-npm-1.19.5-97fb106976-1e251118c4.zip/node_modules/@types/body-parser/",\ - "packageDependencies": [\ - ["@types/body-parser", "npm:1.19.5"],\ - ["@types/connect", "npm:3.4.38"],\ - ["@types/node", "npm:18.7.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/connect", [\ - ["npm:3.4.38", {\ - "packageLocation": "./.yarn/cache/@types-connect-npm-3.4.38-a8a4c38337-7eb1bc5342.zip/node_modules/@types/connect/",\ - "packageDependencies": [\ - ["@types/connect", "npm:3.4.38"],\ - ["@types/node", "npm:18.7.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-array", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/@types-d3-array-npm-3.0.4-156dd0b52b-22eb61b9f9.zip/node_modules/@types/d3-array/",\ - "packageDependencies": [\ - ["@types/d3-array", "npm:3.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-color", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/@types-d3-color-npm-3.1.0-e4a43fff88-c5e2129602.zip/node_modules/@types/d3-color/",\ - "packageDependencies": [\ - ["@types/d3-color", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-ease", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@types-d3-ease-npm-3.0.0-b342ad1e9f-2c19e583e8.zip/node_modules/@types/d3-ease/",\ - "packageDependencies": [\ - ["@types/d3-ease", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-interpolate", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/@types-d3-interpolate-npm-3.0.1-6fb3cc4131-806642d869.zip/node_modules/@types/d3-interpolate/",\ - "packageDependencies": [\ - ["@types/d3-color", "npm:3.1.0"],\ - ["@types/d3-interpolate", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-path", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@types-d3-path-npm-3.0.0-73db3fee36-8c884583a0.zip/node_modules/@types/d3-path/",\ - "packageDependencies": [\ - ["@types/d3-path", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-scale", [\ - ["npm:4.0.3", {\ - "packageLocation": "./.yarn/cache/@types-d3-scale-npm-4.0.3-f929b25483-294e2fc71c.zip/node_modules/@types/d3-scale/",\ - "packageDependencies": [\ - ["@types/d3-scale", "npm:4.0.3"],\ - ["@types/d3-time", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-shape", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/@types-d3-shape-npm-3.1.1-542f46cb78-26a1258c5a.zip/node_modules/@types/d3-shape/",\ - "packageDependencies": [\ - ["@types/d3-path", "npm:3.0.0"],\ - ["@types/d3-shape", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-time", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@types-d3-time-npm-3.0.0-9b0c5b0218-7ef819c98e.zip/node_modules/@types/d3-time/",\ - "packageDependencies": [\ - ["@types/d3-time", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/d3-timer", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@types-d3-timer-npm-3.0.0-b8c95909c6-1ec86b3808.zip/node_modules/@types/d3-timer/",\ - "packageDependencies": [\ - ["@types/d3-timer", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/eslint", [\ - ["npm:9.6.1", {\ - "packageLocation": "./.yarn/cache/@types-eslint-npm-9.6.1-31a8cf74e4-719fcd2557.zip/node_modules/@types/eslint/",\ - "packageDependencies": [\ - ["@types/eslint", "npm:9.6.1"],\ - ["@types/estree", "npm:1.0.6"],\ - ["@types/json-schema", "npm:7.0.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/eslint-scope", [\ - ["npm:3.7.7", {\ - "packageLocation": "./.yarn/cache/@types-eslint-scope-npm-3.7.7-efa26592f6-e2889a124a.zip/node_modules/@types/eslint-scope/",\ - "packageDependencies": [\ - ["@types/eslint", "npm:9.6.1"],\ - ["@types/eslint-scope", "npm:3.7.7"],\ - ["@types/estree", "npm:1.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/estree", [\ - ["npm:0.0.39", {\ - "packageLocation": "./.yarn/cache/@types-estree-npm-0.0.39-f898500e96-9f0f20990d.zip/node_modules/@types/estree/",\ - "packageDependencies": [\ - ["@types/estree", "npm:0.0.39"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.6", {\ - "packageLocation": "./.yarn/cache/@types-estree-npm-1.0.6-b5e23f2ea2-9d35d47509.zip/node_modules/@types/estree/",\ - "packageDependencies": [\ - ["@types/estree", "npm:1.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/express", [\ - ["npm:4.17.21", {\ - "packageLocation": "./.yarn/cache/@types-express-npm-4.17.21-be92a0245e-7a6d26cf6f.zip/node_modules/@types/express/",\ - "packageDependencies": [\ - ["@types/body-parser", "npm:1.19.5"],\ - ["@types/express", "npm:4.17.21"],\ - ["@types/express-serve-static-core", "npm:4.19.6"],\ - ["@types/qs", "npm:6.9.17"],\ - ["@types/serve-static", "npm:1.15.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/express-serve-static-core", [\ - ["npm:4.19.6", {\ - "packageLocation": "./.yarn/cache/@types-express-serve-static-core-npm-4.19.6-cc0017aaf4-a2e00b6c59.zip/node_modules/@types/express-serve-static-core/",\ - "packageDependencies": [\ - ["@types/express-serve-static-core", "npm:4.19.6"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/qs", "npm:6.9.17"],\ - ["@types/range-parser", "npm:1.2.7"],\ - ["@types/send", "npm:0.17.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/formidable", [\ - ["npm:3.4.5", {\ - "packageLocation": "./.yarn/cache/@types-formidable-npm-3.4.5-1fa13c32d2-4ef1039eb2.zip/node_modules/@types/formidable/",\ - "packageDependencies": [\ - ["@types/formidable", "npm:3.4.5"],\ - ["@types/node", "npm:18.7.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/glob", [\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/@types-glob-npm-7.2.0-772334bf9a-6ae717fedf.zip/node_modules/@types/glob/",\ - "packageDependencies": [\ - ["@types/glob", "npm:7.2.0"],\ - ["@types/minimatch", "npm:3.0.5"],\ - ["@types/node", "npm:18.7.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/google.maps", [\ - ["npm:3.50.2", {\ - "packageLocation": "./.yarn/cache/@types-google.maps-npm-3.50.2-c0aabb7a77-b354a39a86.zip/node_modules/@types/google.maps/",\ - "packageDependencies": [\ - ["@types/google.maps", "npm:3.50.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.58.1", {\ - "packageLocation": "./.yarn/cache/@types-google.maps-npm-3.58.1-df719add21-3d5aaa901c.zip/node_modules/@types/google.maps/",\ - "packageDependencies": [\ - ["@types/google.maps", "npm:3.58.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/graceful-fs", [\ - ["npm:4.1.5", {\ - "packageLocation": "./.yarn/cache/@types-graceful-fs-npm-4.1.5-91d62e1050-d076bb61f4.zip/node_modules/@types/graceful-fs/",\ - "packageDependencies": [\ - ["@types/graceful-fs", "npm:4.1.5"],\ - ["@types/node", "npm:18.7.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/http-cache-semantics", [\ - ["npm:4.0.4", {\ - "packageLocation": "./.yarn/cache/@types-http-cache-semantics-npm-4.0.4-6d4f413ddd-a59566cff6.zip/node_modules/@types/http-cache-semantics/",\ - "packageDependencies": [\ - ["@types/http-cache-semantics", "npm:4.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/http-errors", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/@types-http-errors-npm-2.0.4-8b39ca5d7c-1f3d7c3b32.zip/node_modules/@types/http-errors/",\ - "packageDependencies": [\ - ["@types/http-errors", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/istanbul-lib-coverage", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.4-734954bb56-a25d7589ee.zip/node_modules/@types/istanbul-lib-coverage/",\ - "packageDependencies": [\ - ["@types/istanbul-lib-coverage", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/istanbul-lib-report", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/@types-istanbul-lib-report-npm-3.0.0-50de3e6b3b-f121dcac8a.zip/node_modules/@types/istanbul-lib-report/",\ - "packageDependencies": [\ - ["@types/istanbul-lib-coverage", "npm:2.0.4"],\ - ["@types/istanbul-lib-report", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/istanbul-reports", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/@types-istanbul-reports-npm-3.0.1-770e825002-f1ad54bc68.zip/node_modules/@types/istanbul-reports/",\ - "packageDependencies": [\ - ["@types/istanbul-lib-report", "npm:3.0.0"],\ - ["@types/istanbul-reports", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/jest", [\ - ["npm:28.1.7", {\ - "packageLocation": "./.yarn/cache/@types-jest-npm-28.1.7-d501839892-07cda8ee8a.zip/node_modules/@types/jest/",\ - "packageDependencies": [\ - ["@types/jest", "npm:28.1.7"],\ - ["expect", "npm:28.1.3"],\ - ["pretty-format", "npm:28.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.5.14", {\ - "packageLocation": "./.yarn/cache/@types-jest-npm-29.5.14-506446c38e-59ec7a9c46.zip/node_modules/@types/jest/",\ - "packageDependencies": [\ - ["@types/jest", "npm:29.5.14"],\ - ["expect", "npm:29.0.3"],\ - ["pretty-format", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/js-yaml", [\ - ["npm:4.0.5", {\ - "packageLocation": "./.yarn/cache/@types-js-yaml-npm-4.0.5-bb64d71397-6fff5f47d9.zip/node_modules/@types/js-yaml/",\ - "packageDependencies": [\ - ["@types/js-yaml", "npm:4.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/jsdom", [\ - ["npm:20.0.0", {\ - "packageLocation": "./.yarn/cache/@types-jsdom-npm-20.0.0-a0c8462a9d-4cd814a948.zip/node_modules/@types/jsdom/",\ - "packageDependencies": [\ - ["@types/jsdom", "npm:20.0.0"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/tough-cookie", "npm:4.0.2"],\ - ["parse5", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/json-schema", [\ - ["npm:7.0.11", {\ - "packageLocation": "./.yarn/cache/@types-json-schema-npm-7.0.11-79462ae5ca-e50864a93f.zip/node_modules/@types/json-schema/",\ - "packageDependencies": [\ - ["@types/json-schema", "npm:7.0.11"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.15", {\ - "packageLocation": "./.yarn/cache/@types-json-schema-npm-7.0.15-fd16381786-1a3c3e0623.zip/node_modules/@types/json-schema/",\ - "packageDependencies": [\ - ["@types/json-schema", "npm:7.0.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/json-stable-stringify", [\ - ["npm:1.0.34", {\ - "packageLocation": "./.yarn/cache/@types-json-stable-stringify-npm-1.0.34-7ec516e29c-45767ecef0.zip/node_modules/@types/json-stable-stringify/",\ - "packageDependencies": [\ - ["@types/json-stable-stringify", "npm:1.0.34"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/json5", [\ - ["npm:0.0.29", {\ - "packageLocation": "./.yarn/cache/@types-json5-npm-0.0.29-f63a7916bd-4e5aed58ca.zip/node_modules/@types/json5/",\ - "packageDependencies": [\ - ["@types/json5", "npm:0.0.29"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/lodash", [\ - ["npm:4.14.191", {\ - "packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.191-67a04a969b-ab8cd8eeb9.zip/node_modules/@types/lodash/",\ - "packageDependencies": [\ - ["@types/lodash", "npm:4.14.191"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/long", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/@types-long-npm-4.0.2-e7bdc00dd4-68afa05fb2.zip/node_modules/@types/long/",\ - "packageDependencies": [\ - ["@types/long", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/luxon", [\ - ["npm:3.4.2", {\ - "packageLocation": "./.yarn/cache/@types-luxon-npm-3.4.2-092583f006-fd89566e30.zip/node_modules/@types/luxon/",\ - "packageDependencies": [\ - ["@types/luxon", "npm:3.4.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/mime", [\ - ["npm:1.3.5", {\ - "packageLocation": "./.yarn/cache/@types-mime-npm-1.3.5-48d28990db-e29a5f9c47.zip/node_modules/@types/mime/",\ - "packageDependencies": [\ - ["@types/mime", "npm:1.3.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/minimatch", [\ - ["npm:3.0.5", {\ - "packageLocation": "./.yarn/cache/@types-minimatch-npm-3.0.5-802bb0797f-c41d136f67.zip/node_modules/@types/minimatch/",\ - "packageDependencies": [\ - ["@types/minimatch", "npm:3.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/node", [\ - ["npm:18.7.6", {\ - "packageLocation": "./.yarn/cache/@types-node-npm-18.7.6-c1eafa3d9a-dd97612eb8.zip/node_modules/@types/node/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:22.13.14", {\ - "packageLocation": "./.yarn/cache/@types-node-npm-22.13.14-2796c41449-5fafad441c.zip/node_modules/@types/node/",\ - "packageDependencies": [\ - ["@types/node", "npm:22.13.14"],\ - ["undici-types", "npm:6.20.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/node-fetch", [\ - ["npm:2.6.12", {\ - "packageLocation": "./.yarn/cache/@types-node-fetch-npm-2.6.12-bc850f58da-8107c479da.zip/node_modules/@types/node-fetch/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["@types/node-fetch", "npm:2.6.12"],\ - ["form-data", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/parse-json", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/@types-parse-json-npm-4.0.0-298522afa6-4df9de9815.zip/node_modules/@types/parse-json/",\ - "packageDependencies": [\ - ["@types/parse-json", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/prettier", [\ - ["npm:2.7.0", {\ - "packageLocation": "./.yarn/cache/@types-prettier-npm-2.7.0-5da1b0a357-5451430048.zip/node_modules/@types/prettier/",\ - "packageDependencies": [\ - ["@types/prettier", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/prop-types", [\ - ["npm:15.7.15", {\ - "packageLocation": "./.yarn/cache/@types-prop-types-npm-15.7.15-cefe16a1fa-31aa2f59b2.zip/node_modules/@types/prop-types/",\ - "packageDependencies": [\ - ["@types/prop-types", "npm:15.7.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/qs", [\ - ["npm:6.9.17", {\ - "packageLocation": "./.yarn/cache/@types-qs-npm-6.9.17-f0eceee63c-fc3beda0be.zip/node_modules/@types/qs/",\ - "packageDependencies": [\ - ["@types/qs", "npm:6.9.17"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/range-parser", [\ - ["npm:1.2.7", {\ - "packageLocation": "./.yarn/cache/@types-range-parser-npm-1.2.7-a83c0b6429-95640233b6.zip/node_modules/@types/range-parser/",\ - "packageDependencies": [\ - ["@types/range-parser", "npm:1.2.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/react", [\ - ["npm:18.0.17", {\ - "packageLocation": "./.yarn/cache/@types-react-npm-18.0.17-c4860cbae4-20f50b187f.zip/node_modules/@types/react/",\ - "packageDependencies": [\ - ["@types/prop-types", "npm:15.7.15"],\ - ["@types/react", "npm:18.0.17"],\ - ["@types/scheduler", "npm:0.16.2"],\ - ["csstype", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:18.0.21", {\ - "packageLocation": "./.yarn/cache/@types-react-npm-18.0.21-e933f9864e-a2b09e71cb.zip/node_modules/@types/react/",\ - "packageDependencies": [\ - ["@types/prop-types", "npm:15.7.15"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/scheduler", "npm:0.16.2"],\ - ["csstype", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/react-dom", [\ - ["npm:18.0.6", {\ - "packageLocation": "./.yarn/cache/@types-react-dom-npm-18.0.6-55949dcf84-eccb09106d.zip/node_modules/@types/react-dom/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.17"],\ - ["@types/react-dom", "npm:18.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/react-transition-group", [\ - ["npm:4.4.10", {\ - "packageLocation": "./.yarn/cache/@types-react-transition-group-npm-4.4.10-5e11bed850-b429f3bd54.zip/node_modules/@types/react-transition-group/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.17"],\ - ["@types/react-transition-group", "npm:4.4.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/resolve", [\ - ["npm:1.17.1", {\ - "packageLocation": "./.yarn/cache/@types-resolve-npm-1.17.1-9a8396bef2-dc6a6df507.zip/node_modules/@types/resolve/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["@types/resolve", "npm:1.17.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/scheduler", [\ - ["npm:0.16.2", {\ - "packageLocation": "./.yarn/cache/@types-scheduler-npm-0.16.2-ba3a7d8c68-b6b4dcfeae.zip/node_modules/@types/scheduler/",\ - "packageDependencies": [\ - ["@types/scheduler", "npm:0.16.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/semver", [\ - ["npm:7.5.8", {\ - "packageLocation": "./.yarn/cache/@types-semver-npm-7.5.8-26073743d7-3496808818.zip/node_modules/@types/semver/",\ - "packageDependencies": [\ - ["@types/semver", "npm:7.5.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/send", [\ - ["npm:0.17.4", {\ - "packageLocation": "./.yarn/cache/@types-send-npm-0.17.4-9d7c55577f-28320a2aa1.zip/node_modules/@types/send/",\ - "packageDependencies": [\ - ["@types/mime", "npm:1.3.5"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/send", "npm:0.17.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/serve-static", [\ - ["npm:1.15.7", {\ - "packageLocation": "./.yarn/cache/@types-serve-static-npm-1.15.7-d4eef0bd1a-c5a7171d56.zip/node_modules/@types/serve-static/",\ - "packageDependencies": [\ - ["@types/http-errors", "npm:2.0.4"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/send", "npm:0.17.4"],\ - ["@types/serve-static", "npm:1.15.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/stack-utils", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/@types-stack-utils-npm-2.0.1-867718ab70-205fdbe332.zip/node_modules/@types/stack-utils/",\ - "packageDependencies": [\ - ["@types/stack-utils", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/symlink-or-copy", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/@types-symlink-or-copy-npm-1.2.0-88a35b38f4-554d925538.zip/node_modules/@types/symlink-or-copy/",\ - "packageDependencies": [\ - ["@types/symlink-or-copy", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/testing-library__jest-dom", [\ - ["npm:5.14.5", {\ - "packageLocation": "./.yarn/cache/@types-testing-library__jest-dom-npm-5.14.5-251c4c9d75-8c4d3dfd80.zip/node_modules/@types/testing-library__jest-dom/",\ - "packageDependencies": [\ - ["@types/jest", "npm:28.1.7"],\ - ["@types/testing-library__jest-dom", "npm:5.14.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/tough-cookie", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/@types-tough-cookie-npm-4.0.2-9e61f877e6-8682b40629.zip/node_modules/@types/tough-cookie/",\ - "packageDependencies": [\ - ["@types/tough-cookie", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/trusted-types", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/@types-trusted-types-npm-2.0.2-035cb17c5e-3371eef5f1.zip/node_modules/@types/trusted-types/",\ - "packageDependencies": [\ - ["@types/trusted-types", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/ws", [\ - ["npm:8.5.3", {\ - "packageLocation": "./.yarn/cache/@types-ws-npm-8.5.3-ae52c483f1-08aac698ce.zip/node_modules/@types/ws/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["@types/ws", "npm:8.5.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/yargs", [\ - ["npm:17.0.11", {\ - "packageLocation": "./.yarn/cache/@types-yargs-npm-17.0.11-3a1482f63b-91e52a7f76.zip/node_modules/@types/yargs/",\ - "packageDependencies": [\ - ["@types/yargs", "npm:17.0.11"],\ - ["@types/yargs-parser", "npm:21.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/yargs-parser", [\ - ["npm:21.0.0", {\ - "packageLocation": "./.yarn/cache/@types-yargs-parser-npm-21.0.0-c8a3b32c52-c4caec730c.zip/node_modules/@types/yargs-parser/",\ - "packageDependencies": [\ - ["@types/yargs-parser", "npm:21.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/yauzl", [\ - ["npm:2.10.3", {\ - "packageLocation": "./.yarn/cache/@types-yauzl-npm-2.10.3-4b633e1ddc-5ee966ea7b.zip/node_modules/@types/yauzl/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["@types/yauzl", "npm:2.10.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/eslint-plugin", [\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-eslint-plugin-npm-7.5.0-f8a3cafb6e-5469900a0c.zip/node_modules/@typescript-eslint/eslint-plugin/",\ - "packageDependencies": [\ - ["@typescript-eslint/eslint-plugin", "npm:7.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.5.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-eslint-plugin-virtual-ffbd544ad0/0/cache/@typescript-eslint-eslint-plugin-npm-7.5.0-f8a3cafb6e-5469900a0c.zip/node_modules/@typescript-eslint/eslint-plugin/",\ - "packageDependencies": [\ - ["@eslint-community/regexpp", "npm:4.10.0"],\ - ["@types/eslint", null],\ - ["@types/typescript", null],\ - ["@types/typescript-eslint__parser", null],\ - ["@typescript-eslint/eslint-plugin", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.5.0"],\ - ["@typescript-eslint/parser", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0"],\ - ["@typescript-eslint/scope-manager", "npm:7.5.0"],\ - ["@typescript-eslint/type-utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0"],\ - ["@typescript-eslint/utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0"],\ - ["@typescript-eslint/visitor-keys", "npm:7.5.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["eslint", "npm:8.57.0"],\ - ["graphemer", "npm:1.4.0"],\ - ["ignore", "npm:5.3.1"],\ - ["natural-compare", "npm:1.4.0"],\ - ["semver", "npm:7.6.0"],\ - ["ts-api-utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:1.3.0"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "@types/typescript-eslint__parser",\ - "@types/typescript",\ - "@typescript-eslint/parser",\ - "eslint",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/parser", [\ - ["npm:8.17.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-parser-npm-8.17.0-f09f5fe974-464981e142.zip/node_modules/@typescript-eslint/parser/",\ - "packageDependencies": [\ - ["@typescript-eslint/parser", "npm:8.17.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-parser-virtual-30f2e23c7f/0/cache/@typescript-eslint-parser-npm-8.17.0-f09f5fe974-464981e142.zip/node_modules/@typescript-eslint/parser/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/typescript", null],\ - ["@typescript-eslint/parser", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0"],\ - ["@typescript-eslint/scope-manager", "npm:8.17.0"],\ - ["@typescript-eslint/types", "npm:8.17.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:30f2e23c7ffcf891f87a18cb58d472e2cdd77c8ba41282172fab4ab97aca549224dfc8214dd79bce8fef1f272ed1c733a2ee10d12249d23d48590573865fe339#npm:8.17.0"],\ - ["@typescript-eslint/visitor-keys", "npm:8.17.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["eslint", "npm:8.57.0"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "@types/typescript",\ - "eslint",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/scope-manager", [\ - ["npm:5.33.1", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-scope-manager-npm-5.33.1-30760f5135-eb225a8eda.zip/node_modules/@typescript-eslint/scope-manager/",\ - "packageDependencies": [\ - ["@typescript-eslint/scope-manager", "npm:5.33.1"],\ - ["@typescript-eslint/types", "npm:5.33.1"],\ - ["@typescript-eslint/visitor-keys", "npm:5.33.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-scope-manager-npm-7.5.0-e9f885564e-9446c07290.zip/node_modules/@typescript-eslint/scope-manager/",\ - "packageDependencies": [\ - ["@typescript-eslint/scope-manager", "npm:7.5.0"],\ - ["@typescript-eslint/types", "npm:7.5.0"],\ - ["@typescript-eslint/visitor-keys", "npm:7.5.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.17.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-scope-manager-npm-8.17.0-f0be17d23c-fa934d9fd8.zip/node_modules/@typescript-eslint/scope-manager/",\ - "packageDependencies": [\ - ["@typescript-eslint/scope-manager", "npm:8.17.0"],\ - ["@typescript-eslint/types", "npm:8.17.0"],\ - ["@typescript-eslint/visitor-keys", "npm:8.17.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/type-utils", [\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-type-utils-npm-7.5.0-a1986d3fb3-2577305537.zip/node_modules/@typescript-eslint/type-utils/",\ - "packageDependencies": [\ - ["@typescript-eslint/type-utils", "npm:7.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-type-utils-virtual-0cb9aadbb0/0/cache/@typescript-eslint-type-utils-npm-7.5.0-a1986d3fb3-2577305537.zip/node_modules/@typescript-eslint/type-utils/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/typescript", null],\ - ["@typescript-eslint/type-utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:0cb9aadbb04938258c97b7cbc489f605e3990fc27740176fcd5b75b9e0cbc7e0332ee441d29d653ee98091fea9acfceb90c7fe89e3796da0a24d0b189182f300#npm:7.5.0"],\ - ["@typescript-eslint/utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["eslint", "npm:8.57.0"],\ - ["ts-api-utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:1.3.0"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "@types/typescript",\ - "eslint",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/types", [\ - ["npm:5.33.1", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-types-npm-5.33.1-ddbebb8171-40620b1a38.zip/node_modules/@typescript-eslint/types/",\ - "packageDependencies": [\ - ["@typescript-eslint/types", "npm:5.33.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-types-npm-7.5.0-039134627b-12eac46d0d.zip/node_modules/@typescript-eslint/types/",\ - "packageDependencies": [\ - ["@typescript-eslint/types", "npm:7.5.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.17.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-types-npm-8.17.0-ad6f5ae49f-46baf69ab3.zip/node_modules/@typescript-eslint/types/",\ - "packageDependencies": [\ - ["@typescript-eslint/types", "npm:8.17.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/typescript-estree", [\ - ["npm:5.33.1", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-typescript-estree-npm-5.33.1-1b514c2400-aebba513ca.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@typescript-eslint/typescript-estree", "npm:5.33.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-typescript-estree-npm-7.5.0-4235eaf12f-7487293a9a.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@typescript-eslint/typescript-estree", "npm:7.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.17.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-typescript-estree-npm-8.17.0-0110955b24-8a1f8be767.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@typescript-eslint/typescript-estree", "npm:8.17.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:09b157fecc804d318ed6a4566b4fd8284d6c425c8f1d0e01ffa1f243f725634a1bd90dde6adac603624e360c4421ea2a697f3d3c81cceace25e2f7fdba859625#npm:5.33.1", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-1492b0a79a/0/cache/@typescript-eslint-typescript-estree-npm-5.33.1-1b514c2400-aebba513ca.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["@typescript-eslint/types", "npm:5.33.1"],\ - ["@typescript-eslint/typescript-estree", "virtual:09b157fecc804d318ed6a4566b4fd8284d6c425c8f1d0e01ffa1f243f725634a1bd90dde6adac603624e360c4421ea2a697f3d3c81cceace25e2f7fdba859625#npm:5.33.1"],\ - ["@typescript-eslint/visitor-keys", "npm:5.33.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["globby", "npm:11.1.0"],\ - ["is-glob", "npm:4.0.3"],\ - ["semver", "npm:7.6.0"],\ - ["tsutils", "virtual:1492b0a79ac9ac17c7d87d62d14283b58fd6255ad2b62d4210c1f0cbf88592c4634d4c0b053070ef8a39957677019ad560b035deb85f58d807443a9b88f891f3#npm:3.21.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:0cb9aadbb04938258c97b7cbc489f605e3990fc27740176fcd5b75b9e0cbc7e0332ee441d29d653ee98091fea9acfceb90c7fe89e3796da0a24d0b189182f300#npm:7.5.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-2951d37121/0/cache/@typescript-eslint-typescript-estree-npm-7.5.0-4235eaf12f-7487293a9a.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["@typescript-eslint/types", "npm:7.5.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:0cb9aadbb04938258c97b7cbc489f605e3990fc27740176fcd5b75b9e0cbc7e0332ee441d29d653ee98091fea9acfceb90c7fe89e3796da0a24d0b189182f300#npm:7.5.0"],\ - ["@typescript-eslint/visitor-keys", "npm:7.5.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["globby", "npm:11.1.0"],\ - ["is-glob", "npm:4.0.3"],\ - ["minimatch", "npm:9.0.3"],\ - ["semver", "npm:7.6.0"],\ - ["ts-api-utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:1.3.0"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:30f2e23c7ffcf891f87a18cb58d472e2cdd77c8ba41282172fab4ab97aca549224dfc8214dd79bce8fef1f272ed1c733a2ee10d12249d23d48590573865fe339#npm:8.17.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-ff45382f28/0/cache/@typescript-eslint-typescript-estree-npm-8.17.0-0110955b24-8a1f8be767.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["@typescript-eslint/types", "npm:8.17.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:30f2e23c7ffcf891f87a18cb58d472e2cdd77c8ba41282172fab4ab97aca549224dfc8214dd79bce8fef1f272ed1c733a2ee10d12249d23d48590573865fe339#npm:8.17.0"],\ - ["@typescript-eslint/visitor-keys", "npm:8.17.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["fast-glob", "npm:3.3.2"],\ - ["is-glob", "npm:4.0.3"],\ - ["minimatch", "npm:9.0.5"],\ - ["semver", "npm:7.6.3"],\ - ["ts-api-utils", "virtual:ff45382f289877ead7011223e1a3e12ad5931bc5bb966ce16d645a7d92cd2edad32394d9fb08d21093dea26aa08aeb03e17de0977d68d796d54585998a88576c#npm:1.4.3"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:83b5808f266aeb1551a5f18e8473d1be0048c9b8fe4d71b11e46c49ef84098857bd6c7c43bb6925e75a393f7b88790afcce73d5fa58c2822236c7e167b9fc140#npm:7.5.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-0f7794eca8/0/cache/@typescript-eslint-typescript-estree-npm-7.5.0-4235eaf12f-7487293a9a.zip/node_modules/@typescript-eslint/typescript-estree/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["@typescript-eslint/types", "npm:7.5.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:83b5808f266aeb1551a5f18e8473d1be0048c9b8fe4d71b11e46c49ef84098857bd6c7c43bb6925e75a393f7b88790afcce73d5fa58c2822236c7e167b9fc140#npm:7.5.0"],\ - ["@typescript-eslint/visitor-keys", "npm:7.5.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["globby", "npm:11.1.0"],\ - ["is-glob", "npm:4.0.3"],\ - ["minimatch", "npm:9.0.3"],\ - ["semver", "npm:7.6.0"],\ - ["ts-api-utils", "virtual:0f7794eca8c536afb0e41b1bb750c7fef0f63fab3c0489648e5b096fef723275cc5288e236412fb5bd39bfd38f71a926240ed28d6b1219fd63acd084fb6ab940#npm:1.3.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/utils", [\ - ["npm:5.33.1", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-utils-npm-5.33.1-73772947bc-b0c3d3e7ba.zip/node_modules/@typescript-eslint/utils/",\ - "packageDependencies": [\ - ["@typescript-eslint/utils", "npm:5.33.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-utils-npm-7.5.0-76344a74cb-a0b2f206a1.zip/node_modules/@typescript-eslint/utils/",\ - "packageDependencies": [\ - ["@typescript-eslint/utils", "npm:7.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6bed2dac13ee8765709dd966b02ec08fe54e2882f4cd1408fd78d71b2253d71c8270dd2a82d6648e77a209b27f53afce471451b358b1abaeced9054a58265468#npm:5.33.1", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-utils-virtual-09b157fecc/0/cache/@typescript-eslint-utils-npm-5.33.1-73772947bc-b0c3d3e7ba.zip/node_modules/@typescript-eslint/utils/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/json-schema", "npm:7.0.11"],\ - ["@typescript-eslint/scope-manager", "npm:5.33.1"],\ - ["@typescript-eslint/types", "npm:5.33.1"],\ - ["@typescript-eslint/typescript-estree", "virtual:09b157fecc804d318ed6a4566b4fd8284d6c425c8f1d0e01ffa1f243f725634a1bd90dde6adac603624e360c4421ea2a697f3d3c81cceace25e2f7fdba859625#npm:5.33.1"],\ - ["@typescript-eslint/utils", "virtual:6bed2dac13ee8765709dd966b02ec08fe54e2882f4cd1408fd78d71b2253d71c8270dd2a82d6648e77a209b27f53afce471451b358b1abaeced9054a58265468#npm:5.33.1"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-scope", "npm:5.1.1"],\ - ["eslint-utils", "virtual:09b157fecc804d318ed6a4566b4fd8284d6c425c8f1d0e01ffa1f243f725634a1bd90dde6adac603624e360c4421ea2a697f3d3c81cceace25e2f7fdba859625#npm:3.0.0"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-utils-virtual-83b5808f26/0/cache/@typescript-eslint-utils-npm-7.5.0-76344a74cb-a0b2f206a1.zip/node_modules/@typescript-eslint/utils/",\ - "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:4286e12a3a0f74af013bc8f16c6d8fdde823cfbf6389660266b171e551f576c805b0a7a8eb2a7087a5cee7dfe6ebb6e1ea3808d93daf915edc95656907a381bb#npm:4.4.0"],\ - ["@types/eslint", null],\ - ["@types/json-schema", "npm:7.0.15"],\ - ["@types/semver", "npm:7.5.8"],\ - ["@typescript-eslint/scope-manager", "npm:7.5.0"],\ - ["@typescript-eslint/types", "npm:7.5.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:83b5808f266aeb1551a5f18e8473d1be0048c9b8fe4d71b11e46c49ef84098857bd6c7c43bb6925e75a393f7b88790afcce73d5fa58c2822236c7e167b9fc140#npm:7.5.0"],\ - ["@typescript-eslint/utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:7.5.0"],\ - ["eslint", "npm:8.57.0"],\ - ["semver", "npm:7.6.0"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@typescript-eslint/visitor-keys", [\ - ["npm:5.33.1", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-visitor-keys-npm-5.33.1-dfbd107378-c37f1e6872.zip/node_modules/@typescript-eslint/visitor-keys/",\ - "packageDependencies": [\ - ["@typescript-eslint/types", "npm:5.33.1"],\ - ["@typescript-eslint/visitor-keys", "npm:5.33.1"],\ - ["eslint-visitor-keys", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.5.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-visitor-keys-npm-7.5.0-8472c4f821-ba83113110.zip/node_modules/@typescript-eslint/visitor-keys/",\ - "packageDependencies": [\ - ["@typescript-eslint/types", "npm:7.5.0"],\ - ["@typescript-eslint/visitor-keys", "npm:7.5.0"],\ - ["eslint-visitor-keys", "npm:3.4.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.17.0", {\ - "packageLocation": "./.yarn/cache/@typescript-eslint-visitor-keys-npm-8.17.0-9c7a8b5908-e7a3c3b943.zip/node_modules/@typescript-eslint/visitor-keys/",\ - "packageDependencies": [\ - ["@typescript-eslint/types", "npm:8.17.0"],\ - ["@typescript-eslint/visitor-keys", "npm:8.17.0"],\ - ["eslint-visitor-keys", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@ungap/structured-clone", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/@ungap-structured-clone-npm-1.2.0-648f0b82e0-c6fe89a505.zip/node_modules/@ungap/structured-clone/",\ - "packageDependencies": [\ - ["@ungap/structured-clone", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@virtuoso.dev/react-urx", [\ - ["npm:0.2.13", {\ - "packageLocation": "./.yarn/cache/@virtuoso.dev-react-urx-npm-0.2.13-778c2d6bbd-75ec098a99.zip/node_modules/@virtuoso.dev/react-urx/",\ - "packageDependencies": [\ - ["@virtuoso.dev/react-urx", "npm:0.2.13"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:26177e722f00ca89320a6a83c5a3f74eac9b6514cec04ec85fb7eae618184140929536c639ee96982e91b5b8ad588991cdbd72299e754702c14fefef975f289e#npm:0.2.13", {\ - "packageLocation": "./.yarn/__virtual__/@virtuoso.dev-react-urx-virtual-a923eb6e20/0/cache/@virtuoso.dev-react-urx-npm-0.2.13-778c2d6bbd-75ec098a99.zip/node_modules/@virtuoso.dev/react-urx/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["@virtuoso.dev/react-urx", "virtual:26177e722f00ca89320a6a83c5a3f74eac9b6514cec04ec85fb7eae618184140929536c639ee96982e91b5b8ad588991cdbd72299e754702c14fefef975f289e#npm:0.2.13"],\ - ["@virtuoso.dev/urx", "npm:0.2.13"],\ - ["react", "npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@virtuoso.dev/urx", [\ - ["npm:0.2.13", {\ - "packageLocation": "./.yarn/cache/@virtuoso.dev-urx-npm-0.2.13-c1ced89fba-9dec1fec47.zip/node_modules/@virtuoso.dev/urx/",\ - "packageDependencies": [\ - ["@virtuoso.dev/urx", "npm:0.2.13"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/ast", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-ast-npm-1.14.1-3c3be7e1c7-f83e6abe38.zip/node_modules/@webassemblyjs/ast/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/helper-numbers", "npm:1.13.2"],\ - ["@webassemblyjs/helper-wasm-bytecode", "npm:1.13.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/floating-point-hex-parser", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.13.2-6fb28a43ea-e866ec8433.zip/node_modules/@webassemblyjs/floating-point-hex-parser/",\ - "packageDependencies": [\ - ["@webassemblyjs/floating-point-hex-parser", "npm:1.13.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/helper-api-error", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-helper-api-error-npm-1.13.2-960f9ddae0-48b5df7fd3.zip/node_modules/@webassemblyjs/helper-api-error/",\ - "packageDependencies": [\ - ["@webassemblyjs/helper-api-error", "npm:1.13.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/helper-buffer", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-helper-buffer-npm-1.14.1-41c842be6b-9690afeafa.zip/node_modules/@webassemblyjs/helper-buffer/",\ - "packageDependencies": [\ - ["@webassemblyjs/helper-buffer", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/helper-numbers", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-helper-numbers-npm-1.13.2-f66f9b062d-e4c7d0b098.zip/node_modules/@webassemblyjs/helper-numbers/",\ - "packageDependencies": [\ - ["@webassemblyjs/floating-point-hex-parser", "npm:1.13.2"],\ - ["@webassemblyjs/helper-api-error", "npm:1.13.2"],\ - ["@webassemblyjs/helper-numbers", "npm:1.13.2"],\ - ["@xtuc/long", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/helper-wasm-bytecode", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.13.2-d4f0224769-3edd191fff.zip/node_modules/@webassemblyjs/helper-wasm-bytecode/",\ - "packageDependencies": [\ - ["@webassemblyjs/helper-wasm-bytecode", "npm:1.13.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/helper-wasm-section", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.14.1-5243edbf41-6b73874f90.zip/node_modules/@webassemblyjs/helper-wasm-section/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/helper-buffer", "npm:1.14.1"],\ - ["@webassemblyjs/helper-wasm-bytecode", "npm:1.13.2"],\ - ["@webassemblyjs/helper-wasm-section", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-gen", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/ieee754", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-ieee754-npm-1.13.2-a3a6a7b2fd-d7e3520baa.zip/node_modules/@webassemblyjs/ieee754/",\ - "packageDependencies": [\ - ["@webassemblyjs/ieee754", "npm:1.13.2"],\ - ["@xtuc/ieee754", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/leb128", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-leb128-npm-1.13.2-30bfcea7aa-3a10542c86.zip/node_modules/@webassemblyjs/leb128/",\ - "packageDependencies": [\ - ["@webassemblyjs/leb128", "npm:1.13.2"],\ - ["@xtuc/long", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/utf8", [\ - ["npm:1.13.2", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-utf8-npm-1.13.2-a0ec535507-27885e5d19.zip/node_modules/@webassemblyjs/utf8/",\ - "packageDependencies": [\ - ["@webassemblyjs/utf8", "npm:1.13.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/wasm-edit", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-edit-npm-1.14.1-f8509a0db6-c62c50eadc.zip/node_modules/@webassemblyjs/wasm-edit/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/helper-buffer", "npm:1.14.1"],\ - ["@webassemblyjs/helper-wasm-bytecode", "npm:1.13.2"],\ - ["@webassemblyjs/helper-wasm-section", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-edit", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-gen", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-opt", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"],\ - ["@webassemblyjs/wast-printer", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/wasm-gen", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-gen-npm-1.14.1-8b8d68f261-6085166b09.zip/node_modules/@webassemblyjs/wasm-gen/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/helper-wasm-bytecode", "npm:1.13.2"],\ - ["@webassemblyjs/ieee754", "npm:1.13.2"],\ - ["@webassemblyjs/leb128", "npm:1.13.2"],\ - ["@webassemblyjs/utf8", "npm:1.13.2"],\ - ["@webassemblyjs/wasm-gen", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/wasm-opt", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-opt-npm-1.14.1-d6b7083f9d-fa5d1ef8d2.zip/node_modules/@webassemblyjs/wasm-opt/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/helper-buffer", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-gen", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-opt", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/wasm-parser", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-parser-npm-1.14.1-ad3b2c4a8f-07d9805fda.zip/node_modules/@webassemblyjs/wasm-parser/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/helper-api-error", "npm:1.13.2"],\ - ["@webassemblyjs/helper-wasm-bytecode", "npm:1.13.2"],\ - ["@webassemblyjs/ieee754", "npm:1.13.2"],\ - ["@webassemblyjs/leb128", "npm:1.13.2"],\ - ["@webassemblyjs/utf8", "npm:1.13.2"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@webassemblyjs/wast-printer", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/@webassemblyjs-wast-printer-npm-1.14.1-e43dc9a0b4-cef09aad2f.zip/node_modules/@webassemblyjs/wast-printer/",\ - "packageDependencies": [\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/wast-printer", "npm:1.14.1"],\ - ["@xtuc/long", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@whatwg-node/events", [\ - ["npm:0.0.3", {\ - "packageLocation": "./.yarn/cache/@whatwg-node-events-npm-0.0.3-697fe4b65f-af26f40d4d.zip/node_modules/@whatwg-node/events/",\ - "packageDependencies": [\ - ["@whatwg-node/events", "npm:0.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/@whatwg-node-events-npm-0.1.1-143483538e-3a356ca235.zip/node_modules/@whatwg-node/events/",\ - "packageDependencies": [\ - ["@whatwg-node/events", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@whatwg-node/fetch", [\ - ["npm:0.8.8", {\ - "packageLocation": "./.yarn/cache/@whatwg-node-fetch-npm-0.8.8-7bf71af020-4d04f28a3d.zip/node_modules/@whatwg-node/fetch/",\ - "packageDependencies": [\ - ["@peculiar/webcrypto", "npm:1.4.0"],\ - ["@whatwg-node/fetch", "npm:0.8.8"],\ - ["@whatwg-node/node-fetch", "npm:0.3.6"],\ - ["busboy", "npm:1.6.0"],\ - ["urlpattern-polyfill", "npm:8.0.2"],\ - ["web-streams-polyfill", "npm:3.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.9.17", {\ - "packageLocation": "./.yarn/cache/@whatwg-node-fetch-npm-0.9.17-c42cd84e21-c9dcfb49f4.zip/node_modules/@whatwg-node/fetch/",\ - "packageDependencies": [\ - ["@whatwg-node/fetch", "npm:0.9.17"],\ - ["@whatwg-node/node-fetch", "npm:0.5.10"],\ - ["urlpattern-polyfill", "npm:10.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@whatwg-node/node-fetch", [\ - ["npm:0.3.6", {\ - "packageLocation": "./.yarn/cache/@whatwg-node-node-fetch-npm-0.3.6-e4f3efa43b-8284e385cf.zip/node_modules/@whatwg-node/node-fetch/",\ - "packageDependencies": [\ - ["@whatwg-node/events", "npm:0.0.3"],\ - ["@whatwg-node/node-fetch", "npm:0.3.6"],\ - ["busboy", "npm:1.6.0"],\ - ["fast-querystring", "npm:1.1.2"],\ - ["fast-url-parser", "npm:1.1.3"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.5.10", {\ - "packageLocation": "./.yarn/cache/@whatwg-node-node-fetch-npm-0.5.10-a8661680c6-5ab081300e.zip/node_modules/@whatwg-node/node-fetch/",\ - "packageDependencies": [\ - ["@kamilkisiela/fast-url-parser", "npm:1.1.4"],\ - ["@whatwg-node/events", "npm:0.1.1"],\ - ["@whatwg-node/node-fetch", "npm:0.5.10"],\ - ["busboy", "npm:1.6.0"],\ - ["fast-querystring", "npm:1.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@wry/context", [\ - ["npm:0.6.1", {\ - "packageLocation": "./.yarn/cache/@wry-context-npm-0.6.1-23b1ac5edc-ff9c3ddd65.zip/node_modules/@wry/context/",\ - "packageDependencies": [\ - ["@wry/context", "npm:0.6.1"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.7.0", {\ - "packageLocation": "./.yarn/cache/@wry-context-npm-0.7.0-0eeba0eb62-75e53a64e3.zip/node_modules/@wry/context/",\ - "packageDependencies": [\ - ["@wry/context", "npm:0.7.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@wry/equality", [\ - ["npm:0.5.3", {\ - "packageLocation": "./.yarn/cache/@wry-equality-npm-0.5.3-f33e7d1c57-d2a0743a94.zip/node_modules/@wry/equality/",\ - "packageDependencies": [\ - ["@wry/equality", "npm:0.5.3"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@wry/trie", [\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/@wry-trie-npm-0.3.2-68fe447c78-151d06b519.zip/node_modules/@wry/trie/",\ - "packageDependencies": [\ - ["@wry/trie", "npm:0.3.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@xtuc/ieee754", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/@xtuc-ieee754-npm-1.2.0-ec0ce4e025-ab033b0329.zip/node_modules/@xtuc/ieee754/",\ - "packageDependencies": [\ - ["@xtuc/ieee754", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@xtuc/long", [\ - ["npm:4.2.2", {\ - "packageLocation": "./.yarn/cache/@xtuc-long-npm-4.2.2-37236e6d72-7217bae9fe.zip/node_modules/@xtuc/long/",\ - "packageDependencies": [\ - ["@xtuc/long", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["abab", [\ - ["npm:2.0.6", {\ - "packageLocation": "./.yarn/cache/abab-npm-2.0.6-2662fba7f0-ebe95d7278.zip/node_modules/abab/",\ - "packageDependencies": [\ - ["abab", "npm:2.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["abbrev", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/abbrev-npm-1.1.1-3659247eab-2d88294118.zip/node_modules/abbrev/",\ - "packageDependencies": [\ - ["abbrev", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["accepts", [\ - ["npm:1.3.8", {\ - "packageLocation": "./.yarn/cache/accepts-npm-1.3.8-9a812371c9-67eaaa90e2.zip/node_modules/accepts/",\ - "packageDependencies": [\ - ["accepts", "npm:1.3.8"],\ - ["mime-types", "npm:2.1.35"],\ - ["negotiator", "npm:0.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["acorn", [\ - ["npm:7.4.1", {\ - "packageLocation": "./.yarn/cache/acorn-npm-7.4.1-f450b4646c-8be2a40714.zip/node_modules/acorn/",\ - "packageDependencies": [\ - ["acorn", "npm:7.4.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.11.3", {\ - "packageLocation": "./.yarn/cache/acorn-npm-8.11.3-0d7ab48b38-b688e7e3c6.zip/node_modules/acorn/",\ - "packageDependencies": [\ - ["acorn", "npm:8.11.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.14.0", {\ - "packageLocation": "./.yarn/cache/acorn-npm-8.14.0-dc46f61424-6df29c3555.zip/node_modules/acorn/",\ - "packageDependencies": [\ - ["acorn", "npm:8.14.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.8.0", {\ - "packageLocation": "./.yarn/cache/acorn-npm-8.8.0-9ef399ab45-ed7ee7ae42.zip/node_modules/acorn/",\ - "packageDependencies": [\ - ["acorn", "npm:8.8.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["acorn-globals", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/acorn-globals-npm-6.0.0-acbec28ad5-72d95e5b5e.zip/node_modules/acorn-globals/",\ - "packageDependencies": [\ - ["acorn", "npm:7.4.1"],\ - ["acorn-globals", "npm:6.0.0"],\ - ["acorn-walk", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["acorn-jsx", [\ - ["npm:5.3.2", {\ - "packageLocation": "./.yarn/cache/acorn-jsx-npm-5.3.2-d7594599ea-d4371eaef7.zip/node_modules/acorn-jsx/",\ - "packageDependencies": [\ - ["acorn-jsx", "npm:5.3.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:a50722a5a9326b6a5f12350c494c4db3aa0f4caeac45e3e9e5fe071da20014ecfe738fe2ebe2c9c98abae81a4ea86b42f56d776b3bd5ec37f9ad3670c242b242#npm:5.3.2", {\ - "packageLocation": "./.yarn/__virtual__/acorn-jsx-virtual-834321b202/0/cache/acorn-jsx-npm-5.3.2-d7594599ea-d4371eaef7.zip/node_modules/acorn-jsx/",\ - "packageDependencies": [\ - ["@types/acorn", null],\ - ["acorn", "npm:8.11.3"],\ - ["acorn-jsx", "virtual:a50722a5a9326b6a5f12350c494c4db3aa0f4caeac45e3e9e5fe071da20014ecfe738fe2ebe2c9c98abae81a4ea86b42f56d776b3bd5ec37f9ad3670c242b242#npm:5.3.2"]\ - ],\ - "packagePeers": [\ - "@types/acorn",\ - "acorn"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["acorn-walk", [\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/acorn-walk-npm-7.2.0-5f8b515308-4d3e186f72.zip/node_modules/acorn-walk/",\ - "packageDependencies": [\ - ["acorn-walk", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.2.0", {\ - "packageLocation": "./.yarn/cache/acorn-walk-npm-8.2.0-2f2cac3177-e69f7234f2.zip/node_modules/acorn-walk/",\ - "packageDependencies": [\ - ["acorn-walk", "npm:8.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["agent-base", [\ - ["npm:6.0.2", {\ - "packageLocation": "./.yarn/cache/agent-base-npm-6.0.2-428f325a93-21fb903e09.zip/node_modules/agent-base/",\ - "packageDependencies": [\ - ["agent-base", "npm:6.0.2"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.1", {\ - "packageLocation": "./.yarn/cache/agent-base-npm-7.1.1-c9e1a4b59e-c478fec8f7.zip/node_modules/agent-base/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.3", {\ - "packageLocation": "./.yarn/cache/agent-base-npm-7.1.3-b2c16e72fb-3db6d8d465.zip/node_modules/agent-base/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["agentkeepalive", [\ - ["npm:4.2.1", {\ - "packageLocation": "./.yarn/cache/agentkeepalive-npm-4.2.1-b86a9fb343-63961cba1a.zip/node_modules/agentkeepalive/",\ - "packageDependencies": [\ - ["agentkeepalive", "npm:4.2.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["depd", "npm:1.1.2"],\ - ["humanize-ms", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["aggregate-error", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip/node_modules/aggregate-error/",\ - "packageDependencies": [\ - ["aggregate-error", "npm:3.1.0"],\ - ["clean-stack", "npm:2.2.0"],\ - ["indent-string", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ajv", [\ - ["npm:6.12.6", {\ - "packageLocation": "./.yarn/cache/ajv-npm-6.12.6-4b5105e2b2-48d6ad2113.zip/node_modules/ajv/",\ - "packageDependencies": [\ - ["ajv", "npm:6.12.6"],\ - ["fast-deep-equal", "npm:3.1.3"],\ - ["fast-json-stable-stringify", "npm:2.1.0"],\ - ["json-schema-traverse", "npm:0.4.1"],\ - ["uri-js", "npm:4.4.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.11.0", {\ - "packageLocation": "./.yarn/cache/ajv-npm-8.11.0-83d029789c-aa0dfd6ceb.zip/node_modules/ajv/",\ - "packageDependencies": [\ - ["ajv", "npm:8.11.0"],\ - ["fast-deep-equal", "npm:3.1.3"],\ - ["json-schema-traverse", "npm:1.0.0"],\ - ["require-from-string", "npm:2.0.2"],\ - ["uri-js", "npm:4.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ajv-errors", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/ajv-errors-npm-1.0.1-32cd0b19f8-7d8907f7ff.zip/node_modules/ajv-errors/",\ - "packageDependencies": [\ - ["ajv-errors", "npm:1.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:1.0.1", {\ - "packageLocation": "./.yarn/__virtual__/ajv-errors-virtual-917b473fab/0/cache/ajv-errors-npm-1.0.1-32cd0b19f8-7d8907f7ff.zip/node_modules/ajv-errors/",\ - "packageDependencies": [\ - ["@types/ajv", null],\ - ["ajv", "npm:6.12.6"],\ - ["ajv-errors", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:1.0.1"]\ - ],\ - "packagePeers": [\ - "@types/ajv",\ - "ajv"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ajv-keywords", [\ - ["npm:3.5.2", {\ - "packageLocation": "./.yarn/cache/ajv-keywords-npm-3.5.2-0e391b70e2-d57c9d5bf8.zip/node_modules/ajv-keywords/",\ - "packageDependencies": [\ - ["ajv-keywords", "npm:3.5.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2", {\ - "packageLocation": "./.yarn/__virtual__/ajv-keywords-virtual-489c6ef39e/0/cache/ajv-keywords-npm-3.5.2-0e391b70e2-d57c9d5bf8.zip/node_modules/ajv-keywords/",\ - "packageDependencies": [\ - ["@types/ajv", null],\ - ["ajv", "npm:6.12.6"],\ - ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"]\ - ],\ - "packagePeers": [\ - "@types/ajv",\ - "ajv"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-colors", [\ - ["npm:4.1.3", {\ - "packageLocation": "./.yarn/cache/ansi-colors-npm-4.1.3-8ffd0ae6c7-43d6e2fc7b.zip/node_modules/ansi-colors/",\ - "packageDependencies": [\ - ["ansi-colors", "npm:4.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-escapes", [\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/ansi-escapes-npm-3.2.0-a9d573100e-0f94695b67.zip/node_modules/ansi-escapes/",\ - "packageDependencies": [\ - ["ansi-escapes", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.3.2", {\ - "packageLocation": "./.yarn/cache/ansi-escapes-npm-4.3.2-3ad173702f-8661034456.zip/node_modules/ansi-escapes/",\ - "packageDependencies": [\ - ["ansi-escapes", "npm:4.3.2"],\ - ["type-fest", "npm:0.21.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-regex", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/ansi-regex-npm-3.0.1-01f44078a3-09daf180c5.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:4.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.1", {\ - "packageLocation": "./.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ansi-styles", [\ - ["npm:3.2.1", {\ - "packageLocation": "./.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:3.2.1"],\ - ["color-convert", "npm:1.9.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.3.0", {\ - "packageLocation": "./.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-b4494dfbfc.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["color-convert", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.2.0", {\ - "packageLocation": "./.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:5.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/ansi-styles-npm-6.1.0-4f6a594d04-eb291cf9de.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:6.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["anymatch", [\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/anymatch-npm-3.1.2-1d5471acfa-985163db22.zip/node_modules/anymatch/",\ - "packageDependencies": [\ - ["anymatch", "npm:3.1.2"],\ - ["normalize-path", "npm:3.0.0"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.3", {\ - "packageLocation": "./.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip/node_modules/anymatch/",\ - "packageDependencies": [\ - ["anymatch", "npm:3.1.3"],\ - ["normalize-path", "npm:3.0.0"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["apollo3-cache-persist", [\ - ["npm:0.14.1", {\ - "packageLocation": "./.yarn/cache/apollo3-cache-persist-npm-0.14.1-2bcafb4134-85b2c84135.zip/node_modules/apollo3-cache-persist/",\ - "packageDependencies": [\ - ["apollo3-cache-persist", "npm:0.14.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.14.1", {\ - "packageLocation": "./.yarn/__virtual__/apollo3-cache-persist-virtual-efdb83b8b9/0/cache/apollo3-cache-persist-npm-0.14.1-2bcafb4134-85b2c84135.zip/node_modules/apollo3-cache-persist/",\ - "packageDependencies": [\ - ["@apollo/client", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.7.1"],\ - ["@types/apollo__client", null],\ - ["apollo3-cache-persist", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.14.1"]\ - ],\ - "packagePeers": [\ - "@apollo/client",\ - "@types/apollo__client"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["aproba", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/aproba-npm-2.0.0-8716bcfde6-c2b9a63129.zip/node_modules/aproba/",\ - "packageDependencies": [\ - ["aproba", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["are-we-there-yet", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/are-we-there-yet-npm-3.0.1-3395b1512f-390731720e.zip/node_modules/are-we-there-yet/",\ - "packageDependencies": [\ - ["are-we-there-yet", "npm:3.0.1"],\ - ["delegates", "npm:1.0.0"],\ - ["readable-stream", "npm:3.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["argparse", [\ - ["npm:1.0.10", {\ - "packageLocation": "./.yarn/cache/argparse-npm-1.0.10-528934e59d-c6a621343a.zip/node_modules/argparse/",\ - "packageDependencies": [\ - ["argparse", "npm:1.0.10"],\ - ["sprintf-js", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/argparse-npm-2.0.1-faff7999e6-18640244e6.zip/node_modules/argparse/",\ - "packageDependencies": [\ - ["argparse", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["aria-query", [\ - ["npm:4.2.2", {\ - "packageLocation": "./.yarn/cache/aria-query-npm-4.2.2-e0c4f1a309-c9f0b85c1f.zip/node_modules/aria-query/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@babel/runtime-corejs3", "npm:7.18.9"],\ - ["aria-query", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/aria-query-npm-5.0.0-986fb11e0e-e8476d1437.zip/node_modules/aria-query/",\ - "packageDependencies": [\ - ["aria-query", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["arr-diff", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/arr-diff-npm-4.0.0-cec86ae312-ea7c883484.zip/node_modules/arr-diff/",\ - "packageDependencies": [\ - ["arr-diff", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["arr-flatten", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/arr-flatten-npm-1.1.0-0c12b693e4-963fe12564.zip/node_modules/arr-flatten/",\ - "packageDependencies": [\ - ["arr-flatten", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["arr-union", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/arr-union-npm-3.1.0-853ada9729-b5b0408c6e.zip/node_modules/arr-union/",\ - "packageDependencies": [\ - ["arr-union", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array-flatten", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/array-flatten-npm-1.1.1-9d94ad5f1d-e13c9d2472.zip/node_modules/array-flatten/",\ - "packageDependencies": [\ - ["array-flatten", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array-includes", [\ - ["npm:3.1.5", {\ - "packageLocation": "./.yarn/cache/array-includes-npm-3.1.5-6b8e152f4f-006a776c24.zip/node_modules/array-includes/",\ - "packageDependencies": [\ - ["array-includes", "npm:3.1.5"],\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["get-intrinsic", "npm:1.1.2"],\ - ["is-string", "npm:1.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array-union", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/array-union-npm-1.0.2-cc61ee268f-82cec6421b.zip/node_modules/array-union/",\ - "packageDependencies": [\ - ["array-union", "npm:1.0.2"],\ - ["array-uniq", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip/node_modules/array-union/",\ - "packageDependencies": [\ - ["array-union", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array-uniq", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/array-uniq-npm-1.0.3-e7f5d6f3a1-1625f06b09.zip/node_modules/array-uniq/",\ - "packageDependencies": [\ - ["array-uniq", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array-unique", [\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/array-unique-npm-0.3.2-9f62c6ac93-da344b89cf.zip/node_modules/array-unique/",\ - "packageDependencies": [\ - ["array-unique", "npm:0.3.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array.prototype.flat", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/array.prototype.flat-npm-1.3.0-6c5c4292bd-e613f4dfdd.zip/node_modules/array.prototype.flat/",\ - "packageDependencies": [\ - ["array.prototype.flat", "npm:1.3.0"],\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["es-shim-unscopables", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["array.prototype.flatmap", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/array.prototype.flatmap-npm-1.3.0-ae8419130d-e95067febd.zip/node_modules/array.prototype.flatmap/",\ - "packageDependencies": [\ - ["array.prototype.flatmap", "npm:1.3.0"],\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["es-shim-unscopables", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["arrify", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip/node_modules/arrify/",\ - "packageDependencies": [\ - ["arrify", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["asap", [\ - ["npm:2.0.6", {\ - "packageLocation": "./.yarn/cache/asap-npm-2.0.6-36714d439d-b244c0458c.zip/node_modules/asap/",\ - "packageDependencies": [\ - ["asap", "npm:2.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["asn1js", [\ - ["npm:3.0.5", {\ - "packageLocation": "./.yarn/cache/asn1js-npm-3.0.5-cf5558af33-17fb030243.zip/node_modules/asn1js/",\ - "packageDependencies": [\ - ["asn1js", "npm:3.0.5"],\ - ["pvtsutils", "npm:1.3.2"],\ - ["pvutils", "npm:1.1.3"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["assign-symbols", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/assign-symbols-npm-1.0.0-fd803ccdf1-c0eb895911.zip/node_modules/assign-symbols/",\ - "packageDependencies": [\ - ["assign-symbols", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ast-types", [\ - ["npm:0.13.4", {\ - "packageLocation": "./.yarn/cache/ast-types-npm-0.13.4-69f7e68df8-c55b375b9a.zip/node_modules/ast-types/",\ - "packageDependencies": [\ - ["ast-types", "npm:0.13.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ast-types-flow", [\ - ["npm:0.0.7", {\ - "packageLocation": "./.yarn/cache/ast-types-flow-npm-0.0.7-7d32a3abf5-663b90e99b.zip/node_modules/ast-types-flow/",\ - "packageDependencies": [\ - ["ast-types-flow", "npm:0.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["astral-regex", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/astral-regex-npm-2.0.0-f30d866aab-876231688c.zip/node_modules/astral-regex/",\ - "packageDependencies": [\ - ["astral-regex", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["async", [\ - ["npm:3.2.4", {\ - "packageLocation": "./.yarn/cache/async-npm-3.2.4-aba13508f9-bebb5dc225.zip/node_modules/async/",\ - "packageDependencies": [\ - ["async", "npm:3.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["async-retry", [\ - ["npm:1.3.3", {\ - "packageLocation": "./.yarn/cache/async-retry-npm-1.3.3-bc90c5cee0-38a7152ff7.zip/node_modules/async-retry/",\ - "packageDependencies": [\ - ["async-retry", "npm:1.3.3"],\ - ["retry", "npm:0.13.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["asynckit", [\ - ["npm:0.4.0", {\ - "packageLocation": "./.yarn/cache/asynckit-npm-0.4.0-c718858525-3ce727cbc7.zip/node_modules/asynckit/",\ - "packageDependencies": [\ - ["asynckit", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["at-least-node", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/at-least-node-npm-1.0.0-2b36e661fa-463e2f8e43.zip/node_modules/at-least-node/",\ - "packageDependencies": [\ - ["at-least-node", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["atob", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/atob-npm-2.1.2-bcb583261e-0624406cc0.zip/node_modules/atob/",\ - "packageDependencies": [\ - ["atob", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["auto-bind", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/auto-bind-npm-4.0.0-1cda90694b-00cad71cce.zip/node_modules/auto-bind/",\ - "packageDependencies": [\ - ["auto-bind", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["axe-core", [\ - ["npm:4.10.2", {\ - "packageLocation": "./.yarn/cache/axe-core-npm-4.10.2-46ed42027d-a69423b2ff.zip/node_modules/axe-core/",\ - "packageDependencies": [\ - ["axe-core", "npm:4.10.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.4.3", {\ - "packageLocation": "./.yarn/cache/axe-core-npm-4.4.3-6a07ed8cf6-e4f20413cb.zip/node_modules/axe-core/",\ - "packageDependencies": [\ - ["axe-core", "npm:4.4.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.9.0", {\ - "packageLocation": "./.yarn/cache/axe-core-npm-4.9.0-031208ac41-d337c4600e.zip/node_modules/axe-core/",\ - "packageDependencies": [\ - ["axe-core", "npm:4.9.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["axobject-query", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/axobject-query-npm-2.2.0-6553738f52-25de4b5ba6.zip/node_modules/axobject-query/",\ - "packageDependencies": [\ - ["axobject-query", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["b4a", [\ - ["npm:1.6.6", {\ - "packageLocation": "./.yarn/cache/b4a-npm-1.6.6-140a53bc1d-6154a36bd7.zip/node_modules/b4a/",\ - "packageDependencies": [\ - ["b4a", "npm:1.6.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-jest", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/babel-jest-npm-29.0.3-160dd2c259-a6b7f5f983.zip/node_modules/babel-jest/",\ - "packageDependencies": [\ - ["babel-jest", "npm:29.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:7ecd4e6017ab59aca2afca796af907a9fa8cd5286d0ea1ed78ac596e7fbfbfd9f24d22f1fff46b1775a19c6f99cb275264adc798eb8ee0b78528b0f607920098#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/babel-jest-virtual-14908ae57b/0/cache/babel-jest-npm-29.0.3-160dd2c259-a6b7f5f983.zip/node_modules/babel-jest/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@types/babel__core", "npm:7.1.19"],\ - ["babel-jest", "virtual:7ecd4e6017ab59aca2afca796af907a9fa8cd5286d0ea1ed78ac596e7fbfbfd9f24d22f1fff46b1775a19c6f99cb275264adc798eb8ee0b78528b0f607920098#npm:29.0.3"],\ - ["babel-plugin-istanbul", "npm:6.1.1"],\ - ["babel-preset-jest", "virtual:14908ae57bb525b62fcc12721f063828694cc341a4bcfe19fdb8483d773349233fb858350511c4febe5fe2c15b7d162c6cbc2e98f379c658b2d7d1750f584fcf#npm:29.0.2"],\ - ["chalk", "npm:4.1.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["slash", "npm:3.0.0"]\ - ],\ - "packagePeers": [\ - "@babel/core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-loader", [\ - ["npm:8.2.5", {\ - "packageLocation": "./.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-2b40b410cb.zip/node_modules/babel-loader/",\ - "packageDependencies": [\ - ["babel-loader", "npm:8.2.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:8.2.5", {\ - "packageLocation": "./.yarn/__virtual__/babel-loader-virtual-d77c0637ff/0/cache/babel-loader-npm-8.2.5-e749e26bb5-2b40b410cb.zip/node_modules/babel-loader/",\ - "packageDependencies": [\ - ["@babel/core", null],\ - ["@types/babel__core", null],\ - ["@types/webpack", null],\ - ["babel-loader", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:8.2.5"],\ - ["find-cache-dir", "npm:3.3.2"],\ - ["loader-utils", "npm:2.0.4"],\ - ["make-dir", "npm:3.1.0"],\ - ["schema-utils", "npm:2.7.1"],\ - ["webpack", null]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core",\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-dynamic-import-node", [\ - ["npm:2.3.3", {\ - "packageLocation": "./.yarn/cache/babel-plugin-dynamic-import-node-npm-2.3.3-be081936a9-c9d24415bc.zip/node_modules/babel-plugin-dynamic-import-node/",\ - "packageDependencies": [\ - ["babel-plugin-dynamic-import-node", "npm:2.3.3"],\ - ["object.assign", "npm:4.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-istanbul", [\ - ["npm:6.1.1", {\ - "packageLocation": "./.yarn/cache/babel-plugin-istanbul-npm-6.1.1-df824055e4-ffd436bb2a.zip/node_modules/babel-plugin-istanbul/",\ - "packageDependencies": [\ - ["@babel/helper-plugin-utils", "npm:7.18.9"],\ - ["@istanbuljs/load-nyc-config", "npm:1.1.0"],\ - ["@istanbuljs/schema", "npm:0.1.3"],\ - ["babel-plugin-istanbul", "npm:6.1.1"],\ - ["istanbul-lib-instrument", "npm:5.2.0"],\ - ["test-exclude", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-jest-hoist", [\ - ["npm:29.0.2", {\ - "packageLocation": "./.yarn/cache/babel-plugin-jest-hoist-npm-29.0.2-3febe9d556-3d5feebc61.zip/node_modules/babel-plugin-jest-hoist/",\ - "packageDependencies": [\ - ["@babel/template", "npm:7.18.10"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@types/babel__core", "npm:7.1.19"],\ - ["@types/babel__traverse", "npm:7.18.0"],\ - ["babel-plugin-jest-hoist", "npm:29.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-macros", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/babel-plugin-macros-npm-3.1.0-320e781f4e-30be6ca45e.zip/node_modules/babel-plugin-macros/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["babel-plugin-macros", "npm:3.1.0"],\ - ["cosmiconfig", "npm:7.0.1"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-polyfill-corejs2", [\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/babel-plugin-polyfill-corejs2-npm-0.3.2-8831501ede-9b53f0ac51.zip/node_modules/babel-plugin-polyfill-corejs2/",\ - "packageDependencies": [\ - ["babel-plugin-polyfill-corejs2", "npm:0.3.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.3.2", {\ - "packageLocation": "./.yarn/__virtual__/babel-plugin-polyfill-corejs2-virtual-622a10b85f/0/cache/babel-plugin-polyfill-corejs2-npm-0.3.2-8831501ede-9b53f0ac51.zip/node_modules/babel-plugin-polyfill-corejs2/",\ - "packageDependencies": [\ - ["@babel/compat-data", "npm:7.18.8"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-define-polyfill-provider", "virtual:622a10b85ff6ff549fdab08148e1702f05c38402252f08c9582af435a3e34602ad990ada82f1839e977eeef66a6ea46b09f045efccdbf9cd2018384f7324c185#npm:0.3.2"],\ - ["@types/babel__core", null],\ - ["babel-plugin-polyfill-corejs2", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.3.2"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-polyfill-corejs3", [\ - ["npm:0.5.3", {\ - "packageLocation": "./.yarn/cache/babel-plugin-polyfill-corejs3-npm-0.5.3-55aa3bb939-ff94151925.zip/node_modules/babel-plugin-polyfill-corejs3/",\ - "packageDependencies": [\ - ["babel-plugin-polyfill-corejs3", "npm:0.5.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.5.3", {\ - "packageLocation": "./.yarn/__virtual__/babel-plugin-polyfill-corejs3-virtual-8e7c869f5b/0/cache/babel-plugin-polyfill-corejs3-npm-0.5.3-55aa3bb939-ff94151925.zip/node_modules/babel-plugin-polyfill-corejs3/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-define-polyfill-provider", "virtual:622a10b85ff6ff549fdab08148e1702f05c38402252f08c9582af435a3e34602ad990ada82f1839e977eeef66a6ea46b09f045efccdbf9cd2018384f7324c185#npm:0.3.2"],\ - ["@types/babel__core", null],\ - ["babel-plugin-polyfill-corejs3", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.5.3"],\ - ["core-js-compat", "npm:3.24.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-polyfill-regenerator", [\ - ["npm:0.4.0", {\ - "packageLocation": "./.yarn/cache/babel-plugin-polyfill-regenerator-npm-0.4.0-a9417e5ddf-699aa9c0dc.zip/node_modules/babel-plugin-polyfill-regenerator/",\ - "packageDependencies": [\ - ["babel-plugin-polyfill-regenerator", "npm:0.4.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.4.0", {\ - "packageLocation": "./.yarn/__virtual__/babel-plugin-polyfill-regenerator-virtual-de7015c7bb/0/cache/babel-plugin-polyfill-regenerator-npm-0.4.0-a9417e5ddf-699aa9c0dc.zip/node_modules/babel-plugin-polyfill-regenerator/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/helper-define-polyfill-provider", "virtual:622a10b85ff6ff549fdab08148e1702f05c38402252f08c9582af435a3e34602ad990ada82f1839e977eeef66a6ea46b09f045efccdbf9cd2018384f7324c185#npm:0.3.2"],\ - ["@types/babel__core", null],\ - ["babel-plugin-polyfill-regenerator", "virtual:9f93d168010259cd04ba7180cd1fc0b9b5c4b2923363f4740ffbc24669f5628f4a197f0ba9f4ab9c6b912d7b71321ab68fadce435903a0db7bf8992c778674e8#npm:0.4.0"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-plugin-syntax-trailing-function-commas", [\ - ["npm:7.0.0-beta.0", {\ - "packageLocation": "./.yarn/cache/babel-plugin-syntax-trailing-function-commas-npm-7.0.0-beta.0-bdba488627-e37509156c.zip/node_modules/babel-plugin-syntax-trailing-function-commas/",\ - "packageDependencies": [\ - ["babel-plugin-syntax-trailing-function-commas", "npm:7.0.0-beta.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-preset-current-node-syntax", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-94561959cb.zip/node_modules/babel-preset-current-node-syntax/",\ - "packageDependencies": [\ - ["babel-preset-current-node-syntax", "npm:1.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:84ff29d6a084a05ebadd6375ef0e3f7f061aae7569d7008b4a7ad3f714574c8088a30e0885730b587eaa37c2950a6e66ced890f017df0910825051b612347991#npm:1.0.1", {\ - "packageLocation": "./.yarn/__virtual__/babel-preset-current-node-syntax-virtual-6bac728443/0/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-94561959cb.zip/node_modules/babel-preset-current-node-syntax/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/plugin-syntax-async-generators", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.4"],\ - ["@babel/plugin-syntax-bigint", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@babel/plugin-syntax-class-properties", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.12.13"],\ - ["@babel/plugin-syntax-import-meta", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4"],\ - ["@babel/plugin-syntax-json-strings", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@babel/plugin-syntax-logical-assignment-operators", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4"],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@babel/plugin-syntax-numeric-separator", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.10.4"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@babel/plugin-syntax-optional-catch-binding", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@babel/plugin-syntax-optional-chaining", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.8.3"],\ - ["@babel/plugin-syntax-top-level-await", "virtual:6bac728443c412bf1cf994397d5578ec7bb2ee92004c19d388452d58894fefc80cda72501e8dea143b1c1f149cd736387e64b3f638b5d7eeab1939c7da195b4e#npm:7.14.5"],\ - ["@types/babel__core", "npm:7.1.19"],\ - ["babel-preset-current-node-syntax", "virtual:84ff29d6a084a05ebadd6375ef0e3f7f061aae7569d7008b4a7ad3f714574c8088a30e0885730b587eaa37c2950a6e66ced890f017df0910825051b612347991#npm:1.0.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9e09885f9230460743134ac3f855149d037f404c5fef36fab473527d42c6f22166530bb1cd3d50372a4ee47440322e9e4fa8cec9356b06e975558682285157dd#npm:1.0.1", {\ - "packageLocation": "./.yarn/__virtual__/babel-preset-current-node-syntax-virtual-46aabf5e15/0/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-94561959cb.zip/node_modules/babel-preset-current-node-syntax/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/plugin-syntax-async-generators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.4"],\ - ["@babel/plugin-syntax-bigint", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.12.13"],\ - ["@babel/plugin-syntax-import-meta", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@babel/plugin-syntax-json-strings", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-logical-assignment-operators", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-numeric-separator", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.10.4"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.8.3"],\ - ["@babel/plugin-syntax-optional-catch-binding", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-optional-chaining", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.8.3"],\ - ["@babel/plugin-syntax-top-level-await", "virtual:46aabf5e15f68c135a07eb23cc874fa57f68387aec0cee4d3d500e10002ed57dbd49412b0ecc68b4ab0c97acf690810e55da5bdcf0c19c81a91af4a3a6864040#npm:7.14.5"],\ - ["@types/babel__core", null],\ - ["babel-preset-current-node-syntax", "virtual:9e09885f9230460743134ac3f855149d037f404c5fef36fab473527d42c6f22166530bb1cd3d50372a4ee47440322e9e4fa8cec9356b06e975558682285157dd#npm:1.0.1"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-preset-fbjs", [\ - ["npm:3.4.0", {\ - "packageLocation": "./.yarn/cache/babel-preset-fbjs-npm-3.4.0-d20810a2f3-1e73ebaaea.zip/node_modules/babel-preset-fbjs/",\ - "packageDependencies": [\ - ["babel-preset-fbjs", "npm:3.4.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:810563646393289aef3f5730d25cc237a004cd4995a46dd0b453e47cf80f062b2554c37f72b4a61f9eada5c63c89a2a9a1c25f72c144d07c46ef79e873265ac4#npm:3.4.0", {\ - "packageLocation": "./.yarn/__virtual__/babel-preset-fbjs-virtual-fe1283a62b/0/cache/babel-preset-fbjs-npm-3.4.0-d20810a2f3-1e73ebaaea.zip/node_modules/babel-preset-fbjs/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/plugin-proposal-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-proposal-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-syntax-class-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.12.13"],\ - ["@babel/plugin-syntax-flow", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-syntax-jsx", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-syntax-object-rest-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.8.3"],\ - ["@babel/plugin-transform-arrow-functions", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-block-scoped-functions", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-block-scoping", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-classes", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-computed-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-destructuring", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-flow-strip-types", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-for-of", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@babel/plugin-transform-function-name", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-member-expression-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-modules-commonjs", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-object-super", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-parameters", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.8"],\ - ["@babel/plugin-transform-property-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-react-display-name", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-react-jsx", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.10"],\ - ["@babel/plugin-transform-shorthand-properties", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-transform-spread", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@babel/plugin-transform-template-literals", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.9"],\ - ["@types/babel__core", null],\ - ["babel-plugin-syntax-trailing-function-commas", "npm:7.0.0-beta.0"],\ - ["babel-preset-fbjs", "virtual:810563646393289aef3f5730d25cc237a004cd4995a46dd0b453e47cf80f062b2554c37f72b4a61f9eada5c63c89a2a9a1c25f72c144d07c46ef79e873265ac4#npm:3.4.0"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["babel-preset-jest", [\ - ["npm:29.0.2", {\ - "packageLocation": "./.yarn/cache/babel-preset-jest-npm-29.0.2-060839eb24-485db525f4.zip/node_modules/babel-preset-jest/",\ - "packageDependencies": [\ - ["babel-preset-jest", "npm:29.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:14908ae57bb525b62fcc12721f063828694cc341a4bcfe19fdb8483d773349233fb858350511c4febe5fe2c15b7d162c6cbc2e98f379c658b2d7d1750f584fcf#npm:29.0.2", {\ - "packageLocation": "./.yarn/__virtual__/babel-preset-jest-virtual-84ff29d6a0/0/cache/babel-preset-jest-npm-29.0.2-060839eb24-485db525f4.zip/node_modules/babel-preset-jest/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@types/babel__core", "npm:7.1.19"],\ - ["babel-plugin-jest-hoist", "npm:29.0.2"],\ - ["babel-preset-current-node-syntax", "virtual:84ff29d6a084a05ebadd6375ef0e3f7f061aae7569d7008b4a7ad3f714574c8088a30e0885730b587eaa37c2950a6e66ced890f017df0910825051b612347991#npm:1.0.1"],\ - ["babel-preset-jest", "virtual:14908ae57bb525b62fcc12721f063828694cc341a4bcfe19fdb8483d773349233fb858350511c4febe5fe2c15b7d162c6cbc2e98f379c658b2d7d1750f584fcf#npm:29.0.2"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["balanced-match", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip/node_modules/balanced-match/",\ - "packageDependencies": [\ - ["balanced-match", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bare-events", [\ - ["npm:2.2.2", {\ - "packageLocation": "./.yarn/cache/bare-events-npm-2.2.2-100b6b9ab3-79d50a739d.zip/node_modules/bare-events/",\ - "packageDependencies": [\ - ["bare-events", "npm:2.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.5.4", {\ - "packageLocation": "./.yarn/cache/bare-events-npm-2.5.4-ff815c1e18-135ef380b1.zip/node_modules/bare-events/",\ - "packageDependencies": [\ - ["bare-events", "npm:2.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bare-fs", [\ - ["npm:2.2.3", {\ - "packageLocation": "./.yarn/unplugged/bare-fs-npm-2.2.3-9906afecb4/node_modules/bare-fs/",\ - "packageDependencies": [\ - ["bare-events", "npm:2.2.2"],\ - ["bare-fs", "npm:2.2.3"],\ - ["bare-path", "npm:2.1.1"],\ - ["streamx", "npm:2.16.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/unplugged/bare-fs-virtual-ee95eacdf3/node_modules/bare-fs/",\ - "packageDependencies": [\ - ["bare-fs", "npm:4.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:76b28a2b9eb169bb53889122d69d0fa855399b92831c9bfbcba96a7a43e56047c25768c1bbca97d6b30e6d948f628b34fb7029bec77453ee9390b1645fc0f2ed#npm:4.0.2", {\ - "packageLocation": "./.yarn/unplugged/bare-fs-virtual-ee95eacdf3/node_modules/bare-fs/",\ - "packageDependencies": [\ - ["@types/bare-buffer", null],\ - ["bare-buffer", null],\ - ["bare-events", "npm:2.5.4"],\ - ["bare-fs", "virtual:76b28a2b9eb169bb53889122d69d0fa855399b92831c9bfbcba96a7a43e56047c25768c1bbca97d6b30e6d948f628b34fb7029bec77453ee9390b1645fc0f2ed#npm:4.0.2"],\ - ["bare-path", "npm:3.0.0"],\ - ["bare-stream", "virtual:ee95eacdf31dd2a4f91ae0a5a4da07c56377cb37321019c548c6b7ecd23f7fa4348edc87361cb56182238f018a19f59302948d0251b36bbf6e226f98d3f33752#npm:2.6.5"]\ - ],\ - "packagePeers": [\ - "@types/bare-buffer",\ - "bare-buffer"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bare-os", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/unplugged/bare-os-npm-2.2.1-bdff9b1dc0/node_modules/bare-os/",\ - "packageDependencies": [\ - ["bare-os", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.6.1", {\ - "packageLocation": "./.yarn/unplugged/bare-os-npm-3.6.1-4544809acf/node_modules/bare-os/",\ - "packageDependencies": [\ - ["bare-os", "npm:3.6.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bare-path", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/bare-path-npm-2.1.1-646ad110b4-3901d415f0.zip/node_modules/bare-path/",\ - "packageDependencies": [\ - ["bare-os", "npm:2.2.1"],\ - ["bare-path", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/bare-path-npm-3.0.0-d42919fc21-712d90e9cd.zip/node_modules/bare-path/",\ - "packageDependencies": [\ - ["bare-os", "npm:3.6.1"],\ - ["bare-path", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bare-stream", [\ - ["npm:2.6.5", {\ - "packageLocation": "./.yarn/cache/bare-stream-npm-2.6.5-1977dd457e-0f5ca2167f.zip/node_modules/bare-stream/",\ - "packageDependencies": [\ - ["bare-stream", "npm:2.6.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:ee95eacdf31dd2a4f91ae0a5a4da07c56377cb37321019c548c6b7ecd23f7fa4348edc87361cb56182238f018a19f59302948d0251b36bbf6e226f98d3f33752#npm:2.6.5", {\ - "packageLocation": "./.yarn/__virtual__/bare-stream-virtual-8182bc7b67/0/cache/bare-stream-npm-2.6.5-1977dd457e-0f5ca2167f.zip/node_modules/bare-stream/",\ - "packageDependencies": [\ - ["@types/bare-buffer", null],\ - ["@types/bare-events", null],\ - ["bare-buffer", null],\ - ["bare-events", "npm:2.5.4"],\ - ["bare-stream", "virtual:ee95eacdf31dd2a4f91ae0a5a4da07c56377cb37321019c548c6b7ecd23f7fa4348edc87361cb56182238f018a19f59302948d0251b36bbf6e226f98d3f33752#npm:2.6.5"],\ - ["streamx", "npm:2.22.0"]\ - ],\ - "packagePeers": [\ - "@types/bare-buffer",\ - "@types/bare-events",\ - "bare-buffer",\ - "bare-events"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["base", [\ - ["npm:0.11.2", {\ - "packageLocation": "./.yarn/cache/base-npm-0.11.2-a9bde462d6-33b0c5d570.zip/node_modules/base/",\ - "packageDependencies": [\ - ["base", "npm:0.11.2"],\ - ["cache-base", "npm:1.0.1"],\ - ["class-utils", "npm:0.3.6"],\ - ["component-emitter", "npm:1.3.0"],\ - ["define-property", "npm:1.0.0"],\ - ["isobject", "npm:3.0.1"],\ - ["mixin-deep", "npm:1.3.2"],\ - ["pascalcase", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["base64-js", [\ - ["npm:1.5.1", {\ - "packageLocation": "./.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip/node_modules/base64-js/",\ - "packageDependencies": [\ - ["base64-js", "npm:1.5.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["basic-ftp", [\ - ["npm:5.0.5", {\ - "packageLocation": "./.yarn/cache/basic-ftp-npm-5.0.5-4f7972e368-3dc56b2092.zip/node_modules/basic-ftp/",\ - "packageDependencies": [\ - ["basic-ftp", "npm:5.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["big.js", [\ - ["npm:5.2.2", {\ - "packageLocation": "./.yarn/cache/big.js-npm-5.2.2-e147c30820-c04416aeb0.zip/node_modules/big.js/",\ - "packageDependencies": [\ - ["big.js", "npm:5.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bl", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/bl-npm-4.1.0-7f94cdcf3f-b7904e66ed.zip/node_modules/bl/",\ - "packageDependencies": [\ - ["bl", "npm:4.1.0"],\ - ["buffer", "npm:5.7.1"],\ - ["inherits", "npm:2.0.4"],\ - ["readable-stream", "npm:3.6.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/bl-npm-5.1.0-872d13e4d1-0340d3d70d.zip/node_modules/bl/",\ - "packageDependencies": [\ - ["bl", "npm:5.1.0"],\ - ["buffer", "npm:6.0.3"],\ - ["inherits", "npm:2.0.4"],\ - ["readable-stream", "npm:3.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["body-parser", [\ - ["npm:1.20.3", {\ - "packageLocation": "./.yarn/cache/body-parser-npm-1.20.3-c7b184cd14-8723e3d7a6.zip/node_modules/body-parser/",\ - "packageDependencies": [\ - ["body-parser", "npm:1.20.3"],\ - ["bytes", "npm:3.1.2"],\ - ["content-type", "npm:1.0.5"],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["depd", "npm:2.0.0"],\ - ["destroy", "npm:1.2.0"],\ - ["http-errors", "npm:2.0.0"],\ - ["iconv-lite", "npm:0.4.24"],\ - ["on-finished", "npm:2.4.1"],\ - ["qs", "npm:6.13.0"],\ - ["raw-body", "npm:2.5.2"],\ - ["type-is", "npm:1.6.18"],\ - ["unpipe", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["boolbase", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/boolbase-npm-1.0.0-965fe9af6d-3e25c80ef6.zip/node_modules/boolbase/",\ - "packageDependencies": [\ - ["boolbase", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["brace-expansion", [\ - ["npm:1.1.11", {\ - "packageLocation": "./.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip/node_modules/brace-expansion/",\ - "packageDependencies": [\ - ["balanced-match", "npm:1.0.2"],\ - ["brace-expansion", "npm:1.1.11"],\ - ["concat-map", "npm:0.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip/node_modules/brace-expansion/",\ - "packageDependencies": [\ - ["balanced-match", "npm:1.0.2"],\ - ["brace-expansion", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["braces", [\ - ["npm:2.3.2", {\ - "packageLocation": "./.yarn/cache/braces-npm-2.3.2-19cadb3384-7c0f0d9625.zip/node_modules/braces/",\ - "packageDependencies": [\ - ["arr-flatten", "npm:1.1.0"],\ - ["array-unique", "npm:0.3.2"],\ - ["braces", "npm:2.3.2"],\ - ["extend-shallow", "npm:2.0.1"],\ - ["fill-range", "npm:4.0.0"],\ - ["isobject", "npm:3.0.1"],\ - ["repeat-element", "npm:1.1.4"],\ - ["snapdragon", "npm:0.8.2"],\ - ["snapdragon-node", "npm:2.1.1"],\ - ["split-string", "npm:3.1.0"],\ - ["to-regex", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip/node_modules/braces/",\ - "packageDependencies": [\ - ["braces", "npm:3.0.3"],\ - ["fill-range", "npm:7.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["broccoli-node-api", [\ - ["npm:1.7.0", {\ - "packageLocation": "./.yarn/cache/broccoli-node-api-npm-1.7.0-aa5838b0c8-ad6d24f71d.zip/node_modules/broccoli-node-api/",\ - "packageDependencies": [\ - ["broccoli-node-api", "npm:1.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["broccoli-node-info", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/broccoli-node-info-npm-2.2.0-d760d37868-9364e78110.zip/node_modules/broccoli-node-info/",\ - "packageDependencies": [\ - ["broccoli-node-info", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["broccoli-output-wrapper", [\ - ["npm:3.2.5", {\ - "packageLocation": "./.yarn/cache/broccoli-output-wrapper-npm-3.2.5-ec540393e0-39f4ceeb47.zip/node_modules/broccoli-output-wrapper/",\ - "packageDependencies": [\ - ["broccoli-output-wrapper", "npm:3.2.5"],\ - ["fs-extra", "npm:8.1.0"],\ - ["heimdalljs-logger", "npm:0.1.10"],\ - ["symlink-or-copy", "npm:1.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["broccoli-plugin", [\ - ["npm:4.0.7", {\ - "packageLocation": "./.yarn/cache/broccoli-plugin-npm-4.0.7-88829f562b-93cb02b1b0.zip/node_modules/broccoli-plugin/",\ - "packageDependencies": [\ - ["broccoli-node-api", "npm:1.7.0"],\ - ["broccoli-output-wrapper", "npm:3.2.5"],\ - ["broccoli-plugin", "npm:4.0.7"],\ - ["fs-merger", "npm:3.2.1"],\ - ["promise-map-series", "npm:0.3.0"],\ - ["quick-temp", "npm:0.1.8"],\ - ["rimraf", "npm:3.0.2"],\ - ["symlink-or-copy", "npm:1.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["browser-process-hrtime", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/browser-process-hrtime-npm-1.0.0-db700805c2-e30f868cdb.zip/node_modules/browser-process-hrtime/",\ - "packageDependencies": [\ - ["browser-process-hrtime", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["browserslist", [\ - ["npm:4.21.3", {\ - "packageLocation": "./.yarn/cache/browserslist-npm-4.21.3-7dabe86a57-a8f816d4fa.zip/node_modules/browserslist/",\ - "packageDependencies": [\ - ["browserslist", "npm:4.21.3"],\ - ["caniuse-lite", "npm:1.0.30001378"],\ - ["electron-to-chromium", "npm:1.4.225"],\ - ["node-releases", "npm:2.0.6"],\ - ["update-browserslist-db", "virtual:7dabe86a57e66f38602a3318a9a679c09cef5315077ee4afa3dbf7e16ac6eadfd7834360e07fea78c56290801aa035a0803a3e03041c77287c222df384f2a179#npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.23.0", {\ - "packageLocation": "./.yarn/cache/browserslist-npm-4.23.0-8126a959d4-496c3862df.zip/node_modules/browserslist/",\ - "packageDependencies": [\ - ["browserslist", "npm:4.23.0"],\ - ["caniuse-lite", "npm:1.0.30001606"],\ - ["electron-to-chromium", "npm:1.4.728"],\ - ["node-releases", "npm:2.0.14"],\ - ["update-browserslist-db", "virtual:8126a959d46e6def6d7f2497c47970a23a94adac85f5be1df9be290c674503b9bcbe0dc057e2741ee222cc2a8a3b9f584b20c3a9eb5ce085704d99fc5d94514c#npm:1.0.13"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.24.2", {\ - "packageLocation": "./.yarn/cache/browserslist-npm-4.24.2-0bc5f13e3b-f8a9d78bba.zip/node_modules/browserslist/",\ - "packageDependencies": [\ - ["browserslist", "npm:4.24.2"],\ - ["caniuse-lite", "npm:1.0.30001680"],\ - ["electron-to-chromium", "npm:1.5.56"],\ - ["node-releases", "npm:2.0.18"],\ - ["update-browserslist-db", "virtual:0bc5f13e3b070c660ccf3396ff30b6fc44ede2343c6543d593ce4624807ab1bafdbcd764ac20b4d55e6854e63e2568f1c6d09371eb639766b95e2d401b5b05cb#npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bser", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/bser-npm-2.1.1-cc902055ce-edba1b65ba.zip/node_modules/bser/",\ - "packageDependencies": [\ - ["bser", "npm:2.1.1"],\ - ["node-int64", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["buffer", [\ - ["npm:5.7.1", {\ - "packageLocation": "./.yarn/cache/buffer-npm-5.7.1-513ef8259e-997434d3c6.zip/node_modules/buffer/",\ - "packageDependencies": [\ - ["base64-js", "npm:1.5.1"],\ - ["buffer", "npm:5.7.1"],\ - ["ieee754", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.3", {\ - "packageLocation": "./.yarn/cache/buffer-npm-6.0.3-cd90dfedfe-b6bc68237e.zip/node_modules/buffer/",\ - "packageDependencies": [\ - ["base64-js", "npm:1.5.1"],\ - ["buffer", "npm:6.0.3"],\ - ["ieee754", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["buffer-crc32", [\ - ["npm:0.2.13", {\ - "packageLocation": "./.yarn/cache/buffer-crc32-npm-0.2.13-c4b6fceac1-06252347ae.zip/node_modules/buffer-crc32/",\ - "packageDependencies": [\ - ["buffer-crc32", "npm:0.2.13"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["buffer-from", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/buffer-from-npm-1.1.2-03d2f20d7e-0448524a56.zip/node_modules/buffer-from/",\ - "packageDependencies": [\ - ["buffer-from", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["builtin-modules", [\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/builtin-modules-npm-3.3.0-db4f3d32de-62e063ab40.zip/node_modules/builtin-modules/",\ - "packageDependencies": [\ - ["builtin-modules", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["busboy", [\ - ["npm:1.6.0", {\ - "packageLocation": "./.yarn/cache/busboy-npm-1.6.0-ebb5cbb04b-bee10fa10e.zip/node_modules/busboy/",\ - "packageDependencies": [\ - ["busboy", "npm:1.6.0"],\ - ["streamsearch", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["bytes", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/bytes-npm-3.0.0-19be09472d-a2b386dd81.zip/node_modules/bytes/",\ - "packageDependencies": [\ - ["bytes", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/bytes-npm-3.1.2-28b8643004-a10abf2ba7.zip/node_modules/bytes/",\ - "packageDependencies": [\ - ["bytes", "npm:3.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cacache", [\ - ["npm:16.1.2", {\ - "packageLocation": "./.yarn/cache/cacache-npm-16.1.2-0d36d1aaf1-79fe7f4bc9.zip/node_modules/cacache/",\ - "packageDependencies": [\ - ["@npmcli/fs", "npm:2.1.2"],\ - ["@npmcli/move-file", "npm:2.0.1"],\ - ["cacache", "npm:16.1.2"],\ - ["chownr", "npm:2.0.0"],\ - ["fs-minipass", "npm:2.1.0"],\ - ["glob", "npm:8.0.3"],\ - ["infer-owner", "npm:1.0.4"],\ - ["lru-cache", "npm:7.14.0"],\ - ["minipass", "npm:3.3.5"],\ - ["minipass-collect", "npm:1.0.2"],\ - ["minipass-flush", "npm:1.0.5"],\ - ["minipass-pipeline", "npm:1.2.4"],\ - ["mkdirp", "npm:1.0.4"],\ - ["p-map", "npm:4.0.0"],\ - ["promise-inflight", "virtual:0d36d1aaf1ea7535b384d539e487e25585f01670d39e526a26c87bd6ae453b53f80523e2225c1e4f6cf72a268adf45b0dadbb848ac415cce860f97be8fff5230#npm:1.0.1"],\ - ["rimraf", "npm:3.0.2"],\ - ["ssri", "npm:9.0.1"],\ - ["tar", "npm:6.2.1"],\ - ["unique-filename", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cache-base", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/cache-base-npm-1.0.1-1538417cb9-50dd11af5c.zip/node_modules/cache-base/",\ - "packageDependencies": [\ - ["cache-base", "npm:1.0.1"],\ - ["collection-visit", "npm:1.0.0"],\ - ["component-emitter", "npm:1.3.0"],\ - ["get-value", "npm:2.0.6"],\ - ["has-value", "npm:1.0.0"],\ - ["isobject", "npm:3.0.1"],\ - ["set-value", "npm:2.0.1"],\ - ["to-object-path", "npm:0.3.0"],\ - ["union-value", "npm:1.0.1"],\ - ["unset-value", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["call-bind", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/call-bind-npm-1.0.2-c957124861-ca787179c1.zip/node_modules/call-bind/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["function-bind", "npm:1.1.1"],\ - ["get-intrinsic", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.7", {\ - "packageLocation": "./.yarn/cache/call-bind-npm-1.0.7-762763ef96-cd6fe658e0.zip/node_modules/call-bind/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.7"],\ - ["es-define-property", "npm:1.0.0"],\ - ["es-errors", "npm:1.3.0"],\ - ["function-bind", "npm:1.1.2"],\ - ["get-intrinsic", "npm:1.2.4"],\ - ["set-function-length", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["call-me-maybe", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/call-me-maybe-npm-1.0.1-d07e74bc9c-9a96547920.zip/node_modules/call-me-maybe/",\ - "packageDependencies": [\ - ["call-me-maybe", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["callsites", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/callsites-npm-3.1.0-268f989910-072d17b6ab.zip/node_modules/callsites/",\ - "packageDependencies": [\ - ["callsites", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["camel-case", [\ - ["npm:4.1.2", {\ - "packageLocation": "./.yarn/cache/camel-case-npm-4.1.2-082bf67a9a-bcbd25cd25.zip/node_modules/camel-case/",\ - "packageDependencies": [\ - ["camel-case", "npm:4.1.2"],\ - ["pascal-case", "npm:3.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["camelcase", [\ - ["npm:5.3.1", {\ - "packageLocation": "./.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip/node_modules/camelcase/",\ - "packageDependencies": [\ - ["camelcase", "npm:5.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.3.0", {\ - "packageLocation": "./.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip/node_modules/camelcase/",\ - "packageDependencies": [\ - ["camelcase", "npm:6.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["caniuse-lite", [\ - ["npm:1.0.30001378", {\ - "packageLocation": "./.yarn/cache/caniuse-lite-npm-1.0.30001378-1ca49603bf-4b33cd121c.zip/node_modules/caniuse-lite/",\ - "packageDependencies": [\ - ["caniuse-lite", "npm:1.0.30001378"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.30001606", {\ - "packageLocation": "./.yarn/cache/caniuse-lite-npm-1.0.30001606-e9949c7e13-55ee377f9b.zip/node_modules/caniuse-lite/",\ - "packageDependencies": [\ - ["caniuse-lite", "npm:1.0.30001606"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.30001680", {\ - "packageLocation": "./.yarn/cache/caniuse-lite-npm-1.0.30001680-df226595b2-38ec7e06e1.zip/node_modules/caniuse-lite/",\ - "packageDependencies": [\ - ["caniuse-lite", "npm:1.0.30001680"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["capital-case", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/capital-case-npm-1.0.4-90f8a4641d-41fa8fa87f.zip/node_modules/capital-case/",\ - "packageDependencies": [\ - ["capital-case", "npm:1.0.4"],\ - ["no-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"],\ - ["upper-case-first", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chalk", [\ - ["npm:2.4.2", {\ - "packageLocation": "./.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-3d1d103433.zip/node_modules/chalk/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:3.2.1"],\ - ["chalk", "npm:2.4.2"],\ - ["escape-string-regexp", "npm:1.0.5"],\ - ["supports-color", "npm:5.5.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/chalk-npm-3.0.0-e813208025-37f90b31fd.zip/node_modules/chalk/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["chalk", "npm:3.0.0"],\ - ["supports-color", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.1.2", {\ - "packageLocation": "./.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-cb3f3e5949.zip/node_modules/chalk/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["chalk", "npm:4.1.2"],\ - ["supports-color", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["change-case", [\ - ["npm:4.1.2", {\ - "packageLocation": "./.yarn/cache/change-case-npm-4.1.2-9c42f72b39-e4bc4a093a.zip/node_modules/change-case/",\ - "packageDependencies": [\ - ["camel-case", "npm:4.1.2"],\ - ["capital-case", "npm:1.0.4"],\ - ["change-case", "npm:4.1.2"],\ - ["constant-case", "npm:3.0.4"],\ - ["dot-case", "npm:3.0.4"],\ - ["header-case", "npm:2.0.4"],\ - ["no-case", "npm:3.0.4"],\ - ["param-case", "npm:3.0.4"],\ - ["pascal-case", "npm:3.1.2"],\ - ["path-case", "npm:3.0.4"],\ - ["sentence-case", "npm:3.0.4"],\ - ["snake-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["change-case-all", [\ - ["npm:1.0.14", {\ - "packageLocation": "./.yarn/cache/change-case-all-npm-1.0.14-31f333d4ee-6ff893e005.zip/node_modules/change-case-all/",\ - "packageDependencies": [\ - ["change-case", "npm:4.1.2"],\ - ["change-case-all", "npm:1.0.14"],\ - ["is-lower-case", "npm:2.0.2"],\ - ["is-upper-case", "npm:2.0.2"],\ - ["lower-case", "npm:2.0.2"],\ - ["lower-case-first", "npm:2.0.2"],\ - ["sponge-case", "npm:1.0.1"],\ - ["swap-case", "npm:2.0.2"],\ - ["title-case", "npm:3.0.3"],\ - ["upper-case", "npm:2.0.2"],\ - ["upper-case-first", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.15", {\ - "packageLocation": "./.yarn/cache/change-case-all-npm-1.0.15-0dc83e1901-e1dabdcd84.zip/node_modules/change-case-all/",\ - "packageDependencies": [\ - ["change-case", "npm:4.1.2"],\ - ["change-case-all", "npm:1.0.15"],\ - ["is-lower-case", "npm:2.0.2"],\ - ["is-upper-case", "npm:2.0.2"],\ - ["lower-case", "npm:2.0.2"],\ - ["lower-case-first", "npm:2.0.2"],\ - ["sponge-case", "npm:1.0.1"],\ - ["swap-case", "npm:2.0.2"],\ - ["title-case", "npm:3.0.3"],\ - ["upper-case", "npm:2.0.2"],\ - ["upper-case-first", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["char-regex", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/char-regex-npm-1.0.2-ecade5f97f-1ec5c2906a.zip/node_modules/char-regex/",\ - "packageDependencies": [\ - ["char-regex", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chardet", [\ - ["npm:0.7.0", {\ - "packageLocation": "./.yarn/cache/chardet-npm-0.7.0-27933dd6c7-b0ec668fba.zip/node_modules/chardet/",\ - "packageDependencies": [\ - ["chardet", "npm:0.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cheerio", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/cheerio-npm-1.0.0-837785b57b-b535070add.zip/node_modules/cheerio/",\ - "packageDependencies": [\ - ["cheerio", "npm:1.0.0"],\ - ["cheerio-select", "npm:2.1.0"],\ - ["dom-serializer", "npm:2.0.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["domutils", "npm:3.1.0"],\ - ["encoding-sniffer", "npm:0.2.0"],\ - ["htmlparser2", "npm:9.1.0"],\ - ["parse5", "npm:7.2.1"],\ - ["parse5-htmlparser2-tree-adapter", "npm:7.0.0"],\ - ["parse5-parser-stream", "npm:7.1.2"],\ - ["undici", "npm:6.21.1"],\ - ["whatwg-mimetype", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cheerio-select", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-b5d89208c2.zip/node_modules/cheerio-select/",\ - "packageDependencies": [\ - ["boolbase", "npm:1.0.0"],\ - ["cheerio-select", "npm:2.1.0"],\ - ["css-select", "npm:5.1.0"],\ - ["css-what", "npm:6.1.0"],\ - ["domelementtype", "npm:2.3.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["domutils", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chownr", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip/node_modules/chownr/",\ - "packageDependencies": [\ - ["chownr", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/chownr-npm-3.0.0-5275e85d25-b63cb1f73d.zip/node_modules/chownr/",\ - "packageDependencies": [\ - ["chownr", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chrome-launcher", [\ - ["npm:0.13.4", {\ - "packageLocation": "./.yarn/cache/chrome-launcher-npm-0.13.4-6d7675c841-6a2919f832.zip/node_modules/chrome-launcher/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["chrome-launcher", "npm:0.13.4"],\ - ["escape-string-regexp", "npm:1.0.5"],\ - ["is-wsl", "npm:2.2.0"],\ - ["lighthouse-logger", "npm:1.4.2"],\ - ["mkdirp", "npm:0.5.6"],\ - ["rimraf", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/chrome-launcher-npm-1.1.1-aef92c78b4-3141d3a72a.zip/node_modules/chrome-launcher/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["chrome-launcher", "npm:1.1.1"],\ - ["escape-string-regexp", "npm:4.0.0"],\ - ["is-wsl", "npm:2.2.0"],\ - ["lighthouse-logger", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chrome-trace-event", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/chrome-trace-event-npm-1.0.4-4f22eb2c55-1762bed739.zip/node_modules/chrome-trace-event/",\ - "packageDependencies": [\ - ["chrome-trace-event", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["chromium-bidi", [\ - ["npm:0.5.16", {\ - "packageLocation": "./.yarn/cache/chromium-bidi-npm-0.5.16-a39b0a5a11-2c0a177a74.zip/node_modules/chromium-bidi/",\ - "packageDependencies": [\ - ["chromium-bidi", "npm:0.5.16"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:0.5.8", {\ - "packageLocation": "./.yarn/cache/chromium-bidi-npm-0.5.8-73f0da8592-2eaa4d07eb.zip/node_modules/chromium-bidi/",\ - "packageDependencies": [\ - ["chromium-bidi", "npm:0.5.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/chromium-bidi-npm-2.1.2-954fe1d8c8-b8af33a7c2.zip/node_modules/chromium-bidi/",\ - "packageDependencies": [\ - ["chromium-bidi", "npm:2.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:1faf28eceb1256681381b94db093851b3d374d56d274dc8783b4538071744d2bf3c3ef09e766b4f85e58c14a889b6533443e923d9c6b421a0955ccc5966993c7#npm:0.5.16", {\ - "packageLocation": "./.yarn/__virtual__/chromium-bidi-virtual-41848a8f41/0/cache/chromium-bidi-npm-0.5.16-a39b0a5a11-2c0a177a74.zip/node_modules/chromium-bidi/",\ - "packageDependencies": [\ - ["@types/devtools-protocol", null],\ - ["chromium-bidi", "virtual:1faf28eceb1256681381b94db093851b3d374d56d274dc8783b4538071744d2bf3c3ef09e766b4f85e58c14a889b6533443e923d9c6b421a0955ccc5966993c7#npm:0.5.16"],\ - ["devtools-protocol", "npm:0.0.1262051"],\ - ["mitt", "npm:3.0.1"],\ - ["urlpattern-polyfill", "npm:10.0.0"],\ - ["zod", "npm:3.22.4"]\ - ],\ - "packagePeers": [\ - "@types/devtools-protocol",\ - "devtools-protocol"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:2.1.2", {\ - "packageLocation": "./.yarn/__virtual__/chromium-bidi-virtual-8904233368/0/cache/chromium-bidi-npm-2.1.2-954fe1d8c8-b8af33a7c2.zip/node_modules/chromium-bidi/",\ - "packageDependencies": [\ - ["@types/devtools-protocol", null],\ - ["chromium-bidi", "virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:2.1.2"],\ - ["devtools-protocol", "npm:0.0.1413902"],\ - ["mitt", "npm:3.0.1"],\ - ["zod", "npm:3.24.2"]\ - ],\ - "packagePeers": [\ - "@types/devtools-protocol",\ - "devtools-protocol"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:0.5.8", {\ - "packageLocation": "./.yarn/__virtual__/chromium-bidi-virtual-6a6f45eb6d/0/cache/chromium-bidi-npm-0.5.8-73f0da8592-2eaa4d07eb.zip/node_modules/chromium-bidi/",\ - "packageDependencies": [\ - ["@types/devtools-protocol", null],\ - ["chromium-bidi", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:0.5.8"],\ - ["devtools-protocol", "npm:0.0.1232444"],\ - ["mitt", "npm:3.0.1"],\ - ["urlpattern-polyfill", "npm:10.0.0"]\ - ],\ - "packagePeers": [\ - "@types/devtools-protocol",\ - "devtools-protocol"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ci-info", [\ - ["npm:3.3.2", {\ - "packageLocation": "./.yarn/cache/ci-info-npm-3.3.2-fb5617e149-a3bf9f4fbb.zip/node_modules/ci-info/",\ - "packageDependencies": [\ - ["ci-info", "npm:3.3.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cjs-module-lexer", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/cjs-module-lexer-npm-1.2.2-473ce063ea-f80f84bfdc.zip/node_modules/cjs-module-lexer/",\ - "packageDependencies": [\ - ["cjs-module-lexer", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["class-utils", [\ - ["npm:0.3.6", {\ - "packageLocation": "./.yarn/cache/class-utils-npm-0.3.6-2c691ad006-b236d9deb6.zip/node_modules/class-utils/",\ - "packageDependencies": [\ - ["arr-union", "npm:3.1.0"],\ - ["class-utils", "npm:0.3.6"],\ - ["define-property", "npm:0.2.5"],\ - ["isobject", "npm:3.0.1"],\ - ["static-extend", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["classnames", [\ - ["npm:2.3.1", {\ - "packageLocation": "./.yarn/cache/classnames-npm-2.3.1-f2ae0a8d3c-28fec94a81.zip/node_modules/classnames/",\ - "packageDependencies": [\ - ["classnames", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["clean-stack", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip/node_modules/clean-stack/",\ - "packageDependencies": [\ - ["clean-stack", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["clean-webpack-plugin", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-fce27be7cf.zip/node_modules/clean-webpack-plugin/",\ - "packageDependencies": [\ - ["clean-webpack-plugin", "npm:4.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:4.0.0", {\ - "packageLocation": "./.yarn/__virtual__/clean-webpack-plugin-virtual-10e59975bb/0/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-fce27be7cf.zip/node_modules/clean-webpack-plugin/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["clean-webpack-plugin", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:4.0.0"],\ - ["del", "npm:4.1.1"],\ - ["webpack", null]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cli-cursor", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/cli-cursor-npm-2.1.0-3920629c9c-d88e97bfda.zip/node_modules/cli-cursor/",\ - "packageDependencies": [\ - ["cli-cursor", "npm:2.1.0"],\ - ["restore-cursor", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/cli-cursor-npm-3.1.0-fee1e46b5e-2692784c6c.zip/node_modules/cli-cursor/",\ - "packageDependencies": [\ - ["cli-cursor", "npm:3.1.0"],\ - ["restore-cursor", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cli-spinners", [\ - ["npm:2.7.0", {\ - "packageLocation": "./.yarn/cache/cli-spinners-npm-2.7.0-ace95632f5-c382ee8b0d.zip/node_modules/cli-spinners/",\ - "packageDependencies": [\ - ["cli-spinners", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cli-truncate", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/cli-truncate-npm-2.1.0-72184d3467-976f1887de.zip/node_modules/cli-truncate/",\ - "packageDependencies": [\ - ["cli-truncate", "npm:2.1.0"],\ - ["slice-ansi", "npm:3.0.0"],\ - ["string-width", "npm:4.2.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/cli-truncate-npm-3.1.0-654d2989ef-c3243e4197.zip/node_modules/cli-truncate/",\ - "packageDependencies": [\ - ["cli-truncate", "npm:3.1.0"],\ - ["slice-ansi", "npm:5.0.0"],\ - ["string-width", "npm:5.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cli-width", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/cli-width-npm-2.2.1-4bdb77393c-e173dbe2bb.zip/node_modules/cli-width/",\ - "packageDependencies": [\ - ["cli-width", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/cli-width-npm-3.0.0-387b3f68f9-8730848b04.zip/node_modules/cli-width/",\ - "packageDependencies": [\ - ["cli-width", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["client-only", [\ - ["npm:0.0.1", {\ - "packageLocation": "./.yarn/cache/client-only-npm-0.0.1-07d3e9505c-0c16bf660d.zip/node_modules/client-only/",\ - "packageDependencies": [\ - ["client-only", "npm:0.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cliui", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/cliui-npm-6.0.0-488b2414c6-44afbcc29d.zip/node_modules/cliui/",\ - "packageDependencies": [\ - ["cliui", "npm:6.0.0"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wrap-ansi", "npm:6.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.4", {\ - "packageLocation": "./.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-db858c49af.zip/node_modules/cliui/",\ - "packageDependencies": [\ - ["cliui", "npm:7.0.4"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wrap-ansi", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/cliui-npm-8.0.1-3b029092cf-eaa5561aeb.zip/node_modules/cliui/",\ - "packageDependencies": [\ - ["cliui", "npm:8.0.1"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wrap-ansi", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["clone", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/clone-npm-1.0.4-a610fcbcf9-d06418b733.zip/node_modules/clone/",\ - "packageDependencies": [\ - ["clone", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/clone-npm-2.1.2-1d491c6629-d9c79efba6.zip/node_modules/clone/",\ - "packageDependencies": [\ - ["clone", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["clone-stats", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/clone-stats-npm-1.0.0-cca25a0a42-654c0425af.zip/node_modules/clone-stats/",\ - "packageDependencies": [\ - ["clone-stats", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["clsx", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/clsx-npm-1.2.1-77792dc182-5ded6f61f1.zip/node_modules/clsx/",\ - "packageDependencies": [\ - ["clsx", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/clsx-npm-2.1.1-96125b98be-cdfb57fa6c.zip/node_modules/clsx/",\ - "packageDependencies": [\ - ["clsx", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["co", [\ - ["npm:4.6.0", {\ - "packageLocation": "./.yarn/cache/co-npm-4.6.0-03f2d1feb6-a5d9f37091.zip/node_modules/co/",\ - "packageDependencies": [\ - ["co", "npm:4.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["collect-v8-coverage", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/collect-v8-coverage-npm-1.0.1-39dec86bad-85b26945ab.zip/node_modules/collect-v8-coverage/",\ - "packageDependencies": [\ - ["collect-v8-coverage", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["collection-visit", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/collection-visit-npm-1.0.0-aba2d5defc-15d9658fe6.zip/node_modules/collection-visit/",\ - "packageDependencies": [\ - ["collection-visit", "npm:1.0.0"],\ - ["map-visit", "npm:1.0.0"],\ - ["object-visit", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color", [\ - ["npm:4.2.3", {\ - "packageLocation": "./.yarn/cache/color-npm-4.2.3-4a23227581-b23f5e500a.zip/node_modules/color/",\ - "packageDependencies": [\ - ["color", "npm:4.2.3"],\ - ["color-convert", "npm:2.0.1"],\ - ["color-string", "npm:1.9.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color-convert", [\ - ["npm:1.9.3", {\ - "packageLocation": "./.yarn/cache/color-convert-npm-1.9.3-1fe690075e-ffa3190250.zip/node_modules/color-convert/",\ - "packageDependencies": [\ - ["color-convert", "npm:1.9.3"],\ - ["color-name", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/color-convert-npm-2.0.1-79730e935b-fa00c91b43.zip/node_modules/color-convert/",\ - "packageDependencies": [\ - ["color-convert", "npm:2.0.1"],\ - ["color-name", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color-name", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip/node_modules/color-name/",\ - "packageDependencies": [\ - ["color-name", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip/node_modules/color-name/",\ - "packageDependencies": [\ - ["color-name", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color-string", [\ - ["npm:1.9.1", {\ - "packageLocation": "./.yarn/cache/color-string-npm-1.9.1-dc020e56be-72aa0b81ee.zip/node_modules/color-string/",\ - "packageDependencies": [\ - ["color-name", "npm:1.1.4"],\ - ["color-string", "npm:1.9.1"],\ - ["simple-swizzle", "npm:0.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["color-support", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/color-support-npm-1.1.3-3be5c53455-4bcfe30eea.zip/node_modules/color-support/",\ - "packageDependencies": [\ - ["color-support", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["colorette", [\ - ["npm:2.0.19", {\ - "packageLocation": "./.yarn/cache/colorette-npm-2.0.19-f73dfe6a4e-6e2606435c.zip/node_modules/colorette/",\ - "packageDependencies": [\ - ["colorette", "npm:2.0.19"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["colors", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/colors-npm-1.4.0-7e2cf12234-90b2d54651.zip/node_modules/colors/",\ - "packageDependencies": [\ - ["colors", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["combined-stream", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/combined-stream-npm-1.0.8-dc14d4a63a-2e969e637d.zip/node_modules/combined-stream/",\ - "packageDependencies": [\ - ["combined-stream", "npm:1.0.8"],\ - ["delayed-stream", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["command-exists-promise", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/command-exists-promise-npm-2.0.2-c71d3840c5-cf2506f399.zip/node_modules/command-exists-promise/",\ - "packageDependencies": [\ - ["command-exists-promise", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["commander", [\ - ["npm:12.1.0", {\ - "packageLocation": "./.yarn/cache/commander-npm-12.1.0-65c868e907-cdaeb672d9.zip/node_modules/commander/",\ - "packageDependencies": [\ - ["commander", "npm:12.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.20.3", {\ - "packageLocation": "./.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-90c5b68986.zip/node_modules/commander/",\ - "packageDependencies": [\ - ["commander", "npm:2.20.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/commander-npm-7.2.0-19178180f8-9973af1072.zip/node_modules/commander/",\ - "packageDependencies": [\ - ["commander", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.4.0", {\ - "packageLocation": "./.yarn/cache/commander-npm-9.4.0-3cc611cdba-9b9af6b5c9.zip/node_modules/commander/",\ - "packageDependencies": [\ - ["commander", "npm:9.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["common-tags", [\ - ["npm:1.8.2", {\ - "packageLocation": "./.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-c665d0f463.zip/node_modules/common-tags/",\ - "packageDependencies": [\ - ["common-tags", "npm:1.8.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["commondir", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/commondir-npm-1.0.1-291b790340-4620bc4936.zip/node_modules/commondir/",\ - "packageDependencies": [\ - ["commondir", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["component-emitter", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/component-emitter-npm-1.3.0-4b848565b9-dfc1ec2e7a.zip/node_modules/component-emitter/",\ - "packageDependencies": [\ - ["component-emitter", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["compressible", [\ - ["npm:2.0.18", {\ - "packageLocation": "./.yarn/cache/compressible-npm-2.0.18-ee5ab04d88-58321a85b3.zip/node_modules/compressible/",\ - "packageDependencies": [\ - ["compressible", "npm:2.0.18"],\ - ["mime-db", "npm:1.52.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["compression", [\ - ["npm:1.7.4", {\ - "packageLocation": "./.yarn/cache/compression-npm-1.7.4-e0cd6afa69-469cd09790.zip/node_modules/compression/",\ - "packageDependencies": [\ - ["accepts", "npm:1.3.8"],\ - ["bytes", "npm:3.0.0"],\ - ["compressible", "npm:2.0.18"],\ - ["compression", "npm:1.7.4"],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["on-headers", "npm:1.0.2"],\ - ["safe-buffer", "npm:5.1.2"],\ - ["vary", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["concat-map", [\ - ["npm:0.0.1", {\ - "packageLocation": "./.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-9680699c8e.zip/node_modules/concat-map/",\ - "packageDependencies": [\ - ["concat-map", "npm:0.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["concurrently", [\ - ["npm:8.2.2", {\ - "packageLocation": "./.yarn/cache/concurrently-npm-8.2.2-8ae42f052b-dcb1aa69d9.zip/node_modules/concurrently/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["concurrently", "npm:8.2.2"],\ - ["date-fns", "npm:2.30.0"],\ - ["lodash", "npm:4.17.21"],\ - ["rxjs", "npm:7.8.1"],\ - ["shell-quote", "npm:1.8.1"],\ - ["spawn-command", "npm:0.0.2"],\ - ["supports-color", "npm:8.1.1"],\ - ["tree-kill", "npm:1.2.2"],\ - ["yargs", "npm:17.7.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["configstore", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/configstore-npm-5.0.1-739433cdc5-60ef65d493.zip/node_modules/configstore/",\ - "packageDependencies": [\ - ["configstore", "npm:5.0.1"],\ - ["dot-prop", "npm:5.3.0"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["make-dir", "npm:3.1.0"],\ - ["unique-string", "npm:2.0.0"],\ - ["write-file-atomic", "npm:3.0.3"],\ - ["xdg-basedir", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["console-control-strings", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/console-control-strings-npm-1.1.0-e3160e5275-27b5fa302b.zip/node_modules/console-control-strings/",\ - "packageDependencies": [\ - ["console-control-strings", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["console-polyfill", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/console-polyfill-npm-0.3.0-4f0f687aa1-1d4fa61c4e.zip/node_modules/console-polyfill/",\ - "packageDependencies": [\ - ["console-polyfill", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["constant-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/constant-case-npm-3.0.4-118b472e28-6c3346d51a.zip/node_modules/constant-case/",\ - "packageDependencies": [\ - ["constant-case", "npm:3.0.4"],\ - ["no-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"],\ - ["upper-case", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["content-disposition", [\ - ["npm:0.5.4", {\ - "packageLocation": "./.yarn/cache/content-disposition-npm-0.5.4-2d93678616-b7f4ce176e.zip/node_modules/content-disposition/",\ - "packageDependencies": [\ - ["content-disposition", "npm:0.5.4"],\ - ["safe-buffer", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["content-type", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/content-type-npm-1.0.4-3b1a5ca16b-5ea85c5293.zip/node_modules/content-type/",\ - "packageDependencies": [\ - ["content-type", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/content-type-npm-1.0.5-3e037bf9ab-585847d98d.zip/node_modules/content-type/",\ - "packageDependencies": [\ - ["content-type", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["convert-source-map", [\ - ["npm:1.8.0", {\ - "packageLocation": "./.yarn/cache/convert-source-map-npm-1.8.0-037f671dde-985d974a2d.zip/node_modules/convert-source-map/",\ - "packageDependencies": [\ - ["convert-source-map", "npm:1.8.0"],\ - ["safe-buffer", "npm:5.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/convert-source-map-npm-2.0.0-7ab664dc4e-c987be3ec0.zip/node_modules/convert-source-map/",\ - "packageDependencies": [\ - ["convert-source-map", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cookie", [\ - ["npm:0.4.2", {\ - "packageLocation": "./.yarn/cache/cookie-npm-0.4.2-7761894d5f-2e1de9fded.zip/node_modules/cookie/",\ - "packageDependencies": [\ - ["cookie", "npm:0.4.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.7.1", {\ - "packageLocation": "./.yarn/cache/cookie-npm-0.7.1-f01524ff99-aec6a6aa07.zip/node_modules/cookie/",\ - "packageDependencies": [\ - ["cookie", "npm:0.7.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.7.2", {\ - "packageLocation": "./.yarn/cache/cookie-npm-0.7.2-6ea9ee4231-24b286c556.zip/node_modules/cookie/",\ - "packageDependencies": [\ - ["cookie", "npm:0.7.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cookie-signature", [\ - ["npm:1.0.6", {\ - "packageLocation": "./.yarn/cache/cookie-signature-npm-1.0.6-93f325f7f0-f4e1b0a98a.zip/node_modules/cookie-signature/",\ - "packageDependencies": [\ - ["cookie-signature", "npm:1.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["copy-descriptor", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/copy-descriptor-npm-0.1.1-864db4ab66-edf4651bce.zip/node_modules/copy-descriptor/",\ - "packageDependencies": [\ - ["copy-descriptor", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["core-js-compat", [\ - ["npm:3.24.1", {\ - "packageLocation": "./.yarn/cache/core-js-compat-npm-3.24.1-f46c96edc5-d3a61d358b.zip/node_modules/core-js-compat/",\ - "packageDependencies": [\ - ["browserslist", "npm:4.21.3"],\ - ["core-js-compat", "npm:3.24.1"],\ - ["semver", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["core-js-pure", [\ - ["npm:3.24.1", {\ - "packageLocation": "./.yarn/unplugged/core-js-pure-npm-3.24.1-d44f029f92/node_modules/core-js-pure/",\ - "packageDependencies": [\ - ["core-js-pure", "npm:3.24.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["core-util-is", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/core-util-is-npm-1.0.3-ca74b76c90-9de8597363.zip/node_modules/core-util-is/",\ - "packageDependencies": [\ - ["core-util-is", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cors", [\ - ["npm:2.8.5", {\ - "packageLocation": "./.yarn/cache/cors-npm-2.8.5-c9935a2d12-66e88e08ed.zip/node_modules/cors/",\ - "packageDependencies": [\ - ["cors", "npm:2.8.5"],\ - ["object-assign", "npm:4.1.1"],\ - ["vary", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cosmiconfig", [\ - ["npm:7.0.1", {\ - "packageLocation": "./.yarn/cache/cosmiconfig-npm-7.0.1-dd19ae2403-861bf4c2c9.zip/node_modules/cosmiconfig/",\ - "packageDependencies": [\ - ["@types/parse-json", "npm:4.0.0"],\ - ["cosmiconfig", "npm:7.0.1"],\ - ["import-fresh", "npm:3.3.0"],\ - ["parse-json", "npm:5.2.0"],\ - ["path-type", "npm:4.0.0"],\ - ["yaml", "npm:1.10.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.3.6", {\ - "packageLocation": "./.yarn/cache/cosmiconfig-npm-8.3.6-a5566e2779-91d082baca.zip/node_modules/cosmiconfig/",\ - "packageDependencies": [\ - ["cosmiconfig", "npm:8.3.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:9.0.0", {\ - "packageLocation": "./.yarn/cache/cosmiconfig-npm-9.0.0-47d78cf275-8bdf1dfbb6.zip/node_modules/cosmiconfig/",\ - "packageDependencies": [\ - ["cosmiconfig", "npm:9.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:48bfa8de418cfe023ea61ca0d250edd7c9e1a45398103d81691b268b3cbb170e6b9a14e38f7bbb893a5b76aa30281c807ef428ea1ed40b8ddba8e49f3563c9ba#npm:9.0.0", {\ - "packageLocation": "./.yarn/__virtual__/cosmiconfig-virtual-8e59ed5dba/0/cache/cosmiconfig-npm-9.0.0-47d78cf275-8bdf1dfbb6.zip/node_modules/cosmiconfig/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["cosmiconfig", "virtual:48bfa8de418cfe023ea61ca0d250edd7c9e1a45398103d81691b268b3cbb170e6b9a14e38f7bbb893a5b76aa30281c807ef428ea1ed40b8ddba8e49f3563c9ba#npm:9.0.0"],\ - ["env-paths", "npm:2.2.1"],\ - ["import-fresh", "npm:3.3.0"],\ - ["js-yaml", "npm:4.1.0"],\ - ["parse-json", "npm:5.2.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.3.6", {\ - "packageLocation": "./.yarn/__virtual__/cosmiconfig-virtual-9439dce8c6/0/cache/cosmiconfig-npm-8.3.6-a5566e2779-91d082baca.zip/node_modules/cosmiconfig/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["cosmiconfig", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.3.6"],\ - ["import-fresh", "npm:3.3.0"],\ - ["js-yaml", "npm:4.1.0"],\ - ["parse-json", "npm:5.2.0"],\ - ["path-type", "npm:4.0.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cross-fetch", [\ - ["npm:3.1.5", {\ - "packageLocation": "./.yarn/cache/cross-fetch-npm-3.1.5-e414995db9-5d101a3b1e.zip/node_modules/cross-fetch/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:3.1.5"],\ - ["node-fetch", "virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.8", {\ - "packageLocation": "./.yarn/cache/cross-fetch-npm-3.1.8-71c3c05709-ac8c4ca87d.zip/node_modules/cross-fetch/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:3.1.8"],\ - ["node-fetch", "virtual:9c67668db478e95ba4d6a763bc55027eeff0d22eaf59478017ea07386fc33a3c7b7b625af78aa86a33991a9a500a7aa216e28632de568f02adefd662ef53a42d#npm:2.6.12"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/cross-fetch-npm-4.0.0-9c67668db4-e231a71926.zip/node_modules/cross-fetch/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:4.0.0"],\ - ["node-fetch", "virtual:9c67668db478e95ba4d6a763bc55027eeff0d22eaf59478017ea07386fc33a3c7b7b625af78aa86a33991a9a500a7aa216e28632de568f02adefd662ef53a42d#npm:2.6.12"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cross-inspect", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/cross-inspect-npm-1.0.0-75dbd2a0f5-975c817995.zip/node_modules/cross-inspect/",\ - "packageDependencies": [\ - ["cross-inspect", "npm:1.0.0"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cross-spawn", [\ - ["npm:7.0.6", {\ - "packageLocation": "./.yarn/cache/cross-spawn-npm-7.0.6-264bddf921-0d52657d7a.zip/node_modules/cross-spawn/",\ - "packageDependencies": [\ - ["cross-spawn", "npm:7.0.6"],\ - ["path-key", "npm:3.1.1"],\ - ["shebang-command", "npm:2.0.0"],\ - ["which", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["crypto-random-string", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/crypto-random-string-npm-2.0.0-8ab47992ef-0283879f55.zip/node_modules/crypto-random-string/",\ - "packageDependencies": [\ - ["crypto-random-string", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["csp_evaluator", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/csp_evaluator-npm-1.1.1-dd77cbd02e-b4c2439896.zip/node_modules/csp_evaluator/",\ - "packageDependencies": [\ - ["csp_evaluator", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["css-mediaquery", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/css-mediaquery-npm-0.1.2-39b61fbcad-f2f7512daa.zip/node_modules/css-mediaquery/",\ - "packageDependencies": [\ - ["css-mediaquery", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["css-select", [\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/css-select-npm-5.1.0-9365a79de5-d486b1e7eb.zip/node_modules/css-select/",\ - "packageDependencies": [\ - ["boolbase", "npm:1.0.0"],\ - ["css-select", "npm:5.1.0"],\ - ["css-what", "npm:6.1.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["domutils", "npm:3.0.1"],\ - ["nth-check", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["css-unit-converter", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/css-unit-converter-npm-1.1.2-277ce2166c-1058d7ce91.zip/node_modules/css-unit-converter/",\ - "packageDependencies": [\ - ["css-unit-converter", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["css-vendor", [\ - ["npm:2.0.8", {\ - "packageLocation": "./.yarn/cache/css-vendor-npm-2.0.8-3fef9dd826-3868a17c84.zip/node_modules/css-vendor/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["css-vendor", "npm:2.0.8"],\ - ["is-in-browser", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["css-what", [\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/css-what-npm-6.1.0-57f751efbb-c67a3a2d0d.zip/node_modules/css-what/",\ - "packageDependencies": [\ - ["css-what", "npm:6.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["css.escape", [\ - ["npm:1.5.1", {\ - "packageLocation": "./.yarn/cache/css.escape-npm-1.5.1-b24d2ba77a-f6d38088d8.zip/node_modules/css.escape/",\ - "packageDependencies": [\ - ["css.escape", "npm:1.5.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cssom", [\ - ["npm:0.3.8", {\ - "packageLocation": "./.yarn/cache/cssom-npm-0.3.8-a9291d36ff-49eacc8807.zip/node_modules/cssom/",\ - "packageDependencies": [\ - ["cssom", "npm:0.3.8"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.5.0", {\ - "packageLocation": "./.yarn/cache/cssom-npm-0.5.0-44ab2704f2-b502a315b1.zip/node_modules/cssom/",\ - "packageDependencies": [\ - ["cssom", "npm:0.5.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["cssstyle", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/cssstyle-npm-2.3.0-b5d112c450-46f7f05a15.zip/node_modules/cssstyle/",\ - "packageDependencies": [\ - ["cssom", "npm:0.3.8"],\ - ["cssstyle", "npm:2.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["csstype", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/csstype-npm-3.1.0-0e405212e2-68e26f21d7.zip/node_modules/csstype/",\ - "packageDependencies": [\ - ["csstype", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.3", {\ - "packageLocation": "./.yarn/cache/csstype-npm-3.1.3-e9a1c85013-f593cce41f.zip/node_modules/csstype/",\ - "packageDependencies": [\ - ["csstype", "npm:3.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-array", [\ - ["npm:3.2.2", {\ - "packageLocation": "./.yarn/cache/d3-array-npm-3.2.2-f6016b3101-e940c7b77e.zip/node_modules/d3-array/",\ - "packageDependencies": [\ - ["d3-array", "npm:3.2.2"],\ - ["internmap", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-color", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/d3-color-npm-3.1.0-fc73fe3b15-536ba05bfd.zip/node_modules/d3-color/",\ - "packageDependencies": [\ - ["d3-color", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-ease", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/d3-ease-npm-3.0.1-f8f3709dc7-985d46e868.zip/node_modules/d3-ease/",\ - "packageDependencies": [\ - ["d3-ease", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-format", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/d3-format-npm-3.1.0-dfc19924ca-a0fe23d257.zip/node_modules/d3-format/",\ - "packageDependencies": [\ - ["d3-format", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-interpolate", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/d3-interpolate-npm-3.0.1-77ddca7977-988d66497e.zip/node_modules/d3-interpolate/",\ - "packageDependencies": [\ - ["d3-color", "npm:3.1.0"],\ - ["d3-interpolate", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-path", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/d3-path-npm-3.1.0-8d69e9e4e5-8e97a9ab49.zip/node_modules/d3-path/",\ - "packageDependencies": [\ - ["d3-path", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-scale", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/d3-scale-npm-4.0.2-d17a53447b-e2dc424358.zip/node_modules/d3-scale/",\ - "packageDependencies": [\ - ["d3-array", "npm:3.2.2"],\ - ["d3-format", "npm:3.1.0"],\ - ["d3-interpolate", "npm:3.0.1"],\ - ["d3-scale", "npm:4.0.2"],\ - ["d3-time", "npm:3.1.0"],\ - ["d3-time-format", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-shape", [\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/d3-shape-npm-3.2.0-0beb7d8b02-2e861f4d47.zip/node_modules/d3-shape/",\ - "packageDependencies": [\ - ["d3-path", "npm:3.1.0"],\ - ["d3-shape", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-time", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/d3-time-npm-3.1.0-fb068fd1c9-c110bed295.zip/node_modules/d3-time/",\ - "packageDependencies": [\ - ["d3-array", "npm:3.2.2"],\ - ["d3-time", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-time-format", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/d3-time-format-npm-4.1.0-7f352c4634-ffc0959258.zip/node_modules/d3-time-format/",\ - "packageDependencies": [\ - ["d3-time", "npm:3.1.0"],\ - ["d3-time-format", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["d3-timer", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/d3-timer-npm-3.0.1-45083f465d-004128602b.zip/node_modules/d3-timer/",\ - "packageDependencies": [\ - ["d3-timer", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["damerau-levenshtein", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/damerau-levenshtein-npm-1.0.8-bda7311c69-f4eba1c901.zip/node_modules/damerau-levenshtein/",\ - "packageDependencies": [\ - ["damerau-levenshtein", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["data-uri-to-buffer", [\ - ["npm:6.0.2", {\ - "packageLocation": "./.yarn/cache/data-uri-to-buffer-npm-6.0.2-1725fff558-8b6927c33f.zip/node_modules/data-uri-to-buffer/",\ - "packageDependencies": [\ - ["data-uri-to-buffer", "npm:6.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["data-urls", [\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/data-urls-npm-3.0.2-c8b2050319-033fc3dd0f.zip/node_modules/data-urls/",\ - "packageDependencies": [\ - ["abab", "npm:2.0.6"],\ - ["data-urls", "npm:3.0.2"],\ - ["whatwg-mimetype", "npm:3.0.0"],\ - ["whatwg-url", "npm:11.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dataloader", [\ - ["npm:2.2.2", {\ - "packageLocation": "./.yarn/cache/dataloader-npm-2.2.2-828252e61d-9c7a1f02cf.zip/node_modules/dataloader/",\ - "packageDependencies": [\ - ["dataloader", "npm:2.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["date-fns", [\ - ["npm:2.30.0", {\ - "packageLocation": "./.yarn/cache/date-fns-npm-2.30.0-895c790e0f-70b3e8ea7a.zip/node_modules/date-fns/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["date-fns", "npm:2.30.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["debounce", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/debounce-npm-1.2.1-b09266a260-0b95b2a9d8.zip/node_modules/debounce/",\ - "packageDependencies": [\ - ["debounce", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["debug", [\ - ["npm:2.6.9", {\ - "packageLocation": "./.yarn/cache/debug-npm-2.6.9-7d4cb597dc-e07005f2b4.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "npm:2.6.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:3.2.7", {\ - "packageLocation": "./.yarn/cache/debug-npm-3.2.7-754e818c7a-d86fd7be2b.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "npm:3.2.7"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:4.3.4", {\ - "packageLocation": "./.yarn/cache/debug-npm-4.3.4-4513954577-0073c3bcbd.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "npm:4.3.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:4.4.0", {\ - "packageLocation": "./.yarn/cache/debug-npm-4.4.0-f6efe76023-1847944c2e.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["debug", "npm:4.4.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4", {\ - "packageLocation": "./.yarn/__virtual__/debug-virtual-218613e218/0/cache/debug-npm-4.3.4-4513954577-0073c3bcbd.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["@types/supports-color", null],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["ms", "npm:2.1.2"],\ - ["supports-color", null]\ - ],\ - "packagePeers": [\ - "@types/supports-color",\ - "supports-color"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9", {\ - "packageLocation": "./.yarn/__virtual__/debug-virtual-bdff24872b/0/cache/debug-npm-2.6.9-7d4cb597dc-e07005f2b4.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["@types/supports-color", null],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["ms", "npm:2.0.0"],\ - ["supports-color", null]\ - ],\ - "packagePeers": [\ - "@types/supports-color",\ - "supports-color"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:86b8ae036e89845a28aefecc65bd65d2738a830eb6a00c5352fb262a2aba7a81b4e6225fff99608007b3c030e444c526c81ca016a41e26c06d475e0335df3777#npm:4.4.0", {\ - "packageLocation": "./.yarn/__virtual__/debug-virtual-ccba3bec3c/0/cache/debug-npm-4.4.0-f6efe76023-1847944c2e.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["@types/supports-color", null],\ - ["debug", "virtual:86b8ae036e89845a28aefecc65bd65d2738a830eb6a00c5352fb262a2aba7a81b4e6225fff99608007b3c030e444c526c81ca016a41e26c06d475e0335df3777#npm:4.4.0"],\ - ["ms", "npm:2.1.3"],\ - ["supports-color", null]\ - ],\ - "packagePeers": [\ - "@types/supports-color",\ - "supports-color"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:d9426786c635bc4b52511d6cc4b56156f50d780a698c0e20fc6caf10d3be51cbf176e79cff882f4d42a23ff4d0f89fe94222849578214e7fbae0f2754c82af02#npm:3.2.7", {\ - "packageLocation": "./.yarn/__virtual__/debug-virtual-b810fb6338/0/cache/debug-npm-3.2.7-754e818c7a-d86fd7be2b.zip/node_modules/debug/",\ - "packageDependencies": [\ - ["@types/supports-color", null],\ - ["debug", "virtual:d9426786c635bc4b52511d6cc4b56156f50d780a698c0e20fc6caf10d3be51cbf176e79cff882f4d42a23ff4d0f89fe94222849578214e7fbae0f2754c82af02#npm:3.2.7"],\ - ["ms", "npm:2.1.3"],\ - ["supports-color", null]\ - ],\ - "packagePeers": [\ - "@types/supports-color",\ - "supports-color"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["decache", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/decache-npm-3.1.0-597be7db06-8e5508a023.zip/node_modules/decache/",\ - "packageDependencies": [\ - ["decache", "npm:3.1.0"],\ - ["find", "npm:0.2.9"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["decamelize", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip/node_modules/decamelize/",\ - "packageDependencies": [\ - ["decamelize", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["decimal.js", [\ - ["npm:10.4.0", {\ - "packageLocation": "./.yarn/cache/decimal.js-npm-10.4.0-9a246fb0fa-3ddd9c888b.zip/node_modules/decimal.js/",\ - "packageDependencies": [\ - ["decimal.js", "npm:10.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["decimal.js-light", [\ - ["npm:2.5.1", {\ - "packageLocation": "./.yarn/cache/decimal.js-light-npm-2.5.1-2a858493a8-6360911e31.zip/node_modules/decimal.js-light/",\ - "packageDependencies": [\ - ["decimal.js-light", "npm:2.5.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["decode-uri-component", [\ - ["npm:0.2.2", {\ - "packageLocation": "./.yarn/cache/decode-uri-component-npm-0.2.2-e22e2aa917-17a0e5fa40.zip/node_modules/decode-uri-component/",\ - "packageDependencies": [\ - ["decode-uri-component", "npm:0.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dedent", [\ - ["npm:0.7.0", {\ - "packageLocation": "./.yarn/cache/dedent-npm-0.7.0-2dbb45a4c5-87de191050.zip/node_modules/dedent/",\ - "packageDependencies": [\ - ["dedent", "npm:0.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["deep-is", [\ - ["npm:0.1.4", {\ - "packageLocation": "./.yarn/cache/deep-is-npm-0.1.4-88938b5a67-ec12d074ae.zip/node_modules/deep-is/",\ - "packageDependencies": [\ - ["deep-is", "npm:0.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["deepmerge", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/deepmerge-npm-2.2.1-44c00cbffa-a3da411cd3.zip/node_modules/deepmerge/",\ - "packageDependencies": [\ - ["deepmerge", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.2.2", {\ - "packageLocation": "./.yarn/cache/deepmerge-npm-4.2.2-112165ced2-0e58ed14f5.zip/node_modules/deepmerge/",\ - "packageDependencies": [\ - ["deepmerge", "npm:4.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["defaults", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/defaults-npm-1.0.3-e829107b9e-96e2112da6.zip/node_modules/defaults/",\ - "packageDependencies": [\ - ["clone", "npm:1.0.4"],\ - ["defaults", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["define-data-property", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/define-data-property-npm-1.1.4-4cbd8efc51-abdcb2505d.zip/node_modules/define-data-property/",\ - "packageDependencies": [\ - ["define-data-property", "npm:1.1.4"],\ - ["es-define-property", "npm:1.0.0"],\ - ["es-errors", "npm:1.3.0"],\ - ["gopd", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["define-lazy-prop", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/define-lazy-prop-npm-2.0.0-bba0cd91a7-0115fdb065.zip/node_modules/define-lazy-prop/",\ - "packageDependencies": [\ - ["define-lazy-prop", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["define-properties", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/define-properties-npm-1.1.4-85ee575655-ce0aef3f9e.zip/node_modules/define-properties/",\ - "packageDependencies": [\ - ["define-properties", "npm:1.1.4"],\ - ["has-property-descriptors", "npm:1.0.0"],\ - ["object-keys", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["define-property", [\ - ["npm:0.2.5", {\ - "packageLocation": "./.yarn/cache/define-property-npm-0.2.5-44a0da3575-85af107072.zip/node_modules/define-property/",\ - "packageDependencies": [\ - ["define-property", "npm:0.2.5"],\ - ["is-descriptor", "npm:0.1.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/define-property-npm-1.0.0-e2fb9f44c6-5fbed11dac.zip/node_modules/define-property/",\ - "packageDependencies": [\ - ["define-property", "npm:1.0.0"],\ - ["is-descriptor", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/define-property-npm-2.0.2-4a2067c3ba-3217ed53fc.zip/node_modules/define-property/",\ - "packageDependencies": [\ - ["define-property", "npm:2.0.2"],\ - ["is-descriptor", "npm:1.0.2"],\ - ["isobject", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["degenerator", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/degenerator-npm-5.0.1-97c678cdaf-a64fa39cdf.zip/node_modules/degenerator/",\ - "packageDependencies": [\ - ["ast-types", "npm:0.13.4"],\ - ["degenerator", "npm:5.0.1"],\ - ["escodegen", "npm:2.1.0"],\ - ["esprima", "npm:4.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["del", [\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/del-npm-4.1.1-8bc04567c6-521f7da44b.zip/node_modules/del/",\ - "packageDependencies": [\ - ["@types/glob", "npm:7.2.0"],\ - ["del", "npm:4.1.1"],\ - ["globby", "npm:6.1.0"],\ - ["is-path-cwd", "npm:2.2.0"],\ - ["is-path-in-cwd", "npm:2.1.0"],\ - ["p-map", "npm:2.1.0"],\ - ["pify", "npm:4.0.1"],\ - ["rimraf", "npm:2.7.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["delayed-stream", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-46fe6e83e2.zip/node_modules/delayed-stream/",\ - "packageDependencies": [\ - ["delayed-stream", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["delegates", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/delegates-npm-1.0.0-9b1942d75f-a51744d9b5.zip/node_modules/delegates/",\ - "packageDependencies": [\ - ["delegates", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["depd", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/depd-npm-1.1.2-b0c8414da7-2ed6966fc1.zip/node_modules/depd/",\ - "packageDependencies": [\ - ["depd", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/depd-npm-2.0.0-b6c51a4b43-c0c8ff3607.zip/node_modules/depd/",\ - "packageDependencies": [\ - ["depd", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dependency-graph", [\ - ["npm:0.11.0", {\ - "packageLocation": "./.yarn/cache/dependency-graph-npm-0.11.0-658e382681-6b5eb54030.zip/node_modules/dependency-graph/",\ - "packageDependencies": [\ - ["dependency-graph", "npm:0.11.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["destroy", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/destroy-npm-1.2.0-6a511802e2-0acb300b74.zip/node_modules/destroy/",\ - "packageDependencies": [\ - ["destroy", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["detect-indent", [\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/detect-indent-npm-6.1.0-d8c441ff7a-ab953a73c7.zip/node_modules/detect-indent/",\ - "packageDependencies": [\ - ["detect-indent", "npm:6.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["detect-libc", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/detect-libc-npm-1.0.3-c30ac344d4-3849fe7720.zip/node_modules/detect-libc/",\ - "packageDependencies": [\ - ["detect-libc", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/detect-libc-npm-2.0.3-2ddae34945-b4ea018d62.zip/node_modules/detect-libc/",\ - "packageDependencies": [\ - ["detect-libc", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["detect-newline", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/detect-newline-npm-3.1.0-6d33fa8d37-ae6cd429c4.zip/node_modules/detect-newline/",\ - "packageDependencies": [\ - ["detect-newline", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["devtools-protocol", [\ - ["npm:0.0.1211954", {\ - "packageLocation": "./.yarn/cache/devtools-protocol-npm-0.0.1211954-4bbefcbc5b-5c2daf2431.zip/node_modules/devtools-protocol/",\ - "packageDependencies": [\ - ["devtools-protocol", "npm:0.0.1211954"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.0.1232444", {\ - "packageLocation": "./.yarn/cache/devtools-protocol-npm-0.0.1232444-8db7c59cf2-c2b56a501e.zip/node_modules/devtools-protocol/",\ - "packageDependencies": [\ - ["devtools-protocol", "npm:0.0.1232444"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.0.1262051", {\ - "packageLocation": "./.yarn/cache/devtools-protocol-npm-0.0.1262051-6544bfc742-2705604d93.zip/node_modules/devtools-protocol/",\ - "packageDependencies": [\ - ["devtools-protocol", "npm:0.0.1262051"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.0.1413902", {\ - "packageLocation": "./.yarn/cache/devtools-protocol-npm-0.0.1413902-3a3edfdb33-42e83c43b3.zip/node_modules/devtools-protocol/",\ - "packageDependencies": [\ - ["devtools-protocol", "npm:0.0.1413902"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dezalgo", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/dezalgo-npm-1.0.4-ae3b673c98-895389c6ae.zip/node_modules/dezalgo/",\ - "packageDependencies": [\ - ["asap", "npm:2.0.6"],\ - ["dezalgo", "npm:1.0.4"],\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["diff-sequences", [\ - ["npm:28.1.1", {\ - "packageLocation": "./.yarn/cache/diff-sequences-npm-28.1.1-70eb43c727-8975270821.zip/node_modules/diff-sequences/",\ - "packageDependencies": [\ - ["diff-sequences", "npm:28.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/diff-sequences-npm-29.0.0-1a0fe796f4-d119148251.zip/node_modules/diff-sequences/",\ - "packageDependencies": [\ - ["diff-sequences", "npm:29.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dir-glob", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/dir-glob-npm-2.0.0-e7299e1804-adc4dc5dd9.zip/node_modules/dir-glob/",\ - "packageDependencies": [\ - ["arrify", "npm:1.0.1"],\ - ["dir-glob", "npm:2.0.0"],\ - ["path-type", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip/node_modules/dir-glob/",\ - "packageDependencies": [\ - ["dir-glob", "npm:3.0.1"],\ - ["path-type", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dnd-core", [\ - ["npm:14.0.1", {\ - "packageLocation": "./.yarn/cache/dnd-core-npm-14.0.1-8d80db20ad-6a65bb21ef.zip/node_modules/dnd-core/",\ - "packageDependencies": [\ - ["@react-dnd/asap", "npm:4.0.1"],\ - ["@react-dnd/invariant", "npm:2.0.0"],\ - ["dnd-core", "npm:14.0.1"],\ - ["redux", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:16.0.1", {\ - "packageLocation": "./.yarn/cache/dnd-core-npm-16.0.1-552224cee0-711dc30f88.zip/node_modules/dnd-core/",\ - "packageDependencies": [\ - ["@react-dnd/asap", "npm:5.0.2"],\ - ["@react-dnd/invariant", "npm:4.0.2"],\ - ["dnd-core", "npm:16.0.1"],\ - ["redux", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["doctrine", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/doctrine-npm-2.1.0-ac15d049b7-555684f77e.zip/node_modules/doctrine/",\ - "packageDependencies": [\ - ["doctrine", "npm:2.1.0"],\ - ["esutils", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/doctrine-npm-3.0.0-c6f1615f04-b4b28f1df5.zip/node_modules/doctrine/",\ - "packageDependencies": [\ - ["doctrine", "npm:3.0.0"],\ - ["esutils", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dom-accessibility-api", [\ - ["npm:0.5.14", {\ - "packageLocation": "./.yarn/cache/dom-accessibility-api-npm-0.5.14-0d20df4aa2-19d7a7de93.zip/node_modules/dom-accessibility-api/",\ - "packageDependencies": [\ - ["dom-accessibility-api", "npm:0.5.14"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dom-helpers", [\ - ["npm:3.4.0", {\ - "packageLocation": "./.yarn/cache/dom-helpers-npm-3.4.0-5d3cdecaac-63ce62469b.zip/node_modules/dom-helpers/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["dom-helpers", "npm:3.4.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.2.1", {\ - "packageLocation": "./.yarn/cache/dom-helpers-npm-5.2.1-b38bb4470b-bed2341adf.zip/node_modules/dom-helpers/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["csstype", "npm:3.1.0"],\ - ["dom-helpers", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dom-serializer", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-e3bf9027a6.zip/node_modules/dom-serializer/",\ - "packageDependencies": [\ - ["dom-serializer", "npm:2.0.0"],\ - ["domelementtype", "npm:2.3.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["entities", "npm:4.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["domelementtype", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/domelementtype-npm-2.3.0-02de7cbfba-ee837a318f.zip/node_modules/domelementtype/",\ - "packageDependencies": [\ - ["domelementtype", "npm:2.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["domexception", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/domexception-npm-4.0.0-5093673f9b-4ed443227d.zip/node_modules/domexception/",\ - "packageDependencies": [\ - ["domexception", "npm:4.0.0"],\ - ["webidl-conversions", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["domhandler", [\ - ["npm:5.0.3", {\ - "packageLocation": "./.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-809b805a50.zip/node_modules/domhandler/",\ - "packageDependencies": [\ - ["domelementtype", "npm:2.3.0"],\ - ["domhandler", "npm:5.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["domutils", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/domutils-npm-3.0.1-7937818218-c0031e4bf8.zip/node_modules/domutils/",\ - "packageDependencies": [\ - ["dom-serializer", "npm:2.0.0"],\ - ["domelementtype", "npm:2.3.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["domutils", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/domutils-npm-3.1.0-66c92ef7eb-9a169a6e57.zip/node_modules/domutils/",\ - "packageDependencies": [\ - ["dom-serializer", "npm:2.0.0"],\ - ["domelementtype", "npm:2.3.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["domutils", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dot-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/dot-case-npm-3.0.4-09675b5521-a65e351941.zip/node_modules/dot-case/",\ - "packageDependencies": [\ - ["dot-case", "npm:3.0.4"],\ - ["no-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dot-prop", [\ - ["npm:5.3.0", {\ - "packageLocation": "./.yarn/cache/dot-prop-npm-5.3.0-7bf6ee1eb8-33b2561617.zip/node_modules/dot-prop/",\ - "packageDependencies": [\ - ["dot-prop", "npm:5.3.0"],\ - ["is-obj", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dotenv", [\ - ["npm:16.0.1", {\ - "packageLocation": "./.yarn/cache/dotenv-npm-16.0.1-d99e72bb95-4b530b0cc1.zip/node_modules/dotenv/",\ - "packageDependencies": [\ - ["dotenv", "npm:16.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["dset", [\ - ["npm:3.1.4", {\ - "packageLocation": "./.yarn/cache/dset-npm-3.1.4-f4959c71f7-6268c9e204.zip/node_modules/dset/",\ - "packageDependencies": [\ - ["dset", "npm:3.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["duplexer", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/duplexer-npm-0.1.2-952c810235-62ba61a830.zip/node_modules/duplexer/",\ - "packageDependencies": [\ - ["duplexer", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eastasianwidth", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-9b1d3e1bae.zip/node_modules/eastasianwidth/",\ - "packageDependencies": [\ - ["eastasianwidth", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ee-first", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/ee-first-npm-1.1.1-33f8535b39-1b4cac778d.zip/node_modules/ee-first/",\ - "packageDependencies": [\ - ["ee-first", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ejs", [\ - ["npm:3.1.10", {\ - "packageLocation": "./.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-a9cb7d7cd1.zip/node_modules/ejs/",\ - "packageDependencies": [\ - ["ejs", "npm:3.1.10"],\ - ["jake", "npm:10.8.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["electron-to-chromium", [\ - ["npm:1.4.225", {\ - "packageLocation": "./.yarn/cache/electron-to-chromium-npm-1.4.225-362ad6ae1b-022d4882bd.zip/node_modules/electron-to-chromium/",\ - "packageDependencies": [\ - ["electron-to-chromium", "npm:1.4.225"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.4.728", {\ - "packageLocation": "./.yarn/cache/electron-to-chromium-npm-1.4.728-f66fbf2e1d-f0b99884e4.zip/node_modules/electron-to-chromium/",\ - "packageDependencies": [\ - ["electron-to-chromium", "npm:1.4.728"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.5.56", {\ - "packageLocation": "./.yarn/cache/electron-to-chromium-npm-1.5.56-9680391041-2015a71238.zip/node_modules/electron-to-chromium/",\ - "packageDependencies": [\ - ["electron-to-chromium", "npm:1.5.56"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["emittery", [\ - ["npm:0.10.2", {\ - "packageLocation": "./.yarn/cache/emittery-npm-0.10.2-aac10498b5-fa86fc2b1f.zip/node_modules/emittery/",\ - "packageDependencies": [\ - ["emittery", "npm:0.10.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["emoji-regex", [\ - ["npm:8.0.0", {\ - "packageLocation": "./.yarn/cache/emoji-regex-npm-8.0.0-213764015c-c72d67a682.zip/node_modules/emoji-regex/",\ - "packageDependencies": [\ - ["emoji-regex", "npm:8.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.2.2", {\ - "packageLocation": "./.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-915acf859c.zip/node_modules/emoji-regex/",\ - "packageDependencies": [\ - ["emoji-regex", "npm:9.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["emojis-list", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/emojis-list-npm-3.0.0-7faa48e6fd-114f47d6d4.zip/node_modules/emojis-list/",\ - "packageDependencies": [\ - ["emojis-list", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["encodeurl", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/encodeurl-npm-1.0.2-f8c8454c41-e50e3d508c.zip/node_modules/encodeurl/",\ - "packageDependencies": [\ - ["encodeurl", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/encodeurl-npm-2.0.0-3660bcc92a-abf5cd51b7.zip/node_modules/encodeurl/",\ - "packageDependencies": [\ - ["encodeurl", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["encoding", [\ - ["npm:0.1.13", {\ - "packageLocation": "./.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip/node_modules/encoding/",\ - "packageDependencies": [\ - ["encoding", "npm:0.1.13"],\ - ["iconv-lite", "npm:0.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["encoding-sniffer", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/encoding-sniffer-npm-0.2.0-7e717bfa93-fe61a759db.zip/node_modules/encoding-sniffer/",\ - "packageDependencies": [\ - ["encoding-sniffer", "npm:0.2.0"],\ - ["iconv-lite", "npm:0.6.3"],\ - ["whatwg-encoding", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["end-of-stream", [\ - ["npm:1.4.4", {\ - "packageLocation": "./.yarn/cache/end-of-stream-npm-1.4.4-497fc6dee1-530a5a5a1e.zip/node_modules/end-of-stream/",\ - "packageDependencies": [\ - ["end-of-stream", "npm:1.4.4"],\ - ["once", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["enhanced-resolve", [\ - ["npm:5.17.1", {\ - "packageLocation": "./.yarn/cache/enhanced-resolve-npm-5.17.1-296305b69f-e8e03cb7a4.zip/node_modules/enhanced-resolve/",\ - "packageDependencies": [\ - ["enhanced-resolve", "npm:5.17.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["tapable", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["enquirer", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/cache/enquirer-npm-2.4.1-d71b2b33c1-b3726486cd.zip/node_modules/enquirer/",\ - "packageDependencies": [\ - ["ansi-colors", "npm:4.1.3"],\ - ["enquirer", "npm:2.4.1"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ensure-posix-path", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/ensure-posix-path-npm-1.1.1-5d0b5945ab-90ac69f48a.zip/node_modules/ensure-posix-path/",\ - "packageDependencies": [\ - ["ensure-posix-path", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["entities", [\ - ["npm:4.3.1", {\ - "packageLocation": "./.yarn/cache/entities-npm-4.3.1-3a76d89ee3-762a83d3d9.zip/node_modules/entities/",\ - "packageDependencies": [\ - ["entities", "npm:4.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.5.0", {\ - "packageLocation": "./.yarn/cache/entities-npm-4.5.0-7cdb83b832-ede2a35c9b.zip/node_modules/entities/",\ - "packageDependencies": [\ - ["entities", "npm:4.5.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["env-paths", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip/node_modules/env-paths/",\ - "packageDependencies": [\ - ["env-paths", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eol", [\ - ["npm:0.9.1", {\ - "packageLocation": "./.yarn/cache/eol-npm-0.9.1-62fc20ef06-9d3fd93bb2.zip/node_modules/eol/",\ - "packageDependencies": [\ - ["eol", "npm:0.9.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["err-code", [\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-1d20d825cd.zip/node_modules/err-code/",\ - "packageDependencies": [\ - ["err-code", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["error-ex", [\ - ["npm:1.3.2", {\ - "packageLocation": "./.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-d547740aa2.zip/node_modules/error-ex/",\ - "packageDependencies": [\ - ["error-ex", "npm:1.3.2"],\ - ["is-arrayish", "npm:0.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["error-stack-parser", [\ - ["npm:2.1.4", {\ - "packageLocation": "./.yarn/cache/error-stack-parser-npm-2.1.4-5b9f7fc0c2-23db33135b.zip/node_modules/error-stack-parser/",\ - "packageDependencies": [\ - ["error-stack-parser", "npm:2.1.4"],\ - ["stackframe", "npm:1.3.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es-abstract", [\ - ["npm:1.20.1", {\ - "packageLocation": "./.yarn/cache/es-abstract-npm-1.20.1-83d41a4d88-33fca95bb5.zip/node_modules/es-abstract/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["es-abstract", "npm:1.20.1"],\ - ["es-to-primitive", "npm:1.2.1"],\ - ["function-bind", "npm:1.1.1"],\ - ["function.prototype.name", "npm:1.1.5"],\ - ["get-intrinsic", "npm:1.1.2"],\ - ["get-symbol-description", "npm:1.0.0"],\ - ["has", "npm:1.0.3"],\ - ["has-property-descriptors", "npm:1.0.0"],\ - ["has-symbols", "npm:1.0.3"],\ - ["internal-slot", "npm:1.0.3"],\ - ["is-callable", "npm:1.2.4"],\ - ["is-negative-zero", "npm:2.0.2"],\ - ["is-regex", "npm:1.1.4"],\ - ["is-shared-array-buffer", "npm:1.0.2"],\ - ["is-string", "npm:1.0.7"],\ - ["is-weakref", "npm:1.0.2"],\ - ["object-inspect", "npm:1.12.2"],\ - ["object-keys", "npm:1.1.1"],\ - ["object.assign", "npm:4.1.4"],\ - ["regexp.prototype.flags", "npm:1.4.3"],\ - ["string.prototype.trimend", "npm:1.0.5"],\ - ["string.prototype.trimstart", "npm:1.0.5"],\ - ["unbox-primitive", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es-define-property", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/es-define-property-npm-1.0.0-e23aa9b242-f66ece0a88.zip/node_modules/es-define-property/",\ - "packageDependencies": [\ - ["es-define-property", "npm:1.0.0"],\ - ["get-intrinsic", "npm:1.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es-errors", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/es-errors-npm-1.3.0-fda0c9b8a8-96e65d6401.zip/node_modules/es-errors/",\ - "packageDependencies": [\ - ["es-errors", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es-module-lexer", [\ - ["npm:1.5.4", {\ - "packageLocation": "./.yarn/cache/es-module-lexer-npm-1.5.4-b52b96b8fc-f29c7c97a5.zip/node_modules/es-module-lexer/",\ - "packageDependencies": [\ - ["es-module-lexer", "npm:1.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es-shim-unscopables", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/es-shim-unscopables-npm-1.0.0-06186593f1-ac2db2c70d.zip/node_modules/es-shim-unscopables/",\ - "packageDependencies": [\ - ["es-shim-unscopables", "npm:1.0.0"],\ - ["has", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["es-to-primitive", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/es-to-primitive-npm-1.2.1-b7a7eac6c5-74aeeefe27.zip/node_modules/es-to-primitive/",\ - "packageDependencies": [\ - ["es-to-primitive", "npm:1.2.1"],\ - ["is-callable", "npm:1.2.4"],\ - ["is-date-object", "npm:1.0.5"],\ - ["is-symbol", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["esbuild", [\ - ["npm:0.23.1", {\ - "packageLocation": "./.yarn/unplugged/esbuild-npm-0.23.1-6e231886af/node_modules/esbuild/",\ - "packageDependencies": [\ - ["@esbuild/aix-ppc64", "npm:0.23.1"],\ - ["@esbuild/android-arm", "npm:0.23.1"],\ - ["@esbuild/android-arm64", "npm:0.23.1"],\ - ["@esbuild/android-x64", "npm:0.23.1"],\ - ["@esbuild/darwin-arm64", "npm:0.23.1"],\ - ["@esbuild/darwin-x64", "npm:0.23.1"],\ - ["@esbuild/freebsd-arm64", "npm:0.23.1"],\ - ["@esbuild/freebsd-x64", "npm:0.23.1"],\ - ["@esbuild/linux-arm", "npm:0.23.1"],\ - ["@esbuild/linux-arm64", "npm:0.23.1"],\ - ["@esbuild/linux-ia32", "npm:0.23.1"],\ - ["@esbuild/linux-loong64", "npm:0.23.1"],\ - ["@esbuild/linux-mips64el", "npm:0.23.1"],\ - ["@esbuild/linux-ppc64", "npm:0.23.1"],\ - ["@esbuild/linux-riscv64", "npm:0.23.1"],\ - ["@esbuild/linux-s390x", "npm:0.23.1"],\ - ["@esbuild/linux-x64", "npm:0.23.1"],\ - ["@esbuild/netbsd-x64", "npm:0.23.1"],\ - ["@esbuild/openbsd-arm64", "npm:0.23.1"],\ - ["@esbuild/openbsd-x64", "npm:0.23.1"],\ - ["@esbuild/sunos-x64", "npm:0.23.1"],\ - ["@esbuild/win32-arm64", "npm:0.23.1"],\ - ["@esbuild/win32-ia32", "npm:0.23.1"],\ - ["@esbuild/win32-x64", "npm:0.23.1"],\ - ["esbuild", "npm:0.23.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["escalade", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/escalade-npm-3.1.1-e02da076aa-afa618e733.zip/node_modules/escalade/",\ - "packageDependencies": [\ - ["escalade", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/escalade-npm-3.2.0-19b50dd48f-9d7169e396.zip/node_modules/escalade/",\ - "packageDependencies": [\ - ["escalade", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["escape-html", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/escape-html-npm-1.0.3-376c22ee74-6213ca9ae0.zip/node_modules/escape-html/",\ - "packageDependencies": [\ - ["escape-html", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["escape-string-regexp", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip/node_modules/escape-string-regexp/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/escape-string-regexp-npm-2.0.0-aef69d2a25-9f8a2d5743.zip/node_modules/escape-string-regexp/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip/node_modules/escape-string-regexp/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["escodegen", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/escodegen-npm-2.0.0-6450b02925-0f7e404b19.zip/node_modules/escodegen/",\ - "packageDependencies": [\ - ["escodegen", "npm:2.0.0"],\ - ["esprima", "npm:4.0.1"],\ - ["estraverse", "npm:5.3.0"],\ - ["esutils", "npm:2.0.3"],\ - ["optionator", "npm:0.8.3"],\ - ["source-map", "npm:0.6.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/escodegen-npm-2.1.0-e0bf940745-47719a65b2.zip/node_modules/escodegen/",\ - "packageDependencies": [\ - ["escodegen", "npm:2.1.0"],\ - ["esprima", "npm:4.0.1"],\ - ["estraverse", "npm:5.3.0"],\ - ["esutils", "npm:2.0.3"],\ - ["source-map", "npm:0.6.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint", [\ - ["npm:8.57.0", {\ - "packageLocation": "./.yarn/cache/eslint-npm-8.57.0-4286e12a3a-00496e218b.zip/node_modules/eslint/",\ - "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:4286e12a3a0f74af013bc8f16c6d8fdde823cfbf6389660266b171e551f576c805b0a7a8eb2a7087a5cee7dfe6ebb6e1ea3808d93daf915edc95656907a381bb#npm:4.4.0"],\ - ["@eslint-community/regexpp", "npm:4.10.0"],\ - ["@eslint/eslintrc", "npm:2.1.4"],\ - ["@eslint/js", "npm:8.57.0"],\ - ["@humanwhocodes/config-array", "npm:0.11.14"],\ - ["@humanwhocodes/module-importer", "npm:1.0.1"],\ - ["@nodelib/fs.walk", "npm:1.2.8"],\ - ["@ungap/structured-clone", "npm:1.2.0"],\ - ["ajv", "npm:6.12.6"],\ - ["chalk", "npm:4.1.2"],\ - ["cross-spawn", "npm:7.0.6"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["doctrine", "npm:3.0.0"],\ - ["escape-string-regexp", "npm:4.0.0"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-scope", "npm:7.2.2"],\ - ["eslint-visitor-keys", "npm:3.4.3"],\ - ["espree", "npm:9.6.1"],\ - ["esquery", "npm:1.5.0"],\ - ["esutils", "npm:2.0.3"],\ - ["fast-deep-equal", "npm:3.1.3"],\ - ["file-entry-cache", "npm:6.0.1"],\ - ["find-up", "npm:5.0.0"],\ - ["glob-parent", "npm:6.0.2"],\ - ["globals", "npm:13.24.0"],\ - ["graphemer", "npm:1.4.0"],\ - ["ignore", "npm:5.2.0"],\ - ["imurmurhash", "npm:0.1.4"],\ - ["is-glob", "npm:4.0.3"],\ - ["is-path-inside", "npm:3.0.3"],\ - ["js-yaml", "npm:4.1.0"],\ - ["json-stable-stringify-without-jsonify", "npm:1.0.1"],\ - ["levn", "npm:0.4.1"],\ - ["lodash.merge", "npm:4.6.2"],\ - ["minimatch", "npm:3.1.2"],\ - ["natural-compare", "npm:1.4.0"],\ - ["optionator", "npm:0.9.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["text-table", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-config-prettier", [\ - ["npm:8.5.0", {\ - "packageLocation": "./.yarn/cache/eslint-config-prettier-npm-8.5.0-a1dd58b6d8-cafd93fb39.zip/node_modules/eslint-config-prettier/",\ - "packageDependencies": [\ - ["eslint-config-prettier", "npm:8.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.5.0", {\ - "packageLocation": "./.yarn/__virtual__/eslint-config-prettier-virtual-2acbd2961a/0/cache/eslint-config-prettier-npm-8.5.0-a1dd58b6d8-cafd93fb39.zip/node_modules/eslint-config-prettier/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-config-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.5.0"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-import-resolver-node", [\ - ["npm:0.3.6", {\ - "packageLocation": "./.yarn/cache/eslint-import-resolver-node-npm-0.3.6-d9426786c6-c35c6edb7e.zip/node_modules/eslint-import-resolver-node/",\ - "packageDependencies": [\ - ["debug", "virtual:d9426786c635bc4b52511d6cc4b56156f50d780a698c0e20fc6caf10d3be51cbf176e79cff882f4d42a23ff4d0f89fe94222849578214e7fbae0f2754c82af02#npm:3.2.7"],\ - ["eslint-import-resolver-node", "npm:0.3.6"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-module-utils", [\ - ["npm:2.7.4", {\ - "packageLocation": "./.yarn/cache/eslint-module-utils-npm-2.7.4-a1640084cb-25527e03d4.zip/node_modules/eslint-module-utils/",\ - "packageDependencies": [\ - ["eslint-module-utils", "npm:2.7.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2d529bc50c03b6d391a1ba57fc3f7c2d9d4fb8c7473f86ac944f3bc62d7190bb6b702f17234e66cfd807006d009b3d1c2b620d4ee079840203dcac0dc9e456e8#npm:2.7.4", {\ - "packageLocation": "./.yarn/__virtual__/eslint-module-utils-virtual-da8ca1f556/0/cache/eslint-module-utils-npm-2.7.4-a1640084cb-25527e03d4.zip/node_modules/eslint-module-utils/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/eslint-import-resolver-node", null],\ - ["@types/eslint-import-resolver-typescript", null],\ - ["@types/eslint-import-resolver-webpack", null],\ - ["@types/typescript-eslint__parser", null],\ - ["@typescript-eslint/parser", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0"],\ - ["debug", "virtual:d9426786c635bc4b52511d6cc4b56156f50d780a698c0e20fc6caf10d3be51cbf176e79cff882f4d42a23ff4d0f89fe94222849578214e7fbae0f2754c82af02#npm:3.2.7"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-import-resolver-node", "npm:0.3.6"],\ - ["eslint-import-resolver-typescript", null],\ - ["eslint-import-resolver-webpack", null],\ - ["eslint-module-utils", "virtual:2d529bc50c03b6d391a1ba57fc3f7c2d9d4fb8c7473f86ac944f3bc62d7190bb6b702f17234e66cfd807006d009b3d1c2b620d4ee079840203dcac0dc9e456e8#npm:2.7.4"]\ - ],\ - "packagePeers": [\ - "@types/eslint-import-resolver-node",\ - "@types/eslint-import-resolver-typescript",\ - "@types/eslint-import-resolver-webpack",\ - "@types/eslint",\ - "@types/typescript-eslint__parser",\ - "@typescript-eslint/parser",\ - "eslint-import-resolver-node",\ - "eslint-import-resolver-typescript",\ - "eslint-import-resolver-webpack",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-plugin-import", [\ - ["npm:2.26.0", {\ - "packageLocation": "./.yarn/cache/eslint-plugin-import-npm-2.26.0-959fe14a01-80322d0414.zip/node_modules/eslint-plugin-import/",\ - "packageDependencies": [\ - ["eslint-plugin-import", "npm:2.26.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.26.0", {\ - "packageLocation": "./.yarn/__virtual__/eslint-plugin-import-virtual-2d529bc50c/0/cache/eslint-plugin-import-npm-2.26.0-959fe14a01-80322d0414.zip/node_modules/eslint-plugin-import/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/typescript-eslint__parser", null],\ - ["@typescript-eslint/parser", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0"],\ - ["array-includes", "npm:3.1.5"],\ - ["array.prototype.flat", "npm:1.3.0"],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["doctrine", "npm:2.1.0"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-import-resolver-node", "npm:0.3.6"],\ - ["eslint-module-utils", "virtual:2d529bc50c03b6d391a1ba57fc3f7c2d9d4fb8c7473f86ac944f3bc62d7190bb6b702f17234e66cfd807006d009b3d1c2b620d4ee079840203dcac0dc9e456e8#npm:2.7.4"],\ - ["eslint-plugin-import", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.26.0"],\ - ["has", "npm:1.0.3"],\ - ["is-core-module", "npm:2.10.0"],\ - ["is-glob", "npm:4.0.3"],\ - ["minimatch", "npm:3.1.2"],\ - ["object.values", "npm:1.1.5"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"],\ - ["tsconfig-paths", "npm:3.14.1"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "@types/typescript-eslint__parser",\ - "@typescript-eslint/parser",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-plugin-jest", [\ - ["npm:27.0.4", {\ - "packageLocation": "./.yarn/cache/eslint-plugin-jest-npm-27.0.4-9267091daf-6fbd79448c.zip/node_modules/eslint-plugin-jest/",\ - "packageDependencies": [\ - ["eslint-plugin-jest", "npm:27.0.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:27.0.4", {\ - "packageLocation": "./.yarn/__virtual__/eslint-plugin-jest-virtual-6bed2dac13/0/cache/eslint-plugin-jest-npm-27.0.4-9267091daf-6fbd79448c.zip/node_modules/eslint-plugin-jest/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/jest", "npm:29.5.14"],\ - ["@types/typescript-eslint__eslint-plugin", null],\ - ["@typescript-eslint/eslint-plugin", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.5.0"],\ - ["@typescript-eslint/utils", "virtual:6bed2dac13ee8765709dd966b02ec08fe54e2882f4cd1408fd78d71b2253d71c8270dd2a82d6648e77a209b27f53afce471451b358b1abaeced9054a58265468#npm:5.33.1"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-plugin-jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:27.0.4"],\ - ["jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:29.0.3"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "@types/jest",\ - "@types/typescript-eslint__eslint-plugin",\ - "@typescript-eslint/eslint-plugin",\ - "eslint",\ - "jest"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-plugin-jsx-a11y", [\ - ["npm:6.6.1", {\ - "packageLocation": "./.yarn/cache/eslint-plugin-jsx-a11y-npm-6.6.1-02552a3ea2-e904ef8a91.zip/node_modules/eslint-plugin-jsx-a11y/",\ - "packageDependencies": [\ - ["eslint-plugin-jsx-a11y", "npm:6.6.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.6.1", {\ - "packageLocation": "./.yarn/__virtual__/eslint-plugin-jsx-a11y-virtual-e1d133ccca/0/cache/eslint-plugin-jsx-a11y-npm-6.6.1-02552a3ea2-e904ef8a91.zip/node_modules/eslint-plugin-jsx-a11y/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@types/eslint", null],\ - ["aria-query", "npm:4.2.2"],\ - ["array-includes", "npm:3.1.5"],\ - ["ast-types-flow", "npm:0.0.7"],\ - ["axe-core", "npm:4.4.3"],\ - ["axobject-query", "npm:2.2.0"],\ - ["damerau-levenshtein", "npm:1.0.8"],\ - ["emoji-regex", "npm:9.2.2"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-plugin-jsx-a11y", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.6.1"],\ - ["has", "npm:1.0.3"],\ - ["jsx-ast-utils", "npm:3.3.3"],\ - ["language-tags", "npm:1.0.5"],\ - ["minimatch", "npm:3.1.2"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-plugin-prettier", [\ - ["npm:4.2.1", {\ - "packageLocation": "./.yarn/cache/eslint-plugin-prettier-npm-4.2.1-ba8e1240f1-d387f85dd1.zip/node_modules/eslint-plugin-prettier/",\ - "packageDependencies": [\ - ["eslint-plugin-prettier", "npm:4.2.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.1", {\ - "packageLocation": "./.yarn/__virtual__/eslint-plugin-prettier-virtual-557c9a704e/0/cache/eslint-plugin-prettier-npm-4.2.1-ba8e1240f1-d387f85dd1.zip/node_modules/eslint-plugin-prettier/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["@types/eslint-config-prettier", null],\ - ["@types/prettier", null],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-config-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.5.0"],\ - ["eslint-plugin-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.1"],\ - ["prettier", "npm:3.6.2"],\ - ["prettier-linter-helpers", "npm:1.0.0"]\ - ],\ - "packagePeers": [\ - "@types/eslint-config-prettier",\ - "@types/eslint",\ - "@types/prettier",\ - "eslint-config-prettier",\ - "eslint",\ - "prettier"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-plugin-react", [\ - ["npm:7.31.8", {\ - "packageLocation": "./.yarn/cache/eslint-plugin-react-npm-7.31.8-54babab916-310d9fc70c.zip/node_modules/eslint-plugin-react/",\ - "packageDependencies": [\ - ["eslint-plugin-react", "npm:7.31.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.31.8", {\ - "packageLocation": "./.yarn/__virtual__/eslint-plugin-react-virtual-887bef45e9/0/cache/eslint-plugin-react-npm-7.31.8-54babab916-310d9fc70c.zip/node_modules/eslint-plugin-react/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["array-includes", "npm:3.1.5"],\ - ["array.prototype.flatmap", "npm:1.3.0"],\ - ["doctrine", "npm:2.1.0"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-plugin-react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.31.8"],\ - ["estraverse", "npm:5.3.0"],\ - ["jsx-ast-utils", "npm:3.3.3"],\ - ["minimatch", "npm:3.1.2"],\ - ["object.entries", "npm:1.1.5"],\ - ["object.fromentries", "npm:2.0.5"],\ - ["object.hasown", "npm:1.1.1"],\ - ["object.values", "npm:1.1.5"],\ - ["prop-types", "npm:15.8.1"],\ - ["resolve", "patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d"],\ - ["semver", "npm:6.3.1"],\ - ["string.prototype.matchall", "npm:4.0.7"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-scope", [\ - ["npm:5.1.1", {\ - "packageLocation": "./.yarn/cache/eslint-scope-npm-5.1.1-71fe59b18a-c541ef384c.zip/node_modules/eslint-scope/",\ - "packageDependencies": [\ - ["eslint-scope", "npm:5.1.1"],\ - ["esrecurse", "npm:4.3.0"],\ - ["estraverse", "npm:4.3.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.2.2", {\ - "packageLocation": "./.yarn/cache/eslint-scope-npm-7.2.2-53cb0df8e8-5c660fb905.zip/node_modules/eslint-scope/",\ - "packageDependencies": [\ - ["eslint-scope", "npm:7.2.2"],\ - ["esrecurse", "npm:4.3.0"],\ - ["estraverse", "npm:5.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-utils", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/eslint-utils-npm-3.0.0-630b3a4013-7675260a6b.zip/node_modules/eslint-utils/",\ - "packageDependencies": [\ - ["eslint-utils", "npm:3.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:09b157fecc804d318ed6a4566b4fd8284d6c425c8f1d0e01ffa1f243f725634a1bd90dde6adac603624e360c4421ea2a697f3d3c81cceace25e2f7fdba859625#npm:3.0.0", {\ - "packageLocation": "./.yarn/__virtual__/eslint-utils-virtual-fd4413499c/0/cache/eslint-utils-npm-3.0.0-630b3a4013-7675260a6b.zip/node_modules/eslint-utils/",\ - "packageDependencies": [\ - ["@types/eslint", null],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-utils", "virtual:09b157fecc804d318ed6a4566b4fd8284d6c425c8f1d0e01ffa1f243f725634a1bd90dde6adac603624e360c4421ea2a697f3d3c81cceace25e2f7fdba859625#npm:3.0.0"],\ - ["eslint-visitor-keys", "npm:2.1.0"]\ - ],\ - "packagePeers": [\ - "@types/eslint",\ - "eslint"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eslint-visitor-keys", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/eslint-visitor-keys-npm-2.1.0-c31806b6b9-db4547eef5.zip/node_modules/eslint-visitor-keys/",\ - "packageDependencies": [\ - ["eslint-visitor-keys", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/eslint-visitor-keys-npm-3.3.0-d329af7c8c-37a1a5912a.zip/node_modules/eslint-visitor-keys/",\ - "packageDependencies": [\ - ["eslint-visitor-keys", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.4.3", {\ - "packageLocation": "./.yarn/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-3f357c554a.zip/node_modules/eslint-visitor-keys/",\ - "packageDependencies": [\ - ["eslint-visitor-keys", "npm:3.4.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/eslint-visitor-keys-npm-4.2.0-a591434af3-9651b3356b.zip/node_modules/eslint-visitor-keys/",\ - "packageDependencies": [\ - ["eslint-visitor-keys", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["espree", [\ - ["npm:9.6.1", {\ - "packageLocation": "./.yarn/cache/espree-npm-9.6.1-a50722a5a9-255ab260f0.zip/node_modules/espree/",\ - "packageDependencies": [\ - ["acorn", "npm:8.11.3"],\ - ["acorn-jsx", "virtual:a50722a5a9326b6a5f12350c494c4db3aa0f4caeac45e3e9e5fe071da20014ecfe738fe2ebe2c9c98abae81a4ea86b42f56d776b3bd5ec37f9ad3670c242b242#npm:5.3.2"],\ - ["eslint-visitor-keys", "npm:3.4.3"],\ - ["espree", "npm:9.6.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["esprima", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/esprima-npm-4.0.1-1084e98778-f1d3c622ad.zip/node_modules/esprima/",\ - "packageDependencies": [\ - ["esprima", "npm:4.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["esquery", [\ - ["npm:1.5.0", {\ - "packageLocation": "./.yarn/cache/esquery-npm-1.5.0-d8f8a06879-e65fcdfc1e.zip/node_modules/esquery/",\ - "packageDependencies": [\ - ["esquery", "npm:1.5.0"],\ - ["estraverse", "npm:5.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["esrecurse", [\ - ["npm:4.3.0", {\ - "packageLocation": "./.yarn/cache/esrecurse-npm-4.3.0-10b86a887a-44ffcd89e7.zip/node_modules/esrecurse/",\ - "packageDependencies": [\ - ["esrecurse", "npm:4.3.0"],\ - ["estraverse", "npm:5.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["estraverse", [\ - ["npm:4.3.0", {\ - "packageLocation": "./.yarn/cache/estraverse-npm-4.3.0-920a32f3c6-3f67ad02b6.zip/node_modules/estraverse/",\ - "packageDependencies": [\ - ["estraverse", "npm:4.3.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.3.0", {\ - "packageLocation": "./.yarn/cache/estraverse-npm-5.3.0-03284f8f63-37cbe6e9a6.zip/node_modules/estraverse/",\ - "packageDependencies": [\ - ["estraverse", "npm:5.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["estree-walker", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/estree-walker-npm-1.0.1-e916593b23-1cf11a0aff.zip/node_modules/estree-walker/",\ - "packageDependencies": [\ - ["estree-walker", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["esutils", [\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/esutils-npm-2.0.3-f865beafd5-b23acd2479.zip/node_modules/esutils/",\ - "packageDependencies": [\ - ["esutils", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["etag", [\ - ["npm:1.8.1", {\ - "packageLocation": "./.yarn/cache/etag-npm-1.8.1-54a3b989d9-571aeb3dbe.zip/node_modules/etag/",\ - "packageDependencies": [\ - ["etag", "npm:1.8.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["eventemitter3", [\ - ["npm:4.0.7", {\ - "packageLocation": "./.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-8030029382.zip/node_modules/eventemitter3/",\ - "packageDependencies": [\ - ["eventemitter3", "npm:4.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["events", [\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/events-npm-3.3.0-c280bc7e48-a3d47e285e.zip/node_modules/events/",\ - "packageDependencies": [\ - ["events", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["execa", [\ - ["npm:5.1.1", {\ - "packageLocation": "./.yarn/cache/execa-npm-5.1.1-191347acf5-8ada91f2d7.zip/node_modules/execa/",\ - "packageDependencies": [\ - ["cross-spawn", "npm:7.0.6"],\ - ["execa", "npm:5.1.1"],\ - ["get-stream", "npm:6.0.1"],\ - ["human-signals", "npm:2.1.0"],\ - ["is-stream", "npm:2.0.1"],\ - ["merge-stream", "npm:2.0.0"],\ - ["npm-run-path", "npm:4.0.1"],\ - ["onetime", "npm:5.1.2"],\ - ["signal-exit", "npm:3.0.7"],\ - ["strip-final-newline", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/execa-npm-6.1.0-be1d7f323b-669437011a.zip/node_modules/execa/",\ - "packageDependencies": [\ - ["cross-spawn", "npm:7.0.6"],\ - ["execa", "npm:6.1.0"],\ - ["get-stream", "npm:6.0.1"],\ - ["human-signals", "npm:3.0.1"],\ - ["is-stream", "npm:3.0.0"],\ - ["merge-stream", "npm:2.0.0"],\ - ["npm-run-path", "npm:5.1.0"],\ - ["onetime", "npm:6.0.0"],\ - ["signal-exit", "npm:3.0.7"],\ - ["strip-final-newline", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["exit", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/exit-npm-0.1.2-ef3761a67d-387555050c.zip/node_modules/exit/",\ - "packageDependencies": [\ - ["exit", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["expand-brackets", [\ - ["npm:2.1.4", {\ - "packageLocation": "./.yarn/cache/expand-brackets-npm-2.1.4-392c703c48-aa4acc6208.zip/node_modules/expand-brackets/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["define-property", "npm:0.2.5"],\ - ["expand-brackets", "npm:2.1.4"],\ - ["extend-shallow", "npm:2.0.1"],\ - ["posix-character-classes", "npm:0.1.1"],\ - ["regex-not", "npm:1.0.2"],\ - ["snapdragon", "npm:0.8.2"],\ - ["to-regex", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["expect", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/expect-npm-28.1.3-e3316724f1-87033c88f7.zip/node_modules/expect/",\ - "packageDependencies": [\ - ["@jest/expect-utils", "npm:28.1.3"],\ - ["expect", "npm:28.1.3"],\ - ["jest-get-type", "npm:28.0.2"],\ - ["jest-matcher-utils", "npm:28.1.3"],\ - ["jest-message-util", "npm:28.1.3"],\ - ["jest-util", "npm:28.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/expect-npm-29.0.3-63dbd1de55-567e6712d7.zip/node_modules/expect/",\ - "packageDependencies": [\ - ["@jest/expect-utils", "npm:29.0.3"],\ - ["expect", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-matcher-utils", "npm:29.0.3"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["express", [\ - ["npm:4.21.1", {\ - "packageLocation": "./.yarn/cache/express-npm-4.21.1-f1cd48000b-5d4a36dd03.zip/node_modules/express/",\ - "packageDependencies": [\ - ["accepts", "npm:1.3.8"],\ - ["array-flatten", "npm:1.1.1"],\ - ["body-parser", "npm:1.20.3"],\ - ["content-disposition", "npm:0.5.4"],\ - ["content-type", "npm:1.0.4"],\ - ["cookie", "npm:0.7.1"],\ - ["cookie-signature", "npm:1.0.6"],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["depd", "npm:2.0.0"],\ - ["encodeurl", "npm:2.0.0"],\ - ["escape-html", "npm:1.0.3"],\ - ["etag", "npm:1.8.1"],\ - ["express", "npm:4.21.1"],\ - ["finalhandler", "npm:1.3.1"],\ - ["fresh", "npm:0.5.2"],\ - ["http-errors", "npm:2.0.0"],\ - ["merge-descriptors", "npm:1.0.3"],\ - ["methods", "npm:1.1.2"],\ - ["on-finished", "npm:2.4.1"],\ - ["parseurl", "npm:1.3.3"],\ - ["path-to-regexp", "npm:0.1.10"],\ - ["proxy-addr", "npm:2.0.7"],\ - ["qs", "npm:6.13.0"],\ - ["range-parser", "npm:1.2.1"],\ - ["safe-buffer", "npm:5.2.1"],\ - ["send", "npm:0.19.0"],\ - ["serve-static", "npm:1.16.2"],\ - ["setprototypeof", "npm:1.2.0"],\ - ["statuses", "npm:2.0.1"],\ - ["type-is", "npm:1.6.18"],\ - ["utils-merge", "npm:1.0.1"],\ - ["vary", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.21.2", {\ - "packageLocation": "./.yarn/cache/express-npm-4.21.2-9b3bd32250-34571c442f.zip/node_modules/express/",\ - "packageDependencies": [\ - ["accepts", "npm:1.3.8"],\ - ["array-flatten", "npm:1.1.1"],\ - ["body-parser", "npm:1.20.3"],\ - ["content-disposition", "npm:0.5.4"],\ - ["content-type", "npm:1.0.4"],\ - ["cookie", "npm:0.7.1"],\ - ["cookie-signature", "npm:1.0.6"],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["depd", "npm:2.0.0"],\ - ["encodeurl", "npm:2.0.0"],\ - ["escape-html", "npm:1.0.3"],\ - ["etag", "npm:1.8.1"],\ - ["express", "npm:4.21.2"],\ - ["finalhandler", "npm:1.3.1"],\ - ["fresh", "npm:0.5.2"],\ - ["http-errors", "npm:2.0.0"],\ - ["merge-descriptors", "npm:1.0.3"],\ - ["methods", "npm:1.1.2"],\ - ["on-finished", "npm:2.4.1"],\ - ["parseurl", "npm:1.3.3"],\ - ["path-to-regexp", "npm:0.1.12"],\ - ["proxy-addr", "npm:2.0.7"],\ - ["qs", "npm:6.13.0"],\ - ["range-parser", "npm:1.2.1"],\ - ["safe-buffer", "npm:5.2.1"],\ - ["send", "npm:0.19.0"],\ - ["serve-static", "npm:1.16.2"],\ - ["setprototypeof", "npm:1.2.0"],\ - ["statuses", "npm:2.0.1"],\ - ["type-is", "npm:1.6.18"],\ - ["utils-merge", "npm:1.0.1"],\ - ["vary", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["extend-shallow", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/extend-shallow-npm-2.0.1-e6ef52b29c-8fb58d9d7a.zip/node_modules/extend-shallow/",\ - "packageDependencies": [\ - ["extend-shallow", "npm:2.0.1"],\ - ["is-extendable", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/extend-shallow-npm-3.0.2-77bbe1bbf5-a920b0cd58.zip/node_modules/extend-shallow/",\ - "packageDependencies": [\ - ["assign-symbols", "npm:1.0.0"],\ - ["extend-shallow", "npm:3.0.2"],\ - ["is-extendable", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["external-editor", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/external-editor-npm-3.1.0-878e7807af-776dff1d64.zip/node_modules/external-editor/",\ - "packageDependencies": [\ - ["chardet", "npm:0.7.0"],\ - ["external-editor", "npm:3.1.0"],\ - ["iconv-lite", "npm:0.4.24"],\ - ["tmp", "npm:0.0.33"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["extglob", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/extglob-npm-2.0.4-0f39bc9899-6869edd48d.zip/node_modules/extglob/",\ - "packageDependencies": [\ - ["array-unique", "npm:0.3.2"],\ - ["define-property", "npm:1.0.0"],\ - ["expand-brackets", "npm:2.1.4"],\ - ["extend-shallow", "npm:2.0.1"],\ - ["extglob", "npm:2.0.4"],\ - ["fragment-cache", "npm:0.2.1"],\ - ["regex-not", "npm:1.0.2"],\ - ["snapdragon", "npm:0.8.2"],\ - ["to-regex", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["extract-files", [\ - ["npm:11.0.0", {\ - "packageLocation": "./.yarn/cache/extract-files-npm-11.0.0-57df5d93a0-02bf0dde96.zip/node_modules/extract-files/",\ - "packageDependencies": [\ - ["extract-files", "npm:11.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["extract-zip", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/extract-zip-npm-2.0.1-92a28e392b-8cbda9debd.zip/node_modules/extract-zip/",\ - "packageDependencies": [\ - ["@types/yauzl", "npm:2.10.3"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["extract-zip", "npm:2.0.1"],\ - ["get-stream", "npm:5.2.0"],\ - ["yauzl", "npm:2.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-decode-uri-component", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/fast-decode-uri-component-npm-1.0.1-578ba9fecf-4b6ed26974.zip/node_modules/fast-decode-uri-component/",\ - "packageDependencies": [\ - ["fast-decode-uri-component", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-deep-equal", [\ - ["npm:3.1.3", {\ - "packageLocation": "./.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip/node_modules/fast-deep-equal/",\ - "packageDependencies": [\ - ["fast-deep-equal", "npm:3.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-diff", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/fast-diff-npm-1.2.0-5ba4171bb6-f62419b3d7.zip/node_modules/fast-diff/",\ - "packageDependencies": [\ - ["fast-diff", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-equals", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/fast-equals-npm-2.0.4-4807826768-99b9f66cc1.zip/node_modules/fast-equals/",\ - "packageDependencies": [\ - ["fast-equals", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-fifo", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/fast-fifo-npm-1.1.0-2e54f1b632-895f4c9873.zip/node_modules/fast-fifo/",\ - "packageDependencies": [\ - ["fast-fifo", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.3.2", {\ - "packageLocation": "./.yarn/cache/fast-fifo-npm-1.3.2-391cc25df4-6bfcba3e4d.zip/node_modules/fast-fifo/",\ - "packageDependencies": [\ - ["fast-fifo", "npm:1.3.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-glob", [\ - ["npm:2.2.7", {\ - "packageLocation": "./.yarn/cache/fast-glob-npm-2.2.7-f211fb26f4-9e7d4e4d99.zip/node_modules/fast-glob/",\ - "packageDependencies": [\ - ["@mrmlnc/readdir-enhanced", "npm:2.2.1"],\ - ["@nodelib/fs.stat", "npm:1.1.3"],\ - ["fast-glob", "npm:2.2.7"],\ - ["glob-parent", "npm:5.1.2"],\ - ["is-glob", "npm:4.0.3"],\ - ["merge2", "npm:1.4.1"],\ - ["micromatch", "npm:3.1.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.2.11", {\ - "packageLocation": "./.yarn/cache/fast-glob-npm-3.2.11-bc01135fef-6b736d92a4.zip/node_modules/fast-glob/",\ - "packageDependencies": [\ - ["@nodelib/fs.stat", "npm:2.0.5"],\ - ["@nodelib/fs.walk", "npm:1.2.8"],\ - ["fast-glob", "npm:3.2.11"],\ - ["glob-parent", "npm:5.1.2"],\ - ["merge2", "npm:1.4.1"],\ - ["micromatch", "npm:4.0.8"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.3.1", {\ - "packageLocation": "./.yarn/cache/fast-glob-npm-3.3.1-8045ff8f4d-51bcd15472.zip/node_modules/fast-glob/",\ - "packageDependencies": [\ - ["@nodelib/fs.stat", "npm:2.0.5"],\ - ["@nodelib/fs.walk", "npm:1.2.8"],\ - ["fast-glob", "npm:3.3.1"],\ - ["glob-parent", "npm:5.1.2"],\ - ["merge2", "npm:1.4.1"],\ - ["micromatch", "npm:4.0.8"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.3.2", {\ - "packageLocation": "./.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip/node_modules/fast-glob/",\ - "packageDependencies": [\ - ["@nodelib/fs.stat", "npm:2.0.5"],\ - ["@nodelib/fs.walk", "npm:1.2.8"],\ - ["fast-glob", "npm:3.3.2"],\ - ["glob-parent", "npm:5.1.2"],\ - ["merge2", "npm:1.4.1"],\ - ["micromatch", "npm:4.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-json-stable-stringify", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-2c20055c1f.zip/node_modules/fast-json-stable-stringify/",\ - "packageDependencies": [\ - ["fast-json-stable-stringify", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-levenshtein", [\ - ["npm:2.0.6", {\ - "packageLocation": "./.yarn/cache/fast-levenshtein-npm-2.0.6-fcd74b8df5-eb7e220ecf.zip/node_modules/fast-levenshtein/",\ - "packageDependencies": [\ - ["fast-levenshtein", "npm:2.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-querystring", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/fast-querystring-npm-1.1.2-81dfb4019b-981da9b914.zip/node_modules/fast-querystring/",\ - "packageDependencies": [\ - ["fast-decode-uri-component", "npm:1.0.1"],\ - ["fast-querystring", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fast-url-parser", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/fast-url-parser-npm-1.1.3-9be698120a-6d33f46ce9.zip/node_modules/fast-url-parser/",\ - "packageDependencies": [\ - ["fast-url-parser", "npm:1.1.3"],\ - ["punycode", "npm:1.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fastq", [\ - ["npm:1.13.0", {\ - "packageLocation": "./.yarn/cache/fastq-npm-1.13.0-a45963881c-0902cb9b81.zip/node_modules/fastq/",\ - "packageDependencies": [\ - ["fastq", "npm:1.13.0"],\ - ["reusify", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.17.1", {\ - "packageLocation": "./.yarn/cache/fastq-npm-1.17.1-56d4554993-a443180068.zip/node_modules/fastq/",\ - "packageDependencies": [\ - ["fastq", "npm:1.17.1"],\ - ["reusify", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fb-watchman", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/fb-watchman-npm-2.0.1-30005d50fe-9a03efc7d4.zip/node_modules/fb-watchman/",\ - "packageDependencies": [\ - ["bser", "npm:2.1.1"],\ - ["fb-watchman", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fbjs", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/fbjs-npm-3.0.4-7d85bbacfa-a1200e486b.zip/node_modules/fbjs/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:3.1.5"],\ - ["fbjs", "npm:3.0.4"],\ - ["fbjs-css-vars", "npm:1.0.2"],\ - ["loose-envify", "npm:1.4.0"],\ - ["object-assign", "npm:4.1.1"],\ - ["promise", "npm:7.3.1"],\ - ["setimmediate", "npm:1.0.5"],\ - ["ua-parser-js", "npm:0.7.33"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fbjs-css-vars", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/fbjs-css-vars-npm-1.0.2-c233f16598-72baf6d22c.zip/node_modules/fbjs-css-vars/",\ - "packageDependencies": [\ - ["fbjs-css-vars", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fd-slicer", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/fd-slicer-npm-1.1.0-3cade0050a-db3e34fa48.zip/node_modules/fd-slicer/",\ - "packageDependencies": [\ - ["fd-slicer", "npm:1.1.0"],\ - ["pend", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["figures", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/figures-npm-2.0.0-f2db814eec-0e5bba8d2b.zip/node_modules/figures/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:1.0.5"],\ - ["figures", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/figures-npm-3.2.0-85d357e955-a3bf94e001.zip/node_modules/figures/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:1.0.5"],\ - ["figures", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["file-entry-cache", [\ - ["npm:6.0.1", {\ - "packageLocation": "./.yarn/cache/file-entry-cache-npm-6.0.1-31965cf0af-099bb9d4ab.zip/node_modules/file-entry-cache/",\ - "packageDependencies": [\ - ["file-entry-cache", "npm:6.0.1"],\ - ["flat-cache", "npm:3.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["file-loader", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/file-loader-npm-3.0.1-380d762254-4d5cdbd60a.zip/node_modules/file-loader/",\ - "packageDependencies": [\ - ["file-loader", "npm:3.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:3.0.1", {\ - "packageLocation": "./.yarn/__virtual__/file-loader-virtual-666098e608/0/cache/file-loader-npm-3.0.1-380d762254-4d5cdbd60a.zip/node_modules/file-loader/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["file-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:3.0.1"],\ - ["loader-utils", "npm:1.4.2"],\ - ["schema-utils", "npm:1.0.0"],\ - ["webpack", null]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["file-type", [\ - ["npm:10.11.0", {\ - "packageLocation": "./.yarn/cache/file-type-npm-10.11.0-5cb3c01bcd-787ab64574.zip/node_modules/file-type/",\ - "packageDependencies": [\ - ["file-type", "npm:10.11.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["filelist", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-4b436fa944.zip/node_modules/filelist/",\ - "packageDependencies": [\ - ["filelist", "npm:1.0.4"],\ - ["minimatch", "npm:5.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fill-range", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/fill-range-npm-4.0.0-95a6e45784-68be23b3c4.zip/node_modules/fill-range/",\ - "packageDependencies": [\ - ["extend-shallow", "npm:2.0.1"],\ - ["fill-range", "npm:4.0.0"],\ - ["is-number", "npm:3.0.0"],\ - ["repeat-string", "npm:1.6.1"],\ - ["to-regex-range", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.1", {\ - "packageLocation": "./.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip/node_modules/fill-range/",\ - "packageDependencies": [\ - ["fill-range", "npm:7.1.1"],\ - ["to-regex-range", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["finalhandler", [\ - ["npm:1.3.1", {\ - "packageLocation": "./.yarn/cache/finalhandler-npm-1.3.1-690d7d7e6d-4babe72969.zip/node_modules/finalhandler/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["encodeurl", "npm:2.0.0"],\ - ["escape-html", "npm:1.0.3"],\ - ["finalhandler", "npm:1.3.1"],\ - ["on-finished", "npm:2.4.1"],\ - ["parseurl", "npm:1.3.3"],\ - ["statuses", "npm:2.0.1"],\ - ["unpipe", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["find", [\ - ["npm:0.2.9", {\ - "packageLocation": "./.yarn/cache/find-npm-0.2.9-cd4cce72f0-0a2f32c5de.zip/node_modules/find/",\ - "packageDependencies": [\ - ["find", "npm:0.2.9"],\ - ["traverse-chain", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["find-cache-dir", [\ - ["npm:3.3.2", {\ - "packageLocation": "./.yarn/cache/find-cache-dir-npm-3.3.2-836e68dd83-3907c2e0b1.zip/node_modules/find-cache-dir/",\ - "packageDependencies": [\ - ["commondir", "npm:1.0.1"],\ - ["find-cache-dir", "npm:3.3.2"],\ - ["make-dir", "npm:3.1.0"],\ - ["pkg-dir", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["find-root", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/find-root-npm-1.1.0-a16a94005f-caa799c976.zip/node_modules/find-root/",\ - "packageDependencies": [\ - ["find-root", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["find-up", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip/node_modules/find-up/",\ - "packageDependencies": [\ - ["find-up", "npm:4.1.0"],\ - ["locate-path", "npm:5.0.0"],\ - ["path-exists", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip/node_modules/find-up/",\ - "packageDependencies": [\ - ["find-up", "npm:5.0.0"],\ - ["locate-path", "npm:6.0.0"],\ - ["path-exists", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["flat-cache", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/flat-cache-npm-3.0.4-ee77e5911e-9fe5d0cb97.zip/node_modules/flat-cache/",\ - "packageDependencies": [\ - ["flat-cache", "npm:3.0.4"],\ - ["flatted", "npm:3.2.7"],\ - ["rimraf", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["flatted", [\ - ["npm:3.2.7", {\ - "packageLocation": "./.yarn/cache/flatted-npm-3.2.7-0da10b7c56-427633049d.zip/node_modules/flatted/",\ - "packageDependencies": [\ - ["flatted", "npm:3.2.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["for-in", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/for-in-npm-1.0.2-37e3d7aae5-09f4ae93ce.zip/node_modules/for-in/",\ - "packageDependencies": [\ - ["for-in", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["form-data", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/form-data-npm-4.0.0-916facec2d-7264aa760a.zip/node_modules/form-data/",\ - "packageDependencies": [\ - ["asynckit", "npm:0.4.0"],\ - ["combined-stream", "npm:1.0.8"],\ - ["form-data", "npm:4.0.0"],\ - ["mime-types", "npm:2.1.35"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["formidable", [\ - ["npm:3.5.4", {\ - "packageLocation": "./.yarn/cache/formidable-npm-3.5.4-a3473998f7-4645e6ce3d.zip/node_modules/formidable/",\ - "packageDependencies": [\ - ["@paralleldrive/cuid2", "npm:2.2.2"],\ - ["dezalgo", "npm:1.0.4"],\ - ["formidable", "npm:3.5.4"],\ - ["once", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["formik", [\ - ["npm:2.2.9", {\ - "packageLocation": "./.yarn/cache/formik-npm-2.2.9-0e8cb516ca-c7b4c6ee9c.zip/node_modules/formik/",\ - "packageDependencies": [\ - ["formik", "npm:2.2.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.2.9", {\ - "packageLocation": "./.yarn/__virtual__/formik-virtual-e7111043c9/0/cache/formik-npm-2.2.9-0e8cb516ca-c7b4c6ee9c.zip/node_modules/formik/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["deepmerge", "npm:2.2.1"],\ - ["formik", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.2.9"],\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["lodash", "npm:4.17.21"],\ - ["lodash-es", "npm:4.17.21"],\ - ["react", "npm:18.2.0"],\ - ["react-fast-compare", "npm:2.0.4"],\ - ["tiny-warning", "npm:1.0.3"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["forwarded", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/forwarded-npm-0.2.0-6473dabe35-29ba9fd347.zip/node_modules/forwarded/",\ - "packageDependencies": [\ - ["forwarded", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fragment-cache", [\ - ["npm:0.2.1", {\ - "packageLocation": "./.yarn/cache/fragment-cache-npm-0.2.1-407fe74319-1cbbd0b011.zip/node_modules/fragment-cache/",\ - "packageDependencies": [\ - ["fragment-cache", "npm:0.2.1"],\ - ["map-cache", "npm:0.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["framer-motion", [\ - ["npm:7.3.6", {\ - "packageLocation": "./.yarn/cache/framer-motion-npm-7.3.6-2847458559-cd62d469a5.zip/node_modules/framer-motion/",\ - "packageDependencies": [\ - ["framer-motion", "npm:7.3.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.3.6", {\ - "packageLocation": "./.yarn/__virtual__/framer-motion-virtual-7c0728e85a/0/cache/framer-motion-npm-7.3.6-2847458559-cd62d469a5.zip/node_modules/framer-motion/",\ - "packageDependencies": [\ - ["@emotion/is-prop-valid", "npm:0.8.8"],\ - ["@motionone/dom", "npm:10.13.1"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["framer-motion", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.3.6"],\ - ["framesync", "npm:6.1.2"],\ - ["hey-listen", "npm:1.0.8"],\ - ["popmotion", "npm:11.0.5"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["style-value-types", "npm:5.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["framesync", [\ - ["npm:6.1.2", {\ - "packageLocation": "./.yarn/cache/framesync-npm-6.1.2-3eeffdf40f-741161b897.zip/node_modules/framesync/",\ - "packageDependencies": [\ - ["framesync", "npm:6.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fresh", [\ - ["npm:0.5.2", {\ - "packageLocation": "./.yarn/cache/fresh-npm-0.5.2-ad2bb4c0a2-64c88e489b.zip/node_modules/fresh/",\ - "packageDependencies": [\ - ["fresh", "npm:0.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs-extra", [\ - ["npm:11.2.0", {\ - "packageLocation": "./.yarn/cache/fs-extra-npm-11.2.0-6783080799-0579bf6726.zip/node_modules/fs-extra/",\ - "packageDependencies": [\ - ["fs-extra", "npm:11.2.0"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jsonfile", "npm:6.1.0"],\ - ["universalify", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.1.0", {\ - "packageLocation": "./.yarn/cache/fs-extra-npm-8.1.0-197473387f-6fb12449f5.zip/node_modules/fs-extra/",\ - "packageDependencies": [\ - ["fs-extra", "npm:8.1.0"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jsonfile", "npm:4.0.0"],\ - ["universalify", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.1.0", {\ - "packageLocation": "./.yarn/cache/fs-extra-npm-9.1.0-983c2ddb4c-08600da1b4.zip/node_modules/fs-extra/",\ - "packageDependencies": [\ - ["at-least-node", "npm:1.0.0"],\ - ["fs-extra", "npm:9.1.0"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jsonfile", "npm:6.1.0"],\ - ["universalify", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs-merger", [\ - ["npm:3.2.1", {\ - "packageLocation": "./.yarn/cache/fs-merger-npm-3.2.1-6967780b91-67d74fa30f.zip/node_modules/fs-merger/",\ - "packageDependencies": [\ - ["broccoli-node-api", "npm:1.7.0"],\ - ["broccoli-node-info", "npm:2.2.0"],\ - ["fs-extra", "npm:8.1.0"],\ - ["fs-merger", "npm:3.2.1"],\ - ["fs-tree-diff", "npm:2.0.1"],\ - ["walk-sync", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs-minipass", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-03191781e9.zip/node_modules/fs-minipass/",\ - "packageDependencies": [\ - ["fs-minipass", "npm:2.1.0"],\ - ["minipass", "npm:3.3.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs-mkdirp-stream", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/fs-mkdirp-stream-npm-2.0.1-839da3d4cb-9fefd9fa3d.zip/node_modules/fs-mkdirp-stream/",\ - "packageDependencies": [\ - ["fs-mkdirp-stream", "npm:2.0.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["streamx", "npm:2.20.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs-tree-diff", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/fs-tree-diff-npm-2.0.1-1c926a4428-c1e9e77b8a.zip/node_modules/fs-tree-diff/",\ - "packageDependencies": [\ - ["@types/symlink-or-copy", "npm:1.2.0"],\ - ["fs-tree-diff", "npm:2.0.1"],\ - ["heimdalljs-logger", "npm:0.1.10"],\ - ["object-assign", "npm:4.1.1"],\ - ["path-posix", "npm:1.0.0"],\ - ["symlink-or-copy", "npm:1.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fs.realpath", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-e703107c28.zip/node_modules/fs.realpath/",\ - "packageDependencies": [\ - ["fs.realpath", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["fsevents", [\ - ["patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1", {\ - "packageLocation": "./.yarn/unplugged/fsevents-patch-19706e7e35/node_modules/fsevents/",\ - "packageDependencies": [\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ - ["node-gyp", "npm:9.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["function-bind", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/function-bind-npm-1.1.1-b56b322ae9-d83f296803.zip/node_modules/function-bind/",\ - "packageDependencies": [\ - ["function-bind", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/function-bind-npm-1.1.2-7a55be9b03-185e20d20f.zip/node_modules/function-bind/",\ - "packageDependencies": [\ - ["function-bind", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["function.prototype.name", [\ - ["npm:1.1.5", {\ - "packageLocation": "./.yarn/cache/function.prototype.name-npm-1.1.5-e776a642bb-5d426e5a38.zip/node_modules/function.prototype.name/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["function.prototype.name", "npm:1.1.5"],\ - ["functions-have-names", "npm:1.2.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["functions-have-names", [\ - ["npm:1.2.3", {\ - "packageLocation": "./.yarn/cache/functions-have-names-npm-1.2.3-e5cf1e2208-0ddfd3ed10.zip/node_modules/functions-have-names/",\ - "packageDependencies": [\ - ["functions-have-names", "npm:1.2.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["gauge", [\ - ["npm:4.0.4", {\ - "packageLocation": "./.yarn/cache/gauge-npm-4.0.4-8f878385e9-09535dd53b.zip/node_modules/gauge/",\ - "packageDependencies": [\ - ["aproba", "npm:2.0.0"],\ - ["color-support", "npm:1.1.3"],\ - ["console-control-strings", "npm:1.1.0"],\ - ["gauge", "npm:4.0.4"],\ - ["has-unicode", "npm:2.0.1"],\ - ["signal-exit", "npm:3.0.7"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wide-align", "npm:1.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["gensync", [\ - ["npm:1.0.0-beta.2", {\ - "packageLocation": "./.yarn/cache/gensync-npm-1.0.0-beta.2-224666d72f-17d8333460.zip/node_modules/gensync/",\ - "packageDependencies": [\ - ["gensync", "npm:1.0.0-beta.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-caller-file", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip/node_modules/get-caller-file/",\ - "packageDependencies": [\ - ["get-caller-file", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-intrinsic", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/get-intrinsic-npm-1.1.2-89f421122b-0364e4d453.zip/node_modules/get-intrinsic/",\ - "packageDependencies": [\ - ["function-bind", "npm:1.1.1"],\ - ["get-intrinsic", "npm:1.1.2"],\ - ["has", "npm:1.0.3"],\ - ["has-symbols", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.2.4", {\ - "packageLocation": "./.yarn/cache/get-intrinsic-npm-1.2.4-1dad3427b2-85bbf4b234.zip/node_modules/get-intrinsic/",\ - "packageDependencies": [\ - ["es-errors", "npm:1.3.0"],\ - ["function-bind", "npm:1.1.2"],\ - ["get-intrinsic", "npm:1.2.4"],\ - ["has-proto", "npm:1.0.3"],\ - ["has-symbols", "npm:1.0.3"],\ - ["hasown", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-own-enumerable-property-symbols", [\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-8f0331f141.zip/node_modules/get-own-enumerable-property-symbols/",\ - "packageDependencies": [\ - ["get-own-enumerable-property-symbols", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-package-type", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/get-package-type-npm-0.1.0-6c70cdc8ab-bba0811116.zip/node_modules/get-package-type/",\ - "packageDependencies": [\ - ["get-package-type", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-stream", [\ - ["npm:5.2.0", {\ - "packageLocation": "./.yarn/cache/get-stream-npm-5.2.0-2cfd3b452b-13a73148dc.zip/node_modules/get-stream/",\ - "packageDependencies": [\ - ["get-stream", "npm:5.2.0"],\ - ["pump", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.1", {\ - "packageLocation": "./.yarn/cache/get-stream-npm-6.0.1-83e51a4642-781266d297.zip/node_modules/get-stream/",\ - "packageDependencies": [\ - ["get-stream", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-symbol-description", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/get-symbol-description-npm-1.0.0-9c95a4bc1f-7e5f298afe.zip/node_modules/get-symbol-description/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["get-intrinsic", "npm:1.1.2"],\ - ["get-symbol-description", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-uri", [\ - ["npm:6.0.3", {\ - "packageLocation": "./.yarn/cache/get-uri-npm-6.0.3-48f26c742e-a807f252c9.zip/node_modules/get-uri/",\ - "packageDependencies": [\ - ["basic-ftp", "npm:5.0.5"],\ - ["data-uri-to-buffer", "npm:6.0.2"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["fs-extra", "npm:11.2.0"],\ - ["get-uri", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["get-value", [\ - ["npm:2.0.6", {\ - "packageLocation": "./.yarn/cache/get-value-npm-2.0.6-03cd422e0a-5c3b99cb53.zip/node_modules/get-value/",\ - "packageDependencies": [\ - ["get-value", "npm:2.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["glob", [\ - ["npm:7.2.3", {\ - "packageLocation": "./.yarn/cache/glob-npm-7.2.3-2d866d17a5-59452a9202.zip/node_modules/glob/",\ - "packageDependencies": [\ - ["fs.realpath", "npm:1.0.0"],\ - ["glob", "npm:7.2.3"],\ - ["inflight", "npm:1.0.6"],\ - ["inherits", "npm:2.0.4"],\ - ["minimatch", "npm:3.1.2"],\ - ["once", "npm:1.4.0"],\ - ["path-is-absolute", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.0.3", {\ - "packageLocation": "./.yarn/cache/glob-npm-8.0.3-750f909025-cd002c0401.zip/node_modules/glob/",\ - "packageDependencies": [\ - ["fs.realpath", "npm:1.0.0"],\ - ["glob", "npm:8.0.3"],\ - ["inflight", "npm:1.0.6"],\ - ["inherits", "npm:2.0.4"],\ - ["minimatch", "npm:5.1.0"],\ - ["once", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["glob-parent", [\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip/node_modules/glob-parent/",\ - "packageDependencies": [\ - ["glob-parent", "npm:5.1.2"],\ - ["is-glob", "npm:4.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.2", {\ - "packageLocation": "./.yarn/cache/glob-parent-npm-6.0.2-2cbef12738-c13ee97978.zip/node_modules/glob-parent/",\ - "packageDependencies": [\ - ["glob-parent", "npm:6.0.2"],\ - ["is-glob", "npm:4.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["glob-stream", [\ - ["npm:8.0.2", {\ - "packageLocation": "./.yarn/cache/glob-stream-npm-8.0.2-1c03b76c1f-cda46c02b6.zip/node_modules/glob-stream/",\ - "packageDependencies": [\ - ["@gulpjs/to-absolute-glob", "npm:4.0.0"],\ - ["anymatch", "npm:3.1.3"],\ - ["fastq", "npm:1.17.1"],\ - ["glob-parent", "npm:5.1.2"],\ - ["glob-stream", "npm:8.0.2"],\ - ["is-glob", "npm:4.0.3"],\ - ["is-negated-glob", "npm:1.0.0"],\ - ["normalize-path", "npm:3.0.0"],\ - ["streamx", "npm:2.13.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["glob-to-regexp", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/glob-to-regexp-npm-0.3.0-4f55888857-a716708f78.zip/node_modules/glob-to-regexp/",\ - "packageDependencies": [\ - ["glob-to-regexp", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.4.1", {\ - "packageLocation": "./.yarn/cache/glob-to-regexp-npm-0.4.1-cd697e0fc7-9009529195.zip/node_modules/glob-to-regexp/",\ - "packageDependencies": [\ - ["glob-to-regexp", "npm:0.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["globals", [\ - ["npm:11.12.0", {\ - "packageLocation": "./.yarn/cache/globals-npm-11.12.0-1fa7f41a6c-9f054fa38f.zip/node_modules/globals/",\ - "packageDependencies": [\ - ["globals", "npm:11.12.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:13.24.0", {\ - "packageLocation": "./.yarn/cache/globals-npm-13.24.0-cc7713139c-62c5b1997d.zip/node_modules/globals/",\ - "packageDependencies": [\ - ["globals", "npm:13.24.0"],\ - ["type-fest", "npm:0.20.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["globby", [\ - ["npm:11.1.0", {\ - "packageLocation": "./.yarn/cache/globby-npm-11.1.0-bdcdf20c71-288e95e310.zip/node_modules/globby/",\ - "packageDependencies": [\ - ["array-union", "npm:2.1.0"],\ - ["dir-glob", "npm:3.0.1"],\ - ["fast-glob", "npm:3.2.11"],\ - ["globby", "npm:11.1.0"],\ - ["ignore", "npm:5.2.0"],\ - ["merge2", "npm:1.4.1"],\ - ["slash", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/globby-npm-6.1.0-590bfb2681-18109d6b9d.zip/node_modules/globby/",\ - "packageDependencies": [\ - ["array-union", "npm:1.0.2"],\ - ["glob", "npm:7.2.3"],\ - ["globby", "npm:6.1.0"],\ - ["object-assign", "npm:4.1.1"],\ - ["pify", "npm:2.3.0"],\ - ["pinkie-promise", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.0.2", {\ - "packageLocation": "./.yarn/cache/globby-npm-8.0.2-9c4bc6b4e1-abaa743ed2.zip/node_modules/globby/",\ - "packageDependencies": [\ - ["array-union", "npm:1.0.2"],\ - ["dir-glob", "npm:2.0.0"],\ - ["fast-glob", "npm:2.2.7"],\ - ["glob", "npm:7.2.3"],\ - ["globby", "npm:8.0.2"],\ - ["ignore", "npm:3.3.10"],\ - ["pify", "npm:3.0.0"],\ - ["slash", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["gopd", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/gopd-npm-1.0.1-10c1d0b534-5fbc7ad57b.zip/node_modules/gopd/",\ - "packageDependencies": [\ - ["get-intrinsic", "npm:1.2.4"],\ - ["gopd", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graceful-fs", [\ - ["npm:4.2.10", {\ - "packageLocation": "./.yarn/cache/graceful-fs-npm-4.2.10-79c70989ca-0c83c52b62.zip/node_modules/graceful-fs/",\ - "packageDependencies": [\ - ["graceful-fs", "npm:4.2.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.2.11", {\ - "packageLocation": "./.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-bf152d0ed1.zip/node_modules/graceful-fs/",\ - "packageDependencies": [\ - ["graceful-fs", "npm:4.2.11"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graphemer", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/graphemer-npm-1.4.0-0627732d35-6dd60dba97.zip/node_modules/graphemer/",\ - "packageDependencies": [\ - ["graphemer", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graphql", [\ - ["npm:16.9.0", {\ - "packageLocation": "./.yarn/cache/graphql-npm-16.9.0-a36f71845f-5833f82bb6.zip/node_modules/graphql/",\ - "packageDependencies": [\ - ["graphql", "npm:16.9.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graphql-config", [\ - ["npm:5.0.3", {\ - "packageLocation": "./.yarn/cache/graphql-config-npm-5.0.3-54813b1195-be7667ea26.zip/node_modules/graphql-config/",\ - "packageDependencies": [\ - ["graphql-config", "npm:5.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:5.0.3", {\ - "packageLocation": "./.yarn/__virtual__/graphql-config-virtual-ebf8839b21/0/cache/graphql-config-npm-5.0.3-54813b1195-be7667ea26.zip/node_modules/graphql-config/",\ - "packageDependencies": [\ - ["@graphql-tools/graphql-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/json-file-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.1"],\ - ["@graphql-tools/load", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/merge", "virtual:074de4dbd2214ff5c93772188fb056cf823461fcfbaee16186cc554351ccc073947accf6dc11479ac292ad7b597b10dfdcda69119b0ab04d5899d9ed52009a0a#npm:9.0.3"],\ - ["@graphql-tools/url-loader", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.0.2"],\ - ["@graphql-tools/utils", "virtual:44d00fbedb82008ff99003ee8be08dbd6369604726a8022cab2fd0a5670e152c6a069766843b39caff4e76a1cd6e4a14c319f4541d1b3b03bd847156a13310a9#npm:10.1.2"],\ - ["@types/cosmiconfig-toml-loader", null],\ - ["@types/graphql", null],\ - ["cosmiconfig", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:8.3.6"],\ - ["cosmiconfig-toml-loader", null],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-config", "virtual:cd321fe1446172a556a2533f6615d1e27b1a98f246e610963a578b4295e4a14fdfacc83d98b5c2ee1bcdb2f309522aac4bd99f4880927386cc1bd849af313e89#npm:5.0.3"],\ - ["jiti", "npm:1.21.0"],\ - ["minimatch", "npm:4.2.3"],\ - ["string-env-interpolation", "npm:1.0.1"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/cosmiconfig-toml-loader",\ - "@types/graphql",\ - "cosmiconfig-toml-loader",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graphql-request", [\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/graphql-request-npm-6.1.0-d265ce919d-a9c6f2eeaa.zip/node_modules/graphql-request/",\ - "packageDependencies": [\ - ["graphql-request", "npm:6.1.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6795cf38976456a9da7dbfcb7f2eced3581dbb1f1cdf16fa3fca3909c41b5ba349cf3f29407050ae75dd12ede3739c3faa09e770bca90ce610deb4f7d6cbb837#npm:6.1.0", {\ - "packageLocation": "./.yarn/__virtual__/graphql-request-virtual-4dbb3c849e/0/cache/graphql-request-npm-6.1.0-d265ce919d-a9c6f2eeaa.zip/node_modules/graphql-request/",\ - "packageDependencies": [\ - ["@graphql-typed-document-node/core", "virtual:b30c0460c7e3fbb2a841b19da470e582233e9b18e69aa72c2861c8b620b140b4581e46c598570b2431d80282443c166d87aba9c3cfb357900e1b8b5e6f62d1b6#npm:3.2.0"],\ - ["@types/graphql", null],\ - ["cross-fetch", "npm:3.1.5"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-request", "virtual:6795cf38976456a9da7dbfcb7f2eced3581dbb1f1cdf16fa3fca3909c41b5ba349cf3f29407050ae75dd12ede3739c3faa09e770bca90ce610deb4f7d6cbb837#npm:6.1.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graphql-tag", [\ - ["npm:2.12.6", {\ - "packageLocation": "./.yarn/cache/graphql-tag-npm-2.12.6-99a5a7f6de-23a2bc1d3f.zip/node_modules/graphql-tag/",\ - "packageDependencies": [\ - ["graphql-tag", "npm:2.12.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6", {\ - "packageLocation": "./.yarn/__virtual__/graphql-tag-virtual-d1831253a1/0/cache/graphql-tag-npm-2.12.6-99a5a7f6de-23a2bc1d3f.zip/node_modules/graphql-tag/",\ - "packageDependencies": [\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["graphql-ws", [\ - ["npm:5.16.0", {\ - "packageLocation": "./.yarn/cache/graphql-ws-npm-5.16.0-98146e34fe-e56d903920.zip/node_modules/graphql-ws/",\ - "packageDependencies": [\ - ["graphql-ws", "npm:5.16.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:aa308e849afde1efb91bc483aaa2b2944766d1d052f7b43837a755bd8c2ae0a0681422e9369a134c52733cc64ae026edb2bb9773398f500a2299768d304a64e3#npm:5.16.0", {\ - "packageLocation": "./.yarn/__virtual__/graphql-ws-virtual-4e7f516402/0/cache/graphql-ws-npm-5.16.0-98146e34fe-e56d903920.zip/node_modules/graphql-ws/",\ - "packageDependencies": [\ - ["@types/graphql", null],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-ws", "virtual:aa308e849afde1efb91bc483aaa2b2944766d1d052f7b43837a755bd8c2ae0a0681422e9369a134c52733cc64ae026edb2bb9773398f500a2299768d304a64e3#npm:5.16.0"]\ - ],\ - "packagePeers": [\ - "@types/graphql",\ - "graphql"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["gulp-sort", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/gulp-sort-npm-2.0.0-d7ad8b8004-8645d80b26.zip/node_modules/gulp-sort/",\ - "packageDependencies": [\ - ["gulp-sort", "npm:2.0.0"],\ - ["through2", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["gzip-size", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/gzip-size-npm-6.0.0-d5b52fdbf1-2df97f3596.zip/node_modules/gzip-size/",\ - "packageDependencies": [\ - ["duplexer", "npm:0.1.2"],\ - ["gzip-size", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/has-npm-1.0.3-b7f00631c1-a449f3185b.zip/node_modules/has/",\ - "packageDependencies": [\ - ["function-bind", "npm:1.1.1"],\ - ["has", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-bigints", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/has-bigints-npm-1.0.2-52732e614d-4e0426c900.zip/node_modules/has-bigints/",\ - "packageDependencies": [\ - ["has-bigints", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-flag", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip/node_modules/has-flag/",\ - "packageDependencies": [\ - ["has-flag", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/",\ - "packageDependencies": [\ - ["has-flag", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-property-descriptors", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/has-property-descriptors-npm-1.0.0-56289b918d-a6d3f0a266.zip/node_modules/has-property-descriptors/",\ - "packageDependencies": [\ - ["get-intrinsic", "npm:1.1.2"],\ - ["has-property-descriptors", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/has-property-descriptors-npm-1.0.2-d7077d09f1-2d8c9ab8ce.zip/node_modules/has-property-descriptors/",\ - "packageDependencies": [\ - ["es-define-property", "npm:1.0.0"],\ - ["has-property-descriptors", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-proto", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/has-proto-npm-1.0.3-b598da2961-0b67c2c94e.zip/node_modules/has-proto/",\ - "packageDependencies": [\ - ["has-proto", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-symbols", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/has-symbols-npm-1.0.3-1986bff2c4-464f97a820.zip/node_modules/has-symbols/",\ - "packageDependencies": [\ - ["has-symbols", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-tostringtag", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/has-tostringtag-npm-1.0.0-b1fcf3ab55-95546e7132.zip/node_modules/has-tostringtag/",\ - "packageDependencies": [\ - ["has-symbols", "npm:1.0.3"],\ - ["has-tostringtag", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-unicode", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/has-unicode-npm-2.0.1-893adb4747-041b4293ad.zip/node_modules/has-unicode/",\ - "packageDependencies": [\ - ["has-unicode", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-value", [\ - ["npm:0.3.1", {\ - "packageLocation": "./.yarn/cache/has-value-npm-0.3.1-4a15b6c29f-29e2a1e657.zip/node_modules/has-value/",\ - "packageDependencies": [\ - ["get-value", "npm:2.0.6"],\ - ["has-value", "npm:0.3.1"],\ - ["has-values", "npm:0.1.4"],\ - ["isobject", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/has-value-npm-1.0.0-19d82fd04b-b9421d354e.zip/node_modules/has-value/",\ - "packageDependencies": [\ - ["get-value", "npm:2.0.6"],\ - ["has-value", "npm:1.0.0"],\ - ["has-values", "npm:1.0.0"],\ - ["isobject", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["has-values", [\ - ["npm:0.1.4", {\ - "packageLocation": "./.yarn/cache/has-values-npm-0.1.4-6b4397786d-ab1c4bcaf8.zip/node_modules/has-values/",\ - "packageDependencies": [\ - ["has-values", "npm:0.1.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/has-values-npm-1.0.0-890c077bbd-77e6693f73.zip/node_modules/has-values/",\ - "packageDependencies": [\ - ["has-values", "npm:1.0.0"],\ - ["is-number", "npm:3.0.0"],\ - ["kind-of", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["hasown", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/hasown-npm-2.0.2-80fe6c9901-7898a9c178.zip/node_modules/hasown/",\ - "packageDependencies": [\ - ["function-bind", "npm:1.1.2"],\ - ["hasown", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["header-case", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/header-case-npm-2.0.4-7d19e19e6d-571c83eeb2.zip/node_modules/header-case/",\ - "packageDependencies": [\ - ["capital-case", "npm:1.0.4"],\ - ["header-case", "npm:2.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["heimdalljs", [\ - ["npm:0.2.6", {\ - "packageLocation": "./.yarn/cache/heimdalljs-npm-0.2.6-a6a769af9c-ae31e21241.zip/node_modules/heimdalljs/",\ - "packageDependencies": [\ - ["heimdalljs", "npm:0.2.6"],\ - ["rsvp", "npm:3.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["heimdalljs-logger", [\ - ["npm:0.1.10", {\ - "packageLocation": "./.yarn/cache/heimdalljs-logger-npm-0.1.10-efa790c6e3-6f0affcaa9.zip/node_modules/heimdalljs-logger/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["heimdalljs", "npm:0.2.6"],\ - ["heimdalljs-logger", "npm:0.1.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["hey-listen", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/hey-listen-npm-1.0.8-adb7dae9da-744b5f4c18.zip/node_modules/hey-listen/",\ - "packageDependencies": [\ - ["hey-listen", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["hoist-non-react-statics", [\ - ["npm:3.3.2", {\ - "packageLocation": "./.yarn/cache/hoist-non-react-statics-npm-3.3.2-e7b709e6c1-1acbe85f33.zip/node_modules/hoist-non-react-statics/",\ - "packageDependencies": [\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["react-is", "npm:16.13.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["html-encoding-sniffer", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/html-encoding-sniffer-npm-3.0.0-daac3dfe41-707a812ec2.zip/node_modules/html-encoding-sniffer/",\ - "packageDependencies": [\ - ["html-encoding-sniffer", "npm:3.0.0"],\ - ["whatwg-encoding", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["html-escaper", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/html-escaper-npm-2.0.2-38e51ef294-034d74029d.zip/node_modules/html-escaper/",\ - "packageDependencies": [\ - ["html-escaper", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["html-parse-stringify", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/html-parse-stringify-npm-3.0.1-5762cd4b01-8743b76cc5.zip/node_modules/html-parse-stringify/",\ - "packageDependencies": [\ - ["html-parse-stringify", "npm:3.0.1"],\ - ["void-elements", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["htmlparser2", [\ - ["npm:9.1.0", {\ - "packageLocation": "./.yarn/cache/htmlparser2-npm-9.1.0-5ef8394060-6352fa2a54.zip/node_modules/htmlparser2/",\ - "packageDependencies": [\ - ["domelementtype", "npm:2.3.0"],\ - ["domhandler", "npm:5.0.3"],\ - ["domutils", "npm:3.1.0"],\ - ["entities", "npm:4.5.0"],\ - ["htmlparser2", "npm:9.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["http-cache-semantics", [\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-362d5ed66b.zip/node_modules/http-cache-semantics/",\ - "packageDependencies": [\ - ["http-cache-semantics", "npm:4.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["http-errors", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/http-errors-npm-2.0.0-3f1c503428-0e7f76ee8f.zip/node_modules/http-errors/",\ - "packageDependencies": [\ - ["depd", "npm:2.0.0"],\ - ["http-errors", "npm:2.0.0"],\ - ["inherits", "npm:2.0.4"],\ - ["setprototypeof", "npm:1.2.0"],\ - ["statuses", "npm:2.0.1"],\ - ["toidentifier", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["http-link-header", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/http-link-header-npm-1.1.3-640247edca-fae99528f5.zip/node_modules/http-link-header/",\ - "packageDependencies": [\ - ["http-link-header", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["http-proxy-agent", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/http-proxy-agent-npm-5.0.0-7f1f121b83-5ee19423bc.zip/node_modules/http-proxy-agent/",\ - "packageDependencies": [\ - ["@tootallnate/once", "npm:2.0.0"],\ - ["agent-base", "npm:6.0.2"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["http-proxy-agent", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.2", {\ - "packageLocation": "./.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-d062acfa0c.zip/node_modules/http-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["http-proxy-agent", "npm:7.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["https-proxy-agent", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/https-proxy-agent-npm-5.0.1-42d65f358e-f0dce7bdca.zip/node_modules/https-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:6.0.2"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["https-proxy-agent", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.4", {\ - "packageLocation": "./.yarn/cache/https-proxy-agent-npm-7.0.4-a51e13f5dc-405fe582bb.zip/node_modules/https-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["https-proxy-agent", "npm:7.0.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.6", {\ - "packageLocation": "./.yarn/cache/https-proxy-agent-npm-7.0.6-27a95c2690-784b628cbd.zip/node_modules/https-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.3"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["https-proxy-agent", "npm:7.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["human-signals", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/human-signals-npm-2.1.0-f75815481d-df59be9e0a.zip/node_modules/human-signals/",\ - "packageDependencies": [\ - ["human-signals", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/human-signals-npm-3.0.1-0c557ca74a-0b2741651e.zip/node_modules/human-signals/",\ - "packageDependencies": [\ - ["human-signals", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["humanize-ms", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/humanize-ms-npm-1.2.1-e942bd7329-9c7a74a282.zip/node_modules/humanize-ms/",\ - "packageDependencies": [\ - ["humanize-ms", "npm:1.2.1"],\ - ["ms", "npm:2.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["husky", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/husky-npm-8.0.1-85fede8470-0f4c116284.zip/node_modules/husky/",\ - "packageDependencies": [\ - ["husky", "npm:8.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["hyphenate-style-name", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/hyphenate-style-name-npm-1.0.4-a79c7da506-d37883e6b7.zip/node_modules/hyphenate-style-name/",\ - "packageDependencies": [\ - ["hyphenate-style-name", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["i18next", [\ - ["npm:21.9.2", {\ - "packageLocation": "./.yarn/cache/i18next-npm-21.9.2-2e8a124cb7-6afb971a70.zip/node_modules/i18next/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["i18next", "npm:21.9.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:23.16.5", {\ - "packageLocation": "./.yarn/cache/i18next-npm-23.16.5-65447bf557-842b6d35d6.zip/node_modules/i18next/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["i18next", "npm:23.16.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["i18next-browser-languagedetector", [\ - ["npm:6.1.5", {\ - "packageLocation": "./.yarn/cache/i18next-browser-languagedetector-npm-6.1.5-8aa079e608-d8bd6e6edc.zip/node_modules/i18next-browser-languagedetector/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["i18next-browser-languagedetector", "npm:6.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["i18next-http-backend", [\ - ["npm:1.4.4", {\ - "packageLocation": "./.yarn/cache/i18next-http-backend-npm-1.4.4-91f393585e-4105752e90.zip/node_modules/i18next-http-backend/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:3.1.5"],\ - ["i18next-http-backend", "npm:1.4.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["i18next-parser", [\ - ["npm:9.0.2", {\ - "packageLocation": "./.yarn/cache/i18next-parser-npm-9.0.2-766c396452-37c1ae7917.zip/node_modules/i18next-parser/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["broccoli-plugin", "npm:4.0.7"],\ - ["cheerio", "npm:1.0.0"],\ - ["colors", "npm:1.4.0"],\ - ["commander", "npm:12.1.0"],\ - ["eol", "npm:0.9.1"],\ - ["esbuild", "npm:0.23.1"],\ - ["fs-extra", "npm:11.2.0"],\ - ["gulp-sort", "npm:2.0.0"],\ - ["i18next", "npm:23.16.5"],\ - ["i18next-parser", "npm:9.0.2"],\ - ["js-yaml", "npm:4.1.0"],\ - ["lilconfig", "npm:3.1.2"],\ - ["rsvp", "npm:4.8.5"],\ - ["sort-keys", "npm:5.0.0"],\ - ["typescript", "patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40"],\ - ["vinyl", "npm:3.0.0"],\ - ["vinyl-fs", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["iconv-lite", [\ - ["npm:0.4.24", {\ - "packageLocation": "./.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-6d3a2dac6e.zip/node_modules/iconv-lite/",\ - "packageDependencies": [\ - ["iconv-lite", "npm:0.4.24"],\ - ["safer-buffer", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.6.3", {\ - "packageLocation": "./.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-24e3292dd3.zip/node_modules/iconv-lite/",\ - "packageDependencies": [\ - ["iconv-lite", "npm:0.6.3"],\ - ["safer-buffer", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["idb", [\ - ["npm:7.0.2", {\ - "packageLocation": "./.yarn/cache/idb-npm-7.0.2-adc0227452-c82a470e2b.zip/node_modules/idb/",\ - "packageDependencies": [\ - ["idb", "npm:7.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ieee754", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-d9f2557a59.zip/node_modules/ieee754/",\ - "packageDependencies": [\ - ["ieee754", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ignore", [\ - ["npm:3.3.10", {\ - "packageLocation": "./.yarn/cache/ignore-npm-3.3.10-baaf3519b5-7cbe87d9ed.zip/node_modules/ignore/",\ - "packageDependencies": [\ - ["ignore", "npm:3.3.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.2.0", {\ - "packageLocation": "./.yarn/cache/ignore-npm-5.2.0-fc4b58a4f3-30283f05fb.zip/node_modules/ignore/",\ - "packageDependencies": [\ - ["ignore", "npm:5.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.3.1", {\ - "packageLocation": "./.yarn/cache/ignore-npm-5.3.1-f6947c5df7-0a884c2fbc.zip/node_modules/ignore/",\ - "packageDependencies": [\ - ["ignore", "npm:5.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["image-ssim", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/image-ssim-npm-0.2.0-baf7d3dd2c-b682c4902a.zip/node_modules/image-ssim/",\ - "packageDependencies": [\ - ["image-ssim", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["imagemin", [\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/imagemin-npm-6.1.0-b6de9acdef-f79203b5b4.zip/node_modules/imagemin/",\ - "packageDependencies": [\ - ["file-type", "npm:10.11.0"],\ - ["globby", "npm:8.0.2"],\ - ["imagemin", "npm:6.1.0"],\ - ["make-dir", "npm:1.3.0"],\ - ["p-pipe", "npm:1.2.0"],\ - ["pify", "npm:4.0.1"],\ - ["replace-ext", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["img-loader", [\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/img-loader-npm-3.0.2-c134774b54-0c729b110d.zip/node_modules/img-loader/",\ - "packageDependencies": [\ - ["img-loader", "npm:3.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:3.0.2", {\ - "packageLocation": "./.yarn/__virtual__/img-loader-virtual-d5a40fc0f8/0/cache/img-loader-npm-3.0.2-c134774b54-0c729b110d.zip/node_modules/img-loader/",\ - "packageDependencies": [\ - ["@types/imagemin", null],\ - ["imagemin", "npm:6.1.0"],\ - ["img-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:3.0.2"],\ - ["loader-utils", "npm:1.4.2"]\ - ],\ - "packagePeers": [\ - "@types/imagemin",\ - "imagemin"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["immutable", [\ - ["npm:3.7.6", {\ - "packageLocation": "./.yarn/cache/immutable-npm-3.7.6-1c13b39359-4f2cc2e0b6.zip/node_modules/immutable/",\ - "packageDependencies": [\ - ["immutable", "npm:3.7.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["import-fresh", [\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/import-fresh-npm-3.3.0-3e34265ca9-2cacfad06e.zip/node_modules/import-fresh/",\ - "packageDependencies": [\ - ["import-fresh", "npm:3.3.0"],\ - ["parent-module", "npm:1.0.1"],\ - ["resolve-from", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["import-from", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/import-from-npm-4.0.0-e5a38cbb8a-1fa29c05b0.zip/node_modules/import-from/",\ - "packageDependencies": [\ - ["import-from", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["import-local", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/import-local-npm-3.1.0-8960af5e51-bfcdb63b5e.zip/node_modules/import-local/",\ - "packageDependencies": [\ - ["import-local", "npm:3.1.0"],\ - ["pkg-dir", "npm:4.2.0"],\ - ["resolve-cwd", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["imurmurhash", [\ - ["npm:0.1.4", {\ - "packageLocation": "./.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-2d30b157a9.zip/node_modules/imurmurhash/",\ - "packageDependencies": [\ - ["imurmurhash", "npm:0.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["indent-string", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/indent-string-npm-4.0.0-7b717435b2-cd3f5cbc9c.zip/node_modules/indent-string/",\ - "packageDependencies": [\ - ["indent-string", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["infer-owner", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/infer-owner-npm-1.0.4-685ac3d2af-181e732764.zip/node_modules/infer-owner/",\ - "packageDependencies": [\ - ["infer-owner", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["inflight", [\ - ["npm:1.0.6", {\ - "packageLocation": "./.yarn/cache/inflight-npm-1.0.6-ccedb4b908-d2ebd65441.zip/node_modules/inflight/",\ - "packageDependencies": [\ - ["inflight", "npm:1.0.6"],\ - ["once", "npm:1.4.0"],\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["inherits", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/inherits-npm-2.0.4-c66b3957a0-cd45e923be.zip/node_modules/inherits/",\ - "packageDependencies": [\ - ["inherits", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["inquirer", [\ - ["npm:6.5.2", {\ - "packageLocation": "./.yarn/cache/inquirer-npm-6.5.2-4f6408c247-4041bbc275.zip/node_modules/inquirer/",\ - "packageDependencies": [\ - ["ansi-escapes", "npm:3.2.0"],\ - ["chalk", "npm:2.4.2"],\ - ["cli-cursor", "npm:2.1.0"],\ - ["cli-width", "npm:2.2.1"],\ - ["external-editor", "npm:3.1.0"],\ - ["figures", "npm:2.0.0"],\ - ["inquirer", "npm:6.5.2"],\ - ["lodash", "npm:4.17.21"],\ - ["mute-stream", "npm:0.0.7"],\ - ["run-async", "npm:2.4.1"],\ - ["rxjs", "npm:6.6.7"],\ - ["string-width", "npm:2.1.1"],\ - ["strip-ansi", "npm:5.2.0"],\ - ["through", "npm:2.3.8"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.2.4", {\ - "packageLocation": "./.yarn/cache/inquirer-npm-8.2.4-a2a5fb3187-879e462bec.zip/node_modules/inquirer/",\ - "packageDependencies": [\ - ["ansi-escapes", "npm:4.3.2"],\ - ["chalk", "npm:4.1.2"],\ - ["cli-cursor", "npm:3.1.0"],\ - ["cli-width", "npm:3.0.0"],\ - ["external-editor", "npm:3.1.0"],\ - ["figures", "npm:3.2.0"],\ - ["inquirer", "npm:8.2.4"],\ - ["lodash", "npm:4.17.21"],\ - ["mute-stream", "npm:0.0.8"],\ - ["ora", "npm:5.4.1"],\ - ["run-async", "npm:2.4.1"],\ - ["rxjs", "npm:7.5.6"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["through", "npm:2.3.8"],\ - ["wrap-ansi", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["internal-slot", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/internal-slot-npm-1.0.3-9e05eea002-1c6d22f797.zip/node_modules/internal-slot/",\ - "packageDependencies": [\ - ["get-intrinsic", "npm:1.1.2"],\ - ["has", "npm:1.0.3"],\ - ["internal-slot", "npm:1.0.3"],\ - ["side-channel", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["internmap", [\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/internmap-npm-2.0.3-d74f5c9998-873e0e7fcf.zip/node_modules/internmap/",\ - "packageDependencies": [\ - ["internmap", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["interpret", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/interpret-npm-1.4.0-17b4b5b0a4-5beec568d3.zip/node_modules/interpret/",\ - "packageDependencies": [\ - ["interpret", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["intl-messageformat", [\ - ["npm:10.5.11", {\ - "packageLocation": "./.yarn/cache/intl-messageformat-npm-10.5.11-1feb0e2115-2146f4d3e2.zip/node_modules/intl-messageformat/",\ - "packageDependencies": [\ - ["@formatjs/ecma402-abstract", "npm:1.18.2"],\ - ["@formatjs/fast-memoize", "npm:2.2.0"],\ - ["@formatjs/icu-messageformat-parser", "npm:2.7.6"],\ - ["intl-messageformat", "npm:10.5.11"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["invariant", [\ - ["npm:2.2.4", {\ - "packageLocation": "./.yarn/cache/invariant-npm-2.2.4-717fbdb119-cc3182d793.zip/node_modules/invariant/",\ - "packageDependencies": [\ - ["invariant", "npm:2.2.4"],\ - ["loose-envify", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ip", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/ip-npm-2.0.1-ee48691f03-d6dd154e1b.zip/node_modules/ip/",\ - "packageDependencies": [\ - ["ip", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ip-address", [\ - ["npm:9.0.5", {\ - "packageLocation": "./.yarn/cache/ip-address-npm-9.0.5-9fa024d42a-1ed81e0672.zip/node_modules/ip-address/",\ - "packageDependencies": [\ - ["ip-address", "npm:9.0.5"],\ - ["jsbn", "npm:1.1.0"],\ - ["sprintf-js", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ipaddr.js", [\ - ["npm:1.9.1", {\ - "packageLocation": "./.yarn/cache/ipaddr.js-npm-1.9.1-19ae7878b4-864d0cced0.zip/node_modules/ipaddr.js/",\ - "packageDependencies": [\ - ["ipaddr.js", "npm:1.9.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-absolute", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-absolute-npm-1.0.0-2525cf00c8-9d16b2605e.zip/node_modules/is-absolute/",\ - "packageDependencies": [\ - ["is-absolute", "npm:1.0.0"],\ - ["is-relative", "npm:1.0.0"],\ - ["is-windows", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-accessor-descriptor", [\ - ["npm:0.1.6", {\ - "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-0.1.6-41c495d517-3d629a086a.zip/node_modules/is-accessor-descriptor/",\ - "packageDependencies": [\ - ["is-accessor-descriptor", "npm:0.1.6"],\ - ["kind-of", "npm:3.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-1.0.0-d8ce016e98-8e475968e9.zip/node_modules/is-accessor-descriptor/",\ - "packageDependencies": [\ - ["is-accessor-descriptor", "npm:1.0.0"],\ - ["kind-of", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-arrayish", [\ - ["npm:0.2.1", {\ - "packageLocation": "./.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-73ced84fa3.zip/node_modules/is-arrayish/",\ - "packageDependencies": [\ - ["is-arrayish", "npm:0.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/is-arrayish-npm-0.3.2-f856180f79-81a78d518e.zip/node_modules/is-arrayish/",\ - "packageDependencies": [\ - ["is-arrayish", "npm:0.3.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-bigint", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/is-bigint-npm-1.0.4-31c2eecbc9-cc981cf056.zip/node_modules/is-bigint/",\ - "packageDependencies": [\ - ["has-bigints", "npm:1.0.2"],\ - ["is-bigint", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-boolean-object", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/is-boolean-object-npm-1.1.2-ecbd575e6a-ba794223b5.zip/node_modules/is-boolean-object/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["has-tostringtag", "npm:1.0.0"],\ - ["is-boolean-object", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-buffer", [\ - ["npm:1.1.6", {\ - "packageLocation": "./.yarn/cache/is-buffer-npm-1.1.6-08199d9ccc-f63da109e7.zip/node_modules/is-buffer/",\ - "packageDependencies": [\ - ["is-buffer", "npm:1.1.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-callable", [\ - ["npm:1.2.4", {\ - "packageLocation": "./.yarn/cache/is-callable-npm-1.2.4-03fc17459c-4e3d8c0820.zip/node_modules/is-callable/",\ - "packageDependencies": [\ - ["is-callable", "npm:1.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-core-module", [\ - ["npm:2.10.0", {\ - "packageLocation": "./.yarn/cache/is-core-module-npm-2.10.0-6dff9310aa-2bbaf37f60.zip/node_modules/is-core-module/",\ - "packageDependencies": [\ - ["has", "npm:1.0.3"],\ - ["is-core-module", "npm:2.10.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.16.1", {\ - "packageLocation": "./.yarn/cache/is-core-module-npm-2.16.1-a54837229e-452b2c2fb7.zip/node_modules/is-core-module/",\ - "packageDependencies": [\ - ["hasown", "npm:2.0.2"],\ - ["is-core-module", "npm:2.16.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-data-descriptor", [\ - ["npm:0.1.4", {\ - "packageLocation": "./.yarn/cache/is-data-descriptor-npm-0.1.4-6f53f71c67-5c622e078b.zip/node_modules/is-data-descriptor/",\ - "packageDependencies": [\ - ["is-data-descriptor", "npm:0.1.4"],\ - ["kind-of", "npm:3.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-data-descriptor-npm-1.0.0-f7d2e852ca-b8b1f13a53.zip/node_modules/is-data-descriptor/",\ - "packageDependencies": [\ - ["is-data-descriptor", "npm:1.0.0"],\ - ["kind-of", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-date-object", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/is-date-object-npm-1.0.5-88f3d08b5e-cc80b3a4b4.zip/node_modules/is-date-object/",\ - "packageDependencies": [\ - ["has-tostringtag", "npm:1.0.0"],\ - ["is-date-object", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-descriptor", [\ - ["npm:0.1.6", {\ - "packageLocation": "./.yarn/cache/is-descriptor-npm-0.1.6-15c7346839-b946ba8421.zip/node_modules/is-descriptor/",\ - "packageDependencies": [\ - ["is-accessor-descriptor", "npm:0.1.6"],\ - ["is-data-descriptor", "npm:0.1.4"],\ - ["is-descriptor", "npm:0.1.6"],\ - ["kind-of", "npm:5.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/is-descriptor-npm-1.0.2-5cfc02c444-e68059b333.zip/node_modules/is-descriptor/",\ - "packageDependencies": [\ - ["is-accessor-descriptor", "npm:1.0.0"],\ - ["is-data-descriptor", "npm:1.0.0"],\ - ["is-descriptor", "npm:1.0.2"],\ - ["kind-of", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-docker", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/is-docker-npm-2.2.1-3f18a53aff-3fef7ddbf0.zip/node_modules/is-docker/",\ - "packageDependencies": [\ - ["is-docker", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-extendable", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/is-extendable-npm-0.1.1-322b4649ec-3875571d20.zip/node_modules/is-extendable/",\ - "packageDependencies": [\ - ["is-extendable", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/is-extendable-npm-1.0.1-7095ad8b16-db07bc1e9d.zip/node_modules/is-extendable/",\ - "packageDependencies": [\ - ["is-extendable", "npm:1.0.1"],\ - ["is-plain-object", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-extglob", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip/node_modules/is-extglob/",\ - "packageDependencies": [\ - ["is-extglob", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-fullwidth-code-point", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip/node_modules/is-fullwidth-code-point/",\ - "packageDependencies": [\ - ["is-fullwidth-code-point", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip/node_modules/is-fullwidth-code-point/",\ - "packageDependencies": [\ - ["is-fullwidth-code-point", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-4.0.0-848488b60d-8ae89bf505.zip/node_modules/is-fullwidth-code-point/",\ - "packageDependencies": [\ - ["is-fullwidth-code-point", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-generator-fn", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/is-generator-fn-npm-2.1.0-37895c2d2b-a6ad5492cf.zip/node_modules/is-generator-fn/",\ - "packageDependencies": [\ - ["is-generator-fn", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-glob", [\ - ["npm:4.0.3", {\ - "packageLocation": "./.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip/node_modules/is-glob/",\ - "packageDependencies": [\ - ["is-extglob", "npm:2.1.1"],\ - ["is-glob", "npm:4.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-in-browser", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/is-in-browser-npm-1.1.3-31bae97541-f7411dbea0.zip/node_modules/is-in-browser/",\ - "packageDependencies": [\ - ["is-in-browser", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-interactive", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-interactive-npm-1.0.0-7ff7c6e04a-824808776e.zip/node_modules/is-interactive/",\ - "packageDependencies": [\ - ["is-interactive", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-lambda", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip/node_modules/is-lambda/",\ - "packageDependencies": [\ - ["is-lambda", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-lower-case", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/is-lower-case-npm-2.0.2-b0577df8e0-ba57dd1201.zip/node_modules/is-lower-case/",\ - "packageDependencies": [\ - ["is-lower-case", "npm:2.0.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-module", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-module-npm-1.0.0-79ba918283-8cd5390730.zip/node_modules/is-module/",\ - "packageDependencies": [\ - ["is-module", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-negated-glob", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-negated-glob-npm-1.0.0-0d68531829-752cb846d7.zip/node_modules/is-negated-glob/",\ - "packageDependencies": [\ - ["is-negated-glob", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-negative-zero", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/is-negative-zero-npm-2.0.2-0adac91f15-edbec1a9e6.zip/node_modules/is-negative-zero/",\ - "packageDependencies": [\ - ["is-negative-zero", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-number", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/is-number-npm-3.0.0-9088035ade-0c62bf8e9d.zip/node_modules/is-number/",\ - "packageDependencies": [\ - ["is-number", "npm:3.0.0"],\ - ["kind-of", "npm:3.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/is-number-npm-7.0.0-060086935c-6a6c3383f6.zip/node_modules/is-number/",\ - "packageDependencies": [\ - ["is-number", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-number-object", [\ - ["npm:1.0.7", {\ - "packageLocation": "./.yarn/cache/is-number-object-npm-1.0.7-539d0e274d-8700dcf7f6.zip/node_modules/is-number-object/",\ - "packageDependencies": [\ - ["has-tostringtag", "npm:1.0.0"],\ - ["is-number-object", "npm:1.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-obj", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/is-obj-npm-1.0.1-7d391539d7-3ccf0efdea.zip/node_modules/is-obj/",\ - "packageDependencies": [\ - ["is-obj", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/is-obj-npm-2.0.0-3d95e053f4-c9916ac8f4.zip/node_modules/is-obj/",\ - "packageDependencies": [\ - ["is-obj", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-path-cwd", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/is-path-cwd-npm-2.2.0-e35e4aab5f-46a840921b.zip/node_modules/is-path-cwd/",\ - "packageDependencies": [\ - ["is-path-cwd", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-path-in-cwd", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/is-path-in-cwd-npm-2.1.0-2a2ca98522-84387d0991.zip/node_modules/is-path-in-cwd/",\ - "packageDependencies": [\ - ["is-path-in-cwd", "npm:2.1.0"],\ - ["is-path-inside", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-path-inside", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/is-path-inside-npm-2.1.0-f943552e7a-6ca34dbd84.zip/node_modules/is-path-inside/",\ - "packageDependencies": [\ - ["is-path-inside", "npm:2.1.0"],\ - ["path-is-inside", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/is-path-inside-npm-3.0.3-2ea0ef44fd-abd50f0618.zip/node_modules/is-path-inside/",\ - "packageDependencies": [\ - ["is-path-inside", "npm:3.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-plain-obj", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/is-plain-obj-npm-4.1.0-a4f2a92b44-6dc45da70d.zip/node_modules/is-plain-obj/",\ - "packageDependencies": [\ - ["is-plain-obj", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-plain-object", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/is-plain-object-npm-2.0.4-da3265d804-2a401140cf.zip/node_modules/is-plain-object/",\ - "packageDependencies": [\ - ["is-plain-object", "npm:2.0.4"],\ - ["isobject", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/is-plain-object-npm-5.0.0-285b70faa3-e32d27061e.zip/node_modules/is-plain-object/",\ - "packageDependencies": [\ - ["is-plain-object", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-potential-custom-element-name", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/is-potential-custom-element-name-npm-1.0.1-f352f606f8-ced7bbbb64.zip/node_modules/is-potential-custom-element-name/",\ - "packageDependencies": [\ - ["is-potential-custom-element-name", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-regex", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/is-regex-npm-1.1.4-cca193ef11-36d9174d16.zip/node_modules/is-regex/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["has-tostringtag", "npm:1.0.0"],\ - ["is-regex", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-regexp", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-regexp-npm-1.0.0-8f95f51a0c-be692828e2.zip/node_modules/is-regexp/",\ - "packageDependencies": [\ - ["is-regexp", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-relative", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-relative-npm-1.0.0-af71733ca6-3271a0df10.zip/node_modules/is-relative/",\ - "packageDependencies": [\ - ["is-relative", "npm:1.0.0"],\ - ["is-unc-path", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-shared-array-buffer", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/is-shared-array-buffer-npm-1.0.2-32e4181fcd-23d82259d6.zip/node_modules/is-shared-array-buffer/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["is-shared-array-buffer", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-stream", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/is-stream-npm-2.0.1-c802db55e7-b8e05ccdf9.zip/node_modules/is-stream/",\ - "packageDependencies": [\ - ["is-stream", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/is-stream-npm-3.0.0-a77ac9a62e-172093fe99.zip/node_modules/is-stream/",\ - "packageDependencies": [\ - ["is-stream", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-string", [\ - ["npm:1.0.7", {\ - "packageLocation": "./.yarn/cache/is-string-npm-1.0.7-9f7066daed-2bc292fe92.zip/node_modules/is-string/",\ - "packageDependencies": [\ - ["has-tostringtag", "npm:1.0.0"],\ - ["is-string", "npm:1.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-symbol", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/is-symbol-npm-1.0.4-eb9baac703-a47dd899a8.zip/node_modules/is-symbol/",\ - "packageDependencies": [\ - ["has-symbols", "npm:1.0.3"],\ - ["is-symbol", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-typedarray", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-typedarray-npm-1.0.0-bbd99de5b6-4b433bfb0f.zip/node_modules/is-typedarray/",\ - "packageDependencies": [\ - ["is-typedarray", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-unc-path", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-unc-path-npm-1.0.0-9cee24d85f-e8abfde203.zip/node_modules/is-unc-path/",\ - "packageDependencies": [\ - ["is-unc-path", "npm:1.0.0"],\ - ["unc-path-regex", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-unicode-supported", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip/node_modules/is-unicode-supported/",\ - "packageDependencies": [\ - ["is-unicode-supported", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-upper-case", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/is-upper-case-npm-2.0.2-e9a7e58990-cf4fd43c00.zip/node_modules/is-upper-case/",\ - "packageDependencies": [\ - ["is-upper-case", "npm:2.0.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-valid-glob", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/is-valid-glob-npm-1.0.0-6b7c17b9e8-0155951e89.zip/node_modules/is-valid-glob/",\ - "packageDependencies": [\ - ["is-valid-glob", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-weakref", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/is-weakref-npm-1.0.2-ff80e8c314-0023fd0e4b.zip/node_modules/is-weakref/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["is-weakref", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-windows", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-438b7e5265.zip/node_modules/is-windows/",\ - "packageDependencies": [\ - ["is-windows", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["is-wsl", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/is-wsl-npm-2.2.0-2ba10d6393-20849846ae.zip/node_modules/is-wsl/",\ - "packageDependencies": [\ - ["is-docker", "npm:2.2.1"],\ - ["is-wsl", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isarray", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/isarray-npm-1.0.0-db4f547720-f032df8e02.zip/node_modules/isarray/",\ - "packageDependencies": [\ - ["isarray", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isexe", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-7c9f715c03.zip/node_modules/isexe/",\ - "packageDependencies": [\ - ["isexe", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isobject", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/isobject-npm-2.1.0-2798cf0d94-811c6f5a86.zip/node_modules/isobject/",\ - "packageDependencies": [\ - ["isarray", "npm:1.0.0"],\ - ["isobject", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/isobject-npm-3.0.1-8145901fd2-db85c4c970.zip/node_modules/isobject/",\ - "packageDependencies": [\ - ["isobject", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isomorphic-fetch", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/isomorphic-fetch-npm-3.0.0-bce711adff-568fe03075.zip/node_modules/isomorphic-fetch/",\ - "packageDependencies": [\ - ["isomorphic-fetch", "npm:3.0.0"],\ - ["node-fetch", "virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7"],\ - ["whatwg-fetch", "npm:3.6.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["isomorphic-ws", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/isomorphic-ws-npm-5.0.0-9c72251c2d-e20eb2aee0.zip/node_modules/isomorphic-ws/",\ - "packageDependencies": [\ - ["isomorphic-ws", "npm:5.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:5.0.0", {\ - "packageLocation": "./.yarn/__virtual__/isomorphic-ws-virtual-12dd587de1/0/cache/isomorphic-ws-npm-5.0.0-9c72251c2d-e20eb2aee0.zip/node_modules/isomorphic-ws/",\ - "packageDependencies": [\ - ["@types/ws", "npm:8.5.3"],\ - ["isomorphic-ws", "virtual:68b7f07aa1f4219b0f9c0f4a93ef4b0b436a0d0d56f31204a9a57667e3bd377e1cd9dff866589684c111a11d5f0643fe54930a8b4050daa25e404749f43b7c76#npm:5.0.0"],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "packagePeers": [\ - "@types/ws",\ - "ws"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["istanbul-lib-coverage", [\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/istanbul-lib-coverage-npm-3.2.0-93f84b2c8c-31621b84ad.zip/node_modules/istanbul-lib-coverage/",\ - "packageDependencies": [\ - ["istanbul-lib-coverage", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["istanbul-lib-instrument", [\ - ["npm:5.2.0", {\ - "packageLocation": "./.yarn/cache/istanbul-lib-instrument-npm-5.2.0-6aa783f498-4caf04f696.zip/node_modules/istanbul-lib-instrument/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/parser", "npm:7.18.11"],\ - ["@istanbuljs/schema", "npm:0.1.3"],\ - ["istanbul-lib-coverage", "npm:3.2.0"],\ - ["istanbul-lib-instrument", "npm:5.2.0"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["istanbul-lib-report", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/istanbul-lib-report-npm-3.0.0-660f97340a-06b37952e9.zip/node_modules/istanbul-lib-report/",\ - "packageDependencies": [\ - ["istanbul-lib-coverage", "npm:3.2.0"],\ - ["istanbul-lib-report", "npm:3.0.0"],\ - ["make-dir", "npm:3.1.0"],\ - ["supports-color", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["istanbul-lib-source-maps", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/istanbul-lib-source-maps-npm-4.0.1-af0f859df7-5526983462.zip/node_modules/istanbul-lib-source-maps/",\ - "packageDependencies": [\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["istanbul-lib-coverage", "npm:3.2.0"],\ - ["istanbul-lib-source-maps", "npm:4.0.1"],\ - ["source-map", "npm:0.6.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["istanbul-reports", [\ - ["npm:3.1.5", {\ - "packageLocation": "./.yarn/cache/istanbul-reports-npm-3.1.5-fb11324e3e-1fc20a133f.zip/node_modules/istanbul-reports/",\ - "packageDependencies": [\ - ["html-escaper", "npm:2.0.2"],\ - ["istanbul-lib-report", "npm:3.0.0"],\ - ["istanbul-reports", "npm:3.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jake", [\ - ["npm:10.8.5", {\ - "packageLocation": "./.yarn/cache/jake-npm-10.8.5-6a5e87e533-6eaf1cd7fe.zip/node_modules/jake/",\ - "packageDependencies": [\ - ["async", "npm:3.2.4"],\ - ["chalk", "npm:4.1.2"],\ - ["filelist", "npm:1.0.4"],\ - ["jake", "npm:10.8.5"],\ - ["minimatch", "npm:3.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-npm-29.0.3-c9e8e7a998-25398ce689.zip/node_modules/jest/",\ - "packageDependencies": [\ - ["jest", "npm:29.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/jest-virtual-19876e4cda/0/cache/jest-npm-29.0.3-c9e8e7a998-25398ce689.zip/node_modules/jest/",\ - "packageDependencies": [\ - ["@jest/core", "virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node-notifier", null],\ - ["import-local", "npm:3.1.0"],\ - ["jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:29.0.3"],\ - ["jest-cli", "virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3"],\ - ["node-notifier", null]\ - ],\ - "packagePeers": [\ - "@types/node-notifier",\ - "node-notifier"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-changed-files", [\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/jest-changed-files-npm-29.0.0-86775e11cc-9783957f16.zip/node_modules/jest-changed-files/",\ - "packageDependencies": [\ - ["execa", "npm:5.1.1"],\ - ["jest-changed-files", "npm:29.0.0"],\ - ["p-limit", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-circus", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-circus-npm-29.0.3-aedac9817d-512b3a8bf6.zip/node_modules/jest-circus/",\ - "packageDependencies": [\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/expect", "npm:29.0.3"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["chalk", "npm:4.1.2"],\ - ["co", "npm:4.6.0"],\ - ["dedent", "npm:0.7.0"],\ - ["is-generator-fn", "npm:2.1.0"],\ - ["jest-circus", "npm:29.0.3"],\ - ["jest-each", "npm:29.0.3"],\ - ["jest-matcher-utils", "npm:29.0.3"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-runtime", "npm:29.0.3"],\ - ["jest-snapshot", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["p-limit", "npm:3.1.0"],\ - ["pretty-format", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"],\ - ["stack-utils", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-cli", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-cli-npm-29.0.3-a6d7eff924-bcf91df99b.zip/node_modules/jest-cli/",\ - "packageDependencies": [\ - ["jest-cli", "npm:29.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/jest-cli-virtual-0f60d61534/0/cache/jest-cli-npm-29.0.3-a6d7eff924-bcf91df99b.zip/node_modules/jest-cli/",\ - "packageDependencies": [\ - ["@jest/core", "virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node-notifier", null],\ - ["chalk", "npm:4.1.2"],\ - ["exit", "npm:0.1.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["import-local", "npm:3.1.0"],\ - ["jest-cli", "virtual:19876e4cda305b64b9a2f34817f58ee7425de22a7b3c4113f2e950751c4475b25760a176f0229b6071ca328edf1ce0c5c318330bc758b45c8536182fafb3dd77#npm:29.0.3"],\ - ["jest-config", "virtual:0f60d61534d88d4af4343a97505cb506639e75cbe81dbb16d3a2d1af709c41ff1088795d41ed8f0ca32508f794b7dddc6dc02e57fad00be92f08d2bebbc4de4a#npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-validate", "npm:29.0.3"],\ - ["node-notifier", null],\ - ["prompts", "npm:2.4.2"],\ - ["yargs", "npm:17.5.1"]\ - ],\ - "packagePeers": [\ - "@types/node-notifier",\ - "node-notifier"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-config", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-config-npm-29.0.3-36f428ed0e-90a97c60d7.zip/node_modules/jest-config/",\ - "packageDependencies": [\ - ["jest-config", "npm:29.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0f60d61534d88d4af4343a97505cb506639e75cbe81dbb16d3a2d1af709c41ff1088795d41ed8f0ca32508f794b7dddc6dc02e57fad00be92f08d2bebbc4de4a#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/jest-config-virtual-bcfa6d71a0/0/cache/jest-config-npm-29.0.3-36f428ed0e-90a97c60d7.zip/node_modules/jest-config/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@jest/test-sequencer", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", null],\ - ["@types/ts-node", null],\ - ["babel-jest", "virtual:7ecd4e6017ab59aca2afca796af907a9fa8cd5286d0ea1ed78ac596e7fbfbfd9f24d22f1fff46b1775a19c6f99cb275264adc798eb8ee0b78528b0f607920098#npm:29.0.3"],\ - ["chalk", "npm:4.1.2"],\ - ["ci-info", "npm:3.3.2"],\ - ["deepmerge", "npm:4.2.2"],\ - ["glob", "npm:7.2.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-circus", "npm:29.0.3"],\ - ["jest-config", "virtual:0f60d61534d88d4af4343a97505cb506639e75cbe81dbb16d3a2d1af709c41ff1088795d41ed8f0ca32508f794b7dddc6dc02e57fad00be92f08d2bebbc4de4a#npm:29.0.3"],\ - ["jest-environment-node", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-resolve", "npm:29.0.3"],\ - ["jest-runner", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-validate", "npm:29.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["parse-json", "npm:5.2.0"],\ - ["pretty-format", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"],\ - ["strip-json-comments", "npm:3.1.1"],\ - ["ts-node", null]\ - ],\ - "packagePeers": [\ - "@types/node",\ - "@types/ts-node",\ - "ts-node"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:739c50a76be63255a82c405af312b0fa0d0ba64c2b2c0c94d164c5e0eda383ee8cc0564b793eb81b473e9a2e5dd933ed4849606da3bd4643ccd6a9d9f7e98577#npm:29.0.3", {\ - "packageLocation": "./.yarn/__virtual__/jest-config-virtual-7ecd4e6017/0/cache/jest-config-npm-29.0.3-36f428ed0e-90a97c60d7.zip/node_modules/jest-config/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@jest/test-sequencer", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["@types/ts-node", null],\ - ["babel-jest", "virtual:7ecd4e6017ab59aca2afca796af907a9fa8cd5286d0ea1ed78ac596e7fbfbfd9f24d22f1fff46b1775a19c6f99cb275264adc798eb8ee0b78528b0f607920098#npm:29.0.3"],\ - ["chalk", "npm:4.1.2"],\ - ["ci-info", "npm:3.3.2"],\ - ["deepmerge", "npm:4.2.2"],\ - ["glob", "npm:7.2.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-circus", "npm:29.0.3"],\ - ["jest-config", "virtual:739c50a76be63255a82c405af312b0fa0d0ba64c2b2c0c94d164c5e0eda383ee8cc0564b793eb81b473e9a2e5dd933ed4849606da3bd4643ccd6a9d9f7e98577#npm:29.0.3"],\ - ["jest-environment-node", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-resolve", "npm:29.0.3"],\ - ["jest-runner", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-validate", "npm:29.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["parse-json", "npm:5.2.0"],\ - ["pretty-format", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"],\ - ["strip-json-comments", "npm:3.1.1"],\ - ["ts-node", null]\ - ],\ - "packagePeers": [\ - "@types/node",\ - "@types/ts-node",\ - "ts-node"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-diff", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/jest-diff-npm-28.1.3-cdbbfc3cc7-42b8d82c59.zip/node_modules/jest-diff/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["diff-sequences", "npm:28.1.1"],\ - ["jest-diff", "npm:28.1.3"],\ - ["jest-get-type", "npm:28.0.2"],\ - ["pretty-format", "npm:28.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-diff-npm-29.0.3-46ff0e9ddd-b7508e2df6.zip/node_modules/jest-diff/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["diff-sequences", "npm:29.0.0"],\ - ["jest-diff", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["pretty-format", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-docblock", [\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/jest-docblock-npm-29.0.0-b0cc75b6dd-c6d6c34d91.zip/node_modules/jest-docblock/",\ - "packageDependencies": [\ - ["detect-newline", "npm:3.1.0"],\ - ["jest-docblock", "npm:29.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-each", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-each-npm-29.0.3-f64c872ed3-b24c7aa108.zip/node_modules/jest-each/",\ - "packageDependencies": [\ - ["@jest/types", "npm:29.0.3"],\ - ["chalk", "npm:4.1.2"],\ - ["jest-each", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-util", "npm:29.0.3"],\ - ["pretty-format", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-environment-jsdom", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-environment-jsdom-npm-29.0.3-5a1dcb1ba4-fb47230214.zip/node_modules/jest-environment-jsdom/",\ - "packageDependencies": [\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/fake-timers", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/jsdom", "npm:20.0.0"],\ - ["@types/node", "npm:18.7.6"],\ - ["jest-environment-jsdom", "npm:29.0.3"],\ - ["jest-mock", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jsdom", "virtual:5a1dcb1ba4679adb714c38519119fe2384bf87dfbf65b5af77f84a4e4eec399c4626d606670ad295c9be327722501d0c00ea55cdf6510059b3823b2ef3a47195#npm:20.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-environment-node", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-environment-node-npm-29.0.3-11677cd5bd-278d7053fd.zip/node_modules/jest-environment-node/",\ - "packageDependencies": [\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/fake-timers", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["jest-environment-node", "npm:29.0.3"],\ - ["jest-mock", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-fetch-mock", [\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/jest-fetch-mock-npm-3.0.3-ac072ca8af-c119a87fc8.zip/node_modules/jest-fetch-mock/",\ - "packageDependencies": [\ - ["cross-fetch", "npm:3.1.8"],\ - ["jest-fetch-mock", "npm:3.0.3"],\ - ["promise-polyfill", "npm:8.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-get-type", [\ - ["npm:28.0.2", {\ - "packageLocation": "./.yarn/cache/jest-get-type-npm-28.0.2-00d0a81478-5281d7c89b.zip/node_modules/jest-get-type/",\ - "packageDependencies": [\ - ["jest-get-type", "npm:28.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/jest-get-type-npm-29.0.0-0b3b41ed86-9abdd11d69.zip/node_modules/jest-get-type/",\ - "packageDependencies": [\ - ["jest-get-type", "npm:29.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-haste-map", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-haste-map-npm-29.0.3-39ef4c6f5b-91f0066255.zip/node_modules/jest-haste-map/",\ - "packageDependencies": [\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/graceful-fs", "npm:4.1.5"],\ - ["@types/node", "npm:18.7.6"],\ - ["anymatch", "npm:3.1.2"],\ - ["fb-watchman", "npm:2.0.1"],\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-worker", "npm:29.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["walker", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-leak-detector", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-leak-detector-npm-29.0.3-f70566795e-a1657dbb72.zip/node_modules/jest-leak-detector/",\ - "packageDependencies": [\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-leak-detector", "npm:29.0.3"],\ - ["pretty-format", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-matcher-utils", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/jest-matcher-utils-npm-28.1.3-6a206019d4-958f4bacda.zip/node_modules/jest-matcher-utils/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["jest-diff", "npm:28.1.3"],\ - ["jest-get-type", "npm:28.0.2"],\ - ["jest-matcher-utils", "npm:28.1.3"],\ - ["pretty-format", "npm:28.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-matcher-utils-npm-29.0.3-9317a74a1e-4b0e33668c.zip/node_modules/jest-matcher-utils/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["jest-diff", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-matcher-utils", "npm:29.0.3"],\ - ["pretty-format", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-message-util", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/jest-message-util-npm-28.1.3-bee4da4d10-91137a507e.zip/node_modules/jest-message-util/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@jest/types", "npm:28.1.3"],\ - ["@types/stack-utils", "npm:2.0.1"],\ - ["chalk", "npm:4.1.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-message-util", "npm:28.1.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["pretty-format", "npm:28.1.3"],\ - ["slash", "npm:3.0.0"],\ - ["stack-utils", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-message-util-npm-29.0.3-6be00c7820-6c8bef9251.zip/node_modules/jest-message-util/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/stack-utils", "npm:2.0.1"],\ - ["chalk", "npm:4.1.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["pretty-format", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"],\ - ["stack-utils", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-mock", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-mock-npm-29.0.3-bc8f350a81-5b9ad7d90e.zip/node_modules/jest-mock/",\ - "packageDependencies": [\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["jest-mock", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-pnp-resolver", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/jest-pnp-resolver-npm-1.2.2-da20f8bdfe-bd85dcc0e7.zip/node_modules/jest-pnp-resolver/",\ - "packageDependencies": [\ - ["jest-pnp-resolver", "npm:1.2.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:90e57c5d53723ac6bd6f33068a1d98d5497120a0c435693d26b854754e252c6863b38ef211fb474e52dcc71a5a2b64ccbcabd4be20d76df7329e7e7406784241#npm:1.2.2", {\ - "packageLocation": "./.yarn/__virtual__/jest-pnp-resolver-virtual-15aa33939c/0/cache/jest-pnp-resolver-npm-1.2.2-da20f8bdfe-bd85dcc0e7.zip/node_modules/jest-pnp-resolver/",\ - "packageDependencies": [\ - ["@types/jest-resolve", null],\ - ["jest-pnp-resolver", "virtual:90e57c5d53723ac6bd6f33068a1d98d5497120a0c435693d26b854754e252c6863b38ef211fb474e52dcc71a5a2b64ccbcabd4be20d76df7329e7e7406784241#npm:1.2.2"],\ - ["jest-resolve", "npm:29.0.3"]\ - ],\ - "packagePeers": [\ - "@types/jest-resolve",\ - "jest-resolve"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-regex-util", [\ - ["npm:29.0.0", {\ - "packageLocation": "./.yarn/cache/jest-regex-util-npm-29.0.0-45dce18b46-dce16394c3.zip/node_modules/jest-regex-util/",\ - "packageDependencies": [\ - ["jest-regex-util", "npm:29.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-resolve", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-resolve-npm-29.0.3-90e57c5d53-6f7595e6c1.zip/node_modules/jest-resolve/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-pnp-resolver", "virtual:90e57c5d53723ac6bd6f33068a1d98d5497120a0c435693d26b854754e252c6863b38ef211fb474e52dcc71a5a2b64ccbcabd4be20d76df7329e7e7406784241#npm:1.2.2"],\ - ["jest-resolve", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-validate", "npm:29.0.3"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"],\ - ["resolve.exports", "npm:1.1.0"],\ - ["slash", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-resolve-dependencies", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-resolve-dependencies-npm-29.0.3-28bd5e7297-65d3af778f.zip/node_modules/jest-resolve-dependencies/",\ - "packageDependencies": [\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-resolve-dependencies", "npm:29.0.3"],\ - ["jest-snapshot", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-runner", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-runner-npm-29.0.3-3c27706b31-b93ee39ff0.zip/node_modules/jest-runner/",\ - "packageDependencies": [\ - ["@jest/console", "npm:29.0.3"],\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["chalk", "npm:4.1.2"],\ - ["emittery", "npm:0.10.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-docblock", "npm:29.0.0"],\ - ["jest-environment-node", "npm:29.0.3"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-leak-detector", "npm:29.0.3"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-resolve", "npm:29.0.3"],\ - ["jest-runner", "npm:29.0.3"],\ - ["jest-runtime", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-watcher", "npm:29.0.3"],\ - ["jest-worker", "npm:29.0.3"],\ - ["p-limit", "npm:3.1.0"],\ - ["source-map-support", "npm:0.5.13"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-runtime", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-runtime-npm-29.0.3-caa31faceb-eb88578a8e.zip/node_modules/jest-runtime/",\ - "packageDependencies": [\ - ["@jest/environment", "npm:29.0.3"],\ - ["@jest/fake-timers", "npm:29.0.3"],\ - ["@jest/globals", "npm:29.0.3"],\ - ["@jest/source-map", "npm:29.0.0"],\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["chalk", "npm:4.1.2"],\ - ["cjs-module-lexer", "npm:1.2.2"],\ - ["collect-v8-coverage", "npm:1.0.1"],\ - ["glob", "npm:7.2.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-mock", "npm:29.0.3"],\ - ["jest-regex-util", "npm:29.0.0"],\ - ["jest-resolve", "npm:29.0.3"],\ - ["jest-runtime", "npm:29.0.3"],\ - ["jest-snapshot", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["slash", "npm:3.0.0"],\ - ["strip-bom", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-snapshot", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-snapshot-npm-29.0.3-9e09885f92-ec969dacd4.zip/node_modules/jest-snapshot/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/generator", "npm:7.18.12"],\ - ["@babel/plugin-syntax-jsx", "virtual:fe1283a62bd0966edc70125d13916aecafd6814614644f07de6aa3abf5f44623390a5a492ddf2a91a9942cfbdae2bf714a99d9e2c451812d6d5c85ae635f1d46#npm:7.18.6"],\ - ["@babel/plugin-syntax-typescript", "virtual:9e09885f9230460743134ac3f855149d037f404c5fef36fab473527d42c6f22166530bb1cd3d50372a4ee47440322e9e4fa8cec9356b06e975558682285157dd#npm:7.18.6"],\ - ["@babel/traverse", "npm:7.23.2"],\ - ["@babel/types", "npm:7.18.10"],\ - ["@jest/expect-utils", "npm:29.0.3"],\ - ["@jest/transform", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/babel__traverse", "npm:7.18.0"],\ - ["@types/prettier", "npm:2.7.0"],\ - ["babel-preset-current-node-syntax", "virtual:9e09885f9230460743134ac3f855149d037f404c5fef36fab473527d42c6f22166530bb1cd3d50372a4ee47440322e9e4fa8cec9356b06e975558682285157dd#npm:1.0.1"],\ - ["chalk", "npm:4.1.2"],\ - ["expect", "npm:29.0.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-diff", "npm:29.0.3"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-haste-map", "npm:29.0.3"],\ - ["jest-matcher-utils", "npm:29.0.3"],\ - ["jest-message-util", "npm:29.0.3"],\ - ["jest-snapshot", "npm:29.0.3"],\ - ["jest-util", "npm:29.0.3"],\ - ["natural-compare", "npm:1.4.0"],\ - ["pretty-format", "npm:29.0.3"],\ - ["semver", "npm:7.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-util", [\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/jest-util-npm-28.1.3-9ae2283a08-92895523d3.zip/node_modules/jest-util/",\ - "packageDependencies": [\ - ["@jest/types", "npm:28.1.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["chalk", "npm:4.1.2"],\ - ["ci-info", "npm:3.3.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-util", "npm:28.1.3"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-util-npm-29.0.3-52059003ed-22ee3712a1.zip/node_modules/jest-util/",\ - "packageDependencies": [\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["chalk", "npm:4.1.2"],\ - ["ci-info", "npm:3.3.2"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["jest-util", "npm:29.0.3"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-validate", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-validate-npm-29.0.3-9805dbc9c6-bba624835c.zip/node_modules/jest-validate/",\ - "packageDependencies": [\ - ["@jest/types", "npm:29.0.3"],\ - ["camelcase", "npm:6.3.0"],\ - ["chalk", "npm:4.1.2"],\ - ["jest-get-type", "npm:29.0.0"],\ - ["jest-validate", "npm:29.0.3"],\ - ["leven", "npm:3.1.0"],\ - ["pretty-format", "npm:29.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-watcher", [\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-watcher-npm-29.0.3-c7d029c606-4d79b9f886.zip/node_modules/jest-watcher/",\ - "packageDependencies": [\ - ["@jest/test-result", "npm:29.0.3"],\ - ["@jest/types", "npm:29.0.3"],\ - ["@types/node", "npm:18.7.6"],\ - ["ansi-escapes", "npm:4.3.2"],\ - ["chalk", "npm:4.1.2"],\ - ["emittery", "npm:0.10.2"],\ - ["jest-util", "npm:29.0.3"],\ - ["jest-watcher", "npm:29.0.3"],\ - ["string-length", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jest-worker", [\ - ["npm:26.6.2", {\ - "packageLocation": "./.yarn/cache/jest-worker-npm-26.6.2-46cbcd449f-5f6b94cf0e.zip/node_modules/jest-worker/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["jest-worker", "npm:26.6.2"],\ - ["merge-stream", "npm:2.0.0"],\ - ["supports-color", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:27.5.1", {\ - "packageLocation": "./.yarn/cache/jest-worker-npm-27.5.1-1c110b5894-06c6e2a845.zip/node_modules/jest-worker/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["jest-worker", "npm:27.5.1"],\ - ["merge-stream", "npm:2.0.0"],\ - ["supports-color", "npm:8.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/jest-worker-npm-29.0.3-df468013f0-e52e60eec8.zip/node_modules/jest-worker/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["jest-worker", "npm:29.0.3"],\ - ["merge-stream", "npm:2.0.0"],\ - ["supports-color", "npm:8.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jiti", [\ - ["npm:1.21.0", {\ - "packageLocation": "./.yarn/cache/jiti-npm-1.21.0-baebd5985a-005a0239e5.zip/node_modules/jiti/",\ - "packageDependencies": [\ - ["jiti", "npm:1.21.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jose", [\ - ["npm:4.15.9", {\ - "packageLocation": "./.yarn/cache/jose-npm-4.15.9-a725b711d7-256234b6f8.zip/node_modules/jose/",\ - "packageDependencies": [\ - ["jose", "npm:4.15.9"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.9.6", {\ - "packageLocation": "./.yarn/cache/jose-npm-5.9.6-8196c83d4f-3ebbda9f6a.zip/node_modules/jose/",\ - "packageDependencies": [\ - ["jose", "npm:5.9.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jpeg-js", [\ - ["npm:0.4.4", {\ - "packageLocation": "./.yarn/cache/jpeg-js-npm-0.4.4-4dd87659c3-30bb6e16e7.zip/node_modules/jpeg-js/",\ - "packageDependencies": [\ - ["jpeg-js", "npm:0.4.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["js-levenshtein", [\ - ["npm:1.1.6", {\ - "packageLocation": "./.yarn/cache/js-levenshtein-npm-1.1.6-ab883e61a3-bb034043fd.zip/node_modules/js-levenshtein/",\ - "packageDependencies": [\ - ["js-levenshtein", "npm:1.1.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["js-library-detector", [\ - ["npm:6.7.0", {\ - "packageLocation": "./.yarn/cache/js-library-detector-npm-6.7.0-74c8c575c6-1498d7f382.zip/node_modules/js-library-detector/",\ - "packageDependencies": [\ - ["js-library-detector", "npm:6.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["js-tokens", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-af37d0d913.zip/node_modules/js-tokens/",\ - "packageDependencies": [\ - ["js-tokens", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["js-yaml", [\ - ["npm:3.14.1", {\ - "packageLocation": "./.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-9e22d80b4d.zip/node_modules/js-yaml/",\ - "packageDependencies": [\ - ["argparse", "npm:1.0.10"],\ - ["esprima", "npm:4.0.1"],\ - ["js-yaml", "npm:3.14.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c138a34a3f.zip/node_modules/js-yaml/",\ - "packageDependencies": [\ - ["argparse", "npm:2.0.1"],\ - ["js-yaml", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsbn", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/jsbn-npm-1.1.0-1da0181838-bebe7ae829.zip/node_modules/jsbn/",\ - "packageDependencies": [\ - ["jsbn", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsdom", [\ - ["npm:20.0.0", {\ - "packageLocation": "./.yarn/cache/jsdom-npm-20.0.0-9c1ad43ab8-5492ef8f49.zip/node_modules/jsdom/",\ - "packageDependencies": [\ - ["jsdom", "npm:20.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:5a1dcb1ba4679adb714c38519119fe2384bf87dfbf65b5af77f84a4e4eec399c4626d606670ad295c9be327722501d0c00ea55cdf6510059b3823b2ef3a47195#npm:20.0.0", {\ - "packageLocation": "./.yarn/__virtual__/jsdom-virtual-fc6ac33a68/0/cache/jsdom-npm-20.0.0-9c1ad43ab8-5492ef8f49.zip/node_modules/jsdom/",\ - "packageDependencies": [\ - ["@types/canvas", null],\ - ["abab", "npm:2.0.6"],\ - ["acorn", "npm:8.8.0"],\ - ["acorn-globals", "npm:6.0.0"],\ - ["canvas", null],\ - ["cssom", "npm:0.5.0"],\ - ["cssstyle", "npm:2.3.0"],\ - ["data-urls", "npm:3.0.2"],\ - ["decimal.js", "npm:10.4.0"],\ - ["domexception", "npm:4.0.0"],\ - ["escodegen", "npm:2.0.0"],\ - ["form-data", "npm:4.0.0"],\ - ["html-encoding-sniffer", "npm:3.0.0"],\ - ["http-proxy-agent", "npm:5.0.0"],\ - ["https-proxy-agent", "npm:5.0.1"],\ - ["is-potential-custom-element-name", "npm:1.0.1"],\ - ["jsdom", "virtual:5a1dcb1ba4679adb714c38519119fe2384bf87dfbf65b5af77f84a4e4eec399c4626d606670ad295c9be327722501d0c00ea55cdf6510059b3823b2ef3a47195#npm:20.0.0"],\ - ["nwsapi", "npm:2.2.2"],\ - ["parse5", "npm:7.0.0"],\ - ["saxes", "npm:6.0.0"],\ - ["symbol-tree", "npm:3.2.4"],\ - ["tough-cookie", "npm:4.1.4"],\ - ["w3c-hr-time", "npm:1.0.2"],\ - ["w3c-xmlserializer", "npm:3.0.0"],\ - ["webidl-conversions", "npm:7.0.0"],\ - ["whatwg-encoding", "npm:2.0.0"],\ - ["whatwg-mimetype", "npm:3.0.0"],\ - ["whatwg-url", "npm:11.0.0"],\ - ["ws", "virtual:fc6ac33a6893977b60166bd106029ee0b93aa1fa6ac57ba8c924b32784b74652f37c4758d3940256461ebc43311fef481b8a167ffe3b7174f64d77f5161e884c#npm:8.8.1"],\ - ["xml-name-validator", "npm:4.0.0"]\ - ],\ - "packagePeers": [\ - "@types/canvas",\ - "canvas"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsesc", [\ - ["npm:0.5.0", {\ - "packageLocation": "./.yarn/cache/jsesc-npm-0.5.0-6827074492-fab949f585.zip/node_modules/jsesc/",\ - "packageDependencies": [\ - ["jsesc", "npm:0.5.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.5.2", {\ - "packageLocation": "./.yarn/cache/jsesc-npm-2.5.2-c5acb78804-d2096abdcd.zip/node_modules/jsesc/",\ - "packageDependencies": [\ - ["jsesc", "npm:2.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-parse-even-better-errors", [\ - ["npm:2.3.1", {\ - "packageLocation": "./.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-5f3a99009e.zip/node_modules/json-parse-even-better-errors/",\ - "packageDependencies": [\ - ["json-parse-even-better-errors", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-schema", [\ - ["npm:0.4.0", {\ - "packageLocation": "./.yarn/cache/json-schema-npm-0.4.0-e776313070-8b3b64eff4.zip/node_modules/json-schema/",\ - "packageDependencies": [\ - ["json-schema", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-schema-traverse", [\ - ["npm:0.4.1", {\ - "packageLocation": "./.yarn/cache/json-schema-traverse-npm-0.4.1-4759091693-7486074d3b.zip/node_modules/json-schema-traverse/",\ - "packageDependencies": [\ - ["json-schema-traverse", "npm:0.4.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip/node_modules/json-schema-traverse/",\ - "packageDependencies": [\ - ["json-schema-traverse", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-stable-stringify", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/json-stable-stringify-npm-1.0.1-65df019fbd-a6a17cc1a8.zip/node_modules/json-stable-stringify/",\ - "packageDependencies": [\ - ["json-stable-stringify", "npm:1.0.1"],\ - ["jsonify", "npm:0.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-stable-stringify-without-jsonify", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-b65772b28b-12786c2e2f.zip/node_modules/json-stable-stringify-without-jsonify/",\ - "packageDependencies": [\ - ["json-stable-stringify-without-jsonify", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-stringify-safe", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/json-stringify-safe-npm-5.0.1-064ddd6ab4-59169a081e.zip/node_modules/json-stringify-safe/",\ - "packageDependencies": [\ - ["json-stringify-safe", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json-to-pretty-yaml", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/json-to-pretty-yaml-npm-1.2.2-c4436a57f0-3ccd527c9a.zip/node_modules/json-to-pretty-yaml/",\ - "packageDependencies": [\ - ["json-to-pretty-yaml", "npm:1.2.2"],\ - ["remedial", "npm:1.0.8"],\ - ["remove-trailing-spaces", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["json5", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/json5-npm-1.0.2-9607f93e30-a78d812dbb.zip/node_modules/json5/",\ - "packageDependencies": [\ - ["json5", "npm:1.0.2"],\ - ["minimist", "npm:1.2.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.2.3", {\ - "packageLocation": "./.yarn/cache/json5-npm-2.2.3-9962c55073-1db67b853f.zip/node_modules/json5/",\ - "packageDependencies": [\ - ["json5", "npm:2.2.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsonfile", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/jsonfile-npm-4.0.0-10ce3aea15-17796f0ab1.zip/node_modules/jsonfile/",\ - "packageDependencies": [\ - ["graceful-fs", "npm:4.2.10"],\ - ["jsonfile", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.1.0", {\ - "packageLocation": "./.yarn/cache/jsonfile-npm-6.1.0-20a4796cee-03014769e7.zip/node_modules/jsonfile/",\ - "packageDependencies": [\ - ["graceful-fs", "npm:4.2.10"],\ - ["jsonfile", "npm:6.1.0"],\ - ["universalify", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsonify", [\ - ["npm:0.0.0", {\ - "packageLocation": "./.yarn/cache/jsonify-npm-0.0.0-80da2da40c-dc738debf7.zip/node_modules/jsonify/",\ - "packageDependencies": [\ - ["jsonify", "npm:0.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsonpointer", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/jsonpointer-npm-5.0.1-8e4c22e512-0b40f71290.zip/node_modules/jsonpointer/",\ - "packageDependencies": [\ - ["jsonpointer", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-npm-10.10.0-4f14e06f23-a08605d8e0.zip/node_modules/jss/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["csstype", "npm:3.1.0"],\ - ["is-in-browser", "npm:1.1.3"],\ - ["jss", "npm:10.10.0"],\ - ["tiny-warning", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-camel-case", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-camel-case-npm-10.10.0-fd7845ba8f-b4d6839131.zip/node_modules/jss-plugin-camel-case/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["hyphenate-style-name", "npm:1.0.4"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-camel-case", "npm:10.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-default-unit", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-default-unit-npm-10.10.0-b59fad4546-7784f8b366.zip/node_modules/jss-plugin-default-unit/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-default-unit", "npm:10.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-global", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-global-npm-10.10.0-596c12b9f0-c0c2653ea3.zip/node_modules/jss-plugin-global/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-global", "npm:10.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-nested", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-nested-npm-10.10.0-b47b49a22e-834b795330.zip/node_modules/jss-plugin-nested/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-nested", "npm:10.10.0"],\ - ["tiny-warning", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-props-sort", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-props-sort-npm-10.10.0-9432304603-89eebe2bc4.zip/node_modules/jss-plugin-props-sort/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-props-sort", "npm:10.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-rule-value-function", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-rule-value-function-npm-10.10.0-aa24bdff55-71cc09090f.zip/node_modules/jss-plugin-rule-value-function/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-rule-value-function", "npm:10.10.0"],\ - ["tiny-warning", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jss-plugin-vendor-prefixer", [\ - ["npm:10.10.0", {\ - "packageLocation": "./.yarn/cache/jss-plugin-vendor-prefixer-npm-10.10.0-72726b8af5-c497a32b75.zip/node_modules/jss-plugin-vendor-prefixer/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["css-vendor", "npm:2.0.8"],\ - ["jss", "npm:10.10.0"],\ - ["jss-plugin-vendor-prefixer", "npm:10.10.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jsx-ast-utils", [\ - ["npm:3.3.3", {\ - "packageLocation": "./.yarn/cache/jsx-ast-utils-npm-3.3.3-3d3171e1e4-c85f6f2395.zip/node_modules/jsx-ast-utils/",\ - "packageDependencies": [\ - ["array-includes", "npm:3.1.5"],\ - ["jsx-ast-utils", "npm:3.3.3"],\ - ["object.assign", "npm:4.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["kdbush", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/kdbush-npm-4.0.2-e4894ed9f4-ca1f7a106c.zip/node_modules/kdbush/",\ - "packageDependencies": [\ - ["kdbush", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["kind-of", [\ - ["npm:3.2.2", {\ - "packageLocation": "./.yarn/cache/kind-of-npm-3.2.2-7deaffa5f9-b6e7eed10f.zip/node_modules/kind-of/",\ - "packageDependencies": [\ - ["is-buffer", "npm:1.1.6"],\ - ["kind-of", "npm:3.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/kind-of-npm-4.0.0-69fd153375-b35a90e069.zip/node_modules/kind-of/",\ - "packageDependencies": [\ - ["is-buffer", "npm:1.1.6"],\ - ["kind-of", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/kind-of-npm-5.1.0-ce82f43eaa-acf7cc7388.zip/node_modules/kind-of/",\ - "packageDependencies": [\ - ["kind-of", "npm:5.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.3", {\ - "packageLocation": "./.yarn/cache/kind-of-npm-6.0.3-ab15f36220-5873d303fb.zip/node_modules/kind-of/",\ - "packageDependencies": [\ - ["kind-of", "npm:6.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["kleur", [\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/kleur-npm-3.0.3-f6f53649a4-0c0ecaf00a.zip/node_modules/kleur/",\ - "packageDependencies": [\ - ["kleur", "npm:3.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["language-subtag-registry", [\ - ["npm:0.3.22", {\ - "packageLocation": "./.yarn/cache/language-subtag-registry-npm-0.3.22-e9f79fe04e-5591f4abd7.zip/node_modules/language-subtag-registry/",\ - "packageDependencies": [\ - ["language-subtag-registry", "npm:0.3.22"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["language-tags", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/language-tags-npm-1.0.5-3a50e75c96-2161292dda.zip/node_modules/language-tags/",\ - "packageDependencies": [\ - ["language-subtag-registry", "npm:0.3.22"],\ - ["language-tags", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lead", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/lead-npm-4.0.0-0c7bbba8db-7117297c29.zip/node_modules/lead/",\ - "packageDependencies": [\ - ["lead", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["leven", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/leven-npm-3.1.0-b7697736a3-638401d534.zip/node_modules/leven/",\ - "packageDependencies": [\ - ["leven", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["levn", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/levn-npm-0.3.0-48d774b1c2-e1c3e75b5c.zip/node_modules/levn/",\ - "packageDependencies": [\ - ["levn", "npm:0.3.0"],\ - ["prelude-ls", "npm:1.1.2"],\ - ["type-check", "npm:0.3.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.4.1", {\ - "packageLocation": "./.yarn/cache/levn-npm-0.4.1-d183b2d7bb-2e4720ff79.zip/node_modules/levn/",\ - "packageDependencies": [\ - ["levn", "npm:0.4.1"],\ - ["prelude-ls", "npm:1.2.1"],\ - ["type-check", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lighthouse", [\ - ["npm:11.4.0", {\ - "packageLocation": "./.yarn/cache/lighthouse-npm-11.4.0-0e1b6f54c4-d44af6cbf1.zip/node_modules/lighthouse/",\ - "packageDependencies": [\ - ["@sentry/node", "npm:6.19.7"],\ - ["axe-core", "npm:4.9.0"],\ - ["chrome-launcher", "npm:1.1.1"],\ - ["configstore", "npm:5.0.1"],\ - ["csp_evaluator", "npm:1.1.1"],\ - ["devtools-protocol", "npm:0.0.1211954"],\ - ["enquirer", "npm:2.4.1"],\ - ["http-link-header", "npm:1.1.3"],\ - ["intl-messageformat", "npm:10.5.11"],\ - ["jpeg-js", "npm:0.4.4"],\ - ["js-library-detector", "npm:6.7.0"],\ - ["lighthouse", "npm:11.4.0"],\ - ["lighthouse-logger", "npm:2.0.1"],\ - ["lighthouse-stack-packs", "npm:1.12.1"],\ - ["lodash", "npm:4.17.21"],\ - ["lookup-closest-locale", "npm:6.2.0"],\ - ["metaviewport-parser", "npm:0.3.0"],\ - ["open", "npm:8.4.0"],\ - ["parse-cache-control", "npm:1.0.1"],\ - ["ps-list", "npm:8.1.1"],\ - ["puppeteer-core", "npm:21.11.0"],\ - ["robots-parser", "npm:3.0.1"],\ - ["semver", "npm:5.7.2"],\ - ["speedline-core", "npm:1.4.3"],\ - ["third-party-web", "npm:0.24.2"],\ - ["tldts-icann", "npm:6.1.16"],\ - ["ws", "virtual:0e1b6f54c4ba7af1db03b0f86ddabee1c9895a3b4e1d649afc286f1b33eb779f42bb521f89b6e3d289cf994f8f7964f7651193780da3e26e90d57d1713176d75#npm:7.5.9"],\ - ["yargs", "npm:17.5.1"],\ - ["yargs-parser", "npm:21.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:11.7.1", {\ - "packageLocation": "./.yarn/cache/lighthouse-npm-11.7.1-8a67889d88-0be85425a6.zip/node_modules/lighthouse/",\ - "packageDependencies": [\ - ["@paulirish/trace_engine", "npm:0.0.19"],\ - ["@sentry/node", "npm:6.19.7"],\ - ["axe-core", "npm:4.10.2"],\ - ["chrome-launcher", "npm:1.1.1"],\ - ["configstore", "npm:5.0.1"],\ - ["csp_evaluator", "npm:1.1.1"],\ - ["devtools-protocol", "npm:0.0.1232444"],\ - ["enquirer", "npm:2.4.1"],\ - ["http-link-header", "npm:1.1.3"],\ - ["intl-messageformat", "npm:10.5.11"],\ - ["jpeg-js", "npm:0.4.4"],\ - ["js-library-detector", "npm:6.7.0"],\ - ["lighthouse", "npm:11.7.1"],\ - ["lighthouse-logger", "npm:2.0.1"],\ - ["lighthouse-stack-packs", "npm:1.12.1"],\ - ["lodash", "npm:4.17.21"],\ - ["lookup-closest-locale", "npm:6.2.0"],\ - ["metaviewport-parser", "npm:0.3.0"],\ - ["open", "npm:8.4.0"],\ - ["parse-cache-control", "npm:1.0.1"],\ - ["ps-list", "npm:8.1.1"],\ - ["puppeteer-core", "npm:22.6.3"],\ - ["robots-parser", "npm:3.0.1"],\ - ["semver", "npm:5.7.2"],\ - ["speedline-core", "npm:1.4.3"],\ - ["third-party-web", "npm:0.24.2"],\ - ["tldts-icann", "npm:6.1.16"],\ - ["ws", "virtual:0e1b6f54c4ba7af1db03b0f86ddabee1c9895a3b4e1d649afc286f1b33eb779f42bb521f89b6e3d289cf994f8f7964f7651193780da3e26e90d57d1713176d75#npm:7.5.9"],\ - ["yargs", "npm:17.5.1"],\ - ["yargs-parser", "npm:21.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lighthouse-logger", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/lighthouse-logger-npm-1.2.0-d493886450-5a64ab5490.zip/node_modules/lighthouse-logger/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["lighthouse-logger", "npm:1.2.0"],\ - ["marky", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.4.2", {\ - "packageLocation": "./.yarn/cache/lighthouse-logger-npm-1.4.2-04e1728218-ffcedbf687.zip/node_modules/lighthouse-logger/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["lighthouse-logger", "npm:1.4.2"],\ - ["marky", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/lighthouse-logger-npm-2.0.1-4b6d71baf8-8467b0eb1f.zip/node_modules/lighthouse-logger/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["lighthouse-logger", "npm:2.0.1"],\ - ["marky", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lighthouse-stack-packs", [\ - ["npm:1.12.1", {\ - "packageLocation": "./.yarn/cache/lighthouse-stack-packs-npm-1.12.1-f42cea7f5f-7b06a97016.zip/node_modules/lighthouse-stack-packs/",\ - "packageDependencies": [\ - ["lighthouse-stack-packs", "npm:1.12.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lilconfig", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/lilconfig-npm-2.0.5-ba2b9195a0-a6e201bcb5.zip/node_modules/lilconfig/",\ - "packageDependencies": [\ - ["lilconfig", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/lilconfig-npm-3.1.2-e5b7292949-8058403850.zip/node_modules/lilconfig/",\ - "packageDependencies": [\ - ["lilconfig", "npm:3.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lines-and-columns", [\ - ["npm:1.2.4", {\ - "packageLocation": "./.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip/node_modules/lines-and-columns/",\ - "packageDependencies": [\ - ["lines-and-columns", "npm:1.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lint-staged", [\ - ["npm:13.0.3", {\ - "packageLocation": "./.yarn/cache/lint-staged-npm-13.0.3-5f9010e5ff-d5b2b96f8c.zip/node_modules/lint-staged/",\ - "packageDependencies": [\ - ["cli-truncate", "npm:3.1.0"],\ - ["colorette", "npm:2.0.19"],\ - ["commander", "npm:9.4.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["execa", "npm:6.1.0"],\ - ["lilconfig", "npm:2.0.5"],\ - ["lint-staged", "npm:13.0.3"],\ - ["listr2", "virtual:5f9010e5ff1626822e95f9478abbca9d06865e771c302ab7261d07ee4d7fe4994efa0046bb5f7982f8af81ec57df4734f10c32785310c1db8be5aaf37cb23c05#npm:4.0.5"],\ - ["micromatch", "npm:4.0.8"],\ - ["normalize-path", "npm:3.0.0"],\ - ["object-inspect", "npm:1.12.2"],\ - ["pidtree", "npm:0.6.0"],\ - ["string-argv", "npm:0.3.1"],\ - ["yaml", "npm:2.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["listr2", [\ - ["npm:4.0.5", {\ - "packageLocation": "./.yarn/cache/listr2-npm-4.0.5-e9e44decc1-9c591fdd4f.zip/node_modules/listr2/",\ - "packageDependencies": [\ - ["listr2", "npm:4.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:5f9010e5ff1626822e95f9478abbca9d06865e771c302ab7261d07ee4d7fe4994efa0046bb5f7982f8af81ec57df4734f10c32785310c1db8be5aaf37cb23c05#npm:4.0.5", {\ - "packageLocation": "./.yarn/__virtual__/listr2-virtual-b3f9afb5e2/0/cache/listr2-npm-4.0.5-e9e44decc1-9c591fdd4f.zip/node_modules/listr2/",\ - "packageDependencies": [\ - ["@types/enquirer", null],\ - ["cli-truncate", "npm:2.1.0"],\ - ["colorette", "npm:2.0.19"],\ - ["enquirer", null],\ - ["listr2", "virtual:5f9010e5ff1626822e95f9478abbca9d06865e771c302ab7261d07ee4d7fe4994efa0046bb5f7982f8af81ec57df4734f10c32785310c1db8be5aaf37cb23c05#npm:4.0.5"],\ - ["log-update", "npm:4.0.0"],\ - ["p-map", "npm:4.0.0"],\ - ["rfdc", "npm:1.3.0"],\ - ["rxjs", "npm:7.5.6"],\ - ["through", "npm:2.3.8"],\ - ["wrap-ansi", "npm:7.0.0"]\ - ],\ - "packagePeers": [\ - "@types/enquirer",\ - "enquirer"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["loader-runner", [\ - ["npm:4.3.0", {\ - "packageLocation": "./.yarn/cache/loader-runner-npm-4.3.0-9ca67df372-555ae00286.zip/node_modules/loader-runner/",\ - "packageDependencies": [\ - ["loader-runner", "npm:4.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["loader-utils", [\ - ["npm:1.4.2", {\ - "packageLocation": "./.yarn/cache/loader-utils-npm-1.4.2-b4537b2f88-2ae94cc88a.zip/node_modules/loader-utils/",\ - "packageDependencies": [\ - ["big.js", "npm:5.2.2"],\ - ["emojis-list", "npm:3.0.0"],\ - ["json5", "npm:1.0.2"],\ - ["loader-utils", "npm:1.4.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/loader-utils-npm-2.0.4-ba3800585b-28bd9af202.zip/node_modules/loader-utils/",\ - "packageDependencies": [\ - ["big.js", "npm:5.2.2"],\ - ["emojis-list", "npm:3.0.0"],\ - ["json5", "npm:2.2.3"],\ - ["loader-utils", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["locate-path", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip/node_modules/locate-path/",\ - "packageDependencies": [\ - ["locate-path", "npm:5.0.0"],\ - ["p-locate", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip/node_modules/locate-path/",\ - "packageDependencies": [\ - ["locate-path", "npm:6.0.0"],\ - ["p-locate", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash", [\ - ["npm:4.17.21", {\ - "packageLocation": "./.yarn/cache/lodash-npm-4.17.21-6382451519-c08619c038.zip/node_modules/lodash/",\ - "packageDependencies": [\ - ["lodash", "npm:4.17.21"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash-es", [\ - ["npm:4.17.21", {\ - "packageLocation": "./.yarn/cache/lodash-es-npm-4.17.21-b45832dfce-03f39878ea.zip/node_modules/lodash-es/",\ - "packageDependencies": [\ - ["lodash-es", "npm:4.17.21"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash.clonedeep", [\ - ["npm:4.5.0", {\ - "packageLocation": "./.yarn/cache/lodash.clonedeep-npm-4.5.0-fbc3cda4e5-957ed243f8.zip/node_modules/lodash.clonedeep/",\ - "packageDependencies": [\ - ["lodash.clonedeep", "npm:4.5.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash.debounce", [\ - ["npm:4.0.8", {\ - "packageLocation": "./.yarn/cache/lodash.debounce-npm-4.0.8-f1d6e09799-cd0b281978.zip/node_modules/lodash.debounce/",\ - "packageDependencies": [\ - ["lodash.debounce", "npm:4.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash.isplainobject", [\ - ["npm:4.0.6", {\ - "packageLocation": "./.yarn/cache/lodash.isplainobject-npm-4.0.6-d73937742f-29c6351f28.zip/node_modules/lodash.isplainobject/",\ - "packageDependencies": [\ - ["lodash.isplainobject", "npm:4.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash.merge", [\ - ["npm:4.6.2", {\ - "packageLocation": "./.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-d0ea2dd009.zip/node_modules/lodash.merge/",\ - "packageDependencies": [\ - ["lodash.merge", "npm:4.6.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lodash.sortby", [\ - ["npm:4.7.0", {\ - "packageLocation": "./.yarn/cache/lodash.sortby-npm-4.7.0-fda8ab950d-38df19ae28.zip/node_modules/lodash.sortby/",\ - "packageDependencies": [\ - ["lodash.sortby", "npm:4.7.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["log-symbols", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip/node_modules/log-symbols/",\ - "packageDependencies": [\ - ["chalk", "npm:4.1.2"],\ - ["is-unicode-supported", "npm:0.1.0"],\ - ["log-symbols", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["log-update", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/log-update-npm-4.0.0-9d0554261c-ae2f85bbab.zip/node_modules/log-update/",\ - "packageDependencies": [\ - ["ansi-escapes", "npm:4.3.2"],\ - ["cli-cursor", "npm:3.1.0"],\ - ["log-update", "npm:4.0.0"],\ - ["slice-ansi", "npm:4.0.0"],\ - ["wrap-ansi", "npm:6.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["loglevel", [\ - ["npm:1.8.0", {\ - "packageLocation": "./.yarn/cache/loglevel-npm-1.8.0-521cbfe852-72d700ea69.zip/node_modules/loglevel/",\ - "packageDependencies": [\ - ["loglevel", "npm:1.8.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["long", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/long-npm-4.0.0-ecd96a31ed-8296e2ba7b.zip/node_modules/long/",\ - "packageDependencies": [\ - ["long", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lookup-closest-locale", [\ - ["npm:6.2.0", {\ - "packageLocation": "./.yarn/cache/lookup-closest-locale-npm-6.2.0-d56365d4c4-5ef9a8d48c.zip/node_modules/lookup-closest-locale/",\ - "packageDependencies": [\ - ["lookup-closest-locale", "npm:6.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["loose-envify", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/loose-envify-npm-1.4.0-6307b72ccf-6517e24e0c.zip/node_modules/loose-envify/",\ - "packageDependencies": [\ - ["js-tokens", "npm:4.0.0"],\ - ["loose-envify", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lower-case", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/lower-case-npm-2.0.2-151055f1c2-83a0a5f159.zip/node_modules/lower-case/",\ - "packageDependencies": [\ - ["lower-case", "npm:2.0.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lower-case-first", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/lower-case-first-npm-2.0.2-6b06225f39-33e3da1098.zip/node_modules/lower-case-first/",\ - "packageDependencies": [\ - ["lower-case-first", "npm:2.0.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lru-cache", [\ - ["npm:10.4.3", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-10.4.3-30c10b861a-e6e9026736.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:10.4.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.2.4", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-2.2.4-404a3821bb-08b24d7cb6.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:2.2.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.1", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-5.1.1-f475882a51-951d2673dc.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:5.1.1"],\ - ["yallist", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-fc1fe2ee20.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:6.0.0"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.14.0", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-7.14.0-354cf654ec-f8e0100971.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:7.14.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.18.3", {\ - "packageLocation": "./.yarn/cache/lru-cache-npm-7.18.3-e68be5b11c-6029ca5aba.zip/node_modules/lru-cache/",\ - "packageDependencies": [\ - ["lru-cache", "npm:7.18.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lru_map", [\ - ["npm:0.3.3", {\ - "packageLocation": "./.yarn/cache/lru_map-npm-0.3.3-a038bb3418-50f6597924.zip/node_modules/lru_map/",\ - "packageDependencies": [\ - ["lru_map", "npm:0.3.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["luxon", [\ - ["npm:3.4.4", {\ - "packageLocation": "./.yarn/cache/luxon-npm-3.4.4-c93f95dde8-c14164bc33.zip/node_modules/luxon/",\ - "packageDependencies": [\ - ["luxon", "npm:3.4.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["lz-string", [\ - ["npm:1.4.4", {\ - "packageLocation": "./.yarn/cache/lz-string-npm-1.4.4-59a2091d3f-da3abc3c15.zip/node_modules/lz-string/",\ - "packageDependencies": [\ - ["lz-string", "npm:1.4.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["magic-string", [\ - ["npm:0.25.9", {\ - "packageLocation": "./.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-87a14b944b.zip/node_modules/magic-string/",\ - "packageDependencies": [\ - ["magic-string", "npm:0.25.9"],\ - ["sourcemap-codec", "npm:1.4.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["make-dir", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/make-dir-npm-1.3.0-692810d225-c564f6e7bb.zip/node_modules/make-dir/",\ - "packageDependencies": [\ - ["make-dir", "npm:1.3.0"],\ - ["pify", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/make-dir-npm-3.1.0-d1d7505142-484200020a.zip/node_modules/make-dir/",\ - "packageDependencies": [\ - ["make-dir", "npm:3.1.0"],\ - ["semver", "npm:6.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["make-fetch-happen", [\ - ["npm:10.2.1", {\ - "packageLocation": "./.yarn/cache/make-fetch-happen-npm-10.2.1-f1cc7cd2df-fef5acb865.zip/node_modules/make-fetch-happen/",\ - "packageDependencies": [\ - ["agentkeepalive", "npm:4.2.1"],\ - ["cacache", "npm:16.1.2"],\ - ["http-cache-semantics", "npm:4.1.1"],\ - ["http-proxy-agent", "npm:5.0.0"],\ - ["https-proxy-agent", "npm:5.0.1"],\ - ["is-lambda", "npm:1.0.1"],\ - ["lru-cache", "npm:7.14.0"],\ - ["make-fetch-happen", "npm:10.2.1"],\ - ["minipass", "npm:3.3.5"],\ - ["minipass-collect", "npm:1.0.2"],\ - ["minipass-fetch", "npm:2.1.1"],\ - ["minipass-flush", "npm:1.0.5"],\ - ["minipass-pipeline", "npm:1.2.4"],\ - ["negotiator", "npm:0.6.3"],\ - ["promise-retry", "npm:2.0.1"],\ - ["socks-proxy-agent", "npm:7.0.0"],\ - ["ssri", "npm:9.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["makeerror", [\ - ["npm:1.0.12", {\ - "packageLocation": "./.yarn/cache/makeerror-npm-1.0.12-69abf085d7-4c66ddfc65.zip/node_modules/makeerror/",\ - "packageDependencies": [\ - ["makeerror", "npm:1.0.12"],\ - ["tmpl", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["map-cache", [\ - ["npm:0.2.2", {\ - "packageLocation": "./.yarn/cache/map-cache-npm-0.2.2-1620199b05-3067cea542.zip/node_modules/map-cache/",\ - "packageDependencies": [\ - ["map-cache", "npm:0.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["map-visit", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/map-visit-npm-1.0.0-33a7988a9d-c27045a502.zip/node_modules/map-visit/",\ - "packageDependencies": [\ - ["map-visit", "npm:1.0.0"],\ - ["object-visit", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["marky", [\ - ["npm:1.2.5", {\ - "packageLocation": "./.yarn/cache/marky-npm-1.2.5-007e6cc885-ae775cea93.zip/node_modules/marky/",\ - "packageDependencies": [\ - ["marky", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["matcher-collection", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/matcher-collection-npm-2.0.1-6bee6f7d4f-f6d4f94bdc.zip/node_modules/matcher-collection/",\ - "packageDependencies": [\ - ["@types/minimatch", "npm:3.0.5"],\ - ["matcher-collection", "npm:2.0.1"],\ - ["minimatch", "npm:3.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["media-typer", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/media-typer-npm-0.3.0-8674f8f0f5-38e0984db3.zip/node_modules/media-typer/",\ - "packageDependencies": [\ - ["media-typer", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["merge-descriptors", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/merge-descriptors-npm-1.0.1-615287aaa8-5abc259d2a.zip/node_modules/merge-descriptors/",\ - "packageDependencies": [\ - ["merge-descriptors", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/merge-descriptors-npm-1.0.3-10b44ad75c-52117adbe0.zip/node_modules/merge-descriptors/",\ - "packageDependencies": [\ - ["merge-descriptors", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["merge-stream", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip/node_modules/merge-stream/",\ - "packageDependencies": [\ - ["merge-stream", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["merge2", [\ - ["npm:1.4.1", {\ - "packageLocation": "./.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip/node_modules/merge2/",\ - "packageDependencies": [\ - ["merge2", "npm:1.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["meros", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/meros-npm-1.3.0-8138dc54ff-1893d22686.zip/node_modules/meros/",\ - "packageDependencies": [\ - ["meros", "npm:1.3.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:fc910a5b45feb2b7cbfc0576ee10b096529c8e8c413877b663c2f3829cad00d05479874b90d25146b2fc3b60b138c6ab1293f475521f4b9c33bc1d1326fe22c5#npm:1.3.0", {\ - "packageLocation": "./.yarn/__virtual__/meros-virtual-01070aed61/0/cache/meros-npm-1.3.0-8138dc54ff-1893d22686.zip/node_modules/meros/",\ - "packageDependencies": [\ - ["@types/node", null],\ - ["meros", "virtual:fc910a5b45feb2b7cbfc0576ee10b096529c8e8c413877b663c2f3829cad00d05479874b90d25146b2fc3b60b138c6ab1293f475521f4b9c33bc1d1326fe22c5#npm:1.3.0"]\ - ],\ - "packagePeers": [\ - "@types/node"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["metaviewport-parser", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/metaviewport-parser-npm-0.3.0-3be8017f45-d63f4c9d7b.zip/node_modules/metaviewport-parser/",\ - "packageDependencies": [\ - ["metaviewport-parser", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["methods", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/methods-npm-1.1.2-92f6fdb39b-a385dd974f.zip/node_modules/methods/",\ - "packageDependencies": [\ - ["methods", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["micro-cors", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/micro-cors-npm-0.1.1-ed2c9cf933-adf8a2b613.zip/node_modules/micro-cors/",\ - "packageDependencies": [\ - ["micro-cors", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["micromatch", [\ - ["npm:3.1.10", {\ - "packageLocation": "./.yarn/cache/micromatch-npm-3.1.10-016e80c79d-4102bac836.zip/node_modules/micromatch/",\ - "packageDependencies": [\ - ["arr-diff", "npm:4.0.0"],\ - ["array-unique", "npm:0.3.2"],\ - ["braces", "npm:2.3.2"],\ - ["define-property", "npm:2.0.2"],\ - ["extend-shallow", "npm:3.0.2"],\ - ["extglob", "npm:2.0.4"],\ - ["fragment-cache", "npm:0.2.1"],\ - ["kind-of", "npm:6.0.3"],\ - ["micromatch", "npm:3.1.10"],\ - ["nanomatch", "npm:1.2.13"],\ - ["object.pick", "npm:1.3.0"],\ - ["regex-not", "npm:1.0.2"],\ - ["snapdragon", "npm:0.8.2"],\ - ["to-regex", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.8", {\ - "packageLocation": "./.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-6bf2a01672.zip/node_modules/micromatch/",\ - "packageDependencies": [\ - ["braces", "npm:3.0.3"],\ - ["micromatch", "npm:4.0.8"],\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mime", [\ - ["npm:1.6.0", {\ - "packageLocation": "./.yarn/cache/mime-npm-1.6.0-60ae95038a-b7d98bb1e0.zip/node_modules/mime/",\ - "packageDependencies": [\ - ["mime", "npm:1.6.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.6.0", {\ - "packageLocation": "./.yarn/cache/mime-npm-2.6.0-88b89d8de0-7da117808b.zip/node_modules/mime/",\ - "packageDependencies": [\ - ["mime", "npm:2.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mime-db", [\ - ["npm:1.52.0", {\ - "packageLocation": "./.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-54bb60bf39.zip/node_modules/mime-db/",\ - "packageDependencies": [\ - ["mime-db", "npm:1.52.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mime-types", [\ - ["npm:2.1.35", {\ - "packageLocation": "./.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89aa9651b6.zip/node_modules/mime-types/",\ - "packageDependencies": [\ - ["mime-db", "npm:1.52.0"],\ - ["mime-types", "npm:2.1.35"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mimic-fn", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/mimic-fn-npm-1.2.0-960bf15ab7-69c0820515.zip/node_modules/mimic-fn/",\ - "packageDependencies": [\ - ["mimic-fn", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip/node_modules/mimic-fn/",\ - "packageDependencies": [\ - ["mimic-fn", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/mimic-fn-npm-4.0.0-feaeda79f7-995dcece15.zip/node_modules/mimic-fn/",\ - "packageDependencies": [\ - ["mimic-fn", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["min-indent", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip/node_modules/min-indent/",\ - "packageDependencies": [\ - ["min-indent", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minimatch", [\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-3.1.2-9405269906-e0b25b04cd.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:1.1.11"],\ - ["minimatch", "npm:3.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.2.3", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-4.2.3-8b85015af8-02bacb1874.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:1.1.11"],\ - ["minimatch", "npm:4.2.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-5.1.0-34f6240621-3bcc271af1.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:2.0.1"],\ - ["minimatch", "npm:5.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.0.3", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-9.0.3-69d7d6fad5-c81b47d281.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:2.0.1"],\ - ["minimatch", "npm:9.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.0.5", {\ - "packageLocation": "./.yarn/cache/minimatch-npm-9.0.5-9aa93d97fa-dd6a8927b0.zip/node_modules/minimatch/",\ - "packageDependencies": [\ - ["brace-expansion", "npm:2.0.1"],\ - ["minimatch", "npm:9.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minimist", [\ - ["npm:1.2.6", {\ - "packageLocation": "./.yarn/cache/minimist-npm-1.2.6-f4cee4b4af-b956a7d486.zip/node_modules/minimist/",\ - "packageDependencies": [\ - ["minimist", "npm:1.2.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass", [\ - ["npm:3.3.5", {\ - "packageLocation": "./.yarn/cache/minipass-npm-3.3.5-a555b091e7-9f1101740d.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/minipass-npm-5.0.0-c64fb63c92-61682162d2.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.2", {\ - "packageLocation": "./.yarn/cache/minipass-npm-7.1.2-3a5327d36d-c25f0ee819.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-collect", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/minipass-collect-npm-1.0.2-3b4676eab5-14df761028.zip/node_modules/minipass-collect/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["minipass-collect", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-fetch", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/minipass-fetch-npm-2.1.1-c4a8efdb09-3b24bb8c54.zip/node_modules/minipass-fetch/",\ - "packageDependencies": [\ - ["encoding", "npm:0.1.13"],\ - ["minipass", "npm:3.3.5"],\ - ["minipass-fetch", "npm:2.1.1"],\ - ["minipass-sized", "npm:1.0.3"],\ - ["minizlib", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-flush", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip/node_modules/minipass-flush/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["minipass-flush", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-pipeline", [\ - ["npm:1.2.4", {\ - "packageLocation": "./.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip/node_modules/minipass-pipeline/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["minipass-pipeline", "npm:1.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minipass-sized", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-40982d8d83.zip/node_modules/minipass-sized/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["minipass-sized", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["minizlib", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-ae0f45436f.zip/node_modules/minizlib/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["minizlib", "npm:2.1.2"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/minizlib-npm-3.0.2-f56e815013-c075bed159.zip/node_modules/minizlib/",\ - "packageDependencies": [\ - ["minipass", "npm:7.1.2"],\ - ["minizlib", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mitt", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/mitt-npm-3.0.1-ce290ffa77-287c70d8e7.zip/node_modules/mitt/",\ - "packageDependencies": [\ - ["mitt", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mixin-deep", [\ - ["npm:1.3.2", {\ - "packageLocation": "./.yarn/cache/mixin-deep-npm-1.3.2-29b528e571-820d5a51fc.zip/node_modules/mixin-deep/",\ - "packageDependencies": [\ - ["for-in", "npm:1.0.2"],\ - ["is-extendable", "npm:1.0.1"],\ - ["mixin-deep", "npm:1.3.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mkdirp", [\ - ["npm:0.5.6", {\ - "packageLocation": "./.yarn/cache/mkdirp-npm-0.5.6-dcd5a6b97b-0c91b721bb.zip/node_modules/mkdirp/",\ - "packageDependencies": [\ - ["minimist", "npm:1.2.6"],\ - ["mkdirp", "npm:0.5.6"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-d71b8dcd4b.zip/node_modules/mkdirp/",\ - "packageDependencies": [\ - ["mkdirp", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/mkdirp-npm-3.0.1-f94bfa769e-16fd79c286.zip/node_modules/mkdirp/",\ - "packageDependencies": [\ - ["mkdirp", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mkdirp-classic", [\ - ["npm:0.5.3", {\ - "packageLocation": "./.yarn/cache/mkdirp-classic-npm-0.5.3-3b5c991910-3f4e088208.zip/node_modules/mkdirp-classic/",\ - "packageDependencies": [\ - ["mkdirp-classic", "npm:0.5.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mktemp", [\ - ["npm:0.4.0", {\ - "packageLocation": "./.yarn/cache/mktemp-npm-0.4.0-4f8b2c63cb-0d7d4f20be.zip/node_modules/mktemp/",\ - "packageDependencies": [\ - ["mktemp", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mpdx-react", [\ - ["workspace:.", {\ - "packageLocation": "./",\ - "packageDependencies": [\ - ["@apollo/client", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.7.1"],\ - ["@apollo/datasource-rest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.4.1"],\ - ["@apollo/server", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.11.2"],\ - ["@apollo/subgraph", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.1.3"],\ - ["@apollo/utils.fetcher", "npm:3.0.0"],\ - ["@as-integrations/next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.2.0"],\ - ["@crowdin/cli", "npm:4.9.1"],\ - ["@emotion/cache", "npm:11.11.0"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@graphql-codegen/add", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/cli", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/fragment-matcher", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.2"],\ - ["@graphql-codegen/near-operation-file-preset", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.0.0"],\ - ["@graphql-codegen/schema-ast", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.2"],\ - ["@graphql-codegen/typescript", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.2"],\ - ["@graphql-codegen/typescript-operations", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.0"],\ - ["@graphql-codegen/typescript-react-apollo", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:3.3.7"],\ - ["@graphql-codegen/typescript-resolvers", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.0.6"],\ - ["@graphql-tools/jest-transform", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.2.2"],\ - ["@graphql-tools/schema", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.0.4"],\ - ["@lhci/cli", "npm:0.13.0"],\ - ["@mdi/js", "npm:7.0.96"],\ - ["@mdi/react", "npm:1.6.1"],\ - ["@mui/icons-material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/lab", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.0.0-alpha.100"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/styles", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/system", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@mui/utils", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.2.0"],\ - ["@mui/x-data-grid", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.9.2"],\ - ["@mui/x-date-pickers", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.0.0-beta.7"],\ - ["@next/bundle-analyzer", "npm:15.0.3"],\ - ["@next/eslint-plugin-next", "npm:15.0.3"],\ - ["@parcel/watcher", "npm:2.4.1"],\ - ["@react-google-maps/api", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.20.3"],\ - ["@rollbar/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.11.1"],\ - ["@testing-library/dom", "npm:8.18.1"],\ - ["@testing-library/jest-dom", "npm:5.16.5"],\ - ["@testing-library/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.4.0"],\ - ["@testing-library/react-hooks", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.0.1"],\ - ["@testing-library/user-event", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:13.5.0"],\ - ["@types/formidable", "npm:3.4.5"],\ - ["@types/google.maps", "npm:3.50.2"],\ - ["@types/jest", "npm:29.5.14"],\ - ["@types/lodash", "npm:4.14.191"],\ - ["@types/luxon", "npm:3.4.2"],\ - ["@types/node", "npm:22.13.14"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/testing-library__jest-dom", "npm:5.14.5"],\ - ["@typescript-eslint/eslint-plugin", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.5.0"],\ - ["@typescript-eslint/parser", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.17.0"],\ - ["apollo3-cache-persist", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:0.14.1"],\ - ["clsx", "npm:2.1.1"],\ - ["concurrently", "npm:8.2.2"],\ - ["css-mediaquery", "npm:0.1.2"],\ - ["dnd-core", "npm:16.0.1"],\ - ["dotenv", "npm:16.0.1"],\ - ["eslint", "npm:8.57.0"],\ - ["eslint-config-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:8.5.0"],\ - ["eslint-plugin-import", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.26.0"],\ - ["eslint-plugin-jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:27.0.4"],\ - ["eslint-plugin-jsx-a11y", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:6.6.1"],\ - ["eslint-plugin-prettier", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.2.1"],\ - ["eslint-plugin-react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.31.8"],\ - ["formidable", "npm:3.5.4"],\ - ["formik", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.2.9"],\ - ["framer-motion", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:7.3.6"],\ - ["graphql", "npm:16.9.0"],\ - ["graphql-ergonomock", [\ - "@cruglobal/graphql-ergonomock",\ - "npm:1.2.2"\ - ]],\ - ["graphql-tag", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.12.6"],\ - ["husky", "npm:8.0.1"],\ - ["i18next", "npm:21.9.2"],\ - ["i18next-browser-languagedetector", "npm:6.1.5"],\ - ["i18next-http-backend", "npm:1.4.4"],\ - ["i18next-parser", "npm:9.0.2"],\ - ["isomorphic-fetch", "npm:3.0.0"],\ - ["jest", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:29.0.3"],\ - ["jest-environment-jsdom", "npm:29.0.3"],\ - ["jest-fetch-mock", "npm:3.0.3"],\ - ["lighthouse", "npm:11.7.1"],\ - ["lint-staged", "npm:13.0.3"],\ - ["lodash", "npm:4.17.21"],\ - ["luxon", "npm:3.4.4"],\ - ["micro-cors", "npm:0.1.1"],\ - ["mpdx-react", "workspace:."],\ - ["next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3"],\ - ["next-auth", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.24.11"],\ - ["next-compose-plugins", "npm:2.2.1"],\ - ["next-optimized-images", "npm:2.6.2"],\ - ["next-pwa", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.6.0"],\ - ["node-mocks-http", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.16.2"],\ - ["notistack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.0.5"],\ - ["prettier", "npm:3.6.2"],\ - ["prop-types", "npm:15.8.1"],\ - ["puppeteer", "npm:24.4.0"],\ - ["react", "npm:18.2.0"],\ - ["react-csv", "npm:2.2.2"],\ - ["react-dnd", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:14.0.5"],\ - ["react-dnd-html5-backend", "npm:14.1.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-i18next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.18.6"],\ - ["react-virtuoso", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.19.0"],\ - ["recharts", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.3.2"],\ - ["rollbar", "npm:2.26.4"],\ - ["ts-essentials", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.3.0"],\ - ["tslib", "npm:2.4.0"],\ - ["tss-react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.3"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"],\ - ["url-loader", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.1"],\ - ["webpack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.96.1"],\ - ["yup", "npm:1.4.0"]\ - ],\ - "linkType": "SOFT"\ - }]\ - ]],\ - ["mrmime", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/mrmime-npm-2.0.0-0326eb1458-8d95f714ea.zip/node_modules/mrmime/",\ - "packageDependencies": [\ - ["mrmime", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ms", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/ms-npm-2.0.0-9e1101a471-0e6a22b8b7.zip/node_modules/ms/",\ - "packageDependencies": [\ - ["ms", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/",\ - "packageDependencies": [\ - ["ms", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.3", {\ - "packageLocation": "./.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip/node_modules/ms/",\ - "packageDependencies": [\ - ["ms", "npm:2.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mute-stream", [\ - ["npm:0.0.7", {\ - "packageLocation": "./.yarn/cache/mute-stream-npm-0.0.7-22b59a65dd-63c177ae8b.zip/node_modules/mute-stream/",\ - "packageDependencies": [\ - ["mute-stream", "npm:0.0.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.0.8", {\ - "packageLocation": "./.yarn/cache/mute-stream-npm-0.0.8-489a7d6c2b-a2d2e79dde.zip/node_modules/mute-stream/",\ - "packageDependencies": [\ - ["mute-stream", "npm:0.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nanoid", [\ - ["npm:3.3.8", {\ - "packageLocation": "./.yarn/cache/nanoid-npm-3.3.8-d22226208b-2d1766606c.zip/node_modules/nanoid/",\ - "packageDependencies": [\ - ["nanoid", "npm:3.3.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nanomatch", [\ - ["npm:1.2.13", {\ - "packageLocation": "./.yarn/cache/nanomatch-npm-1.2.13-bc9173dbe7-5c4ec7d626.zip/node_modules/nanomatch/",\ - "packageDependencies": [\ - ["arr-diff", "npm:4.0.0"],\ - ["array-unique", "npm:0.3.2"],\ - ["define-property", "npm:2.0.2"],\ - ["extend-shallow", "npm:3.0.2"],\ - ["fragment-cache", "npm:0.2.1"],\ - ["is-windows", "npm:1.0.2"],\ - ["kind-of", "npm:6.0.3"],\ - ["nanomatch", "npm:1.2.13"],\ - ["object.pick", "npm:1.3.0"],\ - ["regex-not", "npm:1.0.2"],\ - ["snapdragon", "npm:0.8.2"],\ - ["to-regex", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["natural-compare", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/natural-compare-npm-1.4.0-97b75b362d-23ad088b08.zip/node_modules/natural-compare/",\ - "packageDependencies": [\ - ["natural-compare", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["negotiator", [\ - ["npm:0.6.3", {\ - "packageLocation": "./.yarn/cache/negotiator-npm-0.6.3-9d50e36171-2723fb822a.zip/node_modules/negotiator/",\ - "packageDependencies": [\ - ["negotiator", "npm:0.6.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["neo-async", [\ - ["npm:2.6.2", {\ - "packageLocation": "./.yarn/cache/neo-async-npm-2.6.2-75d6902586-1a7948fea8.zip/node_modules/neo-async/",\ - "packageDependencies": [\ - ["neo-async", "npm:2.6.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["netmask", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/netmask-npm-2.0.2-2299510a4d-375cabe898.zip/node_modules/netmask/",\ - "packageDependencies": [\ - ["netmask", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["next", [\ - ["npm:15.0.3", {\ - "packageLocation": "./.yarn/cache/next-npm-15.0.3-00384c79d0-d7044b22cd.zip/node_modules/next/",\ - "packageDependencies": [\ - ["next", "npm:15.0.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3", {\ - "packageLocation": "./.yarn/__virtual__/next-virtual-08055e223d/0/cache/next-npm-15.0.3-00384c79d0-d7044b22cd.zip/node_modules/next/",\ - "packageDependencies": [\ - ["@next/env", "npm:15.0.3"],\ - ["@next/swc-darwin-arm64", "npm:15.0.3"],\ - ["@next/swc-darwin-x64", "npm:15.0.3"],\ - ["@next/swc-linux-arm64-gnu", "npm:15.0.3"],\ - ["@next/swc-linux-arm64-musl", "npm:15.0.3"],\ - ["@next/swc-linux-x64-gnu", "npm:15.0.3"],\ - ["@next/swc-linux-x64-musl", "npm:15.0.3"],\ - ["@next/swc-win32-arm64-msvc", "npm:15.0.3"],\ - ["@next/swc-win32-x64-msvc", "npm:15.0.3"],\ - ["@opentelemetry/api", null],\ - ["@playwright/test", null],\ - ["@swc/counter", "npm:0.1.3"],\ - ["@swc/helpers", "npm:0.5.13"],\ - ["@types/babel-plugin-react-compiler", null],\ - ["@types/opentelemetry__api", null],\ - ["@types/playwright__test", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@types/sass", null],\ - ["babel-plugin-react-compiler", null],\ - ["busboy", "npm:1.6.0"],\ - ["caniuse-lite", "npm:1.0.30001680"],\ - ["next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3"],\ - ["postcss", "npm:8.4.31"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["sass", null],\ - ["sharp", "npm:0.33.5"],\ - ["styled-jsx", "virtual:08055e223d42825526d8678d4204abbfe1113c42d04e8846f1ba55f78c33f672ffad481b7e0b145d99277aa987e6a73a8538261459a59656a6ad7115d3717792#npm:5.1.6"]\ - ],\ - "packagePeers": [\ - "@opentelemetry/api",\ - "@playwright/test",\ - "@types/babel-plugin-react-compiler",\ - "@types/opentelemetry__api",\ - "@types/playwright__test",\ - "@types/react-dom",\ - "@types/react",\ - "@types/sass",\ - "babel-plugin-react-compiler",\ - "react-dom",\ - "react",\ - "sass"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["next-auth", [\ - ["npm:4.24.11", {\ - "packageLocation": "./.yarn/cache/next-auth-npm-4.24.11-e0e7c6275e-736ed5d274.zip/node_modules/next-auth/",\ - "packageDependencies": [\ - ["next-auth", "npm:4.24.11"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.24.11", {\ - "packageLocation": "./.yarn/__virtual__/next-auth-virtual-2f234bc5b4/0/cache/next-auth-npm-4.24.11-e0e7c6275e-736ed5d274.zip/node_modules/next-auth/",\ - "packageDependencies": [\ - ["@auth/core", null],\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@panva/hkdf", "npm:1.0.4"],\ - ["@types/auth__core", null],\ - ["@types/next", null],\ - ["@types/nodemailer", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["cookie", "npm:0.7.2"],\ - ["jose", "npm:4.15.9"],\ - ["next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3"],\ - ["next-auth", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.24.11"],\ - ["nodemailer", null],\ - ["oauth", "npm:0.9.15"],\ - ["openid-client", "npm:5.4.0"],\ - ["preact", "npm:10.10.5"],\ - ["preact-render-to-string", "virtual:2f234bc5b4b4b93a0f803adfb2ce3362773eb66db09ecb47324d36c83daaf8606c287d18fb86ff658b10ae9f59d41562a8510e2f78514834902194a7aabf5de7#npm:5.2.2"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["uuid", "npm:8.3.2"]\ - ],\ - "packagePeers": [\ - "@auth/core",\ - "@types/auth__core",\ - "@types/next",\ - "@types/nodemailer",\ - "@types/react-dom",\ - "@types/react",\ - "next",\ - "nodemailer",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["next-compose-plugins", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/next-compose-plugins-npm-2.2.1-a9c8f4fdca-e3c8b26617.zip/node_modules/next-compose-plugins/",\ - "packageDependencies": [\ - ["next-compose-plugins", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["next-optimized-images", [\ - ["npm:2.6.2", {\ - "packageLocation": "./.yarn/cache/next-optimized-images-npm-2.6.2-2fe1ece027-9cf9e17ab9.zip/node_modules/next-optimized-images/",\ - "packageDependencies": [\ - ["chalk", "npm:2.4.2"],\ - ["figures", "npm:3.2.0"],\ - ["file-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:3.0.1"],\ - ["imagemin", "npm:6.1.0"],\ - ["img-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:3.0.2"],\ - ["next-optimized-images", "npm:2.6.2"],\ - ["raw-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:2.0.0"],\ - ["url-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["next-pwa", [\ - ["npm:5.6.0", {\ - "packageLocation": "./.yarn/cache/next-pwa-npm-5.6.0-0f61704f10-a42b395e3f.zip/node_modules/next-pwa/",\ - "packageDependencies": [\ - ["next-pwa", "npm:5.6.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.6.0", {\ - "packageLocation": "./.yarn/__virtual__/next-pwa-virtual-6e92337c31/0/cache/next-pwa-npm-5.6.0-0f61704f10-a42b395e3f.zip/node_modules/next-pwa/",\ - "packageDependencies": [\ - ["@types/next", null],\ - ["babel-loader", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:8.2.5"],\ - ["clean-webpack-plugin", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:4.0.0"],\ - ["globby", "npm:11.1.0"],\ - ["next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:15.0.3"],\ - ["next-pwa", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.6.0"],\ - ["terser-webpack-plugin", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:5.3.5"],\ - ["workbox-webpack-plugin", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:6.5.4"],\ - ["workbox-window", "npm:6.5.4"]\ - ],\ - "packagePeers": [\ - "@types/next",\ - "next"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["no-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/no-case-npm-3.0.4-12884c3d98-0b2ebc113d.zip/node_modules/no-case/",\ - "packageDependencies": [\ - ["lower-case", "npm:2.0.2"],\ - ["no-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-abort-controller", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/node-abort-controller-npm-3.1.1-e246ed42cd-0a2cdb7ec0.zip/node_modules/node-abort-controller/",\ - "packageDependencies": [\ - ["node-abort-controller", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-addon-api", [\ - ["npm:7.1.0", {\ - "packageLocation": "./.yarn/unplugged/node-addon-api-npm-7.1.0-619a324431/node_modules/node-addon-api/",\ - "packageDependencies": [\ - ["node-addon-api", "npm:7.1.0"],\ - ["node-gyp", "npm:9.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-fetch", [\ - ["npm:2.6.12", {\ - "packageLocation": "./.yarn/cache/node-fetch-npm-2.6.12-48619ce9d6-370ed4d906.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["node-fetch", "npm:2.6.12"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.6.7", {\ - "packageLocation": "./.yarn/cache/node-fetch-npm-2.6.7-777aa2a6df-4bc9245383.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["node-fetch", "npm:2.6.7"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:2.7.0", {\ - "packageLocation": "./.yarn/cache/node-fetch-npm-2.7.0-587d57004e-b24f8a3dc9.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["node-fetch", "npm:2.7.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9c67668db478e95ba4d6a763bc55027eeff0d22eaf59478017ea07386fc33a3c7b7b625af78aa86a33991a9a500a7aa216e28632de568f02adefd662ef53a42d#npm:2.6.12", {\ - "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-80ad860ad7/0/cache/node-fetch-npm-2.6.12-48619ce9d6-370ed4d906.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["@types/encoding", null],\ - ["encoding", null],\ - ["node-fetch", "virtual:9c67668db478e95ba4d6a763bc55027eeff0d22eaf59478017ea07386fc33a3c7b7b625af78aa86a33991a9a500a7aa216e28632de568f02adefd662ef53a42d#npm:2.6.12"],\ - ["whatwg-url", "npm:5.0.0"]\ - ],\ - "packagePeers": [\ - "@types/encoding",\ - "encoding"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7", {\ - "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-4a377fafec/0/cache/node-fetch-npm-2.6.7-777aa2a6df-4bc9245383.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["@types/encoding", null],\ - ["encoding", null],\ - ["node-fetch", "virtual:bce711adff68a6cdf1561a45305ccbe56f7b2ce2f0cfd47cb36415e40898f689ab7e0e0a0b738617f4473953ed49e01b15d52d64826ea6cf70b1b898ac7b2fb6#npm:2.6.7"],\ - ["whatwg-url", "npm:5.0.0"]\ - ],\ - "packagePeers": [\ - "@types/encoding",\ - "encoding"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:dfcfc67991ac79ee17f4166409b8a921ae22a3c95c0664e0dd400f8bfd02301635390fb1015901b934cee853640ffefebb140939b33e21467c8ccac2823382a1#npm:2.7.0", {\ - "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-03e1db0f69/0/cache/node-fetch-npm-2.7.0-587d57004e-b24f8a3dc9.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["@types/encoding", null],\ - ["encoding", null],\ - ["node-fetch", "virtual:dfcfc67991ac79ee17f4166409b8a921ae22a3c95c0664e0dd400f8bfd02301635390fb1015901b934cee853640ffefebb140939b33e21467c8ccac2823382a1#npm:2.7.0"],\ - ["whatwg-url", "npm:5.0.0"]\ - ],\ - "packagePeers": [\ - "@types/encoding",\ - "encoding"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-gyp", [\ - ["npm:9.1.0", {\ - "packageLocation": "./.yarn/unplugged/node-gyp-npm-9.1.0-2091059b31/node_modules/node-gyp/",\ - "packageDependencies": [\ - ["env-paths", "npm:2.2.1"],\ - ["glob", "npm:7.2.3"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["make-fetch-happen", "npm:10.2.1"],\ - ["node-gyp", "npm:9.1.0"],\ - ["nopt", "npm:5.0.0"],\ - ["npmlog", "npm:6.0.2"],\ - ["rimraf", "npm:3.0.2"],\ - ["semver", "npm:7.6.0"],\ - ["tar", "npm:6.2.1"],\ - ["which", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-int64", [\ - ["npm:0.4.0", {\ - "packageLocation": "./.yarn/cache/node-int64-npm-0.4.0-0dc04ec3b2-b7afc2b65e.zip/node_modules/node-int64/",\ - "packageDependencies": [\ - ["node-int64", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-mocks-http", [\ - ["npm:1.16.2", {\ - "packageLocation": "./.yarn/cache/node-mocks-http-npm-1.16.2-9761865399-6326934307.zip/node_modules/node-mocks-http/",\ - "packageDependencies": [\ - ["node-mocks-http", "npm:1.16.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.16.2", {\ - "packageLocation": "./.yarn/__virtual__/node-mocks-http-virtual-018cc87961/0/cache/node-mocks-http-npm-1.16.2-9761865399-6326934307.zip/node_modules/node-mocks-http/",\ - "packageDependencies": [\ - ["@types/express", null],\ - ["@types/node", "npm:22.13.14"],\ - ["accepts", "npm:1.3.8"],\ - ["content-disposition", "npm:0.5.4"],\ - ["depd", "npm:1.1.2"],\ - ["fresh", "npm:0.5.2"],\ - ["merge-descriptors", "npm:1.0.1"],\ - ["methods", "npm:1.1.2"],\ - ["mime", "npm:1.6.0"],\ - ["node-mocks-http", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:1.16.2"],\ - ["parseurl", "npm:1.3.3"],\ - ["range-parser", "npm:1.2.1"],\ - ["type-is", "npm:1.6.18"]\ - ],\ - "packagePeers": [\ - "@types/express",\ - "@types/node"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["node-releases", [\ - ["npm:2.0.14", {\ - "packageLocation": "./.yarn/cache/node-releases-npm-2.0.14-d39047cad8-0f7607ec7d.zip/node_modules/node-releases/",\ - "packageDependencies": [\ - ["node-releases", "npm:2.0.14"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.18", {\ - "packageLocation": "./.yarn/cache/node-releases-npm-2.0.18-51abc46668-241e5fa955.zip/node_modules/node-releases/",\ - "packageDependencies": [\ - ["node-releases", "npm:2.0.18"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.6", {\ - "packageLocation": "./.yarn/cache/node-releases-npm-2.0.6-8accb3fefb-e86a926dc9.zip/node_modules/node-releases/",\ - "packageDependencies": [\ - ["node-releases", "npm:2.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nopt", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/nopt-npm-5.0.0-304b40fbfe-00f9bb2d16.zip/node_modules/nopt/",\ - "packageDependencies": [\ - ["abbrev", "npm:1.1.1"],\ - ["nopt", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["normalize-path", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/normalize-path-npm-2.1.1-65c4766716-7e9cbdcf7f.zip/node_modules/normalize-path/",\ - "packageDependencies": [\ - ["normalize-path", "npm:2.1.1"],\ - ["remove-trailing-separator", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip/node_modules/normalize-path/",\ - "packageDependencies": [\ - ["normalize-path", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["notistack", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/notistack-npm-2.0.5-a4b1a808c2-7502f1cd9e.zip/node_modules/notistack/",\ - "packageDependencies": [\ - ["notistack", "npm:2.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.0.5", {\ - "packageLocation": "./.yarn/__virtual__/notistack-virtual-0a586bf020/0/cache/notistack-npm-2.0.5-a4b1a808c2-7502f1cd9e.zip/node_modules/notistack/",\ - "packageDependencies": [\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/styled", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.0"],\ - ["@mui/material", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.15.14"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__styled", null],\ - ["@types/mui__material", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["clsx", "npm:1.2.1"],\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["notistack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.0.5"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/styled",\ - "@mui/material",\ - "@types/emotion__react",\ - "@types/emotion__styled",\ - "@types/mui__material",\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["now-and-later", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/now-and-later-npm-3.0.0-4a34a5ebaf-5300d42932.zip/node_modules/now-and-later/",\ - "packageDependencies": [\ - ["now-and-later", "npm:3.0.0"],\ - ["once", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["npm-run-path", [\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip/node_modules/npm-run-path/",\ - "packageDependencies": [\ - ["npm-run-path", "npm:4.0.1"],\ - ["path-key", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/npm-run-path-npm-5.1.0-79c0668d42-dc184eb5ec.zip/node_modules/npm-run-path/",\ - "packageDependencies": [\ - ["npm-run-path", "npm:5.1.0"],\ - ["path-key", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["npmlog", [\ - ["npm:6.0.2", {\ - "packageLocation": "./.yarn/cache/npmlog-npm-6.0.2-e0e69455c7-82b123677e.zip/node_modules/npmlog/",\ - "packageDependencies": [\ - ["are-we-there-yet", "npm:3.0.1"],\ - ["console-control-strings", "npm:1.1.0"],\ - ["gauge", "npm:4.0.4"],\ - ["npmlog", "npm:6.0.2"],\ - ["set-blocking", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nth-check", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/nth-check-npm-2.1.1-f97afc8169-5afc3dafcd.zip/node_modules/nth-check/",\ - "packageDependencies": [\ - ["boolbase", "npm:1.0.0"],\ - ["nth-check", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nullthrows", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/nullthrows-npm-1.1.1-3d1f817134-c7cf377a09.zip/node_modules/nullthrows/",\ - "packageDependencies": [\ - ["nullthrows", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["nwsapi", [\ - ["npm:2.2.2", {\ - "packageLocation": "./.yarn/cache/nwsapi-npm-2.2.2-b77040326c-b3d6e6dec6.zip/node_modules/nwsapi/",\ - "packageDependencies": [\ - ["nwsapi", "npm:2.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["oauth", [\ - ["npm:0.9.15", {\ - "packageLocation": "./.yarn/cache/oauth-npm-0.9.15-a6aae972bc-6b0b10be19.zip/node_modules/oauth/",\ - "packageDependencies": [\ - ["oauth", "npm:0.9.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object-assign", [\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/object-assign-npm-4.1.1-1004ad6dec-fcc6e4ea8c.zip/node_modules/object-assign/",\ - "packageDependencies": [\ - ["object-assign", "npm:4.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object-copy", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/object-copy-npm-0.1.0-e229d02f2b-a9e35f07e3.zip/node_modules/object-copy/",\ - "packageDependencies": [\ - ["copy-descriptor", "npm:0.1.1"],\ - ["define-property", "npm:0.2.5"],\ - ["kind-of", "npm:3.2.2"],\ - ["object-copy", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object-hash", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/object-hash-npm-2.2.0-d97a921cc1-dee06b6271.zip/node_modules/object-hash/",\ - "packageDependencies": [\ - ["object-hash", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object-inspect", [\ - ["npm:1.12.2", {\ - "packageLocation": "./.yarn/cache/object-inspect-npm-1.12.2-f125a822c0-aa11100d45.zip/node_modules/object-inspect/",\ - "packageDependencies": [\ - ["object-inspect", "npm:1.12.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.13.3", {\ - "packageLocation": "./.yarn/cache/object-inspect-npm-1.13.3-b4e129b6d9-14cb973d83.zip/node_modules/object-inspect/",\ - "packageDependencies": [\ - ["object-inspect", "npm:1.13.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object-keys", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/object-keys-npm-1.1.1-1bf2f1be93-3d81d02674.zip/node_modules/object-keys/",\ - "packageDependencies": [\ - ["object-keys", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object-visit", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/object-visit-npm-1.0.1-c5c9057c24-77abf807de.zip/node_modules/object-visit/",\ - "packageDependencies": [\ - ["isobject", "npm:3.0.1"],\ - ["object-visit", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object.assign", [\ - ["npm:4.1.4", {\ - "packageLocation": "./.yarn/cache/object.assign-npm-4.1.4-fb3deb1c3a-fd82d45289.zip/node_modules/object.assign/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["has-symbols", "npm:1.0.3"],\ - ["object-keys", "npm:1.1.1"],\ - ["object.assign", "npm:4.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object.entries", [\ - ["npm:1.1.5", {\ - "packageLocation": "./.yarn/cache/object.entries-npm-1.1.5-7a8fcbc43e-ed3a5ba6f7.zip/node_modules/object.entries/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["object.entries", "npm:1.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object.fromentries", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/object.fromentries-npm-2.0.5-68ed942fa7-e60a00c590.zip/node_modules/object.fromentries/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["object.fromentries", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object.hasown", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/object.hasown-npm-1.1.1-66d3df7cd3-bdce046fdd.zip/node_modules/object.hasown/",\ - "packageDependencies": [\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["object.hasown", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object.pick", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/object.pick-npm-1.3.0-dad8eae8fb-92d7226a6b.zip/node_modules/object.pick/",\ - "packageDependencies": [\ - ["isobject", "npm:3.0.1"],\ - ["object.pick", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["object.values", [\ - ["npm:1.1.5", {\ - "packageLocation": "./.yarn/cache/object.values-npm-1.1.5-f1de7f3742-83db44d40d.zip/node_modules/object.values/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["object.values", "npm:1.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["oidc-token-hash", [\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/oidc-token-hash-npm-5.0.1-9b98415c82-d62aa8c665.zip/node_modules/oidc-token-hash/",\ - "packageDependencies": [\ - ["oidc-token-hash", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["on-finished", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/cache/on-finished-npm-2.4.1-907af70f88-8e81472c50.zip/node_modules/on-finished/",\ - "packageDependencies": [\ - ["ee-first", "npm:1.1.1"],\ - ["on-finished", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["on-headers", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/on-headers-npm-1.0.2-e7cd3ea25e-870766c163.zip/node_modules/on-headers/",\ - "packageDependencies": [\ - ["on-headers", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["once", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip/node_modules/once/",\ - "packageDependencies": [\ - ["once", "npm:1.4.0"],\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["onetime", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/onetime-npm-2.0.1-6c39ecc911-5b4f6079e6.zip/node_modules/onetime/",\ - "packageDependencies": [\ - ["mimic-fn", "npm:1.2.0"],\ - ["onetime", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/onetime-npm-5.1.2-3ed148fa42-e9fd0695a0.zip/node_modules/onetime/",\ - "packageDependencies": [\ - ["mimic-fn", "npm:2.1.0"],\ - ["onetime", "npm:5.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/onetime-npm-6.0.0-4f3684e29a-0846ce78e4.zip/node_modules/onetime/",\ - "packageDependencies": [\ - ["mimic-fn", "npm:4.0.0"],\ - ["onetime", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["open", [\ - ["npm:7.4.2", {\ - "packageLocation": "./.yarn/unplugged/open-npm-7.4.2-a378c23959/node_modules/open/",\ - "packageDependencies": [\ - ["is-docker", "npm:2.2.1"],\ - ["is-wsl", "npm:2.2.0"],\ - ["open", "npm:7.4.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.4.0", {\ - "packageLocation": "./.yarn/unplugged/open-npm-8.4.0-df63cfe537/node_modules/open/",\ - "packageDependencies": [\ - ["define-lazy-prop", "npm:2.0.0"],\ - ["is-docker", "npm:2.2.1"],\ - ["is-wsl", "npm:2.2.0"],\ - ["open", "npm:8.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["opener", [\ - ["npm:1.5.2", {\ - "packageLocation": "./.yarn/cache/opener-npm-1.5.2-7a1aa69f14-0504efcd65.zip/node_modules/opener/",\ - "packageDependencies": [\ - ["opener", "npm:1.5.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["openid-client", [\ - ["npm:5.4.0", {\ - "packageLocation": "./.yarn/cache/openid-client-npm-5.4.0-13b7e14713-fc2e8587b2.zip/node_modules/openid-client/",\ - "packageDependencies": [\ - ["jose", "npm:4.15.9"],\ - ["lru-cache", "npm:6.0.0"],\ - ["object-hash", "npm:2.2.0"],\ - ["oidc-token-hash", "npm:5.0.1"],\ - ["openid-client", "npm:5.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["optimism", [\ - ["npm:0.16.1", {\ - "packageLocation": "./.yarn/cache/optimism-npm-0.16.1-b6a027d092-d1d49d546e.zip/node_modules/optimism/",\ - "packageDependencies": [\ - ["@wry/context", "npm:0.6.1"],\ - ["@wry/trie", "npm:0.3.2"],\ - ["optimism", "npm:0.16.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["optionator", [\ - ["npm:0.8.3", {\ - "packageLocation": "./.yarn/cache/optionator-npm-0.8.3-bc555bc5b7-6fa3c841b5.zip/node_modules/optionator/",\ - "packageDependencies": [\ - ["deep-is", "npm:0.1.4"],\ - ["fast-levenshtein", "npm:2.0.6"],\ - ["levn", "npm:0.3.0"],\ - ["optionator", "npm:0.8.3"],\ - ["prelude-ls", "npm:1.1.2"],\ - ["type-check", "npm:0.3.2"],\ - ["word-wrap", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.9.3", {\ - "packageLocation": "./.yarn/cache/optionator-npm-0.9.3-56c3a4bf80-fa28d30163.zip/node_modules/optionator/",\ - "packageDependencies": [\ - ["@aashutoshrathi/word-wrap", "npm:1.2.6"],\ - ["deep-is", "npm:0.1.4"],\ - ["fast-levenshtein", "npm:2.0.6"],\ - ["levn", "npm:0.4.1"],\ - ["optionator", "npm:0.9.3"],\ - ["prelude-ls", "npm:1.2.1"],\ - ["type-check", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ora", [\ - ["npm:5.4.1", {\ - "packageLocation": "./.yarn/cache/ora-npm-5.4.1-4f0343adb7-8d071828f4.zip/node_modules/ora/",\ - "packageDependencies": [\ - ["bl", "npm:4.1.0"],\ - ["chalk", "npm:4.1.2"],\ - ["cli-cursor", "npm:3.1.0"],\ - ["cli-spinners", "npm:2.7.0"],\ - ["is-interactive", "npm:1.0.0"],\ - ["is-unicode-supported", "npm:0.1.0"],\ - ["log-symbols", "npm:4.1.0"],\ - ["ora", "npm:5.4.1"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wcwidth", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["os-tmpdir", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/os-tmpdir-npm-1.0.2-e305b0689b-5666560f7b.zip/node_modules/os-tmpdir/",\ - "packageDependencies": [\ - ["os-tmpdir", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-limit", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip/node_modules/p-limit/",\ - "packageDependencies": [\ - ["p-limit", "npm:2.3.0"],\ - ["p-try", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip/node_modules/p-limit/",\ - "packageDependencies": [\ - ["p-limit", "npm:3.1.0"],\ - ["yocto-queue", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-locate", [\ - ["npm:4.1.0", {\ - "packageLocation": "./.yarn/cache/p-locate-npm-4.1.0-eec6872537-513bd14a45.zip/node_modules/p-locate/",\ - "packageDependencies": [\ - ["p-limit", "npm:2.3.0"],\ - ["p-locate", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip/node_modules/p-locate/",\ - "packageDependencies": [\ - ["p-limit", "npm:3.1.0"],\ - ["p-locate", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-map", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/p-map-npm-2.1.0-d9e865dc7c-9e3ad3c9f6.zip/node_modules/p-map/",\ - "packageDependencies": [\ - ["p-map", "npm:2.1.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/p-map-npm-4.0.0-4677ae07c7-7ba4a2b1e2.zip/node_modules/p-map/",\ - "packageDependencies": [\ - ["aggregate-error", "npm:3.1.0"],\ - ["p-map", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-pipe", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/p-pipe-npm-1.2.0-7837517b4a-45b810ccaa.zip/node_modules/p-pipe/",\ - "packageDependencies": [\ - ["p-pipe", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["p-try", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip/node_modules/p-try/",\ - "packageDependencies": [\ - ["p-try", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pac-proxy-agent", [\ - ["npm:7.0.1", {\ - "packageLocation": "./.yarn/cache/pac-proxy-agent-npm-7.0.1-8d7216fff5-b9055d13b2.zip/node_modules/pac-proxy-agent/",\ - "packageDependencies": [\ - ["@tootallnate/quickjs-emscripten", "npm:0.23.0"],\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["get-uri", "npm:6.0.3"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.4"],\ - ["pac-proxy-agent", "npm:7.0.1"],\ - ["pac-resolver", "npm:7.0.1"],\ - ["socks-proxy-agent", "npm:8.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/pac-proxy-agent-npm-7.2.0-742b9f4482-187656be62.zip/node_modules/pac-proxy-agent/",\ - "packageDependencies": [\ - ["@tootallnate/quickjs-emscripten", "npm:0.23.0"],\ - ["agent-base", "npm:7.1.3"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["get-uri", "npm:6.0.3"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.6"],\ - ["pac-proxy-agent", "npm:7.2.0"],\ - ["pac-resolver", "npm:7.0.1"],\ - ["socks-proxy-agent", "npm:8.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pac-resolver", [\ - ["npm:7.0.1", {\ - "packageLocation": "./.yarn/cache/pac-resolver-npm-7.0.1-73af0cb8f1-8391343287.zip/node_modules/pac-resolver/",\ - "packageDependencies": [\ - ["degenerator", "npm:5.0.1"],\ - ["netmask", "npm:2.0.2"],\ - ["pac-resolver", "npm:7.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["param-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/param-case-npm-3.0.4-cfb242ad97-b34227fd0f.zip/node_modules/param-case/",\ - "packageDependencies": [\ - ["dot-case", "npm:3.0.4"],\ - ["param-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parent-module", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/parent-module-npm-1.0.1-1fae11b095-6ba8b25514.zip/node_modules/parent-module/",\ - "packageDependencies": [\ - ["callsites", "npm:3.1.0"],\ - ["parent-module", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parse-cache-control", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/parse-cache-control-npm-1.0.1-81068d3680-13171cd973.zip/node_modules/parse-cache-control/",\ - "packageDependencies": [\ - ["parse-cache-control", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parse-filepath", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/parse-filepath-npm-1.0.2-7e399b862a-6794c3f38d.zip/node_modules/parse-filepath/",\ - "packageDependencies": [\ - ["is-absolute", "npm:1.0.0"],\ - ["map-cache", "npm:0.2.2"],\ - ["parse-filepath", "npm:1.0.2"],\ - ["path-root", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parse-json", [\ - ["npm:5.2.0", {\ - "packageLocation": "./.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip/node_modules/parse-json/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["error-ex", "npm:1.3.2"],\ - ["json-parse-even-better-errors", "npm:2.3.1"],\ - ["lines-and-columns", "npm:1.2.4"],\ - ["parse-json", "npm:5.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parse5", [\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/parse5-npm-7.0.0-3158a72394-744ae8fa85.zip/node_modules/parse5/",\ - "packageDependencies": [\ - ["entities", "npm:4.3.1"],\ - ["parse5", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.2.1", {\ - "packageLocation": "./.yarn/cache/parse5-npm-7.2.1-c48f333f28-fd1a8ad154.zip/node_modules/parse5/",\ - "packageDependencies": [\ - ["entities", "npm:4.5.0"],\ - ["parse5", "npm:7.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parse5-htmlparser2-tree-adapter", [\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-23dbe45fdd.zip/node_modules/parse5-htmlparser2-tree-adapter/",\ - "packageDependencies": [\ - ["domhandler", "npm:5.0.3"],\ - ["parse5", "npm:7.0.0"],\ - ["parse5-htmlparser2-tree-adapter", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parse5-parser-stream", [\ - ["npm:7.1.2", {\ - "packageLocation": "./.yarn/cache/parse5-parser-stream-npm-7.1.2-94131559b2-75b232d460.zip/node_modules/parse5-parser-stream/",\ - "packageDependencies": [\ - ["parse5", "npm:7.0.0"],\ - ["parse5-parser-stream", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["parseurl", [\ - ["npm:1.3.3", {\ - "packageLocation": "./.yarn/cache/parseurl-npm-1.3.3-1542397e00-407cee8e0a.zip/node_modules/parseurl/",\ - "packageDependencies": [\ - ["parseurl", "npm:1.3.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pascal-case", [\ - ["npm:3.1.2", {\ - "packageLocation": "./.yarn/cache/pascal-case-npm-3.1.2-35f5b9bff6-ba98bfd595.zip/node_modules/pascal-case/",\ - "packageDependencies": [\ - ["no-case", "npm:3.0.4"],\ - ["pascal-case", "npm:3.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pascalcase", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/pascalcase-npm-0.1.1-d04964fcda-f83681c3c8.zip/node_modules/pascalcase/",\ - "packageDependencies": [\ - ["pascalcase", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/path-case-npm-3.0.4-5a1981bc0c-61de052622.zip/node_modules/path-case/",\ - "packageDependencies": [\ - ["dot-case", "npm:3.0.4"],\ - ["path-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-exists", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip/node_modules/path-exists/",\ - "packageDependencies": [\ - ["path-exists", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-is-absolute", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip/node_modules/path-is-absolute/",\ - "packageDependencies": [\ - ["path-is-absolute", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-is-inside", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/path-is-inside-npm-1.0.2-7dd0711668-0b5b6c92d3.zip/node_modules/path-is-inside/",\ - "packageDependencies": [\ - ["path-is-inside", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-key", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip/node_modules/path-key/",\ - "packageDependencies": [\ - ["path-key", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/path-key-npm-4.0.0-2bce99f089-8e6c314ae6.zip/node_modules/path-key/",\ - "packageDependencies": [\ - ["path-key", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-parse", [\ - ["npm:1.0.7", {\ - "packageLocation": "./.yarn/cache/path-parse-npm-1.0.7-09564527b7-49abf3d811.zip/node_modules/path-parse/",\ - "packageDependencies": [\ - ["path-parse", "npm:1.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-posix", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/path-posix-npm-1.0.0-7e657a9447-b4eae5cd4b.zip/node_modules/path-posix/",\ - "packageDependencies": [\ - ["path-posix", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-root", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/path-root-npm-0.1.1-624088cb93-ff88aebfc1.zip/node_modules/path-root/",\ - "packageDependencies": [\ - ["path-root", "npm:0.1.1"],\ - ["path-root-regex", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-root-regex", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/path-root-regex-npm-0.1.2-14181162e0-dcd75d1f8e.zip/node_modules/path-root-regex/",\ - "packageDependencies": [\ - ["path-root-regex", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-to-regexp", [\ - ["npm:0.1.10", {\ - "packageLocation": "./.yarn/cache/path-to-regexp-npm-0.1.10-63516149e0-894e31f1b2.zip/node_modules/path-to-regexp/",\ - "packageDependencies": [\ - ["path-to-regexp", "npm:0.1.10"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.1.12", {\ - "packageLocation": "./.yarn/cache/path-to-regexp-npm-0.1.12-a9bf1de212-2e30f6a014.zip/node_modules/path-to-regexp/",\ - "packageDependencies": [\ - ["path-to-regexp", "npm:0.1.12"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["path-type", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/path-type-npm-3.0.0-252361a0eb-735b35e256.zip/node_modules/path-type/",\ - "packageDependencies": [\ - ["path-type", "npm:3.0.0"],\ - ["pify", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip/node_modules/path-type/",\ - "packageDependencies": [\ - ["path-type", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pend", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/pend-npm-1.2.0-7a13d93266-6c72f52433.zip/node_modules/pend/",\ - "packageDependencies": [\ - ["pend", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["picocolors", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/picocolors-npm-1.0.0-d81e0b1927-a2e8092dd8.zip/node_modules/picocolors/",\ - "packageDependencies": [\ - ["picocolors", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/picocolors-npm-1.1.1-4fede47cf1-e1cf46bf84.zip/node_modules/picocolors/",\ - "packageDependencies": [\ - ["picocolors", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["picomatch", [\ - ["npm:2.3.1", {\ - "packageLocation": "./.yarn/cache/picomatch-npm-2.3.1-c782cfd986-60c2595003.zip/node_modules/picomatch/",\ - "packageDependencies": [\ - ["picomatch", "npm:2.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pidtree", [\ - ["npm:0.6.0", {\ - "packageLocation": "./.yarn/cache/pidtree-npm-0.6.0-3d92e16117-ea67fb3159.zip/node_modules/pidtree/",\ - "packageDependencies": [\ - ["pidtree", "npm:0.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pify", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/pify-npm-2.3.0-8b63310934-9503aaeaf4.zip/node_modules/pify/",\ - "packageDependencies": [\ - ["pify", "npm:2.3.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/pify-npm-3.0.0-679ee405c8-668c1dc8d9.zip/node_modules/pify/",\ - "packageDependencies": [\ - ["pify", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.1", {\ - "packageLocation": "./.yarn/cache/pify-npm-4.0.1-062756097b-8b97cbf9dc.zip/node_modules/pify/",\ - "packageDependencies": [\ - ["pify", "npm:4.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pinkie", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/pinkie-npm-2.0.4-cffce4fb09-11d207257a.zip/node_modules/pinkie/",\ - "packageDependencies": [\ - ["pinkie", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pinkie-promise", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/pinkie-promise-npm-2.0.1-095439b8c5-b53a4a2e73.zip/node_modules/pinkie-promise/",\ - "packageDependencies": [\ - ["pinkie", "npm:2.0.4"],\ - ["pinkie-promise", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pirates", [\ - ["npm:4.0.5", {\ - "packageLocation": "./.yarn/cache/pirates-npm-4.0.5-22f8e827ce-3728bae0cf.zip/node_modules/pirates/",\ - "packageDependencies": [\ - ["pirates", "npm:4.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pkg-dir", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/pkg-dir-npm-4.2.0-2b5d0a8d32-9863e3f351.zip/node_modules/pkg-dir/",\ - "packageDependencies": [\ - ["find-up", "npm:4.1.0"],\ - ["pkg-dir", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["popmotion", [\ - ["npm:11.0.5", {\ - "packageLocation": "./.yarn/cache/popmotion-npm-11.0.5-3c551ada08-fa5af63ea9.zip/node_modules/popmotion/",\ - "packageDependencies": [\ - ["framesync", "npm:6.1.2"],\ - ["hey-listen", "npm:1.0.8"],\ - ["popmotion", "npm:11.0.5"],\ - ["style-value-types", "npm:5.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["posix-character-classes", [\ - ["npm:0.1.1", {\ - "packageLocation": "./.yarn/cache/posix-character-classes-npm-0.1.1-3e228a6e15-dedb99913c.zip/node_modules/posix-character-classes/",\ - "packageDependencies": [\ - ["posix-character-classes", "npm:0.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["postcss", [\ - ["npm:8.4.31", {\ - "packageLocation": "./.yarn/cache/postcss-npm-8.4.31-385051a82b-1a6653e721.zip/node_modules/postcss/",\ - "packageDependencies": [\ - ["nanoid", "npm:3.3.8"],\ - ["picocolors", "npm:1.0.0"],\ - ["postcss", "npm:8.4.31"],\ - ["source-map-js", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["postcss-value-parser", [\ - ["npm:3.3.1", {\ - "packageLocation": "./.yarn/cache/postcss-value-parser-npm-3.3.1-24ecbb1b05-e8bc676092.zip/node_modules/postcss-value-parser/",\ - "packageDependencies": [\ - ["postcss-value-parser", "npm:3.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["preact", [\ - ["npm:10.10.5", {\ - "packageLocation": "./.yarn/cache/preact-npm-10.10.5-d0bcbc63da-65d2ed1afd.zip/node_modules/preact/",\ - "packageDependencies": [\ - ["preact", "npm:10.10.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["preact-render-to-string", [\ - ["npm:5.2.2", {\ - "packageLocation": "./.yarn/cache/preact-render-to-string-npm-5.2.2-b8f2c0c74e-05493311bf.zip/node_modules/preact-render-to-string/",\ - "packageDependencies": [\ - ["preact-render-to-string", "npm:5.2.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2f234bc5b4b4b93a0f803adfb2ce3362773eb66db09ecb47324d36c83daaf8606c287d18fb86ff658b10ae9f59d41562a8510e2f78514834902194a7aabf5de7#npm:5.2.2", {\ - "packageLocation": "./.yarn/__virtual__/preact-render-to-string-virtual-28d2925d0e/0/cache/preact-render-to-string-npm-5.2.2-b8f2c0c74e-05493311bf.zip/node_modules/preact-render-to-string/",\ - "packageDependencies": [\ - ["@types/preact", null],\ - ["preact", "npm:10.10.5"],\ - ["preact-render-to-string", "virtual:2f234bc5b4b4b93a0f803adfb2ce3362773eb66db09ecb47324d36c83daaf8606c287d18fb86ff658b10ae9f59d41562a8510e2f78514834902194a7aabf5de7#npm:5.2.2"],\ - ["pretty-format", "npm:3.8.0"]\ - ],\ - "packagePeers": [\ - "@types/preact",\ - "preact"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["prelude-ls", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/prelude-ls-npm-1.1.2-a0daac0886-946a9f60d3.zip/node_modules/prelude-ls/",\ - "packageDependencies": [\ - ["prelude-ls", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/prelude-ls-npm-1.2.1-3e4d272a55-0b9d2c7680.zip/node_modules/prelude-ls/",\ - "packageDependencies": [\ - ["prelude-ls", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["prettier", [\ - ["npm:3.6.2", {\ - "packageLocation": "./.yarn/unplugged/prettier-npm-3.6.2-2668152203/node_modules/prettier/",\ - "packageDependencies": [\ - ["prettier", "npm:3.6.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["prettier-linter-helpers", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/prettier-linter-helpers-npm-1.0.0-6925131a7e-00ce8011cf.zip/node_modules/prettier-linter-helpers/",\ - "packageDependencies": [\ - ["fast-diff", "npm:1.2.0"],\ - ["prettier-linter-helpers", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pretty-bytes", [\ - ["npm:5.6.0", {\ - "packageLocation": "./.yarn/cache/pretty-bytes-npm-5.6.0-0061079c9f-9c082500d1.zip/node_modules/pretty-bytes/",\ - "packageDependencies": [\ - ["pretty-bytes", "npm:5.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pretty-format", [\ - ["npm:27.5.1", {\ - "packageLocation": "./.yarn/cache/pretty-format-npm-27.5.1-cd7d49696f-248990cbef.zip/node_modules/pretty-format/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:5.0.1"],\ - ["ansi-styles", "npm:5.2.0"],\ - ["pretty-format", "npm:27.5.1"],\ - ["react-is", "npm:17.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:28.1.3", {\ - "packageLocation": "./.yarn/cache/pretty-format-npm-28.1.3-fdf56e33bc-26626d33e2.zip/node_modules/pretty-format/",\ - "packageDependencies": [\ - ["@jest/schemas", "npm:28.1.3"],\ - ["ansi-regex", "npm:5.0.1"],\ - ["ansi-styles", "npm:5.2.0"],\ - ["pretty-format", "npm:28.1.3"],\ - ["react-is", "npm:18.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:29.0.3", {\ - "packageLocation": "./.yarn/cache/pretty-format-npm-29.0.3-c339768dec-4ea5a4bde5.zip/node_modules/pretty-format/",\ - "packageDependencies": [\ - ["@jest/schemas", "npm:29.0.0"],\ - ["ansi-styles", "npm:5.2.0"],\ - ["pretty-format", "npm:29.0.3"],\ - ["react-is", "npm:18.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.8.0", {\ - "packageLocation": "./.yarn/cache/pretty-format-npm-3.8.0-293db331d9-c80009217d.zip/node_modules/pretty-format/",\ - "packageDependencies": [\ - ["pretty-format", "npm:3.8.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["process-nextick-args", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/process-nextick-args-npm-2.0.1-b8d7971609-1d38588e52.zip/node_modules/process-nextick-args/",\ - "packageDependencies": [\ - ["process-nextick-args", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["progress", [\ - ["npm:2.0.3", {\ - "packageLocation": "./.yarn/cache/progress-npm-2.0.3-d1f87e2ac6-e6f0bcb71f.zip/node_modules/progress/",\ - "packageDependencies": [\ - ["progress", "npm:2.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["promise", [\ - ["npm:7.3.1", {\ - "packageLocation": "./.yarn/cache/promise-npm-7.3.1-5d81d474c0-37dbe58ca7.zip/node_modules/promise/",\ - "packageDependencies": [\ - ["asap", "npm:2.0.6"],\ - ["promise", "npm:7.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["promise-inflight", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/promise-inflight-npm-1.0.1-5bb925afac-1560d413ea.zip/node_modules/promise-inflight/",\ - "packageDependencies": [\ - ["promise-inflight", "npm:1.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0d36d1aaf1ea7535b384d539e487e25585f01670d39e526a26c87bd6ae453b53f80523e2225c1e4f6cf72a268adf45b0dadbb848ac415cce860f97be8fff5230#npm:1.0.1", {\ - "packageLocation": "./.yarn/__virtual__/promise-inflight-virtual-38e28ab2c4/0/cache/promise-inflight-npm-1.0.1-5bb925afac-1560d413ea.zip/node_modules/promise-inflight/",\ - "packageDependencies": [\ - ["@types/bluebird", null],\ - ["bluebird", null],\ - ["promise-inflight", "virtual:0d36d1aaf1ea7535b384d539e487e25585f01670d39e526a26c87bd6ae453b53f80523e2225c1e4f6cf72a268adf45b0dadbb848ac415cce860f97be8fff5230#npm:1.0.1"]\ - ],\ - "packagePeers": [\ - "@types/bluebird",\ - "bluebird"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["promise-map-series", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/promise-map-series-npm-0.3.0-195c3aaa6a-0fc757b54a.zip/node_modules/promise-map-series/",\ - "packageDependencies": [\ - ["promise-map-series", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["promise-polyfill", [\ - ["npm:8.3.0", {\ - "packageLocation": "./.yarn/cache/promise-polyfill-npm-8.3.0-ba317c123f-f735f59e46.zip/node_modules/promise-polyfill/",\ - "packageDependencies": [\ - ["promise-polyfill", "npm:8.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["promise-retry", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-96e1a82453.zip/node_modules/promise-retry/",\ - "packageDependencies": [\ - ["err-code", "npm:2.0.3"],\ - ["promise-retry", "npm:2.0.1"],\ - ["retry", "npm:0.12.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["prompts", [\ - ["npm:2.4.2", {\ - "packageLocation": "./.yarn/cache/prompts-npm-2.4.2-f5d25d5eea-c52536521a.zip/node_modules/prompts/",\ - "packageDependencies": [\ - ["kleur", "npm:3.0.3"],\ - ["prompts", "npm:2.4.2"],\ - ["sisteransi", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["prop-types", [\ - ["npm:15.8.1", {\ - "packageLocation": "./.yarn/cache/prop-types-npm-15.8.1-17c71ee7ee-7d959caec0.zip/node_modules/prop-types/",\ - "packageDependencies": [\ - ["loose-envify", "npm:1.4.0"],\ - ["object-assign", "npm:4.1.1"],\ - ["prop-types", "npm:15.8.1"],\ - ["react-is", "npm:16.13.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["property-expr", [\ - ["npm:2.0.6", {\ - "packageLocation": "./.yarn/cache/property-expr-npm-2.0.6-2a0857ed05-89977f4bb2.zip/node_modules/property-expr/",\ - "packageDependencies": [\ - ["property-expr", "npm:2.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["proxy-addr", [\ - ["npm:2.0.7", {\ - "packageLocation": "./.yarn/cache/proxy-addr-npm-2.0.7-dae6552872-f24a0c80af.zip/node_modules/proxy-addr/",\ - "packageDependencies": [\ - ["forwarded", "npm:0.2.0"],\ - ["ipaddr.js", "npm:1.9.1"],\ - ["proxy-addr", "npm:2.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["proxy-agent", [\ - ["npm:6.3.1", {\ - "packageLocation": "./.yarn/cache/proxy-agent-npm-6.3.1-b14461a822-547e6ebd73.zip/node_modules/proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.4"],\ - ["lru-cache", "npm:7.18.3"],\ - ["pac-proxy-agent", "npm:7.0.1"],\ - ["proxy-agent", "npm:6.3.1"],\ - ["proxy-from-env", "npm:1.1.0"],\ - ["socks-proxy-agent", "npm:8.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.4.0", {\ - "packageLocation": "./.yarn/cache/proxy-agent-npm-6.4.0-21d2d38035-a22f202b74.zip/node_modules/proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.4"],\ - ["lru-cache", "npm:7.18.3"],\ - ["pac-proxy-agent", "npm:7.0.1"],\ - ["proxy-agent", "npm:6.4.0"],\ - ["proxy-from-env", "npm:1.1.0"],\ - ["socks-proxy-agent", "npm:8.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.5.0", {\ - "packageLocation": "./.yarn/cache/proxy-agent-npm-6.5.0-5c1adfd6d9-56d5a494d9.zip/node_modules/proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.3"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["http-proxy-agent", "npm:7.0.2"],\ - ["https-proxy-agent", "npm:7.0.6"],\ - ["lru-cache", "npm:7.18.3"],\ - ["pac-proxy-agent", "npm:7.2.0"],\ - ["proxy-agent", "npm:6.5.0"],\ - ["proxy-from-env", "npm:1.1.0"],\ - ["socks-proxy-agent", "npm:8.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["proxy-from-env", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-f0bb4a87cf.zip/node_modules/proxy-from-env/",\ - "packageDependencies": [\ - ["proxy-from-env", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ps-list", [\ - ["npm:8.1.1", {\ - "packageLocation": "./.yarn/unplugged/ps-list-npm-8.1.1-06cd3fc430/node_modules/ps-list/",\ - "packageDependencies": [\ - ["ps-list", "npm:8.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["psl", [\ - ["npm:1.9.0", {\ - "packageLocation": "./.yarn/cache/psl-npm-1.9.0-a546edad1a-d07879d4bf.zip/node_modules/psl/",\ - "packageDependencies": [\ - ["psl", "npm:1.9.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pump", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/pump-npm-3.0.0-0080bf6a7a-e42e9229fb.zip/node_modules/pump/",\ - "packageDependencies": [\ - ["end-of-stream", "npm:1.4.4"],\ - ["once", "npm:1.4.0"],\ - ["pump", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["punycode", [\ - ["npm:1.4.1", {\ - "packageLocation": "./.yarn/cache/punycode-npm-1.4.1-be4c23e6d2-af2700dde1.zip/node_modules/punycode/",\ - "packageDependencies": [\ - ["punycode", "npm:1.4.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/punycode-npm-2.1.1-26eb3e15cf-939daa010c.zip/node_modules/punycode/",\ - "packageDependencies": [\ - ["punycode", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["puppeteer", [\ - ["npm:24.4.0", {\ - "packageLocation": "./.yarn/unplugged/puppeteer-npm-24.4.0-48bfa8de41/node_modules/puppeteer/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:2.8.0"],\ - ["chromium-bidi", "virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:2.1.2"],\ - ["cosmiconfig", "virtual:48bfa8de418cfe023ea61ca0d250edd7c9e1a45398103d81691b268b3cbb170e6b9a14e38f7bbb893a5b76aa30281c807ef428ea1ed40b8ddba8e49f3563c9ba#npm:9.0.0"],\ - ["devtools-protocol", "npm:0.0.1413902"],\ - ["puppeteer", "npm:24.4.0"],\ - ["puppeteer-core", "npm:24.4.0"],\ - ["typed-query-selector", "npm:2.12.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["puppeteer-core", [\ - ["npm:21.11.0", {\ - "packageLocation": "./.yarn/cache/puppeteer-core-npm-21.11.0-fe767cff64-44bda6ab49.zip/node_modules/puppeteer-core/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:1.9.1"],\ - ["chromium-bidi", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:0.5.8"],\ - ["cross-fetch", "npm:4.0.0"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["devtools-protocol", "npm:0.0.1232444"],\ - ["puppeteer-core", "npm:21.11.0"],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:22.6.3", {\ - "packageLocation": "./.yarn/cache/puppeteer-core-npm-22.6.3-1faf28eceb-31066e4065.zip/node_modules/puppeteer-core/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:2.2.1"],\ - ["chromium-bidi", "virtual:1faf28eceb1256681381b94db093851b3d374d56d274dc8783b4538071744d2bf3c3ef09e766b4f85e58c14a889b6533443e923d9c6b421a0955ccc5966993c7#npm:0.5.16"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["devtools-protocol", "npm:0.0.1262051"],\ - ["puppeteer-core", "npm:22.6.3"],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:24.4.0", {\ - "packageLocation": "./.yarn/cache/puppeteer-core-npm-24.4.0-5eaf660359-71d85626bf.zip/node_modules/puppeteer-core/",\ - "packageDependencies": [\ - ["@puppeteer/browsers", "npm:2.8.0"],\ - ["chromium-bidi", "virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:2.1.2"],\ - ["debug", "virtual:86b8ae036e89845a28aefecc65bd65d2738a830eb6a00c5352fb262a2aba7a81b4e6225fff99608007b3c030e444c526c81ca016a41e26c06d475e0335df3777#npm:4.4.0"],\ - ["devtools-protocol", "npm:0.0.1413902"],\ - ["puppeteer-core", "npm:24.4.0"],\ - ["typed-query-selector", "npm:2.12.0"],\ - ["ws", "virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:8.18.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pvtsutils", [\ - ["npm:1.3.2", {\ - "packageLocation": "./.yarn/cache/pvtsutils-npm-1.3.2-e1483da905-3e89fea183.zip/node_modules/pvtsutils/",\ - "packageDependencies": [\ - ["pvtsutils", "npm:1.3.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["pvutils", [\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/pvutils-npm-1.1.3-da8b07d6cf-e5201b8f78.zip/node_modules/pvutils/",\ - "packageDependencies": [\ - ["pvutils", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["qs", [\ - ["npm:6.13.0", {\ - "packageLocation": "./.yarn/cache/qs-npm-6.13.0-53676ddc84-f548b376e6.zip/node_modules/qs/",\ - "packageDependencies": [\ - ["qs", "npm:6.13.0"],\ - ["side-channel", "npm:1.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["querystringify", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/querystringify-npm-2.2.0-4e77c9f606-46ab16f252.zip/node_modules/querystringify/",\ - "packageDependencies": [\ - ["querystringify", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["queue-microtask", [\ - ["npm:1.2.3", {\ - "packageLocation": "./.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip/node_modules/queue-microtask/",\ - "packageDependencies": [\ - ["queue-microtask", "npm:1.2.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["queue-tick", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/queue-tick-npm-1.0.1-10bd6eaf3d-f447926c51.zip/node_modules/queue-tick/",\ - "packageDependencies": [\ - ["queue-tick", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["quick-temp", [\ - ["npm:0.1.8", {\ - "packageLocation": "./.yarn/cache/quick-temp-npm-0.1.8-a45b91e8a4-ef11755b9c.zip/node_modules/quick-temp/",\ - "packageDependencies": [\ - ["mktemp", "npm:0.4.0"],\ - ["quick-temp", "npm:0.1.8"],\ - ["rimraf", "npm:2.7.1"],\ - ["underscore.string", "npm:3.3.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["randombytes", [\ - ["npm:2.1.0", {\ - "packageLocation": "./.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-4efd1ad3d8.zip/node_modules/randombytes/",\ - "packageDependencies": [\ - ["randombytes", "npm:2.1.0"],\ - ["safe-buffer", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["range-parser", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/range-parser-npm-1.2.1-1a470fa390-ce21ef2a2d.zip/node_modules/range-parser/",\ - "packageDependencies": [\ - ["range-parser", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["raw-body", [\ - ["npm:2.5.2", {\ - "packageLocation": "./.yarn/cache/raw-body-npm-2.5.2-5cb9dfebc1-863b5171e1.zip/node_modules/raw-body/",\ - "packageDependencies": [\ - ["bytes", "npm:3.1.2"],\ - ["http-errors", "npm:2.0.0"],\ - ["iconv-lite", "npm:0.4.24"],\ - ["raw-body", "npm:2.5.2"],\ - ["unpipe", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["raw-loader", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/raw-loader-npm-2.0.0-d22c4d4fca-c4229f2e0a.zip/node_modules/raw-loader/",\ - "packageDependencies": [\ - ["raw-loader", "npm:2.0.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:2.0.0", {\ - "packageLocation": "./.yarn/__virtual__/raw-loader-virtual-8ef78e4b9d/0/cache/raw-loader-npm-2.0.0-d22c4d4fca-c4229f2e0a.zip/node_modules/raw-loader/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["loader-utils", "npm:1.4.2"],\ - ["raw-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:2.0.0"],\ - ["schema-utils", "npm:1.0.0"],\ - ["webpack", null]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react", [\ - ["npm:18.2.0", {\ - "packageLocation": "./.yarn/cache/react-npm-18.2.0-1eae08fee2-b9214a9bd7.zip/node_modules/react/",\ - "packageDependencies": [\ - ["loose-envify", "npm:1.4.0"],\ - ["react", "npm:18.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-csv", [\ - ["npm:2.2.2", {\ - "packageLocation": "./.yarn/cache/react-csv-npm-2.2.2-b5548c3e54-8c3708d604.zip/node_modules/react-csv/",\ - "packageDependencies": [\ - ["react-csv", "npm:2.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-dnd", [\ - ["npm:14.0.5", {\ - "packageLocation": "./.yarn/cache/react-dnd-npm-14.0.5-e37445cf62-027d23c1e6.zip/node_modules/react-dnd/",\ - "packageDependencies": [\ - ["react-dnd", "npm:14.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:14.0.5", {\ - "packageLocation": "./.yarn/__virtual__/react-dnd-virtual-a642a19757/0/cache/react-dnd-npm-14.0.5-e37445cf62-027d23c1e6.zip/node_modules/react-dnd/",\ - "packageDependencies": [\ - ["@react-dnd/invariant", "npm:2.0.0"],\ - ["@react-dnd/shallowequal", "npm:2.0.0"],\ - ["@types/hoist-non-react-statics", null],\ - ["@types/node", "npm:22.13.14"],\ - ["@types/react", "npm:18.0.21"],\ - ["dnd-core", "npm:14.0.1"],\ - ["fast-deep-equal", "npm:3.1.3"],\ - ["hoist-non-react-statics", "npm:3.3.2"],\ - ["react", "npm:18.2.0"],\ - ["react-dnd", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:14.0.5"]\ - ],\ - "packagePeers": [\ - "@types/hoist-non-react-statics",\ - "@types/node",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-dnd-html5-backend", [\ - ["npm:14.1.0", {\ - "packageLocation": "./.yarn/cache/react-dnd-html5-backend-npm-14.1.0-4ade60a8db-9249d538bd.zip/node_modules/react-dnd-html5-backend/",\ - "packageDependencies": [\ - ["dnd-core", "npm:14.0.1"],\ - ["react-dnd-html5-backend", "npm:14.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-dom", [\ - ["npm:18.2.0", {\ - "packageLocation": "./.yarn/cache/react-dom-npm-18.2.0-dd675bca1c-ca5e7762ec.zip/node_modules/react-dom/",\ - "packageDependencies": [\ - ["react-dom", "npm:18.2.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0", {\ - "packageLocation": "./.yarn/__virtual__/react-dom-virtual-b0b396e4b1/0/cache/react-dom-npm-18.2.0-dd675bca1c-ca5e7762ec.zip/node_modules/react-dom/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["loose-envify", "npm:1.4.0"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["scheduler", "npm:0.23.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-error-boundary", [\ - ["npm:3.1.4", {\ - "packageLocation": "./.yarn/cache/react-error-boundary-npm-3.1.4-2310dba89e-7418637bf3.zip/node_modules/react-error-boundary/",\ - "packageDependencies": [\ - ["react-error-boundary", "npm:3.1.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:37b0a3d67710607667f5fa638dcf2f391e4ee43d9413c56f8427c23ee78c48e4e0a4d7d18ae5eb11a0182f6341ad84b4aa7719f4aeb0cdc600c8a7c14987f98d#npm:3.1.4", {\ - "packageLocation": "./.yarn/__virtual__/react-error-boundary-virtual-a5350a99b8/0/cache/react-error-boundary-npm-3.1.4-2310dba89e-7418637bf3.zip/node_modules/react-error-boundary/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"],\ - ["react-error-boundary", "virtual:37b0a3d67710607667f5fa638dcf2f391e4ee43d9413c56f8427c23ee78c48e4e0a4d7d18ae5eb11a0182f6341ad84b4aa7719f4aeb0cdc600c8a7c14987f98d#npm:3.1.4"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-fast-compare", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/react-fast-compare-npm-2.0.4-ab3f6356e2-e4e3218c0f.zip/node_modules/react-fast-compare/",\ - "packageDependencies": [\ - ["react-fast-compare", "npm:2.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-i18next", [\ - ["npm:11.18.6", {\ - "packageLocation": "./.yarn/cache/react-i18next-npm-11.18.6-53352f444a-d3e784f96c.zip/node_modules/react-i18next/",\ - "packageDependencies": [\ - ["react-i18next", "npm:11.18.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.18.6", {\ - "packageLocation": "./.yarn/__virtual__/react-i18next-virtual-cb09caadea/0/cache/react-i18next-npm-11.18.6-53352f444a-d3e784f96c.zip/node_modules/react-i18next/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@types/i18next", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@types/react-native", null],\ - ["html-parse-stringify", "npm:3.0.1"],\ - ["i18next", "npm:21.9.2"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-i18next", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.18.6"],\ - ["react-native", null]\ - ],\ - "packagePeers": [\ - "@types/i18next",\ - "@types/react-dom",\ - "@types/react-native",\ - "@types/react",\ - "i18next",\ - "react-dom",\ - "react-native",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-is", [\ - ["npm:16.13.1", {\ - "packageLocation": "./.yarn/cache/react-is-npm-16.13.1-a9b9382b4f-5aa564a1cd.zip/node_modules/react-is/",\ - "packageDependencies": [\ - ["react-is", "npm:16.13.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:17.0.2", {\ - "packageLocation": "./.yarn/cache/react-is-npm-17.0.2-091bbb8db6-73b36281e5.zip/node_modules/react-is/",\ - "packageDependencies": [\ - ["react-is", "npm:17.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:18.2.0", {\ - "packageLocation": "./.yarn/cache/react-is-npm-18.2.0-0cc5edb910-200cd65bf2.zip/node_modules/react-is/",\ - "packageDependencies": [\ - ["react-is", "npm:18.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:19.1.1", {\ - "packageLocation": "./.yarn/cache/react-is-npm-19.1.1-b37b118274-44e0937da1.zip/node_modules/react-is/",\ - "packageDependencies": [\ - ["react-is", "npm:19.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-lifecycles-compat", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/react-lifecycles-compat-npm-3.0.4-d5e285a39e-c66b9c98c1.zip/node_modules/react-lifecycles-compat/",\ - "packageDependencies": [\ - ["react-lifecycles-compat", "npm:3.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-resize-detector", [\ - ["npm:7.1.2", {\ - "packageLocation": "./.yarn/cache/react-resize-detector-npm-7.1.2-146e0b9a4f-a8a564577f.zip/node_modules/react-resize-detector/",\ - "packageDependencies": [\ - ["react-resize-detector", "npm:7.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:e3d9b6164eb5689650eb17c7d6167aebe4c518715e68c83a668bacf1d5b0617de1a49ae5abb0ae46c9a1952deacb1dae6e1990e20d4ece861641d783f92ee9f1#npm:7.1.2", {\ - "packageLocation": "./.yarn/__virtual__/react-resize-detector-virtual-12eb6e1269/0/cache/react-resize-detector-npm-7.1.2-146e0b9a4f-a8a564577f.zip/node_modules/react-resize-detector/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["lodash", "npm:4.17.21"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-resize-detector", "virtual:e3d9b6164eb5689650eb17c7d6167aebe4c518715e68c83a668bacf1d5b0617de1a49ae5abb0ae46c9a1952deacb1dae6e1990e20d4ece861641d783f92ee9f1#npm:7.1.2"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-smooth", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/react-smooth-npm-2.0.1-9d723ee64c-82542c298e.zip/node_modules/react-smooth/",\ - "packageDependencies": [\ - ["react-smooth", "npm:2.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:e3d9b6164eb5689650eb17c7d6167aebe4c518715e68c83a668bacf1d5b0617de1a49ae5abb0ae46c9a1952deacb1dae6e1990e20d4ece861641d783f92ee9f1#npm:2.0.1", {\ - "packageLocation": "./.yarn/__virtual__/react-smooth-virtual-bfc87ca08e/0/cache/react-smooth-npm-2.0.1-9d723ee64c-82542c298e.zip/node_modules/react-smooth/",\ - "packageDependencies": [\ - ["@types/prop-types", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["fast-equals", "npm:2.0.4"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-smooth", "virtual:e3d9b6164eb5689650eb17c7d6167aebe4c518715e68c83a668bacf1d5b0617de1a49ae5abb0ae46c9a1952deacb1dae6e1990e20d4ece861641d783f92ee9f1#npm:2.0.1"],\ - ["react-transition-group", "virtual:bfc87ca08e8b6945b4a88eb38c126a27a7f14b808322d8eb249d378338a6be1e4729954a322644e4489720ed4eeaa9e9ac36ecb9e73398b7ce918fab45bf2d6b#npm:2.9.0"]\ - ],\ - "packagePeers": [\ - "@types/prop-types",\ - "@types/react-dom",\ - "@types/react",\ - "prop-types",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-transition-group", [\ - ["npm:2.9.0", {\ - "packageLocation": "./.yarn/cache/react-transition-group-npm-2.9.0-fe7767fa8d-1c26e2f780.zip/node_modules/react-transition-group/",\ - "packageDependencies": [\ - ["react-transition-group", "npm:2.9.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:4.4.5", {\ - "packageLocation": "./.yarn/cache/react-transition-group-npm-4.4.5-98ea4ef96e-ca32d3fd21.zip/node_modules/react-transition-group/",\ - "packageDependencies": [\ - ["react-transition-group", "npm:4.4.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#npm:4.4.5", {\ - "packageLocation": "./.yarn/__virtual__/react-transition-group-virtual-67933d9914/0/cache/react-transition-group-npm-4.4.5-98ea4ef96e-ca32d3fd21.zip/node_modules/react-transition-group/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["dom-helpers", "npm:5.2.1"],\ - ["loose-envify", "npm:1.4.0"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-transition-group", "virtual:5c92ca6ffb783572f1efc9202fdff7932875aa6c1cb43f95b6e1f906ffc5a994a2cdf5ef032c3d24c41807a315b5f65ca86696c95a340ed70300b91a70422f48#npm:4.4.5"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:bfc87ca08e8b6945b4a88eb38c126a27a7f14b808322d8eb249d378338a6be1e4729954a322644e4489720ed4eeaa9e9ac36ecb9e73398b7ce918fab45bf2d6b#npm:2.9.0", {\ - "packageLocation": "./.yarn/__virtual__/react-transition-group-virtual-b660f01c13/0/cache/react-transition-group-npm-2.9.0-fe7767fa8d-1c26e2f780.zip/node_modules/react-transition-group/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["dom-helpers", "npm:3.4.0"],\ - ["loose-envify", "npm:1.4.0"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-lifecycles-compat", "npm:3.0.4"],\ - ["react-transition-group", "virtual:bfc87ca08e8b6945b4a88eb38c126a27a7f14b808322d8eb249d378338a6be1e4729954a322644e4489720ed4eeaa9e9ac36ecb9e73398b7ce918fab45bf2d6b#npm:2.9.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["react-virtuoso", [\ - ["npm:2.19.0", {\ - "packageLocation": "./.yarn/cache/react-virtuoso-npm-2.19.0-61fadc72f6-2ea3bafa88.zip/node_modules/react-virtuoso/",\ - "packageDependencies": [\ - ["react-virtuoso", "npm:2.19.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.19.0", {\ - "packageLocation": "./.yarn/__virtual__/react-virtuoso-virtual-26177e722f/0/cache/react-virtuoso-npm-2.19.0-61fadc72f6-2ea3bafa88.zip/node_modules/react-virtuoso/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["@virtuoso.dev/react-urx", "virtual:26177e722f00ca89320a6a83c5a3f74eac9b6514cec04ec85fb7eae618184140929536c639ee96982e91b5b8ad588991cdbd72299e754702c14fefef975f289e#npm:0.2.13"],\ - ["@virtuoso.dev/urx", "npm:0.2.13"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-virtuoso", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.19.0"]\ - ],\ - "packagePeers": [\ - "@types/react-dom",\ - "@types/react",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["readable-stream", [\ - ["npm:2.3.7", {\ - "packageLocation": "./.yarn/cache/readable-stream-npm-2.3.7-77b22a9818-d04c677c17.zip/node_modules/readable-stream/",\ - "packageDependencies": [\ - ["core-util-is", "npm:1.0.3"],\ - ["inherits", "npm:2.0.4"],\ - ["isarray", "npm:1.0.0"],\ - ["process-nextick-args", "npm:2.0.1"],\ - ["readable-stream", "npm:2.3.7"],\ - ["safe-buffer", "npm:5.1.2"],\ - ["string_decoder", "npm:1.1.1"],\ - ["util-deprecate", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.6.0", {\ - "packageLocation": "./.yarn/cache/readable-stream-npm-3.6.0-23a4a5eb56-b80b3e6a7f.zip/node_modules/readable-stream/",\ - "packageDependencies": [\ - ["inherits", "npm:2.0.4"],\ - ["readable-stream", "npm:3.6.0"],\ - ["string_decoder", "npm:1.3.0"],\ - ["util-deprecate", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["recharts", [\ - ["npm:2.3.2", {\ - "packageLocation": "./.yarn/cache/recharts-npm-2.3.2-621c072e94-815905c277.zip/node_modules/recharts/",\ - "packageDependencies": [\ - ["recharts", "npm:2.3.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.3.2", {\ - "packageLocation": "./.yarn/__virtual__/recharts-virtual-e3d9b6164e/0/cache/recharts-npm-2.3.2-621c072e94-815905c277.zip/node_modules/recharts/",\ - "packageDependencies": [\ - ["@types/prop-types", null],\ - ["@types/react", "npm:18.0.21"],\ - ["@types/react-dom", null],\ - ["classnames", "npm:2.3.1"],\ - ["eventemitter3", "npm:4.0.7"],\ - ["lodash", "npm:4.17.21"],\ - ["prop-types", "npm:15.8.1"],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:18.2.0"],\ - ["react-is", "npm:16.13.1"],\ - ["react-resize-detector", "virtual:e3d9b6164eb5689650eb17c7d6167aebe4c518715e68c83a668bacf1d5b0617de1a49ae5abb0ae46c9a1952deacb1dae6e1990e20d4ece861641d783f92ee9f1#npm:7.1.2"],\ - ["react-smooth", "virtual:e3d9b6164eb5689650eb17c7d6167aebe4c518715e68c83a668bacf1d5b0617de1a49ae5abb0ae46c9a1952deacb1dae6e1990e20d4ece861641d783f92ee9f1#npm:2.0.1"],\ - ["recharts", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:2.3.2"],\ - ["recharts-scale", "npm:0.4.5"],\ - ["reduce-css-calc", "npm:2.1.8"],\ - ["victory-vendor", "npm:36.6.8"]\ - ],\ - "packagePeers": [\ - "@types/prop-types",\ - "@types/react-dom",\ - "@types/react",\ - "prop-types",\ - "react-dom",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["recharts-scale", [\ - ["npm:0.4.5", {\ - "packageLocation": "./.yarn/cache/recharts-scale-npm-0.4.5-30646fd0f5-6e11186350.zip/node_modules/recharts-scale/",\ - "packageDependencies": [\ - ["decimal.js-light", "npm:2.5.1"],\ - ["recharts-scale", "npm:0.4.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rechoir", [\ - ["npm:0.6.2", {\ - "packageLocation": "./.yarn/cache/rechoir-npm-0.6.2-0df5f171ec-fe76bf9c21.zip/node_modules/rechoir/",\ - "packageDependencies": [\ - ["rechoir", "npm:0.6.2"],\ - ["resolve", "patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["redent", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/redent-npm-3.0.0-31892f4906-fa1ef20404.zip/node_modules/redent/",\ - "packageDependencies": [\ - ["indent-string", "npm:4.0.0"],\ - ["redent", "npm:3.0.0"],\ - ["strip-indent", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["reduce-css-calc", [\ - ["npm:2.1.8", {\ - "packageLocation": "./.yarn/cache/reduce-css-calc-npm-2.1.8-e2acd211e5-ad0269e4f3.zip/node_modules/reduce-css-calc/",\ - "packageDependencies": [\ - ["css-unit-converter", "npm:1.1.2"],\ - ["postcss-value-parser", "npm:3.3.1"],\ - ["reduce-css-calc", "npm:2.1.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["redux", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/redux-npm-4.2.0-4688cc8d65-d3c5862717.zip/node_modules/redux/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["redux", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regenerate", [\ - ["npm:1.4.2", {\ - "packageLocation": "./.yarn/cache/regenerate-npm-1.4.2-b296c5b63a-dc6c95ae4b.zip/node_modules/regenerate/",\ - "packageDependencies": [\ - ["regenerate", "npm:1.4.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regenerate-unicode-properties", [\ - ["npm:10.0.1", {\ - "packageLocation": "./.yarn/cache/regenerate-unicode-properties-npm-10.0.1-a750d23172-448dcfa5e0.zip/node_modules/regenerate-unicode-properties/",\ - "packageDependencies": [\ - ["regenerate", "npm:1.4.2"],\ - ["regenerate-unicode-properties", "npm:10.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regenerator-runtime", [\ - ["npm:0.13.9", {\ - "packageLocation": "./.yarn/cache/regenerator-runtime-npm-0.13.9-6d02340eec-efbbcee420.zip/node_modules/regenerator-runtime/",\ - "packageDependencies": [\ - ["regenerator-runtime", "npm:0.13.9"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regenerator-transform", [\ - ["npm:0.15.0", {\ - "packageLocation": "./.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-98996694a2.zip/node_modules/regenerator-transform/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["regenerator-transform", "npm:0.15.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regex-not", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/regex-not-npm-1.0.2-06a03c9206-3081403de7.zip/node_modules/regex-not/",\ - "packageDependencies": [\ - ["extend-shallow", "npm:3.0.2"],\ - ["regex-not", "npm:1.0.2"],\ - ["safe-regex", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regexp.prototype.flags", [\ - ["npm:1.4.3", {\ - "packageLocation": "./.yarn/cache/regexp.prototype.flags-npm-1.4.3-df1c08b65d-3cde7cd22f.zip/node_modules/regexp.prototype.flags/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["functions-have-names", "npm:1.2.3"],\ - ["regexp.prototype.flags", "npm:1.4.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regexpu-core", [\ - ["npm:5.1.0", {\ - "packageLocation": "./.yarn/cache/regexpu-core-npm-5.1.0-ac0a69b941-0e00055390.zip/node_modules/regexpu-core/",\ - "packageDependencies": [\ - ["regenerate", "npm:1.4.2"],\ - ["regenerate-unicode-properties", "npm:10.0.1"],\ - ["regexpu-core", "npm:5.1.0"],\ - ["regjsgen", "npm:0.6.0"],\ - ["regjsparser", "npm:0.8.4"],\ - ["unicode-match-property-ecmascript", "npm:2.0.0"],\ - ["unicode-match-property-value-ecmascript", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regjsgen", [\ - ["npm:0.6.0", {\ - "packageLocation": "./.yarn/cache/regjsgen-npm-0.6.0-bae949467e-bb260bd786.zip/node_modules/regjsgen/",\ - "packageDependencies": [\ - ["regjsgen", "npm:0.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["regjsparser", [\ - ["npm:0.8.4", {\ - "packageLocation": "./.yarn/cache/regjsparser-npm-0.8.4-df84fdb4b8-b60919be93.zip/node_modules/regjsparser/",\ - "packageDependencies": [\ - ["jsesc", "npm:0.5.0"],\ - ["regjsparser", "npm:0.8.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["relay-runtime", [\ - ["npm:12.0.0", {\ - "packageLocation": "./.yarn/cache/relay-runtime-npm-12.0.0-48b91c47fc-d6211e8206.zip/node_modules/relay-runtime/",\ - "packageDependencies": [\ - ["@babel/runtime", "npm:7.28.2"],\ - ["fbjs", "npm:3.0.4"],\ - ["invariant", "npm:2.2.4"],\ - ["relay-runtime", "npm:12.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["remedial", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/remedial-npm-1.0.8-d614f7e7c5-41e23a7d65.zip/node_modules/remedial/",\ - "packageDependencies": [\ - ["remedial", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["remove-trailing-separator", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/remove-trailing-separator-npm-1.1.0-16d7231316-d3c20b5a2d.zip/node_modules/remove-trailing-separator/",\ - "packageDependencies": [\ - ["remove-trailing-separator", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["remove-trailing-spaces", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/remove-trailing-spaces-npm-1.0.8-d32e564d04-81f615c5cd.zip/node_modules/remove-trailing-spaces/",\ - "packageDependencies": [\ - ["remove-trailing-spaces", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["repeat-element", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/repeat-element-npm-1.1.4-7e649ab5b1-1edd0301b7.zip/node_modules/repeat-element/",\ - "packageDependencies": [\ - ["repeat-element", "npm:1.1.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["repeat-string", [\ - ["npm:1.6.1", {\ - "packageLocation": "./.yarn/cache/repeat-string-npm-1.6.1-bc8e388655-1b809fc6db.zip/node_modules/repeat-string/",\ - "packageDependencies": [\ - ["repeat-string", "npm:1.6.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["replace-ext", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/replace-ext-npm-1.0.1-ab0bac6614-4994ea1aaa.zip/node_modules/replace-ext/",\ - "packageDependencies": [\ - ["replace-ext", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/replace-ext-npm-2.0.0-44b74a3694-ed640ac90d.zip/node_modules/replace-ext/",\ - "packageDependencies": [\ - ["replace-ext", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["request-ip", [\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/request-ip-npm-3.3.0-d0fb01a2ad-9ca26f8142.zip/node_modules/request-ip/",\ - "packageDependencies": [\ - ["request-ip", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["require-directory", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-8608aee50b-a72468e258.zip/node_modules/require-directory/",\ - "packageDependencies": [\ - ["require-directory", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["require-from-string", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip/node_modules/require-from-string/",\ - "packageDependencies": [\ - ["require-from-string", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["require-main-filename", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/require-main-filename-npm-2.0.0-03eef65c84-8604a570c0.zip/node_modules/require-main-filename/",\ - "packageDependencies": [\ - ["require-main-filename", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["requires-port", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/requires-port-npm-1.0.0-fd036b488a-878880ee78.zip/node_modules/requires-port/",\ - "packageDependencies": [\ - ["requires-port", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["reselect", [\ - ["npm:5.1.1", {\ - "packageLocation": "./.yarn/cache/reselect-npm-5.1.1-667568f51c-1fdae11a39.zip/node_modules/reselect/",\ - "packageDependencies": [\ - ["reselect", "npm:5.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["resolve", [\ - ["patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d", {\ - "packageLocation": "./.yarn/cache/resolve-patch-61fc5136ce-551dd50076.zip/node_modules/resolve/",\ - "packageDependencies": [\ - ["is-core-module", "npm:2.10.0"],\ - ["path-parse", "npm:1.0.7"],\ - ["resolve", "patch:resolve@npm%3A1.22.1#optional!builtin::version=1.22.1&hash=c3c19d"],\ - ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d", {\ - "packageLocation": "./.yarn/cache/resolve-patch-b5982cfa8c-d4d878bfe3.zip/node_modules/resolve/",\ - "packageDependencies": [\ - ["is-core-module", "npm:2.16.1"],\ - ["path-parse", "npm:1.0.7"],\ - ["resolve", "patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d"],\ - ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d", {\ - "packageLocation": "./.yarn/cache/resolve-patch-aa9ecc3603-27bff19d82.zip/node_modules/resolve/",\ - "packageDependencies": [\ - ["is-core-module", "npm:2.10.0"],\ - ["path-parse", "npm:1.0.7"],\ - ["resolve", "patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d"],\ - ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["resolve-cwd", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-546e081601.zip/node_modules/resolve-cwd/",\ - "packageDependencies": [\ - ["resolve-cwd", "npm:3.0.0"],\ - ["resolve-from", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["resolve-from", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-91eb76ce83.zip/node_modules/resolve-from/",\ - "packageDependencies": [\ - ["resolve-from", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-be18a5e4d7.zip/node_modules/resolve-from/",\ - "packageDependencies": [\ - ["resolve-from", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["resolve-options", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/resolve-options-npm-2.0.0-c5abf3f50e-b28584cc08.zip/node_modules/resolve-options/",\ - "packageDependencies": [\ - ["resolve-options", "npm:2.0.0"],\ - ["value-or-function", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["resolve-url", [\ - ["npm:0.2.1", {\ - "packageLocation": "./.yarn/cache/resolve-url-npm-0.2.1-39edb8f908-c8bbf63857.zip/node_modules/resolve-url/",\ - "packageDependencies": [\ - ["resolve-url", "npm:0.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["resolve.exports", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/resolve.exports-npm-1.1.0-81756e03ba-6286de2285.zip/node_modules/resolve.exports/",\ - "packageDependencies": [\ - ["resolve.exports", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["response-iterator", [\ - ["npm:0.2.6", {\ - "packageLocation": "./.yarn/cache/response-iterator-npm-0.2.6-c70879657b-ef7c74693e.zip/node_modules/response-iterator/",\ - "packageDependencies": [\ - ["response-iterator", "npm:0.2.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["restore-cursor", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/restore-cursor-npm-2.0.0-80278eb6b7-482e13d02d.zip/node_modules/restore-cursor/",\ - "packageDependencies": [\ - ["onetime", "npm:2.0.1"],\ - ["restore-cursor", "npm:2.0.0"],\ - ["signal-exit", "npm:3.0.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/restore-cursor-npm-3.1.0-52c5a4c98f-f877dd8741.zip/node_modules/restore-cursor/",\ - "packageDependencies": [\ - ["onetime", "npm:5.1.2"],\ - ["restore-cursor", "npm:3.1.0"],\ - ["signal-exit", "npm:3.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ret", [\ - ["npm:0.1.15", {\ - "packageLocation": "./.yarn/cache/ret-npm-0.1.15-0d3c19de76-07c9e7619b.zip/node_modules/ret/",\ - "packageDependencies": [\ - ["ret", "npm:0.1.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["retry", [\ - ["npm:0.12.0", {\ - "packageLocation": "./.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-1f914879f9.zip/node_modules/retry/",\ - "packageDependencies": [\ - ["retry", "npm:0.12.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.13.1", {\ - "packageLocation": "./.yarn/cache/retry-npm-0.13.1-89eb100ab6-6125ec2e06.zip/node_modules/retry/",\ - "packageDependencies": [\ - ["retry", "npm:0.13.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["reusify", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip/node_modules/reusify/",\ - "packageDependencies": [\ - ["reusify", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rfdc", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/rfdc-npm-1.3.0-272f288ad8-76dedd9700.zip/node_modules/rfdc/",\ - "packageDependencies": [\ - ["rfdc", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rimraf", [\ - ["npm:2.7.1", {\ - "packageLocation": "./.yarn/cache/rimraf-npm-2.7.1-9a71f3cc37-4586c296c7.zip/node_modules/rimraf/",\ - "packageDependencies": [\ - ["glob", "npm:7.2.3"],\ - ["rimraf", "npm:2.7.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/rimraf-npm-3.0.2-2cb7dac69a-063ffaccaa.zip/node_modules/rimraf/",\ - "packageDependencies": [\ - ["glob", "npm:7.2.3"],\ - ["rimraf", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["robots-parser", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/robots-parser-npm-3.0.1-8f7f57fde7-672a4c2311.zip/node_modules/robots-parser/",\ - "packageDependencies": [\ - ["robots-parser", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rollbar", [\ - ["npm:2.26.4", {\ - "packageLocation": "./.yarn/cache/rollbar-npm-2.26.4-f7a42d02ca-1f18204b3a.zip/node_modules/rollbar/",\ - "packageDependencies": [\ - ["async", "npm:3.2.4"],\ - ["console-polyfill", "npm:0.3.0"],\ - ["decache", "npm:3.1.0"],\ - ["error-stack-parser", "npm:2.1.4"],\ - ["json-stringify-safe", "npm:5.0.1"],\ - ["lru-cache", "npm:2.2.4"],\ - ["request-ip", "npm:3.3.0"],\ - ["rollbar", "npm:2.26.4"],\ - ["source-map", "npm:0.5.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rollup", [\ - ["npm:2.79.2", {\ - "packageLocation": "./.yarn/cache/rollup-npm-2.79.2-1b08e69c0e-095ba0a828.zip/node_modules/rollup/",\ - "packageDependencies": [\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ - ["rollup", "npm:2.79.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rollup-plugin-terser", [\ - ["npm:7.0.2", {\ - "packageLocation": "./.yarn/cache/rollup-plugin-terser-npm-7.0.2-3f55469f5a-af84bb7a7a.zip/node_modules/rollup-plugin-terser/",\ - "packageDependencies": [\ - ["rollup-plugin-terser", "npm:7.0.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:7.0.2", {\ - "packageLocation": "./.yarn/__virtual__/rollup-plugin-terser-virtual-f054b6fbec/0/cache/rollup-plugin-terser-npm-7.0.2-3f55469f5a-af84bb7a7a.zip/node_modules/rollup-plugin-terser/",\ - "packageDependencies": [\ - ["@babel/code-frame", "npm:7.18.6"],\ - ["@types/rollup", null],\ - ["jest-worker", "npm:26.6.2"],\ - ["rollup", "npm:2.79.2"],\ - ["rollup-plugin-terser", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:7.0.2"],\ - ["serialize-javascript", "npm:4.0.0"],\ - ["terser", "npm:5.14.2"]\ - ],\ - "packagePeers": [\ - "@types/rollup",\ - "rollup"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rsvp", [\ - ["npm:3.2.1", {\ - "packageLocation": "./.yarn/cache/rsvp-npm-3.2.1-8d917ef4ba-c85d086bfd.zip/node_modules/rsvp/",\ - "packageDependencies": [\ - ["rsvp", "npm:3.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.8.5", {\ - "packageLocation": "./.yarn/cache/rsvp-npm-4.8.5-09f3c6ed40-3c81905a0c.zip/node_modules/rsvp/",\ - "packageDependencies": [\ - ["rsvp", "npm:4.8.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["run-async", [\ - ["npm:2.4.1", {\ - "packageLocation": "./.yarn/cache/run-async-npm-2.4.1-a94bb90861-c79551224d.zip/node_modules/run-async/",\ - "packageDependencies": [\ - ["run-async", "npm:2.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["run-parallel", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip/node_modules/run-parallel/",\ - "packageDependencies": [\ - ["queue-microtask", "npm:1.2.3"],\ - ["run-parallel", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["rxjs", [\ - ["npm:6.6.7", {\ - "packageLocation": "./.yarn/cache/rxjs-npm-6.6.7-055046ea3c-c8263ebb20.zip/node_modules/rxjs/",\ - "packageDependencies": [\ - ["rxjs", "npm:6.6.7"],\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.5.6", {\ - "packageLocation": "./.yarn/cache/rxjs-npm-7.5.6-8372315abc-87dc181b70.zip/node_modules/rxjs/",\ - "packageDependencies": [\ - ["rxjs", "npm:7.5.6"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.8.1", {\ - "packageLocation": "./.yarn/cache/rxjs-npm-7.8.1-41c443a75b-b10cac1a52.zip/node_modules/rxjs/",\ - "packageDependencies": [\ - ["rxjs", "npm:7.8.1"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["safe-buffer", [\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/safe-buffer-npm-5.1.2-c27fedf6c4-7eb5b48f2e.zip/node_modules/safe-buffer/",\ - "packageDependencies": [\ - ["safe-buffer", "npm:5.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.2.1", {\ - "packageLocation": "./.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-32872cd0ff.zip/node_modules/safe-buffer/",\ - "packageDependencies": [\ - ["safe-buffer", "npm:5.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["safe-regex", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/safe-regex-npm-1.1.0-a908e8515c-5405b5a3ef.zip/node_modules/safe-regex/",\ - "packageDependencies": [\ - ["ret", "npm:0.1.15"],\ - ["safe-regex", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["safer-buffer", [\ - ["npm:2.1.2", {\ - "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-7eaf7a0cf3.zip/node_modules/safer-buffer/",\ - "packageDependencies": [\ - ["safer-buffer", "npm:2.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["saxes", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/saxes-npm-6.0.0-31558949f5-97b50daf6c.zip/node_modules/saxes/",\ - "packageDependencies": [\ - ["saxes", "npm:6.0.0"],\ - ["xmlchars", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["scheduler", [\ - ["npm:0.23.0", {\ - "packageLocation": "./.yarn/cache/scheduler-npm-0.23.0-a379a6bc3b-0c4557aa37.zip/node_modules/scheduler/",\ - "packageDependencies": [\ - ["loose-envify", "npm:1.4.0"],\ - ["scheduler", "npm:0.23.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["schema-utils", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/schema-utils-npm-1.0.0-2b49db17d1-e8273b4f6e.zip/node_modules/schema-utils/",\ - "packageDependencies": [\ - ["ajv", "npm:6.12.6"],\ - ["ajv-errors", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:1.0.1"],\ - ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"],\ - ["schema-utils", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.7.1", {\ - "packageLocation": "./.yarn/cache/schema-utils-npm-2.7.1-f84d18c473-86c3038798.zip/node_modules/schema-utils/",\ - "packageDependencies": [\ - ["@types/json-schema", "npm:7.0.11"],\ - ["ajv", "npm:6.12.6"],\ - ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"],\ - ["schema-utils", "npm:2.7.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/schema-utils-npm-3.1.1-8704647575-cfcf991f10.zip/node_modules/schema-utils/",\ - "packageDependencies": [\ - ["@types/json-schema", "npm:7.0.11"],\ - ["ajv", "npm:6.12.6"],\ - ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"],\ - ["schema-utils", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/schema-utils-npm-3.3.0-f2b36937f1-2c7bbb1da9.zip/node_modules/schema-utils/",\ - "packageDependencies": [\ - ["@types/json-schema", "npm:7.0.11"],\ - ["ajv", "npm:6.12.6"],\ - ["ajv-keywords", "virtual:2b49db17d1e4e8854e6e7543c07eb7bc19ec9da65a1b99b9cb28e764846d419e5ecd6e057ad65249f2b928862ffd70dbf8a7c79643ccdd7c1c40cab5b59aa03f#npm:3.5.2"],\ - ["schema-utils", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["scuid", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/scuid-npm-1.1.0-b68eab8aab-cd094ac371.zip/node_modules/scuid/",\ - "packageDependencies": [\ - ["scuid", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["seedrandom", [\ - ["npm:3.0.5", {\ - "packageLocation": "./.yarn/cache/seedrandom-npm-3.0.5-6946e8f8db-acad5e516c.zip/node_modules/seedrandom/",\ - "packageDependencies": [\ - ["seedrandom", "npm:3.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["semver", [\ - ["npm:5.7.2", {\ - "packageLocation": "./.yarn/cache/semver-npm-5.7.2-938ee91eaa-fca14418a1.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["semver", "npm:5.7.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.3.1", {\ - "packageLocation": "./.yarn/cache/semver-npm-6.3.1-bcba31fdbe-1ef3a85bd0.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["semver", "npm:6.3.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/semver-npm-7.0.0-218e8c00ca-be264384c7.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["semver", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.6.0", {\ - "packageLocation": "./.yarn/cache/semver-npm-7.6.0-f4630729f6-1b41018df2.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["lru-cache", "npm:6.0.0"],\ - ["semver", "npm:7.6.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.6.3", {\ - "packageLocation": "./.yarn/cache/semver-npm-7.6.3-57e82c14d5-36b1fbe1a2.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["semver", "npm:7.6.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.7.1", {\ - "packageLocation": "./.yarn/cache/semver-npm-7.7.1-4572475307-4cfa1eb91e.zip/node_modules/semver/",\ - "packageDependencies": [\ - ["semver", "npm:7.7.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["send", [\ - ["npm:0.19.0", {\ - "packageLocation": "./.yarn/cache/send-npm-0.19.0-4297594770-1f6064dea0.zip/node_modules/send/",\ - "packageDependencies": [\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["depd", "npm:2.0.0"],\ - ["destroy", "npm:1.2.0"],\ - ["encodeurl", "npm:1.0.2"],\ - ["escape-html", "npm:1.0.3"],\ - ["etag", "npm:1.8.1"],\ - ["fresh", "npm:0.5.2"],\ - ["http-errors", "npm:2.0.0"],\ - ["mime", "npm:1.6.0"],\ - ["ms", "npm:2.1.3"],\ - ["on-finished", "npm:2.4.1"],\ - ["range-parser", "npm:1.2.1"],\ - ["send", "npm:0.19.0"],\ - ["statuses", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sentence-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/sentence-case-npm-3.0.4-ed6888d0bc-3cfe6c0143.zip/node_modules/sentence-case/",\ - "packageDependencies": [\ - ["no-case", "npm:3.0.4"],\ - ["sentence-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"],\ - ["upper-case-first", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["serialize-javascript", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/serialize-javascript-npm-4.0.0-b4aeff413b-df68091689.zip/node_modules/serialize-javascript/",\ - "packageDependencies": [\ - ["randombytes", "npm:2.1.0"],\ - ["serialize-javascript", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-ed3dabfbb5.zip/node_modules/serialize-javascript/",\ - "packageDependencies": [\ - ["randombytes", "npm:2.1.0"],\ - ["serialize-javascript", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.2", {\ - "packageLocation": "./.yarn/cache/serialize-javascript-npm-6.0.2-cc09461d45-445a420a6f.zip/node_modules/serialize-javascript/",\ - "packageDependencies": [\ - ["randombytes", "npm:2.1.0"],\ - ["serialize-javascript", "npm:6.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["serve-static", [\ - ["npm:1.16.2", {\ - "packageLocation": "./.yarn/cache/serve-static-npm-1.16.2-5d8e560aec-7fa9d9c680.zip/node_modules/serve-static/",\ - "packageDependencies": [\ - ["encodeurl", "npm:2.0.0"],\ - ["escape-html", "npm:1.0.3"],\ - ["parseurl", "npm:1.3.3"],\ - ["send", "npm:0.19.0"],\ - ["serve-static", "npm:1.16.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["set-blocking", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/set-blocking-npm-2.0.0-49e2cffa24-8980ebf7ae.zip/node_modules/set-blocking/",\ - "packageDependencies": [\ - ["set-blocking", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["set-function-length", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/set-function-length-npm-1.2.2-243073748b-505d62b8e0.zip/node_modules/set-function-length/",\ - "packageDependencies": [\ - ["define-data-property", "npm:1.1.4"],\ - ["es-errors", "npm:1.3.0"],\ - ["function-bind", "npm:1.1.2"],\ - ["get-intrinsic", "npm:1.2.4"],\ - ["gopd", "npm:1.0.1"],\ - ["has-property-descriptors", "npm:1.0.2"],\ - ["set-function-length", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["set-value", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/set-value-npm-2.0.1-35da5f8180-4f1ccac2e9.zip/node_modules/set-value/",\ - "packageDependencies": [\ - ["extend-shallow", "npm:2.0.1"],\ - ["is-extendable", "npm:0.1.1"],\ - ["is-plain-object", "npm:2.0.4"],\ - ["set-value", "npm:2.0.1"],\ - ["split-string", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["setimmediate", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/setimmediate-npm-1.0.5-54587459b6-76e3f5d7f4.zip/node_modules/setimmediate/",\ - "packageDependencies": [\ - ["setimmediate", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["setprototypeof", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/setprototypeof-npm-1.2.0-0fedbdcd3a-fde1630422.zip/node_modules/setprototypeof/",\ - "packageDependencies": [\ - ["setprototypeof", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sha.js", [\ - ["npm:2.4.11", {\ - "packageLocation": "./.yarn/cache/sha.js-npm-2.4.11-14868df4ca-d833bfa3e0.zip/node_modules/sha.js/",\ - "packageDependencies": [\ - ["inherits", "npm:2.0.4"],\ - ["safe-buffer", "npm:5.2.1"],\ - ["sha.js", "npm:2.4.11"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sharp", [\ - ["npm:0.33.5", {\ - "packageLocation": "./.yarn/unplugged/sharp-npm-0.33.5-a76aeda369/node_modules/sharp/",\ - "packageDependencies": [\ - ["@img/sharp-darwin-arm64", "npm:0.33.5"],\ - ["@img/sharp-darwin-x64", "npm:0.33.5"],\ - ["@img/sharp-libvips-darwin-arm64", "npm:1.0.4"],\ - ["@img/sharp-libvips-darwin-x64", "npm:1.0.4"],\ - ["@img/sharp-libvips-linux-arm", "npm:1.0.5"],\ - ["@img/sharp-libvips-linux-arm64", "npm:1.0.4"],\ - ["@img/sharp-libvips-linux-s390x", "npm:1.0.4"],\ - ["@img/sharp-libvips-linux-x64", "npm:1.0.4"],\ - ["@img/sharp-libvips-linuxmusl-arm64", "npm:1.0.4"],\ - ["@img/sharp-libvips-linuxmusl-x64", "npm:1.0.4"],\ - ["@img/sharp-linux-arm", "npm:0.33.5"],\ - ["@img/sharp-linux-arm64", "npm:0.33.5"],\ - ["@img/sharp-linux-s390x", "npm:0.33.5"],\ - ["@img/sharp-linux-x64", "npm:0.33.5"],\ - ["@img/sharp-linuxmusl-arm64", "npm:0.33.5"],\ - ["@img/sharp-linuxmusl-x64", "npm:0.33.5"],\ - ["@img/sharp-wasm32", "npm:0.33.5"],\ - ["@img/sharp-win32-ia32", "npm:0.33.5"],\ - ["@img/sharp-win32-x64", "npm:0.33.5"],\ - ["color", "npm:4.2.3"],\ - ["detect-libc", "npm:2.0.3"],\ - ["semver", "npm:7.6.3"],\ - ["sharp", "npm:0.33.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["shebang-command", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip/node_modules/shebang-command/",\ - "packageDependencies": [\ - ["shebang-command", "npm:2.0.0"],\ - ["shebang-regex", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["shebang-regex", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip/node_modules/shebang-regex/",\ - "packageDependencies": [\ - ["shebang-regex", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["shell-quote", [\ - ["npm:1.7.4", {\ - "packageLocation": "./.yarn/cache/shell-quote-npm-1.7.4-b337567168-e5059820d0.zip/node_modules/shell-quote/",\ - "packageDependencies": [\ - ["shell-quote", "npm:1.7.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.8.1", {\ - "packageLocation": "./.yarn/cache/shell-quote-npm-1.8.1-fcccf06093-af19ab5a1e.zip/node_modules/shell-quote/",\ - "packageDependencies": [\ - ["shell-quote", "npm:1.8.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["shelljs", [\ - ["npm:0.8.5", {\ - "packageLocation": "./.yarn/cache/shelljs-npm-0.8.5-44be43f84a-f2178274b9.zip/node_modules/shelljs/",\ - "packageDependencies": [\ - ["glob", "npm:7.2.3"],\ - ["interpret", "npm:1.4.0"],\ - ["rechoir", "npm:0.6.2"],\ - ["shelljs", "npm:0.8.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["side-channel", [\ - ["npm:1.0.4", {\ - "packageLocation": "./.yarn/cache/side-channel-npm-1.0.4-e1f38b9e06-c4998d9fc5.zip/node_modules/side-channel/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["get-intrinsic", "npm:1.1.2"],\ - ["object-inspect", "npm:1.12.2"],\ - ["side-channel", "npm:1.0.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.6", {\ - "packageLocation": "./.yarn/cache/side-channel-npm-1.0.6-511657386f-eb10944f38.zip/node_modules/side-channel/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.7"],\ - ["es-errors", "npm:1.3.0"],\ - ["get-intrinsic", "npm:1.2.4"],\ - ["object-inspect", "npm:1.13.3"],\ - ["side-channel", "npm:1.0.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["signal-exit", [\ - ["npm:3.0.7", {\ - "packageLocation": "./.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip/node_modules/signal-exit/",\ - "packageDependencies": [\ - ["signal-exit", "npm:3.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["signedsource", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/signedsource-npm-1.0.0-1e8a9aacd0-64b2c8d7a4.zip/node_modules/signedsource/",\ - "packageDependencies": [\ - ["signedsource", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["simple-swizzle", [\ - ["npm:0.2.2", {\ - "packageLocation": "./.yarn/cache/simple-swizzle-npm-0.2.2-8dee37fad1-c6dffff17a.zip/node_modules/simple-swizzle/",\ - "packageDependencies": [\ - ["is-arrayish", "npm:0.3.2"],\ - ["simple-swizzle", "npm:0.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sirv", [\ - ["npm:2.0.4", {\ - "packageLocation": "./.yarn/cache/sirv-npm-2.0.4-cace6fe955-24f42cf068.zip/node_modules/sirv/",\ - "packageDependencies": [\ - ["@polka/url", "npm:1.0.0-next.28"],\ - ["mrmime", "npm:2.0.0"],\ - ["sirv", "npm:2.0.4"],\ - ["totalist", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sisteransi", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/sisteransi-npm-1.0.5-af60cc0cfa-aba6438f46.zip/node_modules/sisteransi/",\ - "packageDependencies": [\ - ["sisteransi", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["slash", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/slash-npm-1.0.0-a244873c30-4b6e21b1fb.zip/node_modules/slash/",\ - "packageDependencies": [\ - ["slash", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip/node_modules/slash/",\ - "packageDependencies": [\ - ["slash", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["slice-ansi", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/slice-ansi-npm-3.0.0-d9999864af-5ec6d022d1.zip/node_modules/slice-ansi/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["astral-regex", "npm:2.0.0"],\ - ["is-fullwidth-code-point", "npm:3.0.0"],\ - ["slice-ansi", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/slice-ansi-npm-4.0.0-6eeca1d10e-4a82d7f085.zip/node_modules/slice-ansi/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["astral-regex", "npm:2.0.0"],\ - ["is-fullwidth-code-point", "npm:3.0.0"],\ - ["slice-ansi", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/slice-ansi-npm-5.0.0-8cd4f226df-7e600a2a55.zip/node_modules/slice-ansi/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:6.1.0"],\ - ["is-fullwidth-code-point", "npm:4.0.0"],\ - ["slice-ansi", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["smart-buffer", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-927484aa0b.zip/node_modules/smart-buffer/",\ - "packageDependencies": [\ - ["smart-buffer", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["snake-case", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/snake-case-npm-3.0.4-67f447c30d-0a7a79900b.zip/node_modules/snake-case/",\ - "packageDependencies": [\ - ["dot-case", "npm:3.0.4"],\ - ["snake-case", "npm:3.0.4"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["snapdragon", [\ - ["npm:0.8.2", {\ - "packageLocation": "./.yarn/cache/snapdragon-npm-0.8.2-2bcc47d217-cbe35b25dc.zip/node_modules/snapdragon/",\ - "packageDependencies": [\ - ["base", "npm:0.11.2"],\ - ["debug", "virtual:4b6d71baf8d43e6e9ab2e034c76a127a59a4f52c68b4d690a67d2337edcbba20c586f42f868bf9e27d2a8c265a2f8ed46b0a406f3d925c97696dc47fd870e967#npm:2.6.9"],\ - ["define-property", "npm:0.2.5"],\ - ["extend-shallow", "npm:2.0.1"],\ - ["map-cache", "npm:0.2.2"],\ - ["snapdragon", "npm:0.8.2"],\ - ["source-map", "npm:0.5.7"],\ - ["source-map-resolve", "npm:0.5.3"],\ - ["use", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["snapdragon-node", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/snapdragon-node-npm-2.1.1-78bc70e8e2-093c3584ef.zip/node_modules/snapdragon-node/",\ - "packageDependencies": [\ - ["define-property", "npm:1.0.0"],\ - ["isobject", "npm:3.0.1"],\ - ["snapdragon-node", "npm:2.1.1"],\ - ["snapdragon-util", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["snapdragon-util", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/snapdragon-util-npm-3.0.1-36b5a7829d-b776b15bf6.zip/node_modules/snapdragon-util/",\ - "packageDependencies": [\ - ["kind-of", "npm:3.2.2"],\ - ["snapdragon-util", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["socks", [\ - ["npm:2.7.0", {\ - "packageLocation": "./.yarn/cache/socks-npm-2.7.0-cc1cb019db-984a700cc0.zip/node_modules/socks/",\ - "packageDependencies": [\ - ["ip", "npm:2.0.1"],\ - ["smart-buffer", "npm:4.2.0"],\ - ["socks", "npm:2.7.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.8.1", {\ - "packageLocation": "./.yarn/cache/socks-npm-2.8.1-3b253d7256-a3cc38e071.zip/node_modules/socks/",\ - "packageDependencies": [\ - ["ip-address", "npm:9.0.5"],\ - ["smart-buffer", "npm:4.2.0"],\ - ["socks", "npm:2.8.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.8.4", {\ - "packageLocation": "./.yarn/cache/socks-npm-2.8.4-8194b86bd0-ab3af97aeb.zip/node_modules/socks/",\ - "packageDependencies": [\ - ["ip-address", "npm:9.0.5"],\ - ["smart-buffer", "npm:4.2.0"],\ - ["socks", "npm:2.8.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["socks-proxy-agent", [\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/socks-proxy-agent-npm-7.0.0-7aacf32ea0-26c75d9c62.zip/node_modules/socks-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:6.0.2"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["socks", "npm:2.7.0"],\ - ["socks-proxy-agent", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.0.3", {\ - "packageLocation": "./.yarn/cache/socks-proxy-agent-npm-8.0.3-30471cff1b-c2112c66d6.zip/node_modules/socks-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.1"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["socks", "npm:2.8.1"],\ - ["socks-proxy-agent", "npm:8.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.0.5", {\ - "packageLocation": "./.yarn/cache/socks-proxy-agent-npm-8.0.5-24d77a90dc-ee99e1daca.zip/node_modules/socks-proxy-agent/",\ - "packageDependencies": [\ - ["agent-base", "npm:7.1.3"],\ - ["debug", "virtual:428f325a939c2653ad822eb3d75efb02ac311523dd0d4f9645afc39ea00bd86eceac35a9d59c9b6977d76b670a4ef0ae057ea572338a44729aa592711a8c05a3#npm:4.3.4"],\ - ["socks", "npm:2.8.4"],\ - ["socks-proxy-agent", "npm:8.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sort-keys", [\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/sort-keys-npm-5.0.0-10c1d08986-9c0b7a4683.zip/node_modules/sort-keys/",\ - "packageDependencies": [\ - ["is-plain-obj", "npm:4.1.0"],\ - ["sort-keys", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["source-list-map", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/source-list-map-npm-2.0.1-625c551052-3918ffba5f.zip/node_modules/source-list-map/",\ - "packageDependencies": [\ - ["source-list-map", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["source-map", [\ - ["npm:0.5.7", {\ - "packageLocation": "./.yarn/cache/source-map-npm-0.5.7-7c3f035429-9b4ac749ec.zip/node_modules/source-map/",\ - "packageDependencies": [\ - ["source-map", "npm:0.5.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.6.1", {\ - "packageLocation": "./.yarn/cache/source-map-npm-0.6.1-1a3621db16-59ef7462f1.zip/node_modules/source-map/",\ - "packageDependencies": [\ - ["source-map", "npm:0.6.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.8.0-beta.0", {\ - "packageLocation": "./.yarn/cache/source-map-npm-0.8.0-beta.0-688a309e94-c02e22ab9f.zip/node_modules/source-map/",\ - "packageDependencies": [\ - ["source-map", "npm:0.8.0-beta.0"],\ - ["whatwg-url", "npm:7.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["source-map-js", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/source-map-js-npm-1.0.2-ee4f9f9b30-38e2d2dd18.zip/node_modules/source-map-js/",\ - "packageDependencies": [\ - ["source-map-js", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["source-map-resolve", [\ - ["npm:0.5.3", {\ - "packageLocation": "./.yarn/cache/source-map-resolve-npm-0.5.3-6502ae65ba-98e281cceb.zip/node_modules/source-map-resolve/",\ - "packageDependencies": [\ - ["atob", "npm:2.1.2"],\ - ["decode-uri-component", "npm:0.2.2"],\ - ["resolve-url", "npm:0.2.1"],\ - ["source-map-resolve", "npm:0.5.3"],\ - ["source-map-url", "npm:0.4.1"],\ - ["urix", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["source-map-support", [\ - ["npm:0.5.13", {\ - "packageLocation": "./.yarn/cache/source-map-support-npm-0.5.13-377dfd7321-d1514a922a.zip/node_modules/source-map-support/",\ - "packageDependencies": [\ - ["buffer-from", "npm:1.1.2"],\ - ["source-map", "npm:0.6.1"],\ - ["source-map-support", "npm:0.5.13"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.5.21", {\ - "packageLocation": "./.yarn/cache/source-map-support-npm-0.5.21-09ca99e250-8317e12d84.zip/node_modules/source-map-support/",\ - "packageDependencies": [\ - ["buffer-from", "npm:1.1.2"],\ - ["source-map", "npm:0.6.1"],\ - ["source-map-support", "npm:0.5.21"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["source-map-url", [\ - ["npm:0.4.1", {\ - "packageLocation": "./.yarn/cache/source-map-url-npm-0.4.1-747a1f6eba-7fec0460ca.zip/node_modules/source-map-url/",\ - "packageDependencies": [\ - ["source-map-url", "npm:0.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sourcemap-codec", [\ - ["npm:1.4.8", {\ - "packageLocation": "./.yarn/cache/sourcemap-codec-npm-1.4.8-3a1a9e60b1-6fc57a151e.zip/node_modules/sourcemap-codec/",\ - "packageDependencies": [\ - ["sourcemap-codec", "npm:1.4.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["spawn-command", [\ - ["npm:0.0.2", {\ - "packageLocation": "./.yarn/cache/spawn-command-npm-0.0.2-014d4d5d9f-f13e8c3c63.zip/node_modules/spawn-command/",\ - "packageDependencies": [\ - ["spawn-command", "npm:0.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["speedline-core", [\ - ["npm:1.4.3", {\ - "packageLocation": "./.yarn/cache/speedline-core-npm-1.4.3-f88c4cf82c-08dd892ef4.zip/node_modules/speedline-core/",\ - "packageDependencies": [\ - ["@types/node", "npm:18.7.6"],\ - ["image-ssim", "npm:0.2.0"],\ - ["jpeg-js", "npm:0.4.4"],\ - ["speedline-core", "npm:1.4.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["split-string", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/split-string-npm-3.1.0-df5d83450e-f31f4709d2.zip/node_modules/split-string/",\ - "packageDependencies": [\ - ["extend-shallow", "npm:3.0.2"],\ - ["split-string", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sponge-case", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/sponge-case-npm-1.0.1-00016db384-64f53d930f.zip/node_modules/sponge-case/",\ - "packageDependencies": [\ - ["sponge-case", "npm:1.0.1"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["sprintf-js", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/sprintf-js-npm-1.0.3-73f0a322fa-c34828732a.zip/node_modules/sprintf-js/",\ - "packageDependencies": [\ - ["sprintf-js", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/sprintf-js-npm-1.1.2-ea16269a6d-0044322a25.zip/node_modules/sprintf-js/",\ - "packageDependencies": [\ - ["sprintf-js", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.1.3", {\ - "packageLocation": "./.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-e7587128c4.zip/node_modules/sprintf-js/",\ - "packageDependencies": [\ - ["sprintf-js", "npm:1.1.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ssri", [\ - ["npm:9.0.1", {\ - "packageLocation": "./.yarn/cache/ssri-npm-9.0.1-33ce27f4f8-7638a61e91.zip/node_modules/ssri/",\ - "packageDependencies": [\ - ["minipass", "npm:3.3.5"],\ - ["ssri", "npm:9.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["stack-utils", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/stack-utils-npm-2.0.5-e0438f409a-a6d64e5dd2.zip/node_modules/stack-utils/",\ - "packageDependencies": [\ - ["escape-string-regexp", "npm:2.0.0"],\ - ["stack-utils", "npm:2.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["stackframe", [\ - ["npm:1.3.4", {\ - "packageLocation": "./.yarn/cache/stackframe-npm-1.3.4-bf4b7cc8fd-29ca71c1fd.zip/node_modules/stackframe/",\ - "packageDependencies": [\ - ["stackframe", "npm:1.3.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["static-extend", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/static-extend-npm-0.1.2-2720ee6882-8657485b83.zip/node_modules/static-extend/",\ - "packageDependencies": [\ - ["define-property", "npm:0.2.5"],\ - ["object-copy", "npm:0.1.0"],\ - ["static-extend", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["statuses", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/statuses-npm-2.0.1-81d2b97fee-18c7623fdb.zip/node_modules/statuses/",\ - "packageDependencies": [\ - ["statuses", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["stream-composer", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/stream-composer-npm-1.0.2-8b406e5f30-338b8e088f.zip/node_modules/stream-composer/",\ - "packageDependencies": [\ - ["stream-composer", "npm:1.0.2"],\ - ["streamx", "npm:2.20.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["streamsearch", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/streamsearch-npm-1.1.0-fc3ad6536d-612c2b2a7d.zip/node_modules/streamsearch/",\ - "packageDependencies": [\ - ["streamsearch", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["streamx", [\ - ["npm:2.13.2", {\ - "packageLocation": "./.yarn/cache/streamx-npm-2.13.2-e3c8533ef6-331619b9fc.zip/node_modules/streamx/",\ - "packageDependencies": [\ - ["fast-fifo", "npm:1.1.0"],\ - ["queue-tick", "npm:1.0.1"],\ - ["streamx", "npm:2.13.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.16.1", {\ - "packageLocation": "./.yarn/cache/streamx-npm-2.16.1-e4671189d0-f6d0899adf.zip/node_modules/streamx/",\ - "packageDependencies": [\ - ["bare-events", "npm:2.2.2"],\ - ["fast-fifo", "npm:1.1.0"],\ - ["queue-tick", "npm:1.0.1"],\ - ["streamx", "npm:2.16.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.20.1", {\ - "packageLocation": "./.yarn/cache/streamx-npm-2.20.1-2a3f1504e4-3c69a48c4f.zip/node_modules/streamx/",\ - "packageDependencies": [\ - ["bare-events", "npm:2.2.2"],\ - ["fast-fifo", "npm:1.3.2"],\ - ["queue-tick", "npm:1.0.1"],\ - ["streamx", "npm:2.20.1"],\ - ["text-decoder", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.22.0", {\ - "packageLocation": "./.yarn/cache/streamx-npm-2.22.0-6953aefe6d-9c329bb316.zip/node_modules/streamx/",\ - "packageDependencies": [\ - ["bare-events", "npm:2.2.2"],\ - ["fast-fifo", "npm:1.3.2"],\ - ["streamx", "npm:2.22.0"],\ - ["text-decoder", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string-argv", [\ - ["npm:0.3.1", {\ - "packageLocation": "./.yarn/cache/string-argv-npm-0.3.1-b4f6cd3d7b-47c637e3f4.zip/node_modules/string-argv/",\ - "packageDependencies": [\ - ["string-argv", "npm:0.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string-env-interpolation", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/string-env-interpolation-npm-1.0.1-2be728cffd-d126329587.zip/node_modules/string-env-interpolation/",\ - "packageDependencies": [\ - ["string-env-interpolation", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string-length", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/string-length-npm-4.0.2-675173c7a2-ce85533ef5.zip/node_modules/string-length/",\ - "packageDependencies": [\ - ["char-regex", "npm:1.0.2"],\ - ["string-length", "npm:4.0.2"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string-width", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/string-width-npm-2.1.1-0c2c6ae53f-d6173abe08.zip/node_modules/string-width/",\ - "packageDependencies": [\ - ["is-fullwidth-code-point", "npm:2.0.0"],\ - ["string-width", "npm:2.1.1"],\ - ["strip-ansi", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.2.3", {\ - "packageLocation": "./.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip/node_modules/string-width/",\ - "packageDependencies": [\ - ["emoji-regex", "npm:8.0.0"],\ - ["is-fullwidth-code-point", "npm:3.0.0"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip/node_modules/string-width/",\ - "packageDependencies": [\ - ["eastasianwidth", "npm:0.2.0"],\ - ["emoji-regex", "npm:9.2.2"],\ - ["string-width", "npm:5.1.2"],\ - ["strip-ansi", "npm:7.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string.prototype.matchall", [\ - ["npm:4.0.7", {\ - "packageLocation": "./.yarn/cache/string.prototype.matchall-npm-4.0.7-aaeb75dcaa-c3ddbe1341.zip/node_modules/string.prototype.matchall/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["get-intrinsic", "npm:1.1.2"],\ - ["has-symbols", "npm:1.0.3"],\ - ["internal-slot", "npm:1.0.3"],\ - ["regexp.prototype.flags", "npm:1.4.3"],\ - ["side-channel", "npm:1.0.4"],\ - ["string.prototype.matchall", "npm:4.0.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string.prototype.trimend", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/string.prototype.trimend-npm-1.0.5-2b980efa37-14e660a4bd.zip/node_modules/string.prototype.trimend/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["string.prototype.trimend", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string.prototype.trimstart", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/string.prototype.trimstart-npm-1.0.5-9e62187810-194a07b04a.zip/node_modules/string.prototype.trimstart/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["define-properties", "npm:1.1.4"],\ - ["es-abstract", "npm:1.20.1"],\ - ["string.prototype.trimstart", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["string_decoder", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/string_decoder-npm-1.1.1-e46a6c1353-7c41c17ed4.zip/node_modules/string_decoder/",\ - "packageDependencies": [\ - ["safe-buffer", "npm:5.1.2"],\ - ["string_decoder", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-54d23f4a6a.zip/node_modules/string_decoder/",\ - "packageDependencies": [\ - ["safe-buffer", "npm:5.2.1"],\ - ["string_decoder", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["stringify-object", [\ - ["npm:3.3.0", {\ - "packageLocation": "./.yarn/cache/stringify-object-npm-3.3.0-3e6784f7df-973782f09a.zip/node_modules/stringify-object/",\ - "packageDependencies": [\ - ["get-own-enumerable-property-symbols", "npm:3.0.2"],\ - ["is-obj", "npm:1.0.1"],\ - ["is-regexp", "npm:1.0.0"],\ - ["stringify-object", "npm:3.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-ansi", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/strip-ansi-npm-4.0.0-d4de985014-d9186e6c0c.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:3.0.1"],\ - ["strip-ansi", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.2.0", {\ - "packageLocation": "./.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:4.1.1"],\ - ["strip-ansi", "npm:5.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:6.0.1", {\ - "packageLocation": "./.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-ae3b5436d3.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:5.0.1"],\ - ["strip-ansi", "npm:6.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.1", {\ - "packageLocation": "./.yarn/cache/strip-ansi-npm-7.0.1-668c121204-07b3142f51.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:6.0.1"],\ - ["strip-ansi", "npm:7.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-bom", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/strip-bom-npm-3.0.0-71e8f81ff9-8d50ff27b7.zip/node_modules/strip-bom/",\ - "packageDependencies": [\ - ["strip-bom", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/strip-bom-npm-4.0.0-97d367a64d-9dbcfbaf50.zip/node_modules/strip-bom/",\ - "packageDependencies": [\ - ["strip-bom", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-comments", [\ - ["npm:2.0.1", {\ - "packageLocation": "./.yarn/cache/strip-comments-npm-2.0.1-7f4e6e5047-43ea36189e.zip/node_modules/strip-comments/",\ - "packageDependencies": [\ - ["strip-comments", "npm:2.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-final-newline", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip/node_modules/strip-final-newline/",\ - "packageDependencies": [\ - ["strip-final-newline", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/strip-final-newline-npm-3.0.0-7972cbec8b-23ee263adf.zip/node_modules/strip-final-newline/",\ - "packageDependencies": [\ - ["strip-final-newline", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-indent", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/strip-indent-npm-3.0.0-519e75a28d-18f045d57d.zip/node_modules/strip-indent/",\ - "packageDependencies": [\ - ["min-indent", "npm:1.0.1"],\ - ["strip-indent", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["strip-json-comments", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip/node_modules/strip-json-comments/",\ - "packageDependencies": [\ - ["strip-json-comments", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["style-value-types", [\ - ["npm:5.1.2", {\ - "packageLocation": "./.yarn/cache/style-value-types-npm-5.1.2-f9d7bb50ee-5be7b66b0a.zip/node_modules/style-value-types/",\ - "packageDependencies": [\ - ["hey-listen", "npm:1.0.8"],\ - ["style-value-types", "npm:5.1.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["styled-jsx", [\ - ["npm:5.1.6", {\ - "packageLocation": "./.yarn/cache/styled-jsx-npm-5.1.6-623e2e7d45-ba01200e82.zip/node_modules/styled-jsx/",\ - "packageDependencies": [\ - ["styled-jsx", "npm:5.1.6"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:08055e223d42825526d8678d4204abbfe1113c42d04e8846f1ba55f78c33f672ffad481b7e0b145d99277aa987e6a73a8538261459a59656a6ad7115d3717792#npm:5.1.6", {\ - "packageLocation": "./.yarn/__virtual__/styled-jsx-virtual-10becb530d/0/cache/styled-jsx-npm-5.1.6-623e2e7d45-ba01200e82.zip/node_modules/styled-jsx/",\ - "packageDependencies": [\ - ["@babel/core", null],\ - ["@types/babel-plugin-macros", null],\ - ["@types/babel__core", null],\ - ["@types/react", "npm:18.0.21"],\ - ["babel-plugin-macros", null],\ - ["client-only", "npm:0.0.1"],\ - ["react", "npm:18.2.0"],\ - ["styled-jsx", "virtual:08055e223d42825526d8678d4204abbfe1113c42d04e8846f1ba55f78c33f672ffad481b7e0b145d99277aa987e6a73a8538261459a59656a6ad7115d3717792#npm:5.1.6"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel-plugin-macros",\ - "@types/babel__core",\ - "@types/react",\ - "babel-plugin-macros",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["stylis", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/stylis-npm-4.2.0-6b07f11c99-5835918527.zip/node_modules/stylis/",\ - "packageDependencies": [\ - ["stylis", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["supercluster", [\ - ["npm:8.0.1", {\ - "packageLocation": "./.yarn/cache/supercluster-npm-8.0.1-32b2d8d364-3e517e5408.zip/node_modules/supercluster/",\ - "packageDependencies": [\ - ["kdbush", "npm:4.0.2"],\ - ["supercluster", "npm:8.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["supports-color", [\ - ["npm:5.5.0", {\ - "packageLocation": "./.yarn/cache/supports-color-npm-5.5.0-183ac537bc-5f505c6fa3.zip/node_modules/supports-color/",\ - "packageDependencies": [\ - ["has-flag", "npm:3.0.0"],\ - ["supports-color", "npm:5.5.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-c8bb7afd56.zip/node_modules/supports-color/",\ - "packageDependencies": [\ - ["has-flag", "npm:4.0.0"],\ - ["supports-color", "npm:7.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.1.1", {\ - "packageLocation": "./.yarn/cache/supports-color-npm-8.1.1-289e937149-157b534df8.zip/node_modules/supports-color/",\ - "packageDependencies": [\ - ["has-flag", "npm:4.0.0"],\ - ["supports-color", "npm:8.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["supports-hyperlinks", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/supports-hyperlinks-npm-2.2.0-9b22a6271b-a63f2acba5.zip/node_modules/supports-hyperlinks/",\ - "packageDependencies": [\ - ["has-flag", "npm:4.0.0"],\ - ["supports-color", "npm:7.2.0"],\ - ["supports-hyperlinks", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["supports-preserve-symlinks-flag", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-a9dc19ae22.zip/node_modules/supports-preserve-symlinks-flag/",\ - "packageDependencies": [\ - ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["swap-case", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/swap-case-npm-2.0.2-244649ec6c-6e21c9e1b3.zip/node_modules/swap-case/",\ - "packageDependencies": [\ - ["swap-case", "npm:2.0.2"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["symbol-observable", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/symbol-observable-npm-4.0.0-5c36594410-983aef3912.zip/node_modules/symbol-observable/",\ - "packageDependencies": [\ - ["symbol-observable", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["symbol-tree", [\ - ["npm:3.2.4", {\ - "packageLocation": "./.yarn/cache/symbol-tree-npm-3.2.4-fe70cdb75b-c09a00aadf.zip/node_modules/symbol-tree/",\ - "packageDependencies": [\ - ["symbol-tree", "npm:3.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["symlink-or-copy", [\ - ["npm:1.3.1", {\ - "packageLocation": "./.yarn/cache/symlink-or-copy-npm-1.3.1-7ca1229b17-ef6ad5fba2.zip/node_modules/symlink-or-copy/",\ - "packageDependencies": [\ - ["symlink-or-copy", "npm:1.3.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tapable", [\ - ["npm:2.2.1", {\ - "packageLocation": "./.yarn/cache/tapable-npm-2.2.1-8cf5ff3039-1769336dd2.zip/node_modules/tapable/",\ - "packageDependencies": [\ - ["tapable", "npm:2.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tar", [\ - ["npm:6.2.1", {\ - "packageLocation": "./.yarn/cache/tar-npm-6.2.1-237800bb20-bfbfbb2861.zip/node_modules/tar/",\ - "packageDependencies": [\ - ["chownr", "npm:2.0.0"],\ - ["fs-minipass", "npm:2.1.0"],\ - ["minipass", "npm:5.0.0"],\ - ["minizlib", "npm:2.1.2"],\ - ["mkdirp", "npm:1.0.4"],\ - ["tar", "npm:6.2.1"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.4.3", {\ - "packageLocation": "./.yarn/cache/tar-npm-7.4.3-1dbbd1ffc3-12a2a4fc6d.zip/node_modules/tar/",\ - "packageDependencies": [\ - ["@isaacs/fs-minipass", "npm:4.0.1"],\ - ["chownr", "npm:3.0.0"],\ - ["minipass", "npm:7.1.2"],\ - ["minizlib", "npm:3.0.2"],\ - ["mkdirp", "npm:3.0.1"],\ - ["tar", "npm:7.4.3"],\ - ["yallist", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tar-fs", [\ - ["npm:3.0.4", {\ - "packageLocation": "./.yarn/cache/tar-fs-npm-3.0.4-fa3da2e321-070f35bdde.zip/node_modules/tar-fs/",\ - "packageDependencies": [\ - ["mkdirp-classic", "npm:0.5.3"],\ - ["pump", "npm:3.0.0"],\ - ["tar-fs", "npm:3.0.4"],\ - ["tar-stream", "npm:3.1.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.5", {\ - "packageLocation": "./.yarn/cache/tar-fs-npm-3.0.5-5a44f34a8a-a15c18e80b.zip/node_modules/tar-fs/",\ - "packageDependencies": [\ - ["bare-fs", "npm:2.2.3"],\ - ["bare-path", "npm:2.1.1"],\ - ["pump", "npm:3.0.0"],\ - ["tar-fs", "npm:3.0.5"],\ - ["tar-stream", "npm:3.1.7"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.8", {\ - "packageLocation": "./.yarn/cache/tar-fs-npm-3.0.8-76b28a2b9e-fdcd1c66dc.zip/node_modules/tar-fs/",\ - "packageDependencies": [\ - ["bare-fs", "virtual:76b28a2b9eb169bb53889122d69d0fa855399b92831c9bfbcba96a7a43e56047c25768c1bbca97d6b30e6d948f628b34fb7029bec77453ee9390b1645fc0f2ed#npm:4.0.2"],\ - ["bare-path", "npm:3.0.0"],\ - ["pump", "npm:3.0.0"],\ - ["tar-fs", "npm:3.0.8"],\ - ["tar-stream", "npm:3.1.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tar-stream", [\ - ["npm:3.1.7", {\ - "packageLocation": "./.yarn/cache/tar-stream-npm-3.1.7-c34f9aa00f-b21a82705a.zip/node_modules/tar-stream/",\ - "packageDependencies": [\ - ["b4a", "npm:1.6.6"],\ - ["fast-fifo", "npm:1.3.2"],\ - ["streamx", "npm:2.16.1"],\ - ["tar-stream", "npm:3.1.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["teex", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/teex-npm-1.0.1-d658052423-36bf7ce8bb.zip/node_modules/teex/",\ - "packageDependencies": [\ - ["streamx", "npm:2.13.2"],\ - ["teex", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["temp-dir", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip/node_modules/temp-dir/",\ - "packageDependencies": [\ - ["temp-dir", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tempy", [\ - ["npm:0.6.0", {\ - "packageLocation": "./.yarn/cache/tempy-npm-0.6.0-e704ff522c-64f110666b.zip/node_modules/tempy/",\ - "packageDependencies": [\ - ["is-stream", "npm:2.0.1"],\ - ["temp-dir", "npm:2.0.0"],\ - ["tempy", "npm:0.6.0"],\ - ["type-fest", "npm:0.16.0"],\ - ["unique-string", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["terminal-link", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/terminal-link-npm-2.1.1-de80341758-ce3d2cd3a4.zip/node_modules/terminal-link/",\ - "packageDependencies": [\ - ["ansi-escapes", "npm:4.3.2"],\ - ["supports-hyperlinks", "npm:2.2.0"],\ - ["terminal-link", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["terser", [\ - ["npm:5.14.2", {\ - "packageLocation": "./.yarn/cache/terser-npm-5.14.2-b0f8815852-0646b5db1d.zip/node_modules/terser/",\ - "packageDependencies": [\ - ["@jridgewell/source-map", "npm:0.3.2"],\ - ["acorn", "npm:8.8.0"],\ - ["commander", "npm:2.20.3"],\ - ["source-map-support", "npm:0.5.21"],\ - ["terser", "npm:5.14.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.36.0", {\ - "packageLocation": "./.yarn/cache/terser-npm-5.36.0-e5678e2258-52e641419f.zip/node_modules/terser/",\ - "packageDependencies": [\ - ["@jridgewell/source-map", "npm:0.3.6"],\ - ["acorn", "npm:8.14.0"],\ - ["commander", "npm:2.20.3"],\ - ["source-map-support", "npm:0.5.21"],\ - ["terser", "npm:5.36.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["terser-webpack-plugin", [\ - ["npm:5.3.10", {\ - "packageLocation": "./.yarn/cache/terser-webpack-plugin-npm-5.3.10-3bde1920fb-fb1c2436ae.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["terser-webpack-plugin", "npm:5.3.10"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:5.3.5", {\ - "packageLocation": "./.yarn/cache/terser-webpack-plugin-npm-5.3.5-ec2e136bef-bf6706ca82.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["terser-webpack-plugin", "npm:5.3.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:5.3.5", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-8155da5b25/0/cache/terser-webpack-plugin-npm-5.3.5-ec2e136bef-bf6706ca82.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.15"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:3.1.1"],\ - ["serialize-javascript", "npm:6.0.0"],\ - ["terser", "npm:5.14.2"],\ - ["terser-webpack-plugin", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:5.3.5"],\ - ["uglify-js", null],\ - ["webpack", null]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:f49bd9af870e99495322302f1fc8ac0816fcd73126d66af0ecade4303e494fda315711d42c839942c6b37c39782618335e7034b652b3e4e01c0c88f78fa8e70c#npm:5.3.10", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-41f84357f1/0/cache/terser-webpack-plugin-npm-5.3.10-3bde1920fb-fb1c2436ae.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:3.1.1"],\ - ["serialize-javascript", "npm:6.0.2"],\ - ["terser", "npm:5.36.0"],\ - ["terser-webpack-plugin", "virtual:f49bd9af870e99495322302f1fc8ac0816fcd73126d66af0ecade4303e494fda315711d42c839942c6b37c39782618335e7034b652b3e4e01c0c88f78fa8e70c#npm:5.3.10"],\ - ["uglify-js", null],\ - ["webpack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.96.1"]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["test-exclude", [\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/test-exclude-npm-6.0.0-3fb03d69df-8fccb2cb6c.zip/node_modules/test-exclude/",\ - "packageDependencies": [\ - ["@istanbuljs/schema", "npm:0.1.3"],\ - ["glob", "npm:7.2.3"],\ - ["minimatch", "npm:3.1.2"],\ - ["test-exclude", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["text-decoder", [\ - ["npm:1.2.1", {\ - "packageLocation": "./.yarn/cache/text-decoder-npm-1.2.1-b84148d5cf-87adfb2204.zip/node_modules/text-decoder/",\ - "packageDependencies": [\ - ["text-decoder", "npm:1.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["text-table", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/text-table-npm-0.2.0-d92a778b59-4383b5baae.zip/node_modules/text-table/",\ - "packageDependencies": [\ - ["text-table", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["third-party-web", [\ - ["npm:0.24.2", {\ - "packageLocation": "./.yarn/cache/third-party-web-npm-0.24.2-7981993665-6bdda76d45.zip/node_modules/third-party-web/",\ - "packageDependencies": [\ - ["third-party-web", "npm:0.24.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["through", [\ - ["npm:2.3.8", {\ - "packageLocation": "./.yarn/cache/through-npm-2.3.8-df5f72a16e-5da78346f7.zip/node_modules/through/",\ - "packageDependencies": [\ - ["through", "npm:2.3.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["through2", [\ - ["npm:2.0.5", {\ - "packageLocation": "./.yarn/cache/through2-npm-2.0.5-77d90f13cd-cd71f7dcdc.zip/node_modules/through2/",\ - "packageDependencies": [\ - ["readable-stream", "npm:2.3.7"],\ - ["through2", "npm:2.0.5"],\ - ["xtend", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tiny-case", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/tiny-case-npm-1.0.3-8c9747c74e-3f7a30c39d.zip/node_modules/tiny-case/",\ - "packageDependencies": [\ - ["tiny-case", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tiny-invariant", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/tiny-invariant-npm-1.2.0-024338c59c-e09a718a7c.zip/node_modules/tiny-invariant/",\ - "packageDependencies": [\ - ["tiny-invariant", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tiny-warning", [\ - ["npm:1.0.3", {\ - "packageLocation": "./.yarn/cache/tiny-warning-npm-1.0.3-750b7a07c4-da62c4acac.zip/node_modules/tiny-warning/",\ - "packageDependencies": [\ - ["tiny-warning", "npm:1.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["title-case", [\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/title-case-npm-3.0.3-101a1194a3-369fe90f65.zip/node_modules/title-case/",\ - "packageDependencies": [\ - ["title-case", "npm:3.0.3"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tldts-core", [\ - ["npm:6.1.16", {\ - "packageLocation": "./.yarn/cache/tldts-core-npm-6.1.16-0aa90b6f19-99bd97a51e.zip/node_modules/tldts-core/",\ - "packageDependencies": [\ - ["tldts-core", "npm:6.1.16"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tldts-icann", [\ - ["npm:6.1.16", {\ - "packageLocation": "./.yarn/cache/tldts-icann-npm-6.1.16-3b0f387e83-cbb60ca5af.zip/node_modules/tldts-icann/",\ - "packageDependencies": [\ - ["tldts-core", "npm:6.1.16"],\ - ["tldts-icann", "npm:6.1.16"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tmp", [\ - ["npm:0.0.33", {\ - "packageLocation": "./.yarn/cache/tmp-npm-0.0.33-bcbf65df2a-09c0abfd16.zip/node_modules/tmp/",\ - "packageDependencies": [\ - ["os-tmpdir", "npm:1.0.2"],\ - ["tmp", "npm:0.0.33"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/tmp-npm-0.1.0-fa18ef19c4-d98440fd50.zip/node_modules/tmp/",\ - "packageDependencies": [\ - ["rimraf", "npm:2.7.1"],\ - ["tmp", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tmpl", [\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/tmpl-npm-1.0.5-d399ba37e2-cd922d9b85.zip/node_modules/tmpl/",\ - "packageDependencies": [\ - ["tmpl", "npm:1.0.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["to-fast-properties", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-be2de62fe5.zip/node_modules/to-fast-properties/",\ - "packageDependencies": [\ - ["to-fast-properties", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["to-object-path", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/to-object-path-npm-0.3.0-241b5ffa9c-9425effee5.zip/node_modules/to-object-path/",\ - "packageDependencies": [\ - ["kind-of", "npm:3.2.2"],\ - ["to-object-path", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["to-regex", [\ - ["npm:3.0.2", {\ - "packageLocation": "./.yarn/cache/to-regex-npm-3.0.2-3af893c972-ab87c22f07.zip/node_modules/to-regex/",\ - "packageDependencies": [\ - ["define-property", "npm:2.0.2"],\ - ["extend-shallow", "npm:3.0.2"],\ - ["regex-not", "npm:1.0.2"],\ - ["safe-regex", "npm:1.1.0"],\ - ["to-regex", "npm:3.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["to-regex-range", [\ - ["npm:2.1.1", {\ - "packageLocation": "./.yarn/cache/to-regex-range-npm-2.1.1-60af4c593e-2eed5f8971.zip/node_modules/to-regex-range/",\ - "packageDependencies": [\ - ["is-number", "npm:3.0.0"],\ - ["repeat-string", "npm:1.6.1"],\ - ["to-regex-range", "npm:2.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.1", {\ - "packageLocation": "./.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip/node_modules/to-regex-range/",\ - "packageDependencies": [\ - ["is-number", "npm:7.0.0"],\ - ["to-regex-range", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["to-through", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/to-through-npm-3.0.0-48b6a5ea5e-404ad1a346.zip/node_modules/to-through/",\ - "packageDependencies": [\ - ["streamx", "npm:2.13.2"],\ - ["to-through", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["toidentifier", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/toidentifier-npm-1.0.1-f759712599-952c29e2a8.zip/node_modules/toidentifier/",\ - "packageDependencies": [\ - ["toidentifier", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["toposort", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/toposort-npm-2.0.2-d472329c7d-6f128353e4.zip/node_modules/toposort/",\ - "packageDependencies": [\ - ["toposort", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["totalist", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/totalist-npm-3.0.1-91e71f3baa-5132d562cf.zip/node_modules/totalist/",\ - "packageDependencies": [\ - ["totalist", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tough-cookie", [\ - ["npm:4.1.4", {\ - "packageLocation": "./.yarn/cache/tough-cookie-npm-4.1.4-8293cc8bd5-75663f4e2c.zip/node_modules/tough-cookie/",\ - "packageDependencies": [\ - ["psl", "npm:1.9.0"],\ - ["punycode", "npm:2.1.1"],\ - ["tough-cookie", "npm:4.1.4"],\ - ["universalify", "npm:0.2.0"],\ - ["url-parse", "npm:1.5.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tr46", [\ - ["npm:0.0.3", {\ - "packageLocation": "./.yarn/cache/tr46-npm-0.0.3-de53018915-8f1f5aa6cb.zip/node_modules/tr46/",\ - "packageDependencies": [\ - ["tr46", "npm:0.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/tr46-npm-1.0.1-9547f343a4-6e80d75480.zip/node_modules/tr46/",\ - "packageDependencies": [\ - ["punycode", "npm:2.1.1"],\ - ["tr46", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/tr46-npm-3.0.0-e1ae1ea7c9-b09a15886c.zip/node_modules/tr46/",\ - "packageDependencies": [\ - ["punycode", "npm:2.1.1"],\ - ["tr46", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["traverse-chain", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/traverse-chain-npm-0.1.0-c14e6fc22c-dea79231a4.zip/node_modules/traverse-chain/",\ - "packageDependencies": [\ - ["traverse-chain", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tree-kill", [\ - ["npm:1.2.2", {\ - "packageLocation": "./.yarn/cache/tree-kill-npm-1.2.2-3da0e5a759-49117f5f41.zip/node_modules/tree-kill/",\ - "packageDependencies": [\ - ["tree-kill", "npm:1.2.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ts-api-utils", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/ts-api-utils-npm-1.3.0-33457908f8-3ee44faa24.zip/node_modules/ts-api-utils/",\ - "packageDependencies": [\ - ["ts-api-utils", "npm:1.3.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:1.4.3", {\ - "packageLocation": "./.yarn/cache/ts-api-utils-npm-1.4.3-ee6b12ae73-713c51e739.zip/node_modules/ts-api-utils/",\ - "packageDependencies": [\ - ["ts-api-utils", "npm:1.4.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0f7794eca8c536afb0e41b1bb750c7fef0f63fab3c0489648e5b096fef723275cc5288e236412fb5bd39bfd38f71a926240ed28d6b1219fd63acd084fb6ab940#npm:1.3.0", {\ - "packageLocation": "./.yarn/__virtual__/ts-api-utils-virtual-e5182242d0/0/cache/ts-api-utils-npm-1.3.0-33457908f8-3ee44faa24.zip/node_modules/ts-api-utils/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["ts-api-utils", "virtual:0f7794eca8c536afb0e41b1bb750c7fef0f63fab3c0489648e5b096fef723275cc5288e236412fb5bd39bfd38f71a926240ed28d6b1219fd63acd084fb6ab940#npm:1.3.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:ff45382f289877ead7011223e1a3e12ad5931bc5bb966ce16d645a7d92cd2edad32394d9fb08d21093dea26aa08aeb03e17de0977d68d796d54585998a88576c#npm:1.4.3", {\ - "packageLocation": "./.yarn/__virtual__/ts-api-utils-virtual-371d481ae5/0/cache/ts-api-utils-npm-1.4.3-ee6b12ae73-713c51e739.zip/node_modules/ts-api-utils/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["ts-api-utils", "virtual:ff45382f289877ead7011223e1a3e12ad5931bc5bb966ce16d645a7d92cd2edad32394d9fb08d21093dea26aa08aeb03e17de0977d68d796d54585998a88576c#npm:1.4.3"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:1.3.0", {\ - "packageLocation": "./.yarn/__virtual__/ts-api-utils-virtual-b61b2d1b10/0/cache/ts-api-utils-npm-1.3.0-33457908f8-3ee44faa24.zip/node_modules/ts-api-utils/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["ts-api-utils", "virtual:ffbd544ad0fe91b6a84d26da1b983efebd6dadd9a2ae0160d3effbd386edafd313452293d39a630ddc390a351a5cc7679a4b023d895be27d9a3a0972f47b5e95#npm:1.3.0"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ts-essentials", [\ - ["npm:9.3.0", {\ - "packageLocation": "./.yarn/cache/ts-essentials-npm-9.3.0-e70047bed2-5af9c78e30.zip/node_modules/ts-essentials/",\ - "packageDependencies": [\ - ["ts-essentials", "npm:9.3.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.3.0", {\ - "packageLocation": "./.yarn/__virtual__/ts-essentials-virtual-1a771893b9/0/cache/ts-essentials-npm-9.3.0-e70047bed2-5af9c78e30.zip/node_modules/ts-essentials/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["ts-essentials", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:9.3.0"],\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ts-invariant", [\ - ["npm:0.10.3", {\ - "packageLocation": "./.yarn/cache/ts-invariant-npm-0.10.3-4657a5b439-bb07d56fe4.zip/node_modules/ts-invariant/",\ - "packageDependencies": [\ - ["ts-invariant", "npm:0.10.3"],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ts-log", [\ - ["npm:2.2.4", {\ - "packageLocation": "./.yarn/cache/ts-log-npm-2.2.4-167dc9162c-66672a552b.zip/node_modules/ts-log/",\ - "packageDependencies": [\ - ["ts-log", "npm:2.2.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tsconfig-paths", [\ - ["npm:3.14.1", {\ - "packageLocation": "./.yarn/cache/tsconfig-paths-npm-3.14.1-17a815b5c5-51be8bd8f9.zip/node_modules/tsconfig-paths/",\ - "packageDependencies": [\ - ["@types/json5", "npm:0.0.29"],\ - ["json5", "npm:1.0.2"],\ - ["minimist", "npm:1.2.6"],\ - ["strip-bom", "npm:3.0.0"],\ - ["tsconfig-paths", "npm:3.14.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tslib", [\ - ["npm:1.14.1", {\ - "packageLocation": "./.yarn/cache/tslib-npm-1.14.1-102499115e-7dbf34e6f5.zip/node_modules/tslib/",\ - "packageDependencies": [\ - ["tslib", "npm:1.14.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.4.0", {\ - "packageLocation": "./.yarn/cache/tslib-npm-2.4.0-9cb6dc5030-d8379e68b3.zip/node_modules/tslib/",\ - "packageDependencies": [\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.6.2", {\ - "packageLocation": "./.yarn/cache/tslib-npm-2.6.2-4fc8c068d9-bd26c22d36.zip/node_modules/tslib/",\ - "packageDependencies": [\ - ["tslib", "npm:2.6.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tss-react", [\ - ["npm:4.1.3", {\ - "packageLocation": "./.yarn/cache/tss-react-npm-4.1.3-5a3ae962fd-8f1be52663.zip/node_modules/tss-react/",\ - "packageDependencies": [\ - ["tss-react", "npm:4.1.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.3", {\ - "packageLocation": "./.yarn/__virtual__/tss-react-virtual-1ed8900954/0/cache/tss-react-npm-4.1.3-5a3ae962fd-8f1be52663.zip/node_modules/tss-react/",\ - "packageDependencies": [\ - ["@emotion/cache", "npm:11.11.0"],\ - ["@emotion/react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:11.11.4"],\ - ["@emotion/serialize", "npm:1.1.3"],\ - ["@emotion/server", null],\ - ["@emotion/utils", "npm:1.2.1"],\ - ["@types/emotion__react", null],\ - ["@types/emotion__server", null],\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"],\ - ["tss-react", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.3"]\ - ],\ - "packagePeers": [\ - "@emotion/react",\ - "@emotion/server",\ - "@types/emotion__react",\ - "@types/emotion__server",\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["tsutils", [\ - ["npm:3.21.0", {\ - "packageLocation": "./.yarn/cache/tsutils-npm-3.21.0-347e6636c5-ea036bec1d.zip/node_modules/tsutils/",\ - "packageDependencies": [\ - ["tsutils", "npm:3.21.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:1492b0a79ac9ac17c7d87d62d14283b58fd6255ad2b62d4210c1f0cbf88592c4634d4c0b053070ef8a39957677019ad560b035deb85f58d807443a9b88f891f3#npm:3.21.0", {\ - "packageLocation": "./.yarn/__virtual__/tsutils-virtual-174c9e93d5/0/cache/tsutils-npm-3.21.0-347e6636c5-ea036bec1d.zip/node_modules/tsutils/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["tslib", "npm:1.14.1"],\ - ["tsutils", "virtual:1492b0a79ac9ac17c7d87d62d14283b58fd6255ad2b62d4210c1f0cbf88592c4634d4c0b053070ef8a39957677019ad560b035deb85f58d807443a9b88f891f3#npm:3.21.0"],\ - ["typescript", null]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["type-check", [\ - ["npm:0.3.2", {\ - "packageLocation": "./.yarn/cache/type-check-npm-0.3.2-a4a38bb0b6-11dec0b50d.zip/node_modules/type-check/",\ - "packageDependencies": [\ - ["prelude-ls", "npm:1.1.2"],\ - ["type-check", "npm:0.3.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.4.0", {\ - "packageLocation": "./.yarn/cache/type-check-npm-0.4.0-60565800ce-1468777647.zip/node_modules/type-check/",\ - "packageDependencies": [\ - ["prelude-ls", "npm:1.2.1"],\ - ["type-check", "npm:0.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["type-detect", [\ - ["npm:4.0.8", {\ - "packageLocation": "./.yarn/cache/type-detect-npm-4.0.8-8d8127b901-5179e3b8eb.zip/node_modules/type-detect/",\ - "packageDependencies": [\ - ["type-detect", "npm:4.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["type-fest", [\ - ["npm:0.16.0", {\ - "packageLocation": "./.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-fd8c47ccb9.zip/node_modules/type-fest/",\ - "packageDependencies": [\ - ["type-fest", "npm:0.16.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.20.2", {\ - "packageLocation": "./.yarn/cache/type-fest-npm-0.20.2-b36432617f-8907e16284.zip/node_modules/type-fest/",\ - "packageDependencies": [\ - ["type-fest", "npm:0.20.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.21.3", {\ - "packageLocation": "./.yarn/cache/type-fest-npm-0.21.3-5ff2a9c6fd-f4254070d9.zip/node_modules/type-fest/",\ - "packageDependencies": [\ - ["type-fest", "npm:0.21.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.19.0", {\ - "packageLocation": "./.yarn/cache/type-fest-npm-2.19.0-918b953248-7bf9e8fdf3.zip/node_modules/type-fest/",\ - "packageDependencies": [\ - ["type-fest", "npm:2.19.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["type-is", [\ - ["npm:1.6.18", {\ - "packageLocation": "./.yarn/cache/type-is-npm-1.6.18-6dee4d4961-0bd9eeae5e.zip/node_modules/type-is/",\ - "packageDependencies": [\ - ["media-typer", "npm:0.3.0"],\ - ["mime-types", "npm:2.1.35"],\ - ["type-is", "npm:1.6.18"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["typed-query-selector", [\ - ["npm:2.12.0", {\ - "packageLocation": "./.yarn/cache/typed-query-selector-npm-2.12.0-682535ccea-e65b646830.zip/node_modules/typed-query-selector/",\ - "packageDependencies": [\ - ["typed-query-selector", "npm:2.12.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["typedarray-to-buffer", [\ - ["npm:3.1.5", {\ - "packageLocation": "./.yarn/cache/typedarray-to-buffer-npm-3.1.5-aadc11995e-7c850c3433.zip/node_modules/typedarray-to-buffer/",\ - "packageDependencies": [\ - ["is-typedarray", "npm:1.0.0"],\ - ["typedarray-to-buffer", "npm:3.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["typescript", [\ - ["patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40", {\ - "packageLocation": "./.yarn/cache/typescript-patch-8964a48ba3-00504c01ee.zip/node_modules/typescript/",\ - "packageDependencies": [\ - ["typescript", "patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5", {\ - "packageLocation": "./.yarn/cache/typescript-patch-bfb0cdd3b9-22b67a18da.zip/node_modules/typescript/",\ - "packageDependencies": [\ - ["typescript", "patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ua-parser-js", [\ - ["npm:0.7.33", {\ - "packageLocation": "./.yarn/cache/ua-parser-js-npm-0.7.33-4d3f482ab6-b648d065a8.zip/node_modules/ua-parser-js/",\ - "packageDependencies": [\ - ["ua-parser-js", "npm:0.7.33"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unbox-primitive", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/unbox-primitive-npm-1.0.2-cb56a05066-06e1ee41c1.zip/node_modules/unbox-primitive/",\ - "packageDependencies": [\ - ["call-bind", "npm:1.0.2"],\ - ["has-bigints", "npm:1.0.2"],\ - ["has-symbols", "npm:1.0.3"],\ - ["unbox-primitive", "npm:1.0.2"],\ - ["which-boxed-primitive", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unbzip2-stream", [\ - ["npm:1.4.3", {\ - "packageLocation": "./.yarn/cache/unbzip2-stream-npm-1.4.3-c5582d6a9f-4ffc0e14f4.zip/node_modules/unbzip2-stream/",\ - "packageDependencies": [\ - ["buffer", "npm:5.7.1"],\ - ["through", "npm:2.3.8"],\ - ["unbzip2-stream", "npm:1.4.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unc-path-regex", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/unc-path-regex-npm-0.1.2-53c3343ef3-a05fa2006b.zip/node_modules/unc-path-regex/",\ - "packageDependencies": [\ - ["unc-path-regex", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["underscore.string", [\ - ["npm:3.3.6", {\ - "packageLocation": "./.yarn/cache/underscore.string-npm-3.3.6-6b8df1b7db-4de7b855ef.zip/node_modules/underscore.string/",\ - "packageDependencies": [\ - ["sprintf-js", "npm:1.1.2"],\ - ["underscore.string", "npm:3.3.6"],\ - ["util-deprecate", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["undici", [\ - ["npm:6.21.1", {\ - "packageLocation": "./.yarn/cache/undici-npm-6.21.1-0f7fc2c179-eeccc07e90.zip/node_modules/undici/",\ - "packageDependencies": [\ - ["undici", "npm:6.21.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["undici-types", [\ - ["npm:6.20.0", {\ - "packageLocation": "./.yarn/cache/undici-types-npm-6.20.0-bd21e669af-583ac7bbf4.zip/node_modules/undici-types/",\ - "packageDependencies": [\ - ["undici-types", "npm:6.20.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unicode-canonical-property-names-ecmascript", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/unicode-canonical-property-names-ecmascript-npm-2.0.0-d2d8554a14-39be078afd.zip/node_modules/unicode-canonical-property-names-ecmascript/",\ - "packageDependencies": [\ - ["unicode-canonical-property-names-ecmascript", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unicode-match-property-ecmascript", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/unicode-match-property-ecmascript-npm-2.0.0-97a00fd52c-1f34a7434a.zip/node_modules/unicode-match-property-ecmascript/",\ - "packageDependencies": [\ - ["unicode-canonical-property-names-ecmascript", "npm:2.0.0"],\ - ["unicode-match-property-ecmascript", "npm:2.0.0"],\ - ["unicode-property-aliases-ecmascript", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unicode-match-property-value-ecmascript", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/unicode-match-property-value-ecmascript-npm-2.0.0-b52f4f7ca4-a99f100f41.zip/node_modules/unicode-match-property-value-ecmascript/",\ - "packageDependencies": [\ - ["unicode-match-property-value-ecmascript", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unicode-property-aliases-ecmascript", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/unicode-property-aliases-ecmascript-npm-2.0.0-1636cb7768-dda4d39128.zip/node_modules/unicode-property-aliases-ecmascript/",\ - "packageDependencies": [\ - ["unicode-property-aliases-ecmascript", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["union-value", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/union-value-npm-1.0.1-76c6e8a88f-a3464097d3.zip/node_modules/union-value/",\ - "packageDependencies": [\ - ["arr-union", "npm:3.1.0"],\ - ["get-value", "npm:2.0.6"],\ - ["is-extendable", "npm:0.1.1"],\ - ["set-value", "npm:2.0.1"],\ - ["union-value", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unique-filename", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/unique-filename-npm-1.1.1-c885c5095b-9b6969d649.zip/node_modules/unique-filename/",\ - "packageDependencies": [\ - ["unique-filename", "npm:1.1.1"],\ - ["unique-slug", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unique-slug", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/unique-slug-npm-2.0.2-f6ba1ddeb7-6cfaf91976.zip/node_modules/unique-slug/",\ - "packageDependencies": [\ - ["imurmurhash", "npm:0.1.4"],\ - ["unique-slug", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unique-string", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/unique-string-npm-2.0.0-3153c97e47-107cae65b0.zip/node_modules/unique-string/",\ - "packageDependencies": [\ - ["crypto-random-string", "npm:2.0.0"],\ - ["unique-string", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["universalify", [\ - ["npm:0.1.2", {\ - "packageLocation": "./.yarn/cache/universalify-npm-0.1.2-9b22d31d2d-40cdc60f6e.zip/node_modules/universalify/",\ - "packageDependencies": [\ - ["universalify", "npm:0.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/universalify-npm-0.2.0-9984e61c10-e86134cb12.zip/node_modules/universalify/",\ - "packageDependencies": [\ - ["universalify", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/universalify-npm-2.0.0-03b8b418a8-2406a4edf4.zip/node_modules/universalify/",\ - "packageDependencies": [\ - ["universalify", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unixify", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/unixify-npm-1.0.0-6346176065-3be30e4857.zip/node_modules/unixify/",\ - "packageDependencies": [\ - ["normalize-path", "npm:2.1.1"],\ - ["unixify", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unpipe", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/unpipe-npm-1.0.0-2ed2a3c2bf-4fa18d8d8d.zip/node_modules/unpipe/",\ - "packageDependencies": [\ - ["unpipe", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["unset-value", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/unset-value-npm-1.0.0-2af803b920-0ca6448706.zip/node_modules/unset-value/",\ - "packageDependencies": [\ - ["has-value", "npm:0.3.1"],\ - ["isobject", "npm:3.0.1"],\ - ["unset-value", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["upath", [\ - ["npm:1.2.0", {\ - "packageLocation": "./.yarn/cache/upath-npm-1.2.0-ca00ec3398-ac07351d9e.zip/node_modules/upath/",\ - "packageDependencies": [\ - ["upath", "npm:1.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["update-browserslist-db", [\ - ["npm:1.0.13", {\ - "packageLocation": "./.yarn/cache/update-browserslist-db-npm-1.0.13-ea7b8ee24d-9074b4ef34.zip/node_modules/update-browserslist-db/",\ - "packageDependencies": [\ - ["update-browserslist-db", "npm:1.0.13"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:1.0.5", {\ - "packageLocation": "./.yarn/cache/update-browserslist-db-npm-1.0.5-09efe8a0df-b0430f66fe.zip/node_modules/update-browserslist-db/",\ - "packageDependencies": [\ - ["update-browserslist-db", "npm:1.0.5"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/update-browserslist-db-npm-1.1.1-16e34017b1-7678dd8609.zip/node_modules/update-browserslist-db/",\ - "packageDependencies": [\ - ["update-browserslist-db", "npm:1.1.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0bc5f13e3b070c660ccf3396ff30b6fc44ede2343c6543d593ce4624807ab1bafdbcd764ac20b4d55e6854e63e2568f1c6d09371eb639766b95e2d401b5b05cb#npm:1.1.1", {\ - "packageLocation": "./.yarn/__virtual__/update-browserslist-db-virtual-594dc17320/0/cache/update-browserslist-db-npm-1.1.1-16e34017b1-7678dd8609.zip/node_modules/update-browserslist-db/",\ - "packageDependencies": [\ - ["@types/browserslist", null],\ - ["browserslist", "npm:4.24.2"],\ - ["escalade", "npm:3.2.0"],\ - ["picocolors", "npm:1.1.1"],\ - ["update-browserslist-db", "virtual:0bc5f13e3b070c660ccf3396ff30b6fc44ede2343c6543d593ce4624807ab1bafdbcd764ac20b4d55e6854e63e2568f1c6d09371eb639766b95e2d401b5b05cb#npm:1.1.1"]\ - ],\ - "packagePeers": [\ - "@types/browserslist",\ - "browserslist"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:7dabe86a57e66f38602a3318a9a679c09cef5315077ee4afa3dbf7e16ac6eadfd7834360e07fea78c56290801aa035a0803a3e03041c77287c222df384f2a179#npm:1.0.5", {\ - "packageLocation": "./.yarn/__virtual__/update-browserslist-db-virtual-ef16b91961/0/cache/update-browserslist-db-npm-1.0.5-09efe8a0df-b0430f66fe.zip/node_modules/update-browserslist-db/",\ - "packageDependencies": [\ - ["@types/browserslist", null],\ - ["browserslist", "npm:4.21.3"],\ - ["escalade", "npm:3.1.1"],\ - ["picocolors", "npm:1.0.0"],\ - ["update-browserslist-db", "virtual:7dabe86a57e66f38602a3318a9a679c09cef5315077ee4afa3dbf7e16ac6eadfd7834360e07fea78c56290801aa035a0803a3e03041c77287c222df384f2a179#npm:1.0.5"]\ - ],\ - "packagePeers": [\ - "@types/browserslist",\ - "browserslist"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:8126a959d46e6def6d7f2497c47970a23a94adac85f5be1df9be290c674503b9bcbe0dc057e2741ee222cc2a8a3b9f584b20c3a9eb5ce085704d99fc5d94514c#npm:1.0.13", {\ - "packageLocation": "./.yarn/__virtual__/update-browserslist-db-virtual-c44986bb1a/0/cache/update-browserslist-db-npm-1.0.13-ea7b8ee24d-9074b4ef34.zip/node_modules/update-browserslist-db/",\ - "packageDependencies": [\ - ["@types/browserslist", null],\ - ["browserslist", "npm:4.23.0"],\ - ["escalade", "npm:3.1.1"],\ - ["picocolors", "npm:1.0.0"],\ - ["update-browserslist-db", "virtual:8126a959d46e6def6d7f2497c47970a23a94adac85f5be1df9be290c674503b9bcbe0dc057e2741ee222cc2a8a3b9f584b20c3a9eb5ce085704d99fc5d94514c#npm:1.0.13"]\ - ],\ - "packagePeers": [\ - "@types/browserslist",\ - "browserslist"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["upper-case", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/upper-case-npm-2.0.2-6cf3bda96c-508723a2b0.zip/node_modules/upper-case/",\ - "packageDependencies": [\ - ["tslib", "npm:2.4.0"],\ - ["upper-case", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["upper-case-first", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/upper-case-first-npm-2.0.2-8e0c5a851a-4487db4701.zip/node_modules/upper-case-first/",\ - "packageDependencies": [\ - ["tslib", "npm:2.4.0"],\ - ["upper-case-first", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["uri-js", [\ - ["npm:4.4.1", {\ - "packageLocation": "./.yarn/cache/uri-js-npm-4.4.1-66d11cbcaf-b271ca7e3d.zip/node_modules/uri-js/",\ - "packageDependencies": [\ - ["punycode", "npm:2.1.1"],\ - ["uri-js", "npm:4.4.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["urix", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/urix-npm-0.1.0-bd5e55a13a-ebf5df5491.zip/node_modules/urix/",\ - "packageDependencies": [\ - ["urix", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["url-loader", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/url-loader-npm-1.1.2-860d56b20e-00ab1f4552.zip/node_modules/url-loader/",\ - "packageDependencies": [\ - ["url-loader", "npm:1.1.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:4.1.1", {\ - "packageLocation": "./.yarn/cache/url-loader-npm-4.1.1-568e22ebcb-f7e7258156.zip/node_modules/url-loader/",\ - "packageDependencies": [\ - ["url-loader", "npm:4.1.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:1.1.2", {\ - "packageLocation": "./.yarn/__virtual__/url-loader-virtual-ee813ffb8f/0/cache/url-loader-npm-1.1.2-860d56b20e-00ab1f4552.zip/node_modules/url-loader/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["loader-utils", "npm:1.4.2"],\ - ["mime", "npm:2.6.0"],\ - ["schema-utils", "npm:1.0.0"],\ - ["url-loader", "virtual:2fe1ece027ff30f369c3de5509f3950f9c30afeb8f723ccea6047c930693bb4a30be2d19ba55fff56ed53904b395062f08e626c5a8ad4c5229c621d61994ab36#npm:1.1.2"],\ - ["webpack", null]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.1", {\ - "packageLocation": "./.yarn/__virtual__/url-loader-virtual-a9f9248353/0/cache/url-loader-npm-4.1.1-568e22ebcb-f7e7258156.zip/node_modules/url-loader/",\ - "packageDependencies": [\ - ["@types/file-loader", null],\ - ["@types/webpack", null],\ - ["file-loader", null],\ - ["loader-utils", "npm:2.0.4"],\ - ["mime-types", "npm:2.1.35"],\ - ["schema-utils", "npm:3.1.1"],\ - ["url-loader", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:4.1.1"],\ - ["webpack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.96.1"]\ - ],\ - "packagePeers": [\ - "@types/file-loader",\ - "@types/webpack",\ - "file-loader",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["url-parse", [\ - ["npm:1.5.10", {\ - "packageLocation": "./.yarn/cache/url-parse-npm-1.5.10-64fa2bcd6d-c9e96bc8c5.zip/node_modules/url-parse/",\ - "packageDependencies": [\ - ["querystringify", "npm:2.2.0"],\ - ["requires-port", "npm:1.0.0"],\ - ["url-parse", "npm:1.5.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["urlpattern-polyfill", [\ - ["npm:10.0.0", {\ - "packageLocation": "./.yarn/cache/urlpattern-polyfill-npm-10.0.0-b0285f353c-346819dbe7.zip/node_modules/urlpattern-polyfill/",\ - "packageDependencies": [\ - ["urlpattern-polyfill", "npm:10.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:8.0.2", {\ - "packageLocation": "./.yarn/cache/urlpattern-polyfill-npm-8.0.2-85d93b8946-fd86b5c554.zip/node_modules/urlpattern-polyfill/",\ - "packageDependencies": [\ - ["urlpattern-polyfill", "npm:8.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["use", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/use-npm-3.1.1-7ba643714c-08a130289f.zip/node_modules/use/",\ - "packageDependencies": [\ - ["use", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["use-sync-external-store", [\ - ["npm:1.5.0", {\ - "packageLocation": "./.yarn/cache/use-sync-external-store-npm-1.5.0-556c6970f1-ddae7c4572.zip/node_modules/use-sync-external-store/",\ - "packageDependencies": [\ - ["use-sync-external-store", "npm:1.5.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:1.5.0", {\ - "packageLocation": "./.yarn/__virtual__/use-sync-external-store-virtual-038e642575/0/cache/use-sync-external-store-npm-1.5.0-556c6970f1-ddae7c4572.zip/node_modules/use-sync-external-store/",\ - "packageDependencies": [\ - ["@types/react", "npm:18.0.21"],\ - ["react", "npm:18.2.0"],\ - ["use-sync-external-store", "virtual:b37d6a7108a44616d66970019836d5bd841800f786b943221e624657c20527a13963037595b61bb0c4b5327463ef847d7161e52d0ba219348444c0bfff2290b9#npm:1.5.0"]\ - ],\ - "packagePeers": [\ - "@types/react",\ - "react"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["util-deprecate", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip/node_modules/util-deprecate/",\ - "packageDependencies": [\ - ["util-deprecate", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["utils-merge", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/utils-merge-npm-1.0.1-363bbdfbca-5d6949693d.zip/node_modules/utils-merge/",\ - "packageDependencies": [\ - ["utils-merge", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["uuid", [\ - ["npm:8.3.2", {\ - "packageLocation": "./.yarn/cache/uuid-npm-8.3.2-eca0baba53-9a5f7aa1d6.zip/node_modules/uuid/",\ - "packageDependencies": [\ - ["uuid", "npm:8.3.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:9.0.0", {\ - "packageLocation": "./.yarn/cache/uuid-npm-9.0.0-46c41e3e43-23857699a6.zip/node_modules/uuid/",\ - "packageDependencies": [\ - ["uuid", "npm:9.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["v8-to-istanbul", [\ - ["npm:9.0.1", {\ - "packageLocation": "./.yarn/cache/v8-to-istanbul-npm-9.0.1-58bbce7857-0bbaffbb34.zip/node_modules/v8-to-istanbul/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.15"],\ - ["@types/istanbul-lib-coverage", "npm:2.0.4"],\ - ["convert-source-map", "npm:1.8.0"],\ - ["v8-to-istanbul", "npm:9.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["value-or-function", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/value-or-function-npm-4.0.0-9a1a0ba54a-16b6aed84b.zip/node_modules/value-or-function/",\ - "packageDependencies": [\ - ["value-or-function", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["value-or-promise", [\ - ["npm:1.0.11", {\ - "packageLocation": "./.yarn/cache/value-or-promise-npm-1.0.11-924f226d8c-9bd1cf82be.zip/node_modules/value-or-promise/",\ - "packageDependencies": [\ - ["value-or-promise", "npm:1.0.11"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:1.0.12", {\ - "packageLocation": "./.yarn/cache/value-or-promise-npm-1.0.12-4f73820639-a4cc31fc9c.zip/node_modules/value-or-promise/",\ - "packageDependencies": [\ - ["value-or-promise", "npm:1.0.12"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["vary", [\ - ["npm:1.1.2", {\ - "packageLocation": "./.yarn/cache/vary-npm-1.1.2-b49f70ae63-31389debef.zip/node_modules/vary/",\ - "packageDependencies": [\ - ["vary", "npm:1.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["victory-vendor", [\ - ["npm:36.6.8", {\ - "packageLocation": "./.yarn/cache/victory-vendor-npm-36.6.8-918f3cd0b4-d418be8a77.zip/node_modules/victory-vendor/",\ - "packageDependencies": [\ - ["@types/d3-array", "npm:3.0.4"],\ - ["@types/d3-ease", "npm:3.0.0"],\ - ["@types/d3-interpolate", "npm:3.0.1"],\ - ["@types/d3-scale", "npm:4.0.3"],\ - ["@types/d3-shape", "npm:3.1.1"],\ - ["@types/d3-time", "npm:3.0.0"],\ - ["@types/d3-timer", "npm:3.0.0"],\ - ["d3-array", "npm:3.2.2"],\ - ["d3-ease", "npm:3.0.1"],\ - ["d3-interpolate", "npm:3.0.1"],\ - ["d3-scale", "npm:4.0.2"],\ - ["d3-shape", "npm:3.2.0"],\ - ["d3-time", "npm:3.1.0"],\ - ["d3-timer", "npm:3.0.1"],\ - ["victory-vendor", "npm:36.6.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["vinyl", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/vinyl-npm-3.0.0-161745591d-3371947a92.zip/node_modules/vinyl/",\ - "packageDependencies": [\ - ["clone", "npm:2.1.2"],\ - ["clone-stats", "npm:1.0.0"],\ - ["remove-trailing-separator", "npm:1.1.0"],\ - ["replace-ext", "npm:2.0.0"],\ - ["teex", "npm:1.0.1"],\ - ["vinyl", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["vinyl-contents", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/vinyl-contents-npm-2.0.0-c1651782e2-10d72a032e.zip/node_modules/vinyl-contents/",\ - "packageDependencies": [\ - ["bl", "npm:5.1.0"],\ - ["vinyl", "npm:3.0.0"],\ - ["vinyl-contents", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["vinyl-fs", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/vinyl-fs-npm-4.0.0-884a797fc9-22ae47c018.zip/node_modules/vinyl-fs/",\ - "packageDependencies": [\ - ["fs-mkdirp-stream", "npm:2.0.1"],\ - ["glob-stream", "npm:8.0.2"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["iconv-lite", "npm:0.6.3"],\ - ["is-valid-glob", "npm:1.0.0"],\ - ["lead", "npm:4.0.0"],\ - ["normalize-path", "npm:3.0.0"],\ - ["resolve-options", "npm:2.0.0"],\ - ["stream-composer", "npm:1.0.2"],\ - ["streamx", "npm:2.20.1"],\ - ["to-through", "npm:3.0.0"],\ - ["value-or-function", "npm:4.0.0"],\ - ["vinyl", "npm:3.0.0"],\ - ["vinyl-fs", "npm:4.0.0"],\ - ["vinyl-sourcemap", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["vinyl-sourcemap", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/vinyl-sourcemap-npm-2.0.0-55b5d6df8b-f23fc251a3.zip/node_modules/vinyl-sourcemap/",\ - "packageDependencies": [\ - ["convert-source-map", "npm:2.0.0"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["now-and-later", "npm:3.0.0"],\ - ["streamx", "npm:2.13.2"],\ - ["vinyl", "npm:3.0.0"],\ - ["vinyl-contents", "npm:2.0.0"],\ - ["vinyl-sourcemap", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["void-elements", [\ - ["npm:3.1.0", {\ - "packageLocation": "./.yarn/cache/void-elements-npm-3.1.0-4f43780839-0390f81810.zip/node_modules/void-elements/",\ - "packageDependencies": [\ - ["void-elements", "npm:3.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["w3c-hr-time", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/w3c-hr-time-npm-1.0.2-87f88e51d9-03851d90c2.zip/node_modules/w3c-hr-time/",\ - "packageDependencies": [\ - ["browser-process-hrtime", "npm:1.0.0"],\ - ["w3c-hr-time", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["w3c-xmlserializer", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/w3c-xmlserializer-npm-3.0.0-3419fc8f05-b4d73e20be.zip/node_modules/w3c-xmlserializer/",\ - "packageDependencies": [\ - ["w3c-xmlserializer", "npm:3.0.0"],\ - ["xml-name-validator", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["walk-sync", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/walk-sync-npm-2.2.0-f0851387f9-e579b574f7.zip/node_modules/walk-sync/",\ - "packageDependencies": [\ - ["@types/minimatch", "npm:3.0.5"],\ - ["ensure-posix-path", "npm:1.1.1"],\ - ["matcher-collection", "npm:2.0.1"],\ - ["minimatch", "npm:3.1.2"],\ - ["walk-sync", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["walker", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/walker-npm-1.0.8-b0a05b9478-ad7a257ea1.zip/node_modules/walker/",\ - "packageDependencies": [\ - ["makeerror", "npm:1.0.12"],\ - ["walker", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["watchpack", [\ - ["npm:2.4.2", {\ - "packageLocation": "./.yarn/cache/watchpack-npm-2.4.2-3e587d5d5b-6bd4c051d9.zip/node_modules/watchpack/",\ - "packageDependencies": [\ - ["glob-to-regexp", "npm:0.4.1"],\ - ["graceful-fs", "npm:4.2.10"],\ - ["watchpack", "npm:2.4.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["wcwidth", [\ - ["npm:1.0.1", {\ - "packageLocation": "./.yarn/cache/wcwidth-npm-1.0.1-05fa596453-182ebac8ca.zip/node_modules/wcwidth/",\ - "packageDependencies": [\ - ["defaults", "npm:1.0.3"],\ - ["wcwidth", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["web-streams-polyfill", [\ - ["npm:3.2.1", {\ - "packageLocation": "./.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-08fcf97b78.zip/node_modules/web-streams-polyfill/",\ - "packageDependencies": [\ - ["web-streams-polyfill", "npm:3.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["webcrypto-core", [\ - ["npm:1.7.5", {\ - "packageLocation": "./.yarn/cache/webcrypto-core-npm-1.7.5-4734fab0f3-f322c6ec49.zip/node_modules/webcrypto-core/",\ - "packageDependencies": [\ - ["@peculiar/asn1-schema", "npm:2.3.0"],\ - ["@peculiar/json-schema", "npm:1.1.12"],\ - ["asn1js", "npm:3.0.5"],\ - ["pvtsutils", "npm:1.3.2"],\ - ["tslib", "npm:2.4.0"],\ - ["webcrypto-core", "npm:1.7.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["webidl-conversions", [\ - ["npm:3.0.1", {\ - "packageLocation": "./.yarn/cache/webidl-conversions-npm-3.0.1-60310f6a2b-b65b9f8d68.zip/node_modules/webidl-conversions/",\ - "packageDependencies": [\ - ["webidl-conversions", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/webidl-conversions-npm-4.0.2-1d159e6409-594187c36f.zip/node_modules/webidl-conversions/",\ - "packageDependencies": [\ - ["webidl-conversions", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/webidl-conversions-npm-7.0.0-e8c8e30c68-4c4f65472c.zip/node_modules/webidl-conversions/",\ - "packageDependencies": [\ - ["webidl-conversions", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["webpack", [\ - ["npm:5.96.1", {\ - "packageLocation": "./.yarn/cache/webpack-npm-5.96.1-1a1f8d3a52-d3419ffd19.zip/node_modules/webpack/",\ - "packageDependencies": [\ - ["webpack", "npm:5.96.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.96.1", {\ - "packageLocation": "./.yarn/__virtual__/webpack-virtual-f49bd9af87/0/cache/webpack-npm-5.96.1-1a1f8d3a52-d3419ffd19.zip/node_modules/webpack/",\ - "packageDependencies": [\ - ["@types/eslint-scope", "npm:3.7.7"],\ - ["@types/estree", "npm:1.0.6"],\ - ["@types/webpack-cli", null],\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-edit", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"],\ - ["acorn", "npm:8.14.0"],\ - ["browserslist", "npm:4.24.2"],\ - ["chrome-trace-event", "npm:1.0.4"],\ - ["enhanced-resolve", "npm:5.17.1"],\ - ["es-module-lexer", "npm:1.5.4"],\ - ["eslint-scope", "npm:5.1.1"],\ - ["events", "npm:3.3.0"],\ - ["glob-to-regexp", "npm:0.4.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["json-parse-even-better-errors", "npm:2.3.1"],\ - ["loader-runner", "npm:4.3.0"],\ - ["mime-types", "npm:2.1.35"],\ - ["neo-async", "npm:2.6.2"],\ - ["schema-utils", "npm:3.3.0"],\ - ["tapable", "npm:2.2.1"],\ - ["terser-webpack-plugin", "virtual:f49bd9af870e99495322302f1fc8ac0816fcd73126d66af0ecade4303e494fda315711d42c839942c6b37c39782618335e7034b652b3e4e01c0c88f78fa8e70c#npm:5.3.10"],\ - ["watchpack", "npm:2.4.2"],\ - ["webpack", "virtual:9909ff5388c6b6a3a46f12eb37c0afb449fcd1eedb9f02d871bde711a076c929583f48ecc4b85fa6d71478b076104a25f83dee45bc69687a22f551c576d7595d#npm:5.96.1"],\ - ["webpack-cli", null],\ - ["webpack-sources", "npm:3.2.3"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["webpack-bundle-analyzer", [\ - ["npm:4.10.1", {\ - "packageLocation": "./.yarn/cache/webpack-bundle-analyzer-npm-4.10.1-57768ac46c-bc7bc2c014.zip/node_modules/webpack-bundle-analyzer/",\ - "packageDependencies": [\ - ["@discoveryjs/json-ext", "npm:0.5.7"],\ - ["acorn", "npm:8.8.0"],\ - ["acorn-walk", "npm:8.2.0"],\ - ["commander", "npm:7.2.0"],\ - ["debounce", "npm:1.2.1"],\ - ["escape-string-regexp", "npm:4.0.0"],\ - ["gzip-size", "npm:6.0.0"],\ - ["html-escaper", "npm:2.0.2"],\ - ["is-plain-object", "npm:5.0.0"],\ - ["opener", "npm:1.5.2"],\ - ["picocolors", "npm:1.0.0"],\ - ["sirv", "npm:2.0.4"],\ - ["webpack-bundle-analyzer", "npm:4.10.1"],\ - ["ws", "virtual:0e1b6f54c4ba7af1db03b0f86ddabee1c9895a3b4e1d649afc286f1b33eb779f42bb521f89b6e3d289cf994f8f7964f7651193780da3e26e90d57d1713176d75#npm:7.5.9"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["webpack-sources", [\ - ["npm:1.4.3", {\ - "packageLocation": "./.yarn/cache/webpack-sources-npm-1.4.3-2b3a9b1de0-6237c5d1ba.zip/node_modules/webpack-sources/",\ - "packageDependencies": [\ - ["source-list-map", "npm:2.0.1"],\ - ["source-map", "npm:0.6.1"],\ - ["webpack-sources", "npm:1.4.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.2.3", {\ - "packageLocation": "./.yarn/cache/webpack-sources-npm-3.2.3-6bfb5d9563-a661f41795.zip/node_modules/webpack-sources/",\ - "packageDependencies": [\ - ["webpack-sources", "npm:3.2.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["whatwg-encoding", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/whatwg-encoding-npm-2.0.0-d7451f51b4-162d712d88.zip/node_modules/whatwg-encoding/",\ - "packageDependencies": [\ - ["iconv-lite", "npm:0.6.3"],\ - ["whatwg-encoding", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/whatwg-encoding-npm-3.1.1-7dfe21cf7d-bbef815eb6.zip/node_modules/whatwg-encoding/",\ - "packageDependencies": [\ - ["iconv-lite", "npm:0.6.3"],\ - ["whatwg-encoding", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["whatwg-fetch", [\ - ["npm:3.6.2", {\ - "packageLocation": "./.yarn/cache/whatwg-fetch-npm-3.6.2-4bdf324792-f05ceff9e9.zip/node_modules/whatwg-fetch/",\ - "packageDependencies": [\ - ["whatwg-fetch", "npm:3.6.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["whatwg-mimetype", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/whatwg-mimetype-npm-3.0.0-5b617710c1-96f9f628c6.zip/node_modules/whatwg-mimetype/",\ - "packageDependencies": [\ - ["whatwg-mimetype", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/whatwg-mimetype-npm-4.0.0-ebb293a688-894a618e2d.zip/node_modules/whatwg-mimetype/",\ - "packageDependencies": [\ - ["whatwg-mimetype", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["whatwg-url", [\ - ["npm:11.0.0", {\ - "packageLocation": "./.yarn/cache/whatwg-url-npm-11.0.0-073529d93a-dfcd51c6f4.zip/node_modules/whatwg-url/",\ - "packageDependencies": [\ - ["tr46", "npm:3.0.0"],\ - ["webidl-conversions", "npm:7.0.0"],\ - ["whatwg-url", "npm:11.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/whatwg-url-npm-5.0.0-374fb45e60-f95adbc1e8.zip/node_modules/whatwg-url/",\ - "packageDependencies": [\ - ["tr46", "npm:0.0.3"],\ - ["webidl-conversions", "npm:3.0.1"],\ - ["whatwg-url", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.1.0", {\ - "packageLocation": "./.yarn/cache/whatwg-url-npm-7.1.0-d6cae01571-769fd35838.zip/node_modules/whatwg-url/",\ - "packageDependencies": [\ - ["lodash.sortby", "npm:4.7.0"],\ - ["tr46", "npm:1.0.1"],\ - ["webidl-conversions", "npm:4.0.2"],\ - ["whatwg-url", "npm:7.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["which", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/which-npm-2.0.2-320ddf72f7-4782f8a1d6.zip/node_modules/which/",\ - "packageDependencies": [\ - ["isexe", "npm:2.0.0"],\ - ["which", "npm:2.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["which-boxed-primitive", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/which-boxed-primitive-npm-1.0.2-e214f9ae5a-9c7ca78552.zip/node_modules/which-boxed-primitive/",\ - "packageDependencies": [\ - ["is-bigint", "npm:1.0.4"],\ - ["is-boolean-object", "npm:1.1.2"],\ - ["is-number-object", "npm:1.0.7"],\ - ["is-string", "npm:1.0.7"],\ - ["is-symbol", "npm:1.0.4"],\ - ["which-boxed-primitive", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["which-module", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/which-module-npm-2.0.0-daf3daa08d-e3e46c9c84.zip/node_modules/which-module/",\ - "packageDependencies": [\ - ["which-module", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["wide-align", [\ - ["npm:1.1.5", {\ - "packageLocation": "./.yarn/cache/wide-align-npm-1.1.5-889d77e592-d5f8027b9a.zip/node_modules/wide-align/",\ - "packageDependencies": [\ - ["string-width", "npm:4.2.3"],\ - ["wide-align", "npm:1.1.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["word-wrap", [\ - ["npm:1.2.5", {\ - "packageLocation": "./.yarn/cache/word-wrap-npm-1.2.5-42d00c4b09-1ec6f6089f.zip/node_modules/word-wrap/",\ - "packageDependencies": [\ - ["word-wrap", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-background-sync", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-background-sync-npm-6.5.4-13a7f8219a-05f6752b68.zip/node_modules/workbox-background-sync/",\ - "packageDependencies": [\ - ["idb", "npm:7.0.2"],\ - ["workbox-background-sync", "npm:6.5.4"],\ - ["workbox-core", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-broadcast-update", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-broadcast-update-npm-6.5.4-37b0700ca4-9e277a2cad.zip/node_modules/workbox-broadcast-update/",\ - "packageDependencies": [\ - ["workbox-broadcast-update", "npm:6.5.4"],\ - ["workbox-core", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-build", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-build-npm-6.5.4-71d02fae43-147373efa3.zip/node_modules/workbox-build/",\ - "packageDependencies": [\ - ["@apideck/better-ajv-errors", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:0.3.6"],\ - ["@babel/core", "npm:7.18.10"],\ - ["@babel/preset-env", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:7.18.10"],\ - ["@babel/runtime", "npm:7.28.2"],\ - ["@rollup/plugin-babel", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:5.3.1"],\ - ["@rollup/plugin-node-resolve", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:11.2.1"],\ - ["@rollup/plugin-replace", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:2.4.2"],\ - ["@surma/rollup-plugin-off-main-thread", "npm:2.2.3"],\ - ["ajv", "npm:8.11.0"],\ - ["common-tags", "npm:1.8.2"],\ - ["fast-json-stable-stringify", "npm:2.1.0"],\ - ["fs-extra", "npm:9.1.0"],\ - ["glob", "npm:7.2.3"],\ - ["lodash", "npm:4.17.21"],\ - ["pretty-bytes", "npm:5.6.0"],\ - ["rollup", "npm:2.79.2"],\ - ["rollup-plugin-terser", "virtual:71d02fae4313ca57011174350e5f9afe80b5719d521a2394c895ef4a460132f7bf8d3a9572e911d3fde0ce0f76d6192b54631e87893e1f2c030e5ffc82d8df40#npm:7.0.2"],\ - ["source-map", "npm:0.8.0-beta.0"],\ - ["stringify-object", "npm:3.3.0"],\ - ["strip-comments", "npm:2.0.1"],\ - ["tempy", "npm:0.6.0"],\ - ["upath", "npm:1.2.0"],\ - ["workbox-background-sync", "npm:6.5.4"],\ - ["workbox-broadcast-update", "npm:6.5.4"],\ - ["workbox-build", "npm:6.5.4"],\ - ["workbox-cacheable-response", "npm:6.5.4"],\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-expiration", "npm:6.5.4"],\ - ["workbox-google-analytics", "npm:6.5.4"],\ - ["workbox-navigation-preload", "npm:6.5.4"],\ - ["workbox-precaching", "npm:6.5.4"],\ - ["workbox-range-requests", "npm:6.5.4"],\ - ["workbox-recipes", "npm:6.5.4"],\ - ["workbox-routing", "npm:6.5.4"],\ - ["workbox-strategies", "npm:6.5.4"],\ - ["workbox-streams", "npm:6.5.4"],\ - ["workbox-sw", "npm:6.5.4"],\ - ["workbox-window", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-cacheable-response", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-cacheable-response-npm-6.5.4-5661dd1793-ea31b456e0.zip/node_modules/workbox-cacheable-response/",\ - "packageDependencies": [\ - ["workbox-cacheable-response", "npm:6.5.4"],\ - ["workbox-core", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-core", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-core-npm-6.5.4-a956387c31-d0c215bc7e.zip/node_modules/workbox-core/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-expiration", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-expiration-npm-6.5.4-081a8d4613-9bf3d97258.zip/node_modules/workbox-expiration/",\ - "packageDependencies": [\ - ["idb", "npm:7.0.2"],\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-expiration", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-google-analytics", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-google-analytics-npm-6.5.4-bf443f64b1-7c3a063002.zip/node_modules/workbox-google-analytics/",\ - "packageDependencies": [\ - ["workbox-background-sync", "npm:6.5.4"],\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-google-analytics", "npm:6.5.4"],\ - ["workbox-routing", "npm:6.5.4"],\ - ["workbox-strategies", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-navigation-preload", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-navigation-preload-npm-6.5.4-f9b6686723-77ed748595.zip/node_modules/workbox-navigation-preload/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-navigation-preload", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-precaching", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-precaching-npm-6.5.4-69d8a56e94-754d86d32c.zip/node_modules/workbox-precaching/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-precaching", "npm:6.5.4"],\ - ["workbox-routing", "npm:6.5.4"],\ - ["workbox-strategies", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-range-requests", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-range-requests-npm-6.5.4-81869b9d72-d977e9effc.zip/node_modules/workbox-range-requests/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-range-requests", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-recipes", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-recipes-npm-6.5.4-03aa78ea0b-a90a20db7e.zip/node_modules/workbox-recipes/",\ - "packageDependencies": [\ - ["workbox-cacheable-response", "npm:6.5.4"],\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-expiration", "npm:6.5.4"],\ - ["workbox-precaching", "npm:6.5.4"],\ - ["workbox-recipes", "npm:6.5.4"],\ - ["workbox-routing", "npm:6.5.4"],\ - ["workbox-strategies", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-routing", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-routing-npm-6.5.4-7e767a784d-c8e109444e.zip/node_modules/workbox-routing/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-routing", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-strategies", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-strategies-npm-6.5.4-8bc6258bfc-af9a3838cc.zip/node_modules/workbox-strategies/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-strategies", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-streams", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-streams-npm-6.5.4-17a6050105-eefb25356a.zip/node_modules/workbox-streams/",\ - "packageDependencies": [\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-routing", "npm:6.5.4"],\ - ["workbox-streams", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-sw", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-sw-npm-6.5.4-307d7c4499-26eb62885a.zip/node_modules/workbox-sw/",\ - "packageDependencies": [\ - ["workbox-sw", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-webpack-plugin", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-webpack-plugin-npm-6.5.4-3842d0960f-12e2990df0.zip/node_modules/workbox-webpack-plugin/",\ - "packageDependencies": [\ - ["workbox-webpack-plugin", "npm:6.5.4"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:6.5.4", {\ - "packageLocation": "./.yarn/__virtual__/workbox-webpack-plugin-virtual-25d4c92daf/0/cache/workbox-webpack-plugin-npm-6.5.4-3842d0960f-12e2990df0.zip/node_modules/workbox-webpack-plugin/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["fast-json-stable-stringify", "npm:2.1.0"],\ - ["pretty-bytes", "npm:5.6.0"],\ - ["upath", "npm:1.2.0"],\ - ["webpack", null],\ - ["webpack-sources", "npm:1.4.3"],\ - ["workbox-build", "npm:6.5.4"],\ - ["workbox-webpack-plugin", "virtual:6e92337c31b9ae318d106991e59d1ee85fe6be11d6cdc3f333ae820f82901384c1d0878384ccd322cd3e557c94ee57c84361cc0a7089299ce3c9a4e760c91c80#npm:6.5.4"]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["workbox-window", [\ - ["npm:6.5.4", {\ - "packageLocation": "./.yarn/cache/workbox-window-npm-6.5.4-20240f4b44-9bdad6730a.zip/node_modules/workbox-window/",\ - "packageDependencies": [\ - ["@types/trusted-types", "npm:2.0.2"],\ - ["workbox-core", "npm:6.5.4"],\ - ["workbox-window", "npm:6.5.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["wrap-ansi", [\ - ["npm:6.2.0", {\ - "packageLocation": "./.yarn/cache/wrap-ansi-npm-6.2.0-439a7246d8-0d64f2d438.zip/node_modules/wrap-ansi/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wrap-ansi", "npm:6.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-cebdaeca3a.zip/node_modules/wrap-ansi/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:4.3.0"],\ - ["string-width", "npm:4.2.3"],\ - ["strip-ansi", "npm:6.0.1"],\ - ["wrap-ansi", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["wrappy", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip/node_modules/wrappy/",\ - "packageDependencies": [\ - ["wrappy", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["write-file-atomic", [\ - ["npm:3.0.3", {\ - "packageLocation": "./.yarn/cache/write-file-atomic-npm-3.0.3-d948a237da-0955ab9430.zip/node_modules/write-file-atomic/",\ - "packageDependencies": [\ - ["imurmurhash", "npm:0.1.4"],\ - ["is-typedarray", "npm:1.0.0"],\ - ["signal-exit", "npm:3.0.7"],\ - ["typedarray-to-buffer", "npm:3.1.5"],\ - ["write-file-atomic", "npm:3.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-3be1f5508a.zip/node_modules/write-file-atomic/",\ - "packageDependencies": [\ - ["imurmurhash", "npm:0.1.4"],\ - ["signal-exit", "npm:3.0.7"],\ - ["write-file-atomic", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["ws", [\ - ["npm:7.5.9", {\ - "packageLocation": "./.yarn/cache/ws-npm-7.5.9-26f12a5ed6-171e350129.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "npm:7.5.9"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.16.0", {\ - "packageLocation": "./.yarn/cache/ws-npm-8.16.0-46943f6199-7c511c59e9.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "npm:8.16.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.18.1", {\ - "packageLocation": "./.yarn/cache/ws-npm-8.18.1-369b0f5491-3f38e9594f.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "npm:8.18.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["npm:8.8.1", {\ - "packageLocation": "./.yarn/cache/ws-npm-8.8.1-955e8c9f58-65e33447e8.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["ws", "npm:8.8.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:0e1b6f54c4ba7af1db03b0f86ddabee1c9895a3b4e1d649afc286f1b33eb779f42bb521f89b6e3d289cf994f8f7964f7651193780da3e26e90d57d1713176d75#npm:7.5.9", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-3c53cf5ca7/0/cache/ws-npm-7.5.9-26f12a5ed6-171e350129.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["@types/bufferutil", null],\ - ["@types/utf-8-validate", null],\ - ["bufferutil", null],\ - ["utf-8-validate", null],\ - ["ws", "virtual:0e1b6f54c4ba7af1db03b0f86ddabee1c9895a3b4e1d649afc286f1b33eb779f42bb521f89b6e3d289cf994f8f7964f7651193780da3e26e90d57d1713176d75#npm:7.5.9"]\ - ],\ - "packagePeers": [\ - "@types/bufferutil",\ - "@types/utf-8-validate",\ - "bufferutil",\ - "utf-8-validate"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:8.18.1", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-66647514af/0/cache/ws-npm-8.18.1-369b0f5491-3f38e9594f.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["@types/bufferutil", null],\ - ["@types/utf-8-validate", null],\ - ["bufferutil", null],\ - ["utf-8-validate", null],\ - ["ws", "virtual:5eaf660359743d644f14a3ce91783d61c15c56def6b885ec9a2164c61e42d340507660ea7b70b641f662c0187957f38436e9527a6e714c99b4df9d68a9f30dac#npm:8.18.1"]\ - ],\ - "packagePeers": [\ - "@types/bufferutil",\ - "@types/utf-8-validate",\ - "bufferutil",\ - "utf-8-validate"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:fc6ac33a6893977b60166bd106029ee0b93aa1fa6ac57ba8c924b32784b74652f37c4758d3940256461ebc43311fef481b8a167ffe3b7174f64d77f5161e884c#npm:8.8.1", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-0c9688b0c5/0/cache/ws-npm-8.8.1-955e8c9f58-65e33447e8.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["@types/bufferutil", null],\ - ["@types/utf-8-validate", null],\ - ["bufferutil", null],\ - ["utf-8-validate", null],\ - ["ws", "virtual:fc6ac33a6893977b60166bd106029ee0b93aa1fa6ac57ba8c924b32784b74652f37c4758d3940256461ebc43311fef481b8a167ffe3b7174f64d77f5161e884c#npm:8.8.1"]\ - ],\ - "packagePeers": [\ - "@types/bufferutil",\ - "@types/utf-8-validate",\ - "bufferutil",\ - "utf-8-validate"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-10ce771354/0/cache/ws-npm-8.16.0-46943f6199-7c511c59e9.zip/node_modules/ws/",\ - "packageDependencies": [\ - ["@types/bufferutil", null],\ - ["@types/utf-8-validate", null],\ - ["bufferutil", null],\ - ["utf-8-validate", null],\ - ["ws", "virtual:fe767cff6463d50f6e2018ae5c5dadaea7ac10721890135cf68a5571d51e9c1487c93ea7609ae4cab673ae443841628cba10f23fb8b2a315d73a711aebb3037e#npm:8.16.0"]\ - ],\ - "packagePeers": [\ - "@types/bufferutil",\ - "@types/utf-8-validate",\ - "bufferutil",\ - "utf-8-validate"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["xdg-basedir", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/xdg-basedir-npm-4.0.0-ed08d380e2-0073d5b59a.zip/node_modules/xdg-basedir/",\ - "packageDependencies": [\ - ["xdg-basedir", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["xml-name-validator", [\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/xml-name-validator-npm-4.0.0-0857c21729-f9582a3f28.zip/node_modules/xml-name-validator/",\ - "packageDependencies": [\ - ["xml-name-validator", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["xmlchars", [\ - ["npm:2.2.0", {\ - "packageLocation": "./.yarn/cache/xmlchars-npm-2.2.0-8b78f0f5e4-4ad5924974.zip/node_modules/xmlchars/",\ - "packageDependencies": [\ - ["xmlchars", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["xtend", [\ - ["npm:4.0.2", {\ - "packageLocation": "./.yarn/cache/xtend-npm-4.0.2-7f2375736e-ac5dfa738b.zip/node_modules/xtend/",\ - "packageDependencies": [\ - ["xtend", "npm:4.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["y18n", [\ - ["npm:4.0.3", {\ - "packageLocation": "./.yarn/cache/y18n-npm-4.0.3-ced95acdbc-392870b2a1.zip/node_modules/y18n/",\ - "packageDependencies": [\ - ["y18n", "npm:4.0.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.8", {\ - "packageLocation": "./.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-5f1b5f95e3.zip/node_modules/y18n/",\ - "packageDependencies": [\ - ["y18n", "npm:5.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yallist", [\ - ["npm:3.1.1", {\ - "packageLocation": "./.yarn/cache/yallist-npm-3.1.1-a568a556b4-9af0a4329c.zip/node_modules/yallist/",\ - "packageDependencies": [\ - ["yallist", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-4cb02b42b8.zip/node_modules/yallist/",\ - "packageDependencies": [\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/yallist-npm-5.0.0-8732dd9f1c-1884d272d4.zip/node_modules/yallist/",\ - "packageDependencies": [\ - ["yallist", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yaml", [\ - ["npm:1.10.2", {\ - "packageLocation": "./.yarn/cache/yaml-npm-1.10.2-0e780aebdf-e088b37b4d.zip/node_modules/yaml/",\ - "packageDependencies": [\ - ["yaml", "npm:1.10.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:2.6.0", {\ - "packageLocation": "./.yarn/cache/yaml-npm-2.6.0-1c0bd2fcf8-f4369f667c.zip/node_modules/yaml/",\ - "packageDependencies": [\ - ["yaml", "npm:2.6.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yaml-ast-parser", [\ - ["npm:0.0.43", {\ - "packageLocation": "./.yarn/cache/yaml-ast-parser-npm-0.0.43-14bb1a83f7-a54d00c8e0.zip/node_modules/yaml-ast-parser/",\ - "packageDependencies": [\ - ["yaml-ast-parser", "npm:0.0.43"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yargs", [\ - ["npm:15.4.1", {\ - "packageLocation": "./.yarn/cache/yargs-npm-15.4.1-ca1c444de1-bbcc822229.zip/node_modules/yargs/",\ - "packageDependencies": [\ - ["cliui", "npm:6.0.0"],\ - ["decamelize", "npm:1.2.0"],\ - ["find-up", "npm:4.1.0"],\ - ["get-caller-file", "npm:2.0.5"],\ - ["require-directory", "npm:2.1.1"],\ - ["require-main-filename", "npm:2.0.0"],\ - ["set-blocking", "npm:2.0.0"],\ - ["string-width", "npm:4.2.3"],\ - ["which-module", "npm:2.0.0"],\ - ["y18n", "npm:4.0.3"],\ - ["yargs", "npm:15.4.1"],\ - ["yargs-parser", "npm:18.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:17.5.1", {\ - "packageLocation": "./.yarn/cache/yargs-npm-17.5.1-0902fa46de-2453d52e34.zip/node_modules/yargs/",\ - "packageDependencies": [\ - ["cliui", "npm:7.0.4"],\ - ["escalade", "npm:3.1.1"],\ - ["get-caller-file", "npm:2.0.5"],\ - ["require-directory", "npm:2.1.1"],\ - ["string-width", "npm:4.2.3"],\ - ["y18n", "npm:5.0.8"],\ - ["yargs", "npm:17.5.1"],\ - ["yargs-parser", "npm:21.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:17.7.2", {\ - "packageLocation": "./.yarn/cache/yargs-npm-17.7.2-80b62638e1-abb3e37678.zip/node_modules/yargs/",\ - "packageDependencies": [\ - ["cliui", "npm:8.0.1"],\ - ["escalade", "npm:3.1.1"],\ - ["get-caller-file", "npm:2.0.5"],\ - ["require-directory", "npm:2.1.1"],\ - ["string-width", "npm:4.2.3"],\ - ["y18n", "npm:5.0.8"],\ - ["yargs", "npm:17.7.2"],\ - ["yargs-parser", "npm:21.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yargs-parser", [\ - ["npm:13.1.2", {\ - "packageLocation": "./.yarn/cache/yargs-parser-npm-13.1.2-546b639909-89a84fbb32.zip/node_modules/yargs-parser/",\ - "packageDependencies": [\ - ["camelcase", "npm:5.3.1"],\ - ["decamelize", "npm:1.2.0"],\ - ["yargs-parser", "npm:13.1.2"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:18.1.3", {\ - "packageLocation": "./.yarn/cache/yargs-parser-npm-18.1.3-0ba9c4f088-235bcbad5b.zip/node_modules/yargs-parser/",\ - "packageDependencies": [\ - ["camelcase", "npm:5.3.1"],\ - ["decamelize", "npm:1.2.0"],\ - ["yargs-parser", "npm:18.1.3"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:21.1.1", {\ - "packageLocation": "./.yarn/cache/yargs-parser-npm-21.1.1-8fdc003314-9dc2c217ea.zip/node_modules/yargs-parser/",\ - "packageDependencies": [\ - ["yargs-parser", "npm:21.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yauzl", [\ - ["npm:2.10.0", {\ - "packageLocation": "./.yarn/cache/yauzl-npm-2.10.0-72e70ea021-1e4c311050.zip/node_modules/yauzl/",\ - "packageDependencies": [\ - ["buffer-crc32", "npm:0.2.13"],\ - ["fd-slicer", "npm:1.1.0"],\ - ["yauzl", "npm:2.10.0"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.2.0", {\ - "packageLocation": "./.yarn/cache/yauzl-npm-3.2.0-22e6762265-a3cd2bfcf7.zip/node_modules/yauzl/",\ - "packageDependencies": [\ - ["buffer-crc32", "npm:0.2.13"],\ - ["pend", "npm:1.2.0"],\ - ["yauzl", "npm:3.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yocto-queue", [\ - ["npm:0.1.0", {\ - "packageLocation": "./.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip/node_modules/yocto-queue/",\ - "packageDependencies": [\ - ["yocto-queue", "npm:0.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["yup", [\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/yup-npm-1.4.0-599c24806a-3d1277e5e1.zip/node_modules/yup/",\ - "packageDependencies": [\ - ["property-expr", "npm:2.0.6"],\ - ["tiny-case", "npm:1.0.3"],\ - ["toposort", "npm:2.0.2"],\ - ["type-fest", "npm:2.19.0"],\ - ["yup", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["zen-observable", [\ - ["npm:0.8.15", {\ - "packageLocation": "./.yarn/cache/zen-observable-npm-0.8.15-3bec99c19c-30eac3f405.zip/node_modules/zen-observable/",\ - "packageDependencies": [\ - ["zen-observable", "npm:0.8.15"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["zen-observable-ts", [\ - ["npm:1.2.5", {\ - "packageLocation": "./.yarn/cache/zen-observable-ts-npm-1.2.5-4ddaa0e233-2384cf92a6.zip/node_modules/zen-observable-ts/",\ - "packageDependencies": [\ - ["zen-observable", "npm:0.8.15"],\ - ["zen-observable-ts", "npm:1.2.5"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["zod", [\ - ["npm:3.22.4", {\ - "packageLocation": "./.yarn/cache/zod-npm-3.22.4-2bccbc41b4-73622ca36a.zip/node_modules/zod/",\ - "packageDependencies": [\ - ["zod", "npm:3.22.4"]\ - ],\ - "linkType": "HARD"\ - }],\ - ["npm:3.24.2", {\ - "packageLocation": "./.yarn/cache/zod-npm-3.24.2-ab80dc0969-604c62a8cf.zip/node_modules/zod/",\ - "packageDependencies": [\ - ["zod", "npm:3.24.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]]\ - ]\ -}'; - -function $$SETUP_STATE(hydrateRuntimeState, basePath) { - return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); -} - -const fs = require('fs'); -const path = require('path'); -const crypto = require('crypto'); -const os = require('os'); -const events = require('events'); -const nodeUtils = require('util'); -const stream = require('stream'); -const zlib = require('zlib'); -const require$$0 = require('module'); -const StringDecoder = require('string_decoder'); -const url = require('url'); -const buffer = require('buffer'); -const readline = require('readline'); -const assert = require('assert'); - -const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; - -function _interopNamespace(e) { - if (e && e.__esModule) return e; - const n = Object.create(null); - if (e) { - for (const k in e) { - if (k !== 'default') { - const d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - n.default = e; - return Object.freeze(n); -} - -const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); -const path__default = /*#__PURE__*/_interopDefaultLegacy(path); -const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils); -const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); -const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); -const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder); -const buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer); -const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); - -const S_IFMT = 61440; -const S_IFDIR = 16384; -const S_IFREG = 32768; -const S_IFLNK = 40960; -const SAFE_TIME = 456789e3; - -function makeError$1(code, message) { - return Object.assign(new Error(`${code}: ${message}`), { code }); -} -function EBUSY(message) { - return makeError$1(`EBUSY`, message); -} -function ENOSYS(message, reason) { - return makeError$1(`ENOSYS`, `${message}, ${reason}`); -} -function EINVAL(reason) { - return makeError$1(`EINVAL`, `invalid argument, ${reason}`); -} -function EBADF(reason) { - return makeError$1(`EBADF`, `bad file descriptor, ${reason}`); -} -function ENOENT(reason) { - return makeError$1(`ENOENT`, `no such file or directory, ${reason}`); -} -function ENOTDIR(reason) { - return makeError$1(`ENOTDIR`, `not a directory, ${reason}`); -} -function EISDIR(reason) { - return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`); -} -function EEXIST(reason) { - return makeError$1(`EEXIST`, `file already exists, ${reason}`); -} -function EROFS(reason) { - return makeError$1(`EROFS`, `read-only filesystem, ${reason}`); -} -function ENOTEMPTY(reason) { - return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`); -} -function EOPNOTSUPP(reason) { - return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`); -} -function ERR_DIR_CLOSED() { - return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`); -} - -const DEFAULT_MODE = S_IFREG | 420; -class StatEntry { - uid = 0; - gid = 0; - size = 0; - blksize = 0; - atimeMs = 0; - mtimeMs = 0; - ctimeMs = 0; - birthtimeMs = 0; - atime = /* @__PURE__ */ new Date(0); - mtime = /* @__PURE__ */ new Date(0); - ctime = /* @__PURE__ */ new Date(0); - birthtime = /* @__PURE__ */ new Date(0); - dev = 0; - ino = 0; - mode = DEFAULT_MODE; - nlink = 1; - rdev = 0; - blocks = 1; - isBlockDevice() { - return false; - } - isCharacterDevice() { - return false; - } - isDirectory() { - return (this.mode & S_IFMT) === S_IFDIR; - } - isFIFO() { - return false; - } - isFile() { - return (this.mode & S_IFMT) === S_IFREG; - } - isSocket() { - return false; - } - isSymbolicLink() { - return (this.mode & S_IFMT) === S_IFLNK; - } -} -class BigIntStatsEntry { - uid = BigInt(0); - gid = BigInt(0); - size = BigInt(0); - blksize = BigInt(0); - atimeMs = BigInt(0); - mtimeMs = BigInt(0); - ctimeMs = BigInt(0); - birthtimeMs = BigInt(0); - atimeNs = BigInt(0); - mtimeNs = BigInt(0); - ctimeNs = BigInt(0); - birthtimeNs = BigInt(0); - atime = /* @__PURE__ */ new Date(0); - mtime = /* @__PURE__ */ new Date(0); - ctime = /* @__PURE__ */ new Date(0); - birthtime = /* @__PURE__ */ new Date(0); - dev = BigInt(0); - ino = BigInt(0); - mode = BigInt(DEFAULT_MODE); - nlink = BigInt(1); - rdev = BigInt(0); - blocks = BigInt(1); - isBlockDevice() { - return false; - } - isCharacterDevice() { - return false; - } - isDirectory() { - return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR); - } - isFIFO() { - return false; - } - isFile() { - return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG); - } - isSocket() { - return false; - } - isSymbolicLink() { - return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK); - } -} -function makeDefaultStats() { - return new StatEntry(); -} -function clearStats(stats) { - for (const key in stats) { - if (Object.hasOwn(stats, key)) { - const element = stats[key]; - if (typeof element === `number`) { - stats[key] = 0; - } else if (typeof element === `bigint`) { - stats[key] = BigInt(0); - } else if (nodeUtils__namespace.types.isDate(element)) { - stats[key] = /* @__PURE__ */ new Date(0); - } - } - } - return stats; -} -function convertToBigIntStats(stats) { - const bigintStats = new BigIntStatsEntry(); - for (const key in stats) { - if (Object.hasOwn(stats, key)) { - const element = stats[key]; - if (typeof element === `number`) { - bigintStats[key] = BigInt(Math.floor(element)); - } else if (nodeUtils__namespace.types.isDate(element)) { - bigintStats[key] = new Date(element); - } - } - } - bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6) + BigInt(Math.floor(stats.atimeMs % 1 * 1e3)) * BigInt(1e3); - bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6) + BigInt(Math.floor(stats.mtimeMs % 1 * 1e3)) * BigInt(1e3); - bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6) + BigInt(Math.floor(stats.ctimeMs % 1 * 1e3)) * BigInt(1e3); - bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6) + BigInt(Math.floor(stats.birthtimeMs % 1 * 1e3)) * BigInt(1e3); - return bigintStats; -} -function areStatsEqual(a, b) { - if (a.atimeMs !== b.atimeMs) - return false; - if (a.birthtimeMs !== b.birthtimeMs) - return false; - if (a.blksize !== b.blksize) - return false; - if (a.blocks !== b.blocks) - return false; - if (a.ctimeMs !== b.ctimeMs) - return false; - if (a.dev !== b.dev) - return false; - if (a.gid !== b.gid) - return false; - if (a.ino !== b.ino) - return false; - if (a.isBlockDevice() !== b.isBlockDevice()) - return false; - if (a.isCharacterDevice() !== b.isCharacterDevice()) - return false; - if (a.isDirectory() !== b.isDirectory()) - return false; - if (a.isFIFO() !== b.isFIFO()) - return false; - if (a.isFile() !== b.isFile()) - return false; - if (a.isSocket() !== b.isSocket()) - return false; - if (a.isSymbolicLink() !== b.isSymbolicLink()) - return false; - if (a.mode !== b.mode) - return false; - if (a.mtimeMs !== b.mtimeMs) - return false; - if (a.nlink !== b.nlink) - return false; - if (a.rdev !== b.rdev) - return false; - if (a.size !== b.size) - return false; - if (a.uid !== b.uid) - return false; - const aN = a; - const bN = b; - if (aN.atimeNs !== bN.atimeNs) - return false; - if (aN.mtimeNs !== bN.mtimeNs) - return false; - if (aN.ctimeNs !== bN.ctimeNs) - return false; - if (aN.birthtimeNs !== bN.birthtimeNs) - return false; - return true; -} - -const PortablePath = { - root: `/`, - dot: `.`, - parent: `..` -}; -const Filename = { - home: `~`, - nodeModules: `node_modules`, - manifest: `package.json`, - lockfile: `yarn.lock`, - virtual: `__virtual__`, - /** - * @deprecated - */ - pnpJs: `.pnp.js`, - pnpCjs: `.pnp.cjs`, - pnpData: `.pnp.data.json`, - pnpEsmLoader: `.pnp.loader.mjs`, - rc: `.yarnrc.yml`, - env: `.env` -}; -const npath = Object.create(path__default.default); -const ppath = Object.create(path__default.default.posix); -npath.cwd = () => process.cwd(); -ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; -if (process.platform === `win32`) { - ppath.resolve = (...segments) => { - if (segments.length > 0 && ppath.isAbsolute(segments[0])) { - return path__default.default.posix.resolve(...segments); - } else { - return path__default.default.posix.resolve(ppath.cwd(), ...segments); - } - }; -} -const contains = function(pathUtils, from, to) { - from = pathUtils.normalize(from); - to = pathUtils.normalize(to); - if (from === to) - return `.`; - if (!from.endsWith(pathUtils.sep)) - from = from + pathUtils.sep; - if (to.startsWith(from)) { - return to.slice(from.length); - } else { - return null; - } -}; -npath.contains = (from, to) => contains(npath, from, to); -ppath.contains = (from, to) => contains(ppath, from, to); -const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; -const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; -const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; -const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; -function fromPortablePathWin32(p) { - let portablePathMatch, uncPortablePathMatch; - if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) - p = portablePathMatch[1]; - else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) - p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; - else - return p; - return p.replace(/\//g, `\\`); -} -function toPortablePathWin32(p) { - p = p.replace(/\\/g, `/`); - let windowsPathMatch, uncWindowsPathMatch; - if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) - p = `/${windowsPathMatch[1]}`; - else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) - p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; - return p; -} -const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; -const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; -npath.fromPortablePath = fromPortablePath; -npath.toPortablePath = toPortablePath; -function convertPath(targetPathUtils, sourcePath) { - return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); -} - -const defaultTime = new Date(SAFE_TIME * 1e3); -const defaultTimeMs = defaultTime.getTime(); -async function copyPromise(destinationFs, destination, sourceFs, source, opts) { - const normalizedDestination = destinationFs.pathUtils.normalize(destination); - const normalizedSource = sourceFs.pathUtils.normalize(source); - const prelayout = []; - const postlayout = []; - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); - await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); - await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); - for (const operation of prelayout) - await operation(); - await Promise.all(postlayout.map((operation) => { - return operation(); - })); -} -async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { - const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; - const sourceStat = await sourceFs.lstatPromise(source); - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; - let updated; - switch (true) { - case sourceStat.isDirectory(): - { - updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isFile(): - { - updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isSymbolicLink(): - { - updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - default: { - throw new Error(`Unsupported file type (${sourceStat.mode})`); - } - } - if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { - if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { - postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); - updated = true; - } - if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { - postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); - updated = true; - } - } - return updated; -} -async function maybeLStat(baseFs, p) { - try { - return await baseFs.lstatPromise(p); - } catch { - return null; - } -} -async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null && !destinationStat.isDirectory()) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - let updated = false; - if (destinationStat === null) { - prelayout.push(async () => { - try { - await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); - } catch (err) { - if (err.code !== `EEXIST`) { - throw err; - } - } - }); - updated = true; - } - const entries = await sourceFs.readdirPromise(source); - const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; - if (opts.stableSort) { - for (const entry of entries.sort()) { - if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { - updated = true; - } - } - } else { - const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { - await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); - })); - if (entriesUpdateStatus.some((status) => status)) { - updated = true; - } - } - return updated; -} -async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { - const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); - const defaultMode = 420; - const sourceMode = sourceStat.mode & 511; - const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; - const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); - let AtomicBehavior; - ((AtomicBehavior2) => { - AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; - AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; - })(AtomicBehavior || (AtomicBehavior = {})); - let atomicBehavior = 1 /* Rename */; - let indexStat = await maybeLStat(destinationFs, indexPath); - if (destinationStat) { - const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; - const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; - if (isDestinationHardlinkedFromIndex) { - if (isIndexModified && linkStrategy.autoRepair) { - atomicBehavior = 0 /* Lock */; - indexStat = null; - } - } - if (!isDestinationHardlinkedFromIndex) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - } - const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; - let tempPathCleaned = false; - prelayout.push(async () => { - if (!indexStat) { - if (atomicBehavior === 0 /* Lock */) { - await destinationFs.lockPromise(indexPath, async () => { - const content = await sourceFs.readFilePromise(source); - await destinationFs.writeFilePromise(indexPath, content); - }); - } - if (atomicBehavior === 1 /* Rename */ && tempPath) { - const content = await sourceFs.readFilePromise(source); - await destinationFs.writeFilePromise(tempPath, content); - try { - await destinationFs.linkPromise(tempPath, indexPath); - } catch (err) { - if (err.code === `EEXIST`) { - tempPathCleaned = true; - await destinationFs.unlinkPromise(tempPath); - } else { - throw err; - } - } - } - } - if (!destinationStat) { - await destinationFs.linkPromise(indexPath, destination); - } - }); - postlayout.push(async () => { - if (!indexStat) { - await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); - if (sourceMode !== defaultMode) { - await destinationFs.chmodPromise(indexPath, sourceMode); - } - } - if (tempPath && !tempPathCleaned) { - await destinationFs.unlinkPromise(tempPath); - } - }); - return false; -} -async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - prelayout.push(async () => { - const content = await sourceFs.readFilePromise(source); - await destinationFs.writeFilePromise(destination, content); - }); - return true; -} -async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (opts.linkStrategy?.type === `HardlinkFromIndex`) { - return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); - } else { - return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } -} -async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - prelayout.push(async () => { - await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); - }); - return true; -} - -class CustomDir { - constructor(path, nextDirent, opts = {}) { - this.path = path; - this.nextDirent = nextDirent; - this.opts = opts; - } - closed = false; - throwIfClosed() { - if (this.closed) { - throw ERR_DIR_CLOSED(); - } - } - async *[Symbol.asyncIterator]() { - try { - let dirent; - while ((dirent = await this.read()) !== null) { - yield dirent; - } - } finally { - await this.close(); - } - } - read(cb) { - const dirent = this.readSync(); - if (typeof cb !== `undefined`) - return cb(null, dirent); - return Promise.resolve(dirent); - } - readSync() { - this.throwIfClosed(); - return this.nextDirent(); - } - close(cb) { - this.closeSync(); - if (typeof cb !== `undefined`) - return cb(null); - return Promise.resolve(); - } - closeSync() { - this.throwIfClosed(); - this.opts.onClose?.(); - this.closed = true; - } -} -function opendir(fakeFs, path, entries, opts) { - const nextDirent = () => { - const filename = entries.shift(); - if (typeof filename === `undefined`) - return null; - const entryPath = fakeFs.pathUtils.join(path, filename); - return Object.assign(fakeFs.statSync(entryPath), { - name: filename, - path: void 0 - }); - }; - return new CustomDir(path, nextDirent, opts); -} - -function assertStatus(current, expected) { - if (current !== expected) { - throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`); - } -} -class CustomStatWatcher extends events.EventEmitter { - fakeFs; - path; - bigint; - status = "ready" /* Ready */; - changeListeners = /* @__PURE__ */ new Map(); - lastStats; - startTimeout = null; - static create(fakeFs, path, opts) { - const statWatcher = new CustomStatWatcher(fakeFs, path, opts); - statWatcher.start(); - return statWatcher; - } - constructor(fakeFs, path, { bigint = false } = {}) { - super(); - this.fakeFs = fakeFs; - this.path = path; - this.bigint = bigint; - this.lastStats = this.stat(); - } - start() { - assertStatus(this.status, "ready" /* Ready */); - this.status = "running" /* Running */; - this.startTimeout = setTimeout(() => { - this.startTimeout = null; - if (!this.fakeFs.existsSync(this.path)) { - this.emit("change" /* Change */, this.lastStats, this.lastStats); - } - }, 3); - } - stop() { - assertStatus(this.status, "running" /* Running */); - this.status = "stopped" /* Stopped */; - if (this.startTimeout !== null) { - clearTimeout(this.startTimeout); - this.startTimeout = null; - } - this.emit("stop" /* Stop */); - } - stat() { - try { - return this.fakeFs.statSync(this.path, { bigint: this.bigint }); - } catch { - const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry(); - return clearStats(statInstance); - } - } - /** - * Creates an interval whose callback compares the current stats with the previous stats and notifies all listeners in case of changes. - * - * @param opts.persistent Decides whether the interval should be immediately unref-ed. - */ - makeInterval(opts) { - const interval = setInterval(() => { - const currentStats = this.stat(); - const previousStats = this.lastStats; - if (areStatsEqual(currentStats, previousStats)) - return; - this.lastStats = currentStats; - this.emit("change" /* Change */, currentStats, previousStats); - }, opts.interval); - return opts.persistent ? interval : interval.unref(); - } - /** - * Registers a listener and assigns it an interval. - */ - registerChangeListener(listener, opts) { - this.addListener("change" /* Change */, listener); - this.changeListeners.set(listener, this.makeInterval(opts)); - } - /** - * Unregisters the listener and clears the assigned interval. - */ - unregisterChangeListener(listener) { - this.removeListener("change" /* Change */, listener); - const interval = this.changeListeners.get(listener); - if (typeof interval !== `undefined`) - clearInterval(interval); - this.changeListeners.delete(listener); - } - /** - * Unregisters all listeners and clears all assigned intervals. - */ - unregisterAllChangeListeners() { - for (const listener of this.changeListeners.keys()) { - this.unregisterChangeListener(listener); - } - } - hasChangeListeners() { - return this.changeListeners.size > 0; - } - /** - * Refs all stored intervals. - */ - ref() { - for (const interval of this.changeListeners.values()) - interval.ref(); - return this; - } - /** - * Unrefs all stored intervals. - */ - unref() { - for (const interval of this.changeListeners.values()) - interval.unref(); - return this; - } -} - -const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap(); -function watchFile(fakeFs, path, a, b) { - let bigint; - let persistent; - let interval; - let listener; - switch (typeof a) { - case `function`: - { - bigint = false; - persistent = true; - interval = 5007; - listener = a; - } - break; - default: - { - ({ - bigint = false, - persistent = true, - interval = 5007 - } = a); - listener = b; - } - break; - } - let statWatchers = statWatchersByFakeFS.get(fakeFs); - if (typeof statWatchers === `undefined`) - statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map()); - let statWatcher = statWatchers.get(path); - if (typeof statWatcher === `undefined`) { - statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }); - statWatchers.set(path, statWatcher); - } - statWatcher.registerChangeListener(listener, { persistent, interval }); - return statWatcher; -} -function unwatchFile(fakeFs, path, cb) { - const statWatchers = statWatchersByFakeFS.get(fakeFs); - if (typeof statWatchers === `undefined`) - return; - const statWatcher = statWatchers.get(path); - if (typeof statWatcher === `undefined`) - return; - if (typeof cb === `undefined`) - statWatcher.unregisterAllChangeListeners(); - else - statWatcher.unregisterChangeListener(cb); - if (!statWatcher.hasChangeListeners()) { - statWatcher.stop(); - statWatchers.delete(path); - } -} -function unwatchAllFiles(fakeFs) { - const statWatchers = statWatchersByFakeFS.get(fakeFs); - if (typeof statWatchers === `undefined`) - return; - for (const path of statWatchers.keys()) { - unwatchFile(fakeFs, path); - } -} - -class FakeFS { - pathUtils; - constructor(pathUtils) { - this.pathUtils = pathUtils; - } - async *genTraversePromise(init, { stableSort = false } = {}) { - const stack = [init]; - while (stack.length > 0) { - const p = stack.shift(); - const entry = await this.lstatPromise(p); - if (entry.isDirectory()) { - const entries = await this.readdirPromise(p); - if (stableSort) { - for (const entry2 of entries.sort()) { - stack.push(this.pathUtils.join(p, entry2)); - } - } else { - throw new Error(`Not supported`); - } - } else { - yield p; - } - } - } - async checksumFilePromise(path, { algorithm = `sha512` } = {}) { - const fd = await this.openPromise(path, `r`); - try { - const CHUNK_SIZE = 65536; - const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); - const hash = crypto.createHash(algorithm); - let bytesRead = 0; - while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) - hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); - return hash.digest(`hex`); - } finally { - await this.closePromise(fd); - } - } - async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { - let stat; - try { - stat = await this.lstatPromise(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) { - const entries = await this.readdirPromise(p); - await Promise.all(entries.map((entry) => { - return this.removePromise(this.pathUtils.resolve(p, entry)); - })); - } - for (let t = 0; t <= maxRetries; t++) { - try { - await this.rmdirPromise(p); - break; - } catch (error) { - if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { - throw error; - } else if (t < maxRetries) { - await new Promise((resolve) => setTimeout(resolve, t * 100)); - } - } - } - } else { - await this.unlinkPromise(p); - } - } - removeSync(p, { recursive = true } = {}) { - let stat; - try { - stat = this.lstatSync(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) - for (const entry of this.readdirSync(p)) - this.removeSync(this.pathUtils.resolve(p, entry)); - this.rmdirSync(p); - } else { - this.unlinkSync(p); - } - } - async mkdirpPromise(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - await this.mkdirPromise(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory ??= subPath; - if (chmod != null) - await this.chmodPromise(subPath, chmod); - if (utimes != null) { - await this.utimesPromise(subPath, utimes[0], utimes[1]); - } else { - const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); - await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - mkdirpSync(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - this.mkdirSync(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory ??= subPath; - if (chmod != null) - this.chmodSync(subPath, chmod); - if (utimes != null) { - this.utimesSync(subPath, utimes[0], utimes[1]); - } else { - const parentStat = this.statSync(this.pathUtils.dirname(subPath)); - this.utimesSync(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { - return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); - } - copySync(destination, source, { baseFs = this, overwrite = true } = {}) { - const stat = baseFs.lstatSync(source); - const exists = this.existsSync(destination); - if (stat.isDirectory()) { - this.mkdirpSync(destination); - const directoryListing = baseFs.readdirSync(source); - for (const entry of directoryListing) { - this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); - } - } else if (stat.isFile()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const content = baseFs.readFileSync(source); - this.writeFileSync(destination, content); - } - } else if (stat.isSymbolicLink()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const target = baseFs.readlinkSync(source); - this.symlinkSync(convertPath(this.pathUtils, target), destination); - } - } else { - throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); - } - const mode = stat.mode & 511; - this.chmodSync(destination, mode); - } - async changeFilePromise(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferPromise(p, content, opts); - } else { - return this.changeFileTextPromise(p, content, opts); - } - } - async changeFileBufferPromise(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = await this.readFilePromise(p); - } catch { - } - if (Buffer.compare(current, content) === 0) - return; - await this.writeFilePromise(p, content, { mode }); - } - async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { - let current = ``; - try { - current = await this.readFilePromise(p, `utf8`); - } catch { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - await this.writeFilePromise(p, normalizedContent, { mode }); - } - changeFileSync(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferSync(p, content, opts); - } else { - return this.changeFileTextSync(p, content, opts); - } - } - changeFileBufferSync(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = this.readFileSync(p); - } catch { - } - if (Buffer.compare(current, content) === 0) - return; - this.writeFileSync(p, content, { mode }); - } - changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { - let current = ``; - try { - current = this.readFileSync(p, `utf8`); - } catch { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - this.writeFileSync(p, normalizedContent, { mode }); - } - async movePromise(fromP, toP) { - try { - await this.renamePromise(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - await this.copyPromise(toP, fromP); - await this.removePromise(fromP); - } else { - throw error; - } - } - } - moveSync(fromP, toP) { - try { - this.renameSync(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - this.copySync(toP, fromP); - this.removeSync(fromP); - } else { - throw error; - } - } - } - async lockPromise(affectedPath, callback) { - const lockPath = `${affectedPath}.flock`; - const interval = 1e3 / 60; - const startTime = Date.now(); - let fd = null; - const isAlive = async () => { - let pid; - try { - [pid] = await this.readJsonPromise(lockPath); - } catch { - return Date.now() - startTime < 500; - } - try { - process.kill(pid, 0); - return true; - } catch { - return false; - } - }; - while (fd === null) { - try { - fd = await this.openPromise(lockPath, `wx`); - } catch (error) { - if (error.code === `EEXIST`) { - if (!await isAlive()) { - try { - await this.unlinkPromise(lockPath); - continue; - } catch { - } - } - if (Date.now() - startTime < 60 * 1e3) { - await new Promise((resolve) => setTimeout(resolve, interval)); - } else { - throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); - } - } else { - throw error; - } - } - } - await this.writePromise(fd, JSON.stringify([process.pid])); - try { - return await callback(); - } finally { - try { - await this.closePromise(fd); - await this.unlinkPromise(lockPath); - } catch { - } - } - } - async readJsonPromise(p) { - const content = await this.readFilePromise(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - readJsonSync(p) { - const content = this.readFileSync(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - async writeJsonPromise(p, data, { compact = false } = {}) { - const space = compact ? 0 : 2; - return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} -`); - } - writeJsonSync(p, data, { compact = false } = {}) { - const space = compact ? 0 : 2; - return this.writeFileSync(p, `${JSON.stringify(data, null, space)} -`); - } - async preserveTimePromise(p, cb) { - const stat = await this.lstatPromise(p); - const result = await cb(); - if (typeof result !== `undefined`) - p = result; - await this.lutimesPromise(p, stat.atime, stat.mtime); - } - async preserveTimeSync(p, cb) { - const stat = this.lstatSync(p); - const result = cb(); - if (typeof result !== `undefined`) - p = result; - this.lutimesSync(p, stat.atime, stat.mtime); - } -} -class BasePortableFakeFS extends FakeFS { - constructor() { - super(ppath); - } -} -function getEndOfLine(content) { - const matches = content.match(/\r?\n/g); - if (matches === null) - return os.EOL; - const crlf = matches.filter((nl) => nl === `\r -`).length; - const lf = matches.length - crlf; - return crlf > lf ? `\r -` : ` -`; -} -function normalizeLineEndings(originalContent, newContent) { - return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); -} - -class ProxiedFS extends FakeFS { - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - resolve(path) { - return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); - } - getRealPath() { - return this.mapFromBase(this.baseFs.getRealPath()); - } - async openPromise(p, flags, mode) { - return this.baseFs.openPromise(this.mapToBase(p), flags, mode); - } - openSync(p, flags, mode) { - return this.baseFs.openSync(this.mapToBase(p), flags, mode); - } - async opendirPromise(p, opts) { - return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); - } - opendirSync(p, opts) { - return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); - } - async readPromise(fd, buffer, offset, length, position) { - return await this.baseFs.readPromise(fd, buffer, offset, length, position); - } - readSync(fd, buffer, offset, length, position) { - return this.baseFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return await this.baseFs.writePromise(fd, buffer, offset); - } else { - return await this.baseFs.writePromise(fd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.baseFs.writeSync(fd, buffer, offset); - } else { - return this.baseFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - return this.baseFs.closePromise(fd); - } - closeSync(fd) { - this.baseFs.closeSync(fd); - } - createReadStream(p, opts) { - return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); - } - createWriteStream(p, opts) { - return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); - } - async realpathPromise(p) { - return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); - } - realpathSync(p) { - return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); - } - async existsPromise(p) { - return this.baseFs.existsPromise(this.mapToBase(p)); - } - existsSync(p) { - return this.baseFs.existsSync(this.mapToBase(p)); - } - accessSync(p, mode) { - return this.baseFs.accessSync(this.mapToBase(p), mode); - } - async accessPromise(p, mode) { - return this.baseFs.accessPromise(this.mapToBase(p), mode); - } - async statPromise(p, opts) { - return this.baseFs.statPromise(this.mapToBase(p), opts); - } - statSync(p, opts) { - return this.baseFs.statSync(this.mapToBase(p), opts); - } - async fstatPromise(fd, opts) { - return this.baseFs.fstatPromise(fd, opts); - } - fstatSync(fd, opts) { - return this.baseFs.fstatSync(fd, opts); - } - lstatPromise(p, opts) { - return this.baseFs.lstatPromise(this.mapToBase(p), opts); - } - lstatSync(p, opts) { - return this.baseFs.lstatSync(this.mapToBase(p), opts); - } - async fchmodPromise(fd, mask) { - return this.baseFs.fchmodPromise(fd, mask); - } - fchmodSync(fd, mask) { - return this.baseFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return this.baseFs.chmodPromise(this.mapToBase(p), mask); - } - chmodSync(p, mask) { - return this.baseFs.chmodSync(this.mapToBase(p), mask); - } - async fchownPromise(fd, uid, gid) { - return this.baseFs.fchownPromise(fd, uid, gid); - } - fchownSync(fd, uid, gid) { - return this.baseFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); - } - chownSync(p, uid, gid) { - return this.baseFs.chownSync(this.mapToBase(p), uid, gid); - } - async renamePromise(oldP, newP) { - return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); - } - renameSync(oldP, newP) { - return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - async appendFilePromise(p, content, opts) { - return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); - } - appendFileSync(p, content, opts) { - return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); - } - async writeFilePromise(p, content, opts) { - return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); - } - writeFileSync(p, content, opts) { - return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); - } - async unlinkPromise(p) { - return this.baseFs.unlinkPromise(this.mapToBase(p)); - } - unlinkSync(p) { - return this.baseFs.unlinkSync(this.mapToBase(p)); - } - async utimesPromise(p, atime, mtime) { - return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); - } - utimesSync(p, atime, mtime) { - return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); - } - async lutimesPromise(p, atime, mtime) { - return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); - } - lutimesSync(p, atime, mtime) { - return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return this.baseFs.mkdirPromise(this.mapToBase(p), opts); - } - mkdirSync(p, opts) { - return this.baseFs.mkdirSync(this.mapToBase(p), opts); - } - async rmdirPromise(p, opts) { - return this.baseFs.rmdirPromise(this.mapToBase(p), opts); - } - rmdirSync(p, opts) { - return this.baseFs.rmdirSync(this.mapToBase(p), opts); - } - async rmPromise(p, opts) { - return this.baseFs.rmPromise(this.mapToBase(p), opts); - } - rmSync(p, opts) { - return this.baseFs.rmSync(this.mapToBase(p), opts); - } - async linkPromise(existingP, newP) { - return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); - } - linkSync(existingP, newP) { - return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); - } - async symlinkPromise(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); - } - symlinkSync(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkSync(mappedTarget, mappedP, type); - } - async readFilePromise(p, encoding) { - return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); - } - readFileSync(p, encoding) { - return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); - } - readdirPromise(p, opts) { - return this.baseFs.readdirPromise(this.mapToBase(p), opts); - } - readdirSync(p, opts) { - return this.baseFs.readdirSync(this.mapToBase(p), opts); - } - async readlinkPromise(p) { - return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); - } - readlinkSync(p) { - return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); - } - async truncatePromise(p, len) { - return this.baseFs.truncatePromise(this.mapToBase(p), len); - } - truncateSync(p, len) { - return this.baseFs.truncateSync(this.mapToBase(p), len); - } - async ftruncatePromise(fd, len) { - return this.baseFs.ftruncatePromise(fd, len); - } - ftruncateSync(fd, len) { - return this.baseFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.baseFs.watch( - this.mapToBase(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - watchFile(p, a, b) { - return this.baseFs.watchFile( - this.mapToBase(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - unwatchFile(p, cb) { - return this.baseFs.unwatchFile(this.mapToBase(p), cb); - } - fsMapToBase(p) { - if (typeof p === `number`) { - return p; - } else { - return this.mapToBase(p); - } - } -} - -function direntToPortable(dirent) { - const portableDirent = dirent; - if (typeof dirent.path === `string`) - portableDirent.path = npath.toPortablePath(dirent.path); - return portableDirent; -} -class NodeFS extends BasePortableFakeFS { - realFs; - constructor(realFs = fs__default.default) { - super(); - this.realFs = realFs; - } - getExtractHint() { - return false; - } - getRealPath() { - return PortablePath.root; - } - resolve(p) { - return ppath.resolve(p); - } - async openPromise(p, flags, mode) { - return await new Promise((resolve, reject) => { - this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); - }); - } - openSync(p, flags, mode) { - return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); - } - async opendirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (typeof opts !== `undefined`) { - this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }).then((dir) => { - const dirWithFixedPath = dir; - Object.defineProperty(dirWithFixedPath, `path`, { - value: p, - configurable: true, - writable: true - }); - return dirWithFixedPath; - }); - } - opendirSync(p, opts) { - const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); - const dirWithFixedPath = dir; - Object.defineProperty(dirWithFixedPath, `path`, { - value: p, - configurable: true, - writable: true - }); - return dirWithFixedPath; - } - async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { - return await new Promise((resolve, reject) => { - this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { - if (error) { - reject(error); - } else { - resolve(bytesRead); - } - }); - }); - } - readSync(fd, buffer, offset, length, position) { - return this.realFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - return await new Promise((resolve, reject) => { - if (typeof buffer === `string`) { - return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); - } else { - return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); - } - }); - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.realFs.writeSync(fd, buffer, offset); - } else { - return this.realFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - await new Promise((resolve, reject) => { - this.realFs.close(fd, this.makeCallback(resolve, reject)); - }); - } - closeSync(fd) { - this.realFs.closeSync(fd); - } - createReadStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createReadStream(realPath, opts); - } - createWriteStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createWriteStream(realPath, opts); - } - async realpathPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - realpathSync(p) { - return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); - } - async existsPromise(p) { - return await new Promise((resolve) => { - this.realFs.exists(npath.fromPortablePath(p), resolve); - }); - } - accessSync(p, mode) { - return this.realFs.accessSync(npath.fromPortablePath(p), mode); - } - async accessPromise(p, mode) { - return await new Promise((resolve, reject) => { - this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); - }); - } - existsSync(p) { - return this.realFs.existsSync(npath.fromPortablePath(p)); - } - async statPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - statSync(p, opts) { - if (opts) { - return this.realFs.statSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.statSync(npath.fromPortablePath(p)); - } - } - async fstatPromise(fd, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.fstat(fd, this.makeCallback(resolve, reject)); - } - }); - } - fstatSync(fd, opts) { - if (opts) { - return this.realFs.fstatSync(fd, opts); - } else { - return this.realFs.fstatSync(fd); - } - } - async lstatPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - lstatSync(p, opts) { - if (opts) { - return this.realFs.lstatSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.lstatSync(npath.fromPortablePath(p)); - } - } - async fchmodPromise(fd, mask) { - return await new Promise((resolve, reject) => { - this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); - }); - } - fchmodSync(fd, mask) { - return this.realFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return await new Promise((resolve, reject) => { - this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); - }); - } - chmodSync(p, mask) { - return this.realFs.chmodSync(npath.fromPortablePath(p), mask); - } - async fchownPromise(fd, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); - }); - } - fchownSync(fd, uid, gid) { - return this.realFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); - }); - } - chownSync(p, uid, gid) { - return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); - } - async renamePromise(oldP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - renameSync(oldP, newP) { - return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return await new Promise((resolve, reject) => { - this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); - }); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); - } - async appendFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - appendFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFileSync(fsNativePath, content, opts); - } else { - this.realFs.appendFileSync(fsNativePath, content); - } - } - async writeFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - writeFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFileSync(fsNativePath, content, opts); - } else { - this.realFs.writeFileSync(fsNativePath, content); - } - } - async unlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }); - } - unlinkSync(p) { - return this.realFs.unlinkSync(npath.fromPortablePath(p)); - } - async utimesPromise(p, atime, mtime) { - return await new Promise((resolve, reject) => { - this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - utimesSync(p, atime, mtime) { - this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); - } - async lutimesPromise(p, atime, mtime) { - return await new Promise((resolve, reject) => { - this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - lutimesSync(p, atime, mtime) { - this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - }); - } - mkdirSync(p, opts) { - return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); - } - async rmdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - rmdirSync(p, opts) { - return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); - } - async rmPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - rmSync(p, opts) { - return this.realFs.rmSync(npath.fromPortablePath(p), opts); - } - async linkPromise(existingP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - linkSync(existingP, newP) { - return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); - } - async symlinkPromise(target, p, type) { - return await new Promise((resolve, reject) => { - this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); - }); - } - symlinkSync(target, p, type) { - return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); - } - async readFilePromise(p, encoding) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); - }); - } - readFileSync(p, encoding) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - return this.realFs.readFileSync(fsNativePath, encoding); - } - async readdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - if (opts.recursive && process.platform === `win32`) { - if (opts.withFileTypes) { - this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); - } else { - this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); - } - } else { - this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } - } else { - this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - readdirSync(p, opts) { - if (opts) { - if (opts.recursive && process.platform === `win32`) { - if (opts.withFileTypes) { - return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); - } - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p), opts); - } - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p)); - } - } - async readlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - readlinkSync(p) { - return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); - } - async truncatePromise(p, len) { - return await new Promise((resolve, reject) => { - this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); - }); - } - truncateSync(p, len) { - return this.realFs.truncateSync(npath.fromPortablePath(p), len); - } - async ftruncatePromise(fd, len) { - return await new Promise((resolve, reject) => { - this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); - }); - } - ftruncateSync(fd, len) { - return this.realFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.realFs.watch( - npath.fromPortablePath(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - watchFile(p, a, b) { - return this.realFs.watchFile( - npath.fromPortablePath(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - unwatchFile(p, cb) { - return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); - } - makeCallback(resolve, reject) { - return (err, result) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }; - } -} - -const MOUNT_MASK = 4278190080; -class MountFS extends BasePortableFakeFS { - baseFs; - mountInstances; - fdMap = /* @__PURE__ */ new Map(); - nextFd = 3; - factoryPromise; - factorySync; - filter; - getMountPoint; - magic; - maxAge; - maxOpenFiles; - typeCheck; - isMount = /* @__PURE__ */ new Set(); - notMount = /* @__PURE__ */ new Set(); - realPaths = /* @__PURE__ */ new Map(); - constructor({ baseFs = new NodeFS(), filter = null, magicByte = 42, maxOpenFiles = Infinity, useCache = true, maxAge = 5e3, typeCheck = fs.constants.S_IFREG, getMountPoint, factoryPromise, factorySync }) { - if (Math.floor(magicByte) !== magicByte || !(magicByte > 1 && magicByte <= 127)) - throw new Error(`The magic byte must be set to a round value between 1 and 127 included`); - super(); - this.baseFs = baseFs; - this.mountInstances = useCache ? /* @__PURE__ */ new Map() : null; - this.factoryPromise = factoryPromise; - this.factorySync = factorySync; - this.filter = filter; - this.getMountPoint = getMountPoint; - this.magic = magicByte << 24; - this.maxAge = maxAge; - this.maxOpenFiles = maxOpenFiles; - this.typeCheck = typeCheck; - } - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - getRealPath() { - return this.baseFs.getRealPath(); - } - saveAndClose() { - unwatchAllFiles(this); - if (this.mountInstances) { - for (const [path, { childFs }] of this.mountInstances.entries()) { - childFs.saveAndClose?.(); - this.mountInstances.delete(path); - } - } - } - discardAndClose() { - unwatchAllFiles(this); - if (this.mountInstances) { - for (const [path, { childFs }] of this.mountInstances.entries()) { - childFs.discardAndClose?.(); - this.mountInstances.delete(path); - } - } - } - resolve(p) { - return this.baseFs.resolve(p); - } - remapFd(mountFs, fd) { - const remappedFd = this.nextFd++ | this.magic; - this.fdMap.set(remappedFd, [mountFs, fd]); - return remappedFd; - } - async openPromise(p, flags, mode) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.openPromise(p, flags, mode); - }, async (mountFs, { subPath }) => { - return this.remapFd(mountFs, await mountFs.openPromise(subPath, flags, mode)); - }); - } - openSync(p, flags, mode) { - return this.makeCallSync(p, () => { - return this.baseFs.openSync(p, flags, mode); - }, (mountFs, { subPath }) => { - return this.remapFd(mountFs, mountFs.openSync(subPath, flags, mode)); - }); - } - async opendirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.opendirPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.opendirPromise(subPath, opts); - }, { - requireSubpath: false - }); - } - opendirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.opendirSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.opendirSync(subPath, opts); - }, { - requireSubpath: false - }); - } - async readPromise(fd, buffer, offset, length, position) { - if ((fd & MOUNT_MASK) !== this.magic) - return await this.baseFs.readPromise(fd, buffer, offset, length, position); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - const [mountFs, realFd] = entry; - return await mountFs.readPromise(realFd, buffer, offset, length, position); - } - readSync(fd, buffer, offset, length, position) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.readSync(fd, buffer, offset, length, position); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`readSync`); - const [mountFs, realFd] = entry; - return mountFs.readSync(realFd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - if ((fd & MOUNT_MASK) !== this.magic) { - if (typeof buffer === `string`) { - return await this.baseFs.writePromise(fd, buffer, offset); - } else { - return await this.baseFs.writePromise(fd, buffer, offset, length, position); - } - } - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`write`); - const [mountFs, realFd] = entry; - if (typeof buffer === `string`) { - return await mountFs.writePromise(realFd, buffer, offset); - } else { - return await mountFs.writePromise(realFd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - if ((fd & MOUNT_MASK) !== this.magic) { - if (typeof buffer === `string`) { - return this.baseFs.writeSync(fd, buffer, offset); - } else { - return this.baseFs.writeSync(fd, buffer, offset, length, position); - } - } - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`writeSync`); - const [mountFs, realFd] = entry; - if (typeof buffer === `string`) { - return mountFs.writeSync(realFd, buffer, offset); - } else { - return mountFs.writeSync(realFd, buffer, offset, length, position); - } - } - async closePromise(fd) { - if ((fd & MOUNT_MASK) !== this.magic) - return await this.baseFs.closePromise(fd); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`close`); - this.fdMap.delete(fd); - const [mountFs, realFd] = entry; - return await mountFs.closePromise(realFd); - } - closeSync(fd) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.closeSync(fd); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`closeSync`); - this.fdMap.delete(fd); - const [mountFs, realFd] = entry; - return mountFs.closeSync(realFd); - } - createReadStream(p, opts) { - if (p === null) - return this.baseFs.createReadStream(p, opts); - return this.makeCallSync(p, () => { - return this.baseFs.createReadStream(p, opts); - }, (mountFs, { archivePath, subPath }) => { - const stream = mountFs.createReadStream(subPath, opts); - stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)); - return stream; - }); - } - createWriteStream(p, opts) { - if (p === null) - return this.baseFs.createWriteStream(p, opts); - return this.makeCallSync(p, () => { - return this.baseFs.createWriteStream(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.createWriteStream(subPath, opts); - }); - } - async realpathPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.realpathPromise(p); - }, async (mountFs, { archivePath, subPath }) => { - let realArchivePath = this.realPaths.get(archivePath); - if (typeof realArchivePath === `undefined`) { - realArchivePath = await this.baseFs.realpathPromise(archivePath); - this.realPaths.set(archivePath, realArchivePath); - } - return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await mountFs.realpathPromise(subPath))); - }); - } - realpathSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.realpathSync(p); - }, (mountFs, { archivePath, subPath }) => { - let realArchivePath = this.realPaths.get(archivePath); - if (typeof realArchivePath === `undefined`) { - realArchivePath = this.baseFs.realpathSync(archivePath); - this.realPaths.set(archivePath, realArchivePath); - } - return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, mountFs.realpathSync(subPath))); - }); - } - async existsPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.existsPromise(p); - }, async (mountFs, { subPath }) => { - return await mountFs.existsPromise(subPath); - }); - } - existsSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.existsSync(p); - }, (mountFs, { subPath }) => { - return mountFs.existsSync(subPath); - }); - } - async accessPromise(p, mode) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.accessPromise(p, mode); - }, async (mountFs, { subPath }) => { - return await mountFs.accessPromise(subPath, mode); - }); - } - accessSync(p, mode) { - return this.makeCallSync(p, () => { - return this.baseFs.accessSync(p, mode); - }, (mountFs, { subPath }) => { - return mountFs.accessSync(subPath, mode); - }); - } - async statPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.statPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.statPromise(subPath, opts); - }); - } - statSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.statSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.statSync(subPath, opts); - }); - } - async fstatPromise(fd, opts) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.fstatPromise(fd, opts); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fstat`); - const [mountFs, realFd] = entry; - return mountFs.fstatPromise(realFd, opts); - } - fstatSync(fd, opts) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.fstatSync(fd, opts); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fstatSync`); - const [mountFs, realFd] = entry; - return mountFs.fstatSync(realFd, opts); - } - async lstatPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.lstatPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.lstatPromise(subPath, opts); - }); - } - lstatSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.lstatSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.lstatSync(subPath, opts); - }); - } - async fchmodPromise(fd, mask) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.fchmodPromise(fd, mask); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchmod`); - const [mountFs, realFd] = entry; - return mountFs.fchmodPromise(realFd, mask); - } - fchmodSync(fd, mask) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.fchmodSync(fd, mask); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchmodSync`); - const [mountFs, realFd] = entry; - return mountFs.fchmodSync(realFd, mask); - } - async chmodPromise(p, mask) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.chmodPromise(p, mask); - }, async (mountFs, { subPath }) => { - return await mountFs.chmodPromise(subPath, mask); - }); - } - chmodSync(p, mask) { - return this.makeCallSync(p, () => { - return this.baseFs.chmodSync(p, mask); - }, (mountFs, { subPath }) => { - return mountFs.chmodSync(subPath, mask); - }); - } - async fchownPromise(fd, uid, gid) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.fchownPromise(fd, uid, gid); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchown`); - const [zipFs, realFd] = entry; - return zipFs.fchownPromise(realFd, uid, gid); - } - fchownSync(fd, uid, gid) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.fchownSync(fd, uid, gid); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fchownSync`); - const [zipFs, realFd] = entry; - return zipFs.fchownSync(realFd, uid, gid); - } - async chownPromise(p, uid, gid) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.chownPromise(p, uid, gid); - }, async (mountFs, { subPath }) => { - return await mountFs.chownPromise(subPath, uid, gid); - }); - } - chownSync(p, uid, gid) { - return this.makeCallSync(p, () => { - return this.baseFs.chownSync(p, uid, gid); - }, (mountFs, { subPath }) => { - return mountFs.chownSync(subPath, uid, gid); - }); - } - async renamePromise(oldP, newP) { - return await this.makeCallPromise(oldP, async () => { - return await this.makeCallPromise(newP, async () => { - return await this.baseFs.renamePromise(oldP, newP); - }, async () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }); - }, async (mountFsO, { subPath: subPathO }) => { - return await this.makeCallPromise(newP, async () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }, async (mountFsN, { subPath: subPathN }) => { - if (mountFsO !== mountFsN) { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - } else { - return await mountFsO.renamePromise(subPathO, subPathN); - } - }); - }); - } - renameSync(oldP, newP) { - return this.makeCallSync(oldP, () => { - return this.makeCallSync(newP, () => { - return this.baseFs.renameSync(oldP, newP); - }, () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }); - }, (mountFsO, { subPath: subPathO }) => { - return this.makeCallSync(newP, () => { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - }, (mountFsN, { subPath: subPathN }) => { - if (mountFsO !== mountFsN) { - throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); - } else { - return mountFsO.renameSync(subPathO, subPathN); - } - }); - }); - } - async copyFilePromise(sourceP, destP, flags = 0) { - const fallback = async (sourceFs, sourceP2, destFs, destP2) => { - if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) - throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); - if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2)) - throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); - let content; - try { - content = await sourceFs.readFilePromise(sourceP2); - } catch { - throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); - } - await destFs.writeFilePromise(destP2, content); - }; - return await this.makeCallPromise(sourceP, async () => { - return await this.makeCallPromise(destP, async () => { - return await this.baseFs.copyFilePromise(sourceP, destP, flags); - }, async (mountFsD, { subPath: subPathD }) => { - return await fallback(this.baseFs, sourceP, mountFsD, subPathD); - }); - }, async (mountFsS, { subPath: subPathS }) => { - return await this.makeCallPromise(destP, async () => { - return await fallback(mountFsS, subPathS, this.baseFs, destP); - }, async (mountFsD, { subPath: subPathD }) => { - if (mountFsS !== mountFsD) { - return await fallback(mountFsS, subPathS, mountFsD, subPathD); - } else { - return await mountFsS.copyFilePromise(subPathS, subPathD, flags); - } - }); - }); - } - copyFileSync(sourceP, destP, flags = 0) { - const fallback = (sourceFs, sourceP2, destFs, destP2) => { - if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) - throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); - if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) - throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); - let content; - try { - content = sourceFs.readFileSync(sourceP2); - } catch { - throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); - } - destFs.writeFileSync(destP2, content); - }; - return this.makeCallSync(sourceP, () => { - return this.makeCallSync(destP, () => { - return this.baseFs.copyFileSync(sourceP, destP, flags); - }, (mountFsD, { subPath: subPathD }) => { - return fallback(this.baseFs, sourceP, mountFsD, subPathD); - }); - }, (mountFsS, { subPath: subPathS }) => { - return this.makeCallSync(destP, () => { - return fallback(mountFsS, subPathS, this.baseFs, destP); - }, (mountFsD, { subPath: subPathD }) => { - if (mountFsS !== mountFsD) { - return fallback(mountFsS, subPathS, mountFsD, subPathD); - } else { - return mountFsS.copyFileSync(subPathS, subPathD, flags); - } - }); - }); - } - async appendFilePromise(p, content, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.appendFilePromise(p, content, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.appendFilePromise(subPath, content, opts); - }); - } - appendFileSync(p, content, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.appendFileSync(p, content, opts); - }, (mountFs, { subPath }) => { - return mountFs.appendFileSync(subPath, content, opts); - }); - } - async writeFilePromise(p, content, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.writeFilePromise(p, content, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.writeFilePromise(subPath, content, opts); - }); - } - writeFileSync(p, content, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.writeFileSync(p, content, opts); - }, (mountFs, { subPath }) => { - return mountFs.writeFileSync(subPath, content, opts); - }); - } - async unlinkPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.unlinkPromise(p); - }, async (mountFs, { subPath }) => { - return await mountFs.unlinkPromise(subPath); - }); - } - unlinkSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.unlinkSync(p); - }, (mountFs, { subPath }) => { - return mountFs.unlinkSync(subPath); - }); - } - async utimesPromise(p, atime, mtime) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.utimesPromise(p, atime, mtime); - }, async (mountFs, { subPath }) => { - return await mountFs.utimesPromise(subPath, atime, mtime); - }); - } - utimesSync(p, atime, mtime) { - return this.makeCallSync(p, () => { - return this.baseFs.utimesSync(p, atime, mtime); - }, (mountFs, { subPath }) => { - return mountFs.utimesSync(subPath, atime, mtime); - }); - } - async lutimesPromise(p, atime, mtime) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.lutimesPromise(p, atime, mtime); - }, async (mountFs, { subPath }) => { - return await mountFs.lutimesPromise(subPath, atime, mtime); - }); - } - lutimesSync(p, atime, mtime) { - return this.makeCallSync(p, () => { - return this.baseFs.lutimesSync(p, atime, mtime); - }, (mountFs, { subPath }) => { - return mountFs.lutimesSync(subPath, atime, mtime); - }); - } - async mkdirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.mkdirPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.mkdirPromise(subPath, opts); - }); - } - mkdirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.mkdirSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.mkdirSync(subPath, opts); - }); - } - async rmdirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.rmdirPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.rmdirPromise(subPath, opts); - }); - } - rmdirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.rmdirSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.rmdirSync(subPath, opts); - }); - } - async rmPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.rmPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.rmPromise(subPath, opts); - }); - } - rmSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.rmSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.rmSync(subPath, opts); - }); - } - async linkPromise(existingP, newP) { - return await this.makeCallPromise(newP, async () => { - return await this.baseFs.linkPromise(existingP, newP); - }, async (mountFs, { subPath }) => { - return await mountFs.linkPromise(existingP, subPath); - }); - } - linkSync(existingP, newP) { - return this.makeCallSync(newP, () => { - return this.baseFs.linkSync(existingP, newP); - }, (mountFs, { subPath }) => { - return mountFs.linkSync(existingP, subPath); - }); - } - async symlinkPromise(target, p, type) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.symlinkPromise(target, p, type); - }, async (mountFs, { subPath }) => { - return await mountFs.symlinkPromise(target, subPath); - }); - } - symlinkSync(target, p, type) { - return this.makeCallSync(p, () => { - return this.baseFs.symlinkSync(target, p, type); - }, (mountFs, { subPath }) => { - return mountFs.symlinkSync(target, subPath); - }); - } - async readFilePromise(p, encoding) { - return this.makeCallPromise(p, async () => { - return await this.baseFs.readFilePromise(p, encoding); - }, async (mountFs, { subPath }) => { - return await mountFs.readFilePromise(subPath, encoding); - }); - } - readFileSync(p, encoding) { - return this.makeCallSync(p, () => { - return this.baseFs.readFileSync(p, encoding); - }, (mountFs, { subPath }) => { - return mountFs.readFileSync(subPath, encoding); - }); - } - async readdirPromise(p, opts) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.readdirPromise(p, opts); - }, async (mountFs, { subPath }) => { - return await mountFs.readdirPromise(subPath, opts); - }, { - requireSubpath: false - }); - } - readdirSync(p, opts) { - return this.makeCallSync(p, () => { - return this.baseFs.readdirSync(p, opts); - }, (mountFs, { subPath }) => { - return mountFs.readdirSync(subPath, opts); - }, { - requireSubpath: false - }); - } - async readlinkPromise(p) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.readlinkPromise(p); - }, async (mountFs, { subPath }) => { - return await mountFs.readlinkPromise(subPath); - }); - } - readlinkSync(p) { - return this.makeCallSync(p, () => { - return this.baseFs.readlinkSync(p); - }, (mountFs, { subPath }) => { - return mountFs.readlinkSync(subPath); - }); - } - async truncatePromise(p, len) { - return await this.makeCallPromise(p, async () => { - return await this.baseFs.truncatePromise(p, len); - }, async (mountFs, { subPath }) => { - return await mountFs.truncatePromise(subPath, len); - }); - } - truncateSync(p, len) { - return this.makeCallSync(p, () => { - return this.baseFs.truncateSync(p, len); - }, (mountFs, { subPath }) => { - return mountFs.truncateSync(subPath, len); - }); - } - async ftruncatePromise(fd, len) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.ftruncatePromise(fd, len); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`ftruncate`); - const [mountFs, realFd] = entry; - return mountFs.ftruncatePromise(realFd, len); - } - ftruncateSync(fd, len) { - if ((fd & MOUNT_MASK) !== this.magic) - return this.baseFs.ftruncateSync(fd, len); - const entry = this.fdMap.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`ftruncateSync`); - const [mountFs, realFd] = entry; - return mountFs.ftruncateSync(realFd, len); - } - watch(p, a, b) { - return this.makeCallSync(p, () => { - return this.baseFs.watch( - p, - // @ts-expect-error - reason TBS - a, - b - ); - }, (mountFs, { subPath }) => { - return mountFs.watch( - subPath, - // @ts-expect-error - reason TBS - a, - b - ); - }); - } - watchFile(p, a, b) { - return this.makeCallSync(p, () => { - return this.baseFs.watchFile( - p, - // @ts-expect-error - reason TBS - a, - b - ); - }, () => { - return watchFile(this, p, a, b); - }); - } - unwatchFile(p, cb) { - return this.makeCallSync(p, () => { - return this.baseFs.unwatchFile(p, cb); - }, () => { - return unwatchFile(this, p, cb); - }); - } - async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { - if (typeof p !== `string`) - return await discard(); - const normalizedP = this.resolve(p); - const mountInfo = this.findMount(normalizedP); - if (!mountInfo) - return await discard(); - if (requireSubpath && mountInfo.subPath === `/`) - return await discard(); - return await this.getMountPromise(mountInfo.archivePath, async (mountFs) => await accept(mountFs, mountInfo)); - } - makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { - if (typeof p !== `string`) - return discard(); - const normalizedP = this.resolve(p); - const mountInfo = this.findMount(normalizedP); - if (!mountInfo) - return discard(); - if (requireSubpath && mountInfo.subPath === `/`) - return discard(); - return this.getMountSync(mountInfo.archivePath, (mountFs) => accept(mountFs, mountInfo)); - } - findMount(p) { - if (this.filter && !this.filter.test(p)) - return null; - let filePath = ``; - while (true) { - const pathPartWithArchive = p.substring(filePath.length); - const mountPoint = this.getMountPoint(pathPartWithArchive, filePath); - if (!mountPoint) - return null; - filePath = this.pathUtils.join(filePath, mountPoint); - if (!this.isMount.has(filePath)) { - if (this.notMount.has(filePath)) - continue; - try { - if (this.typeCheck !== null && (this.baseFs.statSync(filePath).mode & fs.constants.S_IFMT) !== this.typeCheck) { - this.notMount.add(filePath); - continue; - } - } catch { - return null; - } - this.isMount.add(filePath); - } - return { - archivePath: filePath, - subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length)) - }; - } - } - limitOpenFilesTimeout = null; - limitOpenFiles(max) { - if (this.mountInstances === null) - return; - const now = Date.now(); - let nextExpiresAt = now + this.maxAge; - let closeCount = max === null ? 0 : this.mountInstances.size - max; - for (const [path, { childFs, expiresAt, refCount }] of this.mountInstances.entries()) { - if (refCount !== 0 || childFs.hasOpenFileHandles?.()) { - continue; - } else if (now >= expiresAt) { - childFs.saveAndClose?.(); - this.mountInstances.delete(path); - closeCount -= 1; - continue; - } else if (max === null || closeCount <= 0) { - nextExpiresAt = expiresAt; - break; - } - childFs.saveAndClose?.(); - this.mountInstances.delete(path); - closeCount -= 1; - } - if (this.limitOpenFilesTimeout === null && (max === null && this.mountInstances.size > 0 || max !== null) && isFinite(nextExpiresAt)) { - this.limitOpenFilesTimeout = setTimeout(() => { - this.limitOpenFilesTimeout = null; - this.limitOpenFiles(null); - }, nextExpiresAt - now).unref(); - } - } - async getMountPromise(p, accept) { - if (this.mountInstances) { - let cachedMountFs = this.mountInstances.get(p); - if (!cachedMountFs) { - const createFsInstance = await this.factoryPromise(this.baseFs, p); - cachedMountFs = this.mountInstances.get(p); - if (!cachedMountFs) { - cachedMountFs = { - childFs: createFsInstance(), - expiresAt: 0, - refCount: 0 - }; - } - } - this.mountInstances.delete(p); - this.limitOpenFiles(this.maxOpenFiles - 1); - this.mountInstances.set(p, cachedMountFs); - cachedMountFs.expiresAt = Date.now() + this.maxAge; - cachedMountFs.refCount += 1; - try { - return await accept(cachedMountFs.childFs); - } finally { - cachedMountFs.refCount -= 1; - } - } else { - const mountFs = (await this.factoryPromise(this.baseFs, p))(); - try { - return await accept(mountFs); - } finally { - mountFs.saveAndClose?.(); - } - } - } - getMountSync(p, accept) { - if (this.mountInstances) { - let cachedMountFs = this.mountInstances.get(p); - if (!cachedMountFs) { - cachedMountFs = { - childFs: this.factorySync(this.baseFs, p), - expiresAt: 0, - refCount: 0 - }; - } - this.mountInstances.delete(p); - this.limitOpenFiles(this.maxOpenFiles - 1); - this.mountInstances.set(p, cachedMountFs); - cachedMountFs.expiresAt = Date.now() + this.maxAge; - return accept(cachedMountFs.childFs); - } else { - const childFs = this.factorySync(this.baseFs, p); - try { - return accept(childFs); - } finally { - childFs.saveAndClose?.(); - } - } - } -} - -class PosixFS extends ProxiedFS { - baseFs; - constructor(baseFs) { - super(npath); - this.baseFs = baseFs; - } - mapFromBase(path) { - return npath.fromPortablePath(path); - } - mapToBase(path) { - return npath.toPortablePath(path); - } -} - -const NUMBER_REGEXP = /^[0-9]+$/; -const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; -const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; -class VirtualFS extends ProxiedFS { - baseFs; - static makeVirtualPath(base, component, to) { - if (ppath.basename(base) !== `__virtual__`) - throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); - if (!ppath.basename(component).match(VALID_COMPONENT)) - throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); - const target = ppath.relative(ppath.dirname(base), to); - const segments = target.split(`/`); - let depth = 0; - while (depth < segments.length && segments[depth] === `..`) - depth += 1; - const finalSegments = segments.slice(depth); - const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); - return fullVirtualPath; - } - static resolveVirtual(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match || !match[3] && match[5]) - return p; - const target = ppath.dirname(match[1]); - if (!match[3] || !match[4]) - return target; - const isnum = NUMBER_REGEXP.test(match[4]); - if (!isnum) - return p; - const depth = Number(match[4]); - const backstep = `../`.repeat(depth); - const subpath = match[5] || `.`; - return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); - } - constructor({ baseFs = new NodeFS() } = {}) { - super(ppath); - this.baseFs = baseFs; - } - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - getRealPath() { - return this.baseFs.getRealPath(); - } - realpathSync(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return this.baseFs.realpathSync(p); - if (!match[5]) - return p; - const realpath = this.baseFs.realpathSync(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - async realpathPromise(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return await this.baseFs.realpathPromise(p); - if (!match[5]) - return p; - const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - mapToBase(p) { - if (p === ``) - return p; - if (this.pathUtils.isAbsolute(p)) - return VirtualFS.resolveVirtual(p); - const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); - const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); - return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; - } - mapFromBase(p) { - return p; - } -} - -const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? url.URL : globalThis.URL; - -class NodePathFS extends ProxiedFS { - baseFs; - constructor(baseFs) { - super(npath); - this.baseFs = baseFs; - } - mapFromBase(path) { - return path; - } - mapToBase(path) { - if (typeof path === `string`) - return path; - if (path instanceof URL) - return url.fileURLToPath(path); - if (Buffer.isBuffer(path)) { - const str = path.toString(); - if (!isUtf8(path, str)) - throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`); - return str; - } - throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`); - } -} -function isUtf8(buf, str) { - if (typeof buffer__default.default.isUtf8 !== `undefined`) - return buffer__default.default.isUtf8(buf); - return Buffer.byteLength(str) === buf.byteLength; -} - -const kBaseFs = Symbol(`kBaseFs`); -const kFd = Symbol(`kFd`); -const kClosePromise = Symbol(`kClosePromise`); -const kCloseResolve = Symbol(`kCloseResolve`); -const kCloseReject = Symbol(`kCloseReject`); -const kRefs = Symbol(`kRefs`); -const kRef = Symbol(`kRef`); -const kUnref = Symbol(`kUnref`); -class FileHandle { - [kBaseFs]; - [kFd]; - [kRefs] = 1; - [kClosePromise] = void 0; - [kCloseResolve] = void 0; - [kCloseReject] = void 0; - constructor(fd, baseFs) { - this[kBaseFs] = baseFs; - this[kFd] = fd; - } - get fd() { - return this[kFd]; - } - async appendFile(data, options) { - try { - this[kRef](this.appendFile); - const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; - return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0); - } finally { - this[kUnref](); - } - } - async chown(uid, gid) { - try { - this[kRef](this.chown); - return await this[kBaseFs].fchownPromise(this.fd, uid, gid); - } finally { - this[kUnref](); - } - } - async chmod(mode) { - try { - this[kRef](this.chmod); - return await this[kBaseFs].fchmodPromise(this.fd, mode); - } finally { - this[kUnref](); - } - } - createReadStream(options) { - return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }); - } - createWriteStream(options) { - return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }); - } - // FIXME: Missing FakeFS version - datasync() { - throw new Error(`Method not implemented.`); - } - // FIXME: Missing FakeFS version - sync() { - throw new Error(`Method not implemented.`); - } - async read(bufferOrOptions, offsetOrOptions, length, position) { - try { - this[kRef](this.read); - let buffer; - let offset; - if (!ArrayBuffer.isView(bufferOrOptions)) { - buffer = bufferOrOptions?.buffer ?? Buffer.alloc(16384); - offset = bufferOrOptions?.offset ?? 0; - length = bufferOrOptions?.length ?? buffer.byteLength - offset; - position = bufferOrOptions?.position ?? null; - } else if (typeof offsetOrOptions === `object` && offsetOrOptions !== null) { - buffer = bufferOrOptions; - offset = offsetOrOptions?.offset ?? 0; - length = offsetOrOptions?.length ?? buffer.byteLength - offset; - position = offsetOrOptions?.position ?? null; - } else { - buffer = bufferOrOptions; - offset = offsetOrOptions ?? 0; - length ??= 0; - } - if (length === 0) { - return { - bytesRead: length, - buffer - }; - } - const bytesRead = await this[kBaseFs].readPromise( - this.fd, - // FIXME: FakeFS should support ArrayBufferViews directly - Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength), - offset, - length, - position - ); - return { - bytesRead, - buffer - }; - } finally { - this[kUnref](); - } - } - async readFile(options) { - try { - this[kRef](this.readFile); - const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; - return await this[kBaseFs].readFilePromise(this.fd, encoding); - } finally { - this[kUnref](); - } - } - readLines(options) { - return readline.createInterface({ - input: this.createReadStream(options), - crlfDelay: Infinity - }); - } - async stat(opts) { - try { - this[kRef](this.stat); - return await this[kBaseFs].fstatPromise(this.fd, opts); - } finally { - this[kUnref](); - } - } - async truncate(len) { - try { - this[kRef](this.truncate); - return await this[kBaseFs].ftruncatePromise(this.fd, len); - } finally { - this[kUnref](); - } - } - // FIXME: Missing FakeFS version - utimes(atime, mtime) { - throw new Error(`Method not implemented.`); - } - async writeFile(data, options) { - try { - this[kRef](this.writeFile); - const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; - await this[kBaseFs].writeFilePromise(this.fd, data, encoding); - } finally { - this[kUnref](); - } - } - async write(...args) { - try { - this[kRef](this.write); - if (ArrayBuffer.isView(args[0])) { - const [buffer, offset, length, position] = args; - const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset ?? void 0, length ?? void 0, position ?? void 0); - return { bytesWritten, buffer }; - } else { - const [data, position, encoding] = args; - const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding); - return { bytesWritten, buffer: data }; - } - } finally { - this[kUnref](); - } - } - // TODO: Use writev from FakeFS when that is implemented - async writev(buffers, position) { - try { - this[kRef](this.writev); - let bytesWritten = 0; - if (typeof position !== `undefined`) { - for (const buffer of buffers) { - const writeResult = await this.write(buffer, void 0, void 0, position); - bytesWritten += writeResult.bytesWritten; - position += writeResult.bytesWritten; - } - } else { - for (const buffer of buffers) { - const writeResult = await this.write(buffer); - bytesWritten += writeResult.bytesWritten; - } - } - return { - buffers, - bytesWritten - }; - } finally { - this[kUnref](); - } - } - // FIXME: Missing FakeFS version - readv(buffers, position) { - throw new Error(`Method not implemented.`); - } - close() { - if (this[kFd] === -1) return Promise.resolve(); - if (this[kClosePromise]) return this[kClosePromise]; - this[kRefs]--; - if (this[kRefs] === 0) { - const fd = this[kFd]; - this[kFd] = -1; - this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { - this[kClosePromise] = void 0; - }); - } else { - this[kClosePromise] = new Promise((resolve, reject) => { - this[kCloseResolve] = resolve; - this[kCloseReject] = reject; - }).finally(() => { - this[kClosePromise] = void 0; - this[kCloseReject] = void 0; - this[kCloseResolve] = void 0; - }); - } - return this[kClosePromise]; - } - [kRef](caller) { - if (this[kFd] === -1) { - const err = new Error(`file closed`); - err.code = `EBADF`; - err.syscall = caller.name; - throw err; - } - this[kRefs]++; - } - [kUnref]() { - this[kRefs]--; - if (this[kRefs] === 0) { - const fd = this[kFd]; - this[kFd] = -1; - this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]); - } - } -} - -const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ - `accessSync`, - `appendFileSync`, - `createReadStream`, - `createWriteStream`, - `chmodSync`, - `fchmodSync`, - `chownSync`, - `fchownSync`, - `closeSync`, - `copyFileSync`, - `linkSync`, - `lstatSync`, - `fstatSync`, - `lutimesSync`, - `mkdirSync`, - `openSync`, - `opendirSync`, - `readlinkSync`, - `readFileSync`, - `readdirSync`, - `readlinkSync`, - `realpathSync`, - `renameSync`, - `rmdirSync`, - `rmSync`, - `statSync`, - `symlinkSync`, - `truncateSync`, - `ftruncateSync`, - `unlinkSync`, - `unwatchFile`, - `utimesSync`, - `watch`, - `watchFile`, - `writeFileSync`, - `writeSync` -]); -const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ - `accessPromise`, - `appendFilePromise`, - `fchmodPromise`, - `chmodPromise`, - `fchownPromise`, - `chownPromise`, - `closePromise`, - `copyFilePromise`, - `linkPromise`, - `fstatPromise`, - `lstatPromise`, - `lutimesPromise`, - `mkdirPromise`, - `openPromise`, - `opendirPromise`, - `readdirPromise`, - `realpathPromise`, - `readFilePromise`, - `readdirPromise`, - `readlinkPromise`, - `renamePromise`, - `rmdirPromise`, - `rmPromise`, - `statPromise`, - `symlinkPromise`, - `truncatePromise`, - `ftruncatePromise`, - `unlinkPromise`, - `utimesPromise`, - `writeFilePromise`, - `writeSync` -]); -function patchFs(patchedFs, fakeFs) { - fakeFs = new NodePathFS(fakeFs); - const setupFn = (target, name, replacement) => { - const orig = target[name]; - target[name] = replacement; - if (typeof orig?.[nodeUtils.promisify.custom] !== `undefined`) { - replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom]; - } - }; - { - setupFn(patchedFs, `exists`, (p, ...args) => { - const hasCallback = typeof args[args.length - 1] === `function`; - const callback = hasCallback ? args.pop() : () => { - }; - process.nextTick(() => { - fakeFs.existsPromise(p).then((exists) => { - callback(exists); - }, () => { - callback(false); - }); - }); - }); - setupFn(patchedFs, `read`, (...args) => { - let [fd, buffer, offset, length, position, callback] = args; - if (args.length <= 3) { - let options = {}; - if (args.length < 3) { - callback = args[1]; - } else { - options = args[1]; - callback = args[2]; - } - ({ - buffer = Buffer.alloc(16384), - offset = 0, - length = buffer.byteLength, - position - } = options); - } - if (offset == null) - offset = 0; - length |= 0; - if (length === 0) { - process.nextTick(() => { - callback(null, 0, buffer); - }); - return; - } - if (position == null) - position = -1; - process.nextTick(() => { - fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => { - callback(null, bytesRead, buffer); - }, (error) => { - callback(error, 0, buffer); - }); - }); - }); - for (const fnName of ASYNC_IMPLEMENTATIONS) { - const origName = fnName.replace(/Promise$/, ``); - if (typeof patchedFs[origName] === `undefined`) - continue; - const fakeImpl = fakeFs[fnName]; - if (typeof fakeImpl === `undefined`) - continue; - const wrapper = (...args) => { - const hasCallback = typeof args[args.length - 1] === `function`; - const callback = hasCallback ? args.pop() : () => { - }; - process.nextTick(() => { - fakeImpl.apply(fakeFs, args).then((result) => { - callback(null, result); - }, (error) => { - callback(error); - }); - }); - }; - setupFn(patchedFs, origName, wrapper); - } - patchedFs.realpath.native = patchedFs.realpath; - } - { - setupFn(patchedFs, `existsSync`, (p) => { - try { - return fakeFs.existsSync(p); - } catch { - return false; - } - }); - setupFn(patchedFs, `readSync`, (...args) => { - let [fd, buffer, offset, length, position] = args; - if (args.length <= 3) { - const options = args[2] || {}; - ({ offset = 0, length = buffer.byteLength, position } = options); - } - if (offset == null) - offset = 0; - length |= 0; - if (length === 0) - return 0; - if (position == null) - position = -1; - return fakeFs.readSync(fd, buffer, offset, length, position); - }); - for (const fnName of SYNC_IMPLEMENTATIONS) { - const origName = fnName; - if (typeof patchedFs[origName] === `undefined`) - continue; - const fakeImpl = fakeFs[fnName]; - if (typeof fakeImpl === `undefined`) - continue; - setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)); - } - patchedFs.realpathSync.native = patchedFs.realpathSync; - } - { - const patchedFsPromises = patchedFs.promises; - for (const fnName of ASYNC_IMPLEMENTATIONS) { - const origName = fnName.replace(/Promise$/, ``); - if (typeof patchedFsPromises[origName] === `undefined`) - continue; - const fakeImpl = fakeFs[fnName]; - if (typeof fakeImpl === `undefined`) - continue; - if (fnName === `open`) - continue; - setupFn(patchedFsPromises, origName, (pathLike, ...args) => { - if (pathLike instanceof FileHandle) { - return pathLike[origName].apply(pathLike, args); - } else { - return fakeImpl.call(fakeFs, pathLike, ...args); - } - }); - } - setupFn(patchedFsPromises, `open`, async (...args) => { - const fd = await fakeFs.openPromise(...args); - return new FileHandle(fd, fakeFs); - }); - } - { - patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { - const res = fakeFs.readPromise(fd, buffer, ...args); - return { bytesRead: await res, buffer }; - }; - patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { - const res = fakeFs.writePromise(fd, buffer, ...args); - return { bytesWritten: await res, buffer }; - }; - } -} - -let cachedInstance; -let registeredFactory = () => { - throw new Error(`Assertion failed: No libzip instance is available, and no factory was configured`); -}; -function setFactory(factory) { - registeredFactory = factory; -} -function getInstance() { - if (typeof cachedInstance === `undefined`) - cachedInstance = registeredFactory(); - return cachedInstance; -} - -var libzipSync = {exports: {}}; - -(function (module, exports) { -var frozenFs = Object.assign({}, fs__default.default); -var createModule = function() { - var _scriptDir = void 0; - if (typeof __filename !== "undefined") _scriptDir = _scriptDir || __filename; - return function(createModule2) { - createModule2 = createModule2 || {}; - var Module = typeof createModule2 !== "undefined" ? createModule2 : {}; - var readyPromiseResolve, readyPromiseReject; - Module["ready"] = new Promise(function(resolve, reject) { - readyPromiseResolve = resolve; - readyPromiseReject = reject; - }); - var moduleOverrides = {}; - var key; - for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key]; - } - } - var scriptDirectory = ""; - function locateFile(path) { - if (Module["locateFile"]) { - return Module["locateFile"](path, scriptDirectory); - } - return scriptDirectory + path; - } - var read_, readBinary; - var nodeFS; - var nodePath; - { - { - scriptDirectory = __dirname + "/"; - } - read_ = function shell_read(filename, binary) { - var ret = tryParseAsDataURI(filename); - if (ret) { - return binary ? ret : ret.toString(); - } - if (!nodeFS) nodeFS = frozenFs; - if (!nodePath) nodePath = path__default.default; - filename = nodePath["normalize"](filename); - return nodeFS["readFileSync"](filename, binary ? null : "utf8"); - }; - readBinary = function readBinary2(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret); - } - assert(ret.buffer); - return ret; - }; - if (process["argv"].length > 1) { - process["argv"][1].replace(/\\/g, "/"); - } - process["argv"].slice(2); - Module["inspect"] = function() { - return "[Emscripten Module object]"; - }; - } - Module["print"] || console.log.bind(console); - var err = Module["printErr"] || console.warn.bind(console); - for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } - } - moduleOverrides = null; - if (Module["arguments"]) ; - if (Module["thisProgram"]) ; - if (Module["quit"]) ; - var wasmBinary; - if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; - Module["noExitRuntime"] || true; - if (typeof WebAssembly !== "object") { - abort("no native wasm support detected"); - } - function getValue(ptr, type, noSafe) { - type = type || "i8"; - if (type.charAt(type.length - 1) === "*") type = "i32"; - switch (type) { - case "i1": - return HEAP8[ptr >> 0]; - case "i8": - return HEAP8[ptr >> 0]; - case "i16": - return LE_HEAP_LOAD_I16((ptr >> 1) * 2); - case "i32": - return LE_HEAP_LOAD_I32((ptr >> 2) * 4); - case "i64": - return LE_HEAP_LOAD_I32((ptr >> 2) * 4); - case "float": - return LE_HEAP_LOAD_F32((ptr >> 2) * 4); - case "double": - return LE_HEAP_LOAD_F64((ptr >> 3) * 8); - default: - abort("invalid type for getValue: " + type); - } - return null; - } - var wasmMemory; - var ABORT = false; - function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text); - } - } - function getCFunc(ident) { - var func = Module["_" + ident]; - assert( - func, - "Cannot call unknown function " + ident + ", make sure it is exported" - ); - return func; - } - function ccall(ident, returnType, argTypes, args, opts) { - var toC = { - string: function(str) { - var ret2 = 0; - if (str !== null && str !== void 0 && str !== 0) { - var len = (str.length << 2) + 1; - ret2 = stackAlloc(len); - stringToUTF8(str, ret2, len); - } - return ret2; - }, - array: function(arr) { - var ret2 = stackAlloc(arr.length); - writeArrayToMemory(arr, ret2); - return ret2; - } - }; - function convertReturnValue(ret2) { - if (returnType === "string") return UTF8ToString(ret2); - if (returnType === "boolean") return Boolean(ret2); - return ret2; - } - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) stack = stackSave(); - cArgs[i] = converter(args[i]); - } else { - cArgs[i] = args[i]; - } - } - } - var ret = func.apply(null, cArgs); - ret = convertReturnValue(ret); - if (stack !== 0) stackRestore(stack); - return ret; - } - function cwrap(ident, returnType, argTypes, opts) { - argTypes = argTypes || []; - var numericArgs = argTypes.every(function(type) { - return type === "number"; - }); - var numericRet = returnType !== "string"; - if (numericRet && numericArgs && !opts) { - return getCFunc(ident); - } - return function() { - return ccall(ident, returnType, argTypes, arguments); - }; - } - var UTF8Decoder = new TextDecoder("utf8"); - function UTF8ToString(ptr, maxBytesToRead) { - if (!ptr) return ""; - var maxPtr = ptr + maxBytesToRead; - for (var end = ptr; !(end >= maxPtr) && HEAPU8[end]; ) ++end; - return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); - } - function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023; - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u; - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63; - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } - } - heap[outIdx] = 0; - return outIdx - startIdx; - } - function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); - } - function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) - u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) ++len; - else if (u <= 2047) len += 2; - else if (u <= 65535) len += 3; - else len += 4; - } - return len; - } - function allocateUTF8(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) stringToUTF8Array(str, HEAP8, ret, size); - return ret; - } - function writeArrayToMemory(array, buffer2) { - HEAP8.set(array, buffer2); - } - function alignUp(x, multiple) { - if (x % multiple > 0) { - x += multiple - x % multiple; - } - return x; - } - var buffer, HEAP8, HEAPU8; - var HEAP_DATA_VIEW; - function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module["HEAP_DATA_VIEW"] = HEAP_DATA_VIEW = new DataView(buf); - Module["HEAP8"] = HEAP8 = new Int8Array(buf); - Module["HEAP16"] = new Int16Array(buf); - Module["HEAP32"] = new Int32Array(buf); - Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); - Module["HEAPU16"] = new Uint16Array(buf); - Module["HEAPU32"] = new Uint32Array(buf); - Module["HEAPF32"] = new Float32Array(buf); - Module["HEAPF64"] = new Float64Array(buf); - } - Module["INITIAL_MEMORY"] || 16777216; - var wasmTable; - var __ATPRERUN__ = []; - var __ATINIT__ = []; - var __ATPOSTRUN__ = []; - function preRun() { - if (Module["preRun"]) { - if (typeof Module["preRun"] == "function") - Module["preRun"] = [Module["preRun"]]; - while (Module["preRun"].length) { - addOnPreRun(Module["preRun"].shift()); - } - } - callRuntimeCallbacks(__ATPRERUN__); - } - function initRuntime() { - callRuntimeCallbacks(__ATINIT__); - } - function postRun() { - if (Module["postRun"]) { - if (typeof Module["postRun"] == "function") - Module["postRun"] = [Module["postRun"]]; - while (Module["postRun"].length) { - addOnPostRun(Module["postRun"].shift()); - } - } - callRuntimeCallbacks(__ATPOSTRUN__); - } - function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); - } - function addOnInit(cb) { - __ATINIT__.unshift(cb); - } - function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); - } - var runDependencies = 0; - var dependenciesFulfilled = null; - function addRunDependency(id) { - runDependencies++; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } - } - function removeRunDependency(id) { - runDependencies--; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } - if (runDependencies == 0) { - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); - } - } - } - Module["preloadedImages"] = {}; - Module["preloadedAudios"] = {}; - function abort(what) { - if (Module["onAbort"]) { - Module["onAbort"](what); - } - what += ""; - err(what); - ABORT = true; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - readyPromiseReject(e); - throw e; - } - var dataURIPrefix = "data:application/octet-stream;base64,"; - function isDataURI(filename) { - return filename.startsWith(dataURIPrefix); - } - var wasmBinaryFile = "data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w=="; - if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile); - } - function getBinary(file) { - try { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } - var binary = tryParseAsDataURI(file); - if (binary) { - return binary; - } - if (readBinary) { - return readBinary(file); - } else { - throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"; - } - } catch (err2) { - abort(err2); - } - } - function instantiateSync(file, info) { - var instance; - var module2; - var binary; - try { - binary = getBinary(file); - module2 = new WebAssembly.Module(binary); - instance = new WebAssembly.Instance(module2, info); - } catch (e) { - var str = e.toString(); - err("failed to compile wasm module: " + str); - if (str.includes("imported Memory") || str.includes("memory import")) { - err( - "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)." - ); - } - throw e; - } - return [instance, module2]; - } - function createWasm() { - var info = { a: asmLibraryArg }; - function receiveInstance(instance, module2) { - var exports3 = instance.exports; - Module["asm"] = exports3; - wasmMemory = Module["asm"]["g"]; - updateGlobalBufferAndViews(wasmMemory.buffer); - wasmTable = Module["asm"]["W"]; - addOnInit(Module["asm"]["h"]); - removeRunDependency(); - } - addRunDependency(); - if (Module["instantiateWasm"]) { - try { - var exports2 = Module["instantiateWasm"](info, receiveInstance); - return exports2; - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false; - } - } - var result = instantiateSync(wasmBinaryFile, info); - receiveInstance(result[0]); - return Module["asm"]; - } - function LE_HEAP_LOAD_F32(byteOffset) { - return HEAP_DATA_VIEW.getFloat32(byteOffset, true); - } - function LE_HEAP_LOAD_F64(byteOffset) { - return HEAP_DATA_VIEW.getFloat64(byteOffset, true); - } - function LE_HEAP_LOAD_I16(byteOffset) { - return HEAP_DATA_VIEW.getInt16(byteOffset, true); - } - function LE_HEAP_LOAD_I32(byteOffset) { - return HEAP_DATA_VIEW.getInt32(byteOffset, true); - } - function LE_HEAP_STORE_I32(byteOffset, value) { - HEAP_DATA_VIEW.setInt32(byteOffset, value, true); - } - function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == "function") { - callback(Module); - continue; - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === void 0) { - wasmTable.get(func)(); - } else { - wasmTable.get(func)(callback.arg); - } - } else { - func(callback.arg === void 0 ? null : callback.arg); - } - } - } - function _gmtime_r(time, tmPtr) { - var date = new Date(LE_HEAP_LOAD_I32((time >> 2) * 4) * 1e3); - LE_HEAP_STORE_I32((tmPtr >> 2) * 4, date.getUTCSeconds()); - LE_HEAP_STORE_I32((tmPtr + 4 >> 2) * 4, date.getUTCMinutes()); - LE_HEAP_STORE_I32((tmPtr + 8 >> 2) * 4, date.getUTCHours()); - LE_HEAP_STORE_I32((tmPtr + 12 >> 2) * 4, date.getUTCDate()); - LE_HEAP_STORE_I32((tmPtr + 16 >> 2) * 4, date.getUTCMonth()); - LE_HEAP_STORE_I32((tmPtr + 20 >> 2) * 4, date.getUTCFullYear() - 1900); - LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); - LE_HEAP_STORE_I32((tmPtr + 36 >> 2) * 4, 0); - LE_HEAP_STORE_I32((tmPtr + 32 >> 2) * 4, 0); - var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); - var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; - LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); - if (!_gmtime_r.GMTString) _gmtime_r.GMTString = allocateUTF8("GMT"); - LE_HEAP_STORE_I32((tmPtr + 40 >> 2) * 4, _gmtime_r.GMTString); - return tmPtr; - } - function ___gmtime_r(a0, a1) { - return _gmtime_r(a0, a1); - } - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num); - } - function emscripten_realloc_buffer(size) { - try { - wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); - updateGlobalBufferAndViews(wasmMemory.buffer); - return 1; - } catch (e) { - } - } - function _emscripten_resize_heap(requestedSize) { - var oldSize = HEAPU8.length; - requestedSize = requestedSize >>> 0; - var maxHeapSize = 2147483648; - if (requestedSize > maxHeapSize) { - return false; - } - for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { - var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); - overGrownHeapSize = Math.min( - overGrownHeapSize, - requestedSize + 100663296 - ); - var newSize = Math.min( - maxHeapSize, - alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) - ); - var replacement = emscripten_realloc_buffer(newSize); - if (replacement) { - return true; - } - } - return false; - } - function _setTempRet0(val) { - } - function _time(ptr) { - var ret = Date.now() / 1e3 | 0; - if (ptr) { - LE_HEAP_STORE_I32((ptr >> 2) * 4, ret); - } - return ret; - } - function _tzset() { - if (_tzset.called) return; - _tzset.called = true; - var currentYear = (/* @__PURE__ */ new Date()).getFullYear(); - var winter = new Date(currentYear, 0, 1); - var summer = new Date(currentYear, 6, 1); - var winterOffset = winter.getTimezoneOffset(); - var summerOffset = summer.getTimezoneOffset(); - var stdTimezoneOffset = Math.max(winterOffset, summerOffset); - LE_HEAP_STORE_I32((__get_timezone() >> 2) * 4, stdTimezoneOffset * 60); - LE_HEAP_STORE_I32( - (__get_daylight() >> 2) * 4, - Number(winterOffset != summerOffset) - ); - function extractZone(date) { - var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); - return match ? match[1] : "GMT"; - } - var winterName = extractZone(winter); - var summerName = extractZone(summer); - var winterNamePtr = allocateUTF8(winterName); - var summerNamePtr = allocateUTF8(summerName); - if (summerOffset < winterOffset) { - LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, winterNamePtr); - LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, summerNamePtr); - } else { - LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, summerNamePtr); - LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, winterNamePtr); - } - } - function _timegm(tmPtr) { - _tzset(); - var time = Date.UTC( - LE_HEAP_LOAD_I32((tmPtr + 20 >> 2) * 4) + 1900, - LE_HEAP_LOAD_I32((tmPtr + 16 >> 2) * 4), - LE_HEAP_LOAD_I32((tmPtr + 12 >> 2) * 4), - LE_HEAP_LOAD_I32((tmPtr + 8 >> 2) * 4), - LE_HEAP_LOAD_I32((tmPtr + 4 >> 2) * 4), - LE_HEAP_LOAD_I32((tmPtr >> 2) * 4), - 0 - ); - var date = new Date(time); - LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); - var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); - var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; - LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); - return date.getTime() / 1e3 | 0; - } - function intArrayFromBase64(s) { - { - var buf; - try { - buf = Buffer.from(s, "base64"); - } catch (_) { - buf = new Buffer(s, "base64"); - } - return new Uint8Array( - buf["buffer"], - buf["byteOffset"], - buf["byteLength"] - ); - } - } - function tryParseAsDataURI(filename) { - if (!isDataURI(filename)) { - return; - } - return intArrayFromBase64(filename.slice(dataURIPrefix.length)); - } - var asmLibraryArg = { - e: ___gmtime_r, - c: _emscripten_memcpy_big, - d: _emscripten_resize_heap, - a: _setTempRet0, - b: _time, - f: _timegm - }; - var asm = createWasm(); - Module["___wasm_call_ctors"] = asm["h"]; - Module["_zip_ext_count_symlinks"] = asm["i"]; - Module["_zip_file_get_external_attributes"] = asm["j"]; - Module["_zipstruct_statS"] = asm["k"]; - Module["_zipstruct_stat_size"] = asm["l"]; - Module["_zipstruct_stat_mtime"] = asm["m"]; - Module["_zipstruct_stat_crc"] = asm["n"]; - Module["_zipstruct_errorS"] = asm["o"]; - Module["_zipstruct_error_code_zip"] = asm["p"]; - Module["_zipstruct_stat_comp_size"] = asm["q"]; - Module["_zipstruct_stat_comp_method"] = asm["r"]; - Module["_zip_close"] = asm["s"]; - Module["_zip_delete"] = asm["t"]; - Module["_zip_dir_add"] = asm["u"]; - Module["_zip_discard"] = asm["v"]; - Module["_zip_error_init_with_code"] = asm["w"]; - Module["_zip_get_error"] = asm["x"]; - Module["_zip_file_get_error"] = asm["y"]; - Module["_zip_error_strerror"] = asm["z"]; - Module["_zip_fclose"] = asm["A"]; - Module["_zip_file_add"] = asm["B"]; - Module["_free"] = asm["C"]; - var _malloc = Module["_malloc"] = asm["D"]; - Module["_zip_source_error"] = asm["E"]; - Module["_zip_source_seek"] = asm["F"]; - Module["_zip_file_set_external_attributes"] = asm["G"]; - Module["_zip_file_set_mtime"] = asm["H"]; - Module["_zip_fopen_index"] = asm["I"]; - Module["_zip_fread"] = asm["J"]; - Module["_zip_get_name"] = asm["K"]; - Module["_zip_get_num_entries"] = asm["L"]; - Module["_zip_source_read"] = asm["M"]; - Module["_zip_name_locate"] = asm["N"]; - Module["_zip_open_from_source"] = asm["O"]; - Module["_zip_set_file_compression"] = asm["P"]; - Module["_zip_source_buffer"] = asm["Q"]; - Module["_zip_source_buffer_create"] = asm["R"]; - Module["_zip_source_close"] = asm["S"]; - Module["_zip_source_free"] = asm["T"]; - Module["_zip_source_keep"] = asm["U"]; - Module["_zip_source_open"] = asm["V"]; - Module["_zip_source_tell"] = asm["X"]; - Module["_zip_stat_index"] = asm["Y"]; - var __get_tzname = Module["__get_tzname"] = asm["Z"]; - var __get_daylight = Module["__get_daylight"] = asm["_"]; - var __get_timezone = Module["__get_timezone"] = asm["$"]; - var stackSave = Module["stackSave"] = asm["aa"]; - var stackRestore = Module["stackRestore"] = asm["ba"]; - var stackAlloc = Module["stackAlloc"] = asm["ca"]; - Module["cwrap"] = cwrap; - Module["getValue"] = getValue; - var calledRun; - dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller; - }; - function run(args) { - if (runDependencies > 0) { - return; - } - preRun(); - if (runDependencies > 0) { - return; - } - function doRun() { - if (calledRun) return; - calledRun = true; - Module["calledRun"] = true; - if (ABORT) return; - initRuntime(); - readyPromiseResolve(Module); - if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); - postRun(); - } - if (Module["setStatus"]) { - Module["setStatus"]("Running..."); - setTimeout(function() { - setTimeout(function() { - Module["setStatus"](""); - }, 1); - doRun(); - }, 1); - } else { - doRun(); - } - } - Module["run"] = run; - if (Module["preInit"]) { - if (typeof Module["preInit"] == "function") - Module["preInit"] = [Module["preInit"]]; - while (Module["preInit"].length > 0) { - Module["preInit"].pop()(); - } - } - run(); - return createModule2; - }; -}(); -module.exports = createModule; -}(libzipSync)); - -const createModule = libzipSync.exports; - -const number64 = [ - `number`, - // low - `number` - // high -]; -var Errors = /* @__PURE__ */ ((Errors2) => { - Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK"; - Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK"; - Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME"; - Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE"; - Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK"; - Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ"; - Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE"; - Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC"; - Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED"; - Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT"; - Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS"; - Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN"; - Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN"; - Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB"; - Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY"; - Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED"; - Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP"; - Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF"; - Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL"; - Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP"; - Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL"; - Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS"; - Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE"; - Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED"; - Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP"; - Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY"; - Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD"; - Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD"; - Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP"; - Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE"; - Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL"; - Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA"; - return Errors2; -})(Errors || {}); -const makeInterface = (emZip) => ({ - // Those are getters because they can change after memory growth - get HEAPU8() { - return emZip.HEAPU8; - }, - errors: Errors, - SEEK_SET: 0, - SEEK_CUR: 1, - SEEK_END: 2, - ZIP_CHECKCONS: 4, - ZIP_EXCL: 2, - ZIP_RDONLY: 16, - ZIP_FL_OVERWRITE: 8192, - ZIP_FL_COMPRESSED: 4, - ZIP_OPSYS_DOS: 0, - ZIP_OPSYS_AMIGA: 1, - ZIP_OPSYS_OPENVMS: 2, - ZIP_OPSYS_UNIX: 3, - ZIP_OPSYS_VM_CMS: 4, - ZIP_OPSYS_ATARI_ST: 5, - ZIP_OPSYS_OS_2: 6, - ZIP_OPSYS_MACINTOSH: 7, - ZIP_OPSYS_Z_SYSTEM: 8, - ZIP_OPSYS_CPM: 9, - ZIP_OPSYS_WINDOWS_NTFS: 10, - ZIP_OPSYS_MVS: 11, - ZIP_OPSYS_VSE: 12, - ZIP_OPSYS_ACORN_RISC: 13, - ZIP_OPSYS_VFAT: 14, - ZIP_OPSYS_ALTERNATE_MVS: 15, - ZIP_OPSYS_BEOS: 16, - ZIP_OPSYS_TANDEM: 17, - ZIP_OPSYS_OS_400: 18, - ZIP_OPSYS_OS_X: 19, - ZIP_CM_DEFAULT: -1, - ZIP_CM_STORE: 0, - ZIP_CM_DEFLATE: 8, - uint08S: emZip._malloc(1), - uint32S: emZip._malloc(4), - malloc: emZip._malloc, - free: emZip._free, - getValue: emZip.getValue, - openFromSource: emZip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]), - close: emZip.cwrap(`zip_close`, `number`, [`number`]), - discard: emZip.cwrap(`zip_discard`, null, [`number`]), - getError: emZip.cwrap(`zip_get_error`, `number`, [`number`]), - getName: emZip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), - getNumEntries: emZip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), - delete: emZip.cwrap(`zip_delete`, `number`, [`number`, `number`]), - statIndex: emZip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), - fopenIndex: emZip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), - fread: emZip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), - fclose: emZip.cwrap(`zip_fclose`, `number`, [`number`]), - dir: { - add: emZip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]) - }, - file: { - add: emZip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), - getError: emZip.cwrap(`zip_file_get_error`, `number`, [`number`]), - getExternalAttributes: emZip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), - setExternalAttributes: emZip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), - setMtime: emZip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), - setCompression: emZip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`]) - }, - ext: { - countSymlinks: emZip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]) - }, - error: { - initWithCode: emZip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]), - strerror: emZip.cwrap(`zip_error_strerror`, `string`, [`number`]) - }, - name: { - locate: emZip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]) - }, - source: { - fromUnattachedBuffer: emZip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]), - fromBuffer: emZip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), - free: emZip.cwrap(`zip_source_free`, null, [`number`]), - keep: emZip.cwrap(`zip_source_keep`, null, [`number`]), - open: emZip.cwrap(`zip_source_open`, `number`, [`number`]), - close: emZip.cwrap(`zip_source_close`, `number`, [`number`]), - seek: emZip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]), - tell: emZip.cwrap(`zip_source_tell`, `number`, [`number`]), - read: emZip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]), - error: emZip.cwrap(`zip_source_error`, `number`, [`number`]) - }, - struct: { - statS: emZip.cwrap(`zipstruct_statS`, `number`, []), - statSize: emZip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), - statCompSize: emZip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), - statCompMethod: emZip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]), - statMtime: emZip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), - statCrc: emZip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), - errorS: emZip.cwrap(`zipstruct_errorS`, `number`, []), - errorCodeZip: emZip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]) - } -}); - -function getArchivePart(path, extension) { - let idx = path.indexOf(extension); - if (idx <= 0) - return null; - let nextCharIdx = idx; - while (idx >= 0) { - nextCharIdx = idx + extension.length; - if (path[nextCharIdx] === ppath.sep) - break; - if (path[idx - 1] === ppath.sep) - return null; - idx = path.indexOf(extension, nextCharIdx); - } - if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) - return null; - return path.slice(0, nextCharIdx); -} -class ZipOpenFS extends MountFS { - static async openPromise(fn, opts) { - const zipOpenFs = new ZipOpenFS(opts); - try { - return await fn(zipOpenFs); - } finally { - zipOpenFs.saveAndClose(); - } - } - constructor(opts = {}) { - const fileExtensions = opts.fileExtensions; - const readOnlyArchives = opts.readOnlyArchives; - const getMountPoint = typeof fileExtensions === `undefined` ? (path) => getArchivePart(path, `.zip`) : (path) => { - for (const extension of fileExtensions) { - const result = getArchivePart(path, extension); - if (result) { - return result; - } - } - return null; - }; - const factorySync = (baseFs, p) => { - return new ZipFS(p, { - baseFs, - readOnly: readOnlyArchives, - stats: baseFs.statSync(p), - customZipImplementation: opts.customZipImplementation - }); - }; - const factoryPromise = async (baseFs, p) => { - const zipOptions = { - baseFs, - readOnly: readOnlyArchives, - stats: await baseFs.statPromise(p), - customZipImplementation: opts.customZipImplementation - }; - return () => { - return new ZipFS(p, zipOptions); - }; - }; - super({ - ...opts, - factorySync, - factoryPromise, - getMountPoint - }); - } -} - -class LibzipError extends Error { - code; - constructor(message, code) { - super(message); - this.name = `Libzip Error`; - this.code = code; - } -} -class LibZipImpl { - libzip; - lzSource; - zip; - listings; - symlinkCount; - filesShouldBeCached = true; - constructor(opts) { - const buffer = `buffer` in opts ? opts.buffer : opts.baseFs.readFileSync(opts.path); - this.libzip = getInstance(); - const errPtr = this.libzip.malloc(4); - try { - let flags = 0; - if (opts.readOnly) - flags |= this.libzip.ZIP_RDONLY; - const lzSource = this.allocateUnattachedSource(buffer); - try { - this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); - this.lzSource = lzSource; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } - if (this.zip === 0) { - const error = this.libzip.struct.errorS(); - this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); - throw this.makeLibzipError(error); - } - } finally { - this.libzip.free(errPtr); - } - const entryCount = this.libzip.getNumEntries(this.zip, 0); - const listings = new Array(entryCount); - for (let t = 0; t < entryCount; ++t) - listings[t] = this.libzip.getName(this.zip, t, 0); - this.listings = listings; - this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); - if (this.symlinkCount === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - getSymlinkCount() { - return this.symlinkCount; - } - getListings() { - return this.listings; - } - stat(entry) { - const stat = this.libzip.struct.statS(); - const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const size = this.libzip.struct.statSize(stat) >>> 0; - const mtime = this.libzip.struct.statMtime(stat) >>> 0; - const crc = this.libzip.struct.statCrc(stat) >>> 0; - return { size, mtime, crc }; - } - makeLibzipError(error) { - const errorCode = this.libzip.struct.errorCodeZip(error); - const strerror = this.libzip.error.strerror(error); - const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); - if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) - throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); - return libzipError; - } - setFileSource(target, compression, buffer) { - const lzSource = this.allocateSource(buffer); - try { - const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); - if (newIndex === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (compression !== null) { - const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, compression[0], compression[1]); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - return newIndex; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } - } - setMtime(entry, mtime) { - const rc = this.libzip.file.setMtime(this.zip, entry, 0, mtime, 0); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - getExternalAttributes(index) { - const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (attrs === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 0; - return [opsys, attributes]; - } - setExternalAttributes(index, opsys, attributes) { - const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, opsys, attributes); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - locate(name) { - return this.libzip.name.locate(this.zip, name, 0); - } - getFileSource(index) { - const stat = this.libzip.struct.statS(); - const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const size = this.libzip.struct.statCompSize(stat); - const compressionMethod = this.libzip.struct.statCompMethod(stat); - const buffer = this.libzip.malloc(size); - try { - const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); - if (file === 0) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - try { - const rc2 = this.libzip.fread(file, buffer, size, 0); - if (rc2 === -1) - throw this.makeLibzipError(this.libzip.file.getError(file)); - else if (rc2 < size) - throw new Error(`Incomplete read`); - else if (rc2 > size) - throw new Error(`Overread`); - const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); - const data = Buffer.from(memory); - return { data, compressionMethod }; - } finally { - this.libzip.fclose(file); - } - } finally { - this.libzip.free(buffer); - } - } - deleteEntry(index) { - const rc = this.libzip.delete(this.zip, index); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - addDirectory(path) { - const index = this.libzip.dir.add(this.zip, path); - if (index === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - return index; - } - getBufferAndClose() { - try { - this.libzip.source.keep(this.lzSource); - if (this.libzip.close(this.zip) === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (this.libzip.source.open(this.lzSource) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - const size = this.libzip.source.tell(this.lzSource); - if (size === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - const buffer = this.libzip.malloc(size); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - try { - const rc = this.libzip.source.read(this.lzSource, buffer, size); - if (rc === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - else if (rc < size) - throw new Error(`Incomplete read`); - else if (rc > size) - throw new Error(`Overread`); - let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); - if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) - result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); - return result; - } finally { - this.libzip.free(buffer); - } - } finally { - this.libzip.source.close(this.lzSource); - this.libzip.source.free(this.lzSource); - } - } - allocateBuffer(content) { - if (!Buffer.isBuffer(content)) - content = Buffer.from(content); - const buffer = this.libzip.malloc(content.byteLength); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); - heap.set(content); - return { buffer, byteLength: content.byteLength }; - } - allocateUnattachedSource(content) { - const error = this.libzip.struct.errorS(); - const { buffer, byteLength } = this.allocateBuffer(content); - const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); - if (source === 0) { - this.libzip.free(error); - throw this.makeLibzipError(error); - } - return source; - } - allocateSource(content) { - const { buffer, byteLength } = this.allocateBuffer(content); - const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); - if (source === 0) { - this.libzip.free(buffer); - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - return source; - } - discard() { - this.libzip.discard(this.zip); - } -} - -const ZIP_UNIX = 3; -const STORE = 0; -const DEFLATE = 8; -const DEFAULT_COMPRESSION_LEVEL = `mixed`; -function toUnixTimestamp(time) { - if (typeof time === `string` && String(+time) === time) - return +time; - if (typeof time === `number` && Number.isFinite(time)) { - if (time < 0) { - return Date.now() / 1e3; - } else { - return time; - } - } - if (nodeUtils.types.isDate(time)) - return time.getTime() / 1e3; - throw new Error(`Invalid time`); -} -function makeEmptyArchive() { - return Buffer.from([ - 80, - 75, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ]); -} -class ZipFS extends BasePortableFakeFS { - baseFs; - path; - stats; - level; - zipImpl; - listings = /* @__PURE__ */ new Map(); - entries = /* @__PURE__ */ new Map(); - /** - * A cache of indices mapped to file sources. - * Populated by `setFileSource` calls. - * Required for supporting read after write. - */ - fileSources = /* @__PURE__ */ new Map(); - symlinkCount; - fds = /* @__PURE__ */ new Map(); - nextFd = 0; - ready = false; - readOnly = false; - constructor(source, opts = {}) { - super(); - if (opts.readOnly) - this.readOnly = true; - const pathOptions = opts; - this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; - const ZipImplCls = opts.customZipImplementation ?? LibZipImpl; - if (typeof source === `string`) { - const { baseFs = new NodeFS() } = pathOptions; - this.baseFs = baseFs; - this.path = source; - } else { - this.path = null; - this.baseFs = null; - } - if (opts.stats) { - this.stats = opts.stats; - } else { - if (typeof source === `string`) { - try { - this.stats = this.baseFs.statSync(source); - } catch (error) { - if (error.code === `ENOENT` && pathOptions.create) { - this.stats = makeDefaultStats(); - } else { - throw error; - } - } - } else { - this.stats = makeDefaultStats(); - } - } - if (typeof source === `string`) { - if (opts.create) { - this.zipImpl = new ZipImplCls({ buffer: makeEmptyArchive(), readOnly: this.readOnly }); - } else { - this.zipImpl = new ZipImplCls({ path: source, baseFs: this.baseFs, readOnly: this.readOnly, size: this.stats.size }); - } - } else { - this.zipImpl = new ZipImplCls({ buffer: source ?? makeEmptyArchive(), readOnly: this.readOnly }); - } - this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); - const listings = this.zipImpl.getListings(); - for (let t = 0; t < listings.length; t++) { - const raw = listings[t]; - if (ppath.isAbsolute(raw)) - continue; - const p = ppath.resolve(PortablePath.root, raw); - this.registerEntry(p, t); - if (raw.endsWith(`/`)) { - this.registerListing(p); - } - } - this.symlinkCount = this.zipImpl.getSymlinkCount(); - this.ready = true; - } - getExtractHint(hints) { - for (const fileName of this.entries.keys()) { - const ext = this.pathUtils.extname(fileName); - if (hints.relevantExtensions.has(ext)) { - return true; - } - } - return false; - } - getAllFiles() { - return Array.from(this.entries.keys()); - } - getRealPath() { - if (!this.path) - throw new Error(`ZipFS don't have real paths when loaded from a buffer`); - return this.path; - } - prepareClose() { - if (!this.ready) - throw EBUSY(`archive closed, close`); - unwatchAllFiles(this); - } - getBufferAndClose() { - this.prepareClose(); - if (this.entries.size === 0) { - this.discardAndClose(); - return makeEmptyArchive(); - } - try { - return this.zipImpl.getBufferAndClose(); - } finally { - this.ready = false; - } - } - discardAndClose() { - this.prepareClose(); - this.zipImpl.discard(); - this.ready = false; - } - saveAndClose() { - if (!this.path || !this.baseFs) - throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`); - if (this.readOnly) { - this.discardAndClose(); - return; - } - const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode; - this.baseFs.writeFileSync(this.path, this.getBufferAndClose(), { mode: newMode }); - this.ready = false; - } - resolve(p) { - return ppath.resolve(PortablePath.root, p); - } - async openPromise(p, flags, mode) { - return this.openSync(p, flags, mode); - } - openSync(p, flags, mode) { - const fd = this.nextFd++; - this.fds.set(fd, { cursor: 0, p }); - return fd; - } - hasOpenFileHandles() { - return !!this.fds.size; - } - async opendirPromise(p, opts) { - return this.opendirSync(p, opts); - } - opendirSync(p, opts = {}) { - const resolvedP = this.resolveFilename(`opendir '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`opendir '${p}'`); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`opendir '${p}'`); - const entries = [...directoryListing]; - const fd = this.openSync(resolvedP, `r`); - const onClose = () => { - this.closeSync(fd); - }; - return opendir(this, resolvedP, entries, { onClose }); - } - async readPromise(fd, buffer, offset, length, position) { - return this.readSync(fd, buffer, offset, length, position); - } - readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - const realPosition = position === -1 || position === null ? entry.cursor : position; - const source = this.readFileSync(entry.p); - source.copy(buffer, offset, realPosition, realPosition + length); - const bytesRead = Math.max(0, Math.min(source.length - realPosition, length)); - if (position === -1 || position === null) - entry.cursor += bytesRead; - return bytesRead; - } - async writePromise(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.writeSync(fd, buffer, position); - } else { - return this.writeSync(fd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - throw new Error(`Unimplemented`); - } - async closePromise(fd) { - return this.closeSync(fd); - } - closeSync(fd) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`read`); - this.fds.delete(fd); - } - createReadStream(p, { encoding } = {}) { - if (p === null) - throw new Error(`Unimplemented`); - const fd = this.openSync(p, `r`); - const stream$1 = Object.assign( - new stream.PassThrough({ - emitClose: true, - autoDestroy: true, - destroy: (error, callback) => { - clearImmediate(immediate); - this.closeSync(fd); - callback(error); - } - }), - { - close() { - stream$1.destroy(); - }, - bytesRead: 0, - path: p, - // "This property is `true` if the underlying file has not been opened yet" - pending: false - } - ); - const immediate = setImmediate(async () => { - try { - const data = await this.readFilePromise(p, encoding); - stream$1.bytesRead = data.length; - stream$1.end(data); - } catch (error) { - stream$1.destroy(error); - } - }); - return stream$1; - } - createWriteStream(p, { encoding } = {}) { - if (this.readOnly) - throw EROFS(`open '${p}'`); - if (p === null) - throw new Error(`Unimplemented`); - const chunks = []; - const fd = this.openSync(p, `w`); - const stream$1 = Object.assign( - new stream.PassThrough({ - autoDestroy: true, - emitClose: true, - destroy: (error, callback) => { - try { - if (error) { - callback(error); - } else { - this.writeFileSync(p, Buffer.concat(chunks), encoding); - callback(null); - } - } catch (err) { - callback(err); - } finally { - this.closeSync(fd); - } - } - }), - { - close() { - stream$1.destroy(); - }, - bytesWritten: 0, - path: p, - // "This property is `true` if the underlying file has not been opened yet" - pending: false - } - ); - stream$1.on(`data`, (chunk) => { - const chunkBuffer = Buffer.from(chunk); - stream$1.bytesWritten += chunkBuffer.length; - chunks.push(chunkBuffer); - }); - return stream$1; - } - async realpathPromise(p) { - return this.realpathSync(p); - } - realpathSync(p) { - const resolvedP = this.resolveFilename(`lstat '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`lstat '${p}'`); - return resolvedP; - } - async existsPromise(p) { - return this.existsSync(p); - } - existsSync(p) { - if (!this.ready) - throw EBUSY(`archive closed, existsSync '${p}'`); - if (this.symlinkCount === 0) { - const resolvedP2 = ppath.resolve(PortablePath.root, p); - return this.entries.has(resolvedP2) || this.listings.has(resolvedP2); - } - let resolvedP; - try { - resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false); - } catch { - return false; - } - if (resolvedP === void 0) - return false; - return this.entries.has(resolvedP) || this.listings.has(resolvedP); - } - async accessPromise(p, mode) { - return this.accessSync(p, mode); - } - accessSync(p, mode = fs.constants.F_OK) { - const resolvedP = this.resolveFilename(`access '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`access '${p}'`); - if (this.readOnly && mode & fs.constants.W_OK) { - throw EROFS(`access '${p}'`); - } - } - async statPromise(p, opts = { bigint: false }) { - if (opts.bigint) - return this.statSync(p, { bigint: true }); - return this.statSync(p); - } - statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { - const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry); - if (resolvedP === void 0) - return void 0; - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { - if (opts.throwIfNoEntry === false) - return void 0; - throw ENOENT(`stat '${p}'`); - } - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`stat '${p}'`); - return this.statImpl(`stat '${p}'`, resolvedP, opts); - } - async fstatPromise(fd, opts) { - return this.fstatSync(fd, opts); - } - fstatSync(fd, opts) { - const entry = this.fds.get(fd); - if (typeof entry === `undefined`) - throw EBADF(`fstatSync`); - const { p } = entry; - const resolvedP = this.resolveFilename(`stat '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`stat '${p}'`); - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`stat '${p}'`); - return this.statImpl(`fstat '${p}'`, resolvedP, opts); - } - async lstatPromise(p, opts = { bigint: false }) { - if (opts.bigint) - return this.lstatSync(p, { bigint: true }); - return this.lstatSync(p); - } - lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { - const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry); - if (resolvedP === void 0) - return void 0; - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { - if (opts.throwIfNoEntry === false) - return void 0; - throw ENOENT(`lstat '${p}'`); - } - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`lstat '${p}'`); - return this.statImpl(`lstat '${p}'`, resolvedP, opts); - } - statImpl(reason, p, opts = {}) { - const entry = this.entries.get(p); - if (typeof entry !== `undefined`) { - const stat = this.zipImpl.stat(entry); - const crc = stat.crc; - const size = stat.size; - const mtimeMs = stat.mtime * 1e3; - const uid = this.stats.uid; - const gid = this.stats.gid; - const blksize = 512; - const blocks = Math.ceil(stat.size / blksize); - const atimeMs = mtimeMs; - const birthtimeMs = mtimeMs; - const ctimeMs = mtimeMs; - const atime = new Date(atimeMs); - const birthtime = new Date(birthtimeMs); - const ctime = new Date(ctimeMs); - const mtime = new Date(mtimeMs); - const type = this.listings.has(p) ? fs.constants.S_IFDIR : this.isSymbolicLink(entry) ? fs.constants.S_IFLNK : fs.constants.S_IFREG; - const defaultMode = type === fs.constants.S_IFDIR ? 493 : 420; - const mode = type | this.getUnixMode(entry, defaultMode) & 511; - const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); - return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; - } - if (this.listings.has(p)) { - const uid = this.stats.uid; - const gid = this.stats.gid; - const size = 0; - const blksize = 512; - const blocks = 0; - const atimeMs = this.stats.mtimeMs; - const birthtimeMs = this.stats.mtimeMs; - const ctimeMs = this.stats.mtimeMs; - const mtimeMs = this.stats.mtimeMs; - const atime = new Date(atimeMs); - const birthtime = new Date(birthtimeMs); - const ctime = new Date(ctimeMs); - const mtime = new Date(mtimeMs); - const mode = fs.constants.S_IFDIR | 493; - const crc = 0; - const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); - return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; - } - throw new Error(`Unreachable`); - } - getUnixMode(index, defaultMode) { - const [opsys, attributes] = this.zipImpl.getExternalAttributes(index); - if (opsys !== ZIP_UNIX) - return defaultMode; - return attributes >>> 16; - } - registerListing(p) { - const existingListing = this.listings.get(p); - if (existingListing) - return existingListing; - const parentListing = this.registerListing(ppath.dirname(p)); - parentListing.add(ppath.basename(p)); - const newListing = /* @__PURE__ */ new Set(); - this.listings.set(p, newListing); - return newListing; - } - registerEntry(p, index) { - const parentListing = this.registerListing(ppath.dirname(p)); - parentListing.add(ppath.basename(p)); - this.entries.set(p, index); - } - unregisterListing(p) { - this.listings.delete(p); - const parentListing = this.listings.get(ppath.dirname(p)); - parentListing?.delete(ppath.basename(p)); - } - unregisterEntry(p) { - this.unregisterListing(p); - const entry = this.entries.get(p); - this.entries.delete(p); - if (typeof entry === `undefined`) - return; - this.fileSources.delete(entry); - if (this.isSymbolicLink(entry)) { - this.symlinkCount--; - } - } - deleteEntry(p, index) { - this.unregisterEntry(p); - this.zipImpl.deleteEntry(index); - } - resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { - if (!this.ready) - throw EBUSY(`archive closed, ${reason}`); - let resolvedP = ppath.resolve(PortablePath.root, p); - if (resolvedP === `/`) - return PortablePath.root; - const fileIndex = this.entries.get(resolvedP); - if (resolveLastComponent && fileIndex !== void 0) { - if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { - const target = this.getFileSource(fileIndex).toString(); - return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry); - } else { - return resolvedP; - } - } - while (true) { - const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry); - if (parentP === void 0) - return parentP; - const isDir = this.listings.has(parentP); - const doesExist = this.entries.has(parentP); - if (!isDir && !doesExist) { - if (throwIfNoEntry === false) - return void 0; - throw ENOENT(reason); - } - if (!isDir) - throw ENOTDIR(reason); - resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); - if (!resolveLastComponent || this.symlinkCount === 0) - break; - const index = this.zipImpl.locate(resolvedP.slice(1)); - if (index === -1) - break; - if (this.isSymbolicLink(index)) { - const target = this.getFileSource(index).toString(); - resolvedP = ppath.resolve(ppath.dirname(resolvedP), target); - } else { - break; - } - } - return resolvedP; - } - setFileSource(p, content) { - const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); - const target = ppath.relative(PortablePath.root, p); - let compression = null; - if (this.level !== `mixed`) { - const method = this.level === 0 ? STORE : DEFLATE; - compression = [method, this.level]; - } - const newIndex = this.zipImpl.setFileSource(target, compression, buffer); - this.fileSources.set(newIndex, buffer); - return newIndex; - } - isSymbolicLink(index) { - if (this.symlinkCount === 0) - return false; - const [opsys, attrs] = this.zipImpl.getExternalAttributes(index); - if (opsys !== ZIP_UNIX) - return false; - const attributes = attrs >>> 16; - return (attributes & fs.constants.S_IFMT) === fs.constants.S_IFLNK; - } - getFileSource(index, opts = { asyncDecompress: false }) { - const cachedFileSource = this.fileSources.get(index); - if (typeof cachedFileSource !== `undefined`) - return cachedFileSource; - const { data, compressionMethod } = this.zipImpl.getFileSource(index); - if (compressionMethod === STORE) { - if (this.zipImpl.filesShouldBeCached) - this.fileSources.set(index, data); - return data; - } else if (compressionMethod === DEFLATE) { - if (opts.asyncDecompress) { - return new Promise((resolve, reject) => { - zlib__default.default.inflateRaw(data, (error, result) => { - if (error) { - reject(error); - } else { - if (this.zipImpl.filesShouldBeCached) - this.fileSources.set(index, result); - resolve(result); - } - }); - }); - } else { - const decompressedData = zlib__default.default.inflateRawSync(data); - if (this.zipImpl.filesShouldBeCached) - this.fileSources.set(index, decompressedData); - return decompressedData; - } - } else { - throw new Error(`Unsupported compression method: ${compressionMethod}`); - } - } - async fchmodPromise(fd, mask) { - return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask); - } - fchmodSync(fd, mask) { - return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask); - } - async chmodPromise(p, mask) { - return this.chmodSync(p, mask); - } - chmodSync(p, mask) { - if (this.readOnly) - throw EROFS(`chmod '${p}'`); - mask &= 493; - const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); - const entry = this.entries.get(resolvedP); - if (typeof entry === `undefined`) - throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); - const oldMod = this.getUnixMode(entry, fs.constants.S_IFREG | 0); - const newMod = oldMod & ~511 | mask; - this.zipImpl.setExternalAttributes(entry, ZIP_UNIX, newMod << 16); - } - async fchownPromise(fd, uid, gid) { - return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); - } - fchownSync(fd, uid, gid) { - return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid); - } - async chownPromise(p, uid, gid) { - return this.chownSync(p, uid, gid); - } - chownSync(p, uid, gid) { - throw new Error(`Unimplemented`); - } - async renamePromise(oldP, newP) { - return this.renameSync(oldP, newP); - } - renameSync(oldP, newP) { - throw new Error(`Unimplemented`); - } - async copyFilePromise(sourceP, destP, flags) { - const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); - const source = await this.getFileSource(indexSource, { asyncDecompress: true }); - const newIndex = this.setFileSource(resolvedDestP, source); - if (newIndex !== indexDest) { - this.registerEntry(resolvedDestP, newIndex); - } - } - copyFileSync(sourceP, destP, flags = 0) { - const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); - const source = this.getFileSource(indexSource); - const newIndex = this.setFileSource(resolvedDestP, source); - if (newIndex !== indexDest) { - this.registerEntry(resolvedDestP, newIndex); - } - } - prepareCopyFile(sourceP, destP, flags = 0) { - if (this.readOnly) - throw EROFS(`copyfile '${sourceP} -> '${destP}'`); - if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) - throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`); - const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); - const indexSource = this.entries.get(resolvedSourceP); - if (typeof indexSource === `undefined`) - throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`); - const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); - const indexDest = this.entries.get(resolvedDestP); - if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) - throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`); - return { - indexSource, - resolvedDestP, - indexDest - }; - } - async appendFilePromise(p, content, opts) { - if (this.readOnly) - throw EROFS(`open '${p}'`); - if (typeof opts === `undefined`) - opts = { flag: `a` }; - else if (typeof opts === `string`) - opts = { flag: `a`, encoding: opts }; - else if (typeof opts.flag === `undefined`) - opts = { flag: `a`, ...opts }; - return this.writeFilePromise(p, content, opts); - } - appendFileSync(p, content, opts = {}) { - if (this.readOnly) - throw EROFS(`open '${p}'`); - if (typeof opts === `undefined`) - opts = { flag: `a` }; - else if (typeof opts === `string`) - opts = { flag: `a`, encoding: opts }; - else if (typeof opts.flag === `undefined`) - opts = { flag: `a`, ...opts }; - return this.writeFileSync(p, content, opts); - } - fdToPath(fd, reason) { - const path = this.fds.get(fd)?.p; - if (typeof path === `undefined`) - throw EBADF(reason); - return path; - } - async writeFilePromise(p, content, opts) { - const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); - if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) - content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]); - if (encoding !== null) - content = content.toString(encoding); - const newIndex = this.setFileSource(resolvedP, content); - if (newIndex !== index) - this.registerEntry(resolvedP, newIndex); - if (mode !== null) { - await this.chmodPromise(resolvedP, mode); - } - } - writeFileSync(p, content, opts) { - const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); - if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) - content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); - if (encoding !== null) - content = content.toString(encoding); - const newIndex = this.setFileSource(resolvedP, content); - if (newIndex !== index) - this.registerEntry(resolvedP, newIndex); - if (mode !== null) { - this.chmodSync(resolvedP, mode); - } - } - prepareWriteFile(p, opts) { - if (typeof p === `number`) - p = this.fdToPath(p, `read`); - if (this.readOnly) - throw EROFS(`open '${p}'`); - const resolvedP = this.resolveFilename(`open '${p}'`, p); - if (this.listings.has(resolvedP)) - throw EISDIR(`open '${p}'`); - let encoding = null, mode = null; - if (typeof opts === `string`) { - encoding = opts; - } else if (typeof opts === `object`) { - ({ - encoding = null, - mode = null - } = opts); - } - const index = this.entries.get(resolvedP); - return { - encoding, - mode, - resolvedP, - index - }; - } - async unlinkPromise(p) { - return this.unlinkSync(p); - } - unlinkSync(p) { - if (this.readOnly) - throw EROFS(`unlink '${p}'`); - const resolvedP = this.resolveFilename(`unlink '${p}'`, p); - if (this.listings.has(resolvedP)) - throw EISDIR(`unlink '${p}'`); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`unlink '${p}'`); - this.deleteEntry(resolvedP, index); - } - async utimesPromise(p, atime, mtime) { - return this.utimesSync(p, atime, mtime); - } - utimesSync(p, atime, mtime) { - if (this.readOnly) - throw EROFS(`utimes '${p}'`); - const resolvedP = this.resolveFilename(`utimes '${p}'`, p); - this.utimesImpl(resolvedP, mtime); - } - async lutimesPromise(p, atime, mtime) { - return this.lutimesSync(p, atime, mtime); - } - lutimesSync(p, atime, mtime) { - if (this.readOnly) - throw EROFS(`lutimes '${p}'`); - const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false); - this.utimesImpl(resolvedP, mtime); - } - utimesImpl(resolvedP, mtime) { - if (this.listings.has(resolvedP)) { - if (!this.entries.has(resolvedP)) - this.hydrateDirectory(resolvedP); - } - const entry = this.entries.get(resolvedP); - if (entry === void 0) - throw new Error(`Unreachable`); - this.zipImpl.setMtime(entry, toUnixTimestamp(mtime)); - } - async mkdirPromise(p, opts) { - return this.mkdirSync(p, opts); - } - mkdirSync(p, { mode = 493, recursive = false } = {}) { - if (recursive) - return this.mkdirpSync(p, { chmod: mode }); - if (this.readOnly) - throw EROFS(`mkdir '${p}'`); - const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); - if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) - throw EEXIST(`mkdir '${p}'`); - this.hydrateDirectory(resolvedP); - this.chmodSync(resolvedP, mode); - return void 0; - } - async rmdirPromise(p, opts) { - return this.rmdirSync(p, opts); - } - rmdirSync(p, { recursive = false } = {}) { - if (this.readOnly) - throw EROFS(`rmdir '${p}'`); - if (recursive) { - this.removeSync(p); - return; - } - const resolvedP = this.resolveFilename(`rmdir '${p}'`, p); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`rmdir '${p}'`); - if (directoryListing.size > 0) - throw ENOTEMPTY(`rmdir '${p}'`); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`rmdir '${p}'`); - this.deleteEntry(p, index); - } - async rmPromise(p, opts) { - return this.rmSync(p, opts); - } - rmSync(p, { recursive = false } = {}) { - if (this.readOnly) - throw EROFS(`rm '${p}'`); - if (recursive) { - this.removeSync(p); - return; - } - const resolvedP = this.resolveFilename(`rm '${p}'`, p); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`rm '${p}'`); - if (directoryListing.size > 0) - throw ENOTEMPTY(`rm '${p}'`); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`rm '${p}'`); - this.deleteEntry(p, index); - } - hydrateDirectory(resolvedP) { - const index = this.zipImpl.addDirectory(ppath.relative(PortablePath.root, resolvedP)); - this.registerListing(resolvedP); - this.registerEntry(resolvedP, index); - return index; - } - async linkPromise(existingP, newP) { - return this.linkSync(existingP, newP); - } - linkSync(existingP, newP) { - throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`); - } - async symlinkPromise(target, p) { - return this.symlinkSync(target, p); - } - symlinkSync(target, p) { - if (this.readOnly) - throw EROFS(`symlink '${target}' -> '${p}'`); - const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); - if (this.listings.has(resolvedP)) - throw EISDIR(`symlink '${target}' -> '${p}'`); - if (this.entries.has(resolvedP)) - throw EEXIST(`symlink '${target}' -> '${p}'`); - const index = this.setFileSource(resolvedP, target); - this.registerEntry(resolvedP, index); - this.zipImpl.setExternalAttributes(index, ZIP_UNIX, (fs.constants.S_IFLNK | 511) << 16); - this.symlinkCount += 1; - } - async readFilePromise(p, encoding) { - if (typeof encoding === `object`) - encoding = encoding ? encoding.encoding : void 0; - const data = await this.readFileBuffer(p, { asyncDecompress: true }); - return encoding ? data.toString(encoding) : data; - } - readFileSync(p, encoding) { - if (typeof encoding === `object`) - encoding = encoding ? encoding.encoding : void 0; - const data = this.readFileBuffer(p); - return encoding ? data.toString(encoding) : data; - } - readFileBuffer(p, opts = { asyncDecompress: false }) { - if (typeof p === `number`) - p = this.fdToPath(p, `read`); - const resolvedP = this.resolveFilename(`open '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`open '${p}'`); - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`open '${p}'`); - if (this.listings.has(resolvedP)) - throw EISDIR(`read`); - const entry = this.entries.get(resolvedP); - if (entry === void 0) - throw new Error(`Unreachable`); - return this.getFileSource(entry, opts); - } - async readdirPromise(p, opts) { - return this.readdirSync(p, opts); - } - readdirSync(p, opts) { - const resolvedP = this.resolveFilename(`scandir '${p}'`, p); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`scandir '${p}'`); - const directoryListing = this.listings.get(resolvedP); - if (!directoryListing) - throw ENOTDIR(`scandir '${p}'`); - if (opts?.recursive) { - if (opts?.withFileTypes) { - const entries = Array.from(directoryListing, (name) => { - return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { - name, - path: PortablePath.dot, - parentPath: PortablePath.dot - }); - }); - for (const entry of entries) { - if (!entry.isDirectory()) - continue; - const subPath = ppath.join(entry.path, entry.name); - const subListing = this.listings.get(ppath.join(resolvedP, subPath)); - for (const child of subListing) { - entries.push(Object.assign(this.statImpl(`lstat`, ppath.join(p, subPath, child)), { - name: child, - path: subPath, - parentPath: subPath - })); - } - } - return entries; - } else { - const entries = [...directoryListing]; - for (const subPath of entries) { - const subListing = this.listings.get(ppath.join(resolvedP, subPath)); - if (typeof subListing === `undefined`) - continue; - for (const child of subListing) { - entries.push(ppath.join(subPath, child)); - } - } - return entries; - } - } else if (opts?.withFileTypes) { - return Array.from(directoryListing, (name) => { - return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { - name, - path: void 0, - parentPath: void 0 - }); - }); - } else { - return [...directoryListing]; - } - } - async readlinkPromise(p) { - const entry = this.prepareReadlink(p); - return (await this.getFileSource(entry, { asyncDecompress: true })).toString(); - } - readlinkSync(p) { - const entry = this.prepareReadlink(p); - return this.getFileSource(entry).toString(); - } - prepareReadlink(p) { - const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); - if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) - throw ENOENT(`readlink '${p}'`); - if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) - throw ENOTDIR(`open '${p}'`); - if (this.listings.has(resolvedP)) - throw EINVAL(`readlink '${p}'`); - const entry = this.entries.get(resolvedP); - if (entry === void 0) - throw new Error(`Unreachable`); - if (!this.isSymbolicLink(entry)) - throw EINVAL(`readlink '${p}'`); - return entry; - } - async truncatePromise(p, len = 0) { - const resolvedP = this.resolveFilename(`open '${p}'`, p); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`open '${p}'`); - const source = await this.getFileSource(index, { asyncDecompress: true }); - const truncated = Buffer.alloc(len, 0); - source.copy(truncated); - return await this.writeFilePromise(p, truncated); - } - truncateSync(p, len = 0) { - const resolvedP = this.resolveFilename(`open '${p}'`, p); - const index = this.entries.get(resolvedP); - if (typeof index === `undefined`) - throw EINVAL(`open '${p}'`); - const source = this.getFileSource(index); - const truncated = Buffer.alloc(len, 0); - source.copy(truncated); - return this.writeFileSync(p, truncated); - } - async ftruncatePromise(fd, len) { - return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len); - } - ftruncateSync(fd, len) { - return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len); - } - watch(p, a, b) { - let persistent; - switch (typeof a) { - case `function`: - case `string`: - case `undefined`: - { - persistent = true; - } - break; - default: - { - ({ persistent = true } = a); - } - break; - } - if (!persistent) - return { on: () => { - }, close: () => { - } }; - const interval = setInterval(() => { - }, 24 * 60 * 60 * 1e3); - return { - on: () => { - }, - close: () => { - clearInterval(interval); - } - }; - } - watchFile(p, a, b) { - const resolvedP = ppath.resolve(PortablePath.root, p); - return watchFile(this, resolvedP, a, b); - } - unwatchFile(p, cb) { - const resolvedP = ppath.resolve(PortablePath.root, p); - return unwatchFile(this, resolvedP, cb); - } -} - -const SIGNATURE = { - CENTRAL_DIRECTORY: 33639248, - END_OF_CENTRAL_DIRECTORY: 101010256 -}; -const noCommentCDSize = 22; -class JsZipImpl { - fd; - baseFs; - entries; - filesShouldBeCached = false; - constructor(opts) { - if (`buffer` in opts) - throw new Error(`Buffer based zip archives are not supported`); - if (!opts.readOnly) - throw new Error(`Writable zip archives are not supported`); - this.baseFs = opts.baseFs; - this.fd = this.baseFs.openSync(opts.path, `r`); - try { - this.entries = JsZipImpl.readZipSync(this.fd, this.baseFs, opts.size); - } catch (error) { - this.baseFs.closeSync(this.fd); - this.fd = `closed`; - throw error; - } - } - static readZipSync(fd, baseFs, fileSize) { - if (fileSize < noCommentCDSize) - throw new Error(`Invalid ZIP file: EOCD not found`); - let eocdOffset = -1; - let eocdBuffer = Buffer.alloc(noCommentCDSize); - baseFs.readSync( - fd, - eocdBuffer, - 0, - noCommentCDSize, - fileSize - noCommentCDSize - ); - if (eocdBuffer.readUInt32LE(0) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { - eocdOffset = 0; - } else { - const bufferSize = Math.min(65557, fileSize); - eocdBuffer = Buffer.alloc(bufferSize); - baseFs.readSync( - fd, - eocdBuffer, - 0, - bufferSize, - Math.max(0, fileSize - bufferSize) - ); - for (let i = eocdBuffer.length - 4; i >= 0; i--) { - if (eocdBuffer.readUInt32LE(i) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { - eocdOffset = i; - break; - } - } - if (eocdOffset === -1) { - throw new Error(`Not a zip archive`); - } - } - const totalEntries = eocdBuffer.readUInt16LE(eocdOffset + 10); - const centralDirSize = eocdBuffer.readUInt32LE(eocdOffset + 12); - const centralDirOffset = eocdBuffer.readUInt32LE(eocdOffset + 16); - const commentLength = eocdBuffer.readUInt16LE(eocdOffset + 20); - if (eocdOffset + commentLength + noCommentCDSize > eocdBuffer.length) - throw new Error(`Zip archive inconsistent`); - if (totalEntries == 65535 || centralDirSize == 4294967295 || centralDirOffset == 4294967295) - throw new Error(`Zip 64 is not supported`); - if (centralDirSize > fileSize) - throw new Error(`Zip archive inconsistent`); - if (totalEntries > centralDirSize / 46) - throw new Error(`Zip archive inconsistent`); - const cdBuffer = Buffer.alloc(centralDirSize); - if (baseFs.readSync(fd, cdBuffer, 0, cdBuffer.length, centralDirOffset) !== cdBuffer.length) - throw new Error(`Zip archive inconsistent`); - const entries = []; - let offset = 0; - let index = 0; - let sumCompressedSize = 0; - while (index < totalEntries) { - if (offset + 46 > cdBuffer.length) - throw new Error(`Zip archive inconsistent`); - if (cdBuffer.readUInt32LE(offset) !== SIGNATURE.CENTRAL_DIRECTORY) - throw new Error(`Zip archive inconsistent`); - const versionMadeBy = cdBuffer.readUInt16LE(offset + 4); - const os = versionMadeBy >>> 8; - const flags = cdBuffer.readUInt16LE(offset + 8); - if ((flags & 1) !== 0) - throw new Error(`Encrypted zip files are not supported`); - const compressionMethod = cdBuffer.readUInt16LE(offset + 10); - const crc = cdBuffer.readUInt32LE(offset + 16); - const nameLength = cdBuffer.readUInt16LE(offset + 28); - const extraLength = cdBuffer.readUInt16LE(offset + 30); - const commentLength2 = cdBuffer.readUInt16LE(offset + 32); - const localHeaderOffset = cdBuffer.readUInt32LE(offset + 42); - const name = cdBuffer.toString(`utf8`, offset + 46, offset + 46 + nameLength).replaceAll(`\0`, ` `); - if (name.includes(`\0`)) - throw new Error(`Invalid ZIP file`); - const compressedSize = cdBuffer.readUInt32LE(offset + 20); - const externalAttributes = cdBuffer.readUInt32LE(offset + 38); - entries.push({ - name, - os, - mtime: SAFE_TIME, - //we dont care, - crc, - compressionMethod, - isSymbolicLink: os === ZIP_UNIX && (externalAttributes >>> 16 & S_IFMT) === S_IFLNK, - size: cdBuffer.readUInt32LE(offset + 24), - compressedSize, - externalAttributes, - localHeaderOffset - }); - sumCompressedSize += compressedSize; - index += 1; - offset += 46 + nameLength + extraLength + commentLength2; - } - if (sumCompressedSize > fileSize) - throw new Error(`Zip archive inconsistent`); - if (offset !== cdBuffer.length) - throw new Error(`Zip archive inconsistent`); - return entries; - } - getExternalAttributes(index) { - const entry = this.entries[index]; - return [entry.os, entry.externalAttributes]; - } - getListings() { - return this.entries.map((e) => e.name); - } - getSymlinkCount() { - let count = 0; - for (const entry of this.entries) - if (entry.isSymbolicLink) - count += 1; - return count; - } - stat(index) { - const entry = this.entries[index]; - return { - crc: entry.crc, - mtime: entry.mtime, - size: entry.size - }; - } - locate(name) { - for (let ind = 0; ind < this.entries.length; ind++) - if (this.entries[ind].name === name) - return ind; - return -1; - } - getFileSource(index) { - if (this.fd === `closed`) - throw new Error(`ZIP file is closed`); - const entry = this.entries[index]; - const localHeaderBuf = Buffer.alloc(30); - this.baseFs.readSync( - this.fd, - localHeaderBuf, - 0, - localHeaderBuf.length, - entry.localHeaderOffset - ); - const nameLength = localHeaderBuf.readUInt16LE(26); - const extraLength = localHeaderBuf.readUInt16LE(28); - const buffer = Buffer.alloc(entry.compressedSize); - if (this.baseFs.readSync(this.fd, buffer, 0, entry.compressedSize, entry.localHeaderOffset + 30 + nameLength + extraLength) !== entry.compressedSize) - throw new Error(`Invalid ZIP file`); - return { data: buffer, compressionMethod: entry.compressionMethod }; - } - discard() { - if (this.fd !== `closed`) { - this.baseFs.closeSync(this.fd); - this.fd = `closed`; - } - } - addDirectory(path) { - throw new Error(`Not implemented`); - } - deleteEntry(index) { - throw new Error(`Not implemented`); - } - setMtime(index, mtime) { - throw new Error(`Not implemented`); - } - getBufferAndClose() { - throw new Error(`Not implemented`); - } - setFileSource(target, compression, buffer) { - throw new Error(`Not implemented`); - } - setExternalAttributes(index, opsys, attributes) { - throw new Error(`Not implemented`); - } -} - -setFactory(() => { - const emZip = createModule(); - return makeInterface(emZip); -}); - -var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => { - ErrorCode2["API_ERROR"] = `API_ERROR`; - ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`; - ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`; - ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`; - ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`; - ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`; - ErrorCode2["INTERNAL"] = `INTERNAL`; - ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`; - ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`; - return ErrorCode2; -})(ErrorCode || {}); -const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ - "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */, - "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */, - "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */, - "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */, - "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */ -]); -function makeError(pnpCode, message, data = {}, code) { - code ??= MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode; - const propertySpec = { - configurable: true, - writable: true, - enumerable: false - }; - return Object.defineProperties(new Error(message), { - code: { - ...propertySpec, - value: code - }, - pnpCode: { - ...propertySpec, - value: pnpCode - }, - data: { - ...propertySpec, - value: data - } - }); -} -function getIssuerModule(parent) { - let issuer = parent; - while (issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename)) - issuer = issuer.parent; - return issuer || null; -} -function getPathForDisplay(p) { - return npath.normalize(npath.fromPortablePath(p)); -} - -const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); -const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; - -function readPackageScope(checkPath) { - const rootSeparatorIndex = checkPath.indexOf(npath.sep); - let separatorIndex; - do { - separatorIndex = checkPath.lastIndexOf(npath.sep); - checkPath = checkPath.slice(0, separatorIndex); - if (checkPath.endsWith(`${npath.sep}node_modules`)) - return false; - const pjson = readPackage(checkPath + npath.sep); - if (pjson) { - return { - data: pjson, - path: checkPath - }; - } - } while (separatorIndex > rootSeparatorIndex); - return false; -} -function readPackage(requestPath) { - const jsonPath = npath.resolve(requestPath, `package.json`); - if (!fs__default.default.existsSync(jsonPath)) - return null; - return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)); -} -function ERR_REQUIRE_ESM(filename, parentPath = null) { - const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename); - const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. -Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`; - const err = new Error(msg); - err.code = `ERR_REQUIRE_ESM`; - return err; -} -function reportRequiredFilesToWatchMode(paths) { - if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { - const files = paths.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(filename))); - if (WATCH_MODE_MESSAGE_USES_ARRAYS) { - process.send({ "watch:require": files }); - } else { - for (const filename of files) { - process.send({ "watch:require": filename }); - } - } - } -} - -function applyPatch(pnpapi, opts) { - let enableNativeHooks = true; - process.versions.pnp = String(pnpapi.VERSIONS.std); - const moduleExports = require$$0__default.default; - moduleExports.findPnpApi = (lookupSource) => { - const lookupPath = lookupSource instanceof URL ? url.fileURLToPath(lookupSource) : lookupSource; - const apiPath = opts.manager.findApiPathFor(lookupPath); - if (apiPath === null) - return null; - const apiEntry = opts.manager.getApiEntry(apiPath, true); - return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null; - }; - function getRequireStack(parent) { - const requireStack = []; - for (let cursor = parent; cursor; cursor = cursor.parent) - requireStack.push(cursor.filename || cursor.id); - return requireStack; - } - const originalModuleLoad = require$$0.Module._load; - require$$0.Module._load = function(request, parent, isMain) { - if (request === `pnpapi`) { - const parentApiPath = opts.manager.getApiPathFromParent(parent); - if (parentApiPath) { - return opts.manager.getApiEntry(parentApiPath, true).instance; - } - } - return originalModuleLoad.call(require$$0.Module, request, parent, isMain); - }; - function getIssuerSpecsFromPaths(paths) { - return paths.map((path) => ({ - apiPath: opts.manager.findApiPathFor(path), - path, - module: null - })); - } - function getIssuerSpecsFromModule(module) { - if (module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) { - return [{ - apiPath: opts.manager.findApiPathFor(module.paths[0]), - path: module.paths[0], - module - }]; - } - const issuer = getIssuerModule(module); - if (issuer !== null) { - const path = npath.dirname(issuer.filename); - const apiPath = opts.manager.getApiPathFromParent(issuer); - return [{ apiPath, path, module }]; - } else { - const path = process.cwd(); - const apiPath = opts.manager.findApiPathFor(npath.join(path, `[file]`)) ?? opts.manager.getApiPathFromParent(null); - return [{ apiPath, path, module }]; - } - } - function makeFakeParent(path) { - const fakeParent = new require$$0.Module(``); - const fakeFilePath = npath.join(path, `[file]`); - fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath); - return fakeParent; - } - const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; - const originalModuleResolveFilename = require$$0.Module._resolveFilename; - require$$0.Module._resolveFilename = function(request, parent, isMain, options) { - if (require$$0.isBuiltin(request)) - return request; - if (!enableNativeHooks) - return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options); - if (options && options.plugnplay === false) { - const { plugnplay, ...forwardedOptions } = options; - try { - enableNativeHooks = false; - return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions); - } finally { - enableNativeHooks = true; - } - } - if (options) { - const optionNames = new Set(Object.keys(options)); - optionNames.delete(`paths`); - optionNames.delete(`plugnplay`); - optionNames.delete(`conditions`); - if (optionNames.size > 0) { - throw makeError( - ErrorCode.UNSUPPORTED, - `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})` - ); - } - } - const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent); - if (request.match(pathRegExp) === null) { - const parentDirectory = parent?.filename != null ? npath.dirname(parent.filename) : null; - const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null; - if (absoluteRequest !== null) { - const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest); - if (apiPath !== null) { - issuerSpecs.unshift({ - apiPath, - path: parentDirectory, - module: null - }); - } - } - } - let firstError; - for (const { apiPath, path, module } of issuerSpecs) { - let resolution; - const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null; - try { - if (issuerApi !== null) { - resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null, { - conditions: options?.conditions - }); - } else { - if (path === null) - throw new Error(`Assertion failed: Expected the path to be set`); - resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain, { - conditions: options?.conditions - }); - } - } catch (error) { - firstError = firstError || error; - continue; - } - if (resolution !== null) { - return resolution; - } - } - const requireStack = getRequireStack(parent); - Object.defineProperty(firstError, `requireStack`, { - configurable: true, - writable: true, - enumerable: false, - value: requireStack - }); - if (requireStack.length > 0) - firstError.message += ` -Require stack: -- ${requireStack.join(` -- `)}`; - if (typeof firstError.pnpCode === `string`) - Error.captureStackTrace(firstError); - throw firstError; - }; - const originalFindPath = require$$0.Module._findPath; - require$$0.Module._findPath = function(request, paths, isMain) { - if (request === `pnpapi`) - return false; - if (!enableNativeHooks) - return originalFindPath.call(require$$0.Module, request, paths, isMain); - const isAbsolute = npath.isAbsolute(request); - if (isAbsolute) - paths = [``]; - else if (!paths || paths.length === 0) - return false; - for (const path of paths) { - let resolution; - try { - const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path); - if (pnpApiPath !== null) { - const api = opts.manager.getApiEntry(pnpApiPath, true).instance; - resolution = api.resolveRequest(request, path) || false; - } else { - resolution = originalFindPath.call(require$$0.Module, request, [path], isMain); - } - } catch { - continue; - } - if (resolution) { - return resolution; - } - } - return false; - }; - if (!process.features.require_module) { - const originalExtensionJSFunction = require$$0.Module._extensions[`.js`]; - require$$0.Module._extensions[`.js`] = function(module, filename) { - if (filename.endsWith(`.js`)) { - const pkg = readPackageScope(filename); - if (pkg && pkg.data?.type === `module`) { - const err = ERR_REQUIRE_ESM(filename, module.parent?.filename); - Error.captureStackTrace(err); - throw err; - } - } - originalExtensionJSFunction.call(this, module, filename); - }; - } - const originalDlopen = process.dlopen; - process.dlopen = function(...args) { - const [module, filename, ...rest] = args; - return originalDlopen.call( - this, - module, - npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))), - ...rest - ); - }; - const originalEmit = process.emit; - process.emit = function(name, data, ...args) { - if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`))) - return false; - return originalEmit.apply(process, arguments); - }; - patchFs(fs__default.default, new PosixFS(opts.fakeFs)); -} - -function hydrateRuntimeState(data, { basePath }) { - const portablePath = npath.toPortablePath(basePath); - const absolutePortablePath = ppath.resolve(portablePath); - const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null; - const packageLocatorsByLocations = /* @__PURE__ */ new Map(); - const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { - return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { - if (packageName === null !== (packageReference === null)) - throw new Error(`Assertion failed: The name and reference should be null, or neither should`); - const discardFromLookup = packageInformationData.discardFromLookup ?? false; - const packageLocator = { name: packageName, reference: packageReference }; - const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation); - if (!entry) { - packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }); - } else { - entry.discardFromLookup = entry.discardFromLookup && discardFromLookup; - if (!discardFromLookup) { - entry.locator = packageLocator; - } - } - let resolvedPackageLocation = null; - return [packageReference, { - packageDependencies: new Map(packageInformationData.packageDependencies), - packagePeers: new Set(packageInformationData.packagePeers), - linkType: packageInformationData.linkType, - discardFromLookup, - // we only need this for packages that are used by the currently running script - // this is a lazy getter because `ppath.join` has some overhead - get packageLocation() { - return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation)); - } - }]; - }))]; - })); - const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => { - return [packageName, new Set(packageReferences)]; - })); - const fallbackPool = new Map(data.fallbackPool); - const dependencyTreeRoots = data.dependencyTreeRoots; - const enableTopLevelFallback = data.enableTopLevelFallback; - return { - basePath: portablePath, - dependencyTreeRoots, - enableTopLevelFallback, - fallbackExclusionList, - pnpZipBackend: data.pnpZipBackend, - fallbackPool, - ignorePattern, - packageLocatorsByLocations, - packageRegistry - }; -} - -const ArrayIsArray = Array.isArray; -const JSONStringify = JSON.stringify; -const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; -const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); -const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); -const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); -const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); -const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); -const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); -const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); -const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); -const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); -const SafeMap = Map; -const JSONParse = JSON.parse; - -function createErrorType(code, messageCreator, errorType) { - return class extends errorType { - constructor(...args) { - super(messageCreator(...args)); - this.code = code; - this.name = `${errorType.name} [${code}]`; - } - }; -} -const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( - `ERR_PACKAGE_IMPORT_NOT_DEFINED`, - (specifier, packagePath, base) => { - return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; - }, - TypeError -); -const ERR_INVALID_MODULE_SPECIFIER = createErrorType( - `ERR_INVALID_MODULE_SPECIFIER`, - (request, reason, base = void 0) => { - return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; - }, - TypeError -); -const ERR_INVALID_PACKAGE_TARGET = createErrorType( - `ERR_INVALID_PACKAGE_TARGET`, - (pkgPath, key, target, isImport = false, base = void 0) => { - const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); - if (key === `.`) { - assert__default.default(isImport === false); - return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - } - return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( - target - )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - }, - Error -); -const ERR_INVALID_PACKAGE_CONFIG = createErrorType( - `ERR_INVALID_PACKAGE_CONFIG`, - (path, base, message) => { - return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; - }, - Error -); -const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( - "ERR_PACKAGE_PATH_NOT_EXPORTED", - (pkgPath, subpath, base = void 0) => { - if (subpath === ".") - return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; - return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; - }, - Error -); - -function filterOwnProperties(source, keys) { - const filtered = /* @__PURE__ */ Object.create(null); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (ObjectPrototypeHasOwnProperty(source, key)) { - filtered[key] = source[key]; - } - } - return filtered; -} - -const packageJSONCache = new SafeMap(); -function getPackageConfig(path, specifier, base, readFileSyncFn) { - const existing = packageJSONCache.get(path); - if (existing !== void 0) { - return existing; - } - const source = readFileSyncFn(path); - if (source === void 0) { - const packageConfig2 = { - pjsonPath: path, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(path, packageConfig2); - return packageConfig2; - } - let packageJSON; - try { - packageJSON = JSONParse(source); - } catch (error) { - throw new ERR_INVALID_PACKAGE_CONFIG( - path, - (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier), - error.message - ); - } - let { imports, main, name, type } = filterOwnProperties(packageJSON, [ - "imports", - "main", - "name", - "type" - ]); - const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; - if (typeof imports !== "object" || imports === null) { - imports = void 0; - } - if (typeof main !== "string") { - main = void 0; - } - if (typeof name !== "string") { - name = void 0; - } - if (type !== "module" && type !== "commonjs") { - type = "none"; - } - const packageConfig = { - pjsonPath: path, - exists: true, - main, - name, - type, - exports, - imports - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; -} -function getPackageScopeConfig(resolved, readFileSyncFn) { - let packageJSONUrl = new URL("./package.json", resolved); - while (true) { - const packageJSONPath2 = packageJSONUrl.pathname; - if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { - break; - } - const packageConfig2 = getPackageConfig( - url.fileURLToPath(packageJSONUrl), - resolved, - void 0, - readFileSyncFn - ); - if (packageConfig2.exists) { - return packageConfig2; - } - const lastPackageJSONUrl = packageJSONUrl; - packageJSONUrl = new URL("../package.json", packageJSONUrl); - if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { - break; - } - } - const packageJSONPath = url.fileURLToPath(packageJSONUrl); - const packageConfig = { - pjsonPath: packageJSONPath, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(packageJSONPath, packageConfig); - return packageConfig; -} - -function throwImportNotDefined(specifier, packageJSONUrl, base) { - throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( - specifier, - packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)), - url.fileURLToPath(base) - ); -} -function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { - const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`; - throw new ERR_INVALID_MODULE_SPECIFIER( - subpath, - reason, - base && url.fileURLToPath(base) - ); -} -function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { - if (typeof target === "object" && target !== null) { - target = JSONStringify(target, null, ""); - } else { - target = `${target}`; - } - throw new ERR_INVALID_PACKAGE_TARGET( - url.fileURLToPath(new URL(".", packageJSONUrl)), - subpath, - target, - internal, - base && url.fileURLToPath(base) - ); -} -const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; -const patternRegEx = /\*/g; -function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { - if (subpath !== "" && !pattern && target[target.length - 1] !== "/") - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (!StringPrototypeStartsWith(target, "./")) { - if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { - let isURL = false; - try { - new URL(target); - isURL = true; - } catch { - } - if (!isURL) { - const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; - return exportTarget; - } - } - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - } - if (RegExpPrototypeExec( - invalidSegmentRegEx, - StringPrototypeSlice(target, 2) - ) !== null) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - const resolved = new URL(target, packageJSONUrl); - const resolvedPath = resolved.pathname; - const packagePath = new URL(".", packageJSONUrl).pathname; - if (!StringPrototypeStartsWith(resolvedPath, packagePath)) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (subpath === "") return resolved; - if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { - const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; - throwInvalidSubpath(request, packageJSONUrl, internal, base); - } - if (pattern) { - return new URL( - RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) - ); - } - return new URL(subpath, resolved); -} -function isArrayIndex(key) { - const keyNum = +key; - if (`${keyNum}` !== key) return false; - return keyNum >= 0 && keyNum < 4294967295; -} -function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { - if (typeof target === "string") { - return resolvePackageTargetString( - target, - subpath, - packageSubpath, - packageJSONUrl, - base, - pattern, - internal); - } else if (ArrayIsArray(target)) { - if (target.length === 0) { - return null; - } - let lastException; - for (let i = 0; i < target.length; i++) { - const targetItem = target[i]; - let resolveResult; - try { - resolveResult = resolvePackageTarget( - packageJSONUrl, - targetItem, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - } catch (e) { - lastException = e; - if (e.code === "ERR_INVALID_PACKAGE_TARGET") { - continue; - } - throw e; - } - if (resolveResult === void 0) { - continue; - } - if (resolveResult === null) { - lastException = null; - continue; - } - return resolveResult; - } - if (lastException === void 0 || lastException === null) - return lastException; - throw lastException; - } else if (typeof target === "object" && target !== null) { - const keys = ObjectGetOwnPropertyNames(target); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (isArrayIndex(key)) { - throw new ERR_INVALID_PACKAGE_CONFIG( - url.fileURLToPath(packageJSONUrl), - base, - '"exports" cannot contain numeric property keys.' - ); - } - } - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (key === "default" || conditions.has(key)) { - const conditionalTarget = target[key]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - conditionalTarget, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - if (resolveResult === void 0) continue; - return resolveResult; - } - } - return void 0; - } else if (target === null) { - return null; - } - throwInvalidPackageTarget( - packageSubpath, - target, - packageJSONUrl, - internal, - base - ); -} -function patternKeyCompare(a, b) { - const aPatternIndex = StringPrototypeIndexOf(a, "*"); - const bPatternIndex = StringPrototypeIndexOf(b, "*"); - const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; - const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; - if (baseLenA > baseLenB) return -1; - if (baseLenB > baseLenA) return 1; - if (aPatternIndex === -1) return 1; - if (bPatternIndex === -1) return -1; - if (a.length > b.length) return -1; - if (b.length > a.length) return 1; - return 0; -} -function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { - if (typeof exports === "string" || ArrayIsArray(exports)) return true; - if (typeof exports !== "object" || exports === null) return false; - const keys = ObjectGetOwnPropertyNames(exports); - let isConditionalSugar = false; - let i = 0; - for (let j = 0; j < keys.length; j++) { - const key = keys[j]; - const curIsConditionalSugar = key === "" || key[0] !== "."; - if (i++ === 0) { - isConditionalSugar = curIsConditionalSugar; - } else if (isConditionalSugar !== curIsConditionalSugar) { - throw new ERR_INVALID_PACKAGE_CONFIG( - url.fileURLToPath(packageJSONUrl), - base, - `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.` - ); - } - } - return isConditionalSugar; -} -function throwExportsNotFound(subpath, packageJSONUrl, base) { - throw new ERR_PACKAGE_PATH_NOT_EXPORTED( - url.fileURLToPath(new URL(".", packageJSONUrl)), - subpath, - base && url.fileURLToPath(base) - ); -} -const emittedPackageWarnings = /* @__PURE__ */ new Set(); -function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { - const pjsonPath = url.fileURLToPath(pjsonUrl); - if (emittedPackageWarnings.has(pjsonPath + "|" + match)) return; - emittedPackageWarnings.add(pjsonPath + "|" + match); - process.emitWarning( - `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ""}. Mapping specifiers ending in "/" is no longer supported.`, - "DeprecationWarning", - "DEP0155" - ); -} -function packageExportsResolve({ - packageJSONUrl, - packageSubpath, - exports, - base, - conditions -}) { - if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) - exports = { ".": exports }; - if (ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, "*") && !StringPrototypeEndsWith(packageSubpath, "/")) { - const target = exports[packageSubpath]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - "", - packageSubpath, - base, - false, - false, - conditions - ); - if (resolveResult == null) { - throwExportsNotFound(packageSubpath, packageJSONUrl, base); - } - return resolveResult; - } - let bestMatch = ""; - let bestMatchSubpath; - const keys = ObjectGetOwnPropertyNames(exports); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const patternIndex = StringPrototypeIndexOf(key, "*"); - if (patternIndex !== -1 && StringPrototypeStartsWith( - packageSubpath, - StringPrototypeSlice(key, 0, patternIndex) - )) { - if (StringPrototypeEndsWith(packageSubpath, "/")) - emitTrailingSlashPatternDeprecation( - packageSubpath, - packageJSONUrl, - base - ); - const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); - if (packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { - bestMatch = key; - bestMatchSubpath = StringPrototypeSlice( - packageSubpath, - patternIndex, - packageSubpath.length - patternTrailer.length - ); - } - } - } - if (bestMatch) { - const target = exports[bestMatch]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - bestMatchSubpath, - bestMatch, - base, - true, - false, - conditions - ); - if (resolveResult == null) { - throwExportsNotFound(packageSubpath, packageJSONUrl, base); - } - return resolveResult; - } - throwExportsNotFound(packageSubpath, packageJSONUrl, base); -} -function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { - if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { - const reason = "is not a valid internal imports specifier name"; - throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base)); - } - let packageJSONUrl; - const packageConfig = getPackageScopeConfig(base, readFileSyncFn); - if (packageConfig.exists) { - packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath); - const imports = packageConfig.imports; - if (imports) { - if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { - const resolveResult = resolvePackageTarget( - packageJSONUrl, - imports[name], - "", - name, - base, - false, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } else { - let bestMatch = ""; - let bestMatchSubpath; - const keys = ObjectGetOwnPropertyNames(imports); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const patternIndex = StringPrototypeIndexOf(key, "*"); - if (patternIndex !== -1 && StringPrototypeStartsWith( - name, - StringPrototypeSlice(key, 0, patternIndex) - )) { - const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); - if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { - bestMatch = key; - bestMatchSubpath = StringPrototypeSlice( - name, - patternIndex, - name.length - patternTrailer.length - ); - } - } - } - if (bestMatch) { - const target = imports[bestMatch]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - bestMatchSubpath, - bestMatch, - base, - true, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } - } - } - } - throwImportNotDefined(name, packageJSONUrl, base); -} - -const flagSymbol = Symbol('arg flag'); - -class ArgError extends Error { - constructor(msg, code) { - super(msg); - this.name = 'ArgError'; - this.code = code; - - Object.setPrototypeOf(this, ArgError.prototype); - } -} - -function arg( - opts, - { - argv = process.argv.slice(2), - permissive = false, - stopAtPositional = false - } = {} -) { - if (!opts) { - throw new ArgError( - 'argument specification object is required', - 'ARG_CONFIG_NO_SPEC' - ); - } - - const result = { _: [] }; - - const aliases = {}; - const handlers = {}; - - for (const key of Object.keys(opts)) { - if (!key) { - throw new ArgError( - 'argument key cannot be an empty string', - 'ARG_CONFIG_EMPTY_KEY' - ); - } - - if (key[0] !== '-') { - throw new ArgError( - `argument key must start with '-' but found: '${key}'`, - 'ARG_CONFIG_NONOPT_KEY' - ); - } - - if (key.length === 1) { - throw new ArgError( - `argument key must have a name; singular '-' keys are not allowed: ${key}`, - 'ARG_CONFIG_NONAME_KEY' - ); - } - - if (typeof opts[key] === 'string') { - aliases[key] = opts[key]; - continue; - } - - let type = opts[key]; - let isFlag = false; - - if ( - Array.isArray(type) && - type.length === 1 && - typeof type[0] === 'function' - ) { - const [fn] = type; - type = (value, name, prev = []) => { - prev.push(fn(value, name, prev[prev.length - 1])); - return prev; - }; - isFlag = fn === Boolean || fn[flagSymbol] === true; - } else if (typeof type === 'function') { - isFlag = type === Boolean || type[flagSymbol] === true; - } else { - throw new ArgError( - `type missing or not a function or valid array type: ${key}`, - 'ARG_CONFIG_VAD_TYPE' - ); - } - - if (key[1] !== '-' && key.length > 2) { - throw new ArgError( - `short argument keys (with a single hyphen) must have only one character: ${key}`, - 'ARG_CONFIG_SHORTOPT_TOOLONG' - ); - } - - handlers[key] = [type, isFlag]; - } - - for (let i = 0, len = argv.length; i < len; i++) { - const wholeArg = argv[i]; - - if (stopAtPositional && result._.length > 0) { - result._ = result._.concat(argv.slice(i)); - break; - } - - if (wholeArg === '--') { - result._ = result._.concat(argv.slice(i + 1)); - break; - } - - if (wholeArg.length > 1 && wholeArg[0] === '-') { - /* eslint-disable operator-linebreak */ - const separatedArguments = - wholeArg[1] === '-' || wholeArg.length === 2 - ? [wholeArg] - : wholeArg - .slice(1) - .split('') - .map((a) => `-${a}`); - /* eslint-enable operator-linebreak */ - - for (let j = 0; j < separatedArguments.length; j++) { - const arg = separatedArguments[j]; - const [originalArgName, argStr] = - arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined]; - - let argName = originalArgName; - while (argName in aliases) { - argName = aliases[argName]; - } - - if (!(argName in handlers)) { - if (permissive) { - result._.push(arg); - continue; - } else { - throw new ArgError( - `unknown or unexpected option: ${originalArgName}`, - 'ARG_UNKNOWN_OPTION' - ); - } - } - - const [type, isFlag] = handlers[argName]; - - if (!isFlag && j + 1 < separatedArguments.length) { - throw new ArgError( - `option requires argument (but was followed by another short argument): ${originalArgName}`, - 'ARG_MISSING_REQUIRED_SHORTARG' - ); - } - - if (isFlag) { - result[argName] = type(true, argName, result[argName]); - } else if (argStr === undefined) { - if ( - argv.length < i + 2 || - (argv[i + 1].length > 1 && - argv[i + 1][0] === '-' && - !( - argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && - (type === Number || - // eslint-disable-next-line no-undef - (typeof BigInt !== 'undefined' && type === BigInt)) - )) - ) { - const extended = - originalArgName === argName ? '' : ` (alias for ${argName})`; - throw new ArgError( - `option requires argument: ${originalArgName}${extended}`, - 'ARG_MISSING_REQUIRED_LONGARG' - ); - } - - result[argName] = type(argv[i + 1], argName, result[argName]); - ++i; - } else { - result[argName] = type(argStr, argName, result[argName]); - } - } - } else { - result._.push(wholeArg); - } - } - - return result; -} - -arg.flag = (fn) => { - fn[flagSymbol] = true; - return fn; -}; - -// Utility types -arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1); - -// Expose error class -arg.ArgError = ArgError; - -var arg_1 = arg; - -/** - @license - The MIT License (MIT) - - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -function getOptionValue(opt) { - parseOptions(); - return options[opt]; -} -let options; -function parseOptions() { - if (!options) { - options = { - "--conditions": [], - ...parseArgv(getNodeOptionsEnvArgv()), - ...parseArgv(process.execArgv) - }; - } -} -function parseArgv(argv) { - return arg_1( - { - "--conditions": [String], - "-C": "--conditions" - }, - { - argv, - permissive: true - } - ); -} -function getNodeOptionsEnvArgv() { - const errors = []; - const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors); - if (errors.length !== 0) ; - return envArgv; -} -function ParseNodeOptionsEnvVar(node_options, errors) { - const env_argv = []; - let is_in_string = false; - let will_start_new_arg = true; - for (let index = 0; index < node_options.length; ++index) { - let c = node_options[index]; - if (c === "\\" && is_in_string) { - if (index + 1 === node_options.length) { - errors.push("invalid value for NODE_OPTIONS (invalid escape)\n"); - return env_argv; - } else { - c = node_options[++index]; - } - } else if (c === " " && !is_in_string) { - will_start_new_arg = true; - continue; - } else if (c === '"') { - is_in_string = !is_in_string; - continue; - } - if (will_start_new_arg) { - env_argv.push(c); - will_start_new_arg = false; - } else { - env_argv[env_argv.length - 1] += c; - } - } - if (is_in_string) { - errors.push("invalid value for NODE_OPTIONS (unterminated string)\n"); - } - return env_argv; -} - -function makeApi(runtimeState, opts) { - const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0; - const debugLevel = Number(process.env.PNP_DEBUG_LEVEL); - const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; - const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/; - const isDirRegExp = /\/$/; - const isRelativeRegexp = /^\.{0,2}\//; - const topLevelLocator = { name: null, reference: null }; - const fallbackLocators = []; - const emittedWarnings = /* @__PURE__ */ new Set(); - if (runtimeState.enableTopLevelFallback === true) - fallbackLocators.push(topLevelLocator); - if (opts.compatibilityMode !== false) { - for (const name of [`react-scripts`, `gatsby`]) { - const packageStore = runtimeState.packageRegistry.get(name); - if (packageStore) { - for (const reference of packageStore.keys()) { - if (reference === null) { - throw new Error(`Assertion failed: This reference shouldn't be null`); - } else { - fallbackLocators.push({ name, reference }); - } - } - } - } - } - const { - ignorePattern, - packageRegistry, - packageLocatorsByLocations - } = runtimeState; - function makeLogEntry(name, args) { - return { - fn: name, - args, - error: null, - result: null - }; - } - function trace(entry) { - const colors = process.stderr?.hasColors?.() ?? process.stdout.isTTY; - const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`; - const error = entry.error; - if (error) - console.error(c(`31;1`, `\u2716 ${entry.error?.message.replace(/\n.*/s, ``)}`)); - else - console.error(c(`33;1`, `\u203C Resolution`)); - if (entry.args.length > 0) - console.error(); - for (const arg of entry.args) - console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`); - if (entry.result) { - console.error(); - console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`); - } - const stack = new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2) ?? []; - if (stack.length > 0) { - console.error(); - for (const line of stack) { - console.error(` ${c(`38;5;244`, line)}`); - } - } - console.error(); - } - function maybeLog(name, fn) { - if (opts.allowDebug === false) - return fn; - if (Number.isFinite(debugLevel)) { - if (debugLevel >= 2) { - return (...args) => { - const logEntry = makeLogEntry(name, args); - try { - return logEntry.result = fn(...args); - } catch (error) { - throw logEntry.error = error; - } finally { - trace(logEntry); - } - }; - } else if (debugLevel >= 1) { - return (...args) => { - try { - return fn(...args); - } catch (error) { - const logEntry = makeLogEntry(name, args); - logEntry.error = error; - trace(logEntry); - throw error; - } - }; - } - } - return fn; - } - function getPackageInformationSafe(packageLocator) { - const packageInformation = getPackageInformation(packageLocator); - if (!packageInformation) { - throw makeError( - ErrorCode.INTERNAL, - `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)` - ); - } - return packageInformation; - } - function isDependencyTreeRoot(packageLocator) { - if (packageLocator.name === null) - return true; - for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) - if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) - return true; - return false; - } - const defaultExportsConditions = /* @__PURE__ */ new Set([ - `node`, - `require`, - ...getOptionValue(`--conditions`) - ]); - function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions, issuer) { - const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), { - resolveIgnored: true, - includeDiscardFromLookup: true - }); - if (locator === null) { - throw makeError( - ErrorCode.INTERNAL, - `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)` - ); - } - const { packageLocation } = getPackageInformationSafe(locator); - const manifestPath = ppath.join(packageLocation, Filename.manifest); - if (!opts.fakeFs.existsSync(manifestPath)) - return null; - const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)); - if (pkgJson.exports == null) - return null; - let subpath = ppath.contains(packageLocation, unqualifiedPath); - if (subpath === null) { - throw makeError( - ErrorCode.INTERNAL, - `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)` - ); - } - if (subpath !== `.` && !isRelativeRegexp.test(subpath)) - subpath = `./${subpath}`; - try { - const resolvedExport = packageExportsResolve({ - packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), - packageSubpath: subpath, - exports: pkgJson.exports, - base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, - conditions - }); - return npath.toPortablePath(url.fileURLToPath(resolvedExport)); - } catch (error) { - throw makeError( - ErrorCode.EXPORTS_RESOLUTION_FAILED, - error.message, - { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions }, - error.code - ); - } - } - function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { - let stat; - try { - candidates.push(unqualifiedPath); - stat = opts.fakeFs.statSync(unqualifiedPath); - } catch { - } - if (stat && !stat.isDirectory()) - return opts.fakeFs.realpathSync(unqualifiedPath); - if (stat && stat.isDirectory()) { - let pkgJson; - try { - pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`)); - } catch { - } - let nextUnqualifiedPath; - if (pkgJson && pkgJson.main) - nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main); - if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { - const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); - if (resolution !== null) { - return resolution; - } - } - } - for (let i = 0, length = extensions.length; i < length; i++) { - const candidateFile = `${unqualifiedPath}${extensions[i]}`; - candidates.push(candidateFile); - if (opts.fakeFs.existsSync(candidateFile)) { - return candidateFile; - } - } - if (stat && stat.isDirectory()) { - for (let i = 0, length = extensions.length; i < length; i++) { - const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] }); - candidates.push(candidateFile); - if (opts.fakeFs.existsSync(candidateFile)) { - return candidateFile; - } - } - } - return null; - } - function makeFakeModule(path) { - const fakeModule = new require$$0.Module(path, null); - fakeModule.filename = path; - fakeModule.paths = require$$0.Module._nodeModulePaths(path); - return fakeModule; - } - function callNativeResolution(request, issuer) { - if (issuer.endsWith(`/`)) - issuer = ppath.join(issuer, `internal.js`); - return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }); - } - function isPathIgnored(path) { - if (ignorePattern === null) - return false; - const subPath = ppath.contains(runtimeState.basePath, path); - if (subPath === null) - return false; - if (ignorePattern.test(subPath.replace(/\/$/, ``))) { - return true; - } else { - return false; - } - } - const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 }; - const topLevel = topLevelLocator; - function getPackageInformation({ name, reference }) { - const packageInformationStore = packageRegistry.get(name); - if (!packageInformationStore) - return null; - const packageInformation = packageInformationStore.get(reference); - if (!packageInformation) - return null; - return packageInformation; - } - function findPackageDependents({ name, reference }) { - const dependents = []; - for (const [dependentName, packageInformationStore] of packageRegistry) { - if (dependentName === null) - continue; - for (const [dependentReference, packageInformation] of packageInformationStore) { - if (dependentReference === null) - continue; - const dependencyReference = packageInformation.packageDependencies.get(name); - if (dependencyReference !== reference) - continue; - if (dependentName === name && dependentReference === reference) - continue; - dependents.push({ - name: dependentName, - reference: dependentReference - }); - } - } - return dependents; - } - function findBrokenPeerDependencies(dependency, initialPackage) { - const brokenPackages = /* @__PURE__ */ new Map(); - const alreadyVisited = /* @__PURE__ */ new Set(); - const traversal = (currentPackage) => { - const identifier = JSON.stringify(currentPackage.name); - if (alreadyVisited.has(identifier)) - return; - alreadyVisited.add(identifier); - const dependents = findPackageDependents(currentPackage); - for (const dependent of dependents) { - const dependentInformation = getPackageInformationSafe(dependent); - if (dependentInformation.packagePeers.has(dependency)) { - traversal(dependent); - } else { - let brokenSet = brokenPackages.get(dependent.name); - if (typeof brokenSet === `undefined`) - brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set()); - brokenSet.add(dependent.reference); - } - } - }; - traversal(initialPackage); - const brokenList = []; - for (const name of [...brokenPackages.keys()].sort()) - for (const reference of [...brokenPackages.get(name)].sort()) - brokenList.push({ name, reference }); - return brokenList; - } - function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) { - if (isPathIgnored(location) && !resolveIgnored) - return null; - let relativeLocation = ppath.relative(runtimeState.basePath, location); - if (!relativeLocation.match(isStrictRegExp)) - relativeLocation = `./${relativeLocation}`; - if (!relativeLocation.endsWith(`/`)) - relativeLocation = `${relativeLocation}/`; - do { - const entry = packageLocatorsByLocations.get(relativeLocation); - if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) { - relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1); - continue; - } - return entry.locator; - } while (relativeLocation !== ``); - return null; - } - function tryReadFile(filePath) { - try { - return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`); - } catch (err) { - if (err.code === `ENOENT`) - return void 0; - throw err; - } - } - function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { - if (request.startsWith(`#`)) - throw new Error(`resolveToUnqualified can not handle private import mappings`); - if (request === `pnpapi`) - return npath.toPortablePath(opts.pnpapiResolution); - if (considerBuiltins && require$$0.isBuiltin(request)) - return null; - const requestForDisplay = getPathForDisplay(request); - const issuerForDisplay = issuer && getPathForDisplay(issuer); - if (issuer && isPathIgnored(issuer)) { - if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { - const result = callNativeResolution(request, issuer); - if (result === false) { - throw makeError( - ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, - `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) - -Require request: "${requestForDisplay}" -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - return npath.toPortablePath(result); - } - } - let unqualifiedPath; - const dependencyNameMatch = request.match(pathRegExp); - if (!dependencyNameMatch) { - if (ppath.isAbsolute(request)) { - unqualifiedPath = ppath.normalize(request); - } else { - if (!issuer) { - throw makeError( - ErrorCode.API_ERROR, - `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - const absoluteIssuer = ppath.resolve(issuer); - if (issuer.match(isDirRegExp)) { - unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)); - } else { - unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request)); - } - } - } else { - if (!issuer) { - throw makeError( - ErrorCode.API_ERROR, - `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - const [, dependencyName, subPath] = dependencyNameMatch; - const issuerLocator = findPackageLocator(issuer); - if (!issuerLocator) { - const result = callNativeResolution(request, issuer); - if (result === false) { - throw makeError( - ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, - `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). - -Require path: "${requestForDisplay}" -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay } - ); - } - return npath.toPortablePath(result); - } - const issuerInformation = getPackageInformationSafe(issuerLocator); - let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); - let fallbackReference = null; - if (dependencyReference == null) { - if (issuerLocator.name !== null) { - const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name); - const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference); - if (canUseFallbacks) { - for (let t = 0, T = fallbackLocators.length; t < T; ++t) { - const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); - const reference = fallbackInformation.packageDependencies.get(dependencyName); - if (reference == null) - continue; - if (alwaysWarnOnFallback) - fallbackReference = reference; - else - dependencyReference = reference; - break; - } - if (runtimeState.enableTopLevelFallback) { - if (dependencyReference == null && fallbackReference === null) { - const reference = runtimeState.fallbackPool.get(dependencyName); - if (reference != null) { - fallbackReference = reference; - } - } - } - } - } - } - let error = null; - if (dependencyReference === null) { - if (isDependencyTreeRoot(issuerLocator)) { - error = makeError( - ErrorCode.MISSING_PEER_DEPENDENCY, - `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } - ); - } else { - const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator); - if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) { - error = makeError( - ErrorCode.MISSING_PEER_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) -${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} -`).join(``)} -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } - ); - } else { - error = makeError( - ErrorCode.MISSING_PEER_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) - -${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} -`).join(``)} -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } - ); - } - } - } else if (dependencyReference === void 0) { - if (!considerBuiltins && require$$0.isBuiltin(request)) { - if (isDependencyTreeRoot(issuerLocator)) { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } - ); - } else { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } - ); - } - } else { - if (isDependencyTreeRoot(issuerLocator)) { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerForDisplay} -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } - ); - } else { - error = makeError( - ErrorCode.UNDECLARED_DEPENDENCY, - `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. - -Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) -`, - { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } - ); - } - } - } - if (dependencyReference == null) { - if (fallbackReference === null || error === null) - throw error || new Error(`Assertion failed: Expected an error to have been set`); - dependencyReference = fallbackReference; - const message = error.message.replace(/\n.*/g, ``); - error.message = message; - if (!emittedWarnings.has(message) && debugLevel !== 0) { - emittedWarnings.add(message); - process.emitWarning(error); - } - } - const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference }; - const dependencyInformation = getPackageInformationSafe(dependencyLocator); - if (!dependencyInformation.packageLocation) { - throw makeError( - ErrorCode.MISSING_DEPENDENCY, - `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. - -Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} -Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) -`, - { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) } - ); - } - const dependencyLocation = dependencyInformation.packageLocation; - if (subPath) { - unqualifiedPath = ppath.join(dependencyLocation, subPath); - } else { - unqualifiedPath = dependencyLocation; - } - } - return ppath.normalize(unqualifiedPath); - } - function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions, issuer) { - if (isStrictRegExp.test(request)) - return unqualifiedPath; - const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions, issuer); - if (unqualifiedExportPath) { - return ppath.normalize(unqualifiedExportPath); - } else { - return unqualifiedPath; - } - } - function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) { - const candidates = []; - const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); - if (qualifiedPath) { - reportRequiredFilesToWatchMode([qualifiedPath]); - return ppath.normalize(qualifiedPath); - } else { - reportRequiredFilesToWatchMode(candidates); - const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath); - const containingPackage = findPackageLocator(unqualifiedPath); - if (containingPackage) { - const { packageLocation } = getPackageInformationSafe(containingPackage); - let exists = true; - try { - opts.fakeFs.accessSync(packageLocation); - } catch (err) { - if (err?.code === `ENOENT`) { - exists = false; - } else { - const readableError = (err?.message ?? err ?? `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase()); - throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). - -Missing package: ${containingPackage.name}@${containingPackage.reference} -Expected package location: ${getPathForDisplay(packageLocation)} -`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }); - } - } - if (!exists) { - const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`; - throw makeError( - ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, - `${errorMessage} - -Missing package: ${containingPackage.name}@${containingPackage.reference} -Expected package location: ${getPathForDisplay(packageLocation)} -`, - { unqualifiedPath: unqualifiedPathForDisplay, extensions } - ); - } - } - throw makeError( - ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, - `Qualified path resolution failed: we looked for the following paths, but none could be accessed. - -Source path: ${unqualifiedPathForDisplay} -${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)} -`).join(``)}`, - { unqualifiedPath: unqualifiedPathForDisplay, extensions } - ); - } - } - function resolvePrivateRequest(request, issuer, opts2) { - if (!issuer) - throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`); - const resolved = packageImportsResolve({ - name: request, - base: url.pathToFileURL(npath.fromPortablePath(issuer)), - conditions: opts2.conditions ?? defaultExportsConditions, - readFileSyncFn: tryReadFile - }); - if (resolved instanceof URL) { - return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }); - } else { - if (resolved.startsWith(`#`)) - throw new Error(`Mapping from one private import to another isn't allowed`); - return resolveRequest(resolved, issuer, opts2); - } - } - function resolveRequest(request, issuer, opts2 = {}) { - try { - if (request.startsWith(`#`)) - return resolvePrivateRequest(request, issuer, opts2); - const { considerBuiltins, extensions, conditions } = opts2; - const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); - if (request === `pnpapi`) - return unqualifiedPath; - if (unqualifiedPath === null) - return null; - const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false; - const remappedPath = (!considerBuiltins || !require$$0.isBuiltin(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions, issuer) : unqualifiedPath; - return resolveUnqualified(remappedPath, { extensions }); - } catch (error) { - if (Object.hasOwn(error, `pnpCode`)) - Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) }); - throw error; - } - } - function resolveVirtual(request) { - const normalized = ppath.normalize(request); - const resolved = VirtualFS.resolveVirtual(normalized); - return resolved !== normalized ? resolved : null; - } - return { - VERSIONS, - topLevel, - getLocator: (name, referencish) => { - if (Array.isArray(referencish)) { - return { name: referencish[0], reference: referencish[1] }; - } else { - return { name, reference: referencish }; - } - }, - getDependencyTreeRoots: () => { - return [...runtimeState.dependencyTreeRoots]; - }, - getAllLocators() { - const locators = []; - for (const [name, entry] of packageRegistry) - for (const reference of entry.keys()) - if (name !== null && reference !== null) - locators.push({ name, reference }); - return locators; - }, - getPackageInformation: (locator) => { - const info = getPackageInformation(locator); - if (info === null) - return null; - const packageLocation = npath.fromPortablePath(info.packageLocation); - const nativeInfo = { ...info, packageLocation }; - return nativeInfo; - }, - findPackageLocator: (path) => { - return findPackageLocator(npath.toPortablePath(path)); - }, - resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => { - const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; - const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2); - if (resolution === null) - return null; - return npath.fromPortablePath(resolution); - }), - resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => { - return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2)); - }), - resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { - const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; - const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2); - if (resolution === null) - return null; - return npath.fromPortablePath(resolution); - }), - resolveVirtual: maybeLog(`resolveVirtual`, (path) => { - const result = resolveVirtual(npath.toPortablePath(path)); - if (result !== null) { - return npath.fromPortablePath(result); - } else { - return null; - } - }) - }; -} - -function makeManager(pnpapi, opts) { - const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null)); - const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath)); - const apiMetadata = /* @__PURE__ */ new Map([ - [initialApiPath, { - instance: pnpapi, - stats: initialApiStats, - lastRefreshCheck: Date.now() - }] - ]); - function loadApiInstance(pnpApiPath) { - const nativePath = npath.fromPortablePath(pnpApiPath); - const module = new require$$0.Module(nativePath, null); - module.load(nativePath); - return module.exports; - } - function refreshApiEntry(pnpApiPath, apiEntry) { - const timeNow = Date.now(); - if (timeNow - apiEntry.lastRefreshCheck < 500) - return; - apiEntry.lastRefreshCheck = timeNow; - const stats = opts.fakeFs.statSync(pnpApiPath); - if (stats.mtime > apiEntry.stats.mtime) { - process.emitWarning(`[Warning] The runtime detected new information in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`); - apiEntry.stats = stats; - apiEntry.instance = loadApiInstance(pnpApiPath); - } - } - function getApiEntry(pnpApiPath, refresh = false) { - let apiEntry = apiMetadata.get(pnpApiPath); - if (typeof apiEntry !== `undefined`) { - if (refresh) { - refreshApiEntry(pnpApiPath, apiEntry); - } - } else { - apiMetadata.set(pnpApiPath, apiEntry = { - instance: loadApiInstance(pnpApiPath), - stats: opts.fakeFs.statSync(pnpApiPath), - lastRefreshCheck: Date.now() - }); - } - return apiEntry; - } - const findApiPathCache = /* @__PURE__ */ new Map(); - function addToCacheAndReturn(start, end, target) { - if (target !== null) { - target = VirtualFS.resolveVirtual(target); - target = opts.fakeFs.realpathSync(target); - } - let curr; - let next = start; - do { - curr = next; - findApiPathCache.set(curr, target); - next = ppath.dirname(curr); - } while (curr !== end); - return target; - } - function findApiPathFor(modulePath) { - let bestCandidate = null; - for (const [apiPath, apiEntry] of apiMetadata) { - const locator = apiEntry.instance.findPackageLocator(modulePath); - if (!locator) - continue; - if (apiMetadata.size === 1) - return apiPath; - const packageInformation = apiEntry.instance.getPackageInformation(locator); - if (!packageInformation) - throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`); - if (!bestCandidate) - bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] }; - if (packageInformation.packageLocation === bestCandidate.packageLocation) { - bestCandidate.apiPaths.push(apiPath); - } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) { - bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] }; - } - } - if (bestCandidate) { - if (bestCandidate.apiPaths.length === 1) - return bestCandidate.apiPaths[0]; - const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(` -`); - throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. -This is usually caused by using the global cache (enableGlobalCache: true) - -Controlled by: -${controlSegment} -`); - } - const start = ppath.resolve(npath.toPortablePath(modulePath)); - let curr; - let next = start; - do { - curr = next; - const cached = findApiPathCache.get(curr); - if (cached !== void 0) - return addToCacheAndReturn(start, curr, cached); - const cjsCandidate = ppath.join(curr, Filename.pnpCjs); - if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile()) - return addToCacheAndReturn(start, curr, cjsCandidate); - const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs); - if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile()) - return addToCacheAndReturn(start, curr, legacyCjsCandidate); - next = ppath.dirname(curr); - } while (curr !== PortablePath.root); - return addToCacheAndReturn(start, curr, null); - } - const moduleToApiPathCache = /* @__PURE__ */ new WeakMap(); - function getApiPathFromParent(parent) { - if (parent == null) - return initialApiPath; - let apiPath = moduleToApiPathCache.get(parent); - if (typeof apiPath !== `undefined`) - return apiPath; - apiPath = parent.filename ? findApiPathFor(parent.filename) : null; - moduleToApiPathCache.set(parent, apiPath); - return apiPath; - } - return { - getApiPathFromParent, - findApiPathFor, - getApiEntry - }; -} - -const localFs = { ...fs__default.default }; -const nodeFs = new NodeFS(localFs); -const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); -const defaultPnpapiResolution = __filename; -const customZipImplementation = defaultRuntimeState.pnpZipBackend === `js` ? JsZipImpl : void 0; -const defaultFsLayer = new VirtualFS({ - baseFs: new ZipOpenFS({ - customZipImplementation, - baseFs: nodeFs, - maxOpenFiles: 80, - readOnlyArchives: true - }) -}); -class DynamicFS extends ProxiedFS { - baseFs = defaultFsLayer; - constructor() { - super(ppath); - } - mapToBase(p) { - return p; - } - mapFromBase(p) { - return p; - } -} -const dynamicFsLayer = new DynamicFS(); -let manager; -const defaultApi = Object.assign(makeApi(defaultRuntimeState, { - fakeFs: dynamicFsLayer, - pnpapiResolution: defaultPnpapiResolution -}), { - /** - * Can be used to generate a different API than the default one (for example - * to map it on `/` rather than the local directory path, or to use a - * different FS layer than the default one). - */ - makeApi: ({ - basePath = void 0, - fakeFs = dynamicFsLayer, - pnpapiResolution = defaultPnpapiResolution, - ...rest - }) => { - const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState; - return makeApi(apiRuntimeState, { - fakeFs, - pnpapiResolution, - ...rest - }); - }, - /** - * Will inject the specified API into the environment, monkey-patching FS. Is - * automatically called when the hook is loaded through `--require`. - */ - setup: (api) => { - applyPatch(api || defaultApi, { - fakeFs: defaultFsLayer, - manager - }); - dynamicFsLayer.baseFs = new NodeFS(fs__default.default); - } -}); -manager = makeManager(defaultApi, { - fakeFs: dynamicFsLayer -}); -if (module.parent && module.parent.id === `internal/preload`) { - defaultApi.setup(); - if (module.filename) { - delete require$$0__default.default._cache[module.filename]; - } -} -if (process.mainModule === module) { - const reportError = (code, message, data) => { - process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} -`); - }; - const reportSuccess = (resolution) => { - process.stdout.write(`${JSON.stringify([null, resolution])} -`); - }; - const processResolution = (request, issuer) => { - try { - reportSuccess(defaultApi.resolveRequest(request, issuer)); - } catch (error) { - reportError(error.code, error.message, error.data); - } - }; - const processRequest = (data) => { - try { - const [request, issuer] = JSON.parse(data); - processResolution(request, issuer); - } catch (error) { - reportError(`INVALID_JSON`, error.message, error.data); - } - }; - if (process.argv.length > 2) { - if (process.argv.length !== 4) { - process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} -`); - process.exitCode = 64; - } else { - processResolution(process.argv[2], process.argv[3]); - } - } else { - let buffer = ``; - const decoder = new StringDecoder__default.default.StringDecoder(); - process.stdin.on(`data`, (chunk) => { - buffer += decoder.write(chunk); - do { - const index = buffer.indexOf(` -`); - if (index === -1) - break; - const line = buffer.slice(0, index); - buffer = buffer.slice(index + 1); - processRequest(line); - } while (true); - }); - } -} - -module.exports = defaultApi; diff --git a/.pnp.loader.mjs b/.pnp.loader.mjs deleted file mode 100644 index 45359e90c3..0000000000 --- a/.pnp.loader.mjs +++ /dev/null @@ -1,2129 +0,0 @@ -/* eslint-disable */ -// @ts-nocheck - -import fs from 'fs'; -import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; -import path from 'path'; -import { createHash } from 'crypto'; -import { EOL } from 'os'; -import esmModule, { createRequire, isBuiltin } from 'module'; -import assert from 'assert'; - -const SAFE_TIME = 456789e3; - -const PortablePath = { - root: `/`, - dot: `.`, - parent: `..` -}; -const npath = Object.create(path); -const ppath = Object.create(path.posix); -npath.cwd = () => process.cwd(); -ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; -if (process.platform === `win32`) { - ppath.resolve = (...segments) => { - if (segments.length > 0 && ppath.isAbsolute(segments[0])) { - return path.posix.resolve(...segments); - } else { - return path.posix.resolve(ppath.cwd(), ...segments); - } - }; -} -const contains = function(pathUtils, from, to) { - from = pathUtils.normalize(from); - to = pathUtils.normalize(to); - if (from === to) - return `.`; - if (!from.endsWith(pathUtils.sep)) - from = from + pathUtils.sep; - if (to.startsWith(from)) { - return to.slice(from.length); - } else { - return null; - } -}; -npath.contains = (from, to) => contains(npath, from, to); -ppath.contains = (from, to) => contains(ppath, from, to); -const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; -const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; -const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; -const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; -function fromPortablePathWin32(p) { - let portablePathMatch, uncPortablePathMatch; - if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) - p = portablePathMatch[1]; - else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) - p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; - else - return p; - return p.replace(/\//g, `\\`); -} -function toPortablePathWin32(p) { - p = p.replace(/\\/g, `/`); - let windowsPathMatch, uncWindowsPathMatch; - if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) - p = `/${windowsPathMatch[1]}`; - else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) - p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; - return p; -} -const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; -const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; -npath.fromPortablePath = fromPortablePath; -npath.toPortablePath = toPortablePath; -function convertPath(targetPathUtils, sourcePath) { - return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); -} - -const defaultTime = new Date(SAFE_TIME * 1e3); -const defaultTimeMs = defaultTime.getTime(); -async function copyPromise(destinationFs, destination, sourceFs, source, opts) { - const normalizedDestination = destinationFs.pathUtils.normalize(destination); - const normalizedSource = sourceFs.pathUtils.normalize(source); - const prelayout = []; - const postlayout = []; - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); - await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); - await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); - for (const operation of prelayout) - await operation(); - await Promise.all(postlayout.map((operation) => { - return operation(); - })); -} -async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { - const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; - const sourceStat = await sourceFs.lstatPromise(source); - const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; - let updated; - switch (true) { - case sourceStat.isDirectory(): - { - updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isFile(): - { - updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - case sourceStat.isSymbolicLink(): - { - updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } - break; - default: { - throw new Error(`Unsupported file type (${sourceStat.mode})`); - } - } - if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { - if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { - postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); - updated = true; - } - if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { - postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); - updated = true; - } - } - return updated; -} -async function maybeLStat(baseFs, p) { - try { - return await baseFs.lstatPromise(p); - } catch { - return null; - } -} -async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null && !destinationStat.isDirectory()) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - let updated = false; - if (destinationStat === null) { - prelayout.push(async () => { - try { - await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); - } catch (err) { - if (err.code !== `EEXIST`) { - throw err; - } - } - }); - updated = true; - } - const entries = await sourceFs.readdirPromise(source); - const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; - if (opts.stableSort) { - for (const entry of entries.sort()) { - if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { - updated = true; - } - } - } else { - const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { - await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); - })); - if (entriesUpdateStatus.some((status) => status)) { - updated = true; - } - } - return updated; -} -async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { - const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); - const defaultMode = 420; - const sourceMode = sourceStat.mode & 511; - const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; - const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); - let AtomicBehavior; - ((AtomicBehavior2) => { - AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; - AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; - })(AtomicBehavior || (AtomicBehavior = {})); - let atomicBehavior = 1 /* Rename */; - let indexStat = await maybeLStat(destinationFs, indexPath); - if (destinationStat) { - const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; - const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; - if (isDestinationHardlinkedFromIndex) { - if (isIndexModified && linkStrategy.autoRepair) { - atomicBehavior = 0 /* Lock */; - indexStat = null; - } - } - if (!isDestinationHardlinkedFromIndex) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - } - const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; - let tempPathCleaned = false; - prelayout.push(async () => { - if (!indexStat) { - if (atomicBehavior === 0 /* Lock */) { - await destinationFs.lockPromise(indexPath, async () => { - const content = await sourceFs.readFilePromise(source); - await destinationFs.writeFilePromise(indexPath, content); - }); - } - if (atomicBehavior === 1 /* Rename */ && tempPath) { - const content = await sourceFs.readFilePromise(source); - await destinationFs.writeFilePromise(tempPath, content); - try { - await destinationFs.linkPromise(tempPath, indexPath); - } catch (err) { - if (err.code === `EEXIST`) { - tempPathCleaned = true; - await destinationFs.unlinkPromise(tempPath); - } else { - throw err; - } - } - } - } - if (!destinationStat) { - await destinationFs.linkPromise(indexPath, destination); - } - }); - postlayout.push(async () => { - if (!indexStat) { - await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); - if (sourceMode !== defaultMode) { - await destinationFs.chmodPromise(indexPath, sourceMode); - } - } - if (tempPath && !tempPathCleaned) { - await destinationFs.unlinkPromise(tempPath); - } - }); - return false; -} -async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - prelayout.push(async () => { - const content = await sourceFs.readFilePromise(source); - await destinationFs.writeFilePromise(destination, content); - }); - return true; -} -async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (opts.linkStrategy?.type === `HardlinkFromIndex`) { - return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); - } else { - return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); - } -} -async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { - if (destinationStat !== null) { - if (opts.overwrite) { - prelayout.push(async () => destinationFs.removePromise(destination)); - destinationStat = null; - } else { - return false; - } - } - prelayout.push(async () => { - await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); - }); - return true; -} - -class FakeFS { - pathUtils; - constructor(pathUtils) { - this.pathUtils = pathUtils; - } - async *genTraversePromise(init, { stableSort = false } = {}) { - const stack = [init]; - while (stack.length > 0) { - const p = stack.shift(); - const entry = await this.lstatPromise(p); - if (entry.isDirectory()) { - const entries = await this.readdirPromise(p); - if (stableSort) { - for (const entry2 of entries.sort()) { - stack.push(this.pathUtils.join(p, entry2)); - } - } else { - throw new Error(`Not supported`); - } - } else { - yield p; - } - } - } - async checksumFilePromise(path, { algorithm = `sha512` } = {}) { - const fd = await this.openPromise(path, `r`); - try { - const CHUNK_SIZE = 65536; - const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); - const hash = createHash(algorithm); - let bytesRead = 0; - while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) - hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); - return hash.digest(`hex`); - } finally { - await this.closePromise(fd); - } - } - async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { - let stat; - try { - stat = await this.lstatPromise(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) { - const entries = await this.readdirPromise(p); - await Promise.all(entries.map((entry) => { - return this.removePromise(this.pathUtils.resolve(p, entry)); - })); - } - for (let t = 0; t <= maxRetries; t++) { - try { - await this.rmdirPromise(p); - break; - } catch (error) { - if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { - throw error; - } else if (t < maxRetries) { - await new Promise((resolve) => setTimeout(resolve, t * 100)); - } - } - } - } else { - await this.unlinkPromise(p); - } - } - removeSync(p, { recursive = true } = {}) { - let stat; - try { - stat = this.lstatSync(p); - } catch (error) { - if (error.code === `ENOENT`) { - return; - } else { - throw error; - } - } - if (stat.isDirectory()) { - if (recursive) - for (const entry of this.readdirSync(p)) - this.removeSync(this.pathUtils.resolve(p, entry)); - this.rmdirSync(p); - } else { - this.unlinkSync(p); - } - } - async mkdirpPromise(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - await this.mkdirPromise(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory ??= subPath; - if (chmod != null) - await this.chmodPromise(subPath, chmod); - if (utimes != null) { - await this.utimesPromise(subPath, utimes[0], utimes[1]); - } else { - const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); - await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - mkdirpSync(p, { chmod, utimes } = {}) { - p = this.resolve(p); - if (p === this.pathUtils.dirname(p)) - return void 0; - const parts = p.split(this.pathUtils.sep); - let createdDirectory; - for (let u = 2; u <= parts.length; ++u) { - const subPath = parts.slice(0, u).join(this.pathUtils.sep); - if (!this.existsSync(subPath)) { - try { - this.mkdirSync(subPath); - } catch (error) { - if (error.code === `EEXIST`) { - continue; - } else { - throw error; - } - } - createdDirectory ??= subPath; - if (chmod != null) - this.chmodSync(subPath, chmod); - if (utimes != null) { - this.utimesSync(subPath, utimes[0], utimes[1]); - } else { - const parentStat = this.statSync(this.pathUtils.dirname(subPath)); - this.utimesSync(subPath, parentStat.atime, parentStat.mtime); - } - } - } - return createdDirectory; - } - async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { - return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); - } - copySync(destination, source, { baseFs = this, overwrite = true } = {}) { - const stat = baseFs.lstatSync(source); - const exists = this.existsSync(destination); - if (stat.isDirectory()) { - this.mkdirpSync(destination); - const directoryListing = baseFs.readdirSync(source); - for (const entry of directoryListing) { - this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); - } - } else if (stat.isFile()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const content = baseFs.readFileSync(source); - this.writeFileSync(destination, content); - } - } else if (stat.isSymbolicLink()) { - if (!exists || overwrite) { - if (exists) - this.removeSync(destination); - const target = baseFs.readlinkSync(source); - this.symlinkSync(convertPath(this.pathUtils, target), destination); - } - } else { - throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); - } - const mode = stat.mode & 511; - this.chmodSync(destination, mode); - } - async changeFilePromise(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferPromise(p, content, opts); - } else { - return this.changeFileTextPromise(p, content, opts); - } - } - async changeFileBufferPromise(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = await this.readFilePromise(p); - } catch { - } - if (Buffer.compare(current, content) === 0) - return; - await this.writeFilePromise(p, content, { mode }); - } - async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { - let current = ``; - try { - current = await this.readFilePromise(p, `utf8`); - } catch { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - await this.writeFilePromise(p, normalizedContent, { mode }); - } - changeFileSync(p, content, opts = {}) { - if (Buffer.isBuffer(content)) { - return this.changeFileBufferSync(p, content, opts); - } else { - return this.changeFileTextSync(p, content, opts); - } - } - changeFileBufferSync(p, content, { mode } = {}) { - let current = Buffer.alloc(0); - try { - current = this.readFileSync(p); - } catch { - } - if (Buffer.compare(current, content) === 0) - return; - this.writeFileSync(p, content, { mode }); - } - changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { - let current = ``; - try { - current = this.readFileSync(p, `utf8`); - } catch { - } - const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; - if (current === normalizedContent) - return; - this.writeFileSync(p, normalizedContent, { mode }); - } - async movePromise(fromP, toP) { - try { - await this.renamePromise(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - await this.copyPromise(toP, fromP); - await this.removePromise(fromP); - } else { - throw error; - } - } - } - moveSync(fromP, toP) { - try { - this.renameSync(fromP, toP); - } catch (error) { - if (error.code === `EXDEV`) { - this.copySync(toP, fromP); - this.removeSync(fromP); - } else { - throw error; - } - } - } - async lockPromise(affectedPath, callback) { - const lockPath = `${affectedPath}.flock`; - const interval = 1e3 / 60; - const startTime = Date.now(); - let fd = null; - const isAlive = async () => { - let pid; - try { - [pid] = await this.readJsonPromise(lockPath); - } catch { - return Date.now() - startTime < 500; - } - try { - process.kill(pid, 0); - return true; - } catch { - return false; - } - }; - while (fd === null) { - try { - fd = await this.openPromise(lockPath, `wx`); - } catch (error) { - if (error.code === `EEXIST`) { - if (!await isAlive()) { - try { - await this.unlinkPromise(lockPath); - continue; - } catch { - } - } - if (Date.now() - startTime < 60 * 1e3) { - await new Promise((resolve) => setTimeout(resolve, interval)); - } else { - throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); - } - } else { - throw error; - } - } - } - await this.writePromise(fd, JSON.stringify([process.pid])); - try { - return await callback(); - } finally { - try { - await this.closePromise(fd); - await this.unlinkPromise(lockPath); - } catch { - } - } - } - async readJsonPromise(p) { - const content = await this.readFilePromise(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - readJsonSync(p) { - const content = this.readFileSync(p, `utf8`); - try { - return JSON.parse(content); - } catch (error) { - error.message += ` (in ${p})`; - throw error; - } - } - async writeJsonPromise(p, data, { compact = false } = {}) { - const space = compact ? 0 : 2; - return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} -`); - } - writeJsonSync(p, data, { compact = false } = {}) { - const space = compact ? 0 : 2; - return this.writeFileSync(p, `${JSON.stringify(data, null, space)} -`); - } - async preserveTimePromise(p, cb) { - const stat = await this.lstatPromise(p); - const result = await cb(); - if (typeof result !== `undefined`) - p = result; - await this.lutimesPromise(p, stat.atime, stat.mtime); - } - async preserveTimeSync(p, cb) { - const stat = this.lstatSync(p); - const result = cb(); - if (typeof result !== `undefined`) - p = result; - this.lutimesSync(p, stat.atime, stat.mtime); - } -} -class BasePortableFakeFS extends FakeFS { - constructor() { - super(ppath); - } -} -function getEndOfLine(content) { - const matches = content.match(/\r?\n/g); - if (matches === null) - return EOL; - const crlf = matches.filter((nl) => nl === `\r -`).length; - const lf = matches.length - crlf; - return crlf > lf ? `\r -` : ` -`; -} -function normalizeLineEndings(originalContent, newContent) { - return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); -} - -class ProxiedFS extends FakeFS { - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - resolve(path) { - return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); - } - getRealPath() { - return this.mapFromBase(this.baseFs.getRealPath()); - } - async openPromise(p, flags, mode) { - return this.baseFs.openPromise(this.mapToBase(p), flags, mode); - } - openSync(p, flags, mode) { - return this.baseFs.openSync(this.mapToBase(p), flags, mode); - } - async opendirPromise(p, opts) { - return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); - } - opendirSync(p, opts) { - return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); - } - async readPromise(fd, buffer, offset, length, position) { - return await this.baseFs.readPromise(fd, buffer, offset, length, position); - } - readSync(fd, buffer, offset, length, position) { - return this.baseFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return await this.baseFs.writePromise(fd, buffer, offset); - } else { - return await this.baseFs.writePromise(fd, buffer, offset, length, position); - } - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.baseFs.writeSync(fd, buffer, offset); - } else { - return this.baseFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - return this.baseFs.closePromise(fd); - } - closeSync(fd) { - this.baseFs.closeSync(fd); - } - createReadStream(p, opts) { - return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); - } - createWriteStream(p, opts) { - return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); - } - async realpathPromise(p) { - return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); - } - realpathSync(p) { - return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); - } - async existsPromise(p) { - return this.baseFs.existsPromise(this.mapToBase(p)); - } - existsSync(p) { - return this.baseFs.existsSync(this.mapToBase(p)); - } - accessSync(p, mode) { - return this.baseFs.accessSync(this.mapToBase(p), mode); - } - async accessPromise(p, mode) { - return this.baseFs.accessPromise(this.mapToBase(p), mode); - } - async statPromise(p, opts) { - return this.baseFs.statPromise(this.mapToBase(p), opts); - } - statSync(p, opts) { - return this.baseFs.statSync(this.mapToBase(p), opts); - } - async fstatPromise(fd, opts) { - return this.baseFs.fstatPromise(fd, opts); - } - fstatSync(fd, opts) { - return this.baseFs.fstatSync(fd, opts); - } - lstatPromise(p, opts) { - return this.baseFs.lstatPromise(this.mapToBase(p), opts); - } - lstatSync(p, opts) { - return this.baseFs.lstatSync(this.mapToBase(p), opts); - } - async fchmodPromise(fd, mask) { - return this.baseFs.fchmodPromise(fd, mask); - } - fchmodSync(fd, mask) { - return this.baseFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return this.baseFs.chmodPromise(this.mapToBase(p), mask); - } - chmodSync(p, mask) { - return this.baseFs.chmodSync(this.mapToBase(p), mask); - } - async fchownPromise(fd, uid, gid) { - return this.baseFs.fchownPromise(fd, uid, gid); - } - fchownSync(fd, uid, gid) { - return this.baseFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); - } - chownSync(p, uid, gid) { - return this.baseFs.chownSync(this.mapToBase(p), uid, gid); - } - async renamePromise(oldP, newP) { - return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); - } - renameSync(oldP, newP) { - return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); - } - async appendFilePromise(p, content, opts) { - return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); - } - appendFileSync(p, content, opts) { - return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); - } - async writeFilePromise(p, content, opts) { - return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); - } - writeFileSync(p, content, opts) { - return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); - } - async unlinkPromise(p) { - return this.baseFs.unlinkPromise(this.mapToBase(p)); - } - unlinkSync(p) { - return this.baseFs.unlinkSync(this.mapToBase(p)); - } - async utimesPromise(p, atime, mtime) { - return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); - } - utimesSync(p, atime, mtime) { - return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); - } - async lutimesPromise(p, atime, mtime) { - return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); - } - lutimesSync(p, atime, mtime) { - return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return this.baseFs.mkdirPromise(this.mapToBase(p), opts); - } - mkdirSync(p, opts) { - return this.baseFs.mkdirSync(this.mapToBase(p), opts); - } - async rmdirPromise(p, opts) { - return this.baseFs.rmdirPromise(this.mapToBase(p), opts); - } - rmdirSync(p, opts) { - return this.baseFs.rmdirSync(this.mapToBase(p), opts); - } - async rmPromise(p, opts) { - return this.baseFs.rmPromise(this.mapToBase(p), opts); - } - rmSync(p, opts) { - return this.baseFs.rmSync(this.mapToBase(p), opts); - } - async linkPromise(existingP, newP) { - return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); - } - linkSync(existingP, newP) { - return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); - } - async symlinkPromise(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); - } - symlinkSync(target, p, type) { - const mappedP = this.mapToBase(p); - if (this.pathUtils.isAbsolute(target)) - return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); - const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); - const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); - return this.baseFs.symlinkSync(mappedTarget, mappedP, type); - } - async readFilePromise(p, encoding) { - return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); - } - readFileSync(p, encoding) { - return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); - } - readdirPromise(p, opts) { - return this.baseFs.readdirPromise(this.mapToBase(p), opts); - } - readdirSync(p, opts) { - return this.baseFs.readdirSync(this.mapToBase(p), opts); - } - async readlinkPromise(p) { - return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); - } - readlinkSync(p) { - return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); - } - async truncatePromise(p, len) { - return this.baseFs.truncatePromise(this.mapToBase(p), len); - } - truncateSync(p, len) { - return this.baseFs.truncateSync(this.mapToBase(p), len); - } - async ftruncatePromise(fd, len) { - return this.baseFs.ftruncatePromise(fd, len); - } - ftruncateSync(fd, len) { - return this.baseFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.baseFs.watch( - this.mapToBase(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - watchFile(p, a, b) { - return this.baseFs.watchFile( - this.mapToBase(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - unwatchFile(p, cb) { - return this.baseFs.unwatchFile(this.mapToBase(p), cb); - } - fsMapToBase(p) { - if (typeof p === `number`) { - return p; - } else { - return this.mapToBase(p); - } - } -} - -function direntToPortable(dirent) { - const portableDirent = dirent; - if (typeof dirent.path === `string`) - portableDirent.path = npath.toPortablePath(dirent.path); - return portableDirent; -} -class NodeFS extends BasePortableFakeFS { - realFs; - constructor(realFs = fs) { - super(); - this.realFs = realFs; - } - getExtractHint() { - return false; - } - getRealPath() { - return PortablePath.root; - } - resolve(p) { - return ppath.resolve(p); - } - async openPromise(p, flags, mode) { - return await new Promise((resolve, reject) => { - this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); - }); - } - openSync(p, flags, mode) { - return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); - } - async opendirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (typeof opts !== `undefined`) { - this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }).then((dir) => { - const dirWithFixedPath = dir; - Object.defineProperty(dirWithFixedPath, `path`, { - value: p, - configurable: true, - writable: true - }); - return dirWithFixedPath; - }); - } - opendirSync(p, opts) { - const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); - const dirWithFixedPath = dir; - Object.defineProperty(dirWithFixedPath, `path`, { - value: p, - configurable: true, - writable: true - }); - return dirWithFixedPath; - } - async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { - return await new Promise((resolve, reject) => { - this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { - if (error) { - reject(error); - } else { - resolve(bytesRead); - } - }); - }); - } - readSync(fd, buffer, offset, length, position) { - return this.realFs.readSync(fd, buffer, offset, length, position); - } - async writePromise(fd, buffer, offset, length, position) { - return await new Promise((resolve, reject) => { - if (typeof buffer === `string`) { - return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); - } else { - return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); - } - }); - } - writeSync(fd, buffer, offset, length, position) { - if (typeof buffer === `string`) { - return this.realFs.writeSync(fd, buffer, offset); - } else { - return this.realFs.writeSync(fd, buffer, offset, length, position); - } - } - async closePromise(fd) { - await new Promise((resolve, reject) => { - this.realFs.close(fd, this.makeCallback(resolve, reject)); - }); - } - closeSync(fd) { - this.realFs.closeSync(fd); - } - createReadStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createReadStream(realPath, opts); - } - createWriteStream(p, opts) { - const realPath = p !== null ? npath.fromPortablePath(p) : p; - return this.realFs.createWriteStream(realPath, opts); - } - async realpathPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - realpathSync(p) { - return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); - } - async existsPromise(p) { - return await new Promise((resolve) => { - this.realFs.exists(npath.fromPortablePath(p), resolve); - }); - } - accessSync(p, mode) { - return this.realFs.accessSync(npath.fromPortablePath(p), mode); - } - async accessPromise(p, mode) { - return await new Promise((resolve, reject) => { - this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); - }); - } - existsSync(p) { - return this.realFs.existsSync(npath.fromPortablePath(p)); - } - async statPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - statSync(p, opts) { - if (opts) { - return this.realFs.statSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.statSync(npath.fromPortablePath(p)); - } - } - async fstatPromise(fd, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.fstat(fd, this.makeCallback(resolve, reject)); - } - }); - } - fstatSync(fd, opts) { - if (opts) { - return this.realFs.fstatSync(fd, opts); - } else { - return this.realFs.fstatSync(fd); - } - } - async lstatPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - lstatSync(p, opts) { - if (opts) { - return this.realFs.lstatSync(npath.fromPortablePath(p), opts); - } else { - return this.realFs.lstatSync(npath.fromPortablePath(p)); - } - } - async fchmodPromise(fd, mask) { - return await new Promise((resolve, reject) => { - this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); - }); - } - fchmodSync(fd, mask) { - return this.realFs.fchmodSync(fd, mask); - } - async chmodPromise(p, mask) { - return await new Promise((resolve, reject) => { - this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); - }); - } - chmodSync(p, mask) { - return this.realFs.chmodSync(npath.fromPortablePath(p), mask); - } - async fchownPromise(fd, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); - }); - } - fchownSync(fd, uid, gid) { - return this.realFs.fchownSync(fd, uid, gid); - } - async chownPromise(p, uid, gid) { - return await new Promise((resolve, reject) => { - this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); - }); - } - chownSync(p, uid, gid) { - return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); - } - async renamePromise(oldP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - renameSync(oldP, newP) { - return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); - } - async copyFilePromise(sourceP, destP, flags = 0) { - return await new Promise((resolve, reject) => { - this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); - }); - } - copyFileSync(sourceP, destP, flags = 0) { - return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); - } - async appendFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - appendFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.appendFileSync(fsNativePath, content, opts); - } else { - this.realFs.appendFileSync(fsNativePath, content); - } - } - async writeFilePromise(p, content, opts) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); - } - }); - } - writeFileSync(p, content, opts) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - if (opts) { - this.realFs.writeFileSync(fsNativePath, content, opts); - } else { - this.realFs.writeFileSync(fsNativePath, content); - } - } - async unlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }); - } - unlinkSync(p) { - return this.realFs.unlinkSync(npath.fromPortablePath(p)); - } - async utimesPromise(p, atime, mtime) { - return await new Promise((resolve, reject) => { - this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - utimesSync(p, atime, mtime) { - this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); - } - async lutimesPromise(p, atime, mtime) { - return await new Promise((resolve, reject) => { - this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); - }); - } - lutimesSync(p, atime, mtime) { - this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); - } - async mkdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - }); - } - mkdirSync(p, opts) { - return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); - } - async rmdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - rmdirSync(p, opts) { - return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); - } - async rmPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } else { - this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - rmSync(p, opts) { - return this.realFs.rmSync(npath.fromPortablePath(p), opts); - } - async linkPromise(existingP, newP) { - return await new Promise((resolve, reject) => { - this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); - }); - } - linkSync(existingP, newP) { - return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); - } - async symlinkPromise(target, p, type) { - return await new Promise((resolve, reject) => { - this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); - }); - } - symlinkSync(target, p, type) { - return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); - } - async readFilePromise(p, encoding) { - return await new Promise((resolve, reject) => { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); - }); - } - readFileSync(p, encoding) { - const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; - return this.realFs.readFileSync(fsNativePath, encoding); - } - async readdirPromise(p, opts) { - return await new Promise((resolve, reject) => { - if (opts) { - if (opts.recursive && process.platform === `win32`) { - if (opts.withFileTypes) { - this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); - } else { - this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); - } - } else { - this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); - } - } else { - this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - } - }); - } - readdirSync(p, opts) { - if (opts) { - if (opts.recursive && process.platform === `win32`) { - if (opts.withFileTypes) { - return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); - } - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p), opts); - } - } else { - return this.realFs.readdirSync(npath.fromPortablePath(p)); - } - } - async readlinkPromise(p) { - return await new Promise((resolve, reject) => { - this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); - }).then((path) => { - return npath.toPortablePath(path); - }); - } - readlinkSync(p) { - return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); - } - async truncatePromise(p, len) { - return await new Promise((resolve, reject) => { - this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); - }); - } - truncateSync(p, len) { - return this.realFs.truncateSync(npath.fromPortablePath(p), len); - } - async ftruncatePromise(fd, len) { - return await new Promise((resolve, reject) => { - this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); - }); - } - ftruncateSync(fd, len) { - return this.realFs.ftruncateSync(fd, len); - } - watch(p, a, b) { - return this.realFs.watch( - npath.fromPortablePath(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - watchFile(p, a, b) { - return this.realFs.watchFile( - npath.fromPortablePath(p), - // @ts-expect-error - reason TBS - a, - b - ); - } - unwatchFile(p, cb) { - return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); - } - makeCallback(resolve, reject) { - return (err, result) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }; - } -} - -const NUMBER_REGEXP = /^[0-9]+$/; -const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; -const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; -class VirtualFS extends ProxiedFS { - baseFs; - static makeVirtualPath(base, component, to) { - if (ppath.basename(base) !== `__virtual__`) - throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); - if (!ppath.basename(component).match(VALID_COMPONENT)) - throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); - const target = ppath.relative(ppath.dirname(base), to); - const segments = target.split(`/`); - let depth = 0; - while (depth < segments.length && segments[depth] === `..`) - depth += 1; - const finalSegments = segments.slice(depth); - const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); - return fullVirtualPath; - } - static resolveVirtual(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match || !match[3] && match[5]) - return p; - const target = ppath.dirname(match[1]); - if (!match[3] || !match[4]) - return target; - const isnum = NUMBER_REGEXP.test(match[4]); - if (!isnum) - return p; - const depth = Number(match[4]); - const backstep = `../`.repeat(depth); - const subpath = match[5] || `.`; - return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); - } - constructor({ baseFs = new NodeFS() } = {}) { - super(ppath); - this.baseFs = baseFs; - } - getExtractHint(hints) { - return this.baseFs.getExtractHint(hints); - } - getRealPath() { - return this.baseFs.getRealPath(); - } - realpathSync(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return this.baseFs.realpathSync(p); - if (!match[5]) - return p; - const realpath = this.baseFs.realpathSync(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - async realpathPromise(p) { - const match = p.match(VIRTUAL_REGEXP); - if (!match) - return await this.baseFs.realpathPromise(p); - if (!match[5]) - return p; - const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); - return VirtualFS.makeVirtualPath(match[1], match[3], realpath); - } - mapToBase(p) { - if (p === ``) - return p; - if (this.pathUtils.isAbsolute(p)) - return VirtualFS.resolveVirtual(p); - const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); - const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); - return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; - } - mapFromBase(p) { - return p; - } -} - -const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL; - -const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); -const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; -const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3; -const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20; -const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22; -const HAS_BROKEN_FSTAT_FOR_ZIP_FDS = major > 25 || major === 25 && minor >= 7 || major === 24 && minor >= 15; - -function readPackageScope(checkPath) { - const rootSeparatorIndex = checkPath.indexOf(npath.sep); - let separatorIndex; - do { - separatorIndex = checkPath.lastIndexOf(npath.sep); - checkPath = checkPath.slice(0, separatorIndex); - if (checkPath.endsWith(`${npath.sep}node_modules`)) - return false; - const pjson = readPackage(checkPath + npath.sep); - if (pjson) { - return { - data: pjson, - path: checkPath - }; - } - } while (separatorIndex > rootSeparatorIndex); - return false; -} -function readPackage(requestPath) { - const jsonPath = npath.resolve(requestPath, `package.json`); - if (!fs.existsSync(jsonPath)) - return null; - return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); -} - -async function tryReadFile$1(path2) { - try { - return await fs.promises.readFile(path2, `utf8`); - } catch (error) { - if (error.code === `ENOENT`) - return null; - throw error; - } -} -function tryParseURL(str, base) { - try { - return new URL(str, base); - } catch { - return null; - } -} -let entrypointPath = null; -function setEntrypointPath(file) { - entrypointPath = file; -} -function getFileFormat(filepath) { - const ext = path.extname(filepath); - switch (ext) { - case `.mjs`: { - return `module`; - } - case `.cjs`: { - return `commonjs`; - } - case `.wasm`: { - throw new Error( - `Unknown file extension ".wasm" for ${filepath}` - ); - } - case `.json`: { - return `json`; - } - case `.js`: { - const pkg = readPackageScope(filepath); - if (!pkg) - return `commonjs`; - return pkg.data.type ?? `commonjs`; - } - default: { - if (entrypointPath !== filepath) - return null; - const pkg = readPackageScope(filepath); - if (!pkg) - return `commonjs`; - if (pkg.data.type === `module`) - return null; - return pkg.data.type ?? `commonjs`; - } - } -} - -async function load$1(urlString, context, nextLoad) { - const url = tryParseURL(urlString); - if (url?.protocol !== `file:`) - return nextLoad(urlString, context, nextLoad); - const filePath = fileURLToPath(url); - const format = getFileFormat(filePath); - if (!format) - return nextLoad(urlString, context, nextLoad); - if (format === `json`) { - if (SUPPORTS_IMPORT_ATTRIBUTES_ONLY) { - if (context.importAttributes?.type !== `json`) { - const err = new TypeError(`[ERR_IMPORT_ATTRIBUTE_MISSING]: Module "${urlString}" needs an import attribute of "type: json"`); - err.code = `ERR_IMPORT_ATTRIBUTE_MISSING`; - throw err; - } - } else { - const type = `importAttributes` in context ? context.importAttributes?.type : context.importAssertions?.type; - if (type !== `json`) { - const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import ${SUPPORTS_IMPORT_ATTRIBUTES ? `attribute` : `assertion`} of type "json"`); - err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; - throw err; - } - } - } - if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { - const pathToSend = pathToFileURL( - npath.fromPortablePath( - VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) - ) - ).href; - process.send({ - "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend - }); - } - const shouldReadSource = format === `commonjs` && HAS_BROKEN_FSTAT_FOR_ZIP_FDS && filePath.includes(`.zip/`); - const source = format !== `commonjs` || shouldReadSource ? await fs.promises.readFile(filePath, `utf8`) : void 0; - return { - format, - source, - shortCircuit: true - }; -} - -const ArrayIsArray = Array.isArray; -const JSONStringify = JSON.stringify; -const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; -const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); -const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); -const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); -const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); -const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); -const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); -const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); -const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); -const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); -const SafeMap = Map; -const JSONParse = JSON.parse; - -function createErrorType(code, messageCreator, errorType) { - return class extends errorType { - constructor(...args) { - super(messageCreator(...args)); - this.code = code; - this.name = `${errorType.name} [${code}]`; - } - }; -} -const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( - `ERR_PACKAGE_IMPORT_NOT_DEFINED`, - (specifier, packagePath, base) => { - return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; - }, - TypeError -); -const ERR_INVALID_MODULE_SPECIFIER = createErrorType( - `ERR_INVALID_MODULE_SPECIFIER`, - (request, reason, base = void 0) => { - return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; - }, - TypeError -); -const ERR_INVALID_PACKAGE_TARGET = createErrorType( - `ERR_INVALID_PACKAGE_TARGET`, - (pkgPath, key, target, isImport = false, base = void 0) => { - const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); - if (key === `.`) { - assert(isImport === false); - return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - } - return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( - target - )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; - }, - Error -); -const ERR_INVALID_PACKAGE_CONFIG = createErrorType( - `ERR_INVALID_PACKAGE_CONFIG`, - (path, base, message) => { - return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; - }, - Error -); - -function filterOwnProperties(source, keys) { - const filtered = /* @__PURE__ */ Object.create(null); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (ObjectPrototypeHasOwnProperty(source, key)) { - filtered[key] = source[key]; - } - } - return filtered; -} - -const packageJSONCache = new SafeMap(); -function getPackageConfig(path, specifier, base, readFileSyncFn) { - const existing = packageJSONCache.get(path); - if (existing !== void 0) { - return existing; - } - const source = readFileSyncFn(path); - if (source === void 0) { - const packageConfig2 = { - pjsonPath: path, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(path, packageConfig2); - return packageConfig2; - } - let packageJSON; - try { - packageJSON = JSONParse(source); - } catch (error) { - throw new ERR_INVALID_PACKAGE_CONFIG( - path, - (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), - error.message - ); - } - let { imports, main, name, type } = filterOwnProperties(packageJSON, [ - "imports", - "main", - "name", - "type" - ]); - const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; - if (typeof imports !== "object" || imports === null) { - imports = void 0; - } - if (typeof main !== "string") { - main = void 0; - } - if (typeof name !== "string") { - name = void 0; - } - if (type !== "module" && type !== "commonjs") { - type = "none"; - } - const packageConfig = { - pjsonPath: path, - exists: true, - main, - name, - type, - exports, - imports - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; -} -function getPackageScopeConfig(resolved, readFileSyncFn) { - let packageJSONUrl = new URL("./package.json", resolved); - while (true) { - const packageJSONPath2 = packageJSONUrl.pathname; - if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { - break; - } - const packageConfig2 = getPackageConfig( - fileURLToPath(packageJSONUrl), - resolved, - void 0, - readFileSyncFn - ); - if (packageConfig2.exists) { - return packageConfig2; - } - const lastPackageJSONUrl = packageJSONUrl; - packageJSONUrl = new URL("../package.json", packageJSONUrl); - if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { - break; - } - } - const packageJSONPath = fileURLToPath(packageJSONUrl); - const packageConfig = { - pjsonPath: packageJSONPath, - exists: false, - main: void 0, - name: void 0, - type: "none", - exports: void 0, - imports: void 0 - }; - packageJSONCache.set(packageJSONPath, packageConfig); - return packageConfig; -} - -function throwImportNotDefined(specifier, packageJSONUrl, base) { - throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( - specifier, - packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), - fileURLToPath(base) - ); -} -function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { - const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; - throw new ERR_INVALID_MODULE_SPECIFIER( - subpath, - reason, - base && fileURLToPath(base) - ); -} -function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { - if (typeof target === "object" && target !== null) { - target = JSONStringify(target, null, ""); - } else { - target = `${target}`; - } - throw new ERR_INVALID_PACKAGE_TARGET( - fileURLToPath(new URL(".", packageJSONUrl)), - subpath, - target, - internal, - base && fileURLToPath(base) - ); -} -const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; -const patternRegEx = /\*/g; -function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { - if (subpath !== "" && !pattern && target[target.length - 1] !== "/") - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (!StringPrototypeStartsWith(target, "./")) { - if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { - let isURL = false; - try { - new URL(target); - isURL = true; - } catch { - } - if (!isURL) { - const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; - return exportTarget; - } - } - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - } - if (RegExpPrototypeExec( - invalidSegmentRegEx, - StringPrototypeSlice(target, 2) - ) !== null) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - const resolved = new URL(target, packageJSONUrl); - const resolvedPath = resolved.pathname; - const packagePath = new URL(".", packageJSONUrl).pathname; - if (!StringPrototypeStartsWith(resolvedPath, packagePath)) - throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); - if (subpath === "") return resolved; - if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { - const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; - throwInvalidSubpath(request, packageJSONUrl, internal, base); - } - if (pattern) { - return new URL( - RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) - ); - } - return new URL(subpath, resolved); -} -function isArrayIndex(key) { - const keyNum = +key; - if (`${keyNum}` !== key) return false; - return keyNum >= 0 && keyNum < 4294967295; -} -function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { - if (typeof target === "string") { - return resolvePackageTargetString( - target, - subpath, - packageSubpath, - packageJSONUrl, - base, - pattern, - internal); - } else if (ArrayIsArray(target)) { - if (target.length === 0) { - return null; - } - let lastException; - for (let i = 0; i < target.length; i++) { - const targetItem = target[i]; - let resolveResult; - try { - resolveResult = resolvePackageTarget( - packageJSONUrl, - targetItem, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - } catch (e) { - lastException = e; - if (e.code === "ERR_INVALID_PACKAGE_TARGET") { - continue; - } - throw e; - } - if (resolveResult === void 0) { - continue; - } - if (resolveResult === null) { - lastException = null; - continue; - } - return resolveResult; - } - if (lastException === void 0 || lastException === null) - return lastException; - throw lastException; - } else if (typeof target === "object" && target !== null) { - const keys = ObjectGetOwnPropertyNames(target); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (isArrayIndex(key)) { - throw new ERR_INVALID_PACKAGE_CONFIG( - fileURLToPath(packageJSONUrl), - base, - '"exports" cannot contain numeric property keys.' - ); - } - } - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - if (key === "default" || conditions.has(key)) { - const conditionalTarget = target[key]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - conditionalTarget, - subpath, - packageSubpath, - base, - pattern, - internal, - conditions - ); - if (resolveResult === void 0) continue; - return resolveResult; - } - } - return void 0; - } else if (target === null) { - return null; - } - throwInvalidPackageTarget( - packageSubpath, - target, - packageJSONUrl, - internal, - base - ); -} -function patternKeyCompare(a, b) { - const aPatternIndex = StringPrototypeIndexOf(a, "*"); - const bPatternIndex = StringPrototypeIndexOf(b, "*"); - const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; - const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; - if (baseLenA > baseLenB) return -1; - if (baseLenB > baseLenA) return 1; - if (aPatternIndex === -1) return 1; - if (bPatternIndex === -1) return -1; - if (a.length > b.length) return -1; - if (b.length > a.length) return 1; - return 0; -} -function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { - if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { - const reason = "is not a valid internal imports specifier name"; - throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); - } - let packageJSONUrl; - const packageConfig = getPackageScopeConfig(base, readFileSyncFn); - if (packageConfig.exists) { - packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); - const imports = packageConfig.imports; - if (imports) { - if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { - const resolveResult = resolvePackageTarget( - packageJSONUrl, - imports[name], - "", - name, - base, - false, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } else { - let bestMatch = ""; - let bestMatchSubpath; - const keys = ObjectGetOwnPropertyNames(imports); - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const patternIndex = StringPrototypeIndexOf(key, "*"); - if (patternIndex !== -1 && StringPrototypeStartsWith( - name, - StringPrototypeSlice(key, 0, patternIndex) - )) { - const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); - if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { - bestMatch = key; - bestMatchSubpath = StringPrototypeSlice( - name, - patternIndex, - name.length - patternTrailer.length - ); - } - } - } - if (bestMatch) { - const target = imports[bestMatch]; - const resolveResult = resolvePackageTarget( - packageJSONUrl, - target, - bestMatchSubpath, - bestMatch, - base, - true, - true, - conditions - ); - if (resolveResult != null) { - return resolveResult; - } - } - } - } - } - throwImportNotDefined(name, packageJSONUrl, base); -} - -let findPnpApi = esmModule.findPnpApi; -if (!findPnpApi) { - const require = createRequire(import.meta.url); - const pnpApi = require(structuredClone(`./.pnp.cjs`)); - pnpApi.setup(); - findPnpApi = esmModule.findPnpApi; -} -const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; -const isRelativeRegexp = /^\.{0,2}\//; -function tryReadFile(filePath) { - try { - return fs.readFileSync(filePath, `utf8`); - } catch (err) { - if (err.code === `ENOENT`) - return void 0; - throw err; - } -} -async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { - const resolved = packageImportsResolve({ - name: specifier, - base: pathToFileURL(issuer), - conditions: new Set(context.conditions), - readFileSyncFn: tryReadFile - }); - if (resolved instanceof URL) { - return { url: resolved.href, shortCircuit: true }; - } else { - if (resolved.startsWith(`#`)) - throw new Error(`Mapping from one private import to another isn't allowed`); - return resolve$1(resolved, context, nextResolve); - } -} -async function resolve$1(originalSpecifier, context, nextResolve) { - if (!findPnpApi || isBuiltin(originalSpecifier)) - return nextResolve(originalSpecifier, context, nextResolve); - let specifier = originalSpecifier; - const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); - if (url) { - if (url.protocol !== `file:`) - return nextResolve(originalSpecifier, context, nextResolve); - specifier = fileURLToPath(url); - } - const { parentURL, conditions = [] } = context; - const issuer = parentURL && tryParseURL(parentURL)?.protocol === `file:` ? fileURLToPath(parentURL) : process.cwd(); - const pnpapi = findPnpApi(issuer) ?? (url ? findPnpApi(specifier) : null); - if (!pnpapi) - return nextResolve(originalSpecifier, context, nextResolve); - if (specifier.startsWith(`#`)) - return resolvePrivateRequest(specifier, issuer, context, nextResolve); - const dependencyNameMatch = specifier.match(pathRegExp); - let allowLegacyResolve = false; - if (dependencyNameMatch) { - const [, dependencyName, subPath] = dependencyNameMatch; - if (subPath === `` && dependencyName !== `pnpapi`) { - const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); - if (resolved) { - const content = await tryReadFile$1(resolved); - if (content) { - const pkg = JSON.parse(content); - allowLegacyResolve = pkg.exports == null; - } - } - } - } - let result; - try { - result = pnpapi.resolveRequest(specifier, issuer, { - conditions: new Set(conditions), - // TODO: Handle --experimental-specifier-resolution=node - extensions: allowLegacyResolve ? void 0 : [] - }); - } catch (err) { - if (err instanceof Error && `code` in err && err.code === `MODULE_NOT_FOUND`) - err.code = `ERR_MODULE_NOT_FOUND`; - throw err; - } - if (!result) - throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); - const resultURL = pathToFileURL(result); - if (url) { - resultURL.search = url.search; - resultURL.hash = url.hash; - } - if (!parentURL) - setEntrypointPath(fileURLToPath(resultURL)); - return { - url: resultURL.href, - shortCircuit: true - }; -} - -if (!HAS_LAZY_LOADED_TRANSLATORS) { - const binding = process.binding(`fs`); - const originalReadFile = binding.readFileUtf8 || binding.readFileSync; - if (originalReadFile) { - binding[originalReadFile.name] = function(...args) { - try { - return fs.readFileSync(args[0], { - encoding: `utf8`, - // @ts-expect-error - The docs says it needs to be a string but - // links to https://nodejs.org/dist/latest-v20.x/docs/api/fs.html#file-system-flags - // which says it can be a number which matches the implementation. - flag: args[1] - }); - } catch { - } - return originalReadFile.apply(this, args); - }; - } else { - const binding2 = process.binding(`fs`); - const originalfstat = binding2.fstat; - const ZIP_MASK = 4278190080; - const ZIP_MAGIC = 704643072; - binding2.fstat = function(...args) { - const [fd, useBigint, req] = args; - if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { - try { - const stats = fs.fstatSync(fd); - return new Float64Array([ - stats.dev, - stats.mode, - stats.nlink, - stats.uid, - stats.gid, - stats.rdev, - stats.blksize, - stats.ino, - stats.size, - stats.blocks - // atime sec - // atime ns - // mtime sec - // mtime ns - // ctime sec - // ctime ns - // birthtime sec - // birthtime ns - ]); - } catch { - } - } - return originalfstat.apply(this, args); - }; - } -} - -const resolve = resolve$1; -const load = load$1; - -export { load, resolve }; diff --git a/.prettierignore b/.prettierignore index 3e8115bf68..a845c43890 100644 --- a/.prettierignore +++ b/.prettierignore @@ -24,3 +24,7 @@ yarn-error.log* # Generated translation files /public/locales/ + +# Capacitor native projects (Xcode/Gradle-generated files; do not reformat) +/ios/ +/android/ diff --git a/.yarn/cache/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-d638f4d565.zip b/.yarn/cache/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-d638f4d565.zip deleted file mode 100644 index 3e2cb588b9..0000000000 --- a/.yarn/cache/@apideck-better-ajv-errors-npm-0.3.6-8c1868a017-d638f4d565.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:290cdf1b342cecee992932bf8c7719ed16dc68f26e4875cdde8f8901d4aab910 -size 30698 diff --git a/.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.18.9-a2c86d7a16-b4bc214cb5.zip b/.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.18.9-a2c86d7a16-b4bc214cb5.zip deleted file mode 100644 index 9929ec9bea..0000000000 --- a/.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.18.9-a2c86d7a16-b4bc214cb5.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0073d69be44e4c270e76b8cc72684bad962b9aea2591313d7617771fe97b4da2 -size 3263 diff --git a/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.18.6-96a83bc902-8864e3a89f.zip b/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.18.6-96a83bc902-8864e3a89f.zip deleted file mode 100644 index f606d05949..0000000000 --- a/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.18.6-96a83bc902-8864e3a89f.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:245b72d3e7329daa17c1487ca53105a8486195beba70ba09495bac3479ac7d45 -size 5057 diff --git a/.yarn/cache/@babel-helper-define-polyfill-provider-npm-0.3.2-bf05572988-5f6f7676de.zip b/.yarn/cache/@babel-helper-define-polyfill-provider-npm-0.3.2-bf05572988-5f6f7676de.zip deleted file mode 100644 index d22e58fb1a..0000000000 --- a/.yarn/cache/@babel-helper-define-polyfill-provider-npm-0.3.2-bf05572988-5f6f7676de.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d773a4cc8610e46942a715863ee043b4b94d4e7df1b3969ac22cbdc8dc92700d -size 65914 diff --git a/.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.18.6-9b20d989e6-7f298a2572.zip b/.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.18.6-9b20d989e6-7f298a2572.zip deleted file mode 100644 index 0a810ebffb..0000000000 --- a/.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.18.6-9b20d989e6-7f298a2572.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4db83045275eb6b9e39c2e9aacda75e48354971431edb4861033dd4534c573e4 -size 3375 diff --git a/.yarn/cache/@babel-helper-hoist-variables-npm-7.18.6-6eb061f405-fd9c35bb43.zip b/.yarn/cache/@babel-helper-hoist-variables-npm-7.18.6-6eb061f405-fd9c35bb43.zip deleted file mode 100644 index 8b4c6e59cc..0000000000 --- a/.yarn/cache/@babel-helper-hoist-variables-npm-7.18.6-6eb061f405-fd9c35bb43.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca6ebcb3967c3939ef14c6d958c166703d11e95c933c6dadc6ec22b550ce7f39 -size 3059 diff --git a/.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.18.9-c29d128186-4be6076192.zip b/.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.18.9-c29d128186-4be6076192.zip deleted file mode 100644 index 0363ea003d..0000000000 --- a/.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.18.9-c29d128186-4be6076192.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24b8f81eaee0f0fc54917fb7603b05a11dc297952d8bf327a64b1ad74eb901cb -size 3376 diff --git a/.yarn/cache/@babel-helper-wrap-function-npm-7.18.11-170b33a6a7-e2fb909cde.zip b/.yarn/cache/@babel-helper-wrap-function-npm-7.18.11-170b33a6a7-e2fb909cde.zip deleted file mode 100644 index 8932ca9682..0000000000 --- a/.yarn/cache/@babel-helper-wrap-function-npm-7.18.11-170b33a6a7-e2fb909cde.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c37931ffdb277bb2e052cf6add20fd640e0315088bb33d7e049b8943bd62d2cb -size 3528 diff --git a/.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.18.6-f7c2554216-845bd280c5.zip b/.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.18.6-f7c2554216-845bd280c5.zip deleted file mode 100644 index 66a8e80f69..0000000000 --- a/.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.18.6-f7c2554216-845bd280c5.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f1ae43e482573a792247bc6c90a6d461163a74b9c30a5800b32ae540e7fdf77b -size 5603 diff --git a/.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.18.9-4ab877f7f6-93abb5cb17.zip b/.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.18.9-4ab877f7f6-93abb5cb17.zip deleted file mode 100644 index 778a178373..0000000000 --- a/.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.18.9-4ab877f7f6-93abb5cb17.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b12c8faf39522ded794e67a652fda53345b55daa43d4101c825a8ed2b27ecb54 -size 6112 diff --git a/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.18.10-989de7a51c-3a6c250850.zip b/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.18.10-989de7a51c-3a6c250850.zip deleted file mode 100644 index c3dd01dc7c..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.18.10-989de7a51c-3a6c250850.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fbb80761a022421bcdc34cc486ccdac893db6f687e6edee5a04d90ec3cd00be0 -size 4784 diff --git a/.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.6-abe0aa00be-b8d7ae99ed.zip b/.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.6-abe0aa00be-b8d7ae99ed.zip deleted file mode 100644 index 812c087f68..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.6-abe0aa00be-b8d7ae99ed.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:08179e986efdd26fb0889484e39176de130d59284616558d2c886b57a7704b31 -size 3531 diff --git a/.yarn/cache/@babel-plugin-proposal-dynamic-import-npm-7.18.6-73822d1a00-96b1c8a8ad.zip b/.yarn/cache/@babel-plugin-proposal-dynamic-import-npm-7.18.6-73822d1a00-96b1c8a8ad.zip deleted file mode 100644 index eae68fa774..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-dynamic-import-npm-7.18.6-73822d1a00-96b1c8a8ad.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ee1947ee8b89e9873df0fe69ca189f711b96ae83a1c10c75ae8a54c2878dfe2 -size 3222 diff --git a/.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.18.9-6093116864-84ff22bacc.zip b/.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.18.9-6093116864-84ff22bacc.zip deleted file mode 100644 index 1c607d7768..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.18.9-6093116864-84ff22bacc.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ff8a1809a2143cfe324bf2110484faaec29025aedcab1f44ddc6cfffcb741e0 -size 3376 diff --git a/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.18.6-af58bc33f9-25ba0e6b9d.zip b/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.18.6-af58bc33f9-25ba0e6b9d.zip deleted file mode 100644 index 97d4610bd4..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.18.6-af58bc33f9-25ba0e6b9d.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:515f068e902217a880a50a0d0764bf91f53f271072c964ab5d10d71e4df13b2e -size 3174 diff --git a/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.18.9-53329219f5-dd87fa4a48.zip b/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.18.9-53329219f5-dd87fa4a48.zip deleted file mode 100644 index dcaf3dff32..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.18.9-53329219f5-dd87fa4a48.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99f8fc51a230104111d324bb4477e6de4899655ed2aeb654355cf1356d5c5d98 -size 3502 diff --git a/.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.18.6-cf22ea8526-949c9ddcde.zip b/.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.18.6-cf22ea8526-949c9ddcde.zip deleted file mode 100644 index 36eabca438..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.18.6-cf22ea8526-949c9ddcde.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe25de772f43ecc6e557122b4cc2346ef58bc0cc2e479369c81c392d1a399d68 -size 3499 diff --git a/.yarn/cache/@babel-plugin-proposal-numeric-separator-npm-7.18.6-cfcd55888a-f370ea584c.zip b/.yarn/cache/@babel-plugin-proposal-numeric-separator-npm-7.18.6-cfcd55888a-f370ea584c.zip deleted file mode 100644 index b72c2cb144..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-numeric-separator-npm-7.18.6-cfcd55888a-f370ea584c.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ec1ae52e39731ffd6e099b2ef9db1a89d59798d7a518b04be8f18651006c0a9 -size 3137 diff --git a/.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.18.6-a4235a25be-7b5b39fb5d.zip b/.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.18.6-a4235a25be-7b5b39fb5d.zip deleted file mode 100644 index 28904948a1..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.18.6-a4235a25be-7b5b39fb5d.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3d61bb34e33b739237a7e1d575d384f7fdfc77515b06854057b1f002cc57348f -size 3113 diff --git a/.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.18.9-f7302c42f9-a822140947.zip b/.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.18.9-f7302c42f9-a822140947.zip deleted file mode 100644 index ff1df426da..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.18.9-f7302c42f9-a822140947.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:89ccae3187ce022d78b6053625300b9e152923a634f14e0049c8880ed5e1c2a8 -size 11734 diff --git a/.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.18.6-55729207b7-22d8502ee9.zip b/.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.18.6-55729207b7-22d8502ee9.zip deleted file mode 100644 index 5390649613..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.18.6-55729207b7-22d8502ee9.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:82acb865460aba3b8072dd050c1bb66c665d45e12df127f6dfb61f3e2d332660 -size 3010 diff --git a/.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.18.6-755223e615-c8e56a9729.zip b/.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.18.6-755223e615-c8e56a9729.zip deleted file mode 100644 index b3d287058e..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.18.6-755223e615-c8e56a9729.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c6c4135caabec54642f76289a7092673db8e70927d4c88c28d68bb359c5c34b -size 4324 diff --git a/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.18.6-3a6294aa39-a8575ecb7f.zip b/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.18.6-3a6294aa39-a8575ecb7f.zip deleted file mode 100644 index 2879caa335..0000000000 --- a/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.18.6-3a6294aa39-a8575ecb7f.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:046d3c12b0fde96201ec36f5ad0a04280615803ecc8bc388294fffe2a9378eb5 -size 3195 diff --git a/.yarn/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-3e80814b5b.zip b/.yarn/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-3e80814b5b.zip deleted file mode 100644 index 27cc9c6515..0000000000 --- a/.yarn/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-3e80814b5b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f380fed84d2658ac6a3b49bbf5e1aa5372244d7fca7deb0dea31068471fc52dd -size 2900 diff --git a/.yarn/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-ce307af83c.zip b/.yarn/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-ce307af83c.zip deleted file mode 100644 index a2edfe9a7d..0000000000 --- a/.yarn/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-ce307af83c.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4036d8051d60e6aeabdefea3f66cc1c5d621d78ad573430c2f641cf70d797522 -size 2757 diff --git a/.yarn/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-85740478be.zip b/.yarn/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-85740478be.zip deleted file mode 100644 index 3420971f2a..0000000000 --- a/.yarn/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-85740478be.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c2bcb96f3f5d550cc9ee4bae861645ac7e30df8fdc776524f5ab9efef4f61ff -size 2900 diff --git a/.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.18.6-b2578fc1d0-15feccba34.zip b/.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.18.6-b2578fc1d0-15feccba34.zip deleted file mode 100644 index 1e789aa80f..0000000000 --- a/.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.18.6-b2578fc1d0-15feccba34.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e02059136debe497eb54d7d1c1adf9aabc1ca0029aa6ff7a297799d80a962784 -size 3478 diff --git a/.yarn/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-b317174783.zip b/.yarn/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-b317174783.zip deleted file mode 100644 index d2c68d7434..0000000000 --- a/.yarn/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-b317174783.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1ce094728831c7756eaef002808b13235cb14eb31410b81fc9a8436ca5fb468f -size 3028 diff --git a/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.18.6-17dc8a459f-c2cca47468.zip b/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.18.6-17dc8a459f-c2cca47468.zip deleted file mode 100644 index cba202b5cc..0000000000 --- a/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.18.6-17dc8a459f-c2cca47468.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:31416156f99db79510d5ace3bbc14ae1face11568ea06faf2abd62c68fe5ee51 -size 3327 diff --git a/.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.18.6-6cf8766a0f-cbe5d7063e.zip b/.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.18.6-6cf8766a0f-cbe5d7063e.zip deleted file mode 100644 index b1f6c37898..0000000000 --- a/.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.18.6-6cf8766a0f-cbe5d7063e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:441cc183d8805c91118ebe68e536ae474be98e178fb1d7bf667730242723a24c -size 2984 diff --git a/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.18.9-5c77fd31ac-220bf4a9fe.zip b/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.18.9-5c77fd31ac-220bf4a9fe.zip deleted file mode 100644 index b1dd7676fa..0000000000 --- a/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.18.9-5c77fd31ac-220bf4a9fe.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ecb811ed32b6ca806e7908571121fa0c7d3f620f907873a733c555c0256ecec -size 3273 diff --git a/.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.18.6-2c202b4eb5-7f70222f68.zip b/.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.18.6-2c202b4eb5-7f70222f68.zip deleted file mode 100644 index ea090867fb..0000000000 --- a/.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.18.6-2c202b4eb5-7f70222f68.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d56ca2919e2291cbbb746480e3c22ff0de6ec873214e827130633a67d69de491 -size 3162 diff --git a/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.6-bb510ab5c3-f60c4c4e0e.zip b/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.6-bb510ab5c3-f60c4c4e0e.zip deleted file mode 100644 index 93c31d92cd..0000000000 --- a/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.6-bb510ab5c3-f60c4c4e0e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0934406bc07535fca96d0edf590717140f6d8e95f8495cd164292603405792d0 -size 4252 diff --git a/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.9-9ded98c00e-22a28b5002.zip b/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.9-9ded98c00e-22a28b5002.zip deleted file mode 100644 index a7f3b9c0aa..0000000000 --- a/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.9-9ded98c00e-22a28b5002.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0291830b28b16727357b90d5da4920caa1be453a19e6a5c5236e1a7164dd5de5 -size 6506 diff --git a/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.6-d649b47a80-664367f26f.zip b/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.6-d649b47a80-664367f26f.zip deleted file mode 100644 index f6c961d5fa..0000000000 --- a/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.6-d649b47a80-664367f26f.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f0547d3740600557a70cfd6d407f82ff03a35cfc72c8b8af569e50d5359be84 -size 4479 diff --git a/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.18.6-dc604756da-6ef64aa3da.zip b/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.18.6-dc604756da-6ef64aa3da.zip deleted file mode 100644 index 4696abb892..0000000000 --- a/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.18.6-dc604756da-6ef64aa3da.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:be6c7af52ca85572cd54a0bf0978319d30c74406d1e7bb85eb65976c186512b3 -size 3265 diff --git a/.yarn/cache/@babel-plugin-transform-new-target-npm-7.18.6-1067ae195f-bd780e14f4.zip b/.yarn/cache/@babel-plugin-transform-new-target-npm-7.18.6-1067ae195f-bd780e14f4.zip deleted file mode 100644 index b35a3c0464..0000000000 --- a/.yarn/cache/@babel-plugin-transform-new-target-npm-7.18.6-1067ae195f-bd780e14f4.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b09fd761add06d9aa59876c238bff1ffbe0647706cb43c62bf5c7133c7cd2ed5 -size 3413 diff --git a/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.6-176f080664-60bd482cb0.zip b/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.6-176f080664-60bd482cb0.zip deleted file mode 100644 index 9152415278..0000000000 --- a/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.6-176f080664-60bd482cb0.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c96b934f75ab5ff3f2f697d3f6938aeb013e029902e0eee1ec16b69e044b37a4 -size 3098 diff --git a/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.18.6-9136c5120e-0738cdc30a.zip b/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.18.6-9136c5120e-0738cdc30a.zip deleted file mode 100644 index 17e0dfb663..0000000000 --- a/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.18.6-9136c5120e-0738cdc30a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ccfec27e116f7eee0f1293f95e4fe2443cf4ccf904bc2d4b8f2d1c01a21af86 -size 2962 diff --git a/.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.18.6-a75414f831-68ea18884a.zip b/.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.18.6-a75414f831-68ea18884a.zip deleted file mode 100644 index 94c5ded606..0000000000 --- a/.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.18.6-a75414f831-68ea18884a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5d5a427eefd2d05e0929f7ed5405efdfb9b9c90025500a37709d6403f00f1b17 -size 3026 diff --git a/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.18.9-0775d325d9-e754e0d8b8.zip b/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.18.9-0775d325d9-e754e0d8b8.zip deleted file mode 100644 index 5876d44787..0000000000 --- a/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.18.9-0775d325d9-e754e0d8b8.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8cfa74452926512d97c66783fc066d11436f953901f7412f947c6e01f0c2eff9 -size 3610 diff --git a/.yarn/cache/@babel-plugin-transform-unicode-escapes-npm-7.18.10-83a00fbee1-f5baca55cb.zip b/.yarn/cache/@babel-plugin-transform-unicode-escapes-npm-7.18.10-83a00fbee1-f5baca55cb.zip deleted file mode 100644 index 765fbb7283..0000000000 --- a/.yarn/cache/@babel-plugin-transform-unicode-escapes-npm-7.18.10-83a00fbee1-f5baca55cb.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5000a3d32924802f0c9ed5c3f9a5068ca1e329deef9d34dfcc69c8a81695c23b -size 3929 diff --git a/.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.18.6-0f8a7395d6-d9e18d5753.zip b/.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.18.6-0f8a7395d6-d9e18d5753.zip deleted file mode 100644 index 009fe119b8..0000000000 --- a/.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.18.6-0f8a7395d6-d9e18d5753.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ae666d931ec78a33e956f2dc40fda2ddaa7bb029a830041abfd4c02f801fa3c1 -size 2933 diff --git a/.yarn/cache/@babel-preset-env-npm-7.18.10-929f463951-87f99240fc.zip b/.yarn/cache/@babel-preset-env-npm-7.18.10-929f463951-87f99240fc.zip deleted file mode 100644 index 1f7a64fb1c..0000000000 --- a/.yarn/cache/@babel-preset-env-npm-7.18.10-929f463951-87f99240fc.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f1790a863d245be71d49230f69ea8b7f88f2664b9ad3c21b3814a92c951341eb -size 20738 diff --git a/.yarn/cache/@babel-preset-modules-npm-0.1.5-15ffcd64c2-41583c1774.zip b/.yarn/cache/@babel-preset-modules-npm-0.1.5-15ffcd64c2-41583c1774.zip deleted file mode 100644 index feb50e7108..0000000000 --- a/.yarn/cache/@babel-preset-modules-npm-0.1.5-15ffcd64c2-41583c1774.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44e4284f5e7d21140876bab1edc0a86dd62893d128e5963a079bf8dc649e9180 -size 25145 diff --git a/.yarn/cache/@capacitor-android-npm-7.6.6-4cecf30511-ff46d65a69.zip b/.yarn/cache/@capacitor-android-npm-7.6.6-4cecf30511-ff46d65a69.zip new file mode 100644 index 0000000000..b4f7d01a10 --- /dev/null +++ b/.yarn/cache/@capacitor-android-npm-7.6.6-4cecf30511-ff46d65a69.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da3c8956b3bb15bf3b2b27b7bc0d69f0a25ccb688d7af338bdbe5d09e8d4d1b2 +size 124299 diff --git a/.yarn/cache/@capacitor-app-npm-7.1.2-74d0aff225-f48ebfca4e.zip b/.yarn/cache/@capacitor-app-npm-7.1.2-74d0aff225-f48ebfca4e.zip new file mode 100644 index 0000000000..eb45e8ac5e --- /dev/null +++ b/.yarn/cache/@capacitor-app-npm-7.1.2-74d0aff225-f48ebfca4e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff61a501036781f7f0e1c247d6b14c0babb412fc77295078ad070862561ff248 +size 27623 diff --git a/.yarn/cache/@capacitor-assets-npm-3.0.5-6528b1d5ec-e523464d2b.zip b/.yarn/cache/@capacitor-assets-npm-3.0.5-6528b1d5ec-e523464d2b.zip new file mode 100644 index 0000000000..1552c6ed44 --- /dev/null +++ b/.yarn/cache/@capacitor-assets-npm-3.0.5-6528b1d5ec-e523464d2b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:766c62053e2fb02b74f587e45fd25645f65ae6f1f2ba9772099a53292a8588ad +size 39485 diff --git a/.yarn/cache/@capacitor-browser-npm-7.0.5-8d07f00242-db808d8338.zip b/.yarn/cache/@capacitor-browser-npm-7.0.5-8d07f00242-db808d8338.zip new file mode 100644 index 0000000000..369bcce53b --- /dev/null +++ b/.yarn/cache/@capacitor-browser-npm-7.0.5-8d07f00242-db808d8338.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35518dd5793b67ec56e2e569cb0581011912dc3abbd66815f2ecdf10eb20c166 +size 26301 diff --git a/.yarn/cache/@capacitor-camera-npm-7.0.5-8a77689a2e-c0be0c6c23.zip b/.yarn/cache/@capacitor-camera-npm-7.0.5-8a77689a2e-c0be0c6c23.zip new file mode 100644 index 0000000000..5d800f0bd3 --- /dev/null +++ b/.yarn/cache/@capacitor-camera-npm-7.0.5-8a77689a2e-c0be0c6c23.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad99d1d0e5e4ba827b33be787923a834a27756b1670f4ad5a154b4242917ed18 +size 68076 diff --git a/.yarn/cache/@capacitor-cli-npm-5.7.8-6ba9293647-9be6cfa45b.zip b/.yarn/cache/@capacitor-cli-npm-5.7.8-6ba9293647-9be6cfa45b.zip new file mode 100644 index 0000000000..c0fb800f86 --- /dev/null +++ b/.yarn/cache/@capacitor-cli-npm-5.7.8-6ba9293647-9be6cfa45b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bb4578ee0a74ab5454e2f7c1eaa6fc83c1653b14993cc7fa81c19406aba4b9d +size 487844 diff --git a/.yarn/cache/@capacitor-cli-npm-7.6.6-c25ab16592-9329d915f1.zip b/.yarn/cache/@capacitor-cli-npm-7.6.6-c25ab16592-9329d915f1.zip new file mode 100644 index 0000000000..e1e8aee7a9 --- /dev/null +++ b/.yarn/cache/@capacitor-cli-npm-7.6.6-c25ab16592-9329d915f1.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6755c1bec80f92a6279700f65e83e2832a4eae0d09f0ce3e64893dd84c0ffe98 +size 634880 diff --git a/.yarn/cache/@capacitor-core-npm-7.6.6-237ca9732f-041e7e2245.zip b/.yarn/cache/@capacitor-core-npm-7.6.6-237ca9732f-041e7e2245.zip new file mode 100644 index 0000000000..f1f2a40ab9 --- /dev/null +++ b/.yarn/cache/@capacitor-core-npm-7.6.6-237ca9732f-041e7e2245.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7271b2d4873b5dafa417618c8e7ca023c34b4a813c90784eebdd95c61db68fcc +size 81299 diff --git a/.yarn/cache/@capacitor-device-npm-7.0.5-b315ccc4ed-d6bcb945b5.zip b/.yarn/cache/@capacitor-device-npm-7.0.5-b315ccc4ed-d6bcb945b5.zip new file mode 100644 index 0000000000..f0ed1b1840 --- /dev/null +++ b/.yarn/cache/@capacitor-device-npm-7.0.5-b315ccc4ed-d6bcb945b5.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98799a2e4010a40c4ff8ea33c5a6704bb3d9c930f793ad567420edb7ae098a8b +size 36126 diff --git a/.yarn/cache/babel-plugin-polyfill-regenerator-npm-0.4.0-a9417e5ddf-699aa9c0dc.zip b/.yarn/cache/@capacitor-haptics-npm-7.0.5-85528f7109-fa2d1c892a.zip similarity index 82% rename from .yarn/cache/babel-plugin-polyfill-regenerator-npm-0.4.0-a9417e5ddf-699aa9c0dc.zip rename to .yarn/cache/@capacitor-haptics-npm-7.0.5-85528f7109-fa2d1c892a.zip index c5de79f795..e458a2c05b 100644 --- a/.yarn/cache/babel-plugin-polyfill-regenerator-npm-0.4.0-a9417e5ddf-699aa9c0dc.zip +++ b/.yarn/cache/@capacitor-haptics-npm-7.0.5-85528f7109-fa2d1c892a.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8175de443dfe7932861f00127625b385f8c49561fca85f12b26552f373f89d61 -size 5940 +oid sha256:faab8589e54fc705c2c56c7e0e78921aa6fdd180cc9d6dde40191eef38de9c2f +size 29443 diff --git a/.yarn/cache/@capacitor-ios-npm-7.6.6-505aa83d67-c804b01496.zip b/.yarn/cache/@capacitor-ios-npm-7.6.6-505aa83d67-c804b01496.zip new file mode 100644 index 0000000000..2625a47dca --- /dev/null +++ b/.yarn/cache/@capacitor-ios-npm-7.6.6-505aa83d67-c804b01496.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c847d2f8f9fadbcfb302677d6b91c5d6d97d1971dbd1bbda7d7d4eb9345fc0f3 +size 136102 diff --git a/.yarn/cache/@capacitor-push-notifications-npm-7.0.6-21a3cdd34a-159ec80954.zip b/.yarn/cache/@capacitor-push-notifications-npm-7.0.6-21a3cdd34a-159ec80954.zip new file mode 100644 index 0000000000..eb8d2ad35a --- /dev/null +++ b/.yarn/cache/@capacitor-push-notifications-npm-7.0.6-21a3cdd34a-159ec80954.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a33cbfc6f9cd8b7986a7742a80b90c1be6d5bc671e0f36d73d5a480bce0e9d9 +size 36476 diff --git a/.yarn/cache/@capacitor-splash-screen-npm-7.0.5-44a4159f4c-6b4668150c.zip b/.yarn/cache/@capacitor-splash-screen-npm-7.0.5-44a4159f4c-6b4668150c.zip new file mode 100644 index 0000000000..13d1c72313 --- /dev/null +++ b/.yarn/cache/@capacitor-splash-screen-npm-7.0.5-44a4159f4c-6b4668150c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afc22b06994f7bbb043a8f52e0050ec35735f5e5b46c113d1b41ac0a937a4360 +size 35148 diff --git a/.yarn/cache/@capacitor-status-bar-npm-7.0.6-0be922d162-1658ae3b95.zip b/.yarn/cache/@capacitor-status-bar-npm-7.0.6-0be922d162-1658ae3b95.zip new file mode 100644 index 0000000000..e7da7d9e5f --- /dev/null +++ b/.yarn/cache/@capacitor-status-bar-npm-7.0.6-0be922d162-1658ae3b95.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c7d122a748491b772ddce459fd903bbf36683e13bf0465566cf06b4ebbcbae7 +size 32415 diff --git a/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-b6e38a1712.zip b/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-b6e38a1712.zip new file mode 100644 index 0000000000..9bf30a4a3a --- /dev/null +++ b/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-b6e38a1712.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa1234ff7a4c1a69baaf5214213b85f61618eea1b4f11fde6ed49ca49b5ad70c +size 35047 diff --git a/.yarn/cache/@hutson-parse-repository-url-npm-3.0.2-ae5ef1b671-dae0656f2e.zip b/.yarn/cache/@hutson-parse-repository-url-npm-3.0.2-ae5ef1b671-dae0656f2e.zip new file mode 100644 index 0000000000..d3a15f49c3 --- /dev/null +++ b/.yarn/cache/@hutson-parse-repository-url-npm-3.0.2-ae5ef1b671-dae0656f2e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e1cd4e8be153990ff686f736253acf78dd3b6f46f44cea11915c683c916dbe0 +size 8854 diff --git a/.yarn/cache/@ionic-cli-framework-output-npm-2.2.8-2b1a3037c5-773cf0cdbd.zip b/.yarn/cache/@ionic-cli-framework-output-npm-2.2.8-2b1a3037c5-773cf0cdbd.zip new file mode 100644 index 0000000000..6b1cd73744 --- /dev/null +++ b/.yarn/cache/@ionic-cli-framework-output-npm-2.2.8-2b1a3037c5-773cf0cdbd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db0720a59e60d8f2d1423bf157fa2aefc6931073fd7eed746a56314504c696bd +size 12723 diff --git a/.yarn/cache/@ionic-utils-array-npm-2.1.6-5dafb3fbba-13d7b56906.zip b/.yarn/cache/@ionic-utils-array-npm-2.1.6-5dafb3fbba-13d7b56906.zip new file mode 100644 index 0000000000..1d7b9fdf67 --- /dev/null +++ b/.yarn/cache/@ionic-utils-array-npm-2.1.6-5dafb3fbba-13d7b56906.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c6d847d47d2b9f5d6a5231da16d51da85f80fbb854236a3e2186153e0cc880b +size 5188 diff --git a/.yarn/cache/@ionic-utils-fs-npm-3.1.7-cd2eb3d8db-65279a445b.zip b/.yarn/cache/@ionic-utils-fs-npm-3.1.7-cd2eb3d8db-65279a445b.zip new file mode 100644 index 0000000000..437fdafb0e --- /dev/null +++ b/.yarn/cache/@ionic-utils-fs-npm-3.1.7-cd2eb3d8db-65279a445b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15e1990ae7691718651873afe01aa97d37569374ce2bbb8d507a602c7803f95d +size 9565 diff --git a/.yarn/cache/is-regexp-npm-1.0.0-8f95f51a0c-be692828e2.zip b/.yarn/cache/@ionic-utils-object-npm-2.1.6-65993b6a53-c545f09ede.zip similarity index 82% rename from .yarn/cache/is-regexp-npm-1.0.0-8f95f51a0c-be692828e2.zip rename to .yarn/cache/@ionic-utils-object-npm-2.1.6-65993b6a53-c545f09ede.zip index b245acdc4a..df4fe878cf 100644 --- a/.yarn/cache/is-regexp-npm-1.0.0-8f95f51a0c-be692828e2.zip +++ b/.yarn/cache/@ionic-utils-object-npm-2.1.6-65993b6a53-c545f09ede.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81d72e94da33d83edd094b4a2c4a9d4fc56e61d54fd01b6af749986a02b8d9ee -size 1334 +oid sha256:dcebb0293002583a47fc04366d8089b6a5f1ad659956d7d15cd4558019e19051 +size 4402 diff --git a/.yarn/cache/@ionic-utils-process-npm-2.1.11-cbea6d4148-909f90c910.zip b/.yarn/cache/@ionic-utils-process-npm-2.1.11-cbea6d4148-909f90c910.zip new file mode 100644 index 0000000000..79dacd7ec3 --- /dev/null +++ b/.yarn/cache/@ionic-utils-process-npm-2.1.11-cbea6d4148-909f90c910.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05b9ad4e977c74d018399e35189c5045121c82105725ccc94a5d2ef61eff1729 +size 6744 diff --git a/.yarn/cache/@ionic-utils-process-npm-2.1.12-a96809e006-3a94eeb4cc.zip b/.yarn/cache/@ionic-utils-process-npm-2.1.12-a96809e006-3a94eeb4cc.zip new file mode 100644 index 0000000000..32e836ba7c --- /dev/null +++ b/.yarn/cache/@ionic-utils-process-npm-2.1.12-a96809e006-3a94eeb4cc.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85898469cfed85a97739e9cd275fbeb1f6b30c675f4b999954e25cc0fbbf1735 +size 5502 diff --git a/.yarn/cache/@ionic-utils-stream-npm-3.1.6-61dbb7b59f-cd207a12fd.zip b/.yarn/cache/@ionic-utils-stream-npm-3.1.6-61dbb7b59f-cd207a12fd.zip new file mode 100644 index 0000000000..9e2155969c --- /dev/null +++ b/.yarn/cache/@ionic-utils-stream-npm-3.1.6-61dbb7b59f-cd207a12fd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88871bc8f3765e065ed7bd105bd1c75938921877b6567c4282db50c4db92cd8a +size 5071 diff --git a/.yarn/cache/@ionic-utils-stream-npm-3.1.7-a79fee8ca7-23667cfeaa.zip b/.yarn/cache/@ionic-utils-stream-npm-3.1.7-a79fee8ca7-23667cfeaa.zip new file mode 100644 index 0000000000..74e832e9d7 --- /dev/null +++ b/.yarn/cache/@ionic-utils-stream-npm-3.1.7-a79fee8ca7-23667cfeaa.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fccd50e8b4919d62d831eff5ee333fa1a0e9efef29530c7f782facb79922696 +size 3965 diff --git a/.yarn/cache/@ionic-utils-subprocess-npm-2.1.14-d8ad29427e-ae8e2a45bc.zip b/.yarn/cache/@ionic-utils-subprocess-npm-2.1.14-d8ad29427e-ae8e2a45bc.zip new file mode 100644 index 0000000000..47569d729b --- /dev/null +++ b/.yarn/cache/@ionic-utils-subprocess-npm-2.1.14-d8ad29427e-ae8e2a45bc.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:720eb961d04f0cd279abdc20a4cf4e274ff1d668abe488cb71f2a8b94231aa67 +size 6371 diff --git a/.yarn/cache/@ionic-utils-subprocess-npm-3.0.1-96e6bb4c64-7411d691b3.zip b/.yarn/cache/@ionic-utils-subprocess-npm-3.0.1-96e6bb4c64-7411d691b3.zip new file mode 100644 index 0000000000..57d29af357 --- /dev/null +++ b/.yarn/cache/@ionic-utils-subprocess-npm-3.0.1-96e6bb4c64-7411d691b3.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94a2bd6ca73e4281fce95116933c452b29db470477154bbd6a6f9ec738a87f44 +size 6359 diff --git a/.yarn/cache/@ionic-utils-terminal-npm-2.3.4-f9ebfa9ad9-f7e73bdd97.zip b/.yarn/cache/@ionic-utils-terminal-npm-2.3.4-f9ebfa9ad9-f7e73bdd97.zip new file mode 100644 index 0000000000..9cbf0c8247 --- /dev/null +++ b/.yarn/cache/@ionic-utils-terminal-npm-2.3.4-f9ebfa9ad9-f7e73bdd97.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd0c2a9d0585993440aaed0f3b2b4eed910745b0b6a7233c41f04d2febf21d19 +size 10268 diff --git a/.yarn/cache/@ionic-utils-terminal-npm-2.3.5-e411be1041-40bae30f8c.zip b/.yarn/cache/@ionic-utils-terminal-npm-2.3.5-e411be1041-40bae30f8c.zip new file mode 100644 index 0000000000..717a823892 --- /dev/null +++ b/.yarn/cache/@ionic-utils-terminal-npm-2.3.5-e411be1041-40bae30f8c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd5a1365426e5c153421a43a26116a10fe08f70023fe17b789710fdccdbac6fb +size 8768 diff --git a/.yarn/cache/@jridgewell-source-map-npm-0.3.2-6fd1f37b22-1aaa42075b.zip b/.yarn/cache/@jridgewell-source-map-npm-0.3.2-6fd1f37b22-1aaa42075b.zip deleted file mode 100644 index dfbe08718c..0000000000 --- a/.yarn/cache/@jridgewell-source-map-npm-0.3.2-6fd1f37b22-1aaa42075b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f68e599dddafe430d5c4a4c81a8cd2abbbffaeb1621f33dad70ecdb6567d3381 -size 56381 diff --git a/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-83deafb8e7.zip b/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-83deafb8e7.zip new file mode 100644 index 0000000000..f6085de49e --- /dev/null +++ b/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-83deafb8e7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:409c4c1f0eddc7f73099cc3dcbb9cb551324d736674a28cfe4893493abb474c3 +size 28194 diff --git a/.yarn/cache/@prettier-plugin-xml-npm-2.2.0-6f7f477d74-e83239f335.zip b/.yarn/cache/@prettier-plugin-xml-npm-2.2.0-6f7f477d74-e83239f335.zip new file mode 100644 index 0000000000..e9f5d10359 --- /dev/null +++ b/.yarn/cache/@prettier-plugin-xml-npm-2.2.0-6f7f477d74-e83239f335.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a7d443abbb2184de21340613b2c794ad074d60425df33c8944877c1f2e9ed38 +size 14082 diff --git a/.yarn/cache/@rollup-plugin-babel-npm-5.3.1-6039a4d033-eb3ee5fedd.zip b/.yarn/cache/@rollup-plugin-babel-npm-5.3.1-6039a4d033-eb3ee5fedd.zip deleted file mode 100644 index 27596c3928..0000000000 --- a/.yarn/cache/@rollup-plugin-babel-npm-5.3.1-6039a4d033-eb3ee5fedd.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5773c455079a5bbe9039669327d5bc307b9588875bf8d86d6cb7fc1d81e1f13 -size 23258 diff --git a/.yarn/cache/@rollup-plugin-node-resolve-npm-11.2.1-1cea144df4-8007f6a01d.zip b/.yarn/cache/@rollup-plugin-node-resolve-npm-11.2.1-1cea144df4-8007f6a01d.zip deleted file mode 100644 index 28787487da..0000000000 --- a/.yarn/cache/@rollup-plugin-node-resolve-npm-11.2.1-1cea144df4-8007f6a01d.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:567fa863d8e5f5f4fab4383aed94a36ee4a95992a6f829bf4cf1fb160bc9e74c -size 27538 diff --git a/.yarn/cache/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-fc4844c4cd.zip b/.yarn/cache/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-fc4844c4cd.zip deleted file mode 100644 index 51e5fbe1d0..0000000000 --- a/.yarn/cache/@rollup-plugin-replace-npm-2.4.2-86e64ab79f-fc4844c4cd.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ea5453d77994cc1f1b9b246b97302897a227a88b8182419423031b7912579c7 -size 10764 diff --git a/.yarn/cache/@rollup-pluginutils-npm-3.1.0-b44b222e7d-3b69f02893.zip b/.yarn/cache/@rollup-pluginutils-npm-3.1.0-b44b222e7d-3b69f02893.zip deleted file mode 100644 index da665f51ac..0000000000 --- a/.yarn/cache/@rollup-pluginutils-npm-3.1.0-b44b222e7d-3b69f02893.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df10ca121e28326ccc95f63262d1242b754d83880adb6b004a267ba1808418aa -size 17693 diff --git a/.yarn/cache/@serwist-build-npm-9.5.11-67c706afb1-e51df73eac.zip b/.yarn/cache/@serwist-build-npm-9.5.11-67c706afb1-e51df73eac.zip new file mode 100644 index 0000000000..79b6805b36 --- /dev/null +++ b/.yarn/cache/@serwist-build-npm-9.5.11-67c706afb1-e51df73eac.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1b0ca508d33e9ee0d6dcb7f235391192280f4572a4595ad0dd87f8e43defb43 +size 71159 diff --git a/.yarn/cache/@serwist-next-npm-9.5.11-b4928728fb-0197d133fc.zip b/.yarn/cache/@serwist-next-npm-9.5.11-b4928728fb-0197d133fc.zip new file mode 100644 index 0000000000..479f009f3e --- /dev/null +++ b/.yarn/cache/@serwist-next-npm-9.5.11-b4928728fb-0197d133fc.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bda01b313d9bdc336fb2505352dfe85b857513fdcf53a21e11d6450f82af7e4 +size 57674 diff --git a/.yarn/cache/@serwist-utils-npm-9.5.11-2cfdaece6e-f50c325666.zip b/.yarn/cache/@serwist-utils-npm-9.5.11-2cfdaece6e-f50c325666.zip new file mode 100644 index 0000000000..f101e161df --- /dev/null +++ b/.yarn/cache/@serwist-utils-npm-9.5.11-2cfdaece6e-f50c325666.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b75e12ec564ed9586d22ff05093b21ae824aa0d65ac1c8cb4f96d1a57aa7d92 +size 12959 diff --git a/.yarn/cache/@serwist-webpack-plugin-npm-9.5.11-b9a15d9eec-d5eaa14fe8.zip b/.yarn/cache/@serwist-webpack-plugin-npm-9.5.11-b9a15d9eec-d5eaa14fe8.zip new file mode 100644 index 0000000000..bd1d469aa1 --- /dev/null +++ b/.yarn/cache/@serwist-webpack-plugin-npm-9.5.11-b9a15d9eec-d5eaa14fe8.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efb74d2d4a6eb19ed32365345949c8333fd4b22bcb9cfe544e2a885ae2234e1d +size 41740 diff --git a/.yarn/cache/@serwist-window-npm-9.5.11-b40b86cb4c-ab5e0efed8.zip b/.yarn/cache/@serwist-window-npm-9.5.11-b40b86cb4c-ab5e0efed8.zip new file mode 100644 index 0000000000..10bd386d92 --- /dev/null +++ b/.yarn/cache/@serwist-window-npm-9.5.11-b40b86cb4c-ab5e0efed8.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaa75683ef53f546513244849a7134ba049aa112ea09e5a4b37c239e4d3eba2c +size 34294 diff --git a/.yarn/cache/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded-0c7dc1c1fc.zip b/.yarn/cache/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded-0c7dc1c1fc.zip deleted file mode 100644 index ac558b112d..0000000000 --- a/.yarn/cache/@surma-rollup-plugin-off-main-thread-npm-2.2.3-1f57d3eded-0c7dc1c1fc.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5c60a6196adb4d0495fd3e4dd73870de77f57c254dd4ef5707077968ea9792c5 -size 77398 diff --git a/.yarn/cache/@trapezedev-gradle-parse-npm-7.1.3-f4311ba0d9-48372c4dbd.zip b/.yarn/cache/@trapezedev-gradle-parse-npm-7.1.3-f4311ba0d9-48372c4dbd.zip new file mode 100644 index 0000000000..8ee923df51 --- /dev/null +++ b/.yarn/cache/@trapezedev-gradle-parse-npm-7.1.3-f4311ba0d9-48372c4dbd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31a579f8a832a9a79485fc56bddd1499c7cc43a911a34806b5bc080799b11f33 +size 7227264 diff --git a/.yarn/cache/@trapezedev-project-npm-7.1.4-3dedc6da45-744f7f8a6d.zip b/.yarn/cache/@trapezedev-project-npm-7.1.4-3dedc6da45-744f7f8a6d.zip new file mode 100644 index 0000000000..21e33b65ff --- /dev/null +++ b/.yarn/cache/@trapezedev-project-npm-7.1.4-3dedc6da45-744f7f8a6d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce988100b1ba46f6a355d9513249183d19a26a6675e5ad1fd173417896ce9eaf +size 115549 diff --git a/.yarn/cache/@tsconfig-node10-npm-1.0.12-413b585710-27e2f989db.zip b/.yarn/cache/@tsconfig-node10-npm-1.0.12-413b585710-27e2f989db.zip new file mode 100644 index 0000000000..5e6a5ea002 --- /dev/null +++ b/.yarn/cache/@tsconfig-node10-npm-1.0.12-413b585710-27e2f989db.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e91eb4deeacaed8a18a75528efb3fd69a22cf3d131deac82de6636cf12e053e +size 2371 diff --git a/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip b/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip new file mode 100644 index 0000000000..66dc075814 --- /dev/null +++ b/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84432a396247481f73a00f25f47779cefe518e9a8990bf983118fb8cec3560ff +size 2474 diff --git a/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip b/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip new file mode 100644 index 0000000000..7771df3f8e --- /dev/null +++ b/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f9157997fd80d296dc0e00ee549755edc20bf32704e25eec1f8ee7ad80ec046 +size 2432 diff --git a/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip b/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip new file mode 100644 index 0000000000..9c6345e794 --- /dev/null +++ b/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84b491b1676694cdb16c3ee399592927785fc50d5ed431bd39ef67364ce0527e +size 2442 diff --git a/.yarn/cache/@types-estree-npm-0.0.39-f898500e96-9f0f20990d.zip b/.yarn/cache/@types-estree-npm-0.0.39-f898500e96-9f0f20990d.zip deleted file mode 100644 index 0649a4ca6e..0000000000 --- a/.yarn/cache/@types-estree-npm-0.0.39-f898500e96-9f0f20990d.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4861784482724f02b4e97ca73c76514330a27d4208b243c8efb074ce10bbd934 -size 5561 diff --git a/.yarn/cache/@types-fs-extra-npm-8.1.5-77d3a95112-565d9e55cd.zip b/.yarn/cache/@types-fs-extra-npm-8.1.5-77d3a95112-565d9e55cd.zip new file mode 100644 index 0000000000..0a4e8b112e --- /dev/null +++ b/.yarn/cache/@types-fs-extra-npm-8.1.5-77d3a95112-565d9e55cd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b43265e07f4d818413c2b98118277643ea119a7fa974daa11ff8e8efe76dad21 +size 5035 diff --git a/.yarn/cache/@types-glob-npm-7.2.0-772334bf9a-6ae717fedf.zip b/.yarn/cache/@types-glob-npm-7.2.0-772334bf9a-6ae717fedf.zip deleted file mode 100644 index 35f89e0c44..0000000000 --- a/.yarn/cache/@types-glob-npm-7.2.0-772334bf9a-6ae717fedf.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fab77bb5e0ec49c04d3f2385189cf3425ccba3ab4fa35beb2bc983d90b6e5246 -size 3310 diff --git a/.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip b/.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip new file mode 100644 index 0000000000..05ac0336b3 --- /dev/null +++ b/.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a57228c5dc3876ad52e377f744be1c0e4cf9d288e05265b92aa7d6e5fd2b1e5a +size 3329 diff --git a/.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip b/.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip new file mode 100644 index 0000000000..30041d9107 --- /dev/null +++ b/.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0b9af46411ae6c47d422cd0823c4b8dfc11851882beefabbeb8eb7952bb741a +size 3218 diff --git a/.yarn/cache/@types-resolve-npm-1.17.1-9a8396bef2-dc6a6df507.zip b/.yarn/cache/@types-resolve-npm-1.17.1-9a8396bef2-dc6a6df507.zip deleted file mode 100644 index 5f0bbd4387..0000000000 --- a/.yarn/cache/@types-resolve-npm-1.17.1-9a8396bef2-dc6a6df507.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:186de97d879d2dbce103b29d6864d1a732ba9ab8d684d470d795d19f7b7acd42 -size 3877 diff --git a/.yarn/cache/@types-slice-ansi-npm-4.0.0-3ea421e2de-343086bc4e.zip b/.yarn/cache/@types-slice-ansi-npm-4.0.0-3ea421e2de-343086bc4e.zip new file mode 100644 index 0000000000..d4f946debf --- /dev/null +++ b/.yarn/cache/@types-slice-ansi-npm-4.0.0-3ea421e2de-343086bc4e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b78f68c93123bccbefede229ba4745083fabeee86bcb283eb76ce64f096d388d +size 2686 diff --git a/.yarn/cache/@types-trusted-types-npm-2.0.2-035cb17c5e-3371eef5f1.zip b/.yarn/cache/@types-trusted-types-npm-2.0.2-035cb17c5e-3371eef5f1.zip deleted file mode 100644 index 57de53c7d5..0000000000 --- a/.yarn/cache/@types-trusted-types-npm-2.0.2-035cb17c5e-3371eef5f1.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6a4406f13df92887867a7cd7b634b791839a4b46b753e5a2907259c4f7c0773 -size 4422 diff --git a/.yarn/cache/@types-trusted-types-npm-2.0.7-a07fc44f59-8e4202766a.zip b/.yarn/cache/@types-trusted-types-npm-2.0.7-a07fc44f59-8e4202766a.zip new file mode 100644 index 0000000000..e7813a3707 --- /dev/null +++ b/.yarn/cache/@types-trusted-types-npm-2.0.7-a07fc44f59-8e4202766a.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c4cc4cf96080e4cc8ddfeed293ad5d67c0d78a1b03b72fa678a1b77a39e22e0 +size 4330 diff --git a/.yarn/cache/@xml-tools-parser-npm-1.0.11-7ca2d7689b-df1aa7ac0e.zip b/.yarn/cache/@xml-tools-parser-npm-1.0.11-7ca2d7689b-df1aa7ac0e.zip new file mode 100644 index 0000000000..8483f7581f --- /dev/null +++ b/.yarn/cache/@xml-tools-parser-npm-1.0.11-7ca2d7689b-df1aa7ac0e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b1288b4d53416ba895d8134a2df8e68b14ad3e49fd605e7aff3f5bbd998f841 +size 16360 diff --git a/.yarn/cache/@xmldom-xmldom-npm-0.9.10-69fe656037-8d39ed498b.zip b/.yarn/cache/@xmldom-xmldom-npm-0.9.10-69fe656037-8d39ed498b.zip new file mode 100644 index 0000000000..f1e5714640 --- /dev/null +++ b/.yarn/cache/@xmldom-xmldom-npm-0.9.10-69fe656037-8d39ed498b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fb2c54ba715bdb0aa82bfbda5f18127bd3549a88a989a382c3e3a036bc9681e +size 108868 diff --git a/.yarn/cache/JSONStream-npm-1.3.5-1987f2e6dd-e30daf7b9b.zip b/.yarn/cache/JSONStream-npm-1.3.5-1987f2e6dd-e30daf7b9b.zip new file mode 100644 index 0000000000..efde20d767 --- /dev/null +++ b/.yarn/cache/JSONStream-npm-1.3.5-1987f2e6dd-e30daf7b9b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dd86cdc492ea8a0817e0eb817e8f5f78ddc31903b17ff088bc14dd80707c44e +size 151687 diff --git a/.yarn/cache/acorn-npm-8.16.0-b2096bf83f-690c673bb4.zip b/.yarn/cache/acorn-npm-8.16.0-b2096bf83f-690c673bb4.zip new file mode 100644 index 0000000000..5d9ffb0ab2 --- /dev/null +++ b/.yarn/cache/acorn-npm-8.16.0-b2096bf83f-690c673bb4.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a8ca07255364a3827af7087f60ce80dfa48ba7e43435c0a4b0927a7c2273c97 +size 140557 diff --git a/.yarn/cache/acorn-walk-npm-8.3.5-871d141ed6-f52a158a1c.zip b/.yarn/cache/acorn-walk-npm-8.3.5-871d141ed6-f52a158a1c.zip new file mode 100644 index 0000000000..dd9d3e8f04 --- /dev/null +++ b/.yarn/cache/acorn-walk-npm-8.3.5-871d141ed6-f52a158a1c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09d66dfde5211139281e8ca8f8d52b45fe709ede765dc0324097b5cbf5fed091 +size 15645 diff --git a/.yarn/cache/add-stream-npm-1.0.0-a5a0c0498c-3e9e8b0b8f.zip b/.yarn/cache/add-stream-npm-1.0.0-a5a0c0498c-3e9e8b0b8f.zip new file mode 100644 index 0000000000..ac445a988b --- /dev/null +++ b/.yarn/cache/add-stream-npm-1.0.0-a5a0c0498c-3e9e8b0b8f.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e57383903da12e6d31d89ca784a1a530d8c296815ac99f2dcfeabdc93d5360e +size 3566 diff --git a/.yarn/cache/ajv-npm-8.11.0-83d029789c-aa0dfd6ceb.zip b/.yarn/cache/ajv-npm-8.11.0-83d029789c-aa0dfd6ceb.zip deleted file mode 100644 index 872c206f62..0000000000 --- a/.yarn/cache/ajv-npm-8.11.0-83d029789c-aa0dfd6ceb.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4327c291cb9230bb139912a66d3b0d0440b6b1977cef6b24e066d638e50313e -size 401992 diff --git a/.yarn/cache/arg-npm-4.1.3-1748b966a8-969b491082.zip b/.yarn/cache/arg-npm-4.1.3-1748b966a8-969b491082.zip new file mode 100644 index 0000000000..f93ffa8595 --- /dev/null +++ b/.yarn/cache/arg-npm-4.1.3-1748b966a8-969b491082.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eed7e67af8bc7d9fb1a6e60b9f06fe1496e92800c6c65846ce5ebd62dba1d43 +size 6313 diff --git a/.yarn/cache/array-ify-npm-1.0.0-e09a371977-c0502015b3.zip b/.yarn/cache/array-ify-npm-1.0.0-e09a371977-c0502015b3.zip new file mode 100644 index 0000000000..134d77177d --- /dev/null +++ b/.yarn/cache/array-ify-npm-1.0.0-e09a371977-c0502015b3.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08b0d25b538dd94b89accacc96ee20364f69a5ba859c85d7b464f7bf8a8ffa39 +size 1651 diff --git a/.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-2b40b410cb.zip b/.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-2b40b410cb.zip deleted file mode 100644 index 2810b164a7..0000000000 --- a/.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-2b40b410cb.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:be062454fb0d6abeb151e922697da2e3cdf10018ece62153a776cc8612ffd4dd -size 17411 diff --git a/.yarn/cache/babel-plugin-polyfill-corejs2-npm-0.3.2-8831501ede-9b53f0ac51.zip b/.yarn/cache/babel-plugin-polyfill-corejs2-npm-0.3.2-8831501ede-9b53f0ac51.zip deleted file mode 100644 index 3f5a5779f8..0000000000 --- a/.yarn/cache/babel-plugin-polyfill-corejs2-npm-0.3.2-8831501ede-9b53f0ac51.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:42e2a3c4cda419cd5059e689bab2caae4c2970c4441962941b0c815b5ea42579 -size 25749 diff --git a/.yarn/cache/babel-plugin-polyfill-corejs3-npm-0.5.3-55aa3bb939-ff94151925.zip b/.yarn/cache/babel-plugin-polyfill-corejs3-npm-0.5.3-55aa3bb939-ff94151925.zip deleted file mode 100644 index 9935113433..0000000000 --- a/.yarn/cache/babel-plugin-polyfill-corejs3-npm-0.5.3-55aa3bb939-ff94151925.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:07dba766570c69c63b95e1971f735519ce196ade0730d733d4d05cb4ee9058e7 -size 44690 diff --git a/.yarn/cache/balanced-match-npm-4.0.4-fd666b3c7f-fb07bb66a0.zip b/.yarn/cache/balanced-match-npm-4.0.4-fd666b3c7f-fb07bb66a0.zip new file mode 100644 index 0000000000..1c061e08f3 --- /dev/null +++ b/.yarn/cache/balanced-match-npm-4.0.4-fd666b3c7f-fb07bb66a0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc5f42bb1c0134598e3bac55f7f69f4f0583c5c2b40264a77f66804cd554e126 +size 9282 diff --git a/.yarn/cache/baseline-browser-mapping-npm-2.10.35-4467a895ad-e3a99368b1.zip b/.yarn/cache/baseline-browser-mapping-npm-2.10.35-4467a895ad-e3a99368b1.zip new file mode 100644 index 0000000000..738be35a25 --- /dev/null +++ b/.yarn/cache/baseline-browser-mapping-npm-2.10.35-4467a895ad-e3a99368b1.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:238010cd9e1038cf3506a0c57442b67b2c5f4f44a189a052932f00c4fd26c099 +size 55191 diff --git a/.yarn/cache/big-integer-npm-1.6.52-4bec75720c-4bc6ae152a.zip b/.yarn/cache/big-integer-npm-1.6.52-4bec75720c-4bc6ae152a.zip new file mode 100644 index 0000000000..42144cc51e --- /dev/null +++ b/.yarn/cache/big-integer-npm-1.6.52-4bec75720c-4bc6ae152a.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aab2342d93ed6e5f9c09874ab094a121e32850208969c844ac3caf7a35fa1631 +size 33828 diff --git a/.yarn/cache/bplist-creator-npm-0.1.1-46ec2e397c-4f185ee84a.zip b/.yarn/cache/bplist-creator-npm-0.1.1-46ec2e397c-4f185ee84a.zip new file mode 100644 index 0000000000..0542591bb3 --- /dev/null +++ b/.yarn/cache/bplist-creator-npm-0.1.1-46ec2e397c-4f185ee84a.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f41b9a0c07843bf966884f6ad0d02e430960e98ec4f88fec02f82eb18fe5102a +size 24909 diff --git a/.yarn/cache/bplist-parser-npm-0.3.2-94c89d7427-6edf4354c3.zip b/.yarn/cache/bplist-parser-npm-0.3.2-94c89d7427-6edf4354c3.zip new file mode 100644 index 0000000000..5ef29ed325 --- /dev/null +++ b/.yarn/cache/bplist-parser-npm-0.3.2-94c89d7427-6edf4354c3.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61a729cfcdc85edacb07a1ae5b1c2c263a3e938173b0cb74dde24f21084463d7 +size 7631 diff --git a/.yarn/cache/brace-expansion-npm-5.0.6-abf39a1281-a7acf120fe.zip b/.yarn/cache/brace-expansion-npm-5.0.6-abf39a1281-a7acf120fe.zip new file mode 100644 index 0000000000..6af2179546 --- /dev/null +++ b/.yarn/cache/brace-expansion-npm-5.0.6-abf39a1281-a7acf120fe.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7d97b74a96a385ebfedc13c9f2fd3dec9bfbc82dfee625ddb655df618f0091f +size 17717 diff --git a/.yarn/cache/browserslist-npm-4.28.2-8923c4854e-cff88386e5.zip b/.yarn/cache/browserslist-npm-4.28.2-8923c4854e-cff88386e5.zip new file mode 100644 index 0000000000..6b558bd5f8 --- /dev/null +++ b/.yarn/cache/browserslist-npm-4.28.2-8923c4854e-cff88386e5.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5e30df72877b2282dd007a408c8dc34af5e4a8e61cd452871995ebdc4475668 +size 20138 diff --git a/.yarn/cache/builtin-modules-npm-3.3.0-db4f3d32de-62e063ab40.zip b/.yarn/cache/builtin-modules-npm-3.3.0-db4f3d32de-62e063ab40.zip deleted file mode 100644 index bcfd21f1ed..0000000000 --- a/.yarn/cache/builtin-modules-npm-3.3.0-db4f3d32de-62e063ab40.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:137a6f32f68c96b590c98dabfbc50cb70b05be83bbe2cfeb83f1ff445c5d95f8 -size 4010 diff --git a/.yarn/cache/camelcase-keys-npm-6.2.2-d13777ec12-c1999f5b6d.zip b/.yarn/cache/camelcase-keys-npm-6.2.2-d13777ec12-c1999f5b6d.zip new file mode 100644 index 0000000000..287d2aaf1e --- /dev/null +++ b/.yarn/cache/camelcase-keys-npm-6.2.2-d13777ec12-c1999f5b6d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19e8e2794343bdc4610141dd1d490c6b34d34e43f8eb040e8a3b45bb89eab0ba +size 4865 diff --git a/.yarn/cache/caniuse-lite-npm-1.0.30001797-d8aeb806b1-30d34d8ede.zip b/.yarn/cache/caniuse-lite-npm-1.0.30001797-d8aeb806b1-30d34d8ede.zip new file mode 100644 index 0000000000..ea87579ba8 --- /dev/null +++ b/.yarn/cache/caniuse-lite-npm-1.0.30001797-d8aeb806b1-30d34d8ede.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:990f3de438b36aad5cd06bfd2704a384093bc12132384fb2ba56b5a86823ca0e +size 944255 diff --git a/.yarn/cache/chevrotain-npm-7.1.1-6e18695936-c071e3478c.zip b/.yarn/cache/chevrotain-npm-7.1.1-6e18695936-c071e3478c.zip new file mode 100644 index 0000000000..031f9a512a --- /dev/null +++ b/.yarn/cache/chevrotain-npm-7.1.1-6e18695936-c071e3478c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec582a148a3e66683d8b29b1b2197a8e07040c5d4dc794cc082b56b54efd468b +size 577323 diff --git a/.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip b/.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip new file mode 100644 index 0000000000..2e10cc78de --- /dev/null +++ b/.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05b6a09af0916f441b36b2eeff975bf94e7dfa0e7bd447007214d3d0e611c70b +size 2841 diff --git a/.yarn/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-fce27be7cf.zip b/.yarn/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-fce27be7cf.zip deleted file mode 100644 index 19ba851b68..0000000000 --- a/.yarn/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-fce27be7cf.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:97cc0ed8ad19f4507bd2af0f3c9b790f667ad534e887409447544aa71fdf161f -size 13265 diff --git a/.yarn/cache/commander-npm-8.3.0-c0d18c66d5-6b7b5d3344.zip b/.yarn/cache/commander-npm-8.3.0-c0d18c66d5-6b7b5d3344.zip new file mode 100644 index 0000000000..be67ff0bbe --- /dev/null +++ b/.yarn/cache/commander-npm-8.3.0-c0d18c66d5-6b7b5d3344.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb8ebd30e954014e8aed4ee695c6b370a2e9e137786114434eeda9c71e4eae4b +size 44463 diff --git a/.yarn/cache/commondir-npm-1.0.1-291b790340-4620bc4936.zip b/.yarn/cache/commondir-npm-1.0.1-291b790340-4620bc4936.zip deleted file mode 100644 index 5adab43cc2..0000000000 --- a/.yarn/cache/commondir-npm-1.0.1-291b790340-4620bc4936.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:85430b3ccf4f350311d11ce8374de5ef677cc9d589b748615e0bffb093a9039f -size 3605 diff --git a/.yarn/cache/compare-func-npm-2.0.0-9cd7852f23-fb71d70632.zip b/.yarn/cache/compare-func-npm-2.0.0-9cd7852f23-fb71d70632.zip new file mode 100644 index 0000000000..3b4b2529c3 --- /dev/null +++ b/.yarn/cache/compare-func-npm-2.0.0-9cd7852f23-fb71d70632.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8f8e2c3fdb49a93b28b5f61ca485c982a9619a6ac6d2c56920341390880c4b2 +size 2928 diff --git a/.yarn/cache/conventional-changelog-angular-npm-5.0.13-50e4a302c4-e7ee31ac70.zip b/.yarn/cache/conventional-changelog-angular-npm-5.0.13-50e4a302c4-e7ee31ac70.zip new file mode 100644 index 0000000000..6369bf6251 --- /dev/null +++ b/.yarn/cache/conventional-changelog-angular-npm-5.0.13-50e4a302c4-e7ee31ac70.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5939e6cd5fcebbc57d8b38222bae9239242d6f99c801536994c4b96a106ee2e2 +size 11470 diff --git a/.yarn/cache/conventional-changelog-atom-npm-2.0.8-ab61571c15-53ae65ef33.zip b/.yarn/cache/conventional-changelog-atom-npm-2.0.8-ab61571c15-53ae65ef33.zip new file mode 100644 index 0000000000..af73786145 --- /dev/null +++ b/.yarn/cache/conventional-changelog-atom-npm-2.0.8-ab61571c15-53ae65ef33.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:617c9ee4f3d537209fb0acaefe692ff5cb8c1407180b1a99d65474765ad8c41c +size 7839 diff --git a/.yarn/cache/conventional-changelog-codemirror-npm-2.0.8-342d72f6a3-45183dcb16.zip b/.yarn/cache/conventional-changelog-codemirror-npm-2.0.8-342d72f6a3-45183dcb16.zip new file mode 100644 index 0000000000..ef865fc95c --- /dev/null +++ b/.yarn/cache/conventional-changelog-codemirror-npm-2.0.8-342d72f6a3-45183dcb16.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e072251e84e671d2d1ebe50f26ee4555299cd9ae27f0ca8fea025af8fe2faff +size 7437 diff --git a/.yarn/cache/conventional-changelog-conventionalcommits-npm-4.6.3-8a4923dc62-70b9ba65a7.zip b/.yarn/cache/conventional-changelog-conventionalcommits-npm-4.6.3-8a4923dc62-70b9ba65a7.zip new file mode 100644 index 0000000000..e43541b248 --- /dev/null +++ b/.yarn/cache/conventional-changelog-conventionalcommits-npm-4.6.3-8a4923dc62-70b9ba65a7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21043f6de03b18d8be12ec2db352bd603ec1961ca31887d43b7e63405e2c6b19 +size 12035 diff --git a/.yarn/cache/conventional-changelog-core-npm-4.2.4-3507358941-c810498672.zip b/.yarn/cache/conventional-changelog-core-npm-4.2.4-3507358941-c810498672.zip new file mode 100644 index 0000000000..886ef76c09 --- /dev/null +++ b/.yarn/cache/conventional-changelog-core-npm-4.2.4-3507358941-c810498672.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d33e16d93fefd84ca0b15aec6d4ed886837a7adb5197535f377991669be7f891 +size 14116 diff --git a/.yarn/cache/conventional-changelog-ember-npm-2.0.9-2276834930-87faf42230.zip b/.yarn/cache/conventional-changelog-ember-npm-2.0.9-2276834930-87faf42230.zip new file mode 100644 index 0000000000..fdbd3a2847 --- /dev/null +++ b/.yarn/cache/conventional-changelog-ember-npm-2.0.9-2276834930-87faf42230.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16e90cfff5a06128e4754fb2c40570051665531ef96f99a9f3068e9df46d63eb +size 8398 diff --git a/.yarn/cache/conventional-changelog-eslint-npm-3.0.9-62c523a901-f12f82adae.zip b/.yarn/cache/conventional-changelog-eslint-npm-3.0.9-62c523a901-f12f82adae.zip new file mode 100644 index 0000000000..7370f07499 --- /dev/null +++ b/.yarn/cache/conventional-changelog-eslint-npm-3.0.9-62c523a901-f12f82adae.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47721533d830fda6292d4099c55864d3ae5c54c51412628bc37c5dee8c00b72f +size 8489 diff --git a/.yarn/cache/conventional-changelog-express-npm-2.0.6-8a37ff0369-08db048159.zip b/.yarn/cache/conventional-changelog-express-npm-2.0.6-8a37ff0369-08db048159.zip new file mode 100644 index 0000000000..0d6393d4be --- /dev/null +++ b/.yarn/cache/conventional-changelog-express-npm-2.0.6-8a37ff0369-08db048159.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca9fd304c37f95cb124eba726ff466cc6876f738f1ae7a833818210d96771a39 +size 6825 diff --git a/.yarn/cache/conventional-changelog-jquery-npm-3.0.11-d4ff10c6e2-18720ee267.zip b/.yarn/cache/conventional-changelog-jquery-npm-3.0.11-d4ff10c6e2-18720ee267.zip new file mode 100644 index 0000000000..3d8df64e16 --- /dev/null +++ b/.yarn/cache/conventional-changelog-jquery-npm-3.0.11-d4ff10c6e2-18720ee267.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:307537d5d7e5a2d38855016e878d81adc8f89275c07f71f6ef2faa535b57b019 +size 8240 diff --git a/.yarn/cache/conventional-changelog-jshint-npm-2.0.9-ef6b791bee-42e16d0e41.zip b/.yarn/cache/conventional-changelog-jshint-npm-2.0.9-ef6b791bee-42e16d0e41.zip new file mode 100644 index 0000000000..5b4aa2b740 --- /dev/null +++ b/.yarn/cache/conventional-changelog-jshint-npm-2.0.9-ef6b791bee-42e16d0e41.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8cda246c40def977d84d82d952714bcd00f6c7e92943863eacfbfed794ad39f +size 9118 diff --git a/.yarn/cache/conventional-changelog-npm-3.1.25-dfc69e696b-27f4651ec7.zip b/.yarn/cache/conventional-changelog-npm-3.1.25-dfc69e696b-27f4651ec7.zip new file mode 100644 index 0000000000..3f601d2984 --- /dev/null +++ b/.yarn/cache/conventional-changelog-npm-3.1.25-dfc69e696b-27f4651ec7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d83d84b1dd3bb1a4754c9b0306f8162bce9463dbf5ae3fd1ae438bc652aa513a +size 9411 diff --git a/.yarn/cache/conventional-changelog-preset-loader-npm-2.3.4-a907f2e49a-23a889b7fc.zip b/.yarn/cache/conventional-changelog-preset-loader-npm-2.3.4-a907f2e49a-23a889b7fc.zip new file mode 100644 index 0000000000..9ade827e4f --- /dev/null +++ b/.yarn/cache/conventional-changelog-preset-loader-npm-2.3.4-a907f2e49a-23a889b7fc.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a64d085877a2613959d04983994cd5a457d95203337b99b69a1bade2fd03f8 +size 4886 diff --git a/.yarn/cache/conventional-changelog-writer-npm-5.0.1-c7d8f4132f-09703c3fce.zip b/.yarn/cache/conventional-changelog-writer-npm-5.0.1-c7d8f4132f-09703c3fce.zip new file mode 100644 index 0000000000..96cffd1411 --- /dev/null +++ b/.yarn/cache/conventional-changelog-writer-npm-5.0.1-c7d8f4132f-09703c3fce.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5b155e1d2f6120780ecf1990220493d19eacb162c96e75f0aec923c61cecc61 +size 18343 diff --git a/.yarn/cache/conventional-commits-filter-npm-2.0.7-8762ee3bfa-c7e25df941.zip b/.yarn/cache/conventional-commits-filter-npm-2.0.7-8762ee3bfa-c7e25df941.zip new file mode 100644 index 0000000000..dd78622c73 --- /dev/null +++ b/.yarn/cache/conventional-commits-filter-npm-2.0.7-8762ee3bfa-c7e25df941.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a2062466b09ee54126d97738d391d97bcb3ef833a4838c5fc7d515be207c06b +size 4585 diff --git a/.yarn/cache/conventional-commits-parser-npm-3.2.4-d1ebb48cf6-2f9d31bade.zip b/.yarn/cache/conventional-commits-parser-npm-3.2.4-d1ebb48cf6-2f9d31bade.zip new file mode 100644 index 0000000000..00b2dc8fa2 --- /dev/null +++ b/.yarn/cache/conventional-commits-parser-npm-3.2.4-d1ebb48cf6-2f9d31bade.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a252a126122262dc251ac5363c09a988b39cdee25623e30bf4e5b12ceb9c98c +size 16860 diff --git a/.yarn/cache/core-js-compat-npm-3.24.1-f46c96edc5-d3a61d358b.zip b/.yarn/cache/core-js-compat-npm-3.24.1-f46c96edc5-d3a61d358b.zip deleted file mode 100644 index 9f242ef27e..0000000000 --- a/.yarn/cache/core-js-compat-npm-3.24.1-f46c96edc5-d3a61d358b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7afbb432ef2f7b58ce87c9606396db8bd2a339a4ed104577e5cbcbb19d0617d -size 52416 diff --git a/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip b/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip new file mode 100644 index 0000000000..c6a32b2a30 --- /dev/null +++ b/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd760a194a890391fce4bd19a6f7779325759cb3c6a534dbbd29c13b671622d9 +size 3975 diff --git a/.yarn/cache/crypto-random-string-npm-4.0.0-b9f0f76168-cd5d7ae138.zip b/.yarn/cache/crypto-random-string-npm-4.0.0-b9f0f76168-cd5d7ae138.zip new file mode 100644 index 0000000000..3fba6b5f45 --- /dev/null +++ b/.yarn/cache/crypto-random-string-npm-4.0.0-b9f0f76168-cd5d7ae138.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c1d22d06ffa1230bc357fcf06f0f7ee899bb260b20f01af4be1674dadb4c4f3 +size 6869 diff --git a/.yarn/cache/css-select-npm-4.3.0-72f53028ec-8f7310c9af.zip b/.yarn/cache/css-select-npm-4.3.0-72f53028ec-8f7310c9af.zip new file mode 100644 index 0000000000..43f6b6b6cd --- /dev/null +++ b/.yarn/cache/css-select-npm-4.3.0-72f53028ec-8f7310c9af.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04ff476500d2e5955ee5eb1e869ded178099c30bf89ade0fc587332c10d66cb4 +size 32904 diff --git a/.yarn/cache/css-what-npm-6.2.2-c497de3935-3c5a53be94.zip b/.yarn/cache/css-what-npm-6.2.2-c497de3935-3c5a53be94.zip new file mode 100644 index 0000000000..78b4f915d0 --- /dev/null +++ b/.yarn/cache/css-what-npm-6.2.2-c497de3935-3c5a53be94.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d15f2285133933ecd83cf3df6176af0d2e77f16836a0b3f873bf59ccc4f7a9b6 +size 23497 diff --git a/.yarn/cache/dargs-npm-7.0.0-62701e0c7a-b8f1e3cba5.zip b/.yarn/cache/dargs-npm-7.0.0-62701e0c7a-b8f1e3cba5.zip new file mode 100644 index 0000000000..44a548000c --- /dev/null +++ b/.yarn/cache/dargs-npm-7.0.0-62701e0c7a-b8f1e3cba5.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8006aef460196d7bc8c233f68e0b9ba3d083e68092480c02e9ab579d2b0692ae +size 5471 diff --git a/.yarn/cache/dateformat-npm-3.0.3-ed02e5ddbd-0504baf50c.zip b/.yarn/cache/dateformat-npm-3.0.3-ed02e5ddbd-0504baf50c.zip new file mode 100644 index 0000000000..8dd7dd9924 --- /dev/null +++ b/.yarn/cache/dateformat-npm-3.0.3-ed02e5ddbd-0504baf50c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4869617972e7c18677b17f383622b0bbd317bf528f3e74db41454d5ee9ff800 +size 6977 diff --git a/.yarn/cache/debug-npm-4.4.3-0105c6123a-9ada3434ea.zip b/.yarn/cache/debug-npm-4.4.3-0105c6123a-9ada3434ea.zip new file mode 100644 index 0000000000..7c4d5735b2 --- /dev/null +++ b/.yarn/cache/debug-npm-4.4.3-0105c6123a-9ada3434ea.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e124975c0a082e2bd7287844d899a23c4a5372ea02ec600f37d9e6bfa9adf2cc +size 15939 diff --git a/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-71d5898174.zip b/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-71d5898174.zip new file mode 100644 index 0000000000..1db5b65351 --- /dev/null +++ b/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-71d5898174.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f27ef411bfe6c5a0273e50066bfb3ad78443003bf2f7cdc18c4fcb8515a32c9 +size 2833 diff --git a/.yarn/cache/decompress-response-npm-6.0.0-359de2878c-d377cf47e0.zip b/.yarn/cache/decompress-response-npm-6.0.0-359de2878c-d377cf47e0.zip new file mode 100644 index 0000000000..a0b1fc786a --- /dev/null +++ b/.yarn/cache/decompress-response-npm-6.0.0-359de2878c-d377cf47e0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74131f86066a0d715a1a0525cf7008a62fb67b7d711d5b4a575f7023051bd4d7 +size 3718 diff --git a/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip b/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip new file mode 100644 index 0000000000..12914e4210 --- /dev/null +++ b/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7c6cbe8c52803c77a54772f73389ecce8a55a2cd1751f30826f14d945fe4d75 +size 5505 diff --git a/.yarn/cache/del-npm-4.1.1-8bc04567c6-521f7da44b.zip b/.yarn/cache/del-npm-4.1.1-8bc04567c6-521f7da44b.zip deleted file mode 100644 index c8669ff4ea..0000000000 --- a/.yarn/cache/del-npm-4.1.1-8bc04567c6-521f7da44b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:017088cf9aedc5a415a3a6f9429b3c7e53c75b126ccfca88f4f25d106bc16c7b -size 4585 diff --git a/.yarn/cache/detect-libc-npm-2.1.2-d0c382b1e2-b736c8d97d.zip b/.yarn/cache/detect-libc-npm-2.1.2-d0c382b1e2-b736c8d97d.zip new file mode 100644 index 0000000000..19ea5f0568 --- /dev/null +++ b/.yarn/cache/detect-libc-npm-2.1.2-d0c382b1e2-b736c8d97d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27716619240f7d678b6feea7abdf0067337cfaf6ac95e94047e6fffd0c06c3aa +size 10354 diff --git a/.yarn/cache/diff-npm-4.0.4-e9ea573423-5019b3f5ae.zip b/.yarn/cache/diff-npm-4.0.4-e9ea573423-5019b3f5ae.zip new file mode 100644 index 0000000000..e3f6f3e8d9 --- /dev/null +++ b/.yarn/cache/diff-npm-4.0.4-e9ea573423-5019b3f5ae.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d14fd0c13d96f7a09165a8baf26621907ce69518932fce5f94311db0b8de9d80 +size 115227 diff --git a/.yarn/cache/diff-npm-5.2.2-8338a97b62-8a885b3811.zip b/.yarn/cache/diff-npm-5.2.2-8338a97b62-8a885b3811.zip new file mode 100644 index 0000000000..df3bb319a7 --- /dev/null +++ b/.yarn/cache/diff-npm-5.2.2-8338a97b62-8a885b3811.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30c184bc5bf7c40a8c22cfb020b4ad2af5ae1d882c2f3b0ad4cf0b3eb67f1c63 +size 144619 diff --git a/.yarn/cache/dom-serializer-npm-1.4.1-ebb24349c1-53b217bcfe.zip b/.yarn/cache/dom-serializer-npm-1.4.1-ebb24349c1-53b217bcfe.zip new file mode 100644 index 0000000000..a1674055e6 --- /dev/null +++ b/.yarn/cache/dom-serializer-npm-1.4.1-ebb24349c1-53b217bcfe.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac789c2a5af381ec494d7c4d2f25dec4e16422bd77501e89feef9dc3b29eccda +size 13771 diff --git a/.yarn/cache/domhandler-npm-4.3.1-493539c1ca-e0d2af7403.zip b/.yarn/cache/domhandler-npm-4.3.1-493539c1ca-e0d2af7403.zip new file mode 100644 index 0000000000..b81aba693a --- /dev/null +++ b/.yarn/cache/domhandler-npm-4.3.1-493539c1ca-e0d2af7403.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:594e6987261d9a84cdb3f232a467c9504b26b94924d7dc40b26e7b5a978e7557 +size 13523 diff --git a/.yarn/cache/domutils-npm-2.8.0-0325139e5c-1f316a03f0.zip b/.yarn/cache/domutils-npm-2.8.0-0325139e5c-1f316a03f0.zip new file mode 100644 index 0000000000..1b182039a1 --- /dev/null +++ b/.yarn/cache/domutils-npm-2.8.0-0325139e5c-1f316a03f0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b189d7b7740d77ee7d46fa36b757c118e733c6c7402820d39cbcdcebe3c733c2 +size 21975 diff --git a/.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-a9cb7d7cd1.zip b/.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-a9cb7d7cd1.zip deleted file mode 100644 index ec2f8fe19f..0000000000 --- a/.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-a9cb7d7cd1.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9cb13c8bbf3aa79b70e4e157d4855e3cf21d627d4fa995f8a1211d0c8cae8b54 -size 47501 diff --git a/.yarn/cache/electron-to-chromium-npm-1.5.370-df049e769d-c09e3384dd.zip b/.yarn/cache/electron-to-chromium-npm-1.5.370-df049e769d-c09e3384dd.zip new file mode 100644 index 0000000000..6d4442de74 --- /dev/null +++ b/.yarn/cache/electron-to-chromium-npm-1.5.370-df049e769d-c09e3384dd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22dff393ccca9dedfc150d58c3ca9dbd457348fab66fec954458d1aea2b1a3bc +size 33153 diff --git a/.yarn/cache/elementtree-npm-0.1.7-3324be267e-7e8f0683c0.zip b/.yarn/cache/elementtree-npm-0.1.7-3324be267e-7e8f0683c0.zip new file mode 100644 index 0000000000..8ccd638ac4 --- /dev/null +++ b/.yarn/cache/elementtree-npm-0.1.7-3324be267e-7e8f0683c0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1f50e9abe434dfbc8356c95c0d74801ad2541cfd9cf18c9c49b74481c65d9cc +size 24277 diff --git a/.yarn/cache/end-of-stream-npm-1.4.5-8e646acd73-1e0cfa6e7f.zip b/.yarn/cache/end-of-stream-npm-1.4.5-8e646acd73-1e0cfa6e7f.zip new file mode 100644 index 0000000000..c8ac47186d --- /dev/null +++ b/.yarn/cache/end-of-stream-npm-1.4.5-8e646acd73-1e0cfa6e7f.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be3e4a1b5895c6f2baa25556881eb1e3672d0c28e5ccab8ccf92951abe71d58a +size 3219 diff --git a/.yarn/cache/entities-npm-2.2.0-0fc8d5b2f7-2c765221ee.zip b/.yarn/cache/entities-npm-2.2.0-0fc8d5b2f7-2c765221ee.zip new file mode 100644 index 0000000000..f3535402c8 --- /dev/null +++ b/.yarn/cache/entities-npm-2.2.0-0fc8d5b2f7-2c765221ee.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff6b71c2ddaf3312fa505e0380098d47e93004500339bb9c83e2d53cd6ad01f6 +size 23563 diff --git a/.yarn/cache/env-paths-npm-3.0.0-3860895468-b2b0a0d0d9.zip b/.yarn/cache/env-paths-npm-3.0.0-3860895468-b2b0a0d0d9.zip new file mode 100644 index 0000000000..2560d1e3a8 --- /dev/null +++ b/.yarn/cache/env-paths-npm-3.0.0-3860895468-b2b0a0d0d9.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7fadaa9f779bb31156cfa541801d58549367961be03ee9a04783a4f650e8b06 +size 4839 diff --git a/.yarn/cache/estree-walker-npm-1.0.1-e916593b23-1cf11a0aff.zip b/.yarn/cache/estree-walker-npm-1.0.1-e916593b23-1cf11a0aff.zip deleted file mode 100644 index badd06f075..0000000000 --- a/.yarn/cache/estree-walker-npm-1.0.1-e916593b23-1cf11a0aff.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dacce5a1272c1e282b0909174840e6ed8bb5f1ddb5c81010235b08604b50d5d6 -size 7209 diff --git a/.yarn/cache/expand-template-npm-2.0.3-80de959306-588c198472.zip b/.yarn/cache/expand-template-npm-2.0.3-80de959306-588c198472.zip new file mode 100644 index 0000000000..a14edda637 --- /dev/null +++ b/.yarn/cache/expand-template-npm-2.0.3-80de959306-588c198472.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dc63bdafc4ff6dc41de7e46dec6b24b2eafb986431a7d4b31773381e3af0834 +size 3435 diff --git a/.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-4b436fa944.zip b/.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-4b436fa944.zip deleted file mode 100644 index e4f54bee62..0000000000 --- a/.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-4b436fa944.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c95652739dcfcf6067dd253b0218ca05c2d21f5826439eb92696f9c498a0b1b9 -size 7749 diff --git a/.yarn/cache/find-cache-dir-npm-3.3.2-836e68dd83-3907c2e0b1.zip b/.yarn/cache/find-cache-dir-npm-3.3.2-836e68dd83-3907c2e0b1.zip deleted file mode 100644 index 7a6c59199a..0000000000 --- a/.yarn/cache/find-cache-dir-npm-3.3.2-836e68dd83-3907c2e0b1.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b65a05d603fb2babd7ea01bb06d0c65ba53718240a41d1d79037808bee9f2953 -size 3948 diff --git a/.yarn/cache/find-up-npm-2.1.0-9f6cb1765c-43284fe4da.zip b/.yarn/cache/find-up-npm-2.1.0-9f6cb1765c-43284fe4da.zip new file mode 100644 index 0000000000..ff25c335cb --- /dev/null +++ b/.yarn/cache/find-up-npm-2.1.0-9f6cb1765c-43284fe4da.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a9974e391a65086b4401f560c569e8fb459566cf6cf1bb9074c146050c1111 +size 2928 diff --git a/.yarn/cache/fs-constants-npm-1.0.0-59576b2177-18f5b71837.zip b/.yarn/cache/fs-constants-npm-1.0.0-59576b2177-18f5b71837.zip new file mode 100644 index 0000000000..e82ce32f0a --- /dev/null +++ b/.yarn/cache/fs-constants-npm-1.0.0-59576b2177-18f5b71837.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5261ce404bbfcfadd3bbdd77a303eea3332ab63e272b04b298c3931716f815a0 +size 2227 diff --git a/.yarn/cache/fs-extra-npm-10.1.0-86573680ed-05ce2c3b59.zip b/.yarn/cache/fs-extra-npm-10.1.0-86573680ed-05ce2c3b59.zip new file mode 100644 index 0000000000..0c2b817b09 --- /dev/null +++ b/.yarn/cache/fs-extra-npm-10.1.0-86573680ed-05ce2c3b59.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcce6173ea3a7f9cda70e64c98985278e5b2be30966ea9e482cfe9af08dea0d7 +size 28574 diff --git a/.yarn/cache/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-8f0331f141.zip b/.yarn/cache/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-8f0331f141.zip deleted file mode 100644 index 79cc0c26d0..0000000000 --- a/.yarn/cache/get-own-enumerable-property-symbols-npm-3.0.2-f143f9e8d3-8f0331f141.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:56fcbbe4f9badccbe0b3b2c3391e8e66721f815efb08ffaa5314d860e2ab6583 -size 4143 diff --git a/.yarn/cache/get-pkg-repo-npm-4.2.1-b1cd052cb4-033225cf7c.zip b/.yarn/cache/get-pkg-repo-npm-4.2.1-b1cd052cb4-033225cf7c.zip new file mode 100644 index 0000000000..8ecf33a423 --- /dev/null +++ b/.yarn/cache/get-pkg-repo-npm-4.2.1-b1cd052cb4-033225cf7c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4c5c90220f9644663c9c004e01afcb4c744c21161dc52a02efd8f53170835c1 +size 7343 diff --git a/.yarn/cache/git-raw-commits-npm-2.0.11-b090f2f684-04e02b3da7.zip b/.yarn/cache/git-raw-commits-npm-2.0.11-b090f2f684-04e02b3da7.zip new file mode 100644 index 0000000000..350341d4ad --- /dev/null +++ b/.yarn/cache/git-raw-commits-npm-2.0.11-b090f2f684-04e02b3da7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:368778d37a1aecd18f661cc63b9b95e418029b85ba32738305fecfef65021154 +size 5918 diff --git a/.yarn/cache/git-remote-origin-url-npm-2.0.0-319debe0d1-85263a09c0.zip b/.yarn/cache/git-remote-origin-url-npm-2.0.0-319debe0d1-85263a09c0.zip new file mode 100644 index 0000000000..16fe58085e --- /dev/null +++ b/.yarn/cache/git-remote-origin-url-npm-2.0.0-319debe0d1-85263a09c0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a04ef28a78f3c14b76577646be5551f555a39225e1e5d2581ca6337513099665 +size 2432 diff --git a/.yarn/cache/git-semver-tags-npm-4.1.1-93b9747811-ab2ad6c7c8.zip b/.yarn/cache/git-semver-tags-npm-4.1.1-93b9747811-ab2ad6c7c8.zip new file mode 100644 index 0000000000..781d365577 --- /dev/null +++ b/.yarn/cache/git-semver-tags-npm-4.1.1-93b9747811-ab2ad6c7c8.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c192ae8eed0fde1b872c75a65a1d8fc9ba5d8bc199d6e22f4319ff05aee19e31 +size 5817 diff --git a/.yarn/cache/gitconfiglocal-npm-1.0.0-905970379d-e6d2764c15.zip b/.yarn/cache/gitconfiglocal-npm-1.0.0-905970379d-e6d2764c15.zip new file mode 100644 index 0000000000..f0c6a126e6 --- /dev/null +++ b/.yarn/cache/gitconfiglocal-npm-1.0.0-905970379d-e6d2764c15.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1a4497894e55823cdf22ce753e70260ec30e3006a62c1878621e06c3fe11e48 +size 1825 diff --git a/.yarn/cache/github-from-package-npm-0.0.0-519f80c9a1-2a091ba07f.zip b/.yarn/cache/github-from-package-npm-0.0.0-519f80c9a1-2a091ba07f.zip new file mode 100644 index 0000000000..dbc6cff2d8 --- /dev/null +++ b/.yarn/cache/github-from-package-npm-0.0.0-519f80c9a1-2a091ba07f.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c5f78cfcf5d81c2d6f9c7c533dbd78c71fa3b453f855f0ef3a79d4bdbb28e48 +size 5216 diff --git a/.yarn/cache/glob-npm-13.0.6-864eb0cece-201ad69e5f.zip b/.yarn/cache/glob-npm-13.0.6-864eb0cece-201ad69e5f.zip new file mode 100644 index 0000000000..68640ab80c --- /dev/null +++ b/.yarn/cache/glob-npm-13.0.6-864eb0cece-201ad69e5f.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b6b877221c0dbdefffe8168d60490c4a4c26fe35dad75a0f5e74f4cc7514720 +size 432556 diff --git a/.yarn/cache/glob-npm-9.3.5-2f602083f0-e5fa8a58ad.zip b/.yarn/cache/glob-npm-9.3.5-2f602083f0-e5fa8a58ad.zip new file mode 100644 index 0000000000..0bd9242e53 --- /dev/null +++ b/.yarn/cache/glob-npm-9.3.5-2f602083f0-e5fa8a58ad.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0917b3c0b93e8be74d2fd533dfd94c31708fe723f5adaa31f62a9c6d5b86d7b5 +size 122069 diff --git a/.yarn/cache/globby-npm-6.1.0-590bfb2681-18109d6b9d.zip b/.yarn/cache/globby-npm-6.1.0-590bfb2681-18109d6b9d.zip deleted file mode 100644 index 5c4a89ec6e..0000000000 --- a/.yarn/cache/globby-npm-6.1.0-590bfb2681-18109d6b9d.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cd6812d6d5a009a55b5525c89e0d7b12685ab20f9177b5e6bf7ef6313e198a7 -size 3816 diff --git a/.yarn/cache/gradle-to-js-npm-2.0.1-94a1a7dcc0-8a6210715d.zip b/.yarn/cache/gradle-to-js-npm-2.0.1-94a1a7dcc0-8a6210715d.zip new file mode 100644 index 0000000000..960ae2b0c2 --- /dev/null +++ b/.yarn/cache/gradle-to-js-npm-2.0.1-94a1a7dcc0-8a6210715d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c1c799c38a8d4c78b4e8365b86021d6eb6a269868a86da756e25acd422aa2e5 +size 10950 diff --git a/.yarn/cache/handlebars-npm-4.7.9-46c3c68605-e755433d65.zip b/.yarn/cache/handlebars-npm-4.7.9-46c3c68605-e755433d65.zip new file mode 100644 index 0000000000..50aca1a046 --- /dev/null +++ b/.yarn/cache/handlebars-npm-4.7.9-46c3c68605-e755433d65.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8b95b79c9202c2691200f48db70f1067f4ce964eff1efebfa6238423927f87e +size 754297 diff --git a/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip b/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip new file mode 100644 index 0000000000..37cb67ab5a --- /dev/null +++ b/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08c9e51998d0afb7b6146beacb8f3ede031182c4a7d9ddca35196f02dadfd972 +size 3816 diff --git a/.yarn/cache/hasown-npm-2.0.4-75e16c9c2a-13823863ae.zip b/.yarn/cache/hasown-npm-2.0.4-75e16c9c2a-13823863ae.zip new file mode 100644 index 0000000000..9e0eb5892a --- /dev/null +++ b/.yarn/cache/hasown-npm-2.0.4-75e16c9c2a-13823863ae.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9045af016f0da161ecbc186535a3ec3918ea97b74d6ad19c36f56b5f505852c6 +size 6344 diff --git a/.yarn/cache/he-npm-1.2.0-3b73a2ff07-d09b2243da.zip b/.yarn/cache/he-npm-1.2.0-3b73a2ff07-d09b2243da.zip new file mode 100644 index 0000000000..4661c10c38 --- /dev/null +++ b/.yarn/cache/he-npm-1.2.0-3b73a2ff07-d09b2243da.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bd06ebf46d1ab498dd14d973b61cf7136e6984a7d578ec5ee7b7dd22fa008ca +size 42206 diff --git a/.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-96da7d4123.zip b/.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-96da7d4123.zip new file mode 100644 index 0000000000..6b2f14daee --- /dev/null +++ b/.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-96da7d4123.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34a1ea1f937d31861ee04e2a8055e870aa87d1b78663664d6c034c23a21d6120 +size 9785 diff --git a/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-4dc67022b7.zip b/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-4dc67022b7.zip new file mode 100644 index 0000000000..ac900d49b0 --- /dev/null +++ b/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-4dc67022b7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95598613ad4950d5ec8f41c41d7ad775d024b27a673958f590a273a54d0c97fb +size 8362 diff --git a/.yarn/cache/idb-npm-7.0.2-adc0227452-c82a470e2b.zip b/.yarn/cache/idb-npm-7.0.2-adc0227452-c82a470e2b.zip deleted file mode 100644 index acff7c85f4..0000000000 --- a/.yarn/cache/idb-npm-7.0.2-adc0227452-c82a470e2b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f2a32c1b4e204ee48d5e9f6b5a2b3d0ef304a961176cc535483cffe00ecfa7d -size 27155 diff --git a/.yarn/cache/idb-npm-8.0.3-e9b0a844f6-e2beccb0be.zip b/.yarn/cache/idb-npm-8.0.3-e9b0a844f6-e2beccb0be.zip new file mode 100644 index 0000000000..fbff2367ab --- /dev/null +++ b/.yarn/cache/idb-npm-8.0.3-e9b0a844f6-e2beccb0be.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8daa4d2e903db42dfb885bf976c08b6a81c9cf45dcfc917ac00521379b2108bb +size 22983 diff --git a/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip b/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip new file mode 100644 index 0000000000..a9313203e5 --- /dev/null +++ b/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d74f0c4922e91e84e32e58554eab7d9a85e1e34b0e5d355cf664ed7dd8ea7cd9 +size 7951 diff --git a/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-314ae176e8.zip b/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-314ae176e8.zip new file mode 100644 index 0000000000..d903c568cd --- /dev/null +++ b/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-314ae176e8.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14ed8c6f0188c428b92a89db0f62494a899c16b6538692dd6e4aa0dfd646df98 +size 4574 diff --git a/.yarn/cache/ini-npm-2.0.0-28f7426761-04e24ba05c.zip b/.yarn/cache/ini-npm-2.0.0-28f7426761-04e24ba05c.zip new file mode 100644 index 0000000000..adf3e5e497 --- /dev/null +++ b/.yarn/cache/ini-npm-2.0.0-28f7426761-04e24ba05c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf23fb1e688e01d8903e92d51c70b11ac628f42963b57aa96d1337cdef6dabb0 +size 4660 diff --git a/.yarn/cache/ini-npm-4.1.3-56188f3216-f536b414d1.zip b/.yarn/cache/ini-npm-4.1.3-56188f3216-f536b414d1.zip new file mode 100644 index 0000000000..9045889e3c --- /dev/null +++ b/.yarn/cache/ini-npm-4.1.3-56188f3216-f536b414d1.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8630248a9129a8d87d3ca330e0412d28ed5e557514829f0f30da3b15d495866a +size 5647 diff --git a/.yarn/cache/is-core-module-npm-2.16.2-f7b0e85c93-6ee7535d82.zip b/.yarn/cache/is-core-module-npm-2.16.2-f7b0e85c93-6ee7535d82.zip new file mode 100644 index 0000000000..3c971f5a8b --- /dev/null +++ b/.yarn/cache/is-core-module-npm-2.16.2-f7b0e85c93-6ee7535d82.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da18fcdfad792241d31f69fc55e0ad15f1840a0f603e64394c93c337c26dada7 +size 12991 diff --git a/.yarn/cache/is-module-npm-1.0.0-79ba918283-8cd5390730.zip b/.yarn/cache/is-module-npm-1.0.0-79ba918283-8cd5390730.zip deleted file mode 100644 index 48bc744658..0000000000 --- a/.yarn/cache/is-module-npm-1.0.0-79ba918283-8cd5390730.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99fc4281ee62960494fcdb28ed42bac45da52311e4bf6c80eb0e9fce04172552 -size 2655 diff --git a/.yarn/cache/is-obj-npm-1.0.1-7d391539d7-3ccf0efdea.zip b/.yarn/cache/is-obj-npm-1.0.1-7d391539d7-3ccf0efdea.zip deleted file mode 100644 index 004d4f2c22..0000000000 --- a/.yarn/cache/is-obj-npm-1.0.1-7d391539d7-3ccf0efdea.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:715159b3e2db48549d0fda720d924c3dc3b95c610c8d551e9c001ad595cdb912 -size 2161 diff --git a/.yarn/cache/is-path-cwd-npm-2.2.0-e35e4aab5f-46a840921b.zip b/.yarn/cache/is-path-cwd-npm-2.2.0-e35e4aab5f-46a840921b.zip deleted file mode 100644 index eab3c1dc92..0000000000 --- a/.yarn/cache/is-path-cwd-npm-2.2.0-e35e4aab5f-46a840921b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94b40b2a97a33e31e7bdd85c1c5ab9b9d2af161b6d7c8326910137be78a70518 -size 2576 diff --git a/.yarn/cache/is-path-in-cwd-npm-2.1.0-2a2ca98522-84387d0991.zip b/.yarn/cache/is-path-in-cwd-npm-2.1.0-2a2ca98522-84387d0991.zip deleted file mode 100644 index 4f20505159..0000000000 --- a/.yarn/cache/is-path-in-cwd-npm-2.1.0-2a2ca98522-84387d0991.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8cbce88dab281f00a68d585a57b7d951ff339214d04187e49f259aa26cbf464 -size 2587 diff --git a/.yarn/cache/is-path-inside-npm-2.1.0-f943552e7a-6ca34dbd84.zip b/.yarn/cache/is-path-inside-npm-2.1.0-f943552e7a-6ca34dbd84.zip deleted file mode 100644 index de1971d5cd..0000000000 --- a/.yarn/cache/is-path-inside-npm-2.1.0-f943552e7a-6ca34dbd84.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02ab770c6d7fe0cebb4e269d00ee64c38afd17b9e071ed7e89c24c7849456ac4 -size 2620 diff --git a/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip b/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip new file mode 100644 index 0000000000..fb36bb7cac --- /dev/null +++ b/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baa84de48812a8af4607fd898b2dcbf57bf2db6d2e37b98423e6f7d3443bd142 +size 2275 diff --git a/.yarn/cache/is-text-path-npm-1.0.1-92c78fe58d-fb5d78752c.zip b/.yarn/cache/is-text-path-npm-1.0.1-92c78fe58d-fb5d78752c.zip new file mode 100644 index 0000000000..2fce487a75 --- /dev/null +++ b/.yarn/cache/is-text-path-npm-1.0.1-92c78fe58d-fb5d78752c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47b0abf5210cafaaf77c3c5c227877afa8b446cb8bae3fd5877528fa3065d489 +size 2282 diff --git a/.yarn/cache/jake-npm-10.8.5-6a5e87e533-6eaf1cd7fe.zip b/.yarn/cache/jake-npm-10.8.5-6a5e87e533-6eaf1cd7fe.zip deleted file mode 100644 index f986da4be5..0000000000 --- a/.yarn/cache/jake-npm-10.8.5-6a5e87e533-6eaf1cd7fe.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:81f038182760760e72228008808cae143d94eedd046e1d0bee7b41619c4ba817 -size 61482 diff --git a/.yarn/cache/jest-worker-npm-26.6.2-46cbcd449f-5f6b94cf0e.zip b/.yarn/cache/jest-worker-npm-26.6.2-46cbcd449f-5f6b94cf0e.zip deleted file mode 100644 index 5f44f2283d..0000000000 --- a/.yarn/cache/jest-worker-npm-26.6.2-46cbcd449f-5f6b94cf0e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1b141aa7d955c35553617766fbcb81ae0309ad74342dbbbe5c0bbce4eea0a81f -size 28756 diff --git a/.yarn/cache/jsesc-npm-0.5.0-6827074492-fab949f585.zip b/.yarn/cache/jsesc-npm-0.5.0-6827074492-fab949f585.zip deleted file mode 100644 index ba7aa471be..0000000000 --- a/.yarn/cache/jsesc-npm-0.5.0-6827074492-fab949f585.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0ba98ebd45527887a926cdeb723dacc67f95fb79df6371a23e024e549950a50 -size 11118 diff --git a/.yarn/cache/json-parse-better-errors-npm-1.0.2-7f37637d19-5553232045.zip b/.yarn/cache/json-parse-better-errors-npm-1.0.2-7f37637d19-5553232045.zip new file mode 100644 index 0000000000..bb2daf03f4 --- /dev/null +++ b/.yarn/cache/json-parse-better-errors-npm-1.0.2-7f37637d19-5553232045.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10acd8df993a37ef7f7a98e6b84ff14d878422294777d7c52561f3360ea058cd +size 4228 diff --git a/.yarn/cache/json-schema-npm-0.4.0-e776313070-8b3b64eff4.zip b/.yarn/cache/json-schema-npm-0.4.0-e776313070-8b3b64eff4.zip deleted file mode 100644 index a455823499..0000000000 --- a/.yarn/cache/json-schema-npm-0.4.0-e776313070-8b3b64eff4.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb5cb58ec95fae21f908c3b2725e7ec641f7dc9a60a59c3977c119277957dc62 -size 10482 diff --git a/.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip b/.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip deleted file mode 100644 index b96aa85926..0000000000 --- a/.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:725462696ca01bd1cc98abf1961680bedb01198883732812b57dad04382bc61c -size 9538 diff --git a/.yarn/cache/jsonparse-npm-1.3.1-b6fde74828-24531e956f.zip b/.yarn/cache/jsonparse-npm-1.3.1-b6fde74828-24531e956f.zip new file mode 100644 index 0000000000..041a6cbddf --- /dev/null +++ b/.yarn/cache/jsonparse-npm-1.3.1-b6fde74828-24531e956f.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aec0acd7c78f33cb31d5a159732063c2316d1b29c3ad6abf6aaeadca887efa9 +size 13253 diff --git a/.yarn/cache/jsonpointer-npm-5.0.1-8e4c22e512-0b40f71290.zip b/.yarn/cache/jsonpointer-npm-5.0.1-8e4c22e512-0b40f71290.zip deleted file mode 100644 index ecdd40ae39..0000000000 --- a/.yarn/cache/jsonpointer-npm-5.0.1-8e4c22e512-0b40f71290.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3bfbad52f6d2a080c53eb01edc084b7c1853d6c9e86d8d679bc8149a3d9e984 -size 3795 diff --git a/.yarn/cache/kleur-npm-4.1.5-46b6135f41-44d84cc4ee.zip b/.yarn/cache/kleur-npm-4.1.5-46b6135f41-44d84cc4ee.zip new file mode 100644 index 0000000000..9fd747bb31 --- /dev/null +++ b/.yarn/cache/kleur-npm-4.1.5-46b6135f41-44d84cc4ee.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cc95358e96481c6414f95e45d9122458b99f4b578690b726db2e483c0c37b8 +size 9464 diff --git a/.yarn/cache/kolorist-npm-1.8.0-2cc04dcc05-71d5d12295.zip b/.yarn/cache/kolorist-npm-1.8.0-2cc04dcc05-71d5d12295.zip new file mode 100644 index 0000000000..5b49eaed0d --- /dev/null +++ b/.yarn/cache/kolorist-npm-1.8.0-2cc04dcc05-71d5d12295.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1285ef204421682137e54b715b798095c866e37a14e46bb5421b8ab04477e32b +size 16724 diff --git a/.yarn/cache/lie-npm-3.1.1-91350720d9-c2c7d9dcc3.zip b/.yarn/cache/lie-npm-3.1.1-91350720d9-c2c7d9dcc3.zip new file mode 100644 index 0000000000..fe4d1805f3 --- /dev/null +++ b/.yarn/cache/lie-npm-3.1.1-91350720d9-c2c7d9dcc3.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc2850df8d1ec117fcd967726ba5040e2a93e7760acdedb6e97dc8dc1167a9e9 +size 15954 diff --git a/.yarn/cache/load-json-file-npm-4.0.0-c9f09d85eb-8f5d6d93ba.zip b/.yarn/cache/load-json-file-npm-4.0.0-c9f09d85eb-8f5d6d93ba.zip new file mode 100644 index 0000000000..e773ef764b --- /dev/null +++ b/.yarn/cache/load-json-file-npm-4.0.0-c9f09d85eb-8f5d6d93ba.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c5dc6172bc95f02afe22df4b24999f39f0539ccb16e9b06f4f8fc2dbe37f88b +size 2501 diff --git a/.yarn/cache/localforage-npm-1.10.0-cf9ea9a436-d5c44be3a0.zip b/.yarn/cache/localforage-npm-1.10.0-cf9ea9a436-d5c44be3a0.zip new file mode 100644 index 0000000000..ccff18425a --- /dev/null +++ b/.yarn/cache/localforage-npm-1.10.0-cf9ea9a436-d5c44be3a0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c68efdfdf31a4ef2b1a807a9df88644bd34db06c3278a6165bfeb7942d8c4e6 +size 119235 diff --git a/.yarn/cache/locate-path-npm-2.0.0-673d28b0ea-02d581edbb.zip b/.yarn/cache/locate-path-npm-2.0.0-673d28b0ea-02d581edbb.zip new file mode 100644 index 0000000000..fa3cc65a0d --- /dev/null +++ b/.yarn/cache/locate-path-npm-2.0.0-673d28b0ea-02d581edbb.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03b2829ecebc4f853ae09a0e27e44ca99a703d351440395d5e593f98bf4860f9 +size 2753 diff --git a/.yarn/cache/lodash.debounce-npm-4.0.8-f1d6e09799-cd0b281978.zip b/.yarn/cache/lodash.debounce-npm-4.0.8-f1d6e09799-cd0b281978.zip deleted file mode 100644 index 3ffa1de4e8..0000000000 --- a/.yarn/cache/lodash.debounce-npm-4.0.8-f1d6e09799-cd0b281978.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:29008eee3040d28dcc7c6cc9029b50e8c3742ce070b92023e2750b0b8866f33a -size 6149 diff --git a/.yarn/cache/lodash.ismatch-npm-4.4.0-e538fd6c3d-946a7176cd.zip b/.yarn/cache/lodash.ismatch-npm-4.4.0-e538fd6c3d-946a7176cd.zip new file mode 100644 index 0000000000..0f5d8c6f06 --- /dev/null +++ b/.yarn/cache/lodash.ismatch-npm-4.4.0-e538fd6c3d-946a7176cd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287d907139104d08d7fdf55886ebb929bb41956943a558cd6b52b663afae8d50 +size 12710 diff --git a/.yarn/cache/lru-cache-npm-11.5.1-8679877966-02c4f73967.zip b/.yarn/cache/lru-cache-npm-11.5.1-8679877966-02c4f73967.zip new file mode 100644 index 0000000000..19283bf5c9 --- /dev/null +++ b/.yarn/cache/lru-cache-npm-11.5.1-8679877966-02c4f73967.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c453287561d82005cc598ab09200f689a670287d827a358a83d81f80efeeda12 +size 652080 diff --git a/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-87a14b944b.zip b/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-87a14b944b.zip deleted file mode 100644 index b31e060372..0000000000 --- a/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-87a14b944b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99c1a00ce64ef93f5bea69d84c4a5a62203fdd0c0879e62743379623f8136d7d -size 76722 diff --git a/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip b/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip new file mode 100644 index 0000000000..11f2d282df --- /dev/null +++ b/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fc063a99723fd8c223fccc482828b0ca41da095feb3a9867051dbaf9634c366 +size 5899 diff --git a/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-f8e6fc7f61.zip b/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-f8e6fc7f61.zip new file mode 100644 index 0000000000..18a9ce6765 --- /dev/null +++ b/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-f8e6fc7f61.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90f1eb2560a06c8963a9cf9126452779a6a92db8ebe57d128cc032bef300788f +size 2220 diff --git a/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip b/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip new file mode 100644 index 0000000000..fc883a7586 --- /dev/null +++ b/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65f14a12a9a03abf844ef1380e784b5109d8a2506f3580a81876c62a09ceb1e6 +size 4471 diff --git a/.yarn/cache/meow-npm-8.1.2-bcfe48d4f3-d4770f9013.zip b/.yarn/cache/meow-npm-8.1.2-bcfe48d4f3-d4770f9013.zip new file mode 100644 index 0000000000..014ff0e713 --- /dev/null +++ b/.yarn/cache/meow-npm-8.1.2-bcfe48d4f3-d4770f9013.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc13a38fed1c63888fe0e80d5f0880bae17246558642765a5ba33d3afec70ac1 +size 9763 diff --git a/.yarn/cache/mimic-response-npm-3.1.0-a4a24b4e96-7e71904761.zip b/.yarn/cache/mimic-response-npm-3.1.0-a4a24b4e96-7e71904761.zip new file mode 100644 index 0000000000..bdf5ecd9d7 --- /dev/null +++ b/.yarn/cache/mimic-response-npm-3.1.0-a4a24b4e96-7e71904761.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfed0a3f9d99536400612bc927c2be7ff27e816c88e42659caafb062f3a47bcb +size 3886 diff --git a/.yarn/cache/minimatch-npm-10.2.5-f1c8297822-19e87a931a.zip b/.yarn/cache/minimatch-npm-10.2.5-f1c8297822-19e87a931a.zip new file mode 100644 index 0000000000..1da8c94d17 --- /dev/null +++ b/.yarn/cache/minimatch-npm-10.2.5-f1c8297822-19e87a931a.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f422ded4e2b4176ca800c71e03c74fe3f257bcea220972dced2202fb243796b +size 152814 diff --git a/.yarn/cache/minimatch-npm-3.0.5-a20094d35f-8f97074911.zip b/.yarn/cache/minimatch-npm-3.0.5-a20094d35f-8f97074911.zip new file mode 100644 index 0000000000..59af6aa084 --- /dev/null +++ b/.yarn/cache/minimatch-npm-3.0.5-a20094d35f-8f97074911.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b16221128d0eba0e97c4fd61423956e821759580c0757df955c15ce43065d5b +size 12522 diff --git a/.yarn/cache/minimatch-npm-8.0.7-8b2eaa0dac-dead7be9ad.zip b/.yarn/cache/minimatch-npm-8.0.7-8b2eaa0dac-dead7be9ad.zip new file mode 100644 index 0000000000..98ef11cb13 --- /dev/null +++ b/.yarn/cache/minimatch-npm-8.0.7-8b2eaa0dac-dead7be9ad.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d210f6f34d13ac2db9286be8458b87f9cd7364f3c5959ff1318281480c99cdc +size 132790 diff --git a/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-908491b6cc.zip b/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-908491b6cc.zip new file mode 100644 index 0000000000..b235241727 --- /dev/null +++ b/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-908491b6cc.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b25b8f015b74e2feb9783a625cb1479e151b4ba8778aa99a8e5e423505320067 +size 21312 diff --git a/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip b/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip new file mode 100644 index 0000000000..294863250d --- /dev/null +++ b/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee706f096a60348b16a4b6b5849103764faeb6f7341aadf1dc9fc608d085128a +size 4558 diff --git a/.yarn/cache/minipass-npm-4.2.8-f05abfe254-e148eb6dcb.zip b/.yarn/cache/minipass-npm-4.2.8-f05abfe254-e148eb6dcb.zip new file mode 100644 index 0000000000..3071e608db --- /dev/null +++ b/.yarn/cache/minipass-npm-4.2.8-f05abfe254-e148eb6dcb.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75a76a69222810bbebcd0fa5a9e7a932c252fbd0f578f376cc90f9574281c0fd +size 22429 diff --git a/.yarn/cache/minipass-npm-7.1.3-b73a16498d-175e4d5e20.zip b/.yarn/cache/minipass-npm-7.1.3-b73a16498d-175e4d5e20.zip new file mode 100644 index 0000000000..aed9517f34 --- /dev/null +++ b/.yarn/cache/minipass-npm-7.1.3-b73a16498d-175e4d5e20.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b29ef7f7109d9bee76a5119ee07b19047ef3573738f4fa34032267573df481cd +size 94345 diff --git a/.yarn/cache/minizlib-npm-3.1.0-6680befdba-f47365cc2c.zip b/.yarn/cache/minizlib-npm-3.1.0-6680befdba-f47365cc2c.zip new file mode 100644 index 0000000000..354ffbcd86 --- /dev/null +++ b/.yarn/cache/minizlib-npm-3.1.0-6680befdba-f47365cc2c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b5dff272a8796118857b142fc9dec264e7cee165c571cd88519554504ef66a8 +size 36772 diff --git a/.yarn/cache/modify-values-npm-1.0.1-9b2377e166-16fa93f7dd.zip b/.yarn/cache/modify-values-npm-1.0.1-9b2377e166-16fa93f7dd.zip new file mode 100644 index 0000000000..af4c546fc5 --- /dev/null +++ b/.yarn/cache/modify-values-npm-1.0.1-9b2377e166-16fa93f7dd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c23feed7ced357722747a668961874606253be4677e5c96c63350fc03e9e5b7a +size 2395 diff --git a/.yarn/cache/napi-build-utils-npm-2.0.0-95da9c2e4e-69adcdb828.zip b/.yarn/cache/napi-build-utils-npm-2.0.0-95da9c2e4e-69adcdb828.zip new file mode 100644 index 0000000000..efef5de830 --- /dev/null +++ b/.yarn/cache/napi-build-utils-npm-2.0.0-95da9c2e4e-69adcdb828.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63d54962bca411c05a373b85b9fe85f8b1ba0c38e6844b25bee6c68b36d0e26e +size 6273 diff --git a/.yarn/cache/native-run-npm-2.0.3-fced12c1d8-f78268262d.zip b/.yarn/cache/native-run-npm-2.0.3-fced12c1d8-f78268262d.zip new file mode 100644 index 0000000000..83ba58b0c6 --- /dev/null +++ b/.yarn/cache/native-run-npm-2.0.3-fced12c1d8-f78268262d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f737b772b17085aea344417f48161346740b7d6b715c2152db0dafd3641ccd9 +size 2000334 diff --git a/.yarn/cache/next-compose-plugins-npm-2.2.1-a9c8f4fdca-e3c8b26617.zip b/.yarn/cache/next-compose-plugins-npm-2.2.1-a9c8f4fdca-e3c8b26617.zip deleted file mode 100644 index c31b3398c7..0000000000 --- a/.yarn/cache/next-compose-plugins-npm-2.2.1-a9c8f4fdca-e3c8b26617.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:434f357bcaa23ee0b0ea08729af00556cbadafc96694637d2aa3e182c05ee366 -size 9814 diff --git a/.yarn/cache/next-pwa-npm-5.6.0-0f61704f10-a42b395e3f.zip b/.yarn/cache/next-pwa-npm-5.6.0-0f61704f10-a42b395e3f.zip deleted file mode 100644 index aeda04429a..0000000000 --- a/.yarn/cache/next-pwa-npm-5.6.0-0f61704f10-a42b395e3f.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b69e31f09b6fcfd41442d9d30162c0b24d6e8cccd816f7e6b119eeb05afae759 -size 18226 diff --git a/.yarn/cache/node-abi-npm-3.92.0-713b7fe144-b57a8eaa3e.zip b/.yarn/cache/node-abi-npm-3.92.0-713b7fe144-b57a8eaa3e.zip new file mode 100644 index 0000000000..aa1b75d3a4 --- /dev/null +++ b/.yarn/cache/node-abi-npm-3.92.0-713b7fe144-b57a8eaa3e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da0fa38aab0c79a280430cbfa4ae34222c0b5847dbb3e9b58f568808645400e4 +size 4998 diff --git a/.yarn/cache/node-addon-api-npm-6.1.0-634c545b39-8eea1d4d96.zip b/.yarn/cache/node-addon-api-npm-6.1.0-634c545b39-8eea1d4d96.zip new file mode 100644 index 0000000000..29d85691a9 --- /dev/null +++ b/.yarn/cache/node-addon-api-npm-6.1.0-634c545b39-8eea1d4d96.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77f7f87cbf0b689e8338adf5442ddbdd40af8c5bdf3b2057091cfd50ab566302 +size 65066 diff --git a/.yarn/cache/node-html-parser-npm-5.4.2-9701acd94e-90b6a2f21a.zip b/.yarn/cache/node-html-parser-npm-5.4.2-9701acd94e-90b6a2f21a.zip new file mode 100644 index 0000000000..261503f1e4 --- /dev/null +++ b/.yarn/cache/node-html-parser-npm-5.4.2-9701acd94e-90b6a2f21a.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22245260dd661a0824dd7bcbdc6ca8e903c2298e363cf32ef122a28958ef52c5 +size 42368 diff --git a/.yarn/cache/node-releases-npm-2.0.47-1e375bf86a-6ba88359ea.zip b/.yarn/cache/node-releases-npm-2.0.47-1e375bf86a-6ba88359ea.zip new file mode 100644 index 0000000000..e826231159 --- /dev/null +++ b/.yarn/cache/node-releases-npm-2.0.47-1e375bf86a-6ba88359ea.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:412e68a37e1b3664e4ce6f1ae335ad207152a5d485279f2d4ce3d4baeee703a7 +size 7080 diff --git a/.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-644f830a8b.zip b/.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-644f830a8b.zip new file mode 100644 index 0000000000..518a19c7c7 --- /dev/null +++ b/.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-644f830a8b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76d2df608b826bb1ae7dbc5fd7381f8d113826e232dbf7a350903e5b6a788ad8 +size 11662 diff --git a/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-3cd3b438c9.zip b/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-3cd3b438c9.zip new file mode 100644 index 0000000000..4b51107946 --- /dev/null +++ b/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-3cd3b438c9.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eb967917a4cbd0b45f794a5a78330c3ee1a5c65dbe838724be4a3d12d8cdb9b +size 11839 diff --git a/.yarn/cache/p-limit-npm-1.3.0-fdb471d864-eb9d9bc378.zip b/.yarn/cache/p-limit-npm-1.3.0-fdb471d864-eb9d9bc378.zip new file mode 100644 index 0000000000..ead37606d6 --- /dev/null +++ b/.yarn/cache/p-limit-npm-1.3.0-fdb471d864-eb9d9bc378.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eafb9aa96d9faebdd230b6cdef05bbf8e39ae3e5c91185eaed689c3c8b4b49f +size 2727 diff --git a/.yarn/cache/p-locate-npm-2.0.0-3a2ee263dd-e2dceb9b49.zip b/.yarn/cache/p-locate-npm-2.0.0-3a2ee263dd-e2dceb9b49.zip new file mode 100644 index 0000000000..ee62ef2908 --- /dev/null +++ b/.yarn/cache/p-locate-npm-2.0.0-3a2ee263dd-e2dceb9b49.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56965e80f9860b2f5c1d6da7b74e5f3d23627a3ee2328f8ed7cfad9d5d698590 +size 3326 diff --git a/.yarn/cache/p-map-npm-2.1.0-d9e865dc7c-9e3ad3c9f6.zip b/.yarn/cache/p-map-npm-2.1.0-d9e865dc7c-9e3ad3c9f6.zip deleted file mode 100644 index fb56a8b9e1..0000000000 --- a/.yarn/cache/p-map-npm-2.1.0-d9e865dc7c-9e3ad3c9f6.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1702d626e1175c45ad895d4e3a7bb212eee42a5dc522a552cb60a977fae20217 -size 4296 diff --git a/.yarn/cache/p-try-npm-1.0.0-7373139e40-20d9735f57.zip b/.yarn/cache/p-try-npm-1.0.0-7373139e40-20d9735f57.zip new file mode 100644 index 0000000000..1201dce739 --- /dev/null +++ b/.yarn/cache/p-try-npm-1.0.0-7373139e40-20d9735f57.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33441dc5b916c8041f7bf34156e697bfc721d43a0aa86390d283e4575256633d +size 2316 diff --git a/.yarn/cache/package-json-from-dist-npm-1.0.1-4631a88465-58ee9538f2.zip b/.yarn/cache/package-json-from-dist-npm-1.0.1-4631a88465-58ee9538f2.zip new file mode 100644 index 0000000000..de04597e9e --- /dev/null +++ b/.yarn/cache/package-json-from-dist-npm-1.0.1-4631a88465-58ee9538f2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d525d76cda5d97722fa10e76565a591d81f349157bf170f14cc6a379b7b399ed +size 14065 diff --git a/.yarn/cache/parse-json-npm-4.0.0-a6f7771010-0fe227d410.zip b/.yarn/cache/parse-json-npm-4.0.0-a6f7771010-0fe227d410.zip new file mode 100644 index 0000000000..c084ad1cd7 --- /dev/null +++ b/.yarn/cache/parse-json-npm-4.0.0-a6f7771010-0fe227d410.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adeb716d2563bc5c070755fa764af83462fd35375ed5e856e8472a0e4fef30a5 +size 2778 diff --git a/.yarn/cache/path-exists-npm-3.0.0-e80371aa68-96e92643aa.zip b/.yarn/cache/path-exists-npm-3.0.0-e80371aa68-96e92643aa.zip new file mode 100644 index 0000000000..66d9896657 --- /dev/null +++ b/.yarn/cache/path-exists-npm-3.0.0-e80371aa68-96e92643aa.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d00c067d5ecc91485b61ee5bc0ecb3a7da8b789cb6fd976eafd159b730bbd1 +size 2584 diff --git a/.yarn/cache/path-is-inside-npm-1.0.2-7dd0711668-0b5b6c92d3.zip b/.yarn/cache/path-is-inside-npm-1.0.2-7dd0711668-0b5b6c92d3.zip deleted file mode 100644 index 158f4e767c..0000000000 --- a/.yarn/cache/path-is-inside-npm-1.0.2-7dd0711668-0b5b6c92d3.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f45b5176058d4e8e8c5f659d5b1fce067c7b4f9c74b89e890df2f86ee8d0636f -size 2585 diff --git a/.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-5e8845c159.zip b/.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-5e8845c159.zip new file mode 100644 index 0000000000..3f91c3c890 --- /dev/null +++ b/.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-5e8845c159.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bec8361fc57fb76bd23e3ca9082e98df675ad217c8ff1778b0f0ff07b920db07 +size 110494 diff --git a/.yarn/cache/path-scurry-npm-2.0.2-f10aa6a77e-2b4257422b.zip b/.yarn/cache/path-scurry-npm-2.0.2-f10aa6a77e-2b4257422b.zip new file mode 100644 index 0000000000..4760b07fac --- /dev/null +++ b/.yarn/cache/path-scurry-npm-2.0.2-f10aa6a77e-2b4257422b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e36756daf78dedae818b3175473c1e3cac9d8fa48bb96fa82455cde2219a263 +size 110397 diff --git a/.yarn/cache/pinkie-npm-2.0.4-cffce4fb09-11d207257a.zip b/.yarn/cache/pinkie-npm-2.0.4-cffce4fb09-11d207257a.zip deleted file mode 100644 index c4a140b677..0000000000 --- a/.yarn/cache/pinkie-npm-2.0.4-cffce4fb09-11d207257a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:db14798e76cbfa8f13907b63cf3ea17292ea4b116ca9f46c1aa3a7d2983c6c4e -size 4652 diff --git a/.yarn/cache/pinkie-promise-npm-2.0.1-095439b8c5-b53a4a2e73.zip b/.yarn/cache/pinkie-promise-npm-2.0.1-095439b8c5-b53a4a2e73.zip deleted file mode 100644 index 4b0500b1e3..0000000000 --- a/.yarn/cache/pinkie-promise-npm-2.0.1-095439b8c5-b53a4a2e73.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d7ee5ad0cca809d5e3cd9077fa97775ac3192a459afec8e1b4e90237e24ad309 -size 2311 diff --git a/.yarn/cache/plist-npm-3.1.1-5d562f69ce-dffa39e82c.zip b/.yarn/cache/plist-npm-3.1.1-5d562f69ce-dffa39e82c.zip new file mode 100644 index 0000000000..95fcfe60b2 --- /dev/null +++ b/.yarn/cache/plist-npm-3.1.1-5d562f69ce-dffa39e82c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:544481782c9a895762c97fa13b7318324840a37f5df7032670e311fea5c6cb3b +size 228746 diff --git a/.yarn/cache/prebuild-install-npm-7.1.3-8e79c3a0a2-1b7e4c00d2.zip b/.yarn/cache/prebuild-install-npm-7.1.3-8e79c3a0a2-1b7e4c00d2.zip new file mode 100644 index 0000000000..fe1a75e721 --- /dev/null +++ b/.yarn/cache/prebuild-install-npm-7.1.3-8e79c3a0a2-1b7e4c00d2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f5da04a2ccbfcc7023ec06f9a59e0e245b466f06e5bc8e08c12db80e9379fd +size 15236 diff --git a/.yarn/cache/prettier-npm-2.8.8-430828a36c-00cdb6ab02.zip b/.yarn/cache/prettier-npm-2.8.8-430828a36c-00cdb6ab02.zip new file mode 100644 index 0000000000..ed03f94f3f --- /dev/null +++ b/.yarn/cache/prettier-npm-2.8.8-430828a36c-00cdb6ab02.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02e2a397159153e86fa56175ea93db42e9cd459a7c122ca89153ff47e5e3f7da +size 2758382 diff --git a/.yarn/cache/prettier-npm-3.8.4-fc713caa8e-54684a3cc6.zip b/.yarn/cache/prettier-npm-3.8.4-fc713caa8e-54684a3cc6.zip new file mode 100644 index 0000000000..1f6ec74184 --- /dev/null +++ b/.yarn/cache/prettier-npm-3.8.4-fc713caa8e-54684a3cc6.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c70b3c56d1d9f48b54a7b4ad898f1b0de3221ce77167ec07eb77571579123d7 +size 2206583 diff --git a/.yarn/cache/pretty-bytes-npm-5.6.0-0061079c9f-9c082500d1.zip b/.yarn/cache/pretty-bytes-npm-5.6.0-0061079c9f-9c082500d1.zip deleted file mode 100644 index 51877e3a14..0000000000 --- a/.yarn/cache/pretty-bytes-npm-5.6.0-0061079c9f-9c082500d1.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:845a02b2a391415231b2025b587587f7558fd42291fe23928d7095ffc1bca319 -size 5576 diff --git a/.yarn/cache/pretty-bytes-npm-6.1.1-d10304de8f-43d29d909d.zip b/.yarn/cache/pretty-bytes-npm-6.1.1-d10304de8f-43d29d909d.zip new file mode 100644 index 0000000000..c145c4f73e --- /dev/null +++ b/.yarn/cache/pretty-bytes-npm-6.1.1-d10304de8f-43d29d909d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3846dcebb99aa7df646a16055557c37546d6caf922769259ac7900d94c6bec3 +size 5320 diff --git a/.yarn/cache/q-npm-1.5.1-a28b3cfeaf-70c4a30b30.zip b/.yarn/cache/q-npm-1.5.1-a28b3cfeaf-70c4a30b30.zip new file mode 100644 index 0000000000..8e5de6eaef --- /dev/null +++ b/.yarn/cache/q-npm-1.5.1-a28b3cfeaf-70c4a30b30.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68b351edc5e0ef6b2907bd99e92dde6fca1baec679664deb725f53ac1301c723 +size 38705 diff --git a/.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-5c7c75f1c6.zip b/.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-5c7c75f1c6.zip new file mode 100644 index 0000000000..cc2e741a80 --- /dev/null +++ b/.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-5c7c75f1c6.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd8f3ed4736c69349df89f8a9e41f63e711715ade39207a7051bffcf60e9717f +size 4230 diff --git a/.yarn/cache/rc-npm-1.2.8-d6768ac936-5c4d72ae7e.zip b/.yarn/cache/rc-npm-1.2.8-d6768ac936-5c4d72ae7e.zip new file mode 100644 index 0000000000..ee47bc2639 --- /dev/null +++ b/.yarn/cache/rc-npm-1.2.8-d6768ac936-5c4d72ae7e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf239e909ca372beb42112cb7e51dbcd85cba5a0ca240645b51f32333a29b45f +size 9802 diff --git a/.yarn/cache/read-pkg-npm-3.0.0-41471436cb-398903ebae.zip b/.yarn/cache/read-pkg-npm-3.0.0-41471436cb-398903ebae.zip new file mode 100644 index 0000000000..d7365e03dc --- /dev/null +++ b/.yarn/cache/read-pkg-npm-3.0.0-41471436cb-398903ebae.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d372c1077ae21a4d453045e240d0ecafd2ada73ce0d7c9fbcf2ac80fed185664 +size 2753 diff --git a/.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip b/.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip new file mode 100644 index 0000000000..2066b623a9 --- /dev/null +++ b/.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d9a6fca88920b2d91c697b9cce07b59fca833b2dae6be2f7d8aa1e7f879cb4a +size 3628 diff --git a/.yarn/cache/read-pkg-up-npm-3.0.0-3d7faf047f-16175573f2.zip b/.yarn/cache/read-pkg-up-npm-3.0.0-3d7faf047f-16175573f2.zip new file mode 100644 index 0000000000..46739afda6 --- /dev/null +++ b/.yarn/cache/read-pkg-up-npm-3.0.0-3d7faf047f-16175573f2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:202d37b5dda930c19e1412adf8ffaea976556a5644a521aebe4da6a1959e5351 +size 2804 diff --git a/.yarn/cache/read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip b/.yarn/cache/read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip new file mode 100644 index 0000000000..d5acd9e7cd --- /dev/null +++ b/.yarn/cache/read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:930ffb39cbf1f1dadbebd1def073b362257ad0f034192f10231e0ddcc0c46e66 +size 3855 diff --git a/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-d9e3e53193.zip b/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-d9e3e53193.zip new file mode 100644 index 0000000000..75c891be48 --- /dev/null +++ b/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-d9e3e53193.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e30f7f3a5b8ea3e4ef2e08de6071d89111a8585a49bb900d08beae1a28d7b3d7 +size 46486 diff --git a/.yarn/cache/regenerate-npm-1.4.2-b296c5b63a-dc6c95ae4b.zip b/.yarn/cache/regenerate-npm-1.4.2-b296c5b63a-dc6c95ae4b.zip deleted file mode 100644 index 92df48718e..0000000000 --- a/.yarn/cache/regenerate-npm-1.4.2-b296c5b63a-dc6c95ae4b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cda57efd4df380ece43c40f52538017e0791f7b0b8785ceb20b558b3fc383cf2 -size 13733 diff --git a/.yarn/cache/regenerate-unicode-properties-npm-10.0.1-a750d23172-448dcfa5e0.zip b/.yarn/cache/regenerate-unicode-properties-npm-10.0.1-a750d23172-448dcfa5e0.zip deleted file mode 100644 index 6e3045080b..0000000000 --- a/.yarn/cache/regenerate-unicode-properties-npm-10.0.1-a750d23172-448dcfa5e0.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5587b7787ac527268ee35447a5693f8fb4877b58620388c64c044022a56e06ab -size 237507 diff --git a/.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-98996694a2.zip b/.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-98996694a2.zip deleted file mode 100644 index 9cf5edb2bb..0000000000 --- a/.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-98996694a2.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e02313d462afe6f7e919de151be7891cf4ab3f83d3083310edaa2cb0528747a9 -size 45573 diff --git a/.yarn/cache/regexp-to-ast-npm-0.5.0-1e96b9f3a0-41f5c38f56.zip b/.yarn/cache/regexp-to-ast-npm-0.5.0-1e96b9f3a0-41f5c38f56.zip new file mode 100644 index 0000000000..34acbfe454 --- /dev/null +++ b/.yarn/cache/regexp-to-ast-npm-0.5.0-1e96b9f3a0-41f5c38f56.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6173efe907703e2adcbb6054d285f152becee0ecef111b8b792aff2c2dd4ceae +size 10436 diff --git a/.yarn/cache/regexpu-core-npm-5.1.0-ac0a69b941-0e00055390.zip b/.yarn/cache/regexpu-core-npm-5.1.0-ac0a69b941-0e00055390.zip deleted file mode 100644 index 33b122e040..0000000000 --- a/.yarn/cache/regexpu-core-npm-5.1.0-ac0a69b941-0e00055390.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:23272eee0cdea8c4b4bfefb73543069a13f42e31b0d11b9dfaddfd3f6734e008 -size 14089 diff --git a/.yarn/cache/regjsgen-npm-0.6.0-bae949467e-bb260bd786.zip b/.yarn/cache/regjsgen-npm-0.6.0-bae949467e-bb260bd786.zip deleted file mode 100644 index ed58a0e9ae..0000000000 --- a/.yarn/cache/regjsgen-npm-0.6.0-bae949467e-bb260bd786.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ac26831a37fd911504852dd1fe3c1ab3700928c0fcabc53617f27fff8411a7f -size 5475 diff --git a/.yarn/cache/regjsparser-npm-0.8.4-df84fdb4b8-b60919be93.zip b/.yarn/cache/regjsparser-npm-0.8.4-df84fdb4b8-b60919be93.zip deleted file mode 100644 index bcc578b9cc..0000000000 --- a/.yarn/cache/regjsparser-npm-0.8.4-df84fdb4b8-b60919be93.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6186f1503de375512c73816b19268eed684ae4d7b8d0e0bb52253d00ef9718a4 -size 19620 diff --git a/.yarn/cache/replace-npm-1.2.2-5db458b852-275ca1a2cf.zip b/.yarn/cache/replace-npm-1.2.2-5db458b852-275ca1a2cf.zip new file mode 100644 index 0000000000..23f73f5d8c --- /dev/null +++ b/.yarn/cache/replace-npm-1.2.2-5db458b852-275ca1a2cf.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c989f78e8d664eb113f104c6cf125edb87a616647849bb3ed8df9a82b5da411f +size 13174 diff --git a/.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip b/.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip deleted file mode 100644 index ccdf04e1c8..0000000000 --- a/.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a3e13c7bd79aef81830f484204c01e14bfc1fc40015d1e3808406582abf72d4 -size 2675 diff --git a/.yarn/cache/resolve-npm-1.22.12-36aa35b43a-1d2a081e4b.zip b/.yarn/cache/resolve-npm-1.22.12-36aa35b43a-1d2a081e4b.zip new file mode 100644 index 0000000000..0c4614f8d8 --- /dev/null +++ b/.yarn/cache/resolve-npm-1.22.12-36aa35b43a-1d2a081e4b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4da5f54633b663f390dffc83e0fdba3f3e2186bc21c7f7f0d5a3dc9204bb3044 +size 68526 diff --git a/.yarn/cache/resolve-patch-2234730f98-f80ad2c2b6.zip b/.yarn/cache/resolve-patch-2234730f98-f80ad2c2b6.zip new file mode 100644 index 0000000000..128fad109f --- /dev/null +++ b/.yarn/cache/resolve-patch-2234730f98-f80ad2c2b6.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7ce577d5d3816b5a7cb9d170bf88726eee383ab02a2b4e23f85c7c7a8da3bd +size 69777 diff --git a/.yarn/cache/rimraf-npm-4.4.1-80b02e041a-218ef91221.zip b/.yarn/cache/rimraf-npm-4.4.1-80b02e041a-218ef91221.zip new file mode 100644 index 0000000000..c64428cf5a --- /dev/null +++ b/.yarn/cache/rimraf-npm-4.4.1-80b02e041a-218ef91221.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e31802699565662af7a921d08e5715eca730b8570f3328a9684707b1b8d040f +size 109304 diff --git a/.yarn/cache/rimraf-npm-6.1.3-409ea7254f-dd98ec2ad7.zip b/.yarn/cache/rimraf-npm-6.1.3-409ea7254f-dd98ec2ad7.zip new file mode 100644 index 0000000000..e80aaf8ab6 --- /dev/null +++ b/.yarn/cache/rimraf-npm-6.1.3-409ea7254f-dd98ec2ad7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a81ea25e77f4a1e2f6c11032eec85c2a9bf23d0932722bc23e80db658183ecd8 +size 105263 diff --git a/.yarn/cache/rollup-npm-2.79.2-1b08e69c0e-095ba0a828.zip b/.yarn/cache/rollup-npm-2.79.2-1b08e69c0e-095ba0a828.zip deleted file mode 100644 index d72075c91d..0000000000 --- a/.yarn/cache/rollup-npm-2.79.2-1b08e69c0e-095ba0a828.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9b5b84739cde01460200d16939e271d03f77159a75d248702f095f1fe6e2768b -size 1154863 diff --git a/.yarn/cache/rollup-plugin-terser-npm-7.0.2-3f55469f5a-af84bb7a7a.zip b/.yarn/cache/rollup-plugin-terser-npm-7.0.2-3f55469f5a-af84bb7a7a.zip deleted file mode 100644 index d6c1d80a6c..0000000000 --- a/.yarn/cache/rollup-plugin-terser-npm-7.0.2-3f55469f5a-af84bb7a7a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:237786391391589ee91d5b39a5761a8f620db3b4e109627fed6b1364acdb1dc9 -size 5269 diff --git a/.yarn/cache/sax-npm-1.1.4-d8d67c74c5-50dd85c562.zip b/.yarn/cache/sax-npm-1.1.4-d8d67c74c5-50dd85c562.zip new file mode 100644 index 0000000000..3f8f8c7228 --- /dev/null +++ b/.yarn/cache/sax-npm-1.1.4-d8d67c74c5-50dd85c562.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4115a78e03d2ffcb0ab9ea8bfc0bf2f0024d9437ec730b308ed82b4291cfe047 +size 20157 diff --git a/.yarn/cache/sax-npm-1.6.0-39dc3ef158-0909cedcd9.zip b/.yarn/cache/sax-npm-1.6.0-39dc3ef158-0909cedcd9.zip new file mode 100644 index 0000000000..5c6fd32941 --- /dev/null +++ b/.yarn/cache/sax-npm-1.6.0-39dc3ef158-0909cedcd9.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4330bf69487d4185cdb48d13e363f5fbd12119d1aa88f32877b11a627d52c5c4 +size 17520 diff --git a/.yarn/cache/schema-utils-npm-2.7.1-f84d18c473-86c3038798.zip b/.yarn/cache/schema-utils-npm-2.7.1-f84d18c473-86c3038798.zip deleted file mode 100644 index 53ce18ca65..0000000000 --- a/.yarn/cache/schema-utils-npm-2.7.1-f84d18c473-86c3038798.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3d36ad9398de5a70ec5247547a4a7b83c0aa44928483b6ccef48321f4284f517 -size 22345 diff --git a/.yarn/cache/semver-npm-7.0.0-218e8c00ca-be264384c7.zip b/.yarn/cache/semver-npm-7.0.0-218e8c00ca-be264384c7.zip deleted file mode 100644 index 4f155f7a20..0000000000 --- a/.yarn/cache/semver-npm-7.0.0-218e8c00ca-be264384c7.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ec6ceb4b7cbb1660268e3b0025af98e935c715b2d438a2344ff8d5ff1ad0f14 -size 33791 diff --git a/.yarn/cache/semver-npm-7.7.4-746e538da5-26bdc6d58b.zip b/.yarn/cache/semver-npm-7.7.4-746e538da5-26bdc6d58b.zip new file mode 100644 index 0000000000..6bf5c501e4 --- /dev/null +++ b/.yarn/cache/semver-npm-7.7.4-746e538da5-26bdc6d58b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:183a47bce0475b18457f96ce34448c5b4f0ed3e1b06a270e78e295d89b21ff07 +size 41573 diff --git a/.yarn/cache/semver-npm-7.8.4-9c59dc7144-a9c139031d.zip b/.yarn/cache/semver-npm-7.8.4-9c59dc7144-a9c139031d.zip new file mode 100644 index 0000000000..dbfd5ddd47 --- /dev/null +++ b/.yarn/cache/semver-npm-7.8.4-9c59dc7144-a9c139031d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60a11d77bbf3e373af535812991aaa62f09ec73a796b2cd4e02f38af47875b44 +size 42835 diff --git a/.yarn/cache/serialize-javascript-npm-4.0.0-b4aeff413b-df68091689.zip b/.yarn/cache/serialize-javascript-npm-4.0.0-b4aeff413b-df68091689.zip deleted file mode 100644 index 0e727417e4..0000000000 --- a/.yarn/cache/serialize-javascript-npm-4.0.0-b4aeff413b-df68091689.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb041bd83c8ad08db291ef29fb264025f63391a0a72bc04bd67ec6db9d026a81 -size 7605 diff --git a/.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-ed3dabfbb5.zip b/.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-ed3dabfbb5.zip deleted file mode 100644 index f644d1022a..0000000000 --- a/.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-ed3dabfbb5.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b99c8a99b235e294058a180e63e305eca0265375965224c86f15e99635840f40 -size 7321 diff --git a/.yarn/cache/serwist-npm-9.5.11-8a684e4cb1-1e9483bd9d.zip b/.yarn/cache/serwist-npm-9.5.11-8a684e4cb1-1e9483bd9d.zip new file mode 100644 index 0000000000..023530c6bd --- /dev/null +++ b/.yarn/cache/serwist-npm-9.5.11-8a684e4cb1-1e9483bd9d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:614d191840fea0ad8ed2b1a1f830f897b117eef867c26380c7c840288e03f3df +size 336060 diff --git a/.yarn/cache/sharp-npm-0.32.6-6b3822c437-f0e4a86881.zip b/.yarn/cache/sharp-npm-0.32.6-6b3822c437-f0e4a86881.zip new file mode 100644 index 0000000000..7707653730 --- /dev/null +++ b/.yarn/cache/sharp-npm-0.32.6-6b3822c437-f0e4a86881.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c39f7651702fadb84365e71401a3e520694bbadb791e83b64bd7b4339471b3c +size 145447 diff --git a/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4d211042cc.zip b/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4d211042cc.zip new file mode 100644 index 0000000000..7b1082ec7f --- /dev/null +++ b/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4d211042cc.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38ce8993546816d3d51045c79ab9e5c2721122ca02bcff89f68a166731d3bf9a +size 3416 diff --git a/.yarn/cache/simple-get-npm-4.0.1-fa2a97645d-93f1b32319.zip b/.yarn/cache/simple-get-npm-4.0.1-fa2a97645d-93f1b32319.zip new file mode 100644 index 0000000000..d12e4bf822 --- /dev/null +++ b/.yarn/cache/simple-get-npm-4.0.1-fa2a97645d-93f1b32319.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:206aaadbb95acb5a9956026c79afc7fe76a5998e3a0cee9148ed2f136495d282 +size 7148 diff --git a/.yarn/cache/simple-plist-npm-1.4.0-e7f7c6ecb2-e03f161937.zip b/.yarn/cache/simple-plist-npm-1.4.0-e7f7c6ecb2-e03f161937.zip new file mode 100644 index 0000000000..870e07969f --- /dev/null +++ b/.yarn/cache/simple-plist-npm-1.4.0-e7f7c6ecb2-e03f161937.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad2c04c7c325f48d03c6468a68717b3c67cfdc4dabe244f5f4a686f89767a6db +size 11332 diff --git a/.yarn/cache/source-list-map-npm-2.0.1-625c551052-3918ffba5f.zip b/.yarn/cache/source-list-map-npm-2.0.1-625c551052-3918ffba5f.zip deleted file mode 100644 index 98cd7fdedb..0000000000 --- a/.yarn/cache/source-list-map-npm-2.0.1-625c551052-3918ffba5f.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ef2847784e224169c228d592038be99ac22c537a90d466046934732651fd97f -size 11670 diff --git a/.yarn/cache/sourcemap-codec-npm-1.4.8-3a1a9e60b1-6fc57a151e.zip b/.yarn/cache/sourcemap-codec-npm-1.4.8-3a1a9e60b1-6fc57a151e.zip deleted file mode 100644 index 9b77e4e6c7..0000000000 --- a/.yarn/cache/sourcemap-codec-npm-1.4.8-3a1a9e60b1-6fc57a151e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:980d2701ae20c6c56e2b9c216eef1cc040362bad0cd6d30ed252b8536060d6cb -size 12659 diff --git a/.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-cc2e4dbef8.zip b/.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-cc2e4dbef8.zip new file mode 100644 index 0000000000..7867be8339 --- /dev/null +++ b/.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-cc2e4dbef8.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b23c0b30de67fa73bcbe888ca89652fe18e358dfaea476e885d618d320b4c62 +size 8403 diff --git a/.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip b/.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip new file mode 100644 index 0000000000..59bdac6507 --- /dev/null +++ b/.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dd613fd2b5fc930dbc9e3722b78d9b1edcc184898965574d11502fd271e2e4e +size 2426 diff --git a/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip b/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip new file mode 100644 index 0000000000..1c73a83a0f --- /dev/null +++ b/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01bfcf1418fd96ba413be88f524f866778ade81d2883ba2467a1e6362f418442 +size 6111 diff --git a/.yarn/cache/spdx-license-ids-npm-3.0.23-a4a0589d76-fead6be444.zip b/.yarn/cache/spdx-license-ids-npm-3.0.23-a4a0589d76-fead6be444.zip new file mode 100644 index 0000000000..896dbf2356 --- /dev/null +++ b/.yarn/cache/spdx-license-ids-npm-3.0.23-a4a0589d76-fead6be444.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9df10be12baf86c51c4e858cedfb7b488711b1b470d85c18c9aa8d169f011e2c +size 5798 diff --git a/.yarn/cache/split-npm-1.0.1-88871d88a2-12f4554a57.zip b/.yarn/cache/split-npm-1.0.1-88871d88a2-12f4554a57.zip new file mode 100644 index 0000000000..1a5015c232 --- /dev/null +++ b/.yarn/cache/split-npm-1.0.1-88871d88a2-12f4554a57.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ff8ae6f73c98525b9f50b3585a24b5520051057629663ccf5da94086f7f131d +size 6938 diff --git a/.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-a426e1e671.zip b/.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-a426e1e671.zip new file mode 100644 index 0000000000..8234bba305 --- /dev/null +++ b/.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-a426e1e671.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3edb07dbad1b44859356e0d06579c6e81b1e4dc4b6d18f8808b765663f7d48d +size 6781 diff --git a/.yarn/cache/split2-npm-4.2.0-16aa3883ba-09bbefc11b.zip b/.yarn/cache/split2-npm-4.2.0-16aa3883ba-09bbefc11b.zip new file mode 100644 index 0000000000..5c6dc4a9cb --- /dev/null +++ b/.yarn/cache/split2-npm-4.2.0-16aa3883ba-09bbefc11b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20e73c82ee163655845851d3becf00e0ec06da601d12295c09679cf0937876f4 +size 6787 diff --git a/.yarn/cache/stream-buffers-npm-2.2.0-4d954acabc-79f897cead.zip b/.yarn/cache/stream-buffers-npm-2.2.0-4d954acabc-79f897cead.zip new file mode 100644 index 0000000000..e35d900128 --- /dev/null +++ b/.yarn/cache/stream-buffers-npm-2.2.0-4d954acabc-79f897cead.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f59dc7de5ea9060d5c7ff42ba8adb88b74007cbe75dc5f84df2c7857a95971f +size 33947 diff --git a/.yarn/cache/stringify-object-npm-3.3.0-3e6784f7df-973782f09a.zip b/.yarn/cache/stringify-object-npm-3.3.0-3e6784f7df-973782f09a.zip deleted file mode 100644 index f92855f361..0000000000 --- a/.yarn/cache/stringify-object-npm-3.3.0-3e6784f7df-973782f09a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:937f7ba90bd8dd0ff1266a505c0bcd64a94e9ae0e9c94766130a1f33b6af69ff -size 4222 diff --git a/.yarn/cache/strip-comments-npm-2.0.1-7f4e6e5047-43ea36189e.zip b/.yarn/cache/strip-comments-npm-2.0.1-7f4e6e5047-43ea36189e.zip deleted file mode 100644 index 7cec2c4ccc..0000000000 --- a/.yarn/cache/strip-comments-npm-2.0.1-7f4e6e5047-43ea36189e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37975ccaad75a1e706f5b1895755c00e2527ba1fefa07a2026d3ad5f2045b778 -size 10501 diff --git a/.yarn/cache/strip-json-comments-npm-2.0.1-e7883b2d04-1074ccb632.zip b/.yarn/cache/strip-json-comments-npm-2.0.1-e7883b2d04-1074ccb632.zip new file mode 100644 index 0000000000..cddf70db31 --- /dev/null +++ b/.yarn/cache/strip-json-comments-npm-2.0.1-e7883b2d04-1074ccb632.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb9c3bf9e769a889ff51690780c480416341c9b14b1c6b0cb4e65ec42e757105 +size 3072 diff --git a/.yarn/cache/tagged-tag-npm-1.0.0-80e0c0061d-e37653df3e.zip b/.yarn/cache/tagged-tag-npm-1.0.0-80e0c0061d-e37653df3e.zip new file mode 100644 index 0000000000..4852384f78 --- /dev/null +++ b/.yarn/cache/tagged-tag-npm-1.0.0-80e0c0061d-e37653df3e.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:399211e7988a970ecad196b6a1059b1ff72ebdaccd24aecc4b8724877a8c9c6e +size 2176 diff --git a/.yarn/cache/tar-fs-npm-2.1.4-90a454735f-bdf7e3cb03.zip b/.yarn/cache/tar-fs-npm-2.1.4-90a454735f-bdf7e3cb03.zip new file mode 100644 index 0000000000..f66140f437 --- /dev/null +++ b/.yarn/cache/tar-fs-npm-2.1.4-90a454735f-bdf7e3cb03.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffca6b9e0556ca78b68724575fe5e5102ede1c8b60226c1a6fec20ff91d4665f +size 11784 diff --git a/.yarn/cache/tar-fs-npm-3.1.2-daad193a55-b358fb7061.zip b/.yarn/cache/tar-fs-npm-3.1.2-daad193a55-b358fb7061.zip new file mode 100644 index 0000000000..7981db0676 --- /dev/null +++ b/.yarn/cache/tar-fs-npm-3.1.2-daad193a55-b358fb7061.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba7facd6b4aab5a38fcab76aa07a76f5111b8c830f9b9d5ec0b2628c871e3ad1 +size 6502 diff --git a/.yarn/cache/tar-npm-7.5.16-628307afc6-fafa22efce.zip b/.yarn/cache/tar-npm-7.5.16-628307afc6-fafa22efce.zip new file mode 100644 index 0000000000..665b4a47bf --- /dev/null +++ b/.yarn/cache/tar-npm-7.5.16-628307afc6-fafa22efce.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b1368fed6ae6653f15e134d1066c3cf0b3f8969260c03db662e3ce9ca5dce55 +size 623287 diff --git a/.yarn/cache/tar-stream-npm-2.2.0-884c79b510-1a52a51d24.zip b/.yarn/cache/tar-stream-npm-2.2.0-884c79b510-1a52a51d24.zip new file mode 100644 index 0000000000..b69a81ed4c --- /dev/null +++ b/.yarn/cache/tar-stream-npm-2.2.0-884c79b510-1a52a51d24.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7570f6840da0f3f467b59da9a517f5674ac9decc55b2b36b393ee48654597ed +size 10655 diff --git a/.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip b/.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip deleted file mode 100644 index f5b751466a..0000000000 --- a/.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68ca1bf93acfe0982444cc957734882a421ce2cb8aac7f3c584a6052786edeaf -size 2788 diff --git a/.yarn/cache/temp-dir-npm-3.0.0-70414c7a63-577211e995.zip b/.yarn/cache/temp-dir-npm-3.0.0-70414c7a63-577211e995.zip new file mode 100644 index 0000000000..37ba082ba6 --- /dev/null +++ b/.yarn/cache/temp-dir-npm-3.0.0-70414c7a63-577211e995.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15d4f4766a618f5ccaa45306e5c295c8573ceab432fd7d0b6a1bb2d555b20619 +size 2686 diff --git a/.yarn/cache/tempy-npm-0.6.0-e704ff522c-64f110666b.zip b/.yarn/cache/tempy-npm-0.6.0-e704ff522c-64f110666b.zip deleted file mode 100644 index 5fff1e1f4c..0000000000 --- a/.yarn/cache/tempy-npm-0.6.0-e704ff522c-64f110666b.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:40da406d5bd5f9d4523ede7184bef67ad8fe7fcf15a69bc8f86c326d71705c6a -size 4501 diff --git a/.yarn/cache/tempy-npm-3.2.0-66e91d5f33-02ed53acb7.zip b/.yarn/cache/tempy-npm-3.2.0-66e91d5f33-02ed53acb7.zip new file mode 100644 index 0000000000..2553aab314 --- /dev/null +++ b/.yarn/cache/tempy-npm-3.2.0-66e91d5f33-02ed53acb7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edce718cfcf54bcceef151abcc1e7fb7a6f04541a55f93385a4495967e9a2e35 +size 6116 diff --git a/.yarn/cache/terser-npm-5.14.2-b0f8815852-0646b5db1d.zip b/.yarn/cache/terser-npm-5.14.2-b0f8815852-0646b5db1d.zip deleted file mode 100644 index 3490e9dd9f..0000000000 --- a/.yarn/cache/terser-npm-5.14.2-b0f8815852-0646b5db1d.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aaeb3ac8d03d3542e543e8bdf0b6e53e554c33067746c9afbb525ed4bcba818a -size 428464 diff --git a/.yarn/cache/terser-webpack-plugin-npm-5.3.5-ec2e136bef-bf6706ca82.zip b/.yarn/cache/terser-webpack-plugin-npm-5.3.5-ec2e136bef-bf6706ca82.zip deleted file mode 100644 index f1fa31a03e..0000000000 --- a/.yarn/cache/terser-webpack-plugin-npm-5.3.5-ec2e136bef-bf6706ca82.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:11e457afff79b3f83e8adbd3955d127a18194c90d53396215a2636ac592eadb0 -size 23296 diff --git a/.yarn/cache/text-extensions-npm-1.9.0-87655d768f-56a9962c1b.zip b/.yarn/cache/text-extensions-npm-1.9.0-87655d768f-56a9962c1b.zip new file mode 100644 index 0000000000..1c0fab1e5e --- /dev/null +++ b/.yarn/cache/text-extensions-npm-1.9.0-87655d768f-56a9962c1b.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e975f34ccabeb96fa8f04473c41ef510ace97d3b4c5405acb2e424a96e994a27 +size 2662 diff --git a/.yarn/cache/through2-npm-4.0.2-da7b2da443-72c246233d.zip b/.yarn/cache/through2-npm-4.0.2-da7b2da443-72c246233d.zip new file mode 100644 index 0000000000..046651cefe --- /dev/null +++ b/.yarn/cache/through2-npm-4.0.2-da7b2da443-72c246233d.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de2c4fe9bac3ffa60e4e48c9c6e33ae291e167978d0add0f5a2597911576f52d +size 4878 diff --git a/.yarn/cache/tmp-npm-0.2.7-a6fd3441a0-0a3bc90beb.zip b/.yarn/cache/tmp-npm-0.2.7-a6fd3441a0-0a3bc90beb.zip new file mode 100644 index 0000000000..2c45245087 --- /dev/null +++ b/.yarn/cache/tmp-npm-0.2.7-a6fd3441a0-0a3bc90beb.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93818ecfc8205dfafb4a25b42bc595b58db93d027b481c606e95848d3ed32199 +size 12603 diff --git a/.yarn/cache/trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip b/.yarn/cache/trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip new file mode 100644 index 0000000000..b5c2fd40a2 --- /dev/null +++ b/.yarn/cache/trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1345d9266011b0064ce52df0c765c24e0666cbe3750e6e8f18864db80b2b1cab +size 2787 diff --git a/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-a91a15b3c9.zip b/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-a91a15b3c9.zip new file mode 100644 index 0000000000..dfa7790c69 --- /dev/null +++ b/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-a91a15b3c9.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e86a153e104e0c560cd5019906ad70f4bbec2df2223873d1b6e51b828582a591 +size 238737 diff --git a/.yarn/cache/tslib-npm-2.8.1-66590b21b8-3e2e043d5c.zip b/.yarn/cache/tslib-npm-2.8.1-66590b21b8-3e2e043d5c.zip new file mode 100644 index 0000000000..cad5ee33bc --- /dev/null +++ b/.yarn/cache/tslib-npm-2.8.1-66590b21b8-3e2e043d5c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d15be7c6cabe82595f82f21f647dc2c33085b7163a4045d2e56e7479e16a0c4a +size 28416 diff --git a/.yarn/cache/tunnel-agent-npm-0.6.0-64345ab7eb-7f0d9ed5c2.zip b/.yarn/cache/tunnel-agent-npm-0.6.0-64345ab7eb-7f0d9ed5c2.zip new file mode 100644 index 0000000000..c75d20a8e0 --- /dev/null +++ b/.yarn/cache/tunnel-agent-npm-0.6.0-64345ab7eb-7f0d9ed5c2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43c480855bf00df0196fc68a6ea4b47fd6096f0e2e7cf25c20ad30c7d5b46dee +size 6616 diff --git a/.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-fd8c47ccb9.zip b/.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-fd8c47ccb9.zip deleted file mode 100644 index db60d7d231..0000000000 --- a/.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-fd8c47ccb9.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b881c4acfe11a5f32ac68087d41db4f381f796d3d81c8590a2b6c8066737b0ac -size 41653 diff --git a/.yarn/cache/type-fest-npm-0.18.1-47b079775d-0884437705.zip b/.yarn/cache/type-fest-npm-0.18.1-47b079775d-0884437705.zip new file mode 100644 index 0000000000..39287daec0 --- /dev/null +++ b/.yarn/cache/type-fest-npm-0.18.1-47b079775d-0884437705.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9f02f2febefc5f5ee21ab29d46ca7a181c3d836979bdaa53188bccdc2fe442b +size 46471 diff --git a/.yarn/cache/type-fest-npm-0.6.0-76b229965b-9ecbf4ba27.zip b/.yarn/cache/type-fest-npm-0.6.0-76b229965b-9ecbf4ba27.zip new file mode 100644 index 0000000000..9f7348f5b9 --- /dev/null +++ b/.yarn/cache/type-fest-npm-0.6.0-76b229965b-9ecbf4ba27.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36568546f580a426a1d60aef05ac8538a2f2ae66baaeed1631e091e398ed36b0 +size 14244 diff --git a/.yarn/cache/type-fest-npm-0.8.1-351ad028fe-fd4a91bfb7.zip b/.yarn/cache/type-fest-npm-0.8.1-351ad028fe-fd4a91bfb7.zip new file mode 100644 index 0000000000..c59b3c3257 --- /dev/null +++ b/.yarn/cache/type-fest-npm-0.8.1-351ad028fe-fd4a91bfb7.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d0c5445d061ef6b695459d9e397738cd5daa17689d2b4aace42235fa88b7816 +size 28493 diff --git a/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-89875c2475.zip b/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-89875c2475.zip new file mode 100644 index 0000000000..ce82dba07f --- /dev/null +++ b/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-89875c2475.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddb7ead191dc31eab63d94402e0911100b04db29e4b8214b041a6bc3781af8d5 +size 67641 diff --git a/.yarn/cache/type-fest-npm-5.6.0-daf055db8b-2cc7a510f4.zip b/.yarn/cache/type-fest-npm-5.6.0-daf055db8b-2cc7a510f4.zip new file mode 100644 index 0000000000..4ddfacc4d9 --- /dev/null +++ b/.yarn/cache/type-fest-npm-5.6.0-daf055db8b-2cc7a510f4.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4fe2dd1a4152e1a618e8f0c54eb320a66681ef82e182c0eb585733002472127 +size 231301 diff --git a/.yarn/cache/uglify-js-npm-3.19.3-d73835bac2-6b9639c198.zip b/.yarn/cache/uglify-js-npm-3.19.3-d73835bac2-6b9639c198.zip new file mode 100644 index 0000000000..0a33c7d44d --- /dev/null +++ b/.yarn/cache/uglify-js-npm-3.19.3-d73835bac2-6b9639c198.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1b39e7df21bd94cec4f1ecd0735ac7df8f86ac026ecf80e68f39a08f8305a8e +size 247050 diff --git a/.yarn/cache/unicode-canonical-property-names-ecmascript-npm-2.0.0-d2d8554a14-39be078afd.zip b/.yarn/cache/unicode-canonical-property-names-ecmascript-npm-2.0.0-d2d8554a14-39be078afd.zip deleted file mode 100644 index 88219e82c1..0000000000 --- a/.yarn/cache/unicode-canonical-property-names-ecmascript-npm-2.0.0-d2d8554a14-39be078afd.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8764d622da1f927a1c5df1049ca87c07c8a0bae4695cbdb55db95cc0733fc5e -size 3457 diff --git a/.yarn/cache/unicode-match-property-ecmascript-npm-2.0.0-97a00fd52c-1f34a7434a.zip b/.yarn/cache/unicode-match-property-ecmascript-npm-2.0.0-97a00fd52c-1f34a7434a.zip deleted file mode 100644 index f8d28b601f..0000000000 --- a/.yarn/cache/unicode-match-property-ecmascript-npm-2.0.0-97a00fd52c-1f34a7434a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e20ab55996f10980abbaafb942ff900846b0235cf247700ba35d5ebeca72c63 -size 3365 diff --git a/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.0.0-b52f4f7ca4-a99f100f41.zip b/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.0.0-b52f4f7ca4-a99f100f41.zip deleted file mode 100644 index cd149fdf86..0000000000 --- a/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.0.0-b52f4f7ca4-a99f100f41.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:841802bfdb943a9c20dbf309b555ab39dc52d6f8a60b5212bbe8ed5bccedafce -size 6903 diff --git a/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.0.0-1636cb7768-dda4d39128.zip b/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.0.0-1636cb7768-dda4d39128.zip deleted file mode 100644 index ecdce3a981..0000000000 --- a/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.0.0-1636cb7768-dda4d39128.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7dad9e91f8934ccd4089f161d5f3e385af064bf4bd1b73548fe411ffab573245 -size 3812 diff --git a/.yarn/cache/unique-string-npm-3.0.0-1a556e406a-1a1e2e7d02.zip b/.yarn/cache/unique-string-npm-3.0.0-1a556e406a-1a1e2e7d02.zip new file mode 100644 index 0000000000..70feb77b8b --- /dev/null +++ b/.yarn/cache/unique-string-npm-3.0.0-1a556e406a-1a1e2e7d02.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9c5737722e4794d47602d97b03482ba37021c46d732fb37db1363702fecc81e +size 2643 diff --git a/.yarn/cache/untildify-npm-4.0.0-4a8b569825-39ced9c418.zip b/.yarn/cache/untildify-npm-4.0.0-4a8b569825-39ced9c418.zip new file mode 100644 index 0000000000..dc1e9d0427 --- /dev/null +++ b/.yarn/cache/untildify-npm-4.0.0-4a8b569825-39ced9c418.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d1b4224e40de6f8de971c2e846da0c84ca2eee1f0cb178db06f591137147c92 +size 2660 diff --git a/.yarn/cache/upath-npm-1.2.0-ca00ec3398-ac07351d9e.zip b/.yarn/cache/upath-npm-1.2.0-ca00ec3398-ac07351d9e.zip deleted file mode 100644 index 81ee4d1936..0000000000 --- a/.yarn/cache/upath-npm-1.2.0-ca00ec3398-ac07351d9e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:08baf91c12db293b986023f75e475cb07b2324081184679a7aa5257198b3606a -size 10304 diff --git a/.yarn/cache/update-browserslist-db-npm-1.2.3-de1d320326-059f774300.zip b/.yarn/cache/update-browserslist-db-npm-1.2.3-de1d320326-059f774300.zip new file mode 100644 index 0000000000..e5dac8274a --- /dev/null +++ b/.yarn/cache/update-browserslist-db-npm-1.2.3-de1d320326-059f774300.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90564067b2ea43f82589898d3904d62bfac337a4396ef3a30a9f12727a8f00c8 +size 7100 diff --git a/.yarn/cache/uuid-npm-7.0.3-2b088bd924-b2a4d30ecd.zip b/.yarn/cache/uuid-npm-7.0.3-2b088bd924-b2a4d30ecd.zip new file mode 100644 index 0000000000..0895e96620 --- /dev/null +++ b/.yarn/cache/uuid-npm-7.0.3-2b088bd924-b2a4d30ecd.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96655d1ba659598733dc27c4d783e48b20aff24182ee5ca08208484b1841767c +size 46227 diff --git a/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-88d3423a52.zip b/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-88d3423a52.zip new file mode 100644 index 0000000000..aab3f19a5c --- /dev/null +++ b/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-88d3423a52.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8fb5e363affecf9497d64ba2ae9bd8548bbc718b4f3ebc21762b65e818011f4 +size 7859 diff --git a/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-86242519b2.zip b/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-86242519b2.zip new file mode 100644 index 0000000000..dc2f5c6790 --- /dev/null +++ b/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-86242519b2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3939ad9e0c1f148ea7a726171b37bad70d53462ed753706afdf7f5abafb74ed4 +size 6778 diff --git a/.yarn/cache/webpack-sources-npm-1.4.3-2b3a9b1de0-6237c5d1ba.zip b/.yarn/cache/webpack-sources-npm-1.4.3-2b3a9b1de0-6237c5d1ba.zip deleted file mode 100644 index 01446d9624..0000000000 --- a/.yarn/cache/webpack-sources-npm-1.4.3-2b3a9b1de0-6237c5d1ba.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5707ebbf8afc6eea63b638e0d399d7f76f0a6bfa6a6e0e64613ec718a64f77d4 -size 15371 diff --git a/.yarn/cache/wordwrap-npm-1.0.0-ae57a645e8-497d40beb2.zip b/.yarn/cache/wordwrap-npm-1.0.0-ae57a645e8-497d40beb2.zip new file mode 100644 index 0000000000..1c9582e20a --- /dev/null +++ b/.yarn/cache/wordwrap-npm-1.0.0-ae57a645e8-497d40beb2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61274545f56606562f2a7fbf1bc26fa1c67baefd0fd6ba73e71b4ec23f39ac0f +size 16430 diff --git a/.yarn/cache/workbox-background-sync-npm-6.5.4-13a7f8219a-05f6752b68.zip b/.yarn/cache/workbox-background-sync-npm-6.5.4-13a7f8219a-05f6752b68.zip deleted file mode 100644 index f01303c0c2..0000000000 --- a/.yarn/cache/workbox-background-sync-npm-6.5.4-13a7f8219a-05f6752b68.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e33a3bf9aaa0d42f675e1eb7f58119c23be7ddc7c482d8c2e16d30ed837a4cd -size 90209 diff --git a/.yarn/cache/workbox-broadcast-update-npm-6.5.4-37b0700ca4-9e277a2cad.zip b/.yarn/cache/workbox-broadcast-update-npm-6.5.4-37b0700ca4-9e277a2cad.zip deleted file mode 100644 index 88b273e47b..0000000000 --- a/.yarn/cache/workbox-broadcast-update-npm-6.5.4-37b0700ca4-9e277a2cad.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6fa00f74aa9c82dc4339f3796369808f9ba9052ff394e4e1d555cc365d3264cb -size 44162 diff --git a/.yarn/cache/workbox-build-npm-6.5.4-71d02fae43-147373efa3.zip b/.yarn/cache/workbox-build-npm-6.5.4-71d02fae43-147373efa3.zip deleted file mode 100644 index ca2198a4d4..0000000000 --- a/.yarn/cache/workbox-build-npm-6.5.4-71d02fae43-147373efa3.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:703b5f304c3a2bddf462f7eeb663e94a73d98f772339bb938ddc0fa08cb31ce2 -size 180961 diff --git a/.yarn/cache/workbox-cacheable-response-npm-6.5.4-5661dd1793-ea31b456e0.zip b/.yarn/cache/workbox-cacheable-response-npm-6.5.4-5661dd1793-ea31b456e0.zip deleted file mode 100644 index e8386ade6b..0000000000 --- a/.yarn/cache/workbox-cacheable-response-npm-6.5.4-5661dd1793-ea31b456e0.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:450b17bdbcf88ae1717e6409eb88b8c0db034217152219c1b8f5aa8979493f4f -size 28954 diff --git a/.yarn/cache/workbox-core-npm-6.5.4-a956387c31-d0c215bc7e.zip b/.yarn/cache/workbox-core-npm-6.5.4-a956387c31-d0c215bc7e.zip deleted file mode 100644 index 0bb06fe5cb..0000000000 --- a/.yarn/cache/workbox-core-npm-6.5.4-a956387c31-d0c215bc7e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d851bbdeec96d02eae60e582dd44ba99962f329a8ee8e55514d29e0c31f195bb -size 116518 diff --git a/.yarn/cache/workbox-expiration-npm-6.5.4-081a8d4613-9bf3d97258.zip b/.yarn/cache/workbox-expiration-npm-6.5.4-081a8d4613-9bf3d97258.zip deleted file mode 100644 index 7893e269f7..0000000000 --- a/.yarn/cache/workbox-expiration-npm-6.5.4-081a8d4613-9bf3d97258.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c11ea5f71f519a2f9f87ed6347c4dede14b3e9621fef78c3e7b8c2ee378cc471 -size 75061 diff --git a/.yarn/cache/workbox-google-analytics-npm-6.5.4-bf443f64b1-7c3a063002.zip b/.yarn/cache/workbox-google-analytics-npm-6.5.4-bf443f64b1-7c3a063002.zip deleted file mode 100644 index d5fbe6d703..0000000000 --- a/.yarn/cache/workbox-google-analytics-npm-6.5.4-bf443f64b1-7c3a063002.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3b8e9a34d9c5ecd78542042c14367866805dd5a50fe8b1764c54d17c6c043775 -size 34479 diff --git a/.yarn/cache/workbox-navigation-preload-npm-6.5.4-f9b6686723-77ed748595.zip b/.yarn/cache/workbox-navigation-preload-npm-6.5.4-f9b6686723-77ed748595.zip deleted file mode 100644 index 0a90885739..0000000000 --- a/.yarn/cache/workbox-navigation-preload-npm-6.5.4-f9b6686723-77ed748595.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8da05d6cdb7ac4f85496a58b9299d15378b96df665c864f865446007c1fe975f -size 23913 diff --git a/.yarn/cache/workbox-precaching-npm-6.5.4-69d8a56e94-754d86d32c.zip b/.yarn/cache/workbox-precaching-npm-6.5.4-69d8a56e94-754d86d32c.zip deleted file mode 100644 index 472cc2bbbf..0000000000 --- a/.yarn/cache/workbox-precaching-npm-6.5.4-69d8a56e94-754d86d32c.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:45694b11126b06cedd5a1acd5d4b5402fb7b98a4376914894113a2614e44046a -size 130344 diff --git a/.yarn/cache/workbox-range-requests-npm-6.5.4-81869b9d72-d977e9effc.zip b/.yarn/cache/workbox-range-requests-npm-6.5.4-81869b9d72-d977e9effc.zip deleted file mode 100644 index 70de794c78..0000000000 --- a/.yarn/cache/workbox-range-requests-npm-6.5.4-81869b9d72-d977e9effc.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1e3069638f513a08c1ae799ae544dbf2982004118b1105b702cf144aa793a1d8 -size 38217 diff --git a/.yarn/cache/workbox-recipes-npm-6.5.4-03aa78ea0b-a90a20db7e.zip b/.yarn/cache/workbox-recipes-npm-6.5.4-03aa78ea0b-a90a20db7e.zip deleted file mode 100644 index 78718ad326..0000000000 --- a/.yarn/cache/workbox-recipes-npm-6.5.4-03aa78ea0b-a90a20db7e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb4b2812dfc9a38a35d5f1649b53be16a4866544c0efc84633be2b4205a0b081 -size 41801 diff --git a/.yarn/cache/workbox-routing-npm-6.5.4-7e767a784d-c8e109444e.zip b/.yarn/cache/workbox-routing-npm-6.5.4-7e767a784d-c8e109444e.zip deleted file mode 100644 index b484b62aa1..0000000000 --- a/.yarn/cache/workbox-routing-npm-6.5.4-7e767a784d-c8e109444e.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3315a9045adb734a218c520e0a8f5b47d7c914a67b76e68fd98474842dc28acc -size 87253 diff --git a/.yarn/cache/workbox-strategies-npm-6.5.4-8bc6258bfc-af9a3838cc.zip b/.yarn/cache/workbox-strategies-npm-6.5.4-8bc6258bfc-af9a3838cc.zip deleted file mode 100644 index 59101e905b..0000000000 --- a/.yarn/cache/workbox-strategies-npm-6.5.4-8bc6258bfc-af9a3838cc.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:27d39a0ef7e59037056a93f00a71190e49164965f96a7bb4b3b8925c634baf3e -size 108722 diff --git a/.yarn/cache/workbox-streams-npm-6.5.4-17a6050105-eefb25356a.zip b/.yarn/cache/workbox-streams-npm-6.5.4-17a6050105-eefb25356a.zip deleted file mode 100644 index 3f09d048c0..0000000000 --- a/.yarn/cache/workbox-streams-npm-6.5.4-17a6050105-eefb25356a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:645af4dacdc3de0379128a875d539ee1b4ea5b31aa30b434c619ced22151afdd -size 43067 diff --git a/.yarn/cache/workbox-sw-npm-6.5.4-307d7c4499-26eb62885a.zip b/.yarn/cache/workbox-sw-npm-6.5.4-307d7c4499-26eb62885a.zip deleted file mode 100644 index 13c1612a3b..0000000000 --- a/.yarn/cache/workbox-sw-npm-6.5.4-307d7c4499-26eb62885a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8833ac2eb6d71a6a6e2d42b6ac8abc39284e824022fb837b49f362880240beec -size 9352 diff --git a/.yarn/cache/workbox-webpack-plugin-npm-6.5.4-3842d0960f-12e2990df0.zip b/.yarn/cache/workbox-webpack-plugin-npm-6.5.4-3842d0960f-12e2990df0.zip deleted file mode 100644 index 53b7161aac..0000000000 --- a/.yarn/cache/workbox-webpack-plugin-npm-6.5.4-3842d0960f-12e2990df0.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a037dad03300463e80afd277ac2b7ce9393f407026668fdbec3b4df3807e20f7 -size 50190 diff --git a/.yarn/cache/workbox-window-npm-6.5.4-20240f4b44-9bdad6730a.zip b/.yarn/cache/workbox-window-npm-6.5.4-20240f4b44-9bdad6730a.zip deleted file mode 100644 index 02dbfcc3ab..0000000000 --- a/.yarn/cache/workbox-window-npm-6.5.4-20240f4b44-9bdad6730a.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0eea69d899689d2aa050145ea8feb2d7c5df05201abba4574f8926accea31f92 -size 151622 diff --git a/.yarn/cache/xcode-npm-3.0.1-97989f05ef-539d7b808c.zip b/.yarn/cache/xcode-npm-3.0.1-97989f05ef-539d7b808c.zip new file mode 100644 index 0000000000..7f03f9d804 --- /dev/null +++ b/.yarn/cache/xcode-npm-3.0.1-97989f05ef-539d7b808c.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:151243fdcac9f34458a89605b64e7881b2ac23bb84962c729655de29ed29fda0 +size 36233 diff --git a/.yarn/cache/xml-js-npm-1.6.11-56742b7fb0-55ce342a47.zip b/.yarn/cache/xml-js-npm-1.6.11-56742b7fb0-55ce342a47.zip new file mode 100644 index 0000000000..48fe617be3 --- /dev/null +++ b/.yarn/cache/xml-js-npm-1.6.11-56742b7fb0-55ce342a47.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f613c92eeddd4247b3bf9661dfa4036180870e270efeca81612759bb3b40eb4 +size 112213 diff --git a/.yarn/cache/xml2js-npm-0.5.0-06e57a2771-27c4d75921.zip b/.yarn/cache/xml2js-npm-0.5.0-06e57a2771-27c4d75921.zip new file mode 100644 index 0000000000..aea4057b4b --- /dev/null +++ b/.yarn/cache/xml2js-npm-0.5.0-06e57a2771-27c4d75921.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acb329fecc5e5b31da97ebaa36ea5a835bcc241c91fd4b13fa47a03fd9f8e024 +size 15676 diff --git a/.yarn/cache/xml2js-npm-0.6.2-64cd781d74-df29de8eee.zip b/.yarn/cache/xml2js-npm-0.6.2-64cd781d74-df29de8eee.zip new file mode 100644 index 0000000000..62d17b34a0 --- /dev/null +++ b/.yarn/cache/xml2js-npm-0.6.2-64cd781d74-df29de8eee.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:260f0a2e59482042b32fdcf006fe85ee31b8dbc61ae9e5f68a2f660e6f08a4db +size 862748 diff --git a/.yarn/cache/xmlbuilder-npm-11.0.1-b8b04dc929-c8c3d20878.zip b/.yarn/cache/xmlbuilder-npm-11.0.1-b8b04dc929-c8c3d20878.zip new file mode 100644 index 0000000000..984bc6c2fd --- /dev/null +++ b/.yarn/cache/xmlbuilder-npm-11.0.1-b8b04dc929-c8c3d20878.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a78bbd0e23956bd920db6a36930a401be0c892bbd5b3ecee1b59d0af6d05bc2 +size 47797 diff --git a/.yarn/cache/xmlbuilder-npm-15.1.1-becc60bf4e-e6f4bab250.zip b/.yarn/cache/xmlbuilder-npm-15.1.1-becc60bf4e-e6f4bab250.zip new file mode 100644 index 0000000000..2e817c8f62 --- /dev/null +++ b/.yarn/cache/xmlbuilder-npm-15.1.1-becc60bf4e-e6f4bab250.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89bd0f6fae43ba30a3addbf856da06dd6464079a55440c8571c0def027d8b56a +size 84836 diff --git a/.yarn/cache/xpath-npm-0.0.32-d8462585d9-9d8be7adde.zip b/.yarn/cache/xpath-npm-0.0.32-d8462585d9-9d8be7adde.zip new file mode 100644 index 0000000000..0385acb869 --- /dev/null +++ b/.yarn/cache/xpath-npm-0.0.32-d8462585d9-9d8be7adde.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7b70c1c1cf060af6776c6ac16ce36f6bdd96eed4c205f088a48ad12dd774960 +size 43195 diff --git a/.yarn/cache/yargs-npm-16.2.0-547873d425-807fa21211.zip b/.yarn/cache/yargs-npm-16.2.0-547873d425-807fa21211.zip new file mode 100644 index 0000000000..533d2fe3fb --- /dev/null +++ b/.yarn/cache/yargs-npm-16.2.0-547873d425-807fa21211.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3cd2550615982c1ac64281dc23c1085739a33b0769243f0f0edfb5b0f57ca5c +size 82744 diff --git a/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-0188f430a0.zip b/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-0188f430a0.zip new file mode 100644 index 0000000000..babf6c4400 --- /dev/null +++ b/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-0188f430a0.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aa757e1c55ca2126ef04fca01a7dceb7033332dd438f380b303938e4bed8311 +size 31436 diff --git a/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip b/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip new file mode 100644 index 0000000000..23b55b1c72 --- /dev/null +++ b/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c50f9782427ab8e0e6e9e149601701d97f336e3143766793d9192df92c063c4b +size 3947 diff --git a/.yarn/cache/zod-npm-4.4.1-b3a6a71235-e9c62dc846.zip b/.yarn/cache/zod-npm-4.4.1-b3a6a71235-e9c62dc846.zip new file mode 100644 index 0000000000..8fd5466e94 --- /dev/null +++ b/.yarn/cache/zod-npm-4.4.1-b3a6a71235-e9c62dc846.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1c39408c272cee326eb2ba2c25f5499a570e7ab0a1525b56d0de7500af20a05 +size 1092582 diff --git a/.yarnrc.yml b/.yarnrc.yml index 7c67417799..6f6971d427 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -20,3 +20,5 @@ supportedArchitectures: - win32 yarnPath: .yarn/releases/yarn-4.14.1.cjs + +nodeLinker: node-modules diff --git a/__tests__/util/capacitorMocks.test.ts b/__tests__/util/capacitorMocks.test.ts new file mode 100644 index 0000000000..29e95b2c49 --- /dev/null +++ b/__tests__/util/capacitorMocks.test.ts @@ -0,0 +1,163 @@ +import { + emitPushNotificationActionPerformed, + emitRegistration, + emitRegistrationError, + mockCapacitorCore, + mockPushNotifications, + setNativePlatform, +} from './capacitorMocks'; + +describe('capacitorMocks', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('setNativePlatform + mockCapacitorCore', () => { + it('defaults to web', () => { + expect(mockCapacitorCore.Capacitor.isNativePlatform()).toBe(false); + expect(mockCapacitorCore.Capacitor.getPlatform()).toBe('web'); + }); + + it.each([ + ['ios', true], + ['android', true], + ['web', false], + ] as const)( + 'drives getPlatform/isNativePlatform for %s', + (platform, native) => { + setNativePlatform(platform); + + expect(mockCapacitorCore.Capacitor.getPlatform()).toBe(platform); + expect(mockCapacitorCore.Capacitor.isNativePlatform()).toBe(native); + }, + ); + }); + + describe('emitRegistration', () => { + it('invokes registration listeners with the token like the OS would', async () => { + const handler = jest.fn(); + await mockPushNotifications.addListener('registration', handler); + + await emitRegistration('token-123'); + + expect(handler).toHaveBeenCalledWith({ value: 'token-123' }); + }); + + it('does not invoke listeners for other events', async () => { + const errorHandler = jest.fn(); + await mockPushNotifications.addListener( + 'registrationError', + errorHandler, + ); + + await emitRegistration('token-123'); + + expect(errorHandler).not.toHaveBeenCalled(); + }); + + it('is a no-op when no listener is attached', async () => { + await expect(emitRegistration('token-123')).resolves.toBeUndefined(); + }); + }); + + describe('emitRegistrationError', () => { + it('invokes registrationError listeners with the error', async () => { + const handler = jest.fn(); + await mockPushNotifications.addListener('registrationError', handler); + + await emitRegistrationError('boom'); + + expect(handler).toHaveBeenCalledWith({ error: 'boom' }); + }); + }); + + describe('listener removal semantics', () => { + it('stops emitting to a listener after handle.remove()', async () => { + const handler = jest.fn(); + const handle = await mockPushNotifications.addListener( + 'registration', + handler, + ); + + await handle.remove(); + await emitRegistration('token-123'); + + expect(handler).not.toHaveBeenCalled(); + }); + + it('keeps emitting to listeners whose handles were not removed', async () => { + const removed = jest.fn(); + const surviving = jest.fn(); + const handle = await mockPushNotifications.addListener( + 'registration', + removed, + ); + await mockPushNotifications.addListener('registration', surviving); + + await handle.remove(); + await emitRegistration('token-123'); + + expect(removed).not.toHaveBeenCalled(); + expect(surviving).toHaveBeenCalledWith({ value: 'token-123' }); + }); + + it('removeAllListeners() detaches every listener, regardless of owner', async () => { + const registration = jest.fn(); + const pushAction = jest.fn(); + await mockPushNotifications.addListener('registration', registration); + await mockPushNotifications.addListener( + 'pushNotificationActionPerformed', + pushAction, + ); + + await mockPushNotifications.removeAllListeners(); + await emitRegistration('token-123'); + await emitPushNotificationActionPerformed('tap', { deepLink: '/x' }); + + expect(registration).not.toHaveBeenCalled(); + expect(pushAction).not.toHaveBeenCalled(); + }); + }); + + describe('emitPushNotificationActionPerformed', () => { + it('invokes pushNotificationActionPerformed listeners like a tap would', async () => { + const handler = jest.fn(); + await mockPushNotifications.addListener( + 'pushNotificationActionPerformed', + handler, + ); + + await emitPushNotificationActionPerformed('tap', { deepLink: '/a' }); + + expect(handler).toHaveBeenCalledWith({ + actionId: 'tap', + notification: { data: { deepLink: '/a' } }, + }); + }); + }); + + describe('mockPushNotifications defaults', () => { + it('resolves permission checks and registration calls', async () => { + await expect(mockPushNotifications.checkPermissions()).resolves.toEqual({ + receive: 'prompt', + }); + await expect(mockPushNotifications.requestPermissions()).resolves.toEqual( + { receive: 'granted' }, + ); + await expect(mockPushNotifications.register()).resolves.toBeUndefined(); + await expect(mockPushNotifications.unregister()).resolves.toBeUndefined(); + await expect( + mockPushNotifications.removeAllListeners(), + ).resolves.toBeUndefined(); + }); + + it('returns a removable listener handle', async () => { + const handle = await mockPushNotifications.addListener( + 'registration', + jest.fn(), + ); + + await expect(handle.remove()).resolves.toBeUndefined(); + }); + }); +}); diff --git a/__tests__/util/capacitorMocks.ts b/__tests__/util/capacitorMocks.ts new file mode 100644 index 0000000000..af0e06af2a --- /dev/null +++ b/__tests__/util/capacitorMocks.ts @@ -0,0 +1,154 @@ +import type { PermissionState, PluginListenerHandle } from '@capacitor/core'; + +/** + * Shared Capacitor mocks for nativeShell tests (push-registration design + * §6.1). Real Capacitor packages are installed, so plain `jest.mock` + * factories work — including through dynamic `import()`. + * + * Usage in a test file (export names are `mock`-prefixed so jest's hoisting + * check allows them inside the factory): + * + * ```ts + * import { + * mockCapacitorCore, + * mockPushNotifications, + * setNativePlatform, + * emitRegistration, + * } from '__tests__/util/capacitorMocks'; + * + * jest.mock('@capacitor/core', () => mockCapacitorCore); + * jest.mock('@capacitor/push-notifications', () => ({ + * PushNotifications: mockPushNotifications, + * })); + * ``` + */ + +export type CapacitorMockPlatform = 'ios' | 'android' | 'web'; + +let currentPlatform: CapacitorMockPlatform = 'web'; + +/** + * Drives `mockCapacitorCore`. Defaults to 'web'; set it explicitly in each + * test (or a beforeEach) — the value persists between tests in a file. + */ +export const setNativePlatform = (platform: CapacitorMockPlatform): void => { + currentPlatform = platform; +}; + +/** Module factory for `jest.mock('@capacitor/core', () => mockCapacitorCore)`. */ +export const mockCapacitorCore = { + Capacitor: { + isNativePlatform: jest.fn(() => currentPlatform !== 'web'), + getPlatform: jest.fn(() => currentPlatform), + }, +}; + +type ListenerHandler = (event: never) => void | Promise; + +/** + * Handlers detached via `handle.remove()` or `removeAllListeners()`. The + * `emit*` helpers skip these, mirroring real plugin semantics so listener + * ownership bugs (one module wiping another's listeners) are reproducible in + * jest. Handler references are unique per `addListener` call in practice, so + * entries from previous tests are inert; `jest.clearAllMocks()` resetting + * `addListener.mock.calls` is what isolates tests from each other. + */ +const removedHandlers = new Set(); + +/** + * Mock for the `PushNotifications` plugin. Use with + * `jest.mock('@capacitor/push-notifications', () => ({ PushNotifications: mockPushNotifications }))`. + * Override per test, e.g. + * `mockPushNotifications.checkPermissions.mockResolvedValue({ receive: 'denied' })`. + */ +export const mockPushNotifications = { + checkPermissions: jest.fn(async () => ({ + receive: 'prompt' as PermissionState, + })), + requestPermissions: jest.fn(async () => ({ + receive: 'granted' as PermissionState, + })), + register: jest.fn(async () => undefined), + unregister: jest.fn(async () => undefined), + addListener: jest.fn( + async ( + _eventName: string, + handler: ListenerHandler, + ): Promise => ({ + remove: jest.fn(async () => { + removedHandlers.add(handler); + }), + }), + ), + removeAllListeners: jest.fn(async () => { + for (const [, handler] of mockPushNotifications.addListener.mock.calls) { + removedHandlers.add(handler); + } + }), +}; + +/** + * Mock for the `SplashScreen` plugin. Use with + * `jest.mock('@capacitor/splash-screen', () => ({ SplashScreen: mockSplashScreen }))`. + */ +export const mockSplashScreen = { + show: jest.fn(async () => undefined), + hide: jest.fn(async () => undefined), +}; + +/** + * Mock for the `StatusBar` plugin. Use with + * `jest.mock('@capacitor/status-bar', () => ({ StatusBar: mockStatusBar, Style: {...} }))`. + * Re-declare the `Style` enum inline in the factory (`requireActual` would + * load the real plugin, which imports `@capacitor/core` before these mocks + * initialize). + */ +export const mockStatusBar = { + setStyle: jest.fn(async () => undefined), + setBackgroundColor: jest.fn(async () => undefined), + setOverlaysWebView: jest.fn(async () => undefined), +}; + +/** + * Mock for the `Haptics` plugin. Use with + * `jest.mock('@capacitor/haptics', () => ({ Haptics: mockHaptics, NotificationType: {...} }))`. + * Re-declare the `NotificationType` enum inline in the factory (see + * `mockStatusBar` note above). + */ +export const mockHaptics = { + impact: jest.fn(async () => undefined), + notification: jest.fn(async () => undefined), + vibrate: jest.fn(async () => undefined), +}; + +const emitToListeners = async ( + eventName: string, + event: unknown, +): Promise => { + const handlers = mockPushNotifications.addListener.mock.calls + .filter(([registeredEvent]) => registeredEvent === eventName) + .map(([, handler]) => handler) + .filter((handler) => !removedHandlers.has(handler)) + .map((handler) => handler as (event: unknown) => void | Promise); + for (const handler of handlers) { + await handler(event); + } +}; + +/** Fires attached 'registration' listeners with a token, like the OS would. */ +export const emitRegistration = (token: string): Promise => + emitToListeners('registration', { value: token }); + +/** Fires attached 'registrationError' listeners. */ +export const emitRegistrationError = (error: string): Promise => + emitToListeners('registrationError', { error }); + +/** Fires attached 'pushNotificationActionPerformed' listeners, like a notification tap would. */ +export const emitPushNotificationActionPerformed = ( + actionId: string, + data: unknown, +): Promise => + emitToListeners('pushNotificationActionPerformed', { + actionId, + notification: { data }, + }); diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000000..48354a3dfc --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,101 @@ +# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore + +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof + +# Cordova plugins for Capacitor +capacitor-cordova-android-plugins + +# Copied web assets +app/src/main/assets/public + +# Generated Config files +app/src/main/assets/capacitor.config.json +app/src/main/assets/capacitor.plugins.json +app/src/main/res/xml/config.xml diff --git a/android/app/.gitignore b/android/app/.gitignore new file mode 100644 index 0000000000..043df802a2 --- /dev/null +++ b/android/app/.gitignore @@ -0,0 +1,2 @@ +/build/* +!/build/.npmkeep diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000000..6966ae5868 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,69 @@ +apply plugin: 'com.android.application' + +android { + namespace "org.cru.mpdx" + compileSdk rootProject.ext.compileSdkVersion + defaultConfig { + // PLACEHOLDER package identity (capacitor-shell.md §13 open question 2): + // org.mpdx reuses the legacy Android app id ONLY if we hold its signing + // key — otherwise switch to a new appId and add a new assetlinks.json + // entry (keeping the legacy one). namespace stays org.cru.mpdx (code + // package, independent of the store identity). + applicationId "org.mpdx" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + aaptOptions { + // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. + // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +repositories { + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" + implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" + implementation project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" + implementation project(':capacitor-cordova-android-plugins') +} + +apply from: 'capacitor.build.gradle' + +// Push build wiring (phase3-4-master-plan.md T26): the classpath for +// com.google.gms:google-services lives in the root build.gradle; the apply +// below is gated on google-services.json being present and non-empty. +// The committed google-services.json is a PLACEHOLDER (project_id +// "mpdx-placeholder-replace-via-t8", package_name matching the org.mpdx +// applicationId placeholder above) so the Gradle config parses — FCM token +// registration will NOT succeed until ops task T8 swaps in the real file, +// which MUST come from the SAME Firebase project as the SNS platform-app +// credentials (SENDER_ID_MISMATCH trap, fcm-v1-backend.md). See +// docs/pwa-design/t1-gate-runbook.md §6 for the full placeholder inventory. +try { + def servicesJSON = file('google-services.json') + if (servicesJSON.text) { + apply plugin: 'com.google.gms.google-services' + } +} catch(Exception e) { + logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") +} diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle new file mode 100644 index 0000000000..5b0aa821ae --- /dev/null +++ b/android/app/capacitor.build.gradle @@ -0,0 +1,26 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN + +android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 + } +} + +apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" +dependencies { + implementation project(':capacitor-app') + implementation project(':capacitor-browser') + implementation project(':capacitor-camera') + implementation project(':capacitor-device') + implementation project(':capacitor-haptics') + implementation project(':capacitor-push-notifications') + implementation project(':capacitor-splash-screen') + implementation project(':capacitor-status-bar') + +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000000..b157213484 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "000000000000", + "project_id": "mpdx-placeholder-replace-via-t8", + "storage_bucket": "mpdx-placeholder-replace-via-t8.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:000000000000:android:0000000000000000000000", + "android_client_info": { + "package_name": "org.mpdx" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyA-PLACEHOLDER-0000000000000000000" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java new file mode 100644 index 0000000000..f2c2217efa --- /dev/null +++ b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.getcapacitor.app", appContext.getPackageName()); + } +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..974f0b0047 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/java/org/cru/mpdx/MainActivity.java b/android/app/src/main/java/org/cru/mpdx/MainActivity.java new file mode 100644 index 0000000000..a7804ce929 --- /dev/null +++ b/android/app/src/main/java/org/cru/mpdx/MainActivity.java @@ -0,0 +1,5 @@ +package org.cru.mpdx; + +import com.getcapacitor.BridgeActivity; + +public class MainActivity extends BridgeActivity {} diff --git a/android/app/src/main/res/drawable-land-hdpi/splash.png b/android/app/src/main/res/drawable-land-hdpi/splash.png new file mode 100644 index 0000000000..51c73d1077 Binary files /dev/null and b/android/app/src/main/res/drawable-land-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-ldpi/splash.png b/android/app/src/main/res/drawable-land-ldpi/splash.png new file mode 100644 index 0000000000..c90fc117a3 Binary files /dev/null and b/android/app/src/main/res/drawable-land-ldpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-mdpi/splash.png b/android/app/src/main/res/drawable-land-mdpi/splash.png new file mode 100644 index 0000000000..645040ef95 Binary files /dev/null and b/android/app/src/main/res/drawable-land-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-night-hdpi/splash.png b/android/app/src/main/res/drawable-land-night-hdpi/splash.png new file mode 100644 index 0000000000..51c73d1077 Binary files /dev/null and b/android/app/src/main/res/drawable-land-night-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-night-ldpi/splash.png b/android/app/src/main/res/drawable-land-night-ldpi/splash.png new file mode 100644 index 0000000000..c90fc117a3 Binary files /dev/null and b/android/app/src/main/res/drawable-land-night-ldpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-night-mdpi/splash.png b/android/app/src/main/res/drawable-land-night-mdpi/splash.png new file mode 100644 index 0000000000..645040ef95 Binary files /dev/null and b/android/app/src/main/res/drawable-land-night-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-night-xhdpi/splash.png b/android/app/src/main/res/drawable-land-night-xhdpi/splash.png new file mode 100644 index 0000000000..ac3166caa3 Binary files /dev/null and b/android/app/src/main/res/drawable-land-night-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png b/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png new file mode 100644 index 0000000000..2a2f73b4c2 Binary files /dev/null and b/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png b/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png new file mode 100644 index 0000000000..373c1f85e1 Binary files /dev/null and b/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-xhdpi/splash.png b/android/app/src/main/res/drawable-land-xhdpi/splash.png new file mode 100644 index 0000000000..ac3166caa3 Binary files /dev/null and b/android/app/src/main/res/drawable-land-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxhdpi/splash.png new file mode 100644 index 0000000000..2a2f73b4c2 Binary files /dev/null and b/android/app/src/main/res/drawable-land-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxxhdpi/splash.png new file mode 100644 index 0000000000..373c1f85e1 Binary files /dev/null and b/android/app/src/main/res/drawable-land-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-night/splash.png b/android/app/src/main/res/drawable-night/splash.png new file mode 100644 index 0000000000..c90fc117a3 Binary files /dev/null and b/android/app/src/main/res/drawable-night/splash.png differ diff --git a/android/app/src/main/res/drawable-port-hdpi/splash.png b/android/app/src/main/res/drawable-port-hdpi/splash.png new file mode 100644 index 0000000000..8a81fac99f Binary files /dev/null and b/android/app/src/main/res/drawable-port-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-ldpi/splash.png b/android/app/src/main/res/drawable-port-ldpi/splash.png new file mode 100644 index 0000000000..cba27fa628 Binary files /dev/null and b/android/app/src/main/res/drawable-port-ldpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-mdpi/splash.png b/android/app/src/main/res/drawable-port-mdpi/splash.png new file mode 100644 index 0000000000..8258cd8991 Binary files /dev/null and b/android/app/src/main/res/drawable-port-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-night-hdpi/splash.png b/android/app/src/main/res/drawable-port-night-hdpi/splash.png new file mode 100644 index 0000000000..8a81fac99f Binary files /dev/null and b/android/app/src/main/res/drawable-port-night-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-night-ldpi/splash.png b/android/app/src/main/res/drawable-port-night-ldpi/splash.png new file mode 100644 index 0000000000..cba27fa628 Binary files /dev/null and b/android/app/src/main/res/drawable-port-night-ldpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-night-mdpi/splash.png b/android/app/src/main/res/drawable-port-night-mdpi/splash.png new file mode 100644 index 0000000000..8258cd8991 Binary files /dev/null and b/android/app/src/main/res/drawable-port-night-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-night-xhdpi/splash.png b/android/app/src/main/res/drawable-port-night-xhdpi/splash.png new file mode 100644 index 0000000000..066ddd4f13 Binary files /dev/null and b/android/app/src/main/res/drawable-port-night-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png b/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png new file mode 100644 index 0000000000..a01963d227 Binary files /dev/null and b/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png b/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png new file mode 100644 index 0000000000..9653c8f3b2 Binary files /dev/null and b/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-xhdpi/splash.png b/android/app/src/main/res/drawable-port-xhdpi/splash.png new file mode 100644 index 0000000000..066ddd4f13 Binary files /dev/null and b/android/app/src/main/res/drawable-port-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxhdpi/splash.png new file mode 100644 index 0000000000..a01963d227 Binary files /dev/null and b/android/app/src/main/res/drawable-port-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxxhdpi/splash.png new file mode 100644 index 0000000000..9653c8f3b2 Binary files /dev/null and b/android/app/src/main/res/drawable-port-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000000..c7bd21dbd8 --- /dev/null +++ b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000000..d5fccc538c --- /dev/null +++ b/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/splash.png b/android/app/src/main/res/drawable/splash.png new file mode 100644 index 0000000000..8258cd8991 Binary files /dev/null and b/android/app/src/main/res/drawable/splash.png differ diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000000..b5ad138701 --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..0aa82aa1b9 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..0aa82aa1b9 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000..d08f5c5d33 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000000..d435fd9023 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..be4775e14c Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000..c061ca53d6 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000000..27d1aff9e6 Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png new file mode 100644 index 0000000000..c7b5697e2e Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..9e51fea785 Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png new file mode 100644 index 0000000000..020ea068e2 Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000..8e0f32a0e9 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png new file mode 100644 index 0000000000..f84d61c69d Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..4f681d11b0 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000..7b47fcccca Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000..4e33ee1721 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png new file mode 100644 index 0000000000..6cfabe41df Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..a865622099 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..5587f8a485 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000..9a53170b09 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000..41450b1681 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..6b37e14d04 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..018ee1817e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000..a1ee4e25fd Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000..edeaa2565a Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..d56f7413fa Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..4f9c3bd465 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000000..c5d5899fdf --- /dev/null +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000000..bb306a68b0 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + MPDX + MPDX + org.cru.mpdx + org.cru.mpdx + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..be874e54a4 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/data_extraction_rules.xml b/android/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000000..a82add2e41 --- /dev/null +++ b/android/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000000..bd0c4d80d0 --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java new file mode 100644 index 0000000000..0297327842 --- /dev/null +++ b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java @@ -0,0 +1,18 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import org.junit.Test; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000000..f1b3b0e51e --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.7.2' + classpath 'com.google.gms:google-services:4.4.2' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +apply from: "variables.gradle" + +allprojects { + repositories { + google() + mavenCentral() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle new file mode 100644 index 0000000000..5851c1bca2 --- /dev/null +++ b/android/capacitor.settings.gradle @@ -0,0 +1,27 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN +include ':capacitor-android' +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') + +include ':capacitor-app' +project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android') + +include ':capacitor-browser' +project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/browser/android') + +include ':capacitor-camera' +project(':capacitor-camera').projectDir = new File('../node_modules/@capacitor/camera/android') + +include ':capacitor-device' +project(':capacitor-device').projectDir = new File('../node_modules/@capacitor/device/android') + +include ':capacitor-haptics' +project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/haptics/android') + +include ':capacitor-push-notifications' +project(':capacitor-push-notifications').projectDir = new File('../node_modules/@capacitor/push-notifications/android') + +include ':capacitor-splash-screen' +project(':capacitor-splash-screen').projectDir = new File('../node_modules/@capacitor/splash-screen/android') + +include ':capacitor-status-bar' +project(':capacitor-status-bar').projectDir = new File('../node_modules/@capacitor/status-bar/android') diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000000..2e87c52f83 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,22 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000..a4b76b9530 Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..c1d5e01859 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 0000000000..f5feea6d6b --- /dev/null +++ b/android/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000000..9b42019c79 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000000..3b4431d772 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,5 @@ +include ':app' +include ':capacitor-cordova-android-plugins' +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') + +apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android/variables.gradle b/android/variables.gradle new file mode 100644 index 0000000000..2c8e4083f6 --- /dev/null +++ b/android/variables.gradle @@ -0,0 +1,16 @@ +ext { + minSdkVersion = 23 + compileSdkVersion = 35 + targetSdkVersion = 35 + androidxActivityVersion = '1.9.2' + androidxAppCompatVersion = '1.7.0' + androidxCoordinatorLayoutVersion = '1.2.0' + androidxCoreVersion = '1.15.0' + androidxFragmentVersion = '1.8.4' + coreSplashScreenVersion = '1.0.1' + androidxWebkitVersion = '1.12.1' + junitVersion = '4.13.2' + androidxJunitVersion = '1.2.1' + androidxEspressoCoreVersion = '3.6.1' + cordovaAndroidVersion = '10.1.1' +} \ No newline at end of file diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 0000000000..26d80d6ed7 --- /dev/null +++ b/assets/README.md @@ -0,0 +1,30 @@ +# Native icon & splash source assets + +Source artwork for `@capacitor/assets`, which generates the iOS and Android +app icons and splash screens (capacitor-shell.md §9). + +- `logo.png` — 1024×1024, upscaled from the existing maskable PWA icon + (`public/icons/icon-512x512.png`). Same artwork, full-bleed `#05699B` + background. If the brand artwork changes, regenerate this file from the new + 512 maskable icon (or better, a native ≥1024px source) and re-run the + command below. + +## Regenerating + +```bash +npx capacitor-assets generate --ios --android \ + --iconBackgroundColor '#05699B' --iconBackgroundColorDark '#05699B' \ + --splashBackgroundColor '#05699B' --splashBackgroundColorDark '#05699B' +``` + +The background hex `#05699B` is `theme.palette.primary.main` +(`mpdxColors.blue` in `src/theme.ts`) — the `@capacitor/assets` CLI cannot +import TypeScript theme tokens, so the value is documented here and guarded +against drift by `src/lib/nativeShell/nativeChrome.test.ts`. The corner +pixels of `logo.png` are exactly this color, so the centered splash logo +blends seamlessly into the splash background. + +Generated output lands in `ios/App/App/Assets.xcassets/` and +`android/app/src/main/res/` and is committed; regeneration is only needed +when the artwork or brand color changes (native release required either way — +see capacitor-shell.md §10). diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000..ea60d30660 Binary files /dev/null and b/assets/logo.png differ diff --git a/capacitor-web/error.html b/capacitor-web/error.html new file mode 100644 index 0000000000..72fea22fe9 --- /dev/null +++ b/capacitor-web/error.html @@ -0,0 +1,105 @@ + + + + + + + MPDX + + + +
+ +

You're offline

+

+ MPDX needs an internet connection to start. Check your connection and + try again — this page will retry automatically when you're back + online. +

+ +
+ + + diff --git a/capacitor.config.ts b/capacitor.config.ts new file mode 100644 index 0000000000..94ff3bd16e --- /dev/null +++ b/capacitor.config.ts @@ -0,0 +1,55 @@ +import type { CapacitorConfig } from '@capacitor/cli'; + +/** + * Shell BINARY version, appended to the webview user agent as the + * version-handshake transport (docs/pwa-design/capacitor-shell.md §8). The + * web side enforces MIN_SUPPORTED_SHELL_VERSION from + * src/lib/nativeShell/shellVersion.ts against this token; bump this constant + * when cutting a new shell release. + */ +const shellVersion = '0.1.0'; + +const config: CapacitorConfig = { + // PLACEHOLDER appId — see capacitor-shell.md §13 open questions 2/3 (Android + // org.mpdx reuse depends on holding the legacy signing key; iOS bundle id + // pending Apple account). The Android applicationId is overridden to + // org.mpdx in android/app/build.gradle. + appId: 'org.cru.mpdx', + appName: 'MPDX', + // error.html stub only; server.url overrides everything else (shell doc §1.2) + webDir: 'capacitor-web', + server: { + // Stage/prod hosts confirmed 2026-06-15: stage app is https://stage.mpdx.org, + // production is https://mpdx.org (capacitor-shell.md §1.1). + url: + process.env.SHELL_TARGET === 'stage' + ? 'https://stage.mpdx.org' + : 'https://mpdx.org', + errorPath: 'error.html', + // allowNavigation: deliberately ABSENT (empty) — single-host rule + // (capacitor-shell.md §1.1). Every webview navigation stays on the one app + // host; all external URLs open in the system browser. Do NOT add entries. + }, + ios: { + // REQUIRED alongside WKAppBoundDomains in ios/App/App/Info.plist, or + // bridge injection fails ("plugin not implemented") — shell doc §2. + limitsNavigationsToAppBoundDomains: true, + }, + plugins: { + SplashScreen: { + // Keep the native splash up until the remote webview has hydrated — + // hideSplashScreen() in src/lib/nativeShell/nativeChrome.ts hides it + // from _app after hydration, avoiding the white flash between the + // native splash and the remote load (capacitor-shell.md §9). Splash + // artwork is generated by @capacitor/assets from assets/ (see + // assets/README.md for the regeneration command and color token). + launchAutoHide: false, + }, + }, + // Version handshake (shell doc §8): SSR and client read MPDXShell/. + appendUserAgent: `MPDXShell/${shellVersion}`, +}; + +// Capacitor CLI requires a default export from capacitor.config.ts; this is a +// deliberate exception to the repo's named-exports rule. +export default config; diff --git a/customHttp.yml b/customHttp.yml new file mode 100644 index 0000000000..48eeb5891b --- /dev/null +++ b/customHttp.yml @@ -0,0 +1,13 @@ +customHeaders: + - pattern: '/sw.js' + headers: + - key: 'Cache-Control' + value: 'no-cache, no-store, must-revalidate' + - pattern: '/manifest.json' + headers: + - key: 'Cache-Control' + value: 'public, max-age=0, must-revalidate' + - pattern: '/.well-known/apple-app-site-association' + headers: + - key: 'Content-Type' + value: 'application/json' diff --git a/docs/pwa-design/NEXT-STEPS.md b/docs/pwa-design/NEXT-STEPS.md new file mode 100644 index 0000000000..4fa7c2ba3d --- /dev/null +++ b/docs/pwa-design/NEXT-STEPS.md @@ -0,0 +1,127 @@ +# PWA Phases 3+4 — Next Steps (Handoff) + +_Last updated: 2026-06-15. Written so a fresh session or a new developer can +resume cold. Read this first, then `phase3-4-master-plan.md` for detail._ + +## TL;DR + +Phases 3 (native push) and 4 (Capacitor shell) are **code-complete and +reviewed**. All tests pass. Nothing else can ship until **Daniel** provides +accounts/credentials and runs three on-device auth gates. The remaining code +(production native auth, CI signing, store submission) is deliberately blocked +on those gates because its assumptions can't be validated without a device. + +**Stage/prod hosts (confirmed 2026-06-15):** stage is `https://stage.mpdx.org`, +production is `https://mpdx.org`. These are now baked into `capacitor.config.ts`, +`WKAppBoundDomains`, and the associated-domains entitlement. Before Gate 1, just +sanity-check that `https://stage.mpdx.org` serves the Next.js stage app and you +can log in. + +## Where everything lives + +| Thing | Location | +| --- | --- | +| Frontend branch | `pwa-phase3-4-push-shell` (26 commits ahead of `mpdx-pwa`) | +| Frontend worktree | `MPDX/worktrees/mpdx-react-pwa` | +| Backend branch | `pwa-push-fcm-v1` (8 commits ahead of `origin/master`) | +| Backend worktree | `MPDX/worktrees/mpdx_api-pwa` | +| Design docs | `docs/pwa-design/` (this folder) | +| Ordered task list | `docs/pwa-design/phase3-4-master-plan.md` (T1–T32) | +| Auth gate runbook | `docs/pwa-design/t1-gate-runbook.md` | +| Backend/ops runbook | `docs/pwa-design/fcm-v1-backend.md` §5 | +| Deferred review items | `docs/pwa-design/review-follow-ups.md` | + +**Neither branch is pushed.** No PRs are open. Main checkouts are on their own +branches (mpdx-react on `mpdx-pwa`, mpdx_api on `add-new-tables-updates`); the +PWA branches are checked out in the worktrees above. Git won't let you check +out `pwa-phase3-4-push-shell` or `pwa-push-fcm-v1` in the main repos while the +worktrees hold them — that's expected. + +## What's done (don't redo this) + +- **Backend FCM v1**: `publish_service.rb` emits the SNS `fcmV1Message` + envelope; APNs custom keys flattened; `DeepLinkBuilder` maps all 22 + notification types to web paths; `app`-channel gating regression-tested; + raw-token logging removed. The **code** is done — the SNS platform-app + **credential swap** is an ops step (below). +- **Frontend push**: `@capacitor/push-notifications` registration via a new + `UserDevices` REST-proxy schema; settings card is the only permission prompt + site; `NativeDeepLinkProvider` routes notification taps; token rotation + + session-scoped registration; unregister wired into `logoutCleanup()`. +- **Capacitor shell**: in-repo, `server.url` mode, Capacitor 7. Deep links + (AASA + assetlinks), camera contact-photo, native polish (splash, status + bar, safe areas, haptics), shell-version handshake + upgrade screen. +- **Review**: 7-dimension adversarial review found 23 confirmed issues; all + fixed (incl. a critical cross-module `removeAllListeners()` bug that killed + notification-tap routing). Full sweep green. + +## The critical path to shipping (all blocked on Daniel, in order) + +Do these top to bottom — each unblocks the next. + +1. **Create the stage Doorkeeper/Okta public PKCE client** for the auth gate + (runbook §2.2). _(Stage host already confirmed as `stage.mpdx.org` and baked + into the config — just sanity-check it loads.)_ +2. **Run the three auth go/no-go gates on a device** — `t1-gate-runbook.md`: + - Gate 1: bridge injection on the remote origin (SW registers, IndexedDB + readable). _Only Gate 1 failure invalidates the architecture._ + - Gate 2: system-browser PKCE round-trip lands a working session cookie. + - Gate 3: cookie survives kill / relaunch / reboot + 48h soak. + _Gate 3 failure activates Plan B (Keychain refresh token)._ +3. **AWS SNS / Firebase / APNs credentials** — `fcm-v1-backend.md` §5: confirm + the GCM platform-app credential type, upload the FCM v1 service-account JSON, + confirm the APNs `.p8` + bundle ID, update the `SNS_*_APPLICATION_ARN` deploy + config. **Trap:** the Firebase project for `google-services.json` must be the + _same_ project as the SNS credentials (SENDER_ID_MISMATCH otherwise). +4. **Register the Okta native PKCE client** and append its client ID to + `OKTA_AUTH_CLIENT_IDS` in the mpdx_api deploy config (or sign-in rejects with + "Invalid access_token cid"). +5. **Identity decisions** (drive everything else): + - Android: reuse `org.mpdx` Play listing + signing key? (recommended — keeps + `assetlinks.json` fingerprint valid) + - Apple: is team `DQ48D9BF2V` still Cru's, and reuse bundle `org.cru.mpdx`? + (fills the AASA, entitlements, APNs registration) + +## Remaining code tasks (start AFTER the gates pass) + +These were deliberately left unimplemented because they depend on gate +outcomes. Designs are locked; pick them up in a new session. + +- **T20 / T21 — Production native auth.** System-browser PKCE → NextAuth + `CredentialsProvider` (`native-okta`) + a secretless token-exchange proxy + + App Link / iOS scheme callback. Full design in `capacitor-shell.md` §4 and + `phase3-4-master-plan.md` (T20, T21). _Critical-file change — run a security + review._ +- **T29 — Fastlane CI build + signing** (needs Apple/Google accounts). +- **T30 — End-to-end push QA on devices** (needs step 4 done). Checklist in + `fcm-v1-backend.md` §5.4. +- **T32 — Store submission** — listings, privacy labels / Play Data Safety, + Apple 4.2 receipts. Checklist in `capacitor-shell.md` §11. +- **T31 — Offline viewer (shell v1.1)** — optional, parallel with store prep, + not blocking submission. + +See `review-follow-ups.md` for 11 deferred (suggestion-tier) cleanups and the +3 refuted findings (so they aren't re-litigated). + +## How to resume in a fresh session + +1. Start in the worktree: `cd MPDX/worktrees/mpdx-react-pwa`. +2. Read this file, then `phase3-4-master-plan.md`. +3. The auto-memory note `project_pwa_phase3_4.md` has the running status and the + workflow run IDs. +4. To run the work via multi-agent orchestration again, use the **ultracode** + keyword (Daniel approved it for this initiative). +5. Verify before claiming anything: frontend `yarn && yarn gql && yarn lint:ts + && yarn test`; backend `bundle exec rspec` in `MPDX/worktrees/mpdx_api-pwa`. + +## When ready to integrate + +- Push both branches and open PRs (not yet done). Backend PR targets + `master`; frontend PR targets `mpdx-pwa`. +- Frontend PR is large (26 commits) and touches critical files + (`_app.page.tsx`, `next.config.ts`, Apollo client, auth) — expect a high + risk score from `/quality:agent-review`; that review already ran once + pre-PR and its findings are fixed. +- **Do not commit a real `google-services.json`** — the one in the repo is a + marked placeholder; the real file carries Firebase config and should be + injected at build time (ops). diff --git a/docs/pwa-design/camera-contact-photo.md b/docs/pwa-design/camera-contact-photo.md new file mode 100644 index 0000000000..ece963d928 --- /dev/null +++ b/docs/pwa-design/camera-contact-photo.md @@ -0,0 +1,381 @@ +# Design: Contact Photo Capture/Upload (Phase 4 — Apple 4.2 anchor) + +Status: DESIGN — 2026-06-10 +Branch: `pwa-phase3-4-push-shell` +Depends on: Capacitor shell scaffold (see `capacitor-shell.md` master plan task — adds +`@capacitor/core`, `ios/`, `android/` projects, `capacitor.config.ts` in server.url mode). + +## 1. Current state (verified in code) + +The contact avatar upload already works end-to-end on the web. The whole chain: + +| Layer | File | Behavior | +| --- | --- | --- | +| UI trigger | `src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.tsx` | Hidden `` (`data-testid="PersonNameUpload"`), opened by clicking the avatar `StyledIconButton`. Only rendered when `person` exists (edit mode). `handleFileChange` calls `setAvatar(file)` and resets `event.target.value`. | +| State + preview | `.../PersonModal/PersonModal.tsx` | `updateAvatar(file)` runs `validateAvatar` then stores `{ file, blobUrl: URL.createObjectURL(file) }`; `pendingAvatar` blob URL previews in the ``. Upload is deferred to form submit. | +| Validation | `.../PersonModal/uploadAvatar.ts` `validateAvatar` | Must be `image/*`, not AVIF, **≤ 1,000,000 bytes** (the lambda truncates bodies at 2^20 bytes — hard constraint). | +| Upload | `.../PersonModal/uploadAvatar.ts` `uploadAvatar` | **Raw `fetch` POST** (multipart `personId` + `avatar`) to `/api/uploads/upload-person-avatar`. Not Apollo. | +| Lambda | `pages/api/uploads/upload-person-avatar.page.ts` | Auths via NextAuth JWT `apiToken`, re-posts to REST `PUT contacts/people/:personId` with a `pictures` relationship (`primary: true`, `overwrite: true`). | +| Cache refresh | `PersonModal.tsx` `onSubmit` | After upload + `updatePerson`, `client.refetchQueries({ include: ['GetContactDetailsHeader'] })` (contact avatar derives from the primary person's avatar). | + +Key consequences for this design: + +- **Everything downstream of `setAvatar(file: File)` stays untouched.** The native + camera path only has to produce a `File` and call the same `setAvatar`. +- **The 1MB limit is real** (lambda body truncation), so camera output must be + resized/compressed client-side before it ever reaches `validateAvatar`. +- `uploadAvatar` is a raw `fetch`, so the Phase 2 `offlineLink` does **not** block + it — offline behavior needs explicit handling (section 5). +- The same modal also edits the user's own profile (`userProfile` branch) — the + camera path works there for free; no extra code. + +## 2. Architecture overview + +``` +PersonName.tsx (extended, not forked) + ├─ web / browser ──────────► existing (UNCHANGED) + └─ Capacitor native shell ─► MUI : "Take Photo" / "Choose from Library" + │ + ▼ + useNativeCamera() hook (src/hooks/useNativeCamera.ts) + dynamic import('@capacitor/camera') + requestPermissions → getPhoto (Base64, 1024px, q85) + base64 → File (src/lib/images/base64ToFile.ts) + size/type safety net (src/lib/images/compressAvatar.ts) + │ + ▼ File + setAvatar(file) ← existing PersonModal prop + │ + ▼ (existing, unchanged) + validateAvatar → preview → submit → uploadAvatar fetch + → /api/uploads/upload-person-avatar → REST API +``` + +New files (all in mpdx-react): + +| File | Purpose | +| --- | --- | +| `src/lib/capacitor.ts` | `export const isNativePlatform = (): boolean => Capacitor.isNativePlatform();` — single in-repo mock point so component tests never mock `@capacitor/core` directly. Shared with the push-registration feature. | +| `src/hooks/useNativeCamera.ts` (+ test) | Reusable hook: permission flow, `getPhoto`, conversion to `File`, typed error outcomes. Lives in `src/hooks/` because push/avatar/future features share the native boundary and it is not PersonModal-specific. | +| `src/lib/images/base64ToFile.ts` (+ test) | Pure `(base64: string, mimeType: string, fileName: string) => File`. No fetch, trivially unit-testable. | +| `src/lib/images/compressAvatar.ts` (+ test) | Canvas-based safety net: re-encode to JPEG under `MAX_AVATAR_BYTES = 1_000_000` (exported constant; `validateAvatar`'s limit should be refactored to import it). | +| `PersonName.tsx` (modified, + test additions) | Branch on `isNativePlatform()`; native menu UI; offline gating; denial snackbars. | + +No new third-party dependencies beyond the official `@capacitor/camera` (and +`@capacitor/core`, which the shell scaffold already adds). Deliberately **no** +`browser-image-compression`-style package — the plugin does the primary resize +natively and a small canvas util covers the rest (avoids the +2 supply-chain +risk in `.CLAUDE/rules/code-review.md`). + +## 3. @capacitor/camera usage (plugin v7.x line — verify latest major at implementation) + +### 3.1 Platform gating + +- `Capacitor.isNativePlatform()` (via the `src/lib/capacitor.ts` wrapper) is the + only switch. On web it returns `false` and the existing file input renders and + behaves exactly as today — **zero behavioral change for browsers**, including + the mobile-web PWA (which keeps ``; mobile browsers + already offer camera/library natively from that input). +- `@capacitor/camera` is loaded with `await import('@capacitor/camera')` inside + the hook so it never lands in the web-critical bundle and is only evaluated on + native. `@capacitor/core` is statically imported in `src/lib/capacitor.ts` + (tiny, web-safe). +- We do **not** install `@ionic/pwa-elements` — the plugin's web fallback is + never invoked because the hook is unreachable when `isNativePlatform()` is false. + +### 3.2 getPhoto call + +```ts +const { Camera, CameraResultType, CameraSource } = await import('@capacitor/camera'); + +const photo = await Camera.getPhoto({ + resultType: CameraResultType.Base64, + source: source === 'camera' ? CameraSource.Camera : CameraSource.Photos, + quality: 85, + width: 1024, + height: 1024, // max bounding box; aspect ratio preserved + correctOrientation: true, // EXIF rotation baked in + allowEditing: false, // native crop UIs are inconsistent; skip this release + saveToGallery: false, +}); +``` + +Decisions and why: + +- **`CameraResultType.Base64`, not `Uri`.** The shell runs in `server.url` mode + (webview origin = hosted mpdx.org). `Uri` results return a + `_capacitor_file_` webPath served by Capacitor's local interceptor; on iOS + that interception is implemented via a `WKURLSchemeHandler` on the + `capacitor://` scheme and is **not reliable when the origin is a remote + https URL** — `fetch(webPath)` can fail. Base64 crosses the bridge directly + and is origin-independent. At 1024px/q85 the payload is ~150–400KB of JPEG + (~200–530KB base64) — well within bridge limits. If profiling ever shows + memory pressure, revisit `Uri` + `Capacitor.convertFileSrc` once the shell's + file-serving behavior under server.url is verified on-device. +- **`width/height: 1024` + `quality: 85`** does the resize/compress natively + (fast, low-memory, handles 12–48MP camera output). Output is JPEG-encoded by + the plugin when resizing — this also neutralizes HEIC from iOS libraries. +- **Two explicit sources** instead of `CameraSource.Prompt`: we render our own + MUI menu (localized, theme-consistent, testable) and call the plugin with + `Camera` or `Photos` directly. + +### 3.3 Conversion to File + +```ts +// src/lib/images/base64ToFile.ts — pure, no DOM APIs +export const base64ToFile = ( + base64: string, + mimeType: string, + fileName: string, +): File => { + const binary = atob(base64); + const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0)); + return new File([bytes], fileName, { type: mimeType }); +}; +``` + +The hook names the file `avatar.${photo.format ?? 'jpeg'}` with MIME +`image/${photo.format ?? 'jpeg'}`. `validateAvatar` then re-checks type and +size exactly as it does for file-input uploads (defense in depth, no special +casing). + +### 3.4 Size/type safety net — `compressAvatar` + +The plugin output should virtually always be < 1MB, but "should" is not a +guarantee (PNG screenshots from the library, dense 1024px JPEGs). Rule in the +hook, after conversion: + +``` +if (file.size > MAX_AVATAR_BYTES || !['image/jpeg', 'image/png'].includes(file.type)) { + file = await compressAvatar(file); +} +``` + +`compressAvatar` (canvas-based, in-repo): + +1. `createImageBitmap(file)` → draw onto an offscreen `` at the current + dimensions (capped at 1024px max edge). +2. `canvas.toBlob('image/jpeg', q)` with `q` stepping `0.85 → 0.75 → 0.65 → 0.55`. +3. If still over budget at `q = 0.55`, scale dimensions by `0.75` and restart the + quality ladder; throw a localized error after 3 dimension reductions + (surfaces as the existing avatar-error snackbar). +4. The step sequence lives in a pure exported helper + (`nextCompressionStep(state): CompressionStep | null`) so the ladder logic is + unit-testable without canvas; the canvas I/O is a thin shell around it. + +This util is generic and may later serve the web path too, but **this release +does not change web behavior** — web keeps the hard 1MB validation error. + +## 4. Hook contract and PersonName integration + +### 4.1 `useNativeCamera` + +```ts +// src/hooks/useNativeCamera.ts +export type NativePhotoSource = 'camera' | 'photos'; + +export type NativePhotoResult = + | { outcome: 'success'; file: File } + | { outcome: 'canceled' } + | { outcome: 'permission-denied'; source: NativePhotoSource } + | { outcome: 'error'; error: Error }; + +export interface UseNativeCameraResult { + isNative: boolean; // from src/lib/capacitor.ts + getAvatarPhoto: (source: NativePhotoSource) => Promise; +} + +export const useNativeCamera = (): UseNativeCameraResult => { ... }; +``` + +`getAvatarPhoto` flow: + +1. `Camera.requestPermissions({ permissions: [source === 'camera' ? 'camera' : 'photos'] })` + — returns `{ camera, photos }` with states + `'granted' | 'denied' | 'prompt' | 'prompt-with-rationale' | 'limited'`. + - `granted` / `limited` → proceed (`limited` = iOS limited photo selection; + the picker works, treat as granted). + - `denied` → return `{ outcome: 'permission-denied', source }` **without** + calling `getPhoto` (avoids the plugin's raw error string). + - Note: on Android 13+ the `Photos` source uses the system Photo Picker and + needs no runtime permission; `requestPermissions` resolves `granted` there. +2. `Camera.getPhoto(...)` (section 3.2). + - The plugin rejects with a message containing "cancelled"/"canceled" when + the user backs out of the camera/picker → match `/cancell?ed/i` → return + `{ outcome: 'canceled' }` (no snackbar — cancel is not an error). + - Any other rejection → `{ outcome: 'error', error }`. +3. Convert + safety-net compress → `{ outcome: 'success', file }`. + +Returning a discriminated result (instead of throwing) keeps PersonName's +handler a flat `switch` and makes the test matrix explicit. + +### 4.2 PersonName changes (extend, don't fork) + +`PersonName.tsx` keeps its props (`setAvatar: (avatar: File) => void` is +already exactly what we need). Changes: + +- `const { isNative, getAvatarPhoto } = useNativeCamera();` + `const isOnline = useIsOnline();` (existing hook) + `const { enqueueSnackbar } = useSnackbar();` +- `StyledIconButton.onClick`: + - web (`!isNative`): `fileRef.current?.click()` — **unchanged line, unchanged + hidden input, unchanged tests**. + - native: open an MUI `` anchored to the button with two `MenuItem`s: + - `t('Take Photo')` — `PhotoCameraOutlined` icon → `handleNativePhoto('camera')` + - `t('Choose from Library')` — `PhotoLibraryOutlined` icon → `handleNativePhoto('photos')` + - Add `aria-label={t('Change photo')}` to `StyledIconButton` (it is icon-only; + flagged-by-default in our UX rules — fixes web too, harmless). +- `handleNativePhoto(source)` switch on `NativePhotoResult.outcome`: + - `success` → `setAvatar(file)` (existing pipeline: validate, preview, upload + on save). + - `canceled` → no-op. + - `permission-denied` → snackbar `variant: 'error'`: + - camera: `t('MPDX does not have permission to use the camera. Enable camera access for MPDX in your device settings and try again.')` + - photos: `t('MPDX does not have permission to access your photos. Enable photo access for MPDX in your device settings and try again.')` + - (No settings deep-link this release — that needs an extra plugin + (`capacitor-native-settings`); copy-only guidance keeps scope down. + Noted as a follow-up.) + - `error` → snackbar `t('Failed to get the photo. Please try again.')`. +- The native menu is only reachable when `person` exists, same as today's input + (the whole avatar block is inside `{person && ...}`). + +All four new strings go through `t()`; run `yarn extract`. + +## 5. Offline behavior (confirmed analysis) + +- **`offlineLink` does NOT cover this feature.** It blocks Apollo mutations; + `uploadAvatar` is a raw `fetch` to the Next lambda. Today, an offline submit + with a pending avatar fails inside `uploadAvatar`'s `.catch` with the + misleading `t('Cannot upload avatar: server error')` snackbar and aborts the + submit — no data loss, but poor messaging. The subsequent `updatePerson` + Apollo mutation never runs (upload throws first), so the offlineLink toast + never appears for this path. +- **Native shell (this feature): gate at the entry point.** In `PersonName`, + when `isNative && !isOnline`, tapping the avatar shows + `enqueueSnackbar(t('Cannot change the photo while offline.'), { variant: 'warning' })` + instead of opening the menu. No capture, no preview, nothing queued — clean + degradation, consistent with the Phase 2 read-only-offline decision and the + roadmap's "online-only, no offline upload queue". +- **Web path: untouched per scope.** The pre-existing offline failure mode + (generic server-error snackbar) is unchanged. Optional cheap follow-up + (separate ticket): early-return in `uploadAvatar` with + `t('Cannot upload avatar while offline.')` when `!navigator.onLine`. + +## 6. Native platform configuration (shell requirements) + +Lives in the Capacitor shell projects (`ios/`, `android/` in mpdx-react, created +by the shell scaffold task). + +### iOS — `ios/App/App/Info.plist` + +| Key | Suggested value (App Store review reads these verbatim) | +| --- | --- | +| `NSCameraUsageDescription` | `MPDX uses the camera to take a photo for a contact or your profile.` | +| `NSPhotoLibraryUsageDescription` | `MPDX accesses your photo library so you can choose a photo for a contact or your profile.` | +| `NSPhotoLibraryAddUsageDescription` | `MPDX can save photos you take to your photo library.` — include even though `saveToGallery: false`; the plugin links the add-to-library API and App Store static analysis rejects builds with linked-but-undescribed APIs. | + +Also: iOS Privacy Manifest (`PrivacyInfo.xcprivacy`) — `@capacitor/camera` 7.x +ships its own; verify it is present in the Pods build and declare photo-library +access in the App Store privacy labels (data not collected — photo goes straight +to MPDX's existing avatar storage). + +### Android — `android/app/src/main/AndroidManifest.xml` + +```xml + + + +``` + +- **Do NOT declare `android.permission.CAMERA`.** The plugin captures via the + system camera intent; if `CAMERA` appears in the merged manifest, Android then + *requires* the runtime grant before the intent fires — declaring it strictly + worsens UX. Audit the merged manifest (`./gradlew :app:processDebugManifest`) + in case another plugin adds it. +- Android 13+ (API 33+): no `READ_MEDIA_IMAGES` needed — the plugin uses the + system Photo Picker, permissionless by design. +- The Capacitor Android template already ships the required `FileProvider` + entry; no change. +- Google Play Data Safety: declare "Photos" collected, transmitted, not shared. + +## 7. TDD plan (per project conventions) + +Order of implementation = order below; write the failing test first in each step. +All mocks of Capacitor go through `jest.mock('src/lib/capacitor')` and +`jest.mock('@capacitor/camera')` — never mock `window.fetch` (existing +`uploadAvatar.test.ts` already covers the upload fetch; we don't touch it). + +1. **`src/lib/images/base64ToFile.test.ts`** (pure): + - decodes a known base64 string to a `File` with correct bytes, name, MIME; + - empty string → empty file (no throw). +2. **`src/lib/images/compressAvatar.test.ts`**: + - unit-test the pure `nextCompressionStep` ladder: quality descends + 0.85→0.55, then dimension scales by 0.75, `null` (give up) after 3 + dimension reductions; + - canvas shell: mock `createImageBitmap` + `HTMLCanvasElement.prototype.toBlob` + (jsdom has no real canvas) — returns first blob under `MAX_AVATAR_BYTES`, + throws localized error when ladder exhausts. +3. **`src/hooks/useNativeCamera.test.tsx`** (`renderHook`): + - `jest.mock('@capacitor/camera')` with `Camera.requestPermissions` / + `Camera.getPhoto` spies; `jest.mock('src/lib/capacitor')` for `isNativePlatform`. + - success (camera): permissions `granted` → `getPhoto` called with + `source: CameraSource.Camera`, `resultType: Base64`, `width/height: 1024`, + `quality: 85`, `saveToGallery: false` → result `success` with + `File` of type `image/jpeg`; + - success (photos): `source: CameraSource.Photos`; `limited` permission + treated as granted; + - permission denied (each source) → `permission-denied`, `getPhoto` NOT called; + - user cancel (`getPhoto` rejects with `'User cancelled photos app'`) → `canceled`; + - other rejection → `error`; + - oversize/odd-type result → `compressAvatar` invoked (mock it) and its + output returned. +4. **`PersonName.test.tsx`** (extend the existing test file): + - **web regression (the load-bearing test)**: `isNativePlatform` → `false` ⇒ + clicking the avatar button does NOT render a menu; the hidden + `PersonNameUpload` input still receives the click; `fireEvent.change` with + a `File` still calls `setAvatar` — proves the browser path is byte-for-byte + behaviorally unchanged; + - native ⇒ menu renders `Take Photo` and `Choose from Library` + (`findByRole('menuitem', ...)`); + - selecting `Take Photo` with hook mocked to `success` ⇒ `setAvatar` called + with the returned `File`; + - `permission-denied` (camera and photos) ⇒ correct error snackbar + (mock `notistack`'s `useSnackbar` per existing repo pattern), `setAvatar` + not called; + - `canceled` ⇒ no snackbar, no `setAvatar`; + - native + offline (`useIsOnline` mocked false / `window` online event + pattern from `useIsOnline.test.tsx`) ⇒ tapping avatar shows the offline + warning snackbar and no menu. +5. **`PersonModalSave.test.tsx`** (existing integration suite): one added case — + a camera-shaped `File` (`avatar.jpeg`, `image/jpeg`, < 1MB) passed through + `setAvatar` survives `validateAvatar` and reaches the `uploadAvatar` POST on + save (asserts the bridge output is compatible with the legacy validator). +6. **Manual device QA checklist** (no automation possible): iOS + Android shell — + capture, library pick, deny-then-recover via Settings, airplane mode, + 12MP+ source photo lands < 1MB server-side, avatar refreshes on contact + header after save (`GetContactDetailsHeader` refetch). + +`yarn lint`, `yarn lint:ts`, `yarn extract` (4 new strings) gate each step. + +## 8. Risks + +- **server.url + `Uri` webPath incompatibility** is designed around via Base64, + but Base64 bridges a few hundred KB per capture — acceptable, verify on a + low-end Android device. +- **1MB lambda truncation** is inherited, not fixed. The compress ladder makes + hitting it unlikely; raising the lambda limit is a separate backend ticket if + QA finds real photos failing. +- **Plugin major-version drift**: pin `@capacitor/camera` to the same major as + `@capacitor/core` chosen by the shell scaffold; CI native builds (Fastlane + task in the shell plan) catch mismatches. +- **Merged-manifest CAMERA permission** from a future plugin would silently + change Android permission semantics — add a checklist item to the shell's + release checklist. + +## 9. Out of scope / follow-ups + +- Settings deep-link on permission denial (`capacitor-native-settings`). +- Offline-aware copy in the web `uploadAvatar` path (cheap, separate ticket). +- `allowEditing: true` native crop UX. +- Refactor `validateAvatar`'s magic `1_000_000` to import `MAX_AVATAR_BYTES` + from `compressAvatar.ts` (do during T2 — single source of truth). diff --git a/docs/pwa-design/capacitor-shell.md b/docs/pwa-design/capacitor-shell.md new file mode 100644 index 0000000000..f4b901a743 --- /dev/null +++ b/docs/pwa-design/capacitor-shell.md @@ -0,0 +1,732 @@ +# Capacitor Shell Architecture — Phase 4 (DECIDED) + +Status: DESIGN — 2026-06-10 (synthesis of three judged proposals; unanimous judge verdict) +Owner repos: `mpdx-react` (shell, auth, web changes), `mpdx_api` (deploy config, one log fix) +Coordinates with: `push-registration-frontend.md` (push wiring), `deep-links.md` +(link format + `.well-known`), `camera-contact-photo.md` (Apple 4.2 anchor), +`fcm-v1-backend.md` (Android push payloads). + +--- + +## 0. Decision + +**Winning architecture: the "pragmatic hybrid"** — a thin Capacitor 7 shell in +`server.url` mode pointed at the hosted Next.js app, with a deliberately tiny +local layer, system-browser PKCE auth landed via a NextAuth +**CredentialsProvider**, and a staged (v1.1) same-origin offline viewer for +cold-start offline. + +All three judges (auth/security lens, offline/UX lens, maintenance/release-ops +lens) independently ranked hybrid first. No fatal flaw was found that the +judges missed; this synthesis follows their consensus and grafts in the best +ideas from the two runners-up: + +- **From `server-url`:** the single-host rule (`allowNavigation: []` — + sidesteps every documented Capacitor remote-URL bug), `appendUserAgent` + as the version-handshake transport, the day-one acceptance-gate structure, + the Apple-review "receipts" document, and the deploy-freeze-during-review + process rule. +- **From `bundled-shell`:** Keychain-stored refresh token as the + cookie-flakiness contingency (Plan B, §4.6), push device deregistration + wired into the signout invariant, the camera feature demo-ready at first + submission, and shared `.graphql` documents keeping any second render + surface in codegen lockstep. + +### Why hybrid wins (judge consensus, condensed) + +1. **Auth on the paved road.** The webview itself makes a same-origin + `signIn('native-okta', ...)` POST through NextAuth's own + `/api/auth/callback/native-okta`, so NextAuth sets the session cookie with + its standard CSRF protection, cookie attributes, and chunking. No manual + `next-auth/jwt encode()`, no bespoke cookie-minting endpoint, no session + credential ever crossing the system-browser/webview boundary — only a + single-use, Okta-enforced PKCE authorization code crosses (RFC 8252). + `authorize()` calls the same public `oktaSignIn` mutation the existing + OktaProvider path calls; the Rails API validates the token server-side + exactly as today. Smallest new attack surface of the three proposals + (~80 lines in the existing handler + one secretless token-proxy route). +2. **The web app is the app.** Zero UI drift, Phase 1/2 SW + IndexedDB work + transfers wholesale, every web deploy lands in every installed shell + instantly with no store review and no OTA infrastructure. One release lane + for web, one rarely-used Fastlane lane for the binary. +3. **The only cold-start-offline design whose data is fresh.** Web storage is + origin-partitioned in WKWebView and Android WebView — a bundled + `capacitor://localhost` page can **not** read `https://mpdx.org`'s + IndexedDB. The hybrid's same-origin offline viewer (v1.1) reads the very + cache the user's daily usage keeps warm, with no second purge path: the + `clearApolloData()` invariant already covers it. +4. **Bounded downside.** Shell v1 is strictly a superset of the plain + `server.url` proposal (a bundled `errorPath` page added). If v1.1 slips, + nothing is stranded. + +Rejected alternatives, for the record: + +- **`server-url` (pure)** — rejected because its bespoke handoff-code auth + (three new routes touching `JWT_SECRET`, a session-equivalent credential in + a GET query string that lands in Amplify/CloudWatch logs, no single-use + enforcement on stateless lambdas) was judged the weakest security design, + and it permanently forecloses cold-start offline. +- **`bundled-shell`** — rejected because its bundled-origin offline reader + cannot read the cache daily usage maintains (stale-or-empty cold-start + data), it requires a second frontend build artifact plus OTA infrastructure + (Appflow is discontinued for new customers; Capgo self-host is new ops + surface — three permanent release lanes), and its camera-on-remote-pages + tier depends on bridge injection into `allowNavigation` hosts — the exact + documented-broken case on Android (Capacitor #4164). Its auth robustness + (Keychain bearer) is grafted in as Plan B instead. + +--- + +## 1. Core shape + +### 1.1 Primary surface: `server.url` → hosted app + +The Capacitor 7 webview loads the hosted Amplify SSR app: + +- prod: `https://mpdx.org` +- stage: `https://stage.mpdx.org` (debug/stage builds, env-switched at + build time) + +Forced by reality: 64 of 69 pages export `getServerSideProps` +(`makeGetServerSideProps` — session extraction, not data fetching), there is +no static export, dynamic routes (`[accountListId]`, `[contactId]`) are not +enumerable, and Phases 1+2 hardened the *web* delivery. A bundled build of the +product would be a multi-week routing migration for negative benefit. + +**The single-host rule (grafted from `server-url`):** `allowNavigation` stays +**empty**. Every webview navigation stays on the one app host; all external +URLs (Okta, Helpjuice, donor links) open in the system browser. This sidesteps +every documented Capacitor remote-URL failure mode: Android plugin loss on +`allowNavigation` pages (#4164, #5455, #7930), platform-detection breakage +after redirects (#7454), and the Android proxy's historical `set-cookie` drops +on cross-host OAuth chains. + +### 1.2 Local layer (deliberately tiny) + +1. **Bundled `server.errorPath` page** (`error.html` in the web-stub dir): + shown when the remote app fails to load (first-ever launch offline, server + down). Branding + Retry + a `navigator.onLine` listener that reloads when + connectivity returns. **Keep it dumb** — on Android the errorPath page has + no plugin access (Capacitor docs), so vanilla HTML/JS only, no framework, + no data. This is the *only* bundled web content in v1. +2. **Same-origin offline viewer — shell v1.1, not v1** (§5). + +### 1.3 Honest caveat on `server.url` + +Capacitor's docs label `server.url` "not intended for use in production." It +is nonetheless widely shipped in production, the bridge IS injected into pages +served from the configured host (that is exactly how live-reload works), and +the documented failure modes are all secondary-host cases the single-host rule +avoids. Mitigations: the day-one prototype gate (§7) exists to falsify the +premise in hour one, and **every Capacitor major upgrade gets a mandatory +re-verification pass** — see the upgrade checklist (§10.3), which makes this a +budgeted recurring task rather than an unbudgeted surprise (judge 3 concern). + +--- + +## 2. Repo layout and Capacitor config + +In-repo in `mpdx-react` (confirms the prior decision) — same PRs update web +code, shell helpers, and native projects together. + +``` +mpdx-react/ +├── capacitor.config.ts # committed, env-switched server.url +├── ios/ # committed native project (Pods/ gitignored) +├── android/ # committed native project (build dirs gitignored) +├── capacitor-web/ # webDir stub: error.html only (v1) +├── docs/pwa-design/capacitor-shell.md # this doc +├── docs/pwa-design/capacitor-upgrade-checklist.md # §10.3 +└── src/lib/nativeShell/ # all shell-aware web code lives here + ├── isShell.ts # Capacitor.isNativePlatform() wrapper + UA fallback + ├── useNativeAuth.ts # platform-aware signIn/signOut helper (§4) + ├── useNativePush.ts # per push-registration-frontend.md + ├── useDeepLinks.ts # appUrlOpen → router.push (per deep-links.md) + ├── shellVersion.ts # UA parse + semver compare (§8) + └── UpgradeRequiredScreen.tsx +``` + +`capacitor.config.ts`: + +```ts +import { CapacitorConfig } from '@capacitor/cli'; + +const config: CapacitorConfig = { + appId: 'org.cru.mpdx', // PLACEHOLDER — see open question on org.mpdx reuse + appName: 'MPDX', + webDir: 'capacitor-web', // error.html stub; server.url overrides everything else + server: { + url: process.env.SHELL_TARGET === 'stage' + ? 'https://stage.mpdx.org' + : 'https://mpdx.org', + errorPath: 'error.html', + // allowNavigation: deliberately ABSENT (empty) — single-host rule, §1.1 + }, + ios: { + limitsNavigationsToAppBoundDomains: true, // REQUIRED — see below + }, + appendUserAgent: `MPDXShell/${shellVersion}`, // version handshake, §8 +}; +``` + +`ios/App/App/Info.plist` additions: + +- `WKAppBoundDomains = [mpdx.org]` (+ `stage.mpdx.org` in debug builds). + This single key is load-bearing: it is what unlocks **service workers and + durable storage in WKWebView** (iOS 14+, max 10 domains), and per Capacitor + iOS troubleshooting docs, `limitsNavigationsToAppBoundDomains: true` must + accompany it or bridge injection fails ("plugin not implemented"). + Constraint accepted: the webview is hard-capped to listed domains — + currently theoretical since all external links open in the system browser. + +CSP check: the app currently sets no CSP headers (`next.config.ts` has none; +Amplify `customHttp.yml` only sets `sw.js` no-cache). If CSP is ever added, +Android's injected bridge script must be allowed (iOS `WKUserScript` injection +is CSP-exempt). Add a comment to that effect wherever CSP lands. + +### 2.1 Plugins (v1 set) + +| Plugin | Use | +| --- | --- | +| `@capacitor/app` | `appUrlOpen` (deep links + auth callback), `getInfo()` (version) | +| `@capacitor/browser` | system-browser auth (SFSafariViewController / Custom Tabs) | +| `@capacitor/push-notifications` | Phase 3 (see push-registration-frontend.md) | +| `@capacitor/camera` | contact photo capture (see camera-contact-photo.md) | +| `@capacitor/splash-screen` | §9 | +| `@capacitor/status-bar` | §9 | +| `@capacitor/haptics` | §9 (key actions) | +| `@capacitor/device` | prototype verification + diagnostics | +| `@capacitor/network` | optional; web `navigator.onLine` already drives `useIsOnline` | + +Deferred until Plan B triggers (§4.6): a secure-storage plugin +(Keychain/Keystore) for the Okta refresh token. + +All plugin calls live behind `src/lib/nativeShell/` gates on +`Capacitor.isNativePlatform()` — browsers never execute shell code paths. +`ServiceWorkerUpdatePrompt`'s manual SW registration stays as-is (the webview +is a same-origin browser; the Serwist update flow works identically). + +--- + +## 3. What transfers from Phases 1+2 (unchanged) + +The webview is a browser on the same origin, so: + +- Serwist allowlist SW (`src/service-worker/index.ts`) — Android WebView runs + SWs for https normally; iOS runs them **only** with App-Bound Domains (§2). +- IndexedDB Apollo persistence (`src/lib/apollo/cachePersistor.ts`), + `offlineLink` mutation blocking, `errorPolicy: 'all'`, `useIsOnline` + + `OfflineNotifier` — in-session offline reads for contacts/tasks work in the + shell for free. +- **Security invariants intact:** authenticated HTML/`__NEXT_DATA__` is never + cached (Phase 1), and every signout path calls `clearApolloData()` + (Phase 2). The shell adds to the signout invariant (§4.5) but never bypasses + it. + +--- + +## 4. Auth — the definitive flow + +### 4.1 Premises (verified in code by the judges) + +- NextAuth v4, **JWT session strategy** (`pages/api/auth/[...nextauth].page.ts:156`, + secret `JWT_SECRET`); the OktaProvider `signIn` callback swaps + `account.access_token` for an MPDX `apiToken` via the public `oktaSignIn` + GraphQL mutation, and **throws when `account.access_token` is absent** + (line ~161). +- `oktaSignIn` / `apiOauthSignIn` are public rootFields on + `api.mpdx.org/graphql` (`src/graphql/rootFields.generated.ts:71,120`); the + Rails validator (`okta_validator_service.rb:37-46`) allowlists the access + token's `cid` against comma-split `OKTA_AUTH_CLIENT_IDS` and validates + server-side via Okta userinfo. The `apiToken` is a 30-day JWT + (`authenticate.rb:11`). +- `RouterGuard.tsx:32` calls `signIn('okta')` directly; `src/lib/apollo/client.ts` + has the `AUTHENTICATION_ERROR` → `signOut` path. Both must become + platform-aware. +- Okta and Google block embedded webviews (`disallowed_useragent`), so the + interactive login MUST run in a system browser — but the NextAuth session + cookie must end up in the **webview's** jar, and the system browser's jar is + separate. The trick: **never run NextAuth's OAuth redirect dance in the + system browser at all.** The system browser only obtains an Okta access + token; the webview itself makes the cookie-setting request. + +### 4.2 Flow, step by step (Okta provider) + +1. **Okta app registration (admin task, blocked on Daniel):** a NATIVE public + client, PKCE, no secret. Redirect URIs: `org.mpdx://auth-callback` (iOS) + and `https://mpdx.org/auth/native-callback` (Android verified App Link — + see §4.4). Scopes: `openid email profile` (+ `offline_access` only if + Plan B activates, §4.6). +2. **Backend deploy-config change (corrects the proposal's "no backend + changes" claim — judge 1 concern #1):** append the new client's ID to + `OKTA_AUTH_CLIENT_IDS` in mpdx_api deploy config (cru-deploy/ECS), or + `oktaSignIn` rejects with "Invalid access_token cid." One line, but it is + real backend coordination — schedule it with the Okta registration. +3. All "start login" call sites (`RouterGuard.tsx:32`, login page, the Apollo + `AUTHENTICATION_ERROR` handler's re-auth path) route through one helper in + `src/lib/nativeShell/useNativeAuth.ts` that branches on + `Capacitor.isNativePlatform()`: browsers keep `signIn('okta')` unchanged; + the shell runs steps 4–8. +4. Webview JS generates PKCE `code_verifier`/`challenge` + `state` (held in + memory only — never persisted, never logged), opens the Okta `/authorize` + URL via `@capacitor/browser`: SFSafariViewController on iOS (upgrade to an + ASWebAuthenticationSession plugin if SFVC dismissal UX is poor — both are + system-browser contexts that pass Okta's user-agent check), Chrome Custom + Tabs on Android. The user authenticates; Okta's SSO cookie lives in the + system browser — that separation is a **feature** (RFC 8252: SSO shared + across apps, credentials never visible to our code). +5. Okta redirects to the callback (§4.4); Capacitor's `appUrlOpen` (or the + ASWebAuthenticationSession completion handler) delivers the URL. JS + validates `state`, calls `Browser.close()`. +6. Webview JS exchanges `code + verifier` for the Okta access token via a + small Next.js API route **`/api/auth/native/token`** that proxies Okta's + token endpoint (avoids Okta CORS/Trusted-Origin configuration; the client + is public so no secret is involved; the route forwards only the code + exchange and returns the token to same-origin callers). +7. **The cookie move:** webview JS calls `signIn('native-okta', { accessToken })` + — `next-auth/react` first fetches `/api/auth/csrf`, then POSTs to + `/api/auth/callback/native-okta`, all same-origin **from inside the + webview**, so NextAuth's `Set-Cookie` (session JWT, + `__Secure-next-auth.session-token`, HttpOnly/Secure/Lax) lands directly in + the WKWebView / Android WebView cookie jar. No cookie ever transfers + between jars. +8. NextAuth changes in `pages/api/auth/[...nextauth].page.ts` (~80 lines, + Critical-pattern file — mandatory security review): + - **CredentialsProvider `native-okta`** whose `authorize()` runs the same + `oktaSignIn` mutation the OktaProvider path runs and returns the user + with `apiToken`/`userID`. No new trust is granted: the Rails API + validates the Okta token server-side; garbage tokens fail exactly as + they would today. CredentialsProvider requires the JWT session strategy + — already in use. The existing `jwt`/`session` callbacks run unchanged. + - **`signIn` callback branch:** early `return true` for + `account.provider === 'native-okta'` (authorize already did the work); + the existing throw stays for every other provider. +9. Steady state: the webview holds a first-party NextAuth session cookie; + SSR/`getServerSideProps` session checks, `useSession`, Apollo + `makeAuthLink(apiToken)` — identical to the browser. NextAuth's 30-day + rolling session applies. When the embedded `apiToken` expires (the session + callback throws "Expired API token"), RouterGuard's existing + connectivity-gated re-auth fires the step-3 helper → system browser + reopens → surviving Okta SSO makes it near-silent (a brief browser sheet + flash). + +**API_OAUTH variant (Doorkeeper):** same shape. Backend change = register a +**public** (secretless) Doorkeeper application with the native redirect URIs +(Doorkeeper PKCE is already exercised — the existing provider sets +`checks: ['pkce','state']`); the CredentialsProvider calls `apiOauthSignIn` +instead. This is also the prototype's fallback path if Okta admin is slow — +Daniel controls Doorkeeper client registration on stage. + +### 4.3 Security posture of the new endpoints (judge 1 concern #3) + +`/api/auth/callback/native-okta` is publicly reachable from any browser: +anyone holding a valid, allowlisted Okta access token can mint a NextAuth web +session cookie. This is **trust-equivalent to the already-public `oktaSignIn` +mutation** (same credential, same server-side validation, same resulting +capability), so no privilege is added — but both new surfaces get hardening: + +- Rate-limit `/api/auth/native/token` and rely on NextAuth's built-in CSRF + for the credentials callback. +- The token-proxy route accepts only the fields needed for the code exchange, + never logs request bodies, and returns Okta errors opaquely. +- Both files are Critical-pattern (`pages/api/auth/**`) — route the PR through + the security agent with this section as context. +- **Token-handling rules in webview JS (judge 1 concern #5):** the Okta access + token transits JS memory between steps 6 and 7 — exchange immediately, hold + in a local variable only, never in storage/Redux/Apollo, never logged. XSS + in the hosted app could harvest it during the seconds it exists; this is + the same exposure class as the existing apiToken-in-session, and the window + is seconds, not a session. Webview process death mid-login simply restarts + the flow (state/verifier are per-attempt). A future hardening option is + moving PKCE + exchange fully into the native layer; not needed for v1. + +### 4.4 Callback transport (judge 1 concern #6) + +- **Android: verified App Link** — `https://mpdx.org/auth/native-callback` + with `autoVerify` intent filter backed by `assetlinks.json`. Custom schemes + are claimable by malicious apps on Android; verified App Links are not. + PKCE already makes an intercepted code useless, but prefer the verified + channel. (The page itself is a no-op fallback that says "return to the app" + for the edge case where verification fails and it opens in a browser.) +- **iOS: custom scheme `org.mpdx://auth-callback`** via + SFSafariViewController + `appUrlOpen` (or ASWebAuthenticationSession, whose + completion handler captures the callback in-process — not interceptable the + way Android schemes are). Per `deep-links.md`, the custom scheme is reserved + exclusively for the OAuth return. + +### 4.5 Sign-out + +Native-aware signout path, in order: + +1. DELETE the push device registration (`/api/v2/user/devices/:id`) while the + token is still valid — per push-registration-frontend.md. +2. Run the existing web signout, which calls **`clearApolloData()`** (pause → + clearStore → purge — the Phase 2 invariant, extended: "clear Apollo data + + deregister device + clear offline-viewer session marker (§5.3)"). +3. Default: **skip** the Okta `/login/signout` redirect in-shell — it would + log the user out of the system browser's SSO across all apps. Product + decision; flagged as an open question. + +### 4.6 Plan B — Keychain refresh token (grafted from `bundled-shell`) + +WKWebView cookie persistence has a documented flakiness history (Capacitor +#6809, #1373). The design does NOT depend on solving it: cookie loss degrades +to a near-silent system-browser SSO re-auth (a browser-sheet flash), which is +annoying, not fatal. **If** the Day 2 persistence battery (§7) shows cookies +evaporating in practice, activate Plan B: + +- Request `offline_access` on the native client; store the Okta refresh token + in iOS Keychain / Android Keystore via a secure-storage plugin. +- On cookie loss or apiToken expiry: natively refresh the access token, then + re-run step 7 (`signIn('native-okta', ...)`) silently from the webview — no + browser flash, no user interaction. +- Preconditions to verify before relying on it: the Okta org grants refresh + tokens to public native clients (org policy — open question), and the + secure-storage plugin choice passes review. Plan B adds auth surface + (long-lived credential on device), so it ships only if the battery proves + it necessary. + +--- + +## 5. Offline story + +### 5.1 v1: in-session offline + errorPath + +Phase 2 in-session offline transfers unchanged (§3). Cold-start offline in v1 +is the branded `error.html` retry page — same as the web's posture today, and +explicitly roadmap-approved. + +### 5.2 v1.1: same-origin offline viewer (the hybrid payoff) + +The naive "bundled viewer reads the persisted cache" is dead on arrival: +IndexedDB/CacheStorage/localStorage are origin-scoped in both WKWebView +(`WKWebsiteDataStore`) and Android WebView (Chromium). Bundled +`capacitor://localhost` content cannot read `https://mpdx.org`'s IndexedDB. +A native-mirror pipeline (plugin bridge + snapshot format + second purge path +duplicating the `clearApolloData()` invariant) was considered and rejected as +too much machinery for read-only views. + +Instead: an **unauthenticated, CSR-only, SW-precached route on the app +origin** (extending the existing precached `/offline` page) that boots Apollo +from the persisted cache (`cachePersistor.restore()`) and renders read-only +contacts/tasks lists + details. Because it is precached and embeds no +session/`__NEXT_DATA__` secrets, it satisfies the Phase 1 security rule; +because it is same-origin, it reads the real cache the user's daily browsing +keeps warm — **fresh** cold-start data, the thing `bundled-shell` could not +deliver. The SW's `fallbacks` entry already routes failed navigations to +`/offline`, so cold-start offline becomes: launch → remote load fails → SW +serves the precached viewer → data from IndexedDB. + +Preconditions (judge 2 concern #4 — each is a prototype/QA item, §7): + +1. SW running in the webview (Android: yes for https; iOS: only with + App-Bound Domains — set from day one so durability is proven before v1.1). +2. SW installed on a prior online launch (first-ever-launch offline still + gets `error.html` — acceptable). +3. **All viewer route JS chunks in the precache manifest** — verify against + `@serwist/next`'s generated manifest / `additionalPrecacheEntries` in + `next.config.ts`; runtime CacheFirst with `maxEntries: 64` is NOT a + substitute. Add a CI assertion if feasible. +4. IndexedDB survives multi-week disuse on device (ITP eviction should not + apply to default WKWebView configs and app-bound domains get full storage + entitlements — but prove it with a soak test). + +### 5.3 Viewer access gate (judge 2 concern #2) + +The viewer is unauthenticated by construction (precached HTML cannot embed a +session). Honest framing: the contact/task data already sits unencrypted in +IndexedDB — the viewer adds convenience, not new exposure; the device lock is +the real boundary. Mitigations, in scope for v1.1: + +- A non-sensitive `offlineViewerSession` marker (localStorage: boolean + last + user display name, no tokens) set on login and **cleared by + `clearApolloData()`**; the viewer renders data only when the marker exists. + This is a UX/abuse gate, not a cryptographic boundary — say so in the code + comment. +- The viewer goes through the same security review process that produced the + Phase 1 invariant before it ships. If review demands stronger gating, the + fallback is encrypting the persisted cache at rest (a `persistCache` + `serialize` hook) keyed by a native-stored secret — scoped only if demanded. + +### 5.4 Estimate and staging (judge 2 concern #3, judge 3 concern #4) + +Re-estimated at **3 weeks**, not the proposal's 1–2: 11 files use +`useRequiredSession`, `ContactsContext` is `next/router`-coupled, and a +session-less cache-only render path for list AND detail views is a real +refactor. Staging decision (resolves the "pull it forward is unactionable" +concern): **build the viewer immediately after shell v1 core, in parallel +with store-account/CI work — do not block first submission on it, but do not +wait for a rejection to start it.** If it lands before review concludes, it +joins the receipts list; if Apple rejects on 4.2, it is weeks from shipping, +not a cold start. Prerequisite folded in: the deferred Phase 2 +`persistenceMapper` hardening (persist only the read-relevant subset) — the +viewer defines exactly which data matters. Drift control: the viewer reuses +the existing list/detail components with a session-stub provider and shares +the same `.graphql` documents, so codegen keeps it in lockstep; add tests that +mount the viewer entry to catch session-coupling regressions (judge 3's +"future contributors can silently break the fork" concern). + +--- + +## 6. Push, deep links, camera (integration points) + +Designed in detail in sibling docs; the shell decisions they depend on are +locked here: + +- **Push** (`push-registration-frontend.md`): wiring lives in the *remote* + web app (`useNativePush`, gated on `isNativePlatform()`) — valid because + the bridge injects into the `server.url` host. Registration from the + notification-settings UI (never on first launch), `registration` listener → + POST `/api/v2/user/devices` (platform `APNS`/`GCM`), re-register on + rotation, **deregister on every signout path** (§4.5). + `pushNotificationActionPerformed` → `router.push(notification.data.deepLink)`. +- **Deep links** (`deep-links.md`): `appUrlOpen` → strip to same-origin path + → `router.push`. `assetlinks.json` gains the new signing-cert fingerprint + (keep the legacy `org.mpdx` entry); `apple-app-site-association` recreated + with placeholder `TEAMID.org.cru.mpdx` until Apple account details land. +- **Camera** (`camera-contact-photo.md`): `@capacitor/camera` from the + contact-detail page behind `isShell`; browsers keep the file-upload path. + Works on the remote page because of the single-host rule (we never navigate + to a second host, so we never hit #4164). **Demo-ready at first store + submission** (grafted from both runners-up). + +--- + +## 7. Day-one prototype — the FIRST implementation task + +Nothing else in Phase 4 is built until these gates pass. The prototype +validates the two assumptions that can invalidate the architecture: bridge +injection on the remote origin, and the auth round-trip landing a working +session cookie in the webview. + +**Day 1 AM — shell premise** + +- `npx cap init` in `mpdx-react` (stage appId), add iOS + Android platforms, + `capacitor.config.ts` with `server.url` → stage, `WKAppBoundDomains` + + `limitsNavigationsToAppBoundDomains: true`, `error.html` stub. +- Verify on iOS simulator + Android emulator via Safari/Chrome inspector: + `Capacitor.isNativePlatform() === true` on the remote page, + `Device.getInfo()` resolves, `navigator.serviceWorker` defined and `sw.js` + registers (iOS app-bound check), IndexedDB readable. +- **Gate 1: if bridge injection fails on the remote origin, the `server.url` + premise is invalid — stop and escalate.** (The auth design survives — it is + webview-agnostic — but the architecture around it does not.) + +**Day 1 PM — auth spike** + +- Negative control: tap the existing `signIn('okta')` in the webview; record + the exact Okta failure (evidence for the system-browser decision). +- Wire the spike on a stage branch: stage native PKCE client (**Doorkeeper + `API_OAUTH` path if Okta admin hasn't responded** — Daniel controls stage + Doorkeeper; Okta in parallel) + `@capacitor/browser` + hardcoded PKCE + + `appUrlOpen` + a throwaway CredentialsProvider. +- Assert `/api/auth/session` returns the user from webview JS (the cookie is + HttpOnly — do not check `document.cookie`), then that `/accountLists` + renders authenticated on both platforms. +- **Gate 2: system-browser round-trip lands a working session in the webview + on BOTH platforms.** + +**Day 2 — persistence battery + negative tests** + +- Kill app → relaunch: still authenticated. Set cookie → background + immediately → force-kill (the known WKWebView cookie-sync flake). Device + reboot. Start a 48h+ soak (extends past day 2; also seeds the multi-week + IndexedDB durability soak for §5.2). +- apiToken-expiry → re-auth loop via system-browser SSO (shorten token TTL on + stage if possible). Logout/login cycle, confirming `clearApolloData()` runs. +- Airplane mode mid-session → Phase 2 offline contacts render in the webview. +- Negative: tampered `state` rejected; replayed authorization code rejected + (Okta enforces single-use); CredentialsProvider rejects a garbage token. +- **Gate 3: cookie survives restart.** If flaky → activate Plan B (§4.6) + before building further; degraded persistence alone is not a stop-ship. + +Every gate has a named, bounded remediation; only Gate 1 failure invalidates +the architecture. + +--- + +## 8. Shell version handshake (judge 3 concern #3 — ownership specified) + +- **Transport:** `appendUserAgent: 'MPDXShell/'` (readable by SSR and + client alike) + `App.getInfo()` as the client-side confirmation. +- **Minimum version source:** a constant `MIN_SUPPORTED_SHELL_VERSION` in + `src/lib/nativeShell/shellVersion.ts`, **owned by the frontend repo and + changed via reviewed PR**. Because web deploys land in every shell + instantly, a constant shipped with the deploy IS server-driven config — no + new endpoint, no env plumbing. (The `bundled-shell` `/api/mobile/config` + endpoint idea is unnecessary in a one-bundle world; revisit only if we ever + need to vary the minimum per platform without a deploy.) +- **Enforcement:** `_app`-level check when `isShell` — below minimum renders + `UpgradeRequiredScreen` (blocking, i18n'd via `t()`, store link via + platform detection). The screen must not block the signout path. +- **Why it matters:** the web side WILL evolve past old binaries' plugin + surface (e.g., a new camera API). Bump the constant in the same PR that + starts requiring the new capability. +- **Testing:** unit tests for the semver compare + UA parse + (`shellVersion.test.ts`); manual old-shell × new-web matrix item in the + release checklist (§11). Apple-review angle: the handshake doubles as the + "app purpose cannot silently change server-side" control story. + +--- + +## 9. Native polish (roadmap items) + +- **App icons:** generate both stores' sets from the existing 1024px source + with `@capacitor/assets` (`icon-only` + adaptive-icon foreground/background + for Android 13+ themed icons). The maskable 512px PWA icon already exists; + reuse the same artwork. +- **Splash screen:** `@capacitor/splash-screen` + `@capacitor/assets` from a + 2732×2732 source; `launchAutoHide: false`, hide programmatically when the + webview signals first meaningful paint (a `nativeShell` bridge call from + `_app` after hydration) — avoids the white flash between native splash and + remote load. Background color = MUI theme primary (use the token from + `src/theme.ts`, not a hardcoded hex). +- **Status bar:** `@capacitor/status-bar` — style matched to the app bar + color via theme token; `overlaysWebView: false` initially (simplest + safe-area story); revisit overlay mode only if design wants edge-to-edge. +- **Safe areas:** `viewport-fit=cover` already present in `_app.page.tsx`. + Audit fixed-position chrome (app bar, bottom navs, snackbars, modals) for + `env(safe-area-inset-*)` padding when `isShell`; prefer a small styled + wrapper over sprinkling raw `env()` (theme-token rule). +- **Haptics:** `@capacitor/haptics` on key actions only (task complete, + pull-to-refresh trigger if added, destructive confirmations) behind + `isShell` — restraint over novelty. +- **Pull-to-refresh / overscroll:** decide during prototype dogfooding; + default to the webview's native behavior, disable rubber-band artifacts if + they look broken (`overscroll-behavior` CSS first, native config second). +- **Keyboard:** verify form fields aren't obscured (Capacitor keyboard + defaults usually suffice in `server.url` mode; add `@capacitor/keyboard` + config only if QA shows problems). + +--- + +## 10. Update / release story + +### 10.1 Lanes + +- **Web changes (≈99% of future work):** deploy to Amplify → live in every + shell instantly. No store review, no OTA infra, no second build artifact. +- **Native changes** (plugins, config, icons/splash, SDK bumps): store + releases via Fastlane CI (build + signing lanes for both platforms — + blocked-on-Daniel: Apple/Google accounts + keys). Expected a handful per + year. + +### 10.2 Deploy freeze during review (judge 3 concern #2 — made concrete) + +Reviewers see the live site. Process rule with teeth, not vibes: + +- A `STORE_REVIEW_FREEZE.md` flag file checked by a lightweight CI step (or a + GitHub environment protection rule on the Amplify-deploy workflow) — when a + store review is in flight, merges to the deploy branch require an explicit + override approval. Cheap to build, removes the "someone forgot" failure + mode. Added to the store checklist (§11). + +### 10.3 Capacitor upgrade checklist (judge 3 concern #1 — budgeted) + +`docs/pwa-design/capacitor-upgrade-checklist.md`, run on every Capacitor +major (and any WKWebView-relevant iOS major): + +1. Bridge injection on the remote origin (Gate 1 procedure from §7). +2. SW registration + IndexedDB on iOS (App-Bound Domains still honored). +3. Cookie persistence smoke (kill/relaunch). +4. Auth round-trip on both platforms. +5. Re-read Capacitor release notes for `server.url` posture changes. + +--- + +## 11. Store-submission checklist (skeleton) + +**Accounts & signing (blocked on Daniel)** + +- [ ] Apple Developer account + Team ID → fill `apple-app-site-association` + (the repo has a MISNAMED `apple-app-site-association.json` with legacy + content — appID `DQ48D9BF2V.org.cru.mpdx`, paths `/accountLists/*/contacts/*`, + `/contacts/*`, `/auth/mobile`; Apple fetches the extensionless path, so it + is dead as served. T18 deletes it and creates the extensionless file per + deep-links.md. Master plan §3.4 R8.) +- [ ] Google Play account; signing decision: reuse `org.mpdx` package (ONLY if + we hold its signing key — else new appId + new `assetlinks.json` entry, + keeping the legacy entry) +- [ ] iOS bundle ID registered (placeholder `org.cru.mpdx`); APNs `.p8` key + for the SNS platform app (coordinates with fcm-v1-backend.md) +- [ ] Firebase project + `google-services.json` (Android push) +- [ ] Fastlane match / Play signing configured in CI + +**Apple** + +- [ ] App Store listing: name, subtitle, description, keywords, screenshots + (6.7" + 13" iPad if supported), age rating +- [ ] Privacy labels (data collected: contacts data? analytics? — audit + against actual SDK surface; we add no third-party SDKs) +- [ ] **4.2 receipts document** in review notes: native push, camera contact + photos (demo-ready), offline contact/task viewing (in-session v1; + viewer if landed), universal links, native splash/status-bar/haptics +- [ ] Demo account for reviewers (stage or scrubbed prod account) +- [ ] `WKAppBoundDomains` lists prod only in the release build +- [ ] Budget one rejection/appeal cycle in the launch timeline +- [ ] Deploy freeze active (§10.2) while review is in flight + +**Google** + +- [ ] Play listing + Data safety form +- [ ] App Links verification passes (`assetlinks.json` fingerprint matches + release signing cert — check Play App Signing's cert, not the upload key) +- [ ] Backups stay disabled (`android:allowBackup="false"` + + `data_extraction_rules.xml` excluding all data from cloud backup and + device transfer) — the webview cookie store carries the NextAuth + session, so a backup/restore would move an authenticated session to + another device. Re-verify in the merged manifest after any Capacitor + or plugin upgrade +- [ ] Internal testing track soak before production rollout + +**Both** + +- [ ] Shell version handshake verified: old binary + new web shows + `UpgradeRequiredScreen`; current binary passes +- [ ] Push end-to-end on real devices (APNs + FCM v1, per fcm-v1-backend.md) +- [ ] Auth battery (§7 Day 2) re-run on release builds +- [ ] Airplane-mode QA: in-session offline + errorPath (+ viewer if shipped) +- [ ] Lighthouse PWA audit (carried from Phase 1 checklist) + +--- + +## 12. Resolved judge concerns — index + +| # | Concern (judge/lens) | Resolution | +| --- | --- | --- | +| 1 | "No backend changes" claim false — `OKTA_AUTH_CLIENT_IDS` append needed (auth) | Acknowledged + scheduled as deploy-config task (§4.2 step 2) | +| 2 | Blocked on Okta admin for native client (auth) | Doorkeeper/API_OAUTH path proves the architecture on stage (§4.2, §7); Okta registration is an open question for Daniel | +| 3 | `native-okta` callback publicly reachable (auth) | Trust-equivalence documented; rate limiting + CSRF + Critical-pattern security review (§4.3) | +| 4 | WKWebView cookie flakiness (auth, maint) | Day 2 persistence battery is a hard gate; Plan B (Keychain refresh token) grafted from bundled-shell (§4.6) | +| 5 | PKCE/state/access token in webview JS memory (auth) | Handling rules in §4.3; exposure window is seconds; native-layer PKCE noted as future hardening | +| 6 | Custom-scheme interception on Android (auth) | Verified App Links callback on Android; iOS scheme is session-captured (§4.4) | +| 7 | `okta_validator_service.rb:51` logs raw tokens (auth) | Backend task: remove before launch (tasks list) | +| 8 | `server.url` "not for production" + per-upgrade re-verification (all) | Day-one Gate 1 + budgeted upgrade checklist (§10.3) | +| 9 | v1 ships no cold-start offline; "pull forward" unactionable (UX) | Decision made now: viewer built immediately after v1 core, parallel to store prep, not blocking submission (§5.4) | +| 10 | Unauthenticated viewer reads cache without session gate (UX, maint) | Session-marker gate + honest framing + dedicated security review; encryption fallback scoped (§5.3) | +| 11 | Viewer estimate optimistic (UX) | Re-estimated 3 weeks; session-stub + persistenceMapper folded in (§5.4) | +| 12 | Cold-start precondition stack unverified (UX) | Each precondition is a named prototype/QA item incl. precache-manifest check + durability soak (§5.2, §7) | +| 13 | Deploy freeze during review not tooled (maint) | CI flag/environment protection (§10.2) | +| 14 | Version-handshake ownership/testing unspecified (maint) | Constant in repo, PR-owned, unit-tested, release-matrix item (§8) | +| 15 | CredentialsProvider adds surface in Critical file; NextAuth v4 maintenance mode (maint) | Accepted; ~80 paved-road lines beats bespoke JWE minting; Auth.js v5 migration named a risk | +| 16 | Apple 4.2 rejection budget (all) | Camera demo-ready, receipts doc, viewer in flight, one rejection cycle budgeted (§11) | + +--- + +## 13. Open questions for Daniel + +1. **Okta native client:** can Okta admin register a native public PKCE + client (redirect URIs in §4.2/§4.4)? Does the org allow `offline_access` + refresh tokens for public clients (needed only for Plan B)? +2. **Android package identity:** do we hold the `org.mpdx` signing key from + the legacy app? Reuse vs. new appId decides `assetlinks.json` and Play + listing continuity. +3. **Apple account:** Team ID + bundle ID to replace placeholders in + `apple-app-site-association` and `capacitor.config.ts`; APNs `.p8` for SNS. +4. **AWS console check** (carried from Phase 3): SNS GCM platform credential + type + APNs cert/bundle ID; Firebase project + `google-services.json`. +5. **Okta global signout in-shell:** sign out of MPDX only (default in this + design) or also kill the system browser's Okta SSO session? +6. **Offline viewer gating:** is the session-marker + device-lock posture + (§5.3) acceptable to the security review, or do we scope cache-at-rest + encryption? diff --git a/docs/pwa-design/deep-links.md b/docs/pwa-design/deep-links.md new file mode 100644 index 0000000000..fc33ad4e49 --- /dev/null +++ b/docs/pwa-design/deep-links.md @@ -0,0 +1,610 @@ +# Deep Linking Design — Push Taps + Universal Links / App Links (Phases 3+4) + +Status: DESIGN — 2026-06-10 +Owner repos: `mpdx-react` (frontend + shell + `.well-known` files), `mpdx_api` (payload link building) +Coordinates with: the FCM-v1 payload migration design (which defines *where* the +`deepLink` field sits in APNs custom keys and FCM v1 `message.data`) and the +Capacitor shell / auth design (system-browser auth flow, `server.url` mode). + +--- + +## 0. Core decision: one link format for everything + +**The `deepLink` value is a same-origin absolute web path** — path + query, no +scheme, no host: + +``` +/accountLists//contacts/?tab=Donations +``` + +One format serves all three consumers: + +1. **Push tap inside the shell** — `pushNotificationActionPerformed` hands us + `notification.data.deepLink`; we `router.push(path)` directly. +2. **Universal links / app links** — the same paths under `https://mpdx.org` + open the installed app; `appUrlOpen` hands us the full URL and we strip it + back to the path. +3. **Web fallback** — a user without the app (or email links) lands on the + exact same page in the browser. `WebRouter.contact_url` already generates + these URLs for emails today, so paths are guaranteed to stay aligned with + real frontend routes. + +Why a path and not a full URL: it is environment-agnostic (prod/stage/local +all work without baking `FRONT_END_URL_BASE` into the push payload), it is +trivially validated client-side (must start with a single `/`), and it cannot +become an open redirect. + +Why not a custom scheme (`mpdx://`): custom schemes need a second routing +table, don't degrade to web, and are not needed — Capacitor's +`appUrlOpen` + `pushNotificationActionPerformed` both deliver arbitrary +strings. (The auth design may still use a custom scheme for the OAuth +callback; that's orthogonal — see §7.) + +--- + +## 1. Backend: notification types → routes + +### 1.1 What exists today (verified in code) + +- All push sends flow through exactly two call sites, both of which already + call `NotificationType#user_notification_options(user_notifications)`: + - `User::Notification.create_by_type` (`app/models/user/notification.rb:30`) + - `Api::V2::User::Notifications::BulkController` (`bulk_controller.rb:24`) +- `user_notification_options` (base `NotificationType`, no subclass overrides) + already returns: + - single notification → `{ contact_url: WebRouter.contact_url(contact), account_list_id: contact.account_list_id }` + - multiple notifications → `{ account_list_id: contact.account_list_id }` +- **`account_list_id` availability: confirmed.** Every `Notification` + `belongs_to :contact`, and `contact.account_list_id` is a direct column — + the payload-building context already uses it. No new data plumbing needed. +- `WebRouter.contact_url(contact, tab)` already supports a `?tab=` param, and + the frontend `ContactDetailProvider` reads `query.tab` into + `ContactDetailTabEnum` (`Tasks | Donations | Referrals | ContactDetails | Notes`, + default `Tasks`). The tab values below are those exact enum strings. + +### 1.2 Route map per push-worthy notification type + +Push-worthy types = `NotificationType.types` (the 22 subclasses in +`types_to_check` + `types_not_to_check`). Every one of them hangs off a +contact, so the single-notification case is always a contact-detail path; the +`?tab=` lands the user on the most actionable tab. + +| NotificationType | Tab | deepLink (single notification) | +| --- | --- | --- | +| LargerGift, SmallerGift, SpecialGift, StartedGiving, StoppedGiving, RecontinuingGift, LongTimeFrameGift | `Donations` | `/accountLists/:alid/contacts/:cid?tab=Donations` | +| NewDesignationAccountSubscription, NewPageSubscription | `Donations` | `/accountLists/:alid/contacts/:cid?tab=Donations` | +| CallPartnerOncePerYear, ThankPartnerOncePerYear, RemindPartnerInAdvance | `Tasks` (default) | `/accountLists/:alid/contacts/:cid` | +| MissingAddressInNewsletter, MissingEmailInNewsletter, MailchimpBounce, MailchimpUnsubscribe, NewAddress, UpcomingBirthday, UpcomingAnniversary | `ContactDetails` | `/accountLists/:alid/contacts/:cid?tab=ContactDetails` | +| NewPartnerNoDuplicate, NewPartnerDuplicateMerged | default | `/accountLists/:alid/contacts/:cid` | +| NewPartnerDuplicateNotMerged | — | `/accountLists/:alid/tools/merge/contacts` (the actionable screen is the merge tool, not the contact) | + +**Multiple notifications batched into one push** (the `user_notifications.many?` +branch): there is no dedicated notifications page in the frontend (the bell +lives in the TopBar), so the tap target is the dashboard: + +``` +/accountLists/:alid +``` + +**Fallback rule:** any type not in the map (future types) → contact detail if +a contact is present, else `/accountLists/:alid`, else `/accountLists`. + +### 1.3 Rails implementation + +Add a single, easily-testable builder rather than 22 subclass overrides: + +`app/services/user/device/deep_link_builder.rb` + +```ruby +class User::Device::DeepLinkBuilder + TAB_BY_TYPE = { + 'NotificationType::LargerGift' => 'Donations', + # ... per table above; nil entries omitted + 'NotificationType::MissingAddressInNewsletter' => 'ContactDetails', + # ... + }.freeze + + MERGE_TOOL_TYPES = ['NotificationType::NewPartnerDuplicateNotMerged'].freeze + + def self.build(notification_type:, user_notifications:) + contact = user_notifications.first.notification.contact + alid = contact.account_list_id + return "/accountLists/#{alid}" if user_notifications.many? + return "/accountLists/#{alid}/tools/merge/contacts" if MERGE_TOOL_TYPES.include?(notification_type.type) + + tab = TAB_BY_TYPE[notification_type.type] + path = "/accountLists/#{alid}/contacts/#{contact.id}" + tab ? "#{path}?tab=#{tab}" : path + end +end +``` + +Wire-in: `NotificationType#user_notification_options` adds the key — + +```ruby +def user_notification_options(user_notifications) + contact = user_notifications.first.notification.contact + opts = { + account_list_id: contact.account_list_id, + deep_link: User::Device::DeepLinkBuilder.build( + notification_type: self, user_notifications: user_notifications + ) + } + opts[:contact_url] = WebRouter.contact_url(contact) unless user_notifications.many? + opts +end +``` + +- **Keep `contact_url`** (full URL) — the legacy native app may still parse it; + removing it buys nothing. +- `opts` continues to flow `to_json` through `PublishWorker` → + `PublishService`. The FCM-v1 design owns placing `deep_link` into + FCM v1 `message.data.deepLink` and as an APNs top-level custom key + `deepLink` (replacing the legacy `link: { data: ... }` wrapper for the new + shell — keep the legacy key too until the old app is sunset). Naming + handshake with that design: **Ruby side `deep_link` in opts; wire format in + the push payload is camelCase `deepLink`** (FCM data values must be strings, + and the shell reads `notification.data.deepLink`). + +--- + +## 2. apple-app-site-association (AASA) + +### 2.1 Current state — broken in two ways + +`public/.well-known/` contains **`apple-app-site-association.json`** — wrong +filename. Apple fetches `/.well-known/apple-app-site-association` with **no +extension**, so the existing file is unreachable at the spec'd URL (this is +why the shared context calls it "empty/missing"). Its legacy content is still +useful intel: the old appID was **`DQ48D9BF2V.org.cru.mpdx`** (team ID +`DQ48D9BF2V`, bundle `org.cru.mpdx`) and it allowed +`/accountLists/*/contacts/*`, `/contacts/*`, `/auth/mobile`. + +### 2.2 New file + +Create `public/.well-known/apple-app-site-association` (extensionless), +delete the misnamed `.json` file: + +```json +{ + "applinks": { + "details": [ + { + "appIDs": ["DQ48D9BF2V.org.cru.mpdx"], + "components": [ + { "/": "/accountLists/*", "comment": "All app screens incl. contacts, tasks, reports" } + ] + } + ] + }, + "webcredentials": { + "apps": ["DQ48D9BF2V.org.cru.mpdx"] + } +} +``` + +- Modern `appIDs` + `components` format (iOS 13+; our shell targets far + newer). `apps: []` inside `applinks` is no longer required in the modern + format. +- `TEAMID.BUNDLEID` placeholder policy: **use `DQ48D9BF2V.org.cru.mpdx` as the + working assumption** (it was the legacy production appID) but treat it as a + placeholder until Daniel confirms the Apple team ID and whether the new + shell reuses bundle `org.cru.mpdx` (reusing it = updating the old App Store + listing, which preserves existing installs). +- `webcredentials` is included because the auth flow + (`ASWebAuthenticationSession` / password autofill) benefits from it for free. +- **Include only `/accountLists/*`.** Everything tappable from a push or + shareable as a screen lives there. Deliberately excluded: `/login`, `/api/*`, + `/auth/*` (NextAuth endpoints must stay in the browser/system flow — having + iOS hijack an OAuth redirect into the app mid-flow breaks it), `/acceptInvite` + (invite emails should work even where the app/session state is uncertain — + revisit later if wanted). If the auth design ends up needing a universal-link + return path (e.g. `/auth/mobile`), it adds one **exact** component here — + but note Apple does not reliably trigger universal links from HTTP redirects, + so the auth design should prefer `ASWebAuthenticationSession`'s callback + scheme instead (§7). +- Xcode side (shell repo work): Associated Domains entitlement + `applinks:mpdx.org` (+ `applinks:stage.mpdx.org?mode=developer` for dev + builds), `webcredentials:mpdx.org`. + +### 2.3 Serving requirements (Next + Amplify) + +Apple's CDN (`app-site-association.cdn-apple.com` fetches on app install) +requires: HTTPS, **no redirects**, 200, and `Content-Type: application/json` +(`text/json` also accepted; `application/octet-stream` is not). + +- Next.js serves `public/` files via static file serving with the MIME type + derived from the **extension** — an extensionless file is served as + `application/octet-stream`. So the content type must be forced. +- **Primary fix — `next.config.ts` `headers()`** (works in `yarn serve` + locally and on any host): + + ```ts + async headers() { + return [ + { + source: '/.well-known/apple-app-site-association', + headers: [{ key: 'Content-Type', value: 'application/json' }], + }, + ]; + }, + ``` + + Caveat to verify in the task: whether Amplify's CDN honors Next `headers()` + for public static assets in the SSR build (it should — Amplify runs the Next + server — but static assets may be served from S3/CloudFront directly). +- **Belt-and-braces — `customHttp.yml`** (already in repo for `sw.js`): + + ```yaml + - pattern: '/.well-known/apple-app-site-association' + headers: + - key: 'Content-Type' + value: 'application/json' + ``` + + Amplify custom headers apply at the hosting layer and win regardless of how + the asset is served. Do both. +- **Redirect check (manual, release checklist):** + `curl -sI https://mpdx.org/.well-known/apple-app-site-association` must be a + direct 200. If prod canonicalizes apex↔www with a redirect, the associated + domain in the entitlement must be the *final* host. Same check for + `assetlinks.json` (it presumably already passes, since the legacy Android + app depended on it). +- Debugging: AASA changes propagate through Apple's CDN with up to ~24h + delay/caching; use `?mode=developer` associated-domain flag on dev builds to + bypass the CDN during development. + +--- + +## 3. assetlinks.json (Android App Links) + +Current file is valid and live: package `org.mpdx`, one SHA-256 fingerprint +(`1C:10:CC:...:C1:8B`), `handle_all_urls`. + +**Key fact about fingerprints:** the fingerprint must match the certificate +that signed the APK *installed on the device*. For Play-distributed apps +that's the **Play App Signing key**, which Google holds per package name and +which does not change when the upload key or the codebase changes. + +Decision tree: + +1. **Reuse package `org.mpdx` (recommended if possible).** Ship the Capacitor + shell as an *update* to the existing Play listing. Existing installs + migrate in place, the Play App Signing key is unchanged, and the existing + fingerprint in `assetlinks.json` keeps working with **zero changes**. + Requires: Cru still controls the Play account/listing for `org.mpdx` + (open question for Daniel). The legacy app's minSdk/target history is + irrelevant; only package name + signing key matter. +2. **New package name** (e.g. `org.cru.mpdx`) if the listing is unrecoverable + or product wants a clean launch: Play generates a new App Signing key → + add a **second** JSON object to the `assetlinks.json` array with the new + package + new fingerprint (obtained from Play Console → App Signing after + the app is created). Keep the old entry until the legacy app is formally + sunset — the array supports multiple targets. +3. **Either way, add the debug keystore fingerprint** as an additional entry + (or additional fingerprint in the array) so app links verify on local dev + builds, or use `adb shell pm set-app-links` overrides during dev. + +AndroidManifest (shell repo work): `` +for `https` + host `mpdx.org` + ``. +Scope the intent filter to `/accountLists` rather than `handle_all_urls`-wide +`/` so that random mpdx.org marketing/auth URLs don't get captured by the app. +(The `relation` in assetlinks.json can stay `handle_all_urls`; the manifest is +what scopes capture.) + +--- + +## 4. Frontend: tap → navigation in the shell + +### 4.1 Module layout + +``` +src/lib/nativeShell/ + deepLink.ts # pure functions — the unit-testable core + deepLink.test.ts +src/components/NativeShell/ + NativeDeepLinkProvider.tsx # listener wiring (thin, effect-only) + NativeDeepLinkProvider.test.tsx +``` + +(`src/lib/nativeShell/` is the shared home the shell design should also use +for `isNativePlatform()` helpers; adjust the folder name to whatever the shell +design picks — the contract here is the function signatures.) + +### 4.2 Pure routing core (`src/lib/nativeShell/deepLink.ts`) + +```ts +const FALLBACK_ROUTE = '/accountLists'; + +/** Hosts whose universal links we are willing to route in-app. */ +export const allowedDeepLinkHosts = (): string[] => [ + // window.location.host covers server.url mode (prod or stage shell) + window.location.host, +]; + +/** + * Validates an in-payload web path (from push data). Returns a safe + * same-origin path or null. + * Rules: must be a string, start with exactly one '/', no scheme, no '\\', + * not '//host' protocol-relative, decodes cleanly. + */ +export const sanitizeDeepLinkPath = (value: unknown): string | null => { ... }; + +/** + * Converts a universal-link URL (appUrlOpen) to an in-app path. + * Returns null for disallowed hosts/schemes (caller ignores the event and + * lets nothing happen rather than navigating somewhere unexpected). + */ +export const deepLinkFromUrl = ( + url: string, + allowedHosts: string[], +): string | null => { ... }; + +/** + * Extracts the route from a push notification's data payload. + * Reads data.deepLink (string), falls back to FALLBACK_ROUTE when missing + * or invalid — a push tap must always land somewhere sensible. + */ +export const routeFromPushData = (data: unknown): string => { ... }; +``` + +Security invariants (these are the tests, §6.1): + +- Output always begins with a single `/` → `router.push` stays same-origin. + Reject `//evil.com`, `https://…`, `javascript:…`, `\` tricks, empty string. +- No allowlist of route shapes beyond same-origin: the payload comes from our + own backend over APNs/FCM, and worst case a bad path 404s inside the app. + Same-origin is the load-bearing check (open-redirect prevention). +- `deepLinkFromUrl` host check is exact-match against `allowedHosts` + (no `endsWith` suffix matching). + +### 4.3 Listener wiring (`NativeDeepLinkProvider`) + +Mounted once in `pages/_app.page.tsx` (inside the session/Apollo providers so +`router` is live), entire body gated on `Capacitor.isNativePlatform()`; +plugin modules loaded via dynamic `import()` so the web bundle is untouched. + +```tsx +export const NativeDeepLinkProvider: React.FC = () => { + const router = useRouter(); + + useEffect(() => { + if (!Capacitor.isNativePlatform()) { + return; + } + let cleanup = () => {}; + (async () => { + const { App } = await import('@capacitor/app'); + const { PushNotifications } = await import('@capacitor/push-notifications'); + + // Warm start: universal link tapped while app is running/backgrounded + const urlListener = await App.addListener('appUrlOpen', ({ url }) => { + const path = deepLinkFromUrl(url, allowedDeepLinkHosts()); + if (path) { + router.push(path); + } + }); + + // Push tap — warm start AND cold start. The Capacitor plugin queues the + // action that launched the app and replays it once a listener registers, + // so cold-start taps arrive here too, as long as this provider mounts + // early in app bootstrap. + const pushListener = await PushNotifications.addListener( + 'pushNotificationActionPerformed', + ({ actionId, notification }) => { + if (actionId === 'tap') { + router.push(routeFromPushData(notification.data)); + } + }, + ); + + // Cold start via universal link: appUrlOpen may fire before this effect + // runs; getLaunchUrl() is the reliable source. Handle exactly once. + const launch = await App.getLaunchUrl(); + if (launch?.url && !handledLaunchUrl) { + handledLaunchUrl = true; // module-level latch — survives StrictMode remounts + const path = deepLinkFromUrl(launch.url, allowedDeepLinkHosts()); + if (path) { + router.replace(path); // replace: don't trap Back on the splash route + } + } + + cleanup = () => { + urlListener.remove(); + pushListener.remove(); + }; + })(); + return () => cleanup(); + }, []); + + return null; +}; +``` + +Notes: + +- **Cold vs warm start, push:** `pushNotificationActionPerformed` is the + single event for both; Capacitor delivers the launching tap after listener + registration. The risk window is registering too late — hence a top-level + provider in `_app`, not a page-level effect. (Verify against current + `@capacitor/push-notifications` docs at implementation time; if the + installed major no longer replays cold-start events, the fallback is + `PushNotifications.getDeliveredNotifications()` + native `launchOptions` + via `App.getLaunchUrl()` equivalent — flagged in the test plan.) +- **Cold vs warm start, universal link:** warm = `appUrlOpen` event; cold = + `App.getLaunchUrl()` checked once with a module-level latch (also guards + React 18 StrictMode double-effects in dev). +- **server.url mode interplay:** in `server.url` mode the webview is already + on the same origin, so `router.push(path)` is a normal client-side Next + navigation — no full reload, SW/runtime caching rules unchanged. +- **Duplicate-navigation guard:** if the target equals `router.asPath`, skip + the push (tapping the same notification twice shouldn't churn history). + +### 4.4 Auth guard interplay (session expired / logged out) + +No new auth machinery is needed — the existing chain already does the right +thing; we just have to *not bypass it*: + +1. We `router.push('/accountLists/123/contacts/456?tab=Donations')`. +2. The page renders inside `RouterGuard` + (`src/components/RouterGuard/RouterGuard.tsx`). If the session is missing, + `onUnauthenticated` fires + `push({ pathname: '/login', query: { redirect: window.location.href } })` — + and because our navigation has already happened, `window.location.href` *is* + the deep-link target. +3. `pages/login.page.tsx` reads `redirect` (and the `mpdx-handoff.redirect-url` + cookie) and sends the user to the target after sign-in completes. +4. Expired-but-present session: RouterGuard's expiry effect calls + `signIn('okta')` which round-trips OAuth and returns to the current URL — + again the deep-link target. + +Therefore: **always navigate immediately on tap, regardless of auth state**, +and let RouterGuard own the login round-trip. Do not pre-check the session in +the deep-link handler. + +Coordination requirement for the shell-auth design (§7): whatever +system-browser flow replaces in-webview OAuth must preserve this contract — +"after login, land on the URL the user was on (or `?redirect=`)". If the auth +flow rebuilds the entry URL from scratch after the browser round-trip, deep +links into an expired session silently drop their target. Add an explicit test +for "push tap → expired session → login → arrives at deep-link target" to the +shell QA checklist. + +Account-list mismatch (user taps a push for an account list they no longer +have access to): existing page-level handling (`ensureSessionAndAccountList` / +API authorization) applies; no special casing. + +Offline tap: deep-link routes are NetworkOnly per the Phase 1 SW allowlist, so +a cold-start tap while offline shows the offline fallback (or fails to load in +`server.url` mode). Acceptable for this release — same limitation as the rest +of cold-start offline, already documented in the roadmap. + +--- + +## 5. What each repo ships + +### mpdx_api (`pwa-push-fcm-v1` branch) + +1. `User::Device::DeepLinkBuilder` + spec (pure, no AWS). +2. `NotificationType#user_notification_options` adds `deep_link`; keep + `contact_url` + `account_list_id` as-is. Spec updates. +3. (Owned by FCM-v1 design, listed for completeness) `PublishService` places + `opts[:deep_link]` as `deepLink` in FCM v1 `message.data` and as an APNs + top-level custom key. + +### mpdx-react / shell (`pwa-phase3-4-push-shell` branch) + +1. Replace `public/.well-known/apple-app-site-association.json` with + extensionless `apple-app-site-association` (content §2.2). +2. `next.config.ts` `headers()` + `customHttp.yml` entries for the AASA + content type (§2.3). +3. `assetlinks.json`: unchanged if package `org.mpdx` is reused; otherwise + append new entry (§3). Add debug-key entry for dev. +4. `src/lib/nativeShell/deepLink.ts` + tests. +5. `NativeDeepLinkProvider` + tests; mount in `_app.page.tsx`. +6. Shell config (Capacitor projects): iOS Associated Domains entitlement; + Android `autoVerify` intent filter scoped to `/accountLists`. + +--- + +## 6. TDD plan + +### 6.1 Frontend unit tests — `deepLink.test.ts` (write first) + +Pure-function table tests, no mocks: + +- `sanitizeDeepLinkPath` + - accepts `/accountLists/al-1/contacts/c-1?tab=Donations` (returns as-is, + query + future hash preserved) + - rejects: non-string (`null`, `42`, `{}`), empty, `'contacts/1'` (no slash), + `'//evil.com/x'`, `'/\\evil.com'`, `'https://mpdx.org/x'`, + `'javascript:alert(1)'`, `'/ab'` +- `deepLinkFromUrl` + - `https://mpdx.org/accountLists/a/contacts/c?tab=Donations` with allowed + host `mpdx.org` → `/accountLists/a/contacts/c?tab=Donations` + - disallowed host → null; suffix lookalike `evilmpdx.org` → null + - `http:` scheme on allowed host → null (https only) + - custom scheme `mpdx://...` → null (not this module's job) + - malformed URL → null (no throw) +- `routeFromPushData` + - `{ deepLink: '/accountLists/a' }` → that path + - missing/invalid `deepLink`, non-object data → `'/accountLists'` fallback + - extra keys (`contact_url`, `account_list_id`, `message`) ignored + +### 6.2 Frontend component test — `NativeDeepLinkProvider.test.tsx` + +`jest.mock('@capacitor/core')` (`isNativePlatform` → true/false), +`jest.mock('@capacitor/app')` / `@capacitor/push-notifications` with +capturable listener registries; router via the project's existing +router-mocking pattern (mock `useRouter` push/replace): + +- not native → no plugin imports, no listeners +- `appUrlOpen` with allowed-host URL → `router.push` with stripped path +- `appUrlOpen` with foreign host → no navigation +- `pushNotificationActionPerformed` (`actionId: 'tap'`, data with `deepLink`) + → `router.push`; missing deepLink → fallback route +- `getLaunchUrl` returns a URL → `router.replace` exactly once across remount + (latch behavior) +- unmount removes listeners + +### 6.3 Rails specs + +- `spec/services/user/device/deep_link_builder_spec.rb` — table-driven over + **every** name in `NotificationType.types` (loop the constant so a future + type without a mapping fails the spec loudly or falls through to the + documented default — pick "falls through + explicit default expectation"): + - gift types → `?tab=Donations`; contact-info types → `?tab=ContactDetails`; + care types → bare contact path; `NewPartnerDuplicateNotMerged` → merge tool + - `many?` → `/accountLists/:alid` + - path uses `contact.account_list_id` / `contact.id` (UUIDs intact) +- `spec/models/notification_type_spec.rb` — `user_notification_options` + includes `deep_link` (single + many), retains `contact_url` and + `account_list_id`; `to_json` round-trips through + `PublishWorker#perform` string-opts parsing (existing worker spec covers the + JSON-parse path — extend with `deep_link` present). +- Payload-placement specs (FCM v1 `message.data.deepLink`, APNs custom key) + belong to the FCM-v1 design's `publish_service_spec.rb` work — assert there + that `deepLink` is a **string** in FCM data (FCM v1 rejects non-string data + values). + +### 6.4 Manual / release-checklist verification + +- `curl -sI https://mpdx.org/.well-known/apple-app-site-association` → direct + 200, `application/json`, no redirect (repeat for stage; repeat for + `assetlinks.json`). +- Apple CDN check: `https://app-site-association.cdn-apple.com/a/v1/mpdx.org`. +- Android: `adb shell pm get-app-links ` shows `verified` for + mpdx.org. +- Device matrix: push tap on cold start / warm start / logged-out → lands on + contact Donations tab after (re)auth, on both platforms. + +--- + +## 7. Coordination notes for sibling designs + +- **FCM-v1 payload design:** field name on the wire is `deepLink` (string) in + FCM v1 `message.data` and APNs custom keys; Ruby opts key is `deep_link`. + Keep legacy APNs `link: { data: ... }` alongside until the old app sunsets. +- **Shell auth design:** must preserve the `?redirect=` / current-URL contract + after the system-browser OAuth round-trip (§4.4). Universal links are NOT a + reliable OAuth return channel (Apple ignores them on HTTP redirects) — + prefer `ASWebAuthenticationSession` / Custom Tabs callback schemes; if a + web-path return URL is still wanted, add an exact-match component to the + AASA (§2.2) rather than widening `/accountLists/*`. +- **Shell project design:** owns the Xcode entitlements, AndroidManifest + intent filter, and final bundle/package identifiers that feed §2/§3. + +## 8. Open questions (Daniel) + +1. Apple: is team `DQ48D9BF2V` still Cru's team, and does the new shell reuse + bundle `org.cru.mpdx` (update the old App Store listing) or get a new + bundle ID? AASA `appIDs` follows the answer. +2. Google Play: do we still control the `org.mpdx` listing, and is the plan to + update it (keeps Play App Signing key → existing assetlinks fingerprint + keeps working) or create a new listing (new package + new fingerprint entry + needed)? +3. Confirm Amplify serves Next `headers()` for `public/` assets in the SSR + build (one curl after a preview deploy); if not, `customHttp.yml` alone + carries it. +4. Product sign-off on the tab mapping in §1.2 (especially + `NewPartnerDuplicateNotMerged` → merge tool instead of contact detail). diff --git a/docs/pwa-design/fcm-v1-backend.md b/docs/pwa-design/fcm-v1-backend.md new file mode 100644 index 0000000000..43bea6016c --- /dev/null +++ b/docs/pwa-design/fcm-v1-backend.md @@ -0,0 +1,506 @@ +# Phase 3 Backend Design — FCM HTTP v1 Push Migration (mpdx_api) + +Status: DESIGN — 2026-06-10 +Repo: `/Users/danielbisgrove/Documents/Web_Dev/MPDX/mpdx_api`, branch `pwa-push-fcm-v1` +Companion: `docs/pwa-roadmap.md` (Phase 3), deep-links design doc (routes TBD by deep-links agent) + +## 1. Current pipeline (verified by reading the code) + +``` +AccountList::NotificationsSender#send_notifications (12h cron per account list) + ├─ NotificationType.check_all — only runs a type if a preference has app OR email OR task = true + ├─ create_tasks(...) — gated by NotificationPreference.task + ├─ send_email_notifications(...) — gated by NotificationPreference.email (require_user: true) + └─ send_user_notifications(...) — gated by NotificationPreference.app (require_user: true) + └─ User::Notification.create_by_type (app/models/user/notification.rb:20) + └─ User::Device::PublishWorker.perform_at(user.send_notifications_at, user_id, + notification_type.user_notification_description(...), + notification_type.user_notification_options(...).to_json) + +Task::NotificationWorker (app/workers/task/notification_worker.rb) + └─ PublishWorker.new.perform(user.id, " ", task_id:, account_list_id:) + — gated per-task by task.notification_type IN ('mobile','both'), NOT by NotificationPreference + +Api::V2::User::Notifications::BulkController#update (re-push existing notifications to own devices) + └─ PublishWorker.perform_async(current_user.id, description, options.to_json) + +User::Device::PublishWorker (app/workers/user/device/publish_worker.rb) + — JSON-parses opts (symbolize_names), skips non-admins on staging, iterates user.devices, + destroys device on EndpointDisabled / PlatformApplicationDisabled + └─ User::Device::PublishService.publish(device, message, opts) + └─ ClientService#publish(endpoint_arn, payload, message_structure: 'json') # AWS SNS +``` + +`User::Device` (app/models/user/device.rb): platforms `APNS`/`GCM`, registers an SNS +endpoint on create via `RegistrationService` using `SNS_APNS_APPLICATION_ARN` / +`SNS_GCM_APPLICATION_ARN`, idempotent, deletes conflicting (platform, token) rows, +unregisters on destroy. REST endpoints at `/api/v2/user/devices` +(`app/controllers/api/v2/user/devices_controller.rb`) — the Capacitor shell reuses +these unchanged. + +**Current payloads** (app/services/user/device/publish_service.rb): + +```ruby +# APNs — valid, keep working: +{ aps: { alert: message }, link: { data: opts.to_json } } +# GCM — LEGACY FORMAT, dead since Google killed the legacy FCM API (mid-2024): +{ data: opts.merge(message: message) } +``` + +Two problems with the GCM payload beyond the dead API: + +1. Even after SNS credentials move to FCM v1 (SNS auto-transforms legacy payloads), + this payload is **data-only** — no `notification` block — so Android shows + nothing in the tray when the app is backgrounded/killed. The Capacitor shell + needs a display notification. +2. Custom data is mixed with `message` in one bag; FCM v1 requires `message.data` + values to be **strings** (map), which the current hash does not + guarantee (`account_list_id` is a UUID string, but `task_id`, counts, etc. ride + through untyped). + +## 2. Payload migration — `publish_service.rb` + +### Wire format decision + +- **FCM v1 (Android):** SNS accepts a native v1 payload under the `GCM` key when + wrapped in the top-level key `fcmV1Message` (AWS docs: + [Using FCM v1 payloads in Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-fcm-v1-payloads.html)). + We send `message.notification` (display) + `message.data` (custom keys, all + string values) + `message.android.priority: "high"`. +- **APNs (iOS):** unchanged transport. Custom keys ride **flattened at the top + level alongside `aps`** — `@capacitor/push-notifications` surfaces these as + `notification.data.` on iOS (plugin `data` = full APNs `userInfo`), + giving the frontend one uniform shape (`notification.data.deepLink`) on both + platforms. **VERIFIED 2026-06-10 against plugin source + (ionic-team/capacitor-plugins, branches `7.x` and `main`/v8.1.1 — identical + mapping):** + - iOS: `push-notifications/ios/Sources/PushNotificationsPlugin/PushNotificationsHandler.swift`, + `makeNotificationRequestJSObject` sets + `"data": JSTypes.coerceDictionaryToJSObject(request.content.userInfo) ?? [:]` + for both `willPresent` (foreground) and `didReceive` (tap → + `pushNotificationActionPerformed`). So `data` is the **entire** `userInfo`: + top-level `deepLink` arrives as `data.deepLink`, and `data.aps` / + `data.link` (legacy key) are also present — readers must pick fields, not + assume `data` contains only our custom keys. + - Android: `push-notifications/android/src/main/java/com/capacitorjs/plugins/pushnotifications/PushNotificationsPlugin.java` + — `fireNotification` copies every `remoteMessage.getData()` entry into + `data`; the background/killed tap path (`handleOnNewIntent`, fired when the + launch intent extras contain `google.message_id`) copies all bundle extras + into `data` (mapping `google.message_id` → `id`), so FCM v1 `message.data` + entries (incl. `deepLink`) surface as `data.deepLink` on tap, alongside FCM + bookkeeping extras (`google.*`, `from`, `collapse_key`) that readers must + ignore. + + The legacy `link: { data: ... }` key is kept for the still-fielded legacy iOS + app and dropped once that app is retired. +- `deepLink` is camelCase on the wire (frontend-friendly); `:deep_link` snake_case + inside Ruby `opts`. + +### New `publish_service.rb` (full sketch) + +```ruby +# This service class is responsible for publishing a message to a device registered with AWS SNS. +class User::Device::PublishService + # Keys that may not be used as custom data (reserved by APNs / our envelope) + RESERVED_KEYS = %i[aps link].freeze + + class << self + def publish(device, message, opts = {}) + new(device, message, opts).publish + end + end + + def initialize(device, message, opts = {}) + @device = device + @message = message + @opts = opts + end + + def publish + client.publish(device.endpoint, payload) + end + + private + + attr_accessor :device, :message, :opts + + def client + @client ||= User::Device::ClientService.new + end + + def payload + @payload ||= { device_platform => sns_payload.to_json }.to_json + end + + def sns_payload + case device.platform + when 'APNS' then apns_payload + when 'GCM' then gcm_payload + end + end + + def device_platform + case device.platform + when 'APNS' + return 'APNS_SANDBOX' if ENV.fetch('SNS_APNS_APPLICATION_ARN').include?('APNS_SANDBOX') + 'APNS' + else + device.platform + end + end + + # Custom keys delivered to the app on tap. FCM v1 requires string values; + # we apply the same constraint to APNs for cross-platform consistency. + # opts MUST be a flat hash of scalars (existing callers comply). + def data_payload + data = opts.except(*RESERVED_KEYS) + deep_link = data.delete(:deep_link) || data.delete('deep_link') + data[:deepLink] = deep_link if deep_link.present? + data.compact.transform_values(&:to_s) + end + + def apns_payload + data_payload.merge( + aps: { alert: message }, + # Legacy native iOS app compatibility — remove when that app is retired. + link: { data: opts.to_json } + ) + end + + # FCM HTTP v1 message, wrapped in SNS's fcmV1Message envelope. + # https://docs.aws.amazon.com/sns/latest/dg/sns-fcm-v1-payloads.html + def gcm_payload + { + fcmV1Message: { + message: { + notification: { body: message.to_s }, + data: data_payload, + android: { priority: 'high' } + } + } + } + end +end +``` + +### Resulting wire payloads (exact) + +APNs (SNS `Message` body, `MessageStructure=json`): + +```json +{ + "APNS": "{\"deepLink\":\"/accountLists//contacts/\",\"accountListId\":\"\",\"contactUrl\":\"https://mpdx.org/...\",\"aps\":{\"alert\":\"Sarah Jones gave a special gift of $100\"},\"link\":{\"data\":\"{...legacy opts json...}\"}}" +} +``` + +(key spelling note: only `:deep_link` is renamed to `deepLink`; other opts keys pass +through as-is — today they are `contact_url`, `account_list_id`, `task_id`. The +frontend reads only `deepLink`; the rest is legacy/diagnostic. If we later want +fully camelCase data, do it as a follow-up with the deep-links agent.) + +FCM v1: + +```json +{ + "GCM": "{\"fcmV1Message\":{\"message\":{\"notification\":{\"body\":\"Sarah Jones gave a special gift of $100\"},\"data\":{\"contact_url\":\"https://mpdx.org/...\",\"account_list_id\":\"\",\"deepLink\":\"/accountLists//contacts/\"},\"android\":{\"priority\":\"high\"}}}}" +} +``` + +Notes / deliberate choices: + +- `notification.body` only, no `title` — Android shows the app name as title; + matches today's APNs behavior (bare `alert` string). Adding per-type titles is a + cheap follow-up (`NotificationType#user_notification_title_template` already + exists as an abstract hook). +- No `sound` added — keeps behavior identical to today; flag for product decision. +- No `default` key in the SNS message — the existing production publishes omit it + for endpoint publishes and work; don't churn that. +- `ClientService`, `RegistrationService`, `PublishWorker`, `User::Device` are all + **unchanged**. `APNS_SANDBOX` switch is unchanged. + +## 3. Deep-link data + +Format contract (owned by the deep-links design agent; we only define carriage): +`deepLink` is a **path-only** web route string, e.g. +`/accountLists//contacts/`. It rides: + +- APNs: top-level custom key `deepLink` alongside `aps` +- FCM v1: `message.data.deepLink` + +Capacitor's `pushNotificationActionPerformed` handler reads +`notification.data.deepLink` on both platforms and routes the webview. + +### Where `deep_link` enters `opts` (two call sites + the WebRouter helper refactor) + +(Terminology aligned with deep-links.md §1.1 and master plan §3.4 R7: the actual +opts-injection call sites are (b) and (c); (a) is a path-helper refactor that +supplies the strings, not an injection site.) + +**a) `WebRouter` — add path helpers** (app/services/web_router.rb), refactoring +`contact_url` to reuse them so path strings exist in exactly one place: + +```ruby +def self.contact_path(contact, tab = nil) + "/accountLists/#{contact.account_list_id}/contacts/#{contact.id}#{"?tab=#{tab}" if tab}" +end + +def self.contacts_path(account_list_id) + "/accountLists/#{account_list_id}/contacts" +end + +def self.tasks_path(account_list_id) + "/accountLists/#{account_list_id}/tasks" +end + +def self.contact_url(contact, tab = nil) + "#{base_url}#{contact_path(contact, tab)}" +end + +def self.tasks_url(account_list_id) + "#{base_url}#{tasks_path(account_list_id)}" +end +``` + +**b) `NotificationType#user_notification_options`** (app/models/notification_type.rb:127) +— covers both the cron sender path and the bulk re-push controller (which calls the +same method): + +```ruby +def user_notification_options(user_notifications) + contact = user_notifications.first.notification.contact + if user_notifications.many? + { + account_list_id: contact.account_list_id, + deep_link: WebRouter.contacts_path(contact.account_list_id) # PLACEHOLDER route — deep-links agent finalizes + } + else + { + contact_url: WebRouter.contact_url(contact), + account_list_id: contact.account_list_id, + deep_link: WebRouter.contact_path(contact) + } + end +end +``` + +**c) `Task::NotificationWorker#send_mobile_notification`** +(app/workers/task/notification_worker.rb:23): + +```ruby +User::Device::PublishWorker.new.perform( + user.id, + [_(task.activity_type), task.contacts.first&.name, task.subject].compact.join(' '), + task_id: task.id, + account_list_id: task.account_list_id, + deep_link: WebRouter.tasks_path(task.account_list_id) # PLACEHOLDER — deep-links agent may define /tasks?taskId= +) +``` + +Coordination note for the deep-links agent: the two PLACEHOLDER routes above +(multi-notification target, single-task target) are the only routes this design +does not consider final; single-contact (`/accountLists//contacts/`) is +final since it mirrors the existing `contact_url`. + +## 4. NotificationPreference `app` channel gating — ALREADY WIRED + +Finding (this changes the roadmap task from "build" to "verify"): +`AccountList::NotificationsSender` already gates push exactly like email — +`queue_notifications_by_type(notifications, type, {}, :app)` → +`send_user_notifications` → `create_by_type` → `PublishWorker` +(app/services/account_list/notifications_sender.rb:46,76,147). It is also already +spec'd both ways (spec/services/account_list/notifications_sender_spec.rb:218-237: +`app: true` sends, `app: false` doesn't), and `NotificationType.check_all` includes +`app` in its OR clause. The `app` column is already exposed through the +NotificationPreference serializer/GraphQL type, so the frontend settings UI work in +Phase 3 needs no new API. + +Remaining work in this area: + +1. **Strengthen the regression spec** — the existing `app: true` spec asserts + `User::Notification.create_by_type` is received; add one asserting the + observable outcome: a `User::Device::PublishWorker` job is enqueued with the + expected description and opts JSON (including `deep_link`), and zero jobs when + `app: false`. This is the contract the shell depends on. +2. **Document, don't change, the two non-preference paths:** + - `Task::NotificationWorker` is gated by the per-task `notification_type` + ('mobile'/'both') the user picked when scheduling the reminder — explicit + intent, correctly independent of NotificationPreference. + - `Notifications::BulkController#update` is a user-initiated "send my + notifications to my phone" action on `current_user` — also correctly + ungated. +3. Note for QA: `PublishWorker` drops sends for non-admin users on **staging** + (publish_worker.rb:21) — staging test users must be admins. + +## 5. Ops runbook for Daniel (AWS SNS console + Firebase) + +### 5.1 Inspect the existing platform applications + +AWS Console → Amazon SNS → Mobile → Push notifications → Platform applications +(region from the deploy config's `AWS_REGION`). Find the two apps whose ARNs match +`SNS_GCM_APPLICATION_ARN` / `SNS_APNS_APPLICATION_ARN` in cru-deploy/ECS task defs. + +**GCM/FCM app — record:** + +- "Firebase Cloud Messaging credential type": **API key** (legacy server key — + dead since June 2024) vs **Token** (FCM HTTP v1 service-account JSON). +- The Firebase **Sender ID / project** the old key belonged to (visible in the + old key's Firebase project if recoverable). This matters: device tokens are + per-Firebase-project; if the new credentials come from a *different* Firebase + project than the one the shell's `google-services.json` uses, every send fails + with `SENDER_ID_MISMATCH`. Platform app credentials and the shell's Firebase + app must come from the **same project**. + +**APNs app — record:** + +- "Apple credential type": certificate (.p12, expires yearly — check expiry) vs + signing key (.p8 token, never expires — preferred). +- The bundle ID it's configured for (legacy app's ID). The new Capacitor shell's + bundle ID must match the platform app's configuration, or we create a second + APNs platform app for the shell and point `SNS_APNS_APPLICATION_ARN` at it. + +### 5.2 Firebase project setup (placeholder until accounts confirmed) + +1. Firebase console → Add project (suggest reusing the legacy MPDX project if it + still exists — keeps any surviving tokens valid; otherwise new project "MPDX"). +2. Add an **Android app** with the shell's applicationId — placeholder + `org.mpdx` (the legacy package from `public/.well-known/assetlinks.json`); + confirm with the Capacitor shell design before creating. +3. Download `google-services.json` → goes into the Capacitor Android project + (frontend task, not this repo). +4. Project settings → Cloud Messaging: confirm "Firebase Cloud Messaging API (V1)" + is **Enabled**. +5. Project settings → Service accounts → **Generate new private key** → downloads + the service-account JSON used by SNS. + +### 5.3 Update SNS credentials + +- GCM platform app → Edit → credential type **Token** → upload the + service-account JSON from 5.2. (If the console refuses to edit in place, + create a new platform application and update `SNS_GCM_APPLICATION_ARN` in the + deploy config — note `User::Device::RegistrationService::PLATFORMS` reads the + env var at boot, so an ECS redeploy is required.) +- APNs platform app → if cert-based or expired: Apple Developer portal → + Certificates, Identifiers & Profiles → Keys → create an APNs Auth Key (.p8) → + SNS Edit → "Token" credential type → upload .p8 + Key ID + Team ID + the + shell's bundle ID. For development builds you'll also want a sandbox platform + app (ARN containing `APNS_SANDBOX` — the code's auto-switch keys off that + substring in `SNS_APNS_APPLICATION_ARN`). +- Existing GCM endpoints in SNS are ~2 years stale; don't bulk-clean — the + pipeline self-heals (`EndpointDisabled` → `device.destroy`). + +### 5.4 End-to-end validation with one test device + +1. Build the Capacitor shell dev build with `google-services.json`, log in as an + **admin** user (staging guard), grab the FCM token from the + `registration` event log. +2. Register it: + `POST /api/v2/user/devices` body + `{"data":{"type":"user_devices","attributes":{"platform":"GCM","token":"","version":"1","locale":"en"}}}` + → confirm 201 and that the created device has an `endpoint` ARN. +3. Console smoke test without the app (proves SNS+credentials alone): + ```bash + aws sns publish --target-arn '' --message-structure json \ + --message '{"GCM":"{\"fcmV1Message\":{\"message\":{\"notification\":{\"body\":\"MPDX test\"},\"data\":{\"deepLink\":\"/accountLists/test/contacts\"}}}}"}' + ``` +4. Full-pipeline test from `rails console` on staging: + ```ruby + User::Device::PublishWorker.new.perform(user.id, 'Test push', + deep_link: "/accountLists/#{account_list_id}/contacts") + ``` +5. Verify: tray notification appears; tapping it opens the app and the + `pushNotificationActionPerformed` payload contains `data.deepLink`. +6. Repeat 2–5 for APNs with a TestFlight/dev build (`platform: "APNS"`); confirm + sandbox vs production ARN matches the build type. +7. Optional: enable SNS delivery status logging on the platform app → CloudWatch + shows per-message FCM/APNs responses (the failure table in the AWS doc above + maps error codes). + +## 6. TDD plan (rspec; ruby 3.3.10 via asdf, `bundle exec rspec`) + +Order of work — each step: write/adjust spec (red) → implement (green): + +1. **`spec/services/user/device/publish_service_spec.rb`** (primary; rewrite the + GCM context, extend APNs): + - GCM: publishes `{"GCM": }` where json is exactly the `fcmV1Message` + structure above (notification.body = message, android.priority = high). + - GCM data stringification: `opts = { task_id: 123, deep_link: '/x' }` → + `data == { task_id: '123', deepLink: '/x' }` (no `deep_link` key, all values + strings, nils compacted). + - APNs: custom keys flattened at top level alongside `aps`; `aps.alert` still + the bare message string; legacy `link.data` key still present and unchanged. + - APNs reserved-key safety: opts containing `aps`/`link` keys cannot clobber + the envelope. + - APNS_SANDBOX context: existing spec keeps passing (only inner payload + changes). +2. **`spec/services/web_router_spec.rb`**: new `contact_path`, `contacts_path`, + `tasks_path`; `contact_url`/`tasks_url` outputs byte-identical to today + (refactor-safety). +3. **`spec/models/notification_type_spec.rb` `#user_notification_options`** + (UPDATE existing): both `eq` assertions gain the `deep_link` key (single → + contact path; many → contacts-list placeholder path). +4. **`spec/workers/task/notification_worker_spec.rb`** (UPDATE): mobile + notification expectation gains `deep_link` in opts. +5. **`spec/services/account_list/notifications_sender_spec.rb`** (ADD): with + `app: true`, drain to assert a `User::Device::PublishWorker` job is enqueued + whose opts JSON includes `deep_link`; with `app: false`, no job. Existing + app-gating specs (lines 218–237) must keep passing unchanged. +6. **Verify-unchanged set** (run, no edits expected): + `spec/workers/user/device/publish_worker_spec.rb` (opts passthrough), + `spec/models/user/notification_spec.rb` (mocks `user_notification_options`), + `spec/controllers/api/v2/user/notifications/bulk_controller_spec.rb` (asserts + `.to_json` of options — will transparently include `deep_link`), + `spec/models/user/device_spec.rb`, devices controller/acceptance specs. + +Suggested run: + +```bash +cd /Users/danielbisgrove/Documents/Web_Dev/MPDX/mpdx_api +bundle exec rspec spec/services/user/device spec/services/web_router_spec.rb \ + spec/models/notification_type_spec.rb spec/workers/task/notification_worker_spec.rb \ + spec/services/account_list/notifications_sender_spec.rb \ + spec/workers/user/device/publish_worker_spec.rb spec/models/user/notification_spec.rb \ + spec/controllers/api/v2/user/notifications/bulk_controller_spec.rb +``` + +## 7. Files changed (summary) + +| File | Change | +| --- | --- | +| `app/services/user/device/publish_service.rb` | `gcm_payload` → fcmV1Message; `apns_payload` → flattened custom keys + keep `link`; new `data_payload` | +| `app/services/web_router.rb` | add `contact_path`/`contacts_path`/`tasks_path`; `contact_url`/`tasks_url` delegate | +| `app/models/notification_type.rb` | `user_notification_options` adds `deep_link` | +| `app/workers/task/notification_worker.rb` | add `deep_link` to opts | +| specs per §6 | rewrite publish_service GCM context; update notification_type + task worker; add sender regression | +| — | No changes: ClientService, RegistrationService, PublishWorker, User::Device, devices controller, bulk controller | + +## 8. Risks + +- **Firebase project / sender-ID mismatch**: SNS credentials and the shell's + `google-services.json` must come from the same Firebase project, or every send + is `SENDER_ID_MISMATCH`. This is the most likely silent-failure mode. +- **APNs bundle ID**: if the new shell's bundle ID differs from the legacy app's, + the existing APNs platform app will not deliver — needs new platform app + ARN + change + redeploy. +- **Legacy iOS app**: flattening custom keys next to `aps` is additive and `link` + is preserved, so the legacy app keeps working; dropping `link` later is a + separate decision. Legacy Android is already dead (no compat concern). +- **Flat-opts invariant**: `transform_values(&:to_s)` corrupts nested hashes; + all current callers pass flat scalars, and the publish_service spec encodes + the invariant, but it is convention, not type-enforced. +- **Staging guard**: pushes silently drop for non-admins on staging — QA trap. +- **Env vars read at boot** (`RegistrationService::PLATFORMS.freeze`): ARN changes + require redeploy, and a missing var crashes boot — coordinate deploy-config + changes with the credential swap. + +## 9. Open questions (Daniel) + +1. SNS console: GCM platform app credential type today (API key vs Token), and is + the original Firebase project recoverable? +2. New shell Android applicationId — reuse `org.mpdx` or new ID? (Drives Firebase + app registration and assetlinks.) +3. APNs: cert or .p8 today; bundle ID + Team ID for the new shell? +4. Should pushes play a sound (`aps.sound` / `android.notification.sound` = + `"default"`)? Currently silent banners; this design keeps that. +5. Is the legacy native iOS app formally retired (lets us drop the `link` key)? +6. Multi-notification and task deep-link target routes — confirm with deep-links + agent (placeholders: contacts list, tasks list). diff --git a/docs/pwa-design/phase3-4-master-plan.md b/docs/pwa-design/phase3-4-master-plan.md new file mode 100644 index 0000000000..1af9c56633 --- /dev/null +++ b/docs/pwa-design/phase3-4-master-plan.md @@ -0,0 +1,542 @@ +# PWA Phases 3+4 — Master Design & Execution Plan + +Status: MASTER PLAN — 2026-06-10 +Synthesizes: `fcm-v1-backend.md`, `push-registration-frontend.md`, `camera-contact-photo.md`, +`deep-links.md`, `capacitor-shell.md` (+ `docs/pwa-roadmap.md` Phases 3/4). +Repos: `mpdx-react` (branch `pwa-phase3-4-push-shell`), `mpdx_api` (branch `pwa-push-fcm-v1`). + +This document is authoritative where area docs disagree. Contradiction resolutions are in §3.4. + +--- + +## 1. Decision summary (one paragraph per area) + +**Capacitor shell (architecture).** A thin **Capacitor 7 shell in `server.url` mode** pointed at +the hosted Amplify SSR app (prod `https://mpdx.org`, stage builds at `https://stage.mpdx.org`), +living in-repo in `mpdx-react` (`capacitor.config.ts`, `ios/`, `android/`, `capacitor-web/error.html` +stub, `src/lib/nativeShell/`). The single-host rule — `allowNavigation` empty, all external URLs to +the system browser — sidesteps every documented Capacitor remote-URL bug. iOS sets +`WKAppBoundDomains` + `limitsNavigationsToAppBoundDomains: true` from day one (unlocks service +workers and durable storage in WKWebView). Auth: system-browser PKCE against a native public client +(Okta; Doorkeeper API_OAUTH as the stage fallback), landed via a ~80-line NextAuth +**CredentialsProvider `native-okta`** — the webview itself POSTs `signIn('native-okta', { accessToken })` +so NextAuth sets the session cookie in the webview's jar on its paved road; only a single-use PKCE +code crosses the browser boundary. Keychain refresh token is Plan B, activated only if the Day 2 +cookie-persistence battery fails. Phases 1+2 (SW allowlist, IndexedDB persistence, offlineLink, +`clearApolloData()` invariant) transfer wholesale; the same-origin offline viewer is **v1.1**, built +immediately after v1 core in parallel with store prep, not blocking submission. The +**day-one auth+bridge prototype with three go/no-go gates is implementation task 1**; only Gate 1 +failure (bridge injection on the remote origin) invalidates the architecture. + +**FCM v1 backend.** Migration is payload-layer only: `User::Device::PublishService#gcm_payload` +moves from the dead legacy GCM format to SNS's FCM HTTP v1 envelope +(`{ fcmV1Message: { message: { notification: { body }, data, android: { priority: 'high' } } } }`), +with `message.data` carrying string-coerced custom keys including `deepLink`. The APNs payload keeps +`aps.alert` and flattens the same custom keys at the top level alongside `aps` (so Capacitor surfaces +`notification.data.deepLink` uniformly on both platforms — a load-bearing assumption verified by a +plugin-source check in T2 step 0 before any payload spec merges), retaining the legacy `link` key for +the still-fielded old iOS app. `ClientService`, `RegistrationService`, `PublishWorker`, `User::Device`, +and `/api/v2/user/devices` are unchanged. Key finding: the NotificationPreference `app`-channel +gating the roadmap asks for is **already fully wired and spec'd** — that task reduces to one stronger +regression spec asserting actual `PublishWorker` enqueue. Ops runbook (fcm-v1-backend.md §5) covers +SNS credential inspection, Firebase v1 service-account setup, the sender-ID-mismatch trap, APNs `.p8` +migration, and 7-step end-to-end validation. + +**Push registration frontend.** Device registration goes through a new REST-proxy Schema folder +(`pages/api/Schema/UserDevices/`) exposing `registerUserDevice`/`destroyUserDevice` mutations — +Apollo's authLink already handles the Bearer token, the shell is same-origin in `server.url` mode, +and offlineLink/codegen/GqlMockedProvider come free. All Capacitor code lives in +`src/lib/nativeShell/` with `@capacitor/core` statically imported in exactly one detection module and +plugins behind lazy dynamic imports. Registration state (device id, last token, enabled flag, locale) +lives in localStorage — deliberately outside Apollo so `clearStore()` cannot race the logout DELETE. +A single `registration`-listener path handles first opt-in, every launch, and FCM token rotation +(token+locale comparison makes steady-state launches zero-network). `requestPermissions()` is called +**only** from the new `PushNotificationsCard` in settings; launch bootstrap uses non-prompting +`checkPermissions()`/`register()`. Logout consolidates the duplicated signout blocks into +`logoutCleanup()` (disablePush → CacheStorage clear → `clearDataDogUser` → `clearApolloData()` — +canonical chain, see §3.3). Per-type toggles need no +new UI — `NotificationsTable`'s existing "In App" column is the `app` flag the backend gates on; +only a relabel/tooltip changes. + +**Deep links.** One value format everywhere: a **same-origin web path** +(e.g. `/accountLists/:alid/contacts/:cid?tab=Donations`) carried as `deepLink` in FCM v1 +`message.data` and as an APNs top-level custom key. A new pure `User::Device::DeepLinkBuilder` maps +all 22 push-worthy notification types (all contact-based) to routes: gift types → `?tab=Donations`, +contact-info types → `?tab=ContactDetails`, `NewPartnerDuplicateNotMerged` → the merge tool, +multi-notification batches → the account-list dashboard. The repo's AASA file is misnamed +(`apple-app-site-association.json` — Apple fetches the extensionless path) and gets recreated with +modern `appIDs`/`components` format scoped to `/accountLists/*` (working-assumption appID +`DQ48D9BF2V.org.cru.mpdx`), with `Content-Type: application/json` forced via both `next.config.ts` +`headers()` and Amplify `customHttp.yml`. `assetlinks.json` needs zero changes if the shell ships as +an update to the existing `org.mpdx` Play listing. Frontend: pure `src/lib/nativeShell/deepLink.ts` +(sanitize/parse/route with open-redirect guards) + a thin `NativeDeepLinkProvider` in `_app` wiring +`appUrlOpen` (warm), `App.getLaunchUrl()` with a once-latch (cold), and +`pushNotificationActionPerformed` (both) into `next/router`. Auth needs no new machinery: navigate +immediately and let the existing RouterGuard → `/login?redirect=` chain return the user to the target. + +**Camera contact photo.** Plugs into the existing avatar pipeline at exactly one seam: +`PersonName.tsx`'s `setAvatar(file: File)` prop — everything downstream (1MB validation, blob +preview, deferred raw-fetch upload, header refetch) is untouched, and the web path is byte-for-byte +behaviorally unchanged. On native, the avatar tap opens an MUI menu (Take Photo / Choose from +Library) driving a new `src/hooks/useNativeCamera.ts` hook: dynamic-import `@capacitor/camera`, +per-source `requestPermissions`, `getPhoto` with `resultType: Base64` (Uri webPath is unreliable +under `server.url` on iOS), 1024px / q85 / `correctOrientation` / `saveToGallery: false`. A pure +`base64ToFile` util plus an in-repo canvas `compressAvatar` quality/dimension ladder guarantees the +1MB lambda limit with no third-party dependency. Discriminated results +(success/canceled/permission-denied/error) drive localized snackbars; the native menu is gated on +`useIsOnline` (the upload is raw fetch, so offlineLink does not cover it). iOS needs the three photo +usage-description plist keys; Android must NOT declare `android.permission.CAMERA`. + +--- + +## 2. Ordered task breakdown (TDD, both repos) + +Conventions: every task is red→green TDD per its area doc's test plan. Tasks marked +**[BLOCKED: Daniel]** cannot finish without external accounts/credentials — implementation routes +around them (everything else lands dark behind `isNativeShell()` gates with placeholders). +Two parallel tracks after T1: **backend (T2–T7)** and **frontend (T8+)**. + +### Track 0 — gate + +- **T1 — Day-one auth + bridge prototype (Gates 1–3)** · repo: `both` (mostly mpdx-react) · + deps: none + Files: `capacitor.config.ts`, `ios/`, `android/` (cap init), `capacitor-web/error.html`, + `ios/App/App/Info.plist` (`WKAppBoundDomains`), throwaway CredentialsProvider in + `pages/api/auth/[...nextauth].page.ts` on a spike branch; stage Doorkeeper public PKCE client + (Daniel controls stage Doorkeeper — quick internal action, not externally blocked; Okta client + request T9 runs in parallel). + TDD/verification: this is a prototype, not TDD — gates are the tests. Gate 1: bridge injection on + the remote origin (`Capacitor.isNativePlatform() === true`, `Device.getInfo()`, SW registers, + IndexedDB readable on iOS+Android). Gate 2: system-browser PKCE round-trip lands a working + NextAuth session cookie in the webview on both platforms (`/api/auth/session` returns the user). + Gate 3: cookie survives kill/relaunch/reboot (Day 2 battery; start 48h+ soak). Gate 1 failure + stops Phase 4; Gate 3 failure activates Plan B (Keychain refresh token) — see capacitor-shell §7. + Nothing else in Phase 4 builds until Gates 1–2 pass. Backend track T2–T7 does NOT wait on T1. + +### Track A — backend (mpdx_api, parallel with Track B) + +- **T2 — PublishService FCM v1 + APNs flattened payload** · repo: `mpdx_api` · deps: none + Files: `app/services/user/device/publish_service.rb`, + `spec/services/user/device/publish_service_spec.rb`. + **Step 0 — pre-merge wire-shape verification (cheap, blocking):** fcm-v1-backend.md §2 asserts — + without citation — that `@capacitor/push-notifications` surfaces APNs **top-level custom keys** as + `notification.data.deepLink` on iOS and FCM v1 `message.data.deepLink` on Android. A context7 + README check (2026-06-10) confirms the `data` field exists on `PushNotificationSchema` but does + NOT document the userInfo→`data` mapping. Before this task merges, read the plugin source for the + pinned major (iOS: the `pushNotificationActionPerformed` handler — expect `data` = full APNs + `userInfo`; Android: `RemoteMessage.getData()` foreground + launch-intent extras on background + tap) and record the citation in fcm-v1-backend.md §2. If the mapping differs (e.g. iOS keys + nested under `aps` or another key), fix §3.1 and T17's reader spec FIRST — both encode this exact + shape. Final on-device confirmation remains a T30 step. + TDD: rewrite the GCM spec context first (exact `fcmV1Message` envelope, data stringification, + `deep_link`→`deepLink` rename, nil compaction), extend APNs context (custom keys flattened beside + `aps`, legacy `link` retained, reserved-key safety, APNS_SANDBOX unchanged). Then implement per + fcm-v1-backend.md §2. + +- **T3 — WebRouter path helpers** · repo: `mpdx_api` · deps: none + Files: `app/services/web_router.rb`, `spec/services/web_router_spec.rb`. + TDD: specs for new `contact_path`/`contacts_path`/`tasks_path`; `contact_url`/`tasks_url` outputs + byte-identical to today (refactor safety). + +- **T4 — DeepLinkBuilder** · repo: `mpdx_api` · deps: T3 + Files: `app/services/user/device/deep_link_builder.rb`, + `spec/services/user/device/deep_link_builder_spec.rb`. + TDD: table-driven spec looping **every** name in `NotificationType.types` (unmapped future types + fall through to the documented default with an explicit expectation): gift → `?tab=Donations`, + contact-info → `?tab=ContactDetails`, care types → bare contact path, + `NewPartnerDuplicateNotMerged` → `/accountLists/:alid/tools/merge/contacts`, `many?` → + `/accountLists/:alid` (dashboard — see §3.4 resolution R4). Per deep-links.md §1.3. + +- **T5 — Wire `deep_link` into opts (both call sites)** · repo: `mpdx_api` · deps: T3, T4 + Files: `app/models/notification_type.rb` (`user_notification_options` uses DeepLinkBuilder — + deep-links.md version wins, §3.4 R5), `app/workers/task/notification_worker.rb` + (`deep_link: WebRouter.tasks_path(...)` placeholder), `spec/models/notification_type_spec.rb`, + `spec/workers/task/notification_worker_spec.rb`. + TDD: existing `eq` assertions gain `deep_link`; `contact_url`+`account_list_id` retained; worker + spec's mobile-notification expectation gains `deep_link`; `to_json` round-trip through + `PublishWorker` string-opts parsing. + +- **T6 — NotificationsSender regression spec (app-channel gating)** · repo: `mpdx_api` · deps: T5 + Files: `spec/services/account_list/notifications_sender_spec.rb` (spec-only — gating already + wired). + TDD: with `app: true`, a `User::Device::PublishWorker` job is enqueued whose opts JSON includes + `deep_link`; with `app: false`, zero jobs. Existing specs at lines 218–237 keep passing. Then run + the verify-unchanged set (fcm-v1-backend.md §6.6). + +- **T7 — Remove raw-token logging** · repo: `mpdx_api` · deps: none + Files: `app/services/.../okta_validator_service.rb` (line ~51). + TDD: spec asserting the logger is not called with the token (or log content excludes it). Judge + concern #7; must land before shell launch. + +- **T8 — SNS/Firebase/APNs credential migration (ops runbook)** · repo: `ops` · + deps: T2 · **[BLOCKED: Daniel — AWS console, Firebase project, Apple Developer]** + Work: fcm-v1-backend.md §5 — inspect GCM platform-app credential type + APNs cert/bundle ID, + create/recover Firebase project (same project as the shell's `google-services.json` — + SENDER_ID_MISMATCH trap), upload FCM v1 service-account JSON to SNS, APNs `.p8` + new bundle ID, + update `SNS_*_APPLICATION_ARN` deploy config (ECS redeploy), `aws sns publish` smoke test. + **Runbook step 0 (staging):** determine whether staging has its own SNS platform applications + (separate `SNS_*_APPLICATION_ARN` values in the stage deploy config) or shares prod ARNs. If + separate, migrate the staging platform apps to FCM v1 / `.p8` credentials FIRST and smoke-test + them — T30's end-to-end validation runs entirely on staging and fails silently against unmigrated + staging ARNs. + +- **T9 — Okta native client + `OKTA_AUTH_CLIENT_IDS`** · repo: `ops` · + deps: none · **[BLOCKED: Daniel — Okta admin]** + Work: register native public PKCE client (redirect URIs `org.mpdx://auth-callback`, + `https://mpdx.org/auth/native-callback`); append client ID to `OKTA_AUTH_CLIENT_IDS` in mpdx_api + deploy config (one line, real coordination). Doorkeeper stage client (T1) de-risks the wait. + +### Track B — frontend foundation (mpdx-react) + +- **T10 — REST-proxy UserDevices schema** · repo: `mpdx-react` · deps: none + Files: `pages/api/Schema/UserDevices/userDevices.graphql`, `resolvers.ts`, `datahandler.ts` (+ + `datahandler.test.ts`), `pages/api/graphql-rest.page.ts` (post/delete methods), + `pages/api/Schema/index.ts` (register). + TDD: datahandler test (JSON:API device resource → `UserDevice`; destroy → `{ success: true }`); + `yarn gql` green. Contract per §3.2. + +- **T11 — nativeShell foundation module + Capacitor deps** · repo: `mpdx-react` · deps: T1 + Files: `package.json` (`@capacitor/core`, `@capacitor/push-notifications`, `@capacitor/app`, + `@capacitor/browser`, `@capacitor/camera`, `@capacitor/device` — all pinned to the major T1 + scaffolds, Capacitor 7 expected), `src/lib/nativeShell/nativeShell.ts` (THE one static + `@capacitor/core` import: `isNativeShell()`, `getDevicePlatform()` — §3.4 R1), + `src/lib/nativeShell/deviceLocale.ts`, `src/lib/nativeShell/pushStorage.ts`, + `__tests__/util/capacitorMocks.ts`, colocated tests. + TDD: `deviceLocale.test.ts` (exact match, regional passthrough, `fr`→`fr-FR`, unknown→`en`); + `pushStorage` key round-trips; capacitorMocks helper with `emitRegistration`/`setNativePlatform`. + +- **T12 — pushRegistration core** · repo: `mpdx-react` · deps: T10, T11 + Files: `src/lib/nativeShell/pushRegistration.ts`, `src/lib/nativeShell/UserDevice.graphql` + (operations `RegisterUserDevice`/`DestroyUserDevice`), `pushRegistration.test.ts`. + TDD: full matrix in push-registration-frontend.md §6.2 — web no-op, APNS/GCM platform mapping via + `toHaveGraphqlOperation`, idempotent same-token skip, rotation re-register, denied → no + `register()`, `disablePush` teardown order + failure tolerance. + +- **T13 — logoutCleanup consolidation** · repo: `mpdx-react` · deps: T12 + Files: `src/lib/auth/logoutCleanup.ts` (+ test), `pages/logout.page.tsx`, + `src/components/Layouts/Primary/TopBar/Items/ProfileMenu/ProfileMenu.tsx`, + `src/components/Layouts/Primary/NavBar/NavTools/ProfileMenuPanel/ProfileMenuPanel.tsx`, + `src/lib/apollo/client.ts` (AUTHENTICATION_ERROR handler), `src/lib/apollo/clearApolloData.ts` + (invariant comment), existing signout tests. + TDD: call-order assertion of the full canonical chain (§3.3): `DestroyUserDevice` BEFORE + persistor purge/clearStore, `clearDataDogUser` before `clearApolloData`; mutation + rejection still resolves and `clearApolloData` runs; web path unchanged except CacheStorage clear. + Invariant update: new signout paths must call `logoutCleanup()` (which wraps `clearApolloData`). + +- **T14 — PushNotificationsCard + table relabel** · repo: `mpdx-react` · deps: T12 + Files: `src/components/Settings/notifications/PushNotificationsCard/PushNotificationsCard.tsx` + (+ test), `pages/accountLists/[accountListId]/settings/notifications.page.tsx`, + `src/components/Settings/notifications/NotificationsTable.tsx` (relabel "In App" → "Mobile App" + + tooltip; copy pending Daniel), `NotificationsTable.test.tsx`. + TDD: web renders nothing; enable → `requestPermissions` then `register` then success state; + denied → instructions alert; disable → `DestroyUserDevice`; buttons disabled in flight. This card + is the ONLY `requestPermissions()` call site. `yarn extract` for new strings. + +- **T15 — PushBootstrap (registration lifecycle only)** · repo: `mpdx-react` · deps: T12 + Files: `src/components/Shell/PushBootstrap/PushBootstrap.tsx` (+ test), `pages/_app.page.tsx` + (mount inside ApolloProvider). + TDD: web → null; flag unset → no `register()`; flag set + granted → silent re-register, rotated + token re-POSTs; revoked → silent; **invariant test: `requestPermissions` NEVER called from + bootstrap**. Note: the push-tap deep-link listener does NOT live here — it lives in T17 (§3.4 R3). + +- **T16 — deepLink pure module** · repo: `mpdx-react` · deps: T11 + Files: `src/lib/nativeShell/deepLink.ts` (+ test): `sanitizeDeepLinkPath`, `deepLinkFromUrl`, + `routeFromPushData`, `allowedDeepLinkHosts`. + TDD: table tests per deep-links.md §6.1 — accept valid paths with query; reject `//evil.com`, + schemes, backslashes, non-strings; exact host match (no suffix); fallback `/accountLists`. + +- **T17 — NativeDeepLinkProvider (owns all tap/link routing)** · repo: `mpdx-react` · deps: T15, T16 + Files: `src/components/NativeShell/NativeDeepLinkProvider.tsx` (+ test), `pages/_app.page.tsx`. + TDD: not native → no plugin imports; `appUrlOpen` allowed host → `router.push(path)`, foreign + host → nothing; `pushNotificationActionPerformed` with `data.deepLink` → push, missing → + fallback; `getLaunchUrl` → `router.replace` exactly once across remounts (latch); duplicate + `asPath` skip; unmount removes listeners. Reads `notification.data.deepLink` (NOT `data.route` — + §3.4 R2). + +- **T18 — AASA + content-type headers** · repo: `mpdx-react` · deps: none · + **[finalization BLOCKED: Daniel — Apple Team ID/bundle; lands now with placeholder]** + Files: create extensionless `public/.well-known/apple-app-site-association` (modern + `appIDs`/`components`, `/accountLists/*`, `webcredentials`, placeholder + `DQ48D9BF2V.org.cru.mpdx`), delete misnamed `apple-app-site-association.json`, + `next.config.ts` `headers()`, Amplify `customHttp.yml`. + Verification: release-checklist curl (direct 200, `application/json`, no redirect); Amplify + preview-deploy header check. + +- **T19 — assetlinks.json decision + dev fingerprint** · repo: `mpdx-react` · deps: none · + **[decision BLOCKED: Daniel — Play listing/signing-key control]** + Files: `public/.well-known/assetlinks.json`. + Work: zero changes if `org.mpdx` Play listing is updated (recommended); else append new + package+fingerprint entry, keep legacy entry. Either way add debug-keystore fingerprint (or + document `adb shell pm set-app-links` for dev). + +### Track C — shell build-out (after T1 gates pass) + +- **T20 — Production native auth** · repo: `mpdx-react` · deps: T1, T13 + Files: `pages/api/auth/[...nextauth].page.ts` (CredentialsProvider `native-okta` + `signIn` + callback branch), `pages/api/auth/native/token.page.ts` (secretless code-exchange proxy: + rate-limited, never logs bodies, opaque errors), `src/lib/nativeShell/useNativeAuth.ts` + (platform-aware signIn helper), `src/components/RouterGuard/RouterGuard.tsx`, + `pages/login.page.tsx`, `src/lib/apollo/client.ts` (re-auth path), tests for each. + TDD: CredentialsProvider `authorize()` calls `oktaSignIn` and returns `apiToken`/`userID`, + rejects garbage tokens; token-proxy route accepts only code-exchange fields; web callers still get + `signIn('okta')` unchanged; signout uses `logoutCleanup()` and skips Okta global signout + (default — open question). PKCE verifier/state in memory only. **Critical-pattern files — route + the PR through the full security review with capacitor-shell §4.3 as context.** Must preserve the + `?redirect=`/current-URL contract (deep-links §4.4). + +- **T21 — Auth callback transport** · repo: `mpdx-react` · deps: T19, T20 + Files: Android `autoVerify` intent filter for `https://mpdx.org/auth/native-callback` + + fallback page (`pages/auth/native-callback.page.tsx`, no-op "return to the app"); iOS custom + scheme `org.mpdx://auth-callback` registration (scheme must match the final appId — placeholder); + `appUrlOpen` handling in `useNativeAuth`. + TDD: state validation, callback parse unit tests; device QA for App Link verification. + +- **T22 — Shell version handshake** · repo: `mpdx-react` · deps: T11 + Files: `capacitor.config.ts` (`appendUserAgent: MPDXShell/`), + `src/lib/nativeShell/shellVersion.ts` (+ test; UA parse, semver compare, + `MIN_SUPPORTED_SHELL_VERSION` constant — PR-owned), `src/lib/nativeShell/UpgradeRequiredScreen.tsx` + (+ test; blocking, i18n'd, store link, must not block signout), `_app` check. + TDD: parse/compare unit tests; below-minimum renders the screen; signout reachable. + +- **T23 — Image utils (camera, pure)** · repo: `mpdx-react` · deps: none + Files: `src/lib/images/base64ToFile.ts` (+ test), `src/lib/images/compressAvatar.ts` (+ test; + exported `MAX_AVATAR_BYTES`; refactor `validateAvatar` to import it). + TDD: byte-exact base64 decode; pure `nextCompressionStep` ladder (0.85→0.55 quality, 0.75x + dimension, give up after 3 reductions); canvas shell with mocked `createImageBitmap`/`toBlob`. + +- **T24 — useNativeCamera hook** · repo: `mpdx-react` · deps: T11, T23 + Files: `src/hooks/useNativeCamera.ts` (+ test). Gates on `isNativeShell()` from + `src/lib/nativeShell/nativeShell.ts` (NOT a separate `src/lib/capacitor.ts` — §3.4 R1). + TDD: renderHook matrix per camera doc §7.3 — getPhoto args (Base64, 1024, q85, + `saveToGallery: false`), `limited` treated as granted, denied → no `getPhoto`, cancel-regex → + `canceled`, oversize → `compressAvatar` invoked. + +- **T25 — PersonName native menu + offline gating** · repo: `mpdx-react` · deps: T24 + Files: `.../PersonModal/PersonName/PersonName.tsx` (+ test additions), + `PersonModalSave.test.tsx` (one integration case). + TDD: **anchor regression test — web path byte-for-byte unchanged** (no menu, hidden input still + fires `setAvatar`); native menu items; success → `setAvatar(file)`; denial snackbars per source; + canceled → silence; native+offline → warning snackbar, no menu; camera-shaped File survives + `validateAvatar` → `uploadAvatar`. `aria-label` on the icon button. `yarn extract` (4 strings). + +- **T26 — Native platform config** · repo: `mpdx-react` · deps: T1, T18, T19 (+ T8 for the + production `google-services.json` only — a placeholder/debug Firebase app unblocks the build + wiring immediately) + Files: `ios/App/App/Info.plist` (`NSCameraUsageDescription`, `NSPhotoLibraryUsageDescription`, + `NSPhotoLibraryAddUsageDescription`; verify `PrivacyInfo.xcprivacy` via Pods), iOS Associated + Domains entitlement (`applinks:mpdx.org`, `webcredentials:mpdx.org`, `?mode=developer` for dev), + `android/app/src/main/AndroidManifest.xml` (maxSdkVersion-bounded storage permissions, **no** + `android.permission.CAMERA` — audit merged manifest, add to release checklist; `autoVerify` + intent filter scoped to `/accountLists`). + **Push build wiring (owning task — without these `PushNotifications.register()` fails on both + platforms and T30 dead-ends):** + - Android: commit `android/app/google-services.json` and wire the `com.google.gms:google-services` + Gradle plugin (classpath in `android/build.gradle`, `apply plugin` in `android/app/build.gradle`). + Land now with a debug-Firebase-app file matching applicationId `org.mpdx`; swap in the real file + from T8 (must be the SAME Firebase project as the SNS credentials — SENDER_ID_MISMATCH trap). + - iOS: add the **Push Notifications capability** to the Xcode project — `aps-environment` + entitlement in `ios/App/App/App.entitlements` (development for dev builds; release signing sets + production) alongside the Associated Domains entitlement above. + +- **T27 — Native polish** · repo: `mpdx-react` · deps: T1 + Files: `@capacitor/assets` icon/splash generation, `@capacitor/splash-screen` + (`launchAutoHide: false` + programmatic hide after hydration), `@capacitor/status-bar` (theme + token, `overlaysWebView: false`), safe-area audit wrapper, `@capacitor/haptics` on key actions. + **Pull-to-refresh / overscroll (roadmap Phase 4 bullet — concrete deliverable):** default + decision, binding unless overridden: **v1 ships with NO custom pull-to-refresh**; iOS rubber-band + overscroll and Android overscroll glow stay at WKWebView/WebView defaults (SSR pages refresh via + navigation; a webview reload control adds complexity for little gain). Owner: Daniel, during + dogfooding. Acceptance criterion: decision + rationale recorded in this task before T32 + submission; if overridden, the chosen mechanism (e.g. `CSS overscroll-behavior` tweak or a + reload gesture) gets its own follow-up task with device QA. + TDD where possible (the hide-splash bridge call from `_app`); rest is device QA. + +- **T28 — Release ops: deploy freeze + upgrade checklist** · repo: `ops` · deps: none + Files: `STORE_REVIEW_FREEZE.md` flag + CI check (or GitHub environment protection on the + Amplify-deploy workflow), `docs/pwa-design/capacitor-upgrade-checklist.md` (Gate-1 procedure, SW/ + IndexedDB on iOS, cookie smoke, auth round-trip, release-notes re-read per Capacitor major). + +- **T29 — Fastlane CI build + signing lanes** · repo: `ops` · deps: T26 · + **[BLOCKED: Daniel — Apple/Google accounts, signing keys]** + Work: Fastlane match / Play App Signing, iOS+Android build lanes, stage/prod `SHELL_TARGET` + variants. + +- **T30 — End-to-end push QA on devices** · repo: `both` · deps: T2–T6, T8, T12–T15, T17, T26 · + **[BLOCKED: Daniel upstream via T8]** + Work: fcm-v1-backend.md §5.4 7-step validation (admin user on staging — non-admin pushes drop + silently), both platforms, tap → deep link cold/warm/logged-out, token rotation via reinstall, + logout stops delivery. Plus push-registration §6.3 and deep-links §6.4 manual checklists + (AASA CDN check, `adb pm get-app-links` verified). + +- **T31 — Offline viewer (shell v1.1)** · repo: `mpdx-react` · deps: T20, T27 (build in parallel + with T29/T32 — does NOT block store submission) + Files: extend `/offline` precached route into an unauthenticated CSR viewer reading the persisted + cache (`cachePersistor.restore()`), session-stub provider reusing existing list/detail components + + shared `.graphql` documents, `offlineViewerSession` marker (set on login, cleared by + `clearApolloData()`), Phase 2 `persistenceMapper` hardening, precache-manifest assertion for + viewer chunks. + TDD: viewer-entry mount tests (catch session-coupling regressions); marker gating; ~3-week + estimate. Dedicated security review before ship (cache-at-rest encryption is the fallback if + review demands it). + +- **T32 — Store submission** · repo: `ops` · deps: T20–T22, T25–T30 · + **[BLOCKED: Daniel — store accounts, listings, privacy declarations]** + Work: capacitor-shell §11 checklist — listings, privacy labels / Data Safety (photos declared per + camera doc §6), **Apple 4.2 receipts document** (push, camera demo-ready, in-session offline, + universal links, native polish), demo account, deploy freeze active, one rejection cycle budgeted. + +### Suggested sequencing summary + +1. **T1** (gate) — and simultaneously start **T2, T3, T7, T10, T18, T23** (none depend on T1). +2. Backend chain T3→T4→T5→T6 while frontend does T11→T12→{T13, T14, T15}→T16→T17. +3. After T1 gates: T20→T21, T22, T24→T25, T26, T27 in parallel lanes. +4. T8/T9 (Daniel) whenever unblocked — they gate only T30/T32, not code. +5. T28–T30, then T32 submission with T31 building in parallel. + +--- + +## 3. Cross-area contracts + +### 3.1 deepLink payload contract (backend ⇄ frontend) + +| Aspect | Value | +| --- | --- | +| Value format | Same-origin web path: path + optional query, no scheme/host, exactly one leading `/`. Example: `/accountLists//contacts/?tab=Donations` | +| Ruby opts key | `:deep_link` (snake_case) — injected by `NotificationType#user_notification_options` (via `DeepLinkBuilder`) and `Task::NotificationWorker` | +| FCM v1 wire | `message.data.deepLink` — **string** (FCM v1 rejects non-string data values); all other data values string-coerced | +| APNs wire | Top-level custom key `deepLink` alongside `aps` (NOT inside `link`); legacy `link: { data: ... }` retained until the old iOS app is retired | +| Frontend read | `notification.data.deepLink` in `pushNotificationActionPerformed`, via `routeFromPushData()` (sanitized; fallback `/accountLists`) — owned by `NativeDeepLinkProvider` | +| Tab values | Exact `ContactDetailTabEnum` strings: `Tasks`, `Donations`, `Referrals`, `ContactDetails`, `Notes` (frontend parses `query.tab`) | +| Route map | Single notification → contact detail (+tab per type); multi-notification batch → `/accountLists/:alid` (dashboard); `NewPartnerDuplicateNotMerged` → `/accountLists/:alid/tools/merge/contacts`; task reminder → `/accountLists/:alid/tasks` (placeholder, pending Daniel); unmapped future types → contact detail if contact present, else dashboard | +| Security | Frontend must same-origin-validate (single `/`, no `//`, no scheme, no `\`); host check in `deepLinkFromUrl` is exact-match | + +### 3.2 Device-registration API contract (backend ⇄ frontend proxy) + +| Aspect | Value | +| --- | --- | +| Endpoint | `POST /api/v2/user/devices` (JSON:API, Bearer auth) — called only by the Next REST proxy (`registerUserDevice` mutation), never directly from client JS | +| Create body | `{ data: { type: 'user_devices', attributes: { platform, token, version, locale } } }` — all four presence-validated | +| `platform` | `'APNS'` (iOS raw APNs token) or `'GCM'` (Android FCM token) — uppercase; GCM is the SNS platform name, do not rename | +| `locale` | Must be in Rails `I18n.available_locales`; frontend maps via `toDeviceLocale()` (`fr` → `fr-FR`, unknown → `en`) | +| `version` | Shell version from `App.getInfo().version`, fallback `'0.0.0'` | +| Response | Serializer returns `id, platform, version, locale` (+timestamps) — **never `token`**; client stores its own last-registered token in localStorage | +| Idempotency | Server-side `delete_conflicting_device` on (platform, token); client-side token+locale comparison skips redundant POSTs | +| Delete | `DELETE /api/v2/user/devices/:id` using the stored id, fired by `logoutCleanup()` BEFORE cache purge (token must still be valid); 401 on the AUTHENTICATION_ERROR path is swallowed | +| GraphQL surface | `pages/api/Schema/UserDevices/`: `registerUserDevice(input)` → `UserDevice`, `destroyUserDevice(input)` → `{ success }` | + +### 3.3 Other shared agreements + +- **Single detection module:** `src/lib/nativeShell/nativeShell.ts` exports `isNativeShell()` and + `getDevicePlatform()` and is the only static `@capacitor/core` import. All plugins load via + dynamic `import()` behind it. All shell-aware web code lives under `src/lib/nativeShell/` + (camera's hook stays in `src/hooks/` per repo hook-placement convention but gates through this + module). +- **Signout invariant (extended):** every session-ending path calls `logoutCleanup()` = + `disablePush` (DELETE + plugin unregister) → CacheStorage clear → `clearDataDogUser` → + `clearApolloData()`. The v1.1 offline-viewer session marker is also cleared by + `clearApolloData()`. New signout paths must use `logoutCleanup()`. +- **Auth redirect contract:** deep links navigate immediately; RouterGuard owns the login + round-trip via `/login?redirect=`. The native auth flow (T20) must return the user to the + current URL / `?redirect=` target after the system-browser round-trip — explicit device QA item. +- **Identity placeholders (consistent everywhere until Daniel confirms):** Android applicationId + `org.mpdx` (reuse, recommended) — appears in `capacitor.config.ts`, Firebase app registration, + assetlinks; iOS bundle `org.cru.mpdx` + team `DQ48D9BF2V` — appears in AASA, Xcode, APNs platform + app; iOS auth scheme `org.mpdx://auth-callback` must be revisited to match the final appId. + Provenance note: the iOS "placeholder" `DQ48D9BF2V.org.cru.mpdx` is not invented — it is + inherited from the legacy misnamed `public/.well-known/apple-app-site-association.json` + committed in-repo (202 bytes; appID `DQ48D9BF2V.org.cru.mpdx`, legacy paths + `/accountLists/*/contacts/*`, `/contacts/*`, `/auth/mobile`), so it was real for the old native + app — Daniel confirms it is still current (open question 5). +- **Capacitor major:** whatever T1 scaffolds (Capacitor 7 expected; verify current at install) pins + every `@capacitor/*` package; upgrades run the §10.3 checklist. +- **AASA / assetlinks serving:** `Content-Type: application/json`, direct 200, no redirect — + enforced in both `next.config.ts` and `customHttp.yml`, verified by release-checklist curl. + +### 3.4 Contradiction resolutions (binding) + +| # | Conflict | Resolution — winner / loser | +| --- | --- | --- | +| R1 | Detection module: camera doc says `src/lib/capacitor.ts` `isNativePlatform()`; push doc says `src/lib/nativeShell/nativeShell.ts` `isNativeShell()`; shell doc sketches `isShell.ts` | **`src/lib/nativeShell/nativeShell.ts` with `isNativeShell()`/`getDevicePlatform()` wins** (push-registration doc). Camera doc loses (`src/lib/capacitor.ts` is not created); shell doc's `isShell.ts` name loses. Camera tests mock `src/lib/nativeShell/nativeShell` instead. | +| R2 | Push-tap data field: push-registration §3.3 reads `notification.data?.route`; fcm-v1 + deep-links say `deepLink` | **`deepLink` wins** (fcm-v1 + deep-links). Push-registration doc loses; its bootstrap snippet's `route` key is wrong. | +| R3 | Tap-listener ownership: push-registration puts `pushNotificationActionPerformed` in `PushBootstrap`; deep-links puts it in `NativeDeepLinkProvider` | **`NativeDeepLinkProvider` wins** (deep-links) — it owns sanitization, the cold-start latch, and `appUrlOpen`; one listener, one routing core. `PushBootstrap` is registration-lifecycle only. Push-registration doc loses this listener (its tests for tap routing move to T17). | +| R4 | Multi-notification route: fcm-v1 placeholder `WebRouter.contacts_path` (contacts list); deep-links says dashboard `/accountLists/:alid` | **Dashboard wins** (deep-links — the route-mapping owner; fcm-v1 explicitly marked its value PLACEHOLDER). `contacts_path` helper still ships (harmless, used nowhere critical) or may be dropped in T3. | +| R5 | `user_notification_options` implementation: fcm-v1 inlines WebRouter paths; deep-links routes through `DeepLinkBuilder` | **DeepLinkBuilder version wins** (deep-links) — single mapping authority, per-type tabs, future-type fallback. fcm-v1's sketch loses; its WebRouter refactor (T3) is retained as the path-string source DeepLinkBuilder and `contact_url` share. | +| R6 | Shell-doc file sketch (`useNativePush.ts`, `useDeepLinks.ts`, `useNativeAuth.ts`) vs area docs' concrete names | **Area docs win on file names** (`pushRegistration.ts`, `deepLink.ts` + `NativeDeepLinkProvider`); `useNativeAuth.ts` stands (shell doc is the auth owner). The shell doc's layout was indicative. | +| R7 | Call-site count: fcm-v1 §3 says `deep_link` enters opts at "three call sites" (counting the WebRouter refactor); deep-links §1.1 and T5 say "both call sites" | **Two call sites is canonical** — the actual opts-injection sites are `notification_type.rb#user_notification_options` and `task/notification_worker.rb`. The WebRouter work is a path-helper refactor (T3), not an injection site. Cosmetic only; work items already reconcile. fcm-v1 §3 heading corrected. | +| R8 | AASA file state: capacitor-shell §11 said `apple-app-site-association` is "currently EMPTY — recreate"; deep-links + this plan describe a misnamed `apple-app-site-association.json` with real legacy content | **deep-links/master plan version is factually correct** (verified 2026-06-10: extensionless file does not exist; `apple-app-site-association.json` has 202 bytes incl. appID `DQ48D9BF2V.org.cru.mpdx`). Shell doc §11 corrected. No work changes — T18 supersedes either reading. The legacy file is also the provenance of the iOS identity "placeholders" (§3.3). | +| R9 | Signout chain: §1 push summary omitted `clearDataDogUser`; §3.3 included it; T13's test list mentioned neither | **§3.3 chain is canonical:** `disablePush` → CacheStorage clear → `clearDataDogUser` → `clearApolloData()`. §1 and T13 corrected to match. | + +--- + +## 4. Consolidated open questions for Daniel + +**Accounts / credentials (blocking T8, T9, T29, T32):** + +1. **AWS SNS console:** GCM platform-app credential type today (legacy API key vs FCM v1 Token)? + Is the original legacy Firebase project recoverable (keeps sender ID / any surviving tokens + valid)? APNs platform app: cert (.p12, expiry?) or .p8 token, and what bundle ID is it + configured for? +2. **Firebase:** project + `google-services.json` for the shell's Android app — must be the SAME + project as the SNS credentials (SENDER_ID_MISMATCH trap). +3. **Okta admin:** can a native public PKCE client be registered (redirect URIs + `org.mpdx://auth-callback`, `https://mpdx.org/auth/native-callback`)? Does org policy allow + `offline_access` refresh tokens for public clients (needed only if cookie Plan B activates)? +4. **Android identity:** do we control the Play listing for `org.mpdx` and hold/retain its Play App + Signing key? Reuse (recommended — assetlinks unchanged, installs migrate) vs new package? +5. **Apple identity:** is team `DQ48D9BF2V` still Cru's? Reuse bundle `org.cru.mpdx` (update the + old App Store listing) or new bundle ID? Team ID + bundle fill AASA, Xcode, APNs `.p8`. + Context: both values come from the legacy `apple-app-site-association.json` committed in-repo + (§3.3 provenance note), so they were real for the old native app — the question is whether they + are still current. + +**Product decisions:** + +6. Push sound: keep silent banners (current design) or add `aps.sound` / + `android.notification.sound: 'default'`? +7. Is the legacy native iOS app formally retired (lets us drop the APNs `link` key)? +8. Deep-link tab mapping sign-off (deep-links §1.2), especially `NewPartnerDuplicateNotMerged` → + merge tool, multi-notification → dashboard, and task reminders → tasks list (or + `/tasks?taskId=`?). +9. After logout + re-login on the same device: should push re-enable automatically (preserve + `mpdx_push_enabled` across `logoutCleanup`) or require re-opting-in from settings (current + design)? +10. "In App" column relabel copy ("Mobile App"?) — and does the `app` flag have any consumer today + besides push (e.g. an in-app notification list)? Final i18n copy for the settings card. +11. Shell sign-out scope: MPDX only (design default) or also kill the system browser's Okta SSO + session across apps? +12. Offline viewer (v1.1): is the session-marker + device-lock posture acceptable, or scope + cache-at-rest encryption? And: comfortable submitting v1 before the viewer lands (push + camera + + in-session offline as the 4.2 defense), accepting a possible rejection cycle? +13. Camera follow-ups: settings deep-link on permission denial worth the `capacitor-native-settings` + community dependency, or copy-only for v1? Schedule or backlog the web-path offline-copy ticket? + +**Verification asks (cheap):** + +14. One curl after a preview deploy: does Amplify serve Next `headers()` for `public/` assets + (AASA content type)? Does prod mpdx.org do any apex/www or http→https redirect on + `/.well-known/*`? +15. Apple privacy labels / Play Data Safety: Daniel files the photos-data declarations (answers + specified in camera doc §6). + +--- + +## 5. Risks and mitigations + +| Risk | Mitigation | +| --- | --- | +| **Bridge injection fails on the remote origin** (invalidates `server.url` architecture) | T1 Gate 1 on day one, before anything else is built. Only this gate failure stops Phase 4. | +| **WKWebView cookie persistence flaky** → users re-auth constantly | Day 2 persistence battery (Gate 3); degraded = near-silent SSO re-auth; proven-flaky = Plan B Keychain refresh token (pre-designed, `offline_access` question already asked). | +| **SENDER_ID_MISMATCH** — SNS FCM credentials and shell `google-services.json` from different Firebase projects → every Android send fails silently | Runbook hard rule: same project for both; `aws sns publish` smoke test before app-level QA; CloudWatch delivery-status logging. | +| **APNs bundle-ID mismatch** with the legacy platform app | Console check first (T8); if new bundle, create a new platform app + `SNS_APNS_APPLICATION_ARN` change + ECS redeploy (env read at boot). | +| **Apple 4.2 rejection** | Camera demo-ready at first submission, receipts document, offline viewer building in parallel, one rejection/appeal cycle budgeted in the timeline. | +| **`server.url` "not intended for production"** posture changes in a future Capacitor major | Single-host rule avoids all documented failure modes today; mandatory per-major upgrade checklist (T28) re-runs Gate 1. | +| **New auth surface** (`native-okta` callback, token proxy) abused | Trust-equivalent to the already-public `oktaSignIn` mutation; rate limiting, NextAuth CSRF, no body logging, Critical-pattern security review; raw-token log line removed (T7). PKCE state/verifier in memory only. | +| **Deep-link open redirect** | Path-only contract + `sanitizeDeepLinkPath` (single `/`, no scheme/`//`/`\`), exact host match, fallback route; table-driven tests are the spec. | +| **Locale list drift** between `deviceLocale.ts` and Rails `fast_gettext.rb` → 422 on registration | Frozen const with pointer comment; consider retry-with-`'en'` on 422 as cheap hardening during T12. | +| **Relabeling "In App" breaks another consumer of the `app` flag** | Open question #10 before T14 merges; relabel is copy-only and trivially reversible. | +| **Client sends pushes nobody sees on staging** (non-admin drop guard) | QA note baked into T30: staging test users must be admins. | +| **Web regressions from shell code** | Everything gates on `isNativeShell()`; plugins are dynamic imports; anchor regression tests (PersonName web path unchanged, signout paths unchanged, bootstrap never prompts) are mandatory red-first tests. | +| **Flat-opts invariant** — `transform_values(&:to_s)` corrupts nested hashes | publish_service spec encodes the invariant; callers currently comply; convention documented. | +| **Deploy during store review changes what reviewers see** | `STORE_REVIEW_FREEZE.md` CI flag / environment protection (T28). | +| **NextAuth v4 maintenance mode** | Accepted: ~80 paved-road lines beat bespoke JWE minting; Auth.js v5 migration named as a future project; CredentialsProvider pattern survives the migration. | +| **End-to-end push untestable until shell + credentials exist** | Unit coverage is strong and lands dark; T30 is the explicit integration gate; `aws sns publish` smoke decouples SNS validation from app readiness. | diff --git a/docs/pwa-design/push-registration-frontend.md b/docs/pwa-design/push-registration-frontend.md new file mode 100644 index 0000000000..754d78e9e1 --- /dev/null +++ b/docs/pwa-design/push-registration-frontend.md @@ -0,0 +1,756 @@ +# Push Registration — Frontend/Shell Design (Phase 3 frontend) + +Status: DESIGN — 2026-06-10; §3.2/§3.3/§5.1/§6 reconciled with the +implemented listener-ownership, session-scoped registration, and enablePush +completion semantics after code review — 2026-06-11 +Scope: the mpdx-react side of Phase 3 push notifications: Capacitor push plugin +integration, device registration against `/api/v2/user/devices`, unregister on +logout, permission UX, settings toggles, and notification-tap deep links. +Backend FCM v1 migration is designed separately (mpdx_api, branch +`pwa-push-fcm-v1`). + +--- + +## 0. Verified facts this design rests on + +### Backend contract (`/api/v2/user/devices`, read 2026-06-10) + +`app/controllers/api/v2/user/devices_controller.rb` + `app/models/user/device.rb`: + +- **Routes** (`config/routes.rb:299`): `resources :devices, except: :update` + under `/api/v2/user` → `GET /api/v2/user/devices`, `GET/DELETE +/api/v2/user/devices/:id`, `POST /api/v2/user/devices`. JSON:API format, + Bearer auth, scoped to `current_user.devices`. +- **Create attributes** (`User::Device::PERMITTED_ATTRIBUTES`): `platform`, + `token`, `version`, `locale` (+ optional `id`, timestamps, `overwrite`). + `platform`, `token`, `version`, `locale` are all presence-validated. +- **`platform` ∈ `['APNS', 'GCM']`** (uppercase). Android FCM tokens still + register under `'GCM'` — that is the SNS platform name, do not "fix" it. +- **`locale` must be in Rails `I18n.available_locales`** + (`config/initializers/fast_gettext.rb`): `en, en-US, ar, hy, my, zh-Hans-CN, +nl-NL, fr-CA, fr-FR, de, de-CH, id, it, ko, pl, pt-BR, ro, ru, es-419, th, +tr, uk, vi`. Note: **no bare `fr`** (frontend has one) — mapping needed. +- **Idempotent re-registration**: `before_validation :delete_conflicting_device` + deletes any existing row with the same `platform`+`token` (without + unregistering the SNS endpoint), then `register` creates/reuses the SNS + endpoint. Re-POSTing the same token is safe; POSTing a token after a + different user logs in on the same device transfers it (old user stops + receiving pushes). This is the server-side idempotency we lean on. +- **Destroy**: `DELETE /api/v2/user/devices/:id` → `after_destroy :unregister` + tears down the SNS endpoint; `Aws::SNS::Errors::InvalidClientTokenId` is + swallowed. Policy: device must belong to `current_user`. +- **Serializer** (`user/device_serializer.rb`) returns `id, created_at, locale, +platform, version, updated_at` — **not** `token`. So the client must keep its + own record of the registered token; the server response gives us the `id` we + need for later DELETE. +- No client-generated-UUID requirement found in `app/lib/json_api_service.rb`; + the server can mint the id and the create response returns it. + +### Frontend plumbing (read 2026-06-10) + +- The `apiToken` never needs to be touched by feature code: `makeAuthLink` + (`src/lib/apollo/link.ts:54`) attaches `Authorization: Bearer ` to + **every** Apollo operation, and the REST proxy + (`pages/api/graphql-rest.page.ts:1144`) forwards `req.headers.authorization` + into `MpdxRestApi` (`willSendRequest` sets the `Authorization` header on the + upstream REST call). Operations whose root fields are not in + `rootFields.generated.ts` are routed to `/api/graphql-rest` by + `isNativeOperation` — a new proxy-only mutation routes correctly with zero + link changes. +- Signout paths wired to `clearApolloData()` today (the Phase 2 invariant): + 1. `pages/logout.page.tsx` (also clears SW CacheStorage) + 2. `src/components/Layouts/Primary/TopBar/Items/ProfileMenu/ProfileMenu.tsx:413` + 3. `src/components/Layouts/Primary/NavBar/NavTools/ProfileMenuPanel/ProfileMenuPanel.tsx:202` + 4. `src/lib/apollo/client.ts:39` — `AUTHENTICATION_ERROR` handler (token + already invalid at this point). +- `src/components/Settings/notifications/NotificationsTable.tsx` **already + renders the `app` channel** as the "In App" column (checkbox per notification + type, Formik + `UpdateNotificationPreferences` mutation). The backend Phase 3 + task wires this same `app` flag to gate push sends — so per-type push + toggles are already 95% built; we only adjust copy. +- Capacitor is not yet in `package.json` — this phase introduces + `@capacitor/core` + plugins (the Phase 4 shell builds on the same install). +- Capacitor plugin API confirmed current (context7, 2026-06): + `checkPermissions()`, `requestPermissions()` (prompts iOS first call only; + Android 13+ prompts, ≤12 auto-grants), `register()` (never prompts; fires + `registration` event with token or `registrationError`), `unregister()`, + `removeAllListeners()`, events `registration`, `registrationError`, + `pushNotificationReceived`, `pushNotificationActionPerformed`. On iOS the + `registration` token is the **raw APNs device token** (no FCM SDK involved) + — exactly what the SNS `APNS` platform app expects. On Android it is the FCM + token, which the SNS `GCM` platform app expects. + +--- + +## 1. Decision: device registration goes through the REST proxy (new Schema folder) + +**Chosen:** a new `pages/api/Schema/UserDevices/` folder exposing +`registerUserDevice` / `destroyUserDevice` mutations, called from the client +through Apollo like every other proxy operation. + +**Rejected:** direct `fetch('https://api.../api/v2/user/devices')` from a +shell-only module. + +Justification: + +1. **Token handling.** Direct fetch needs the `apiToken` in client JS + (`useSession().user.apiToken`). The codebase's standard is that _only_ the + Apollo auth link touches the token; the proxy boundary is the sanctioned + fetch layer (`.CLAUDE/rules/code-review.md`: "No raw fetch or axios calls + for data that could go through Apollo"). This data can go through Apollo. +2. **Shell mode makes it free.** The Capacitor webview runs the _hosted_ app + (`server.url` mode), so `/api/graphql-rest` is same-origin and works + identically in shell and browser. No CORS, no second auth path. +3. **Free behavior we want:** the Phase 2 `offlineLink` blocks the mutation + when offline (registration retried next launch); generated TypeScript types; + `GqlMockedProvider` testability; consistent error surfaces. +4. **Cost is small:** one schema folder following the documented 7-step + pattern. + +One non-issue to note: device mutations go through Apollo but their results are +junk data in the persisted cache. The schema below returns a plain +`UserDevice` type; we do not add a type policy for it, and the stored device +id lives in `localStorage`, not the Apollo cache (it must survive +`clearStore()` long enough to be used _during_ logout — see §4). + +### 1.1 Schema folder: `pages/api/Schema/UserDevices/` + +Per the repo pattern (`.graphql` → `resolvers.ts` → `datahandler.ts` → REST +call in `graphql-rest.page.ts`, register in `pages/api/Schema/index.ts`): + +`pages/api/Schema/UserDevices/userDevices.graphql`: + +```graphql +extend type Mutation { + registerUserDevice(input: RegisterUserDeviceInput!): UserDevice! + destroyUserDevice(input: DestroyUserDeviceInput!): UserDeviceDeletion! +} + +enum UserDevicePlatformEnum { + APNS + GCM +} + +input RegisterUserDeviceInput { + platform: UserDevicePlatformEnum! + token: String! + version: String! + locale: String! +} + +input DestroyUserDeviceInput { + id: ID! +} + +type UserDevice { + id: ID! + platform: String! + version: String! + locale: String! +} + +type UserDeviceDeletion { + success: Boolean! +} +``` + +`MpdxRestApi` methods (in `pages/api/graphql-rest.page.ts`, matching existing +POST/DELETE shapes): + +```ts +async registerUserDevice(attributes: RegisterUserDeviceInput) { + const { data } = await this.post('user/devices', { + body: { + data: { + type: 'user_devices', + attributes: { + platform: attributes.platform, + token: attributes.token, + version: attributes.version, + locale: attributes.locale, + }, + }, + }, + }); + return RegisterUserDevice(data); // datahandler: snake_case → camelCase +} + +async destroyUserDevice(id: string) { + await this.delete(`user/devices/${id}`, { + body: { data: { type: 'user_devices' } }, + }); + return { success: true }; +} +``` + +`datahandler.ts` maps the JSON:API resource (`data.id`, +`data.attributes.{platform,version,locale}`) to `UserDevice`. Every REST +response field is either mapped or intentionally ignored (timestamps — +ignored; `token` is not returned by the serializer). + +Client operations live next to the code that uses them: +`src/lib/nativeShell/UserDevice.graphql` with operations named +`RegisterUserDevice` and `DestroyUserDevice` (descriptive, no Get/Load +prefix). Run `yarn gql` after adding. + +--- + +## 2. Module layout — shell-only code, web build unaffected + +New directory **`src/lib/nativeShell/`** — the single home for +Capacitor-aware code (Phase 4 camera work will join it): + +``` +src/lib/nativeShell/ +├── nativeShell.ts # platform detection — the ONLY static @capacitor/core import +├── pushRegistration.ts # enable/disable/sync logic (lazy-imports the plugin) +├── pushStorage.ts # localStorage keys: device id, token, enabled flag, locale +├── deviceLocale.ts # frontend locale → API-accepted locale mapping +├── UserDevice.graphql # RegisterUserDevice / DestroyUserDevice operations +├── *.test.ts # colocated tests +``` + +Rules that keep the web build unaffected: + +- **`@capacitor/core` is statically imported only in `nativeShell.ts`.** It is + a few-KB, side-effect-free runtime; `Capacitor.isNativePlatform()` returns + `false` in any browser. Everything else gates on it: + + ```ts + // src/lib/nativeShell/nativeShell.ts + import { Capacitor } from '@capacitor/core'; + + export const isNativeShell = (): boolean => Capacitor.isNativePlatform(); + + // 'APNS' for ios, 'GCM' for android, null on web + export const getDevicePlatform = (): 'APNS' | 'GCM' | null => + Capacitor.getPlatform() === 'ios' + ? 'APNS' + : Capacitor.getPlatform() === 'android' + ? 'GCM' + : null; + ``` + +- **`@capacitor/push-notifications` and `@capacitor/app` are only ever loaded + via dynamic `import()`** inside functions that have already checked + `isNativeShell()`. The plugin code is split into an async chunk that web + users never download, and the plugin's "not implemented on web" warnings + never fire. + + ```ts + const loadPushPlugin = async () => + (await import('@capacitor/push-notifications')).PushNotifications; + ``` + +- Dependencies added now: `@capacitor/core`, `@capacitor/push-notifications`, + `@capacitor/app` (for `App.getInfo().version` and Phase 4 reuse). Pin all + three to the same Capacitor major chosen in Phase 4 (Capacitor 7 was current + as of early 2026 — verify latest major at install time). Native platform + packages (`@capacitor/ios`, `@capacitor/android`) remain Phase 4. + +UI/bootstrap components: + +``` +src/components/Shell/PushBootstrap/PushBootstrap.tsx # mounted in _app, returns null +src/components/Settings/notifications/PushNotificationsCard/ +├── PushNotificationsCard.tsx # settings opt-in UI +├── PushNotificationsCard.test.tsx +``` + +`PushBootstrap` mounts inside `` in `pages/_app.page.tsx` +(needs `useApolloClient` + `useRouter`). On web it renders nothing and touches +no plugin code (first check is `isNativeShell()`). + +--- + +## 3. Registration lifecycle + +### 3.1 State kept on the device (`pushStorage.ts`, localStorage) + +The Capacitor webview's localStorage persists per app install; no extra +plugin needed. Keys (all cleared by `disablePush`): + +| Key | Value | Purpose | +| --------------------- | ---------------------------------- | ------------------------------------------------------------ | +| `mpdx_push_enabled` | `'true'` | user opted in via settings — gates launch-time auto-register | +| `mpdx_push_device_id` | server id from create response | needed for `DELETE /user/devices/:id` on logout | +| `mpdx_push_token` | last token successfully registered | skip redundant POSTs when the token hasn't rotated | +| `mpdx_push_locale` | locale sent at registration | re-register if user changes language | + +These deliberately live _outside_ Apollo/IndexedDB: `clearApolloData()` must +not race with reading the device id during logout, and `clearStore()` would +otherwise wipe it before the DELETE fires. + +### 3.2 Core functions (`pushRegistration.ts`) + +All take the `ApolloClient` as an argument (callers get it from +`useApolloClient()`); mutations use the generated documents from +`UserDevice.graphql`. + +**Listener ownership (reconciled 2026-06-11).** The `PushNotifications` +plugin is a module singleton shared with `NativeDeepLinkProvider`, which owns +the `pushNotificationActionPerformed` tap listener (deep-links design §4.3, +master plan §3.4 R3). An earlier revision of this section prescribed +`removeAllListeners()` for "idempotent re-attach"; that wiped the deep-link +tap listener whenever registration re-ran (locale settle, settings enable, +disable) and killed push-tap routing for the session. `pushRegistration` +therefore tracks the `PluginListenerHandle`s it attaches at module level and +removes ONLY those — it must never call `removeAllListeners()`. + +**Session-scoped idempotency.** Module-level state per app launch: + +- `registeredThisSession` — the localStorage token/locale comparison only + short-circuits once a registration has succeeded in THIS session. Every app + launch therefore performs exactly one upserting `RegisterUserDevice` POST, + which lets the backend's `delete_conflicting_device` upsert (§0) fix device + ownership after a user switch on the same shell (stale `mpdx_push_*` keys + must not suppress the POST) and recreate rows the server deleted (e.g. SNS + `PlatformApplicationDisabled` cleanup). Repeat `registration` events within + the session are still skipped without a network call. +- `teardownEpoch` — bumped by `disablePush` before anything else. A + registration mutation that resolves from a previous epoch must NOT + `storeRegistration`/`setPushEnabled`; it fires a compensating + `DestroyUserDevice` for the row it just created instead. This closes the + disable-while-registering race where a late mutation resurrected push state + after the user (or logout) disabled it. + +```ts +// Attach 'registration'/'registrationError' listeners (removing only the +// handles THIS module previously attached), then PushNotifications.register(). +// The listener is where the server call happens — this single path handles +// first registration, every app launch, AND token rotation (FCM onNewToken / +// APNs token change both surface as a new 'registration' event). The optional +// onRegistered callback fires once a registration event has been fully +// processed (mutation done or in-session skip confirmed) — enablePush uses it +// to report truthful completion. +export const startPushRegistration = async ( + client, + locale, + onRegistrationError?, + onRegistered?, +): Promise => { + if (!isNativeShell()) return; + const PushNotifications = await loadPushPlugin(); + await removeOwnedListeners(); // ours only — NEVER removeAllListeners() + ownedListenerHandles.push( + await PushNotifications.addListener('registration', ({ value: token }) => + registerDeviceWithApi(client, token, locale).then( + (active) => active && onRegistered?.(), + (error) => onRegistrationError?.(error), + ), + ), + ); + ownedListenerHandles.push( + await PushNotifications.addListener('registrationError', (error) => + onRegistrationError?.(error), + ), + ); + await PushNotifications.register(); // never prompts; fires 'registration' +}; + +const registerDeviceWithApi = async ( + client, + token, + locale, +): Promise => { + const platform = getDevicePlatform(); + if (!platform) return false; + const mappedLocale = toDeviceLocale(locale); // §3.4 + if ( + registeredThisSession && // skip only applies WITHIN a session + getStoredToken() === token && + getStoredLocale() === mappedLocale && + getStoredDeviceId() + ) { + return true; // unchanged within this session — no network call + } + const epoch = teardownEpoch; + const version = await getShellVersion(); // App.getInfo().version, fallback '0.0.0' + const { data } = await client.mutate({ + mutation: RegisterUserDeviceDocument, + variables: { input: { platform, token, version, locale: mappedLocale } }, + }); + if (epoch !== teardownEpoch) { + // disablePush ran while the mutation was in flight — compensate + await client + .mutate({ + mutation: DestroyUserDeviceDocument, + variables: { input: { id: data.registerUserDevice.id } }, + }) + .catch(() => undefined); + return false; + } + storeRegistration(data.registerUserDevice.id, token, mappedLocale); + setPushEnabled(true); + registeredThisSession = true; + return true; +}; +``` + +```ts +// User-facing opt-in (settings card button) — the ONLY place that prompts. +// Resolves 'granted' only once the device registration has ACTUALLY +// completed (OS 'registration' event received AND the RegisterUserDevice +// mutation finished), so the card's enabled state and success snackbar are +// truthful. Rejects on registrationError, mutation failure, or a 30s timeout +// waiting for the OS token — the card shows the error state with Retry. +export const enablePush = async ( + client, + locale, + onRegistrationError?, +): Promise => { + if (!isNativeShell()) return 'unavailable'; + const PushNotifications = await loadPushPlugin(); + const { receive } = await PushNotifications.requestPermissions(); + if (receive !== 'granted') return 'denied'; + return new Promise((resolve, reject) => { + // settle-once wrapper with a 30s timeout (registrationTimeoutMs) + startPushRegistration( + client, + locale, + (error) => { + onRegistrationError?.(error); + reject(error); + }, + () => resolve('granted'), + ).catch(reject); + }); +}; +``` + +```ts +// Best-effort teardown — used by settings "disable" AND logout (§4). +// Every step is wrapped so one failure never blocks the next or the caller. +export const disablePush = async (client): Promise => { + if (!isNativeShell()) return; + teardownEpoch += 1; // in-flight registrations must compensate, not store + registeredThisSession = false; + const deviceId = getStoredDeviceId(); + if (deviceId) { + await client + .mutate({ + mutation: DestroyUserDeviceDocument, + variables: { input: { id: deviceId } }, + }) + .catch(() => undefined); // offline / 401 / already gone — proceed anyway + } + try { + await removeOwnedListeners(); // ours only — the deep-link tap listener survives + const PushNotifications = await loadPushPlugin(); + await PushNotifications.unregister(); // device stops receiving even if DELETE failed + } catch { + // plugin unavailable — nothing to tear down + } + clearPushStorage(); // always +}; +``` + +### 3.3 App-launch flow (`PushBootstrap`) — silent re-registration + rotation + +```ts +useEffect(() => { + if (!isNativeShell() || !isPushEnabled()) return; + (async () => { + const PushNotifications = await loadPushPlugin(); + const { receive } = await PushNotifications.checkPermissions(); // NON-prompting + if (receive !== 'granted') return; // user revoked in OS settings — stay silent + await startPushRegistration(client, locale); // register() → 'registration' → + // registerDeviceWithApi: one upserting POST per launch, then in-session skip + })(); +}, [client, locale]); +``` + +Invariants enforced here: + +- **Never prompt on launch**: `requestPermissions()` is called _only_ from the + settings card button. The bootstrap uses `checkPermissions()` (read-only) + and `register()` (never prompts). +- **Token rotation handled**: the `registration` listener stays attached for + the whole session, so an FCM rotation mid-session re-registers immediately; + rotation while the app was closed is caught by the launch-time `register()`. +- **One upserting POST per launch**: the first `registration` event of each + session POSTs even when token + locale match localStorage — the server-side + `delete_conflicting_device` upsert makes this idempotent, fixes ownership + after a user switch, and recreates server-deleted rows (§3.2). Repeat + events within the session make zero network calls. +- If the POST fails (offline — `offlineLink` blocks it), nothing is stored; + next launch retries naturally. + +Notification-tap deep links are NOT handled here: `NativeDeepLinkProvider` +owns the `pushNotificationActionPerformed` listener and all tap/link routing +(deep-links design §4.3, master plan §3.4 R3). `PushBootstrap` is +registration lifecycle only, and `pushRegistration` never touches listeners +it does not own (§3.2), so the provider's tap listener survives every +registration re-run. + +### 3.4 Locale + version + +- `toDeviceLocale(locale)` (`deviceLocale.ts`): exact match against the API's + accepted list when possible, else base-language match (`fr` → `fr-FR`), + else `'en'`. Keep the accepted-locale list as a frozen const with a comment + pointing at `mpdx_api/config/initializers/fast_gettext.rb` (drift risk noted + in §7). Locale source: `useLocale()` (user preference), matching what the + API uses for push text. +- `getShellVersion()`: `(await import('@capacitor/app')).App.getInfo()` → + `version`, with `'0.0.0'` fallback (the attribute is presence-validated + server-side). This is the _shell_ version — exactly what we need for the + Phase 4 minimum-shell-version handshake later. + +--- + +## 4. Unregister on logout — extending the clearApolloData invariant + +Phase 2 established: _every path that ends a session must call +`clearApolloData()`_. The same three user-initiated paths currently duplicate +a 3–4 line teardown block. Rather than adding a fourth copy-pasted line, we +consolidate: + +**New: `src/lib/auth/logoutCleanup.ts`** + +```ts +export const logoutCleanup = async ( + client: ApolloClient, +): Promise => { + // 1. Unregister push FIRST — needs a valid apiToken for the DELETE, + // and clearStore() below would drop in-flight operations. + await disablePush(client); // no-op on web; never throws + // 2. Clear SW CacheStorage (previously only on logout.page — now everywhere, + // a strict improvement for the shared-device story). + if (typeof caches !== 'undefined') { + const keys = await caches.keys(); + await Promise.all(keys.map((key) => caches.delete(key))); + } + clearDataDogUser(); + // 3. The Phase 2 invariant. + await clearApolloData(client); +}; +``` + +Callers become `await logoutCleanup(client); await signOut({ callbackUrl: 'signOut' });`: + +1. `pages/logout.page.tsx` +2. `ProfileMenu.tsx` (TopBar) +3. `ProfileMenuPanel.tsx` (NavBar) +4. `src/lib/apollo/client.ts` `AUTHENTICATION_ERROR` handler: keep its current + signOut-then-clean ordering but swap `clearApolloData(client)` for + `logoutCleanup(client)`. The DELETE will 401 here (token already dead) — + `disablePush` swallows it, still calls the plugin `unregister()` (device + stops receiving) and clears local keys. The orphaned server row is cleaned + up by `delete_conflicting_device` on the next login from that device, and + by the backend's stale-device cleanup on `EndpointDisabled`. + +Web safety: `disablePush` returns immediately when `!isNativeShell()` — no +plugin chunk is ever fetched in a browser, and the behavior of the three web +signout paths is unchanged except for the (beneficial) CacheStorage clearing. + +Update the invariant comment in `clearApolloData.ts` and the roadmap to say +new signout paths must call **`logoutCleanup()`** (which wraps +`clearApolloData`). + +Note: logging out _keeps OS-level permission granted_ — by design. Logging +back in re-registers silently on next launch only if `mpdx_push_enabled` is +set; since `disablePush` cleared it, the returning user must re-enable from +settings. If product prefers "stays enabled across re-login on the same +device", we instead preserve the flag in `logoutCleanup` (1-line change — +flagged as an open question). + +--- + +## 5. Permission UX + settings toggles + +### 5.1 `PushNotificationsCard` (in-context prompt, never on first launch) + +Rendered at the top of the existing notifications settings page +(`pages/accountLists/[accountListId]/settings/notifications.page.tsx`, above +``), and **only when `isNativeShell()`** — web users never +see it, so the page is visually unchanged in browsers. + +States (MUI `Card` + `Alert`, all copy via `t()`): + +| State | Detection | UI | +| ------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Loading | permission not yet read (`usePushPermission()` returns `null`) | `` — never flash an active enable button at a previously-denied user | +| Off (default) | `!isPushEnabled()` and permission not `denied` | Explainer copy ("Get notified on this device when…") + **Enable Push Notifications** button → `enablePush()` — this button is the only `requestPermissions()` call site in the app | +| Enabled | `isPushEnabled()` and permission `granted` | Success state + **Disable on this device** button → `disablePush()` (stays signed in) | +| Denied | `checkPermissions().receive === 'denied'` | `` with per-OS instructions to enable notifications in device Settings, then return here (no extra native-settings plugin this release) | +| Error | `registrationError` fired, mutation failed, or registration timed out (`enablePush` rejected) | `` + Retry | + +The enabled state and success snackbar appear only after `enablePush` +resolves — i.e. after the OS token arrived AND the `RegisterUserDevice` +mutation completed (§3.2) — never on `register()` returning. While the flow +runs, the button is disabled with a `CircularProgress` in-progress indicator. + +Permission state comes from a small colocated `usePushPermission()` hook: +`checkPermissions()` (non-prompting) on mount AND on every document +`visibilitychange` back to visible — returning from OS Settings resumes the +Capacitor webview without a remount, so the denied state must clear within +the session for the alert's "then return here" instructions to work. + +### 5.2 Per-type toggles — reuse the `app` channel column + +`NotificationsTable` already renders, persists, and selects-all the `app` +flag per notification type ("In App" column, smartphone icon). The backend +Phase 3 task gates push sends on exactly this flag. Therefore **no new +per-type UI is built**. Changes are copy-only: + +- Relabel the column header `t('In App')` → `t('Mobile App')` with a tooltip: + `t('Delivered as push notifications in the MPDX mobile app')` (final copy: + open question; the smartphone icon already implies this). +- When rendered inside the shell with push enabled, the card (§5.1) sits + directly above the table, so the user sees "enable on device" + "choose + types" as one flow. + +No changes to the Formik schema, mutation, or the `app` field wiring. + +--- + +## 6. TDD plan + +Conventions: colocated `*.test.{ts,tsx}`, `GqlMockedProvider` with typed +generics + `mutationSpy`/`toHaveGraphqlOperation`, `findBy*`, no `fetch` +mocking, no `any` (use generated `RegisterUserDeviceMutation` etc. after +`yarn gql`). + +### 6.1 Mocking Capacitor + +Real packages are installed, so plain `jest.mock` factories work — including +through dynamic `import()` (Jest resolves dynamic imports from the same module +registry). Shared helper at `__tests__/util/capacitorMocks.ts`: + +```ts +export const mockPushNotifications = { + checkPermissions: jest.fn().mockResolvedValue({ receive: 'prompt' }), + requestPermissions: jest.fn().mockResolvedValue({ receive: 'granted' }), + register: jest.fn().mockResolvedValue(undefined), + unregister: jest.fn().mockResolvedValue(undefined), + addListener: + jest.fn(/* returns { remove } handles that mark the handler removed */), + removeAllListeners: jest.fn(/* marks every attached handler removed */), +}; + +// Fire attached listeners like the OS would. These respect handle.remove() +// and removeAllListeners() semantics — a removed listener no longer receives +// events — so cross-module listener-ownership bugs reproduce in jest: +export const emitRegistration = async (token: string) => { + /* … */ +}; +export const emitRegistrationError = async (error: string) => { + /* … */ +}; +export const emitPushNotificationActionPerformed = async (actionId, data) => { + /* … */ +}; + +export const setNativePlatform = (platform: 'ios' | 'android' | 'web') => { + /* drives the @capacitor/core mock */ +}; +``` + +Test files do: + +```ts +jest.mock('@capacitor/core', () => capacitorCoreMock); +jest.mock('@capacitor/push-notifications', () => ({ + PushNotifications: mockPushNotifications, +})); +jest.mock('@capacitor/app', () => ({ + App: { getInfo: jest.fn().mockResolvedValue({ version: '1.0.0' }) }, +})); +``` + +For lib functions that need an `ApolloClient`, render a tiny probe component +inside `GqlMockedProvider` that grabs `useApolloClient()` — keeps Apollo +mocking at the operation level per project convention. + +### 6.2 Test matrix (write each failing first — red/green per superpowers TDD) + +**`deviceLocale.test.ts`** — exact match (`de`), regional passthrough +(`pt-BR`), base-language upgrade (`fr` → `fr-FR`), unknown → `'en'`. + +**`pushRegistration.test.ts`** (probe-component harness): + +- web platform → `enablePush` returns `'unavailable'`, no plugin import, no mutation +- ios → `emitRegistration('tok')` → `toHaveGraphqlOperation('RegisterUserDevice', { input: { platform: 'APNS', token: 'tok', version: '1.0.0', locale: 'en' } })`; android → `'GCM'` +- stores device id from mocked mutation response; sets enabled flag +- second `emitRegistration` with the _same_ token in the same session → no second mutation (in-session idempotent skip); with a _rotated_ token → re-registers and updates stored id; a _fresh session_ with matching localStorage → still POSTs once (upsert, §3.2) +- permission denied → returns `'denied'`, `register()` never called +- `enablePush` resolves `'granted'` only after the registration mutation completes; rejects on `registrationError`, mutation failure, or timeout +- **listener ownership**: a foreign `pushNotificationActionPerformed` listener survives `startPushRegistration` AND `disablePush`; `removeAllListeners()` is never called (regression also pinned in `NativeDeepLinkProvider.test.tsx`) +- `disablePush`: fires `DestroyUserDevice` with stored id, removes only its own listeners, calls `unregister()`, clears all keys; mutation rejection still clears keys and resolves; no stored id → skips mutation but still tears down plugin +- disable-while-registering race: `disablePush` during an in-flight register mutation → state stays cleared and a compensating `DestroyUserDevice` fires for the late-created row + +**`PushBootstrap.test.tsx`**: + +- web → renders null, no plugin access +- native + flag unset → `checkPermissions` not even needed, no `register()` +- native + flag set + granted → `register()` called; one upserting POST per launch even with unchanged token/locale; rotated token re-registers via `toHaveGraphqlOperation` +- native + flag set + revoked (`denied`) → silent, no mutation +- **invariant test: `requestPermissions` is NEVER called from bootstrap** +- (tap routing tests live in `NativeDeepLinkProvider.test.tsx` — see deep-links design §4.3) + +**`PushNotificationsCard.test.tsx`** (`GqlMockedProvider<{ RegisterUserDevice: RegisterUserDeviceMutation }>`): + +- web → renders nothing +- default state → enable button; click → `requestPermissions` then `register`; no enabled state or snackbar until `emitRegistration` + mutation complete → then success snackbar + enabled state +- denied result → instructions alert, no `register()` +- denied recovery: permission re-granted in OS Settings + `visibilitychange` back to visible → card leaves the denied state +- loading skeleton while the permission read is unresolved (no enable-button flash) +- enabled state → disable button → `toHaveGraphqlOperation('DestroyUserDevice', ...)` + reverts to default state +- disable failure paths: `unregister()` rejection and `DestroyUserDevice` rejection both still revert to the off state with local keys cleared +- buttons disabled (with progress indicator) while in flight; error state shows retry; register-mutation failure shows the error alert and never a success snackbar + +**`logoutCleanup.test.ts`**: + +- ordering: `DestroyUserDevice` mutation observed **before** `cachePersistor.purge`/`clearStore` (spy call-order assertion) — protects the "unregister while token valid" rule +- mutation rejection → `clearApolloData` still runs and the function resolves (signout never blocked) +- web → no plugin import; CacheStorage cleared when `caches` exists +- existing `logout.page.test`, `ProfileMenu.test`, `ProfileMenuPanel.test` updated to assert `logoutCleanup` behavior is preserved (CacheStorage + clearApolloData + signOut still happen) + +**Proxy layer** — `pages/api/Schema/UserDevices/datahandler.test.ts`: JSON:API +device resource → `UserDevice` mapping; destroy returns `{ success: true }`. +Verify `yarn gql` runs cleanly after adding the schema + operations (Standards +checklist requirement). + +**`NotificationsTable.test.tsx`** — update label assertions for the renamed +column; behavior tests unchanged. + +### 6.3 Manual QA (needs Phase 4 shell + Firebase/APNs credentials — gated) + +Real-device checklist (cannot be Jest-tested): iOS prompt appears only from +settings button; kill/relaunch → no prompt, silent re-register; FCM token +rotation (reinstall) → new token registered; logout → push stops arriving; +notification tap cold-start deep link; OS-level revoke → card shows denied +state. + +--- + +## 7. Build/ship order and risks + +Order (all frontend tasks land dark — native-gated, zero web behavior change — +so they can merge before the Phase 4 shell exists): + +1. Proxy schema folder + datahandler tests (`yarn gql` green) +2. Capacitor deps + `nativeShell.ts` + `deviceLocale.ts` + `pushStorage.ts` +3. `pushRegistration.ts` + tests +4. `logoutCleanup.ts` consolidation + signout-path rewiring + tests +5. `PushNotificationsCard` + page integration + table relabel + tests +6. `PushBootstrap` + `_app` mount + deep-link handling + tests +7. Manual QA once Phase 4 shell + Firebase/APNs creds + backend FCM v1 land + +Risks: + +- **iOS token type assumption**: Capacitor hands us the raw APNs token, which + matches the current SNS `APNS` platform app. If the backend migration ever + consolidates on FCM-for-iOS instead, the shell needs the FCM iOS SDK + (`@capacitor-firebase/messaging`) — confirm the backend keeps the APNS + platform app before building (open question). +- **`app` channel semantics**: relabeling "In App" assumes the flag's only + consumer becomes push. If `app` also drives an in-app notification list, + keep the label broader. +- **Locale list drift** between the hardcoded accepted list and + `fast_gettext.rb`; a 422 on locale falls back to retry-with-`'en'` only if + we add that — current design relies on the mapping staying fresh. +- **End-to-end untestable until Phase 4**: unit coverage is strong but the + registration⇄SNS⇄FCM path is unproven until shell + credentials exist. +- **Capacitor major version**: verify current major (7 vs newer) at install + time; plugin API above is stable across 5→7. diff --git a/docs/pwa-design/review-follow-ups.md b/docs/pwa-design/review-follow-ups.md new file mode 100644 index 0000000000..b6fb82b7d4 --- /dev/null +++ b/docs/pwa-design/review-follow-ups.md @@ -0,0 +1,101 @@ +# Review Follow-ups — Phase 3+4 Multi-Agent Code Review + +Status: TRACKING — 2026-06-11. Companion to `phase3-4-master-plan.md`. +Scope: suggestion-severity findings from the multi-agent review of the +`pwa-phase3-4-push-shell` branch that were deliberately deferred (not fixed in +the review-fix round), plus findings that were re-reviewed and refuted, plus +the manual QA still owed. Critical/major findings were fixed on-branch in the +review-fix commits and are not listed here. + +--- + +## 1. Deferred suggestions (11) + +Each entry: file pointer → one-line disposition. Two were pulled forward and +**already applied in the review-fix round** (marked APPLIED). + +1. **destroyUserDevice interpolates client-supplied id into the REST path + without encoding** — `pages/api/graphql-rest.page.ts:658`. + APPLIED: id is now `encodeURIComponent`-wrapped (defense-in-depth; no + privilege escalation existed). +2. **Push-payload deepLink accepts any same-origin path** — + `src/lib/nativeShell/deepLink.ts:26-42`. Recommend: tighten + `routeFromPushData` to the `/accountLists` prefix the AASA/intent-filter + and backend `DeepLinkBuilder` already enforce; small follow-up before GA. +3. **PublishService RESERVED_KEYS only strips symbol keys; string + 'aps'/'link' leak** — `app/services/user/device/publish_service.rb` + (mpdx_api). Refuted on re-review — see §2; no action. +4. **UserDevices datahandler silently ignores the serializer's `user` + relationship without documenting it** — + `pages/api/Schema/UserDevices/datahandler.ts:6-18`. Recommend: extend the + inline comment to name the dropped `relationships.user` member; fold into + the next proxy touch. +5. **Deep-link listeners only mount in the authenticated tree; warm-start + taps on /login are dropped** — `pages/_app.page.tsx:91`. Recommend: + accept as designed (matches deep-links.md §4.3; cold-start taps replay via + Capacitor's queue), correct NativeDeepLinkProvider's overstated doc + comment, and verify the logged-out warm-start case during T30 device QA. +6. **DeepLinkBuilder inlines dashboard/merge-tool path strings instead of + WebRouter helpers** — `app/services/user/device/deep_link_builder.rb:39` + (mpdx_api). Recommend: add `dashboard_path` / `merge_contacts_path` + helpers to WebRouter next time DeepLinkBuilder is touched; strings are + verified correct today. +7. **capacitorMocks platform state leaks between tests with no automatic + reset** — `__tests__/util/capacitorMocks.ts:28`. Recommend: have the mock + module register its own `afterEach` reset (platform → 'web', re-pin + default `checkPermissions` resolution) so order-dependent passes are + impossible. +8. **Haptics tests use untyped `as jest.Mock` casts** — + `src/components/Shared/Modal/DeleteConfirmation/DeleteConfirmation.test.tsx:16` + (and `TaskModalCompleteForm.test.tsx`). Recommend: migrate to + `jest.mocked(useHaptics)` to match the branch's newer tests; do alongside + the next edit to either file. +9. **DeleteConfirmation confirm button not disabled while the delete + mutation is in flight** — + `src/components/Shared/Modal/DeleteConfirmation/DeleteConfirmation.tsx:110-112`. + APPLIED: the Yes button now disables on `deletingTask`/`deleting`. +10. **PublishService data_payload excludes reserved keys by symbol only, + while deep_link handles both key types** — + `app/services/user/device/publish_service.rb:3-10` (mpdx_api). Duplicate + of #3; refuted on re-review — see §2; no action. +11. **DeepLinkBuilder inlines paths against the single-source-of-paths + goal** — `app/services/user/device/deep_link_builder.rb:39-40` + (mpdx_api). Duplicate of #6; same disposition. + +--- + +## 2. Reviewed and refuted — do not re-litigate + +These were raised during review, adversarially re-checked against the mpdx_api +code, and refuted. Listed so future review passes don't re-open them. + +- **String-keyed reserved-key bypass in PublishService** (raised twice, + suggestions #3/#10): refuted — `PublishWorker` symbolizes the opts keys + upstream before invoking `PublishService`, so string-keyed `'aps'`/`'link'` + can never reach `data_payload`; the symbol-only `RESERVED_KEYS.except` is + sufficient for every reachable call path. +- **PublishWorker Hash-passthrough**: refuted — the worker's options hash is + normalized before publish; no caller-controlled hash passes through to the + SNS payload unsanitized. + +--- + +## 3. Remaining manual QA + +Automated coverage ends at the unit/component boundary; the following must be +run on simulators/devices before the T-gates close: + +- **`t1-gate-runbook.md`** — Gates 1–3 for the Capacitor shell prototype, + plus §7.2's device QA checklist for the T27 polish items (status bar, + splash, reload gesture). +- **`push-registration-frontend.md` §6.3** — manual push QA (needs Phase 4 + shell + Firebase/APNs credentials + backend FCM v1). Remember the staging + trap: pushes silently drop for non-admin users on staging + (`fcm-v1-backend.md` §"Staging guard"), so QA accounts must be admins. +- **`camera-contact-photo.md` §"Manual device QA checklist"** — iOS + Android + camera/library permission flows and real-photo upload paths. +- **`capacitor-shell.md` §10 checklist** — airplane-mode QA (in-session + offline, errorPath) and the cold-start precondition stack (§5.2, §7). +- **`phase3-4-master-plan.md` T30** — end-to-end push QA on devices, + including deep-link taps warm/cold and (per §1 item 5 above) the + logged-out warm-start tap case. diff --git a/docs/pwa-design/t1-gate-runbook.md b/docs/pwa-design/t1-gate-runbook.md new file mode 100644 index 0000000000..f041bbcc67 --- /dev/null +++ b/docs/pwa-design/t1-gate-runbook.md @@ -0,0 +1,333 @@ +# T1 Gate Runbook — Capacitor Shell Prototype (Gates 1–3) + +Status: RUNBOOK — manual steps for Daniel. Companion to +`capacitor-shell.md` §7 (day-one prototype) and `phase3-4-master-plan.md` T1. + +**Why this exists:** nothing else in Phase 4 Track B/C builds until Gates 1–2 +pass. The scaffold (Capacitor 7 deps, `capacitor.config.ts`, +`capacitor-web/error.html`, `ios/`, `android/`, `WKAppBoundDomains`) is +committed; the gates themselves are manual, on-simulator/device verification. +This is a prototype, not TDD — **the gates are the tests.** + +--- + +## 0. Prerequisites + +- Xcode 26.x with an iOS 17+ simulator installed; CocoaPods (pods are already + installed — `ios/App/Pods/` exists locally, gitignored). +- Android Studio with an API 34+ emulator. First open will prompt a Gradle + sync (`npx cap open android` → let it sync; `local.properties` is generated + and gitignored). +- Repo on the shell branch, `yarn` installed, and a **stage-targeted sync**: + + ```bash + SHELL_TARGET=stage npx cap sync + ``` + + `capacitor.config.ts` is evaluated at sync time and baked into the native + projects as `capacitor.config.json` (gitignored). `SHELL_TARGET=stage` + points `server.url` at `https://stage.mpdx.org`; omitting it bakes + prod (`https://mpdx.org`). **Re-run sync after every config change.** + +- ⚠️ **Stage host check (do this first):** `https://stage.mpdx.org` comes + from the shell design doc — it appears in no repo env/config file (repo only + references `api.stage.mpdx.org` / `auth.stage.mpdx.org`). Before Gate 1, + open it in a normal browser and confirm it serves the Next.js stage app and + you can log in. If the real stage host differs, fix `capacitor.config.ts` + AND `ios/App/App/Info.plist` (`WKAppBoundDomains`) in the same commit. + +- iOS note: `WKAppBoundDomains` (Info.plist) lists `mpdx.org` + + `stage.mpdx.org`; `limitsNavigationsToAppBoundDomains: true` lives in + `capacitor.config.ts` (it is a WKWebView configuration flag Capacitor sets + at runtime, not a plist key). Both must be present or iOS bridge injection + fails with "plugin not implemented". + +Launch commands: + +```bash +npx cap open ios # build & run the App scheme on a simulator from Xcode +npx cap open android # run 'app' on an emulator from Android Studio +``` + +Inspectors: + +- iOS simulator: Safari → Develop → Simulator → the MPDX webview. +- Android emulator: Chrome → `chrome://inspect` → the MPDX WebView. + +--- + +## 1. Gate 1 — bridge injection on the remote origin (Day 1 AM) + +Premise being falsified: Capacitor injects its bridge into pages served from +the configured `server.url` host, with SW + IndexedDB working (iOS only with +App-Bound Domains). + +On **both** iOS simulator and Android emulator, with the app showing the +remote stage app, run in the inspector console: + +| # | Check | Expected | +| --- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | +| 1 | `window.Capacitor.isNativePlatform()` | `true` | +| 2 | `Capacitor.Plugins.Device.getInfo().then(console.log)` | resolves with `platform: 'ios'` / `'android'` (bridge round-trip works) | +| 3 | `navigator.serviceWorker` | defined (iOS: proves App-Bound Domains is honored) | +| 4 | `navigator.serviceWorker.getRegistration().then(r => console.log(r?.active?.scriptURL))` | `https:///sw.js` after the app's normal SW registration flow (`ServiceWorkerUpdatePrompt`) | +| 5 | `indexedDB.databases().then(console.log)` | readable; after logging in and browsing contacts, the Apollo persistence DB (`apollo-cache-persist` / localforage DB) appears | +| 6 | `navigator.userAgent` | ends with `MPDXShell/0.1.0` (version-handshake transport) | + +Also verify the local layer: enable airplane mode on the simulator/emulator +(or kill stage connectivity), force-quit, relaunch → the bundled +`error.html` ("You're offline", Retry button) renders. Restore connectivity → +page auto-reloads into the app. + +**PASS:** all six checks on both platforms. + +**FAILURE MEANING (shell doc §7):** if bridge injection fails on the remote +origin (check 1 or 2), the `server.url` premise is invalid — **stop and +escalate; this invalidates the Phase 4 shell architecture** (the auth design +survives — it is webview-agnostic — but the architecture around it does not). +If only check 3/4 fails on iOS, suspect `WKAppBoundDomains` (typo, missing +`limitsNavigationsToAppBoundDomains`, or the stage host is not listed) before +declaring failure. Backend track T2–T7 continues regardless. + +--- + +## 2. Gate 2 — system-browser PKCE round-trip → working session cookie (Day 1 PM) + +Goal: prove the auth shape — interactive login in the **system browser** +(SFSafariViewController / Custom Tabs), token exchange, then the **webview +itself** calls `signIn('native-...')` so NextAuth's `Set-Cookie` lands in the +webview jar. No cookie ever crosses the browser/webview boundary. + +### 2.1 Negative control (do this first — it is the evidence) + +In the webview, tap the existing login (`signIn('okta')` path) and record the +exact failure (screenshot). Expected: Google/Okta `disallowed_useragent` / +blocked-webview error. This is the documented justification for the +system-browser flow. + +### 2.2 Create the stage Doorkeeper public client (Daniel — internal action) + +The spike uses the **API_OAUTH / Doorkeeper path** because you control stage +Doorkeeper (Okta native-client registration, T9, runs in parallel). On the +stage Rails console (mpdx_api): + +```ruby +app = Doorkeeper::Application.create!( + name: 'MPDX Native Shell (stage spike)', + redirect_uri: "org.mpdx://auth-callback", + confidential: false, # PUBLIC client — no secret; PKCE required + scopes: '' # match the existing API_OAUTH provider's scopes +) +app.uid # => the client_id the spike hardcodes +``` + +Notes: + +- `confidential: false` is what makes PKCE mandatory and the client secretless + (Doorkeeper PKCE is already exercised — the existing NextAuth provider sets + `checks: ['pkce','state']`). +- For the spike, the custom scheme `org.mpdx://auth-callback` is acceptable on + BOTH platforms (verified App Links are the production hardening, T19/T21). + If you want the Android production shape early, add a second redirect URI + `https://stage.mpdx.org/auth/native-callback`. +- Verify stage Doorkeeper's authorize/token endpoints (defaults: + `https://api.stage.mpdx.org/oauth/authorize`, `/oauth/token` — these match + `next.config.ts` API_OAUTH defaults). + +### 2.3 Spike wiring (throwaway branch — not merged) + +Per shell doc §7 "Day 1 PM", on a spike branch: + +1. Hardcoded PKCE (`code_verifier`/`challenge` + `state`, in-memory only) + + `@capacitor/browser` `Browser.open()` on the Doorkeeper `/oauth/authorize` + URL. +2. `@capacitor/app` `appUrlOpen` listener → validate `state` → + `Browser.close()` → exchange `code + verifier` at the token endpoint + (direct if CORS allows; otherwise a minimal `/api/auth/native/token` proxy + route — secretless, forwards only the code exchange). +3. Throwaway NextAuth **CredentialsProvider** (`native-apioauth`) in + `pages/api/auth/[...nextauth].page.ts` whose `authorize()` calls the same + public `apiOauthSignIn` mutation the existing provider path uses, plus an + early `return true` branch in the `signIn` callback for this provider. +4. Webview JS: `signIn('native-apioauth', { accessToken, redirect: false })`. + +### 2.4 Assertions (both platforms) + +The session cookie is HttpOnly — **do not** look for it in `document.cookie`. +Instead, from the webview inspector console: + +```js +fetch('/api/auth/session') + .then((r) => r.json()) + .then(console.log); +``` + +- [ ] Returns the logged-in user (non-empty session object) on iOS. +- [ ] Same on Android. +- [ ] Navigate to `/accountLists` → renders authenticated (SSR session check + passes, so `getServerSideProps` saw the cookie too). +- [ ] Negative: tamper `state` → flow rejects. Replay the same authorization + code → token endpoint rejects (single-use). Feed the + CredentialsProvider a garbage token → `authorize()` fails, no session. + +**PASS:** working NextAuth session in the webview on BOTH platforms via the +system-browser round-trip. + +**FAILURE MEANING:** Gate 2 failure does NOT invalidate the architecture — it +is a debugging matter with named suspects, in order: (a) cookie attributes — +`__Secure-` prefix requires https + `Secure`; confirm the webview origin is +the https stage host; (b) NextAuth CSRF — `signIn()` from `next-auth/react` +fetches `/api/auth/csrf` first; calling the callback URL manually without the +CSRF token fails silently; (c) Doorkeeper client misconfig (confidential +instead of public, redirect URI mismatch); (d) `appUrlOpen` not firing — iOS +custom-scheme registration in Info.plist (`CFBundleURLTypes`) missing on the +spike branch. Escalate only if the same-origin `signIn()` POST genuinely +cannot set a cookie inside the webview on a platform — that would force +Plan B (§4.6) to become Plan A. + +--- + +## 3. Gate 3 — cookie persistence battery + 48h soak (Day 2) + +Goal: prove the WKWebView / Android WebView cookie jar holds the NextAuth +session across process death. Known flake history: Capacitor #6809, #1373. + +On **both** platforms, logged in via Gate 2: + +| # | Test | Expected | +| --- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| 1 | Force-kill the app → relaunch | still authenticated (`/api/auth/session` returns user; no login screen) | +| 2 | Fresh login → background the app **immediately** → force-kill within ~5s → relaunch | still authenticated (this is the known WKWebView cookie-sync flake window) | +| 3 | Device/simulator reboot → launch | still authenticated | +| 4 | Start a **48h+ soak**: leave the app installed and untouched for 48h (longer is better — this also seeds the multi-week IndexedDB durability soak for the v1.1 offline viewer) → launch | still authenticated; IndexedDB Apollo cache still present | +| 5 | apiToken expiry → re-auth loop (shorten token TTL on stage if possible, or wait it out) | RouterGuard's re-auth fires the native flow → system browser flashes → SSO makes it near-silent → session restored | +| 6 | Logout → login cycle | logout runs `clearApolloData()` (verify IndexedDB cache emptied in inspector), login round-trip works again | +| 7 | Airplane mode mid-session → navigate to already-visited contacts/tasks | Phase 2 offline reads render in the webview | + +**PASS:** 1–4 hold on both platforms (5–7 are battery items that feed later +tasks; record results either way). + +**FAILURE MEANING:** Gate 3 failure is **not stop-ship**. Cookie loss degrades +to a near-silent system-browser SSO re-auth (a browser-sheet flash). If the +battery shows cookies evaporating in practice (tests 1–3 flaky, or the soak +loses the session), **activate Plan B before building further** (shell doc +§4.6): request `offline_access` on the native client, store the refresh token +in Keychain/Keystore via a secure-storage plugin, and silently re-run +`signIn('native-...')` on cookie loss. Plan B preconditions to verify first: +the OAuth org grants refresh tokens to public clients, and the secure-storage +plugin passes security review. + +--- + +## 4. Recording results + +For each gate, capture: platform + OS version, simulator/emulator vs device, +inspector console output (screenshot), and pass/fail per checklist row. Drop +them in `docs/pwa-design/` next to this runbook (e.g. +`t1-gate-results.md`) — Gate 1's evidence doubles as the Apple-review +"receipts" groundwork (shell doc §11), and the negative control from §2.1 is +the permanent justification for the system-browser auth decision. + +After Gates 1–2 pass: unblock Track C (T20+) and continue Track B. After a +Gate 1 failure: stop Phase 4 shell work and escalate per shell doc §1.3/§7. + +--- + +## 5. Appendix — Android App Links on dev builds (fingerprint note) + +`public/.well-known/assetlinks.json` lists only the Play App Signing +certificate fingerprint, so debug builds (signed with the local debug +keystore) will **fail** `autoVerify` — universal-link taps open the browser +instead of the app. Two options during dev (deep-links.md §3, T19): + +1. **Override verification on the device/emulator** (no file changes): + + ```bash + # Force-approve the domain for the app (2 = STATE_APPROVED) + adb shell pm set-app-links --package org.mpdx 2 mpdx.org + + # Inspect the result — should show "verified"/approved for mpdx.org + adb shell pm get-app-links org.mpdx + ``` + + Re-run after each reinstall; the override is per-install. Use the actual + applicationId if it differs from the `org.mpdx` placeholder (master plan + open question Q4). + +2. **Add the debug keystore fingerprint** as an additional entry in + `assetlinks.json` (get it via + `keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android`). + Decision deferred to T19 — until then, prefer the `adb` override so the + published assetlinks file stays production-only. + +--- + +## 6. Appendix — T26 native platform config: placeholder inventory + +Everything T26 committed that is deliberately not production-final. Each item +names the owning follow-up task; nothing here blocks local builds or gates. + +| # | Placeholder | Where | Replaced by / when | +| --- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 1 | **`android/app/google-services.json`** — fake Firebase config, `project_id: mpdx-placeholder-replace-via-t8` | `android/app/google-services.json` | **Ops T8.** Real file must come from the **same Firebase project** as the SNS GCM/FCM platform-application credentials (SENDER_ID_MISMATCH trap, fcm-v1-backend.md), with `package_name` matching the final applicationId. Until swapped: Gradle config parses and `:app:processDebugGoogleServices` succeeds (verified), but Android FCM token registration fails at runtime. | +| 2 | **`applicationId "org.mpdx"`** | `android/app/build.gradle` | Master-plan open question Q4 (reuse legacy Play listing vs new id). If it changes, update `google-services.json` `package_name` AND add a new `assetlinks.json` entry (deep-links.md §3) in the same commit. | +| 3 | **iOS bundle id `org.cru.mpdx`** | `ios/App/App.xcodeproj` (`PRODUCT_BUNDLE_IDENTIFIER`) | Apple account info (capacitor-shell.md §13 Q3). The AASA `appID` prefix (Team ID `DQ48D9BF2V` cited in shell doc §11) must match whatever final Team ID + bundle id is registered. | +| 4 | **`aps-environment` = `development`** | `ios/App/App/App.entitlements` | Not hand-edited — App Store / TestFlight export re-signs to `production` automatically (T29 Fastlane lanes). Requires the Push Notifications capability enabled on the App ID in the Apple Developer portal (automatic signing handles this once the account exists) plus the APNs `.p8` key on the SNS side (T8). | +| 5 | **Associated Domains dev variant** — `applinks:stage.mpdx.org?mode=developer` documented but NOT committed | `ios/App/App/App.entitlements` (comment) | Add for dev builds after the §0 stage-host check confirms the real stage host (deep-links.md §2.2 cites `stage.mpdx.org`; the shell config uses `stage.mpdx.org` — reconcile first). `?mode=developer` bypasses Apple's AASA CDN and is only honored on developer-signed builds. | +| 6 | **No `android.permission.CAMERA`** (deliberate omission, not a placeholder) | `android/app/src/main/AndroidManifest.xml` | Permanent (camera-contact-photo.md §6) — but release checklist must audit the **merged** manifest (`./gradlew :app:processDebugManifest`) in case a future plugin injects it. | +| 7 | **App Links `autoVerify` scope `/accountLists`** on host `mpdx.org` only | `android/app/src/main/AndroidManifest.xml` | Permanent scope per deep-links.md §3. Debug builds still fail verification (Play-signing fingerprint only) — use the §5 `adb` override. | + +Verification performed for T26: `plutil -lint` on `Info.plist` + +`App.entitlements` (OK), manifest `xmllint` (OK), and +`cd android && ./gradlew tasks --quiet` plus +`./gradlew :app:processDebugGoogleServices` (BUILD SUCCESSFUL — the gated +`com.google.gms.google-services` apply in `app/build.gradle` fires now that +the JSON exists). Note: `gradlew` needs a JDK 17+; with no system JDK, point +at Android Studio's bundled one: +`JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"`. + +--- + +## 7. Dogfooding — native polish decisions (T27) + +### 7.1 Pull-to-refresh / overscroll + +**Decision (default, binding unless overridden during dogfooding):** v1 ships +with **NO custom pull-to-refresh**. iOS rubber-band overscroll and the Android +overscroll glow stay at WKWebView/WebView defaults — SSR pages refresh via +navigation, and a webview reload control adds complexity for little gain +(master plan T27; capacitor-shell.md §9). + +- **Owner:** Daniel, during device dogfooding. +- **Acceptance criterion:** the decision + rationale are recorded here (this + section) before T32 store submission. If the default is overridden, the + chosen mechanism (e.g. a `CSS overscroll-behavior` tweak or an explicit + reload gesture) gets its own follow-up task with device QA on both + platforms — it does not ride along inside T27/T32. +- **What to watch for while dogfooding:** rubber-band artifacts that expose + the webview background behind fixed chrome, accidental page-refresh + gestures, and overscroll glow fighting with horizontally scrollable tables. + First remedy is CSS `overscroll-behavior`; native config second. + +### 7.2 Device QA checklist for the rest of the T27 polish + +Unit-testable parts are covered in-repo (`nativeChrome.test.ts`, +`useHaptics.test.tsx`, `safeArea.test.ts`); the items below are device-only: + +- [ ] Cold launch on both platforms: native splash (blue `#05699B`, centered + logo) holds until the app paints — no white flash. `launchAutoHide: + false` + `hideSplashScreen()` after hydration. +- [ ] Splash never sticks: kill app → relaunch with airplane mode ON — the + shell's `error.html` path must still hide the splash (or the OS + watchdog kills us). Verify the error screen is reachable. +- [ ] Status bar: light text over the dark app-bar color on both platforms; + Android status bar background matches the app bar + (`theme.palette.mpdxGrayDark.main`), webview not under the status bar. +- [ ] iOS safe areas: app bar content clears the notch/Dynamic Island in + portrait, no dead band in landscape (left/right insets), home-indicator + area looks right on list pages, modals, and snackbars. +- [ ] Haptics (shell only, restraint check): completing a task fires a + success tap; confirming a destructive delete fires a warning tap; + nothing else in the app vibrates. +- [ ] App icons: Android 13+ themed icon renders sanely + (adaptive foreground/background), iOS icon has no alpha halo. diff --git a/docs/pwa-roadmap.md b/docs/pwa-roadmap.md new file mode 100644 index 0000000000..a5702a6ddd --- /dev/null +++ b/docs/pwa-roadmap.md @@ -0,0 +1,183 @@ +# MPDX PWA + Native Shell Roadmap + +Goal: make MPDX an installable PWA delivered inside Capacitor iOS/Android +shells, with read-only offline viewing of contacts and tasks, and push +notifications via the existing native push pipeline. + +## Decisions (made 2026-06-09) + +| Decision | Choice | +| --- | --- | +| Distribution | **PWA inside Capacitor shells** (iOS + Android app stores). The web app at mpdx.org continues as-is for browsers. | +| Offline scope | **Read-only cached views, kept lightweight.** No offline editing this release — the sync queue moved to "Future release" below. If read caching turns out to be expensive for a screen, descope that screen rather than over-engineer. | +| Offline screens | **Contacts (list + detail) and Tasks (list + detail) only.** Everything else requires internet. | +| Push transport | **Native push only** (APNs/FCM via the existing AWS SNS pipeline). No browser/web push — desktop users rely on email + in-app notifications. | +| Apple 4.2 mitigation | Native-feeling features in the shell: push, offline, and **contact photos — upload from library and capture with the camera** (like adding a contact on your phone). | + +## Where we are today + +### Frontend (mpdx-react) + +| Area | Status | +| --- | --- | +| Web app manifest | ✅ Exists (`public/manifest.json`) but has bugs — `"Scope"` is capitalized (invalid key, should be `scope`), `splash_pages` is not a real manifest key, missing `description`, `id`, `orientation`, screenshots | +| Service worker | ⚠️ `next-pwa` v5.6.0 wired in `next.config.ts` (prod only). next-pwa 5.x is unmaintained and predates Next 15 — needs replacement (Serwist is the maintained successor) | +| Icons | ✅ Full set 72–512px + apple-touch icons in `public/icons/`, 512px is maskable | +| Deep-link files | ✅ `public/.well-known/` already has `apple-app-site-association` and `assetlinks.json` | +| Viewport meta | ✅ Present in `pages/_app.page.tsx` (incl. `viewport-fit=cover`) | +| Apollo cache persistence | ✅ `apollo3-cache-persist` → localStorage, prod only (`src/lib/apollo/client.ts`). localStorage ~5MB limit is a risk for this data volume | +| Auth | NextAuth v4, JWT session strategy, `apiToken` passed to Apollo link. Session lives in a cookie — complicates long offline sessions and Capacitor webviews | +| SSR | ⚠️ Heavy — key pages use `getServerSideProps` (`makeGetServerSideProps` wrapper), so first paint of those routes requires the server. Contacts/tasks routes need an app-shell/CSR strategy to work offline | +| Web push | ❌ None — and per decision, not needed | +| Hosting | AWS Amplify (SSR build, not static export) | + +### Backend (mpdx_api) + +| Area | Status | +| --- | --- | +| Push pipeline | ✅ **Already exists** (legacy native app): `User::Device` model (APNS/GCM), AWS SNS registration/publish services (`app/services/user/device/`), Sidekiq `PublishWorker`, REST endpoints at `/api/v2/user/devices` | +| Notification model | ✅ `Notification`, `NotificationPreference` (already has an `app` channel flag), `User::Notification.create_by_type` already enqueues push sends | +| ⚠️ GCM deprecation | The pipeline targets legacy GCM. Google shut down the legacy FCM API in mid-2024 — SNS platform app must be migrated to **FCM HTTP v1** credentials before Android push will work | +| Contact avatars | ✅ Avatar/image upload for contacts already exists server-side — shell work is about the *capture/pick* UX, not new storage | +| Auth | Doorkeeper OAuth2 with refresh tokens (~2h access tokens). Refresh-token flow is the key to keeping shell-app users logged in long-term | +| Real-time | ❌ No ActionCable/websockets — push is batch/one-way (fine for this plan) | +| Delta sync | ⚠️ Minimal — `updated_at` filtering exists on the GraphQL people query only. Offline mutations require delta endpoints + tombstones for contacts and tasks | + +## Phase 1 — PWA foundation hardening (frontend) — ✅ DONE (2026-06-09) + +- [x] Fix `public/manifest.json`: `scope` casing, remove `splash_pages`, add `description`, `id`, `orientation`, `categories` (screenshots deferred) +- [x] Replace `next-pwa` v5 with Serwist (`@serwist/next` ^9.5.11). Side effect: Yarn switched from PnP to `nodeLinker: node-modules` (matches what Amplify prod already did; @serwist/next is pure-ESM and PnP's ESM loader couldn't load it) +- [x] Runtime caching: **security-hardened allowlist** — only `/_next/static`, Google fonts, and same-origin static media are cached; everything else (HTML, `/_next/data`, `/api/*`, GraphQL) is NetworkOnly. **Never reintroduce Serwist's `defaultCache`**: review found it caches authenticated HTML/`__NEXT_DATA__` (contains NextAuth apiToken) in CacheStorage, which ignores `no-store`. CacheStorage is also cleared on logout +- [x] Offline fallback page at `/offline` (responsive, precached, in `nonAuthenticatedPages`) +- [x] SW update flow: `skipWaiting: false` + manual registration via `ServiceWorkerUpdatePrompt` — snackbar with Update/Later, reload warning copy +- [x] SW testable locally via `ENABLE_SW=true yarn build && yarn serve` +- [x] Amplify `customHttp.yml`: `sw.js` no-cache headers +- [x] iOS meta tags added; apple-touch-icon `sizes` mismatches fixed +- [ ] Lighthouse PWA audit — manual release-checklist item, run before deploy + +Review follow-ups deferred (suggestion-tier): gate `spawnSync` git revision to prod / prefer `AWS_COMMIT_ID`; ticket to remove the workbox-precache cleanup listener eventually; dedicated worker tsconfig instead of global `webworker` lib; consider pinning serwist versions; manifest white-labeling via API route if APP_NAME branding ever needed. + +## Phase 2 — Offline read layer (contacts + tasks) — ✅ DONE (2026-06-10) + +Scope: contacts list/detail and tasks list/detail render from cache when +offline — **read-only**. Editing actions are disabled (or hidden) while +offline. All other routes show the offline fallback. Most of the machinery +(`apollo3-cache-persist`) already exists; this phase is mostly configuration +and UX, not new infrastructure. + +**Scope refinement (2026-06-10):** *In-session offline only* — offline reads +work when the connection drops while the app is open. Cold-start offline +(launching with no connection) is out of scope: it would require caching +authenticated HTML, which conflicts with the Phase 1 security rule keeping +API tokens out of caches. Revisit in the Capacitor phase via a bundled local +shell. Research also found the contacts/tasks pages do **no SSR data +fetching** (`ensureSessionAndAccountList` provides session only), so no +page conversion is needed — the work is Apollo/auth/UX behavior. + +- [x] Apollo cache persistence → IndexedDB (`localforage` + `CachePersistor`, `maxSize: false`). The persistor singleton lives in `src/lib/apollo/cachePersistor.ts` (separate module because `client.ts`'s top-level `await restore()` can't be imported under Jest) +- [x] Type-policy audit — relay pagination policies in `cache.ts` are offline-safe as-is; unchanged +- [x] `useIsOnline` hook + `OfflineNotifier` (persistent warning snackbar while offline, "back online" toast on reconnect) +- [x] Mutations blocked at the Apollo layer (`offlineLink`) with a distinct "Cannot save changes while offline." toast — chosen over per-button UI disabling (huge surface) as the lightweight global insurance +- [x] Graceful offline errors: `errorPolicy: 'all'` on watchQuery defaults (cached data keeps rendering when the network leg fails) + offline network-error snackbars suppressed +- [x] App-shell conversion: **not needed** — contacts/tasks pages never fetched data in SSR (session only) +- [x] Auth/offline grace: RouterGuard's expiry `signIn('okta')` gated on connectivity; re-fires on reconnect +- [ ] QA: airplane-mode testing of the four target screens (manual — see checklist below) + +**Security invariant established in review (don't regress):** `client.clearStore()` +does NOT remove the persisted IndexedDB cache. Every path that ends a session +must call `clearApolloData()` (`src/lib/apollo/clearApolloData.ts`: +pause → clearStore → purge). All four signout paths (logout page, +AUTHENTICATION_ERROR handler, both profile menus) are wired; new signout +paths must use it too. + +Hardening follow-up (deferred): `persistenceMapper` to persist only a +read-relevant subset of the cache instead of all browsed PII. + +Deliberately *not* in scope (keep it simple): cache pre-warming/prefetch +strategies, offline detail data beyond what the user has already visited, +background cache refresh. Revisit only if real usage shows the cache is too +empty to be useful. + +## Phase 3 — Push notifications (native only) — ✅ CODE-COMPLETE (2026-06-11) + +Designed, implemented (TDD), and multi-agent-reviewed on branches +`pwa-phase3-4-push-shell` (this repo) and `pwa-push-fcm-v1` (mpdx_api). +Design docs + ordered task list live in `docs/pwa-design/` (master plan + +five area docs); deferred review suggestions in +`docs/pwa-design/review-follow-ups.md`. Remaining items below are gated on +accounts/credentials only Daniel can provide, or on physical-device QA. + +### Backend (mpdx_api) + +- [x] **Code-level verification done (2026-06-10):** pipeline is well-built and maintained (specs pass-shaped, idempotent registration, stale-device cleanup on `EndpointDisabled`). **Confirmed: `publish_service.rb` `gcm_payload` uses the legacy GCM format** (`{ data: ... }`) — incompatible with FCM v1. APNs payload format is valid. ARNs come from `SNS_APNS_APPLICATION_ARN` / `SNS_GCM_APPLICATION_ARN` env vars. +- [ ] **AWS-console verification still needed (Daniel):** GCM platform app credential type (legacy server key = dead; FCM v1 service-account JSON = needs payload change either way), APNs cert/key validity + bundle ID, ARNs active. Env values live in the deploy config (cru-deploy / ECS task defs), not this repo. Runbook: `docs/pwa-design/fcm-v1-backend.md` §5. +- [x] Migrate `gcm_payload` in `publish_service.rb` to FCM v1 message format — code done (SNS `fcmV1Message` envelope, string-coerced `message.data`, wire format verified against the Capacitor plugin source). SNS platform-app credential swap is the ops runbook above. +- [ ] Confirm APNs platform app uses a current `.p8` token-based key and the bundle ID of the new shell app (Daniel) +- [x] Wire the existing `NotificationPreference` `app` channel to gate push sends — was already wired; regression specs added +- [x] Add deep-link data to notification payloads — `DeepLinkBuilder` maps all 22 notification types to web paths, carried as `deepLink` in FCM `message.data` and APNs custom keys + +### Frontend / shell + +- [x] `@capacitor/push-notifications` → native tokens → registered via new REST-proxy `UserDevices` schema; unregister on logout via the consolidated `logoutCleanup()` chain +- [x] Permission UX: in-context prompt from the notification-settings card (the app's only `requestPermissions` call site, invariant-tested); recovers from denied via visibilitychange re-check +- [x] Notification tap → deep link (`NativeDeepLinkProvider`, sanitized same-origin paths, cold/warm start) +- [x] Push toggles in settings (`PushNotificationsCard` + "Mobile App" column relabel; final copy pending Daniel) +- [x] FCM token rotation (registration-listener path re-registers; session-scoped idempotent skip) + +## Phase 4 — Capacitor shell — ✅ CODE-COMPLETE except auth gates + store ops (2026-06-11) + +- [x] Capacitor 7 project set up in-repo; **`server.url` mode chosen** (3-proposal judge panel, unanimous) with empty `allowNavigation` + iOS `WKAppBoundDomains`; architecture in `docs/pwa-design/capacitor-shell.md` +- [ ] **Prototype auth — gates pending (Daniel, on device):** system-browser PKCE → NextAuth `CredentialsProvider` design is locked; the three go/no-go gates (bridge injection, cookie round-trip, cookie persistence) are scripted in `docs/pwa-design/t1-gate-runbook.md`. Production auth tasks (T20/T21) deliberately wait on these gates. Stage/prod hosts confirmed 2026-06-15: `stage.mpdx.org` / `mpdx.org`, baked into `capacitor.config.ts` + `WKAppBoundDomains` + entitlements. +- [x] Deep links: AASA recreated extensionless with forced `application/json` (placeholder `DQ48D9BF2V.org.cru.mpdx` pending identity decisions); assetlinks dev-override documented; Android `autoVerify` intent filter scoped to `/accountLists` +- [x] **Contact photo capture/upload** (Apple 4.2 anchor): `useNativeCamera` hook (Base64, permissions, cancel/denial states) → existing `setAvatar(file)` pipeline; web path regression-tested byte-for-byte unchanged; compress ladder caps at 1MB; online-only with offline gating +- [x] Native polish: splash (generated assets + programmatic hide), status bar, safe-area wrappers on both top bars, haptics on task-complete/delete-confirm; pull-to-refresh decision deferred to dogfooding (runbook §7) +- [x] App icons/splash assets generated for both stores (`assets/logo.png` source; regenerate command documented) +- [ ] CI: Fastlane build + signing pipelines (T29 — blocked on Apple/Google accounts, Daniel) +- [ ] Store accounts, listings, privacy declarations, review submission (T32 — Daniel; Apple 4.2 receipts checklist in capacitor-shell.md §11) +- [x] Shell version handshake: `MPDXShell/x.y.z` UA token + `MIN_SUPPORTED_SHELL_VERSION` gate + blocking upgrade screen (signout never blocked) + +**Review outcomes (2026-06-11):** 7-dimension adversarial review confirmed 23 +findings; all fixed. Headline: `removeAllListeners()` was wiping the deep-link +tap listener (a contradiction *between* two design docs — caught only by +cross-module review); signout paths now all run the canonical `logoutCleanup()` +to completion before navigation; push registration is user-/session-scoped and +race-hardened; Android backups disabled (webview cookie store carries the +session). Deferred suggestions + refuted findings: `docs/pwa-design/review-follow-ups.md`. + +**Blocked-on-Daniel checklist (the only path to shipping):** stage-host +confirmation → run the 3 auth gates (t1-gate-runbook.md) → SNS/Firebase/APNs +credentials (fcm-v1-backend.md §5) → Okta native PKCE client → +Android/Apple identity decisions (org.mpdx / team DQ48D9BF2V reuse) → then +T20/T21 (production native auth), T29 (CI signing), T30 (device push QA), +T32 (store submission). + +## Future release (explicitly out of scope now) + +**Offline mutations + sync queue** — deferred from this release to keep scope +manageable. When/if revisited, the work is: + +- Frontend: IndexedDB mutation queue, replay on reconnect (Background Sync API), optimistic UI with pending/failed indicators, conflict-handling UX, cache reconciliation after replay +- Backend: `updated_at >` delta filtering for contacts and tasks (only people has it today), tombstones for deletions, per-entity conflict policy (needs product sign-off), idempotency keys for replay-safe creates, refresh-token lifetimes that survive multi-day offline stretches + +The Phase 2 decision to *disable* editing UI while offline keeps this door +open — no data-integrity debt is created by shipping read-only first. + +**Browser/web push (VAPID)** — also deferred (decision: no browser push at +all). If desktop notifications are ever wanted, Web Push/VAPID via the +`web-push` gem is the recommended route, not the Firebase JS SDK. + +## Key risks + +1. **GCM is dead** — Android push will not work until SNS is migrated to FCM v1. Verify the whole legacy pipeline early. +2. **Auth in a webview** — the hardest shell problem; prototype before committing to `server.url` mode. +3. **SSR vs. offline** — contacts/tasks routes must move off `getServerSideProps` (or get a cached-shell strategy) before offline reads work at all. This is the main real engineering cost of Phase 2. +4. **next-pwa v5 is abandoned** — replace with Serwist before building on it. +5. **Apple 4.2** — the camera contact-photo feature plus push plus offline viewing should clear "minimum functionality," but keep receipts (feature list) for the review. + +## Suggested order of attack + +1. **Phase 1** (foundation — small, low-risk) and **Phase 3 backend verification** (de-risk legacy push infra) in parallel +2. **Phase 4 auth prototype** early — it can invalidate shell assumptions +3. **Phase 2** (offline reads for contacts/tasks) +4. **Phase 3 frontend + Phase 4 shell build-out**, including the camera feature +5. Store submission diff --git a/docs/superpowers/plans/2026-06-09-pwa-phase1-foundation.md b/docs/superpowers/plans/2026-06-09-pwa-phase1-foundation.md new file mode 100644 index 0000000000..bdfc28e8e5 --- /dev/null +++ b/docs/superpowers/plans/2026-06-09-pwa-phase1-foundation.md @@ -0,0 +1,683 @@ +# PWA Phase 1 Foundation Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Replace the unmaintained next-pwa v5 service worker stack with Serwist, fix the web app manifest, add an offline fallback page, and add a user-visible service-worker update prompt. + +**Architecture:** `@serwist/next` wraps the Next.js config and compiles `src/service-worker/index.ts` to `public/sw.js` at build time, precaching build assets and falling back to a static `/offline` page when a navigation fails. Auto-registration is disabled (`register: false`); a small client component registers the SW via `@serwist/window` and shows a notistack snackbar when a new SW version is waiting, activating it (`messageSkipWaiting`) on user confirmation. The SW keeps `skipWaiting: false` so updates never activate mid-session without consent. + +**Tech Stack:** Next.js 15 (Pages Router), TypeScript, `@serwist/next` + `serwist` + `@serwist/window` (v9), MUI v5, notistack v2, react-i18next, Jest + React Testing Library. + +**Repo context the engineer must know:** + +- Package manager is **yarn** (`yarn add`, `yarn remove`). Never npm. +- Pages live in `pages/` with the `.page.tsx` suffix (enforced via `pageExtensions`). Pages use `export default` (Next.js requirement); all other components use **named exports only**. +- All user-visible strings go through `useTranslation()` / `t('...')`. +- Tests are colocated (`Foo.test.tsx` next to `Foo.tsx`). +- `next.config.ts` currently composes plugins with the deprecated `next-compose-plugins`; this plan removes it. +- `.gitignore` already ignores `/public/sw*` and `/public/workbox*` — the built SW is never committed. +- `pages/_app.page.tsx` throws if a page renders without a session unless the route is listed in its `nonAuthenticatedPages` set. + +--- + +### Task 1: Fix `manifest.json` and add Amplify cache headers for the service worker + +**Files:** +- Modify: `public/manifest.json` +- Create: `customHttp.yml` (repo root — AWS Amplify custom headers file) + +- [ ] **Step 1: Replace the manifest content** + +Replace the entire content of `public/manifest.json` with (fixes invalid `"Scope"` key casing, removes the non-standard `splash_pages` key, adds `id`, `description`, `orientation`, `categories`; icons unchanged): + +```json +{ + "id": "/", + "name": "MPDX", + "short_name": "MPDX", + "description": "Fundraising software built for ministries, missionaries and churches.", + "theme_color": "#05699b", + "background_color": "#05699b", + "display": "standalone", + "scope": "/", + "start_url": "/", + "orientation": "any", + "categories": ["productivity", "business"], + "icons": [ + { + "src": "/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} +``` + +- [ ] **Step 2: Validate the JSON** + +Run: `node -e "JSON.parse(require('fs').readFileSync('public/manifest.json','utf8')); console.log('valid')"` +Expected: `valid` + +- [ ] **Step 3: Create `customHttp.yml`** + +Create `customHttp.yml` at the repo root (AWS Amplify Hosting reads this file for custom headers; a cached `sw.js` blocks all future SW updates, so it must never be cached): + +```yaml +customHeaders: + - pattern: '/sw.js' + headers: + - key: 'Cache-Control' + value: 'no-cache, no-store, must-revalidate' + - pattern: '/manifest.json' + headers: + - key: 'Cache-Control' + value: 'public, max-age=0, must-revalidate' +``` + +- [ ] **Step 4: Commit** + +```bash +git add public/manifest.json customHttp.yml +git commit -m "Fix manifest.json keys and prevent sw.js caching on Amplify" +``` + +--- + +### Task 2: Offline fallback page + +**Files:** +- Create: `pages/offline.page.tsx` +- Create: `pages/offline.test.tsx` +- Modify: `pages/_app.page.tsx` (line 73, the `nonAuthenticatedPages` set) + +The page must be static (NO `getServerSideProps`) so the service worker can precache it. It is modeled on `pages/404.page.tsx` — read that file first to see the pattern (`StatusPageWrapper`, `BaseLayout`, `getAppName`). + +- [ ] **Step 1: Write the failing test** + +Create `pages/offline.test.tsx`: + +```tsx +import React from 'react'; +import { ThemeProvider } from '@mui/material/styles'; +import { render } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import theme from 'src/theme'; +import Offline from './offline.page'; + +const TestComponent: React.FC = () => ( + + + +); + +describe('Offline page', () => { + it('renders the offline message', () => { + const { getByText } = render(); + + expect(getByText('You are offline.')).toBeInTheDocument(); + expect( + getByText( + 'This page is not available offline. Check your internet connection and try again.', + ), + ).toBeInTheDocument(); + }); + + it('reloads the page when Try Again is clicked', async () => { + const reload = jest.fn(); + Object.defineProperty(window, 'location', { + value: { ...window.location, reload }, + writable: true, + }); + + const { getByRole } = render(); + + await userEvent.click(getByRole('button', { name: 'Try Again' })); + expect(reload).toHaveBeenCalled(); + }); +}); +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `yarn test offline.test.tsx` +Expected: FAIL — cannot find module `./offline.page` + +- [ ] **Step 3: Create the page** + +Create `pages/offline.page.tsx`: + +```tsx +import Head from 'next/head'; +import React, { ReactElement } from 'react'; +import WifiOffIcon from '@mui/icons-material/WifiOff'; +import { Box, Button, Typography } from '@mui/material'; +import { useTranslation } from 'react-i18next'; +import BaseLayout from 'src/components/Layouts/Basic'; +import { getAppName } from 'src/lib/getAppName'; +import { StatusPageWrapper } from './styledComponents/StatusPageWrapper'; + +const Offline = (): ReactElement => { + const appName = getAppName(); + const { t } = useTranslation(); + return ( + <> + + {`${t('Offline')} | ${appName}`} + + + + + + + {t('You are offline.')} + + {t( + 'This page is not available offline. Check your internet connection and try again.', + )} + + + + + + + ); +}; + +Offline.layout = BaseLayout; + +export default Offline; +``` + +Note: pages use `export default` (Next.js requirement — this is the documented exception to the named-exports rule). The `.layout = BaseLayout` assignment matches the `PageWithLayout` pattern in `_app.page.tsx`. + +- [ ] **Step 4: Run test to verify it passes** + +Run: `yarn test offline.test.tsx` +Expected: PASS (2 tests) + +- [ ] **Step 5: Allow the page to render without a session** + +In `pages/_app.page.tsx`, find (line ~73): + +```tsx +const nonAuthenticatedPages = new Set(['/login', '/404', '/500']); +``` + +Change to: + +```tsx +const nonAuthenticatedPages = new Set(['/login', '/404', '/500', '/offline']); +``` + +This is required: `_app.page.tsx` throws "A session was not provided via page props" for any route not in this set, and the offline fallback is served from the SW cache without a session. + +- [ ] **Step 6: Run lint and commit** + +```bash +yarn lint +git add pages/offline.page.tsx pages/offline.test.tsx pages/_app.page.tsx +git commit -m "Add offline fallback page for PWA navigation failures" +``` + +--- + +### Task 3: Replace next-pwa with Serwist + +**Files:** +- Modify: `package.json` (via yarn commands, not hand-editing) +- Modify: `next.config.ts` +- Create: `src/service-worker/index.ts` +- Modify: `tsconfig.json` (line 4, `lib` array) + +- [ ] **Step 1: Swap dependencies** + +```bash +yarn remove next-pwa next-compose-plugins +yarn add @serwist/next serwist @serwist/window +``` + +Expected: success; `package.json` no longer lists `next-pwa` or `next-compose-plugins`, and lists the three Serwist packages at ^9.x. + +Note: `next-compose-plugins` is only used by `next.config.ts` (verified by grep) — removing it is safe once Step 3 lands. + +- [ ] **Step 2: Add `webworker` to tsconfig lib** + +In `tsconfig.json` line 4, change: + +```json + "lib": ["dom", "esnext"], +``` + +to: + +```json + "lib": ["dom", "esnext", "webworker"], +``` + +- [ ] **Step 3: Rewrite the plugin composition in `next.config.ts`** + +Replace the imports at the top (remove `next-compose-plugins` and `next-pwa`): + +```ts +import { spawnSync } from 'node:child_process'; +import type { NextConfig } from 'next'; +import bundleAnalyzer from '@next/bundle-analyzer'; +import withSerwistInit from '@serwist/next'; +import withOptimizedImages from 'next-optimized-images'; +``` + +After the `const prod = process.env.NODE_ENV === 'production';` line, add: + +```ts +// A revision versions the precached /offline page so a new deploy +// invalidates the previously precached copy. +const revision = + ( + spawnSync('git', ['rev-parse', 'HEAD'], { encoding: 'utf-8' }).stdout ?? '' + ).trim() || crypto.randomUUID(); + +const withSerwist = withSerwistInit({ + swSrc: 'src/service-worker/index.ts', + swDest: 'public/sw.js', + // Registration is handled manually by ServiceWorkerUpdatePrompt so we can + // show an update prompt instead of silently activating new versions + register: false, + // Set ENABLE_SW=true to test the service worker in a local dev/build + disable: !prod && process.env.ENABLE_SW !== 'true', + additionalPrecacheEntries: [{ url: '/offline', revision }], +}); +``` + +In the `env` block of `config` (around line 88, next to `DISABLE_NEW_REPORTS`), add: + +```ts + ENABLE_SW: process.env.ENABLE_SW, +``` + +Replace the final export (currently `module.exports = withPlugins([...])`, lines 173-187) with plain nesting: + +```ts +module.exports = withSerwist(withOptimizedImages(withBundleAnalyzer(config))); +``` + +Everything else in `next.config.ts` (env block, webpack fn, redirects, etc.) stays unchanged. + +- [ ] **Step 4: Create the service worker source** + +Create `src/service-worker/index.ts`: + +```ts +import { defaultCache } from '@serwist/next/worker'; +import type { PrecacheEntry, SerwistGlobalConfig } from 'serwist'; +import { Serwist } from 'serwist'; + +declare global { + interface WorkerGlobalScope extends SerwistGlobalConfig { + __SW_MANIFEST: (PrecacheEntry | string)[] | undefined; + } +} + +declare const self: ServiceWorkerGlobalScope; + +const serwist = new Serwist({ + precacheEntries: self.__SW_MANIFEST, + // skipWaiting stays false so a new service worker never takes over + // mid-session; ServiceWorkerUpdatePrompt asks the user first + skipWaiting: false, + clientsClaim: true, + navigationPreload: true, + runtimeCaching: defaultCache, + fallbacks: { + entries: [ + { + url: '/offline', + matcher({ request }) { + return request.destination === 'document'; + }, + }, + ], + }, +}); + +// Delete precaches left behind by the previous next-pwa/workbox service +// worker; Serwist uses its own precache name and would otherwise leave the +// old ones taking up storage forever +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((keys) => + Promise.all( + keys + .filter((key) => key.startsWith('workbox-precache')) + .map((key) => caches.delete(key)), + ), + ), + ); +}); + +serwist.addEventListeners(); +``` + +If `yarn lint` complains about `self` or the `declare global` block in this file, prefer fixing via an ESLint override for `src/service-worker/**` (env: `serviceworker`) rather than inline disables. + +- [ ] **Step 5: Type check** + +Run: `yarn lint:ts` +Expected: no NEW errors (run `git stash && yarn lint:ts` to capture the baseline first if unsure, then `git stash pop`). + +- [ ] **Step 6: Verify the production build emits the service worker** + +Run: `yarn build` (requires the existing `.env`; GraphQL types must already be generated — run `yarn gql` first if `src/graphql` artifacts are missing) +Expected: build succeeds; `ls public/sw.js` shows the file; `grep -c offline public/sw.js` ≥ 1 (the precache entry). + +Then clean up: `rm -f public/sw.js public/swe-worker*` (they are gitignored, but keep the tree clean). + +- [ ] **Step 7: Commit** + +```bash +git add package.json yarn.lock next.config.ts tsconfig.json src/service-worker/index.ts +git commit -m "Replace unmaintained next-pwa with Serwist for service worker generation" +``` + +--- + +### Task 4: Service worker registration + update prompt + +**Files:** +- Create: `src/components/ServiceWorker/ServiceWorkerUpdatePrompt.tsx` +- Create: `src/components/ServiceWorker/ServiceWorkerUpdatePrompt.test.tsx` +- Modify: `pages/_app.page.tsx` (render the component inside `SnackbarProvider`) + +Depends on Task 3 (needs `@serwist/window` installed and `register: false`). + +- [ ] **Step 1: Write the failing test** + +Create `src/components/ServiceWorker/ServiceWorkerUpdatePrompt.test.tsx`: + +```tsx +import React from 'react'; +import { render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { SnackbarProvider } from 'notistack'; +import { ServiceWorkerUpdatePrompt } from './ServiceWorkerUpdatePrompt'; + +const mockRegister = jest.fn().mockResolvedValue(undefined); +const mockMessageSkipWaiting = jest.fn(); +const listeners: Record void> = {}; + +jest.mock('@serwist/window', () => ({ + Serwist: jest.fn().mockImplementation(() => ({ + register: mockRegister, + messageSkipWaiting: mockMessageSkipWaiting, + addEventListener: (event: string, callback: () => void) => { + listeners[event] = callback; + }, + })), +})); + +const TestComponent: React.FC = () => ( + + + +); + +describe('ServiceWorkerUpdatePrompt', () => { + beforeEach(() => { + process.env.ENABLE_SW = 'true'; + Object.defineProperty(window.navigator, 'serviceWorker', { + value: {}, + configurable: true, + }); + Object.keys(listeners).forEach((key) => delete listeners[key]); + }); + + afterEach(() => { + delete process.env.ENABLE_SW; + }); + + it('registers the service worker', async () => { + render(); + + await waitFor(() => expect(mockRegister).toHaveBeenCalled()); + }); + + it('does not register when the service worker is disabled', () => { + delete process.env.ENABLE_SW; + + render(); + + expect(mockRegister).not.toHaveBeenCalled(); + }); + + it('shows an update prompt when a new service worker is waiting and activates it on click', async () => { + const { findByRole } = render(); + + await waitFor(() => expect(listeners.waiting).toBeDefined()); + listeners.waiting(); + + const updateButton = await findByRole('button', { name: 'Update' }); + await userEvent.click(updateButton); + + expect(mockMessageSkipWaiting).toHaveBeenCalled(); + }); +}); +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `yarn test ServiceWorkerUpdatePrompt.test.tsx` +Expected: FAIL — cannot find module `./ServiceWorkerUpdatePrompt` + +- [ ] **Step 3: Create the component** + +Create `src/components/ServiceWorker/ServiceWorkerUpdatePrompt.tsx`: + +```tsx +import React, { useEffect, useRef } from 'react'; +import { Button } from '@mui/material'; +import { Serwist } from '@serwist/window'; +import { SnackbarKey, useSnackbar } from 'notistack'; +import { useTranslation } from 'react-i18next'; + +export const ServiceWorkerUpdatePrompt: React.FC = () => { + const { t } = useTranslation(); + const { enqueueSnackbar, closeSnackbar } = useSnackbar(); + // Avoid double registration from React strict mode re-running effects + const registeredRef = useRef(false); + + useEffect(() => { + const swEnabled = + process.env.NODE_ENV === 'production' || + process.env.ENABLE_SW === 'true'; + if ( + !swEnabled || + registeredRef.current || + !('serviceWorker' in navigator) + ) { + return; + } + registeredRef.current = true; + + const serwist = new Serwist('/sw.js', { scope: '/', type: 'classic' }); + + serwist.addEventListener('waiting', () => { + serwist.addEventListener('controlling', () => { + window.location.reload(); + }); + + enqueueSnackbar(t('A new version of the app is available.'), { + persist: true, + action: (key: SnackbarKey) => ( + + ), + }); + }); + + void serwist.register(); + }, [enqueueSnackbar, closeSnackbar, t]); + + return null; +}; +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `yarn test ServiceWorkerUpdatePrompt.test.tsx` +Expected: PASS (3 tests) + +- [ ] **Step 5: Render it in `_app.page.tsx`** + +In `pages/_app.page.tsx`: + +Add the import (alphabetical order with the other `src/components` imports): + +```tsx +import { ServiceWorkerUpdatePrompt } from 'src/components/ServiceWorker/ServiceWorkerUpdatePrompt'; +``` + +Inside the `SnackbarProvider` (it must be a descendant of `SnackbarProvider` because it calls `useSnackbar`), directly after ``: + +```tsx + + + +``` + +- [ ] **Step 6: Run lint + the app-level tests and commit** + +```bash +yarn lint +yarn test ServiceWorkerUpdatePrompt.test.tsx +git add src/components/ServiceWorker pages/_app.page.tsx +git commit -m "Register service worker manually with a user-visible update prompt" +``` + +--- + +### Task 5: iOS installed-PWA meta tags + apple-touch-icon size fixes + +**Files:** +- Modify: `pages/_app.page.tsx` (the `` block, lines ~145-176) + +The existing apple-touch-icon links have wrong `sizes` attributes (e.g. `sizes="60x60"` pointing at the 76x76 file). Fix the sizes to match the actual files and add the installed-PWA meta tags. + +- [ ] **Step 1: Fix the icon links and add meta tags** + +In the `` block of `pages/_app.page.tsx`, replace this block: + +```tsx + + + + + +``` + +with: + +```tsx + + + + + + + + +``` + +- [ ] **Step 2: Lint and commit** + +```bash +yarn lint +git add pages/_app.page.tsx +git commit -m "Add installed-PWA meta tags and fix apple-touch-icon sizes" +``` + +--- + +### Final verification (after all tasks) + +- [ ] `yarn lint:ci` — passes +- [ ] `yarn lint:ts` — no new errors vs. main +- [ ] `yarn test` — full suite passes +- [ ] `ENABLE_SW=true yarn build && yarn serve` — app loads, DevTools → Application shows `sw.js` activated, manifest valid (no warnings), going offline (DevTools Network → Offline) and navigating to an uncached route shows the `/offline` page +- [ ] Clean up build artifacts: `rm -f public/sw.js public/swe-worker*` diff --git a/docs/superpowers/plans/2026-06-10-pwa-phase2-offline-reads.md b/docs/superpowers/plans/2026-06-10-pwa-phase2-offline-reads.md new file mode 100644 index 0000000000..c92a8c5c18 --- /dev/null +++ b/docs/superpowers/plans/2026-06-10-pwa-phase2-offline-reads.md @@ -0,0 +1,645 @@ +# PWA Phase 2: In-Session Offline Reads Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** When the connection drops while MPDX is open, contacts and tasks screens keep rendering from the Apollo cache (read-only), the user sees a clear offline indicator, mutations are blocked with a friendly message instead of failing confusingly, and the session-expiry logic doesn't boot an offline user. + +**Architecture:** A `useIsOnline` hook (navigator.onLine + events) feeds an `OfflineNotifier` (persistent notistack warning while offline). A new Apollo `offlineLink` blocks mutations when offline with a localized snackbar; the existing `onError` link stops spamming error snackbars for offline network failures. RouterGuard's expiry `signIn` is gated on being online. Cache persistence moves from localStorage to IndexedDB (`localforage` + `CachePersistor`) with a purge on logout. **Scope is in-session offline only** — cold-start offline is explicitly out (conflicts with the Phase 1 no-authenticated-caching security rule). + +**Tech Stack:** React 18, Apollo Client (`@apollo/client`, `apollo3-cache-persist` 0.14.1), localforage (new dep), notistack v2, next-auth v4, react-i18next, Jest + RTL. + +**Repo context the engineer must know:** + +- Package manager is **yarn**. Named exports only (pages are the default-export exception). All user-visible strings via `t()` / `i18n.t`. Tests colocated. +- `src/lib/apollo/client.ts` builds the client per session (`makeClient(apiToken)`); a module-level `cache` is shared and persisted at module load (top-level `await` is enabled in webpack config). +- `src/components/Snackbar/Snackbar.tsx` exposes imperative `snackNotifications` (default export) usable outside React — already imported by `client.ts`. +- `pages/_app.page.tsx` renders `` inside `SnackbarProvider` — new global components follow the same placement. +- `pages/logout.page.tsx` already clears CacheStorage + Apollo store before `signOut` (Phase 1) — the persistence purge joins that block. +- `src/lib/i18n.ts` exports the i18n instance for non-React `t()` usage. + +--- + +### Task 1: `useIsOnline` hook + +**Files:** +- Create: `src/hooks/useIsOnline.ts` +- Create: `src/hooks/useIsOnline.test.tsx` + +- [ ] **Step 1: Write the failing test** + +Create `src/hooks/useIsOnline.test.tsx`: + +```tsx +import { act, renderHook } from '@testing-library/react'; +import { useIsOnline } from './useIsOnline'; + +describe('useIsOnline', () => { + it('returns the initial navigator.onLine value', () => { + const { result } = renderHook(() => useIsOnline()); + + expect(result.current).toBe(true); + }); + + it('returns false after an offline event and true after an online event', () => { + const { result } = renderHook(() => useIsOnline()); + + act(() => { + window.dispatchEvent(new Event('offline')); + }); + expect(result.current).toBe(false); + + act(() => { + window.dispatchEvent(new Event('online')); + }); + expect(result.current).toBe(true); + }); + + it('removes event listeners on unmount', () => { + const removeSpy = jest.spyOn(window, 'removeEventListener'); + + const { unmount } = renderHook(() => useIsOnline()); + unmount(); + + expect(removeSpy).toHaveBeenCalledWith('online', expect.any(Function)); + expect(removeSpy).toHaveBeenCalledWith('offline', expect.any(Function)); + removeSpy.mockRestore(); + }); +}); +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `yarn test useIsOnline.test.tsx` +Expected: FAIL — cannot find module `./useIsOnline` + +- [ ] **Step 3: Implement the hook** + +Create `src/hooks/useIsOnline.ts`: + +```ts +import { useEffect, useState } from 'react'; + +export const useIsOnline = (): boolean => { + const [isOnline, setIsOnline] = useState( + typeof navigator === 'undefined' ? true : navigator.onLine, + ); + + useEffect(() => { + const handleOnline = () => setIsOnline(true); + const handleOffline = () => setIsOnline(false); + window.addEventListener('online', handleOnline); + window.addEventListener('offline', handleOffline); + return () => { + window.removeEventListener('online', handleOnline); + window.removeEventListener('offline', handleOffline); + }; + }, []); + + return isOnline; +}; +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `yarn test useIsOnline.test.tsx` +Expected: PASS (3 tests) + +- [ ] **Step 5: Lint and commit** + +```bash +yarn lint +git add src/hooks/useIsOnline.ts src/hooks/useIsOnline.test.tsx +git commit -m "Add useIsOnline hook for connectivity detection" +``` + +--- + +### Task 2: `OfflineNotifier` — persistent offline indicator + +**Files:** +- Create: `src/components/Offline/OfflineNotifier.tsx` +- Create: `src/components/Offline/OfflineNotifier.test.tsx` +- Modify: `pages/_app.page.tsx` (render next to ``) + +Depends on Task 1. Uses a persistent notistack warning rather than a layout banner — zero layout risk, consistent with the SW update prompt pattern. + +- [ ] **Step 1: Write the failing test** + +Create `src/components/Offline/OfflineNotifier.test.tsx`: + +```tsx +import React from 'react'; +import { act, render } from '@testing-library/react'; +import { SnackbarProvider } from 'notistack'; +import { OfflineNotifier } from './OfflineNotifier'; + +const TestComponent: React.FC = () => ( + + + +); + +describe('OfflineNotifier', () => { + it('shows nothing while online', () => { + const { queryByText } = render(); + + expect( + queryByText('You are offline. Changes cannot be saved until you reconnect.'), + ).not.toBeInTheDocument(); + }); + + it('shows a persistent warning while offline and removes it on reconnect', async () => { + const { findByText, queryByText } = render(); + + act(() => { + window.dispatchEvent(new Event('offline')); + }); + expect( + await findByText( + 'You are offline. Changes cannot be saved until you reconnect.', + ), + ).toBeInTheDocument(); + + act(() => { + window.dispatchEvent(new Event('online')); + }); + expect(await findByText('You are back online.')).toBeInTheDocument(); + }); +}); +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `yarn test OfflineNotifier.test.tsx` +Expected: FAIL — cannot find module `./OfflineNotifier` + +- [ ] **Step 3: Implement the component** + +Create `src/components/Offline/OfflineNotifier.tsx`: + +```tsx +import React, { useEffect, useRef } from 'react'; +import { useSnackbar } from 'notistack'; +import { useTranslation } from 'react-i18next'; +import { useIsOnline } from 'src/hooks/useIsOnline'; + +const offlineSnackbarKey = 'offline-notifier'; + +export const OfflineNotifier: React.FC = () => { + const { t } = useTranslation(); + const { enqueueSnackbar, closeSnackbar } = useSnackbar(); + const isOnline = useIsOnline(); + // Skip the "back online" toast on initial mount + const wasOfflineRef = useRef(false); + + useEffect(() => { + if (!isOnline) { + wasOfflineRef.current = true; + enqueueSnackbar( + t('You are offline. Changes cannot be saved until you reconnect.'), + { + key: offlineSnackbarKey, + variant: 'warning', + persist: true, + preventDuplicate: true, + }, + ); + } else { + closeSnackbar(offlineSnackbarKey); + if (wasOfflineRef.current) { + wasOfflineRef.current = false; + enqueueSnackbar(t('You are back online.'), { variant: 'success' }); + } + } + }, [isOnline, enqueueSnackbar, closeSnackbar, t]); + + return null; +}; +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `yarn test OfflineNotifier.test.tsx` +Expected: PASS (2 tests) + +- [ ] **Step 5: Render in `_app.page.tsx`** + +Add the import (lint will fix ordering): + +```tsx +import { OfflineNotifier } from 'src/components/Offline/OfflineNotifier'; +``` + +Render directly after `` (inside `SnackbarProvider`): + +```tsx + + +``` + +- [ ] **Step 6: Lint and commit** + +```bash +yarn lint +git add src/components/Offline pages/_app.page.tsx +git commit -m "Add persistent offline indicator" +``` + +--- + +### Task 3: Apollo offline behavior — block mutations, stop error spam + +**Files:** +- Create: `src/lib/apollo/offlineLink.ts` +- Create: `src/lib/apollo/offlineLink.test.ts` +- Modify: `src/lib/apollo/client.ts` (add link to chain; suppress offline network-error snackbars) + +- [ ] **Step 1: Write the failing test** + +Create `src/lib/apollo/offlineLink.test.ts`: + +```ts +import { ApolloLink, Observable, execute, gql } from '@apollo/client'; +import { offlineLink } from './offlineLink'; + +jest.mock('src/components/Snackbar/Snackbar', () => ({ + warning: jest.fn(), +})); + +const query = gql` + query TestContacts { + contacts { + id + } + } +`; + +const mutation = gql` + mutation TestUpdateContact { + updateContact { + id + } + } +`; + +const makeTerminatingLink = (spy: jest.Mock) => + new ApolloLink((operation) => { + spy(operation.operationName); + return Observable.of({ data: {} }); + }); + +const setOnline = (onLine: boolean) => + Object.defineProperty(window.navigator, 'onLine', { + configurable: true, + value: onLine, + }); + +describe('offlineLink', () => { + afterEach(() => { + setOnline(true); + }); + + it('forwards mutations when online', (done) => { + const spy = jest.fn(); + const link = offlineLink.concat(makeTerminatingLink(spy)); + + execute(link, { query: mutation }).subscribe({ + complete: () => { + expect(spy).toHaveBeenCalledWith('TestUpdateContact'); + done(); + }, + }); + }); + + it('blocks mutations when offline with an error', (done) => { + setOnline(false); + const spy = jest.fn(); + const link = offlineLink.concat(makeTerminatingLink(spy)); + + execute(link, { query: mutation }).subscribe({ + error: (error) => { + expect(spy).not.toHaveBeenCalled(); + expect(error.message).toContain('offline'); + done(); + }, + }); + }); + + it('forwards queries even when offline', (done) => { + setOnline(false); + const spy = jest.fn(); + const link = offlineLink.concat(makeTerminatingLink(spy)); + + execute(link, { query }).subscribe({ + complete: () => { + expect(spy).toHaveBeenCalledWith('TestContacts'); + done(); + }, + }); + }); +}); +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `yarn test offlineLink.test.ts` +Expected: FAIL — cannot find module `./offlineLink` + +- [ ] **Step 3: Implement the link** + +Create `src/lib/apollo/offlineLink.ts`: + +```ts +import { ApolloLink, Observable } from '@apollo/client'; +import { getMainDefinition } from '@apollo/client/utilities'; +import i18n from 'src/lib/i18n'; +import snackNotifications from '../../components/Snackbar/Snackbar'; + +export const isOffline = (): boolean => + typeof navigator !== 'undefined' && !navigator.onLine; + +// Blocks mutations while offline so users get one clear message instead of a +// confusing network failure. Queries pass through: cache-and-network renders +// cached data and the network miss is suppressed in the onError link. +export const offlineLink = new ApolloLink((operation, forward) => { + const definition = getMainDefinition(operation.query); + const isMutation = + definition.kind === 'OperationDefinition' && + definition.operation === 'mutation'; + + if (isMutation && isOffline()) { + snackNotifications.warning( + i18n.t('You are offline. Changes cannot be saved until you reconnect.'), + { preventDuplicate: true }, + ); + return new Observable((observer) => { + observer.error( + new Error(i18n.t('Cannot save changes while offline.')), + ); + }); + } + + return forward(operation); +}); +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `yarn test offlineLink.test.ts` +Expected: PASS (3 tests) + +- [ ] **Step 5: Wire into `client.ts`** + +In `src/lib/apollo/client.ts`: + +a) Add import: + +```ts +import { isOffline, offlineLink } from './offlineLink'; +``` + +b) Add `offlineLink` to the link chain FIRST (before `makeAuthLink`), so blocked mutations never reach the network stack: + +```ts + link: from([ + offlineLink, + makeAuthLink(apiToken), + onError(({ graphQLErrors, networkError, operation }) => { +``` + +c) In the `networkError` branch (currently lines 62-65), suppress the snackbar when offline — the OfflineNotifier already tells the user what's happening, and every backgrounded query failing offline would otherwise spam error toasts: + +```ts + if (networkError && !isOffline()) { + dispatch('mpdx-api-error'); + snackNotifications.error(networkError.message); + } +``` + +(Note: the mutation-block error from `offlineLink` does NOT pass through `onError` — `offlineLink` is upstream and errors without forwarding, so the error rejects straight to the mutation caller. Components that catch mutation errors may show their own toast with the "Cannot save changes while offline." message — that's acceptable and informative, not a bug.) + +- [ ] **Step 6: Run lint:ts + affected tests, commit** + +```bash +yarn lint:ts +yarn test offlineLink.test.ts +yarn lint +git add src/lib/apollo/offlineLink.ts src/lib/apollo/offlineLink.test.ts src/lib/apollo/client.ts +git commit -m "Block mutations and suppress error snackbars while offline" +``` + +--- + +### Task 4: RouterGuard offline grace + +**Files:** +- Modify: `src/components/RouterGuard/RouterGuard.tsx` +- Modify or Create: `src/components/RouterGuard/RouterGuard.test.tsx` (check if it exists first; extend if so, create if not) + +Depends on Task 1. Problem: `RouterGuard.tsx:21-28` calls `signIn('okta')` the moment the session expiry timestamp passes. Offline, that redirect fails or strands the user — for read-only offline use, an expired session is fine until reconnect. + +- [ ] **Step 1: Write the failing test** + +Read the existing `src/components/RouterGuard/RouterGuard.test.tsx` first (if present) and follow its mocking approach for `next-auth/react`. Add (or create the file with) these cases — adapt mock setup to the existing pattern, but the behavioral assertions must be: + +```tsx +import React from 'react'; +import { render } from '@testing-library/react'; +import { signIn, useSession } from 'next-auth/react'; +import { RouterGuard } from './RouterGuard'; + +jest.mock('next-auth/react', () => ({ + signIn: jest.fn(), + useSession: jest.fn(), +})); + +jest.mock('next/router', () => ({ + useRouter: () => ({ push: jest.fn() }), +})); + +const mockUseSession = useSession as jest.Mock; + +const expiredSession = { + status: 'authenticated', + data: { expires: '2020-01-01T00:00:00.000Z' }, +}; + +const setOnline = (onLine: boolean) => + Object.defineProperty(window.navigator, 'onLine', { + configurable: true, + value: onLine, + }); + +describe('RouterGuard session expiry', () => { + afterEach(() => { + setOnline(true); + }); + + it('re-authenticates when the session is expired and online', () => { + setOnline(true); + mockUseSession.mockReturnValue(expiredSession); + + render( + +
content
+
, + ); + + expect(signIn).toHaveBeenCalledWith('okta'); + }); + + it('does not re-authenticate while offline', () => { + setOnline(false); + mockUseSession.mockReturnValue(expiredSession); + + render( + +
content
+
, + ); + + expect(signIn).not.toHaveBeenCalled(); + }); +}); +``` + +- [ ] **Step 2: Run test to verify the offline case fails** + +Run: `yarn test RouterGuard.test.tsx` +Expected: the "does not re-authenticate while offline" test FAILS (signIn is currently called unconditionally) + +- [ ] **Step 3: Implement the guard change** + +In `src/components/RouterGuard/RouterGuard.tsx`: + +```tsx +import { useIsOnline } from 'src/hooks/useIsOnline'; +``` + +```tsx + const isOnline = useIsOnline(); + + useEffect(() => { + if ( + // While offline, let an expired session keep rendering cached data; + // the redirect to Okta would fail anyway. Re-checks on reconnect + // because isOnline is a dependency. + isOnline && + session.status === 'authenticated' && + DateTime.now().toISO() > session.data.expires + ) { + signIn('okta'); + } + }, [session, isOnline]); +``` + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `yarn test RouterGuard.test.tsx` +Expected: PASS (all cases, including any pre-existing ones) + +- [ ] **Step 5: Lint and commit** + +```bash +yarn lint +git add src/components/RouterGuard +git commit -m "Keep offline users in the app when their session expires" +``` + +--- + +### Task 5: IndexedDB cache persistence + logout purge + +**Files:** +- Modify: `package.json` (via `yarn add localforage`) +- Modify: `src/lib/apollo/client.ts` (lines 20-26: persistence block) +- Modify: `pages/logout.page.tsx` + +localStorage caps at ~5MB which a real contact list will blow through; `apollo3-cache-persist`'s default `maxSize` (1MB) also silently pauses persistence when exceeded. IndexedDB via localforage removes both limits. + +- [ ] **Step 1: Add the dependency** + +```bash +yarn add localforage +``` + +- [ ] **Step 2: Swap the persistence layer in `client.ts`** + +Replace lines 20-26 (`const cache = createCache();` through the `persistCache` block) with: + +```ts +import localforage from 'localforage'; +import { CachePersistor, LocalForageWrapper } from 'apollo3-cache-persist'; +``` + +```ts +const cache = createCache(); + +// CachePersistor (rather than persistCache) gives logout a handle to purge +// the persisted data. IndexedDB via localforage avoids localStorage's ~5MB +// cap, which a cached contact list can exceed. +export const cachePersistor = + typeof window !== 'undefined' && process.env.NODE_ENV === 'production' + ? new CachePersistor({ + cache, + storage: new LocalForageWrapper(localforage), + maxSize: false, + }) + : undefined; + +if (cachePersistor) { + await cachePersistor.restore(); + // Remove the cache persisted to localStorage by the previous implementation + window.localStorage.removeItem('apollo-cache-persist'); +} +``` + +Remove the now-unused `LocalStorageWrapper, persistCache` import. Verify `CachePersistor` and `LocalForageWrapper` are exported by the installed `apollo3-cache-persist@0.14.1` (check `node_modules/apollo3-cache-persist/lib/index.d.ts`). + +- [ ] **Step 3: Purge on logout** + +In `pages/logout.page.tsx`, the effect currently clears CacheStorage, DataDog, and the Apollo store before `signOut`. Add the persistor purge after `client.clearStore()`: + +```tsx +import makeClient, { cachePersistor } from 'src/lib/apollo/client'; +``` + +(check the existing import shape — `makeClient` may already be imported; extend it) + +```tsx + clearDataDogUser(); + await client.clearStore(); + // Remove the persisted Apollo cache so the next user of a shared + // device cannot read this user's cached contact data. + await cachePersistor?.purge(); + await signOut({ callbackUrl: 'signOut' }); +``` + +- [ ] **Step 4: Verify** + +```bash +yarn lint:ts +yarn lint +yarn build +``` + +Expected: type check clean, build succeeds (persistence is prod-gated, so the build is the meaningful check). Then `rm -f public/sw.js public/sw.js.map`. + +- [ ] **Step 5: Commit** + +```bash +git add package.json yarn.lock src/lib/apollo/client.ts pages/logout.page.tsx +git commit -m "Persist Apollo cache to IndexedDB and purge it on logout" +``` + +--- + +### Task 6 (manual QA — user-assisted, not a sub-agent task) + +- [ ] `ENABLE_SW=true yarn build && yarn serve`, log in, load contacts + tasks, then DevTools → Network → Offline: + - Contacts list/detail and tasks list/detail still render (from cache) + - Persistent "You are offline" warning appears; "back online" toast on reconnect + - Attempting an edit shows the offline warning, not a raw error + - No error-snackbar spam while navigating offline + - Other routes (reports, etc.) degrade to error/empty states without crashing +- [ ] Airplane-mode test on a phone against the preview deploy diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000000..f47029973b --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,13 @@ +App/build +App/Pods +App/output +App/App/public +DerivedData +xcuserdata + +# Cordova plugins for Capacitor +capacitor-cordova-ios-plugins + +# Generated Config files +App/App/capacitor.config.json +App/App/config.xml diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..110f9c1e6c --- /dev/null +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -0,0 +1,420 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; }; + 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; }; + 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; + 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; + 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; + 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; + 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; + A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; }; + 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; }; + 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 504EC3191FED79650016851F /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; }; + 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; + AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; + FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 504EC3011FED79650016851F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = { + isa = PBXGroup; + children = ( + AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 504EC2FB1FED79650016851F = { + isa = PBXGroup; + children = ( + 504EC3061FED79650016851F /* App */, + 504EC3051FED79650016851F /* Products */, + 7F8756D8B27F46E3366F6CEA /* Pods */, + 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */, + ); + sourceTree = ""; + }; + 504EC3051FED79650016851F /* Products */ = { + isa = PBXGroup; + children = ( + 504EC3041FED79650016851F /* App.app */, + ); + name = Products; + sourceTree = ""; + }; + 504EC3061FED79650016851F /* App */ = { + isa = PBXGroup; + children = ( + 504EC3191FED79650016851F /* App.entitlements */, + 50379B222058CBB4000EE86E /* capacitor.config.json */, + 504EC3071FED79650016851F /* AppDelegate.swift */, + 504EC30B1FED79650016851F /* Main.storyboard */, + 504EC30E1FED79650016851F /* Assets.xcassets */, + 504EC3101FED79650016851F /* LaunchScreen.storyboard */, + 504EC3131FED79650016851F /* Info.plist */, + 2FAD9762203C412B000D30F8 /* config.xml */, + 50B271D01FEDC1A000F3C39B /* public */, + ); + path = App; + sourceTree = ""; + }; + 7F8756D8B27F46E3366F6CEA /* Pods */ = { + isa = PBXGroup; + children = ( + FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */, + AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 504EC3031FED79650016851F /* App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; + buildPhases = ( + 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */, + 504EC3001FED79650016851F /* Sources */, + 504EC3011FED79650016851F /* Frameworks */, + 504EC3021FED79650016851F /* Resources */, + 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = App; + productName = App; + productReference = 504EC3041FED79650016851F /* App.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 504EC2FC1FED79650016851F /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 0920; + TargetAttributes = { + 504EC3031FED79650016851F = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Push = { + enabled = 1; + }; + com.apple.SafariKeychain = { + enabled = 1; + }; + }; + }; + }; + }; + buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 504EC2FB1FED79650016851F; + packageReferences = ( + ); + productRefGroup = 504EC3051FED79650016851F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 504EC3031FED79650016851F /* App */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 504EC3021FED79650016851F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */, + 50B271D11FEDC1A000F3C39B /* public in Resources */, + 504EC30F1FED79650016851F /* Assets.xcassets in Resources */, + 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */, + 504EC30D1FED79650016851F /* Main.storyboard in Resources */, + 2FAD9763203C412B000D30F8 /* config.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 504EC3001FED79650016851F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 504EC3081FED79650016851F /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 504EC30B1FED79650016851F /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 504EC30C1FED79650016851F /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 504EC3101FED79650016851F /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 504EC3111FED79650016851F /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 504EC3141FED79650016851F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 504EC3151FED79650016851F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 504EC3171FED79650016851F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App/App.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = App/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; + PRODUCT_BUNDLE_IDENTIFIER = org.cru.mpdx; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 504EC3181FED79650016851F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App/App.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = App/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.cru.mpdx; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 504EC3141FED79650016851F /* Debug */, + 504EC3151FED79650016851F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 504EC3171FED79650016851F /* Debug */, + 504EC3181FED79650016851F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 504EC2FC1FED79650016851F /* Project object */; +} diff --git a/ios/App/App.xcworkspace/contents.xcworkspacedata b/ios/App/App.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..b301e824b3 --- /dev/null +++ b/ios/App/App.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/App/App/App.entitlements b/ios/App/App/App.entitlements new file mode 100644 index 0000000000..c1f8701a6c --- /dev/null +++ b/ios/App/App/App.entitlements @@ -0,0 +1,36 @@ + + + + + + aps-environment + development + + com.apple.developer.associated-domains + + applinks:mpdx.org + webcredentials:mpdx.org + + + diff --git a/ios/App/App/AppDelegate.swift b/ios/App/App/AppDelegate.swift new file mode 100644 index 0000000000..c3cd83b5c0 --- /dev/null +++ b/ios/App/App/AppDelegate.swift @@ -0,0 +1,49 @@ +import UIKit +import Capacitor + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { + // Called when the app was launched with a url. Feel free to add additional processing here, + // but if you want the App API to support tracking app url opens, make sure to keep this call + return ApplicationDelegateProxy.shared.application(app, open: url, options: options) + } + + func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { + // Called when the app was launched with an activity, including Universal Links. + // Feel free to add additional processing here, but if you want the App API to support + // tracking app url opens, make sure to keep this call + return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler) + } + +} diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png new file mode 100644 index 0000000000..2a79d1bbfd Binary files /dev/null and b/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..b1a84833eb --- /dev/null +++ b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images": [ + { + "idiom": "universal", + "size": "1024x1024", + "filename": "AppIcon-512@2x.png", + "platform": "ios" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/ios/App/App/Assets.xcassets/Contents.json b/ios/App/App/Assets.xcassets/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/ios/App/App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json new file mode 100644 index 0000000000..84a416d6be --- /dev/null +++ b/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "Default@1x~universal~anyany.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "Default@2x~universal~anyany.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "Default@3x~universal~anyany.png", + "scale": "3x" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "idiom": "universal", + "scale": "1x", + "filename": "Default@1x~universal~anyany-dark.png" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "idiom": "universal", + "scale": "2x", + "filename": "Default@2x~universal~anyany-dark.png" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "idiom": "universal", + "scale": "3x", + "filename": "Default@3x~universal~anyany-dark.png" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png b/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png new file mode 100644 index 0000000000..ad2aa34947 Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png b/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png new file mode 100644 index 0000000000..ad2aa34947 Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png b/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png new file mode 100644 index 0000000000..ad2aa34947 Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png b/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png new file mode 100644 index 0000000000..ad2aa34947 Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png b/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png new file mode 100644 index 0000000000..ad2aa34947 Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png b/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png new file mode 100644 index 0000000000..ad2aa34947 Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png new file mode 100644 index 0000000000..33ea6c970f Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png new file mode 100644 index 0000000000..33ea6c970f Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png new file mode 100644 index 0000000000..33ea6c970f Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png differ diff --git a/ios/App/App/Base.lproj/LaunchScreen.storyboard b/ios/App/App/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..e7ae5d7802 --- /dev/null +++ b/ios/App/App/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/App/App/Base.lproj/Main.storyboard b/ios/App/App/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..b44df7be8f --- /dev/null +++ b/ios/App/App/Base.lproj/Main.storyboard @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ios/App/App/Info.plist b/ios/App/App/Info.plist new file mode 100644 index 0000000000..730b8a03b9 --- /dev/null +++ b/ios/App/App/Info.plist @@ -0,0 +1,75 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + MPDX + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + + NSCameraUsageDescription + MPDX uses the camera to take a photo for a contact or your profile. + NSPhotoLibraryUsageDescription + MPDX accesses your photo library so you can choose a photo for a contact or your profile. + NSPhotoLibraryAddUsageDescription + MPDX can save photos you take to your photo library. + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + WKAppBoundDomains + + mpdx.org + stage.mpdx.org + + + diff --git a/ios/App/Podfile b/ios/App/Podfile new file mode 100644 index 0000000000..5c6f854c6f --- /dev/null +++ b/ios/App/Podfile @@ -0,0 +1,31 @@ +require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' + +platform :ios, '14.0' +use_frameworks! + +# workaround to avoid Xcode caching of Pods that requires +# Product -> Clean Build Folder after new Cordova plugins installed +# Requires CocoaPods 1.6 or newer +install! 'cocoapods', :disable_input_output_paths => true + +def capacitor_pods + pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' + pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' + pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app' + pod 'CapacitorBrowser', :path => '../../node_modules/@capacitor/browser' + pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera' + pod 'CapacitorDevice', :path => '../../node_modules/@capacitor/device' + pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics' + pod 'CapacitorPushNotifications', :path => '../../node_modules/@capacitor/push-notifications' + pod 'CapacitorSplashScreen', :path => '../../node_modules/@capacitor/splash-screen' + pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar' +end + +target 'App' do + capacitor_pods + # Add your Pods here +end + +post_install do |installer| + assertDeploymentTarget(installer) +end diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock new file mode 100644 index 0000000000..2ef0db5e82 --- /dev/null +++ b/ios/App/Podfile.lock @@ -0,0 +1,70 @@ +PODS: + - Capacitor (7.6.6): + - CapacitorCordova + - CapacitorApp (7.1.2): + - Capacitor + - CapacitorBrowser (7.0.5): + - Capacitor + - CapacitorCamera (7.0.5): + - Capacitor + - CapacitorCordova (7.6.6) + - CapacitorDevice (7.0.5): + - Capacitor + - CapacitorHaptics (7.0.5): + - Capacitor + - CapacitorPushNotifications (7.0.6): + - Capacitor + - CapacitorSplashScreen (7.0.5): + - Capacitor + - CapacitorStatusBar (7.0.6): + - Capacitor + +DEPENDENCIES: + - "Capacitor (from `../../node_modules/@capacitor/ios`)" + - "CapacitorApp (from `../../node_modules/@capacitor/app`)" + - "CapacitorBrowser (from `../../node_modules/@capacitor/browser`)" + - "CapacitorCamera (from `../../node_modules/@capacitor/camera`)" + - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" + - "CapacitorDevice (from `../../node_modules/@capacitor/device`)" + - "CapacitorHaptics (from `../../node_modules/@capacitor/haptics`)" + - "CapacitorPushNotifications (from `../../node_modules/@capacitor/push-notifications`)" + - "CapacitorSplashScreen (from `../../node_modules/@capacitor/splash-screen`)" + - "CapacitorStatusBar (from `../../node_modules/@capacitor/status-bar`)" + +EXTERNAL SOURCES: + Capacitor: + :path: "../../node_modules/@capacitor/ios" + CapacitorApp: + :path: "../../node_modules/@capacitor/app" + CapacitorBrowser: + :path: "../../node_modules/@capacitor/browser" + CapacitorCamera: + :path: "../../node_modules/@capacitor/camera" + CapacitorCordova: + :path: "../../node_modules/@capacitor/ios" + CapacitorDevice: + :path: "../../node_modules/@capacitor/device" + CapacitorHaptics: + :path: "../../node_modules/@capacitor/haptics" + CapacitorPushNotifications: + :path: "../../node_modules/@capacitor/push-notifications" + CapacitorSplashScreen: + :path: "../../node_modules/@capacitor/splash-screen" + CapacitorStatusBar: + :path: "../../node_modules/@capacitor/status-bar" + +SPEC CHECKSUMS: + Capacitor: 961efd309ab0e390a8081b63c561186f61a6714d + CapacitorApp: f01a913211780e0718dae9750442c3e23f96e106 + CapacitorBrowser: 6d09f59655e89aede71654ef08b98de55cf032b6 + CapacitorCamera: 9e952270be355797f769aa835bb7643a96c871fe + CapacitorCordova: 3a4e0027a89a59421c918d19aee9d6ba1c7a3556 + CapacitorDevice: ba96f933a2cb5dcdc68187503d48f7b5aa11ba9e + CapacitorHaptics: 1b145fa83c622e5383a3bac04ea81e2514f0b0f5 + CapacitorPushNotifications: b8e30637549ce91468b8c4dddbef2657be831f4c + CapacitorSplashScreen: 409eeaaeac603d264f209c0fcb718aa22fe1f7bb + CapacitorStatusBar: 416e9e53fd6397e668d4a181cd2131617d949bd6 + +PODFILE CHECKSUM: 003099730850ce7538a3f528844bda3158acda4d + +COCOAPODS: 1.16.2 diff --git a/next.config.ts b/next.config.ts index bf32e0fdbb..ee54106c44 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,8 +1,8 @@ +import { spawnSync } from 'node:child_process'; import type { NextConfig } from 'next'; import bundleAnalyzer from '@next/bundle-analyzer'; -import withPlugins from 'next-compose-plugins'; +import withSerwistInit from '@serwist/next'; import withOptimizedImages from 'next-optimized-images'; -import withPWA from 'next-pwa'; if (process.env.secrets && process.env.secrets !== '{}') { process.env.JWT_SECRET = JSON.parse(process.env.secrets).JWT_SECRET; @@ -19,6 +19,24 @@ if (process.env.secrets && process.env.secrets !== '{}') { const prod = process.env.NODE_ENV === 'production'; +// A revision versions the precached /offline page so a new deploy +// invalidates the previously precached copy. +const revision = + ( + spawnSync('git', ['rev-parse', 'HEAD'], { encoding: 'utf-8' }).stdout ?? '' + ).trim() || crypto.randomUUID(); + +const withSerwist = withSerwistInit({ + swSrc: 'src/service-worker/index.ts', + swDest: 'public/sw.js', + // Registration is handled manually by ServiceWorkerUpdatePrompt so we can + // show an update prompt instead of silently activating new versions + register: false, + // Set ENABLE_SW=true to test the service worker in a local dev/build + disable: !prod && process.env.ENABLE_SW !== 'true', + additionalPrecacheEntries: [{ url: '/offline', revision }], +}); + if (prod && !process.env.JWT_SECRET) { throw new Error('JWT_SECRET environment variable is not set'); } @@ -86,6 +104,7 @@ const config: NextConfig = { DONATION_SERVICES_EMAIL: process.env.DONATION_SERVICES_EMAIL ?? 'donation.services@cru.org', DISABLE_NEW_REPORTS: process.env.DISABLE_NEW_REPORTS, + ENABLE_SW: process.env.ENABLE_SW, }, // Force .page prefix on page files (ex. index.page.tsx) so generated files can be included in /pages directory without Next.js throwing build errors pageExtensions: ['page.tsx', 'page.ts', 'page.jsx', 'page.js'], @@ -168,20 +187,17 @@ const config: NextConfig = { permanent: true, }, ], -}; -module.exports = withPlugins([ - [ - withPWA, + headers: async () => [ { - pwa: { - dest: 'public', - disable: !prod, - }, + // Apple fetches the AASA at the extensionless path and requires a + // direct 200 with an application/json content type. Next.js serves + // extensionless public/ files as application/octet-stream, so force + // the header here (and again in customHttp.yml for Amplify's CDN). + source: '/.well-known/apple-app-site-association', + headers: [{ key: 'Content-Type', value: 'application/json' }], }, ], - withOptimizedImages, - // Workaround @next/bundle-analyzer not playing nicely with next-compose-plugins - // https://github.com/cyrilwanner/next-compose-plugins/issues/26 - withBundleAnalyzer(config), -]); +}; + +module.exports = withSerwist(withOptimizedImages(withBundleAnalyzer(config))); diff --git a/package.json b/package.json index 6da87b0c91..c622e4f08c 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,17 @@ "@apollo/subgraph": "^2.1.3", "@apollo/utils.fetcher": "3.0.0", "@as-integrations/next": "^3.2.0", + "@capacitor/android": "^7.0.0", + "@capacitor/app": "^7.0.0", + "@capacitor/browser": "^7.0.0", + "@capacitor/camera": "^7.0.0", + "@capacitor/core": "^7.0.0", + "@capacitor/device": "^7.0.0", + "@capacitor/haptics": "^7.0.0", + "@capacitor/ios": "^7.0.0", + "@capacitor/push-notifications": "^7.0.0", + "@capacitor/splash-screen": "^7.0.0", + "@capacitor/status-bar": "^7.0.0", "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", @@ -51,6 +62,8 @@ "@mui/x-date-pickers": "^7.0.0-beta.7", "@react-google-maps/api": "^2.20.3", "@rollbar/react": "^0.11.1", + "@serwist/next": "^9.5.11", + "@serwist/window": "^9.5.11", "apollo3-cache-persist": "^0.14.1", "clsx": "^2.1.1", "formidable": "^3.5.4", @@ -61,13 +74,13 @@ "i18next": "^21.9.2", "i18next-browser-languagedetector": "^6.1.5", "i18next-http-backend": "^1.4.4", + "localforage": "^1.10.0", "lodash": "^4.17.21", "luxon": "^3.4.4", "micro-cors": "^0.1.1", "next": "^15.0.3", "next-auth": "^4.24.11", "next-optimized-images": "^2.6.2", - "next-pwa": "^5.6.0", "notistack": "^2.0.5", "prop-types": "^15.8.1", "react": "^18.2.0", @@ -79,11 +92,14 @@ "react-virtuoso": "2.19.0", "recharts": "2.3.2", "rollbar": "^2.25.2", + "serwist": "^9.5.11", "tslib": "^2.4.0", "tss-react": "^4.1.3", "yup": "^1.4.0" }, "devDependencies": { + "@capacitor/assets": "^3.0.5", + "@capacitor/cli": "^7.0.0", "@crowdin/cli": "^4.9.1", "@graphql-codegen/add": "^5.0.2", "@graphql-codegen/cli": "^5.0.2", @@ -135,7 +151,6 @@ "jest-fetch-mock": "^3.0.3", "lighthouse": "^11.7.0", "lint-staged": "^13.0.3", - "next-compose-plugins": "^2.2.1", "node-mocks-http": "1.16.2", "prettier": "^3.6.2", "puppeteer": "24.4.0", diff --git a/pages/_app.page.test.tsx b/pages/_app.page.test.tsx new file mode 100644 index 0000000000..a22c76c4a7 --- /dev/null +++ b/pages/_app.page.test.tsx @@ -0,0 +1,238 @@ +import { AppProps } from 'next/app'; +import { NextRouter } from 'next/router'; +import React, { ReactElement, ReactNode } from 'react'; +import { act, render } from '@testing-library/react'; +import { session } from '__tests__/fixtures/session'; +import TestRouter from '__tests__/util/TestRouter'; +import { + mockCapacitorCore, + mockPushNotifications, + mockSplashScreen, + mockStatusBar, + setNativePlatform, +} from '__tests__/util/capacitorMocks'; +import { resetLaunchUrlLatchForTesting } from 'src/components/NativeShell/NativeDeepLinkProvider'; +import { MIN_SUPPORTED_SHELL_VERSION } from 'src/lib/nativeShell/shellVersion'; +import App, { PageWithLayout } from './_app.page'; + +const mockAppAddListener = jest.fn(async () => ({ + remove: jest.fn(async () => undefined), +})); +const mockGetLaunchUrl = jest.fn( + async (): Promise<{ url: string } | undefined> => undefined, +); +const mockGetInfo = jest.fn(async () => ({ version: '1.0.0' })); + +// @serwist/window is ESM-only and untransformed by Jest; the service worker +// is disabled in the test environment so the class is never instantiated. +jest.mock('@serwist/window', () => ({ Serwist: jest.fn() })); + +jest.mock('@capacitor/core', () => mockCapacitorCore); +jest.mock('@capacitor/push-notifications', () => ({ + PushNotifications: mockPushNotifications, +})); +jest.mock('@capacitor/app', () => ({ + App: { + addListener: mockAppAddListener, + getLaunchUrl: mockGetLaunchUrl, + getInfo: mockGetInfo, + }, +})); +jest.mock('@capacitor/splash-screen', () => ({ + SplashScreen: mockSplashScreen, +})); +// requireActual would load the real plugin, which imports @capacitor/core +// before the mocks above initialize — so re-declare the tiny enum inline. +jest.mock('@capacitor/status-bar', () => ({ + StatusBar: mockStatusBar, + Style: { Dark: 'DARK', Light: 'LIGHT', Default: 'DEFAULT' }, +})); + +// The real makeClient performs a top-level await of the cache persistor and +// talks to the network. The providers under test render their children while +// queries are loading, so a client whose link never emits keeps the full +// provider tree mounted without any network traffic. +jest.mock('src/lib/apollo/client', () => { + const { ApolloClient, ApolloLink, InMemoryCache, Observable } = + jest.requireActual('@apollo/client'); + return { + __esModule: true, + default: jest.fn( + () => + new ApolloClient({ + cache: new InMemoryCache(), + link: new ApolloLink(() => new Observable(() => undefined)), + }), + ), + }; +}); + +// The global setup mock of next-auth/react does not include SessionProvider, +// which _app renders, so re-mock with a pass-through provider added. +jest.mock('next-auth/react', () => { + const { session: mockSession } = jest.requireActual( + '__tests__/fixtures/session', + ); + return { + getSession: jest.fn().mockResolvedValue(mockSession), + useSession: jest.fn().mockReturnValue({ + status: 'authenticated', + data: mockSession, + update: () => Promise.resolve(null), + }), + signIn: jest.fn().mockResolvedValue(undefined), + signOut: jest.fn().mockResolvedValue(undefined), + SessionProvider: ({ children }: { children: ReactNode }) => children, + }; +}); + +const TestLayout = ({ children }: { children?: ReactNode }): ReactElement => ( +
{children}
+); + +const TestPage: PageWithLayout = () => ( +
Page content
+); +TestPage.layout = TestLayout; + +const testRouter: Partial = { + pathname: '/accountLists/[accountListId]', + route: '/accountLists/[accountListId]', + asPath: '/accountLists/account-list-1', + query: { accountListId: 'account-list-1' }, +}; + +const renderApp = () => + render( + + + , + ); + +/** + * Drains the native components' async effect chains (dynamic plugin imports → + * listener registrations). A zero-delay macrotask guarantees every queued + * microtask has run, so negative assertions ("plugin never touched") are + * trustworthy. + */ +const flushEffects = () => + act(() => new Promise((resolve) => setTimeout(resolve, 0))); + +const browserUserAgent = + 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'; + +const setUserAgent = (userAgent: string) => + jest.spyOn(window.navigator, 'userAgent', 'get').mockReturnValue(userAgent); + +describe('App', () => { + beforeEach(() => { + resetLaunchUrlLatchForTesting(); + }); + + afterEach(() => { + window.localStorage.clear(); + }); + + describe('on the web', () => { + beforeEach(() => { + setNativePlatform('web'); + setUserAgent(browserUserAgent); + }); + + it('renders the page tree unchanged and never touches native plugin code', async () => { + const { findByTestId, queryByText } = renderApp(); + await flushEffects(); + + // The page renders normally and the shell upgrade gate stays out of the way + expect(await findByTestId('page-content')).toBeInTheDocument(); + expect(queryByText('Update Required')).not.toBeInTheDocument(); + + // Native chrome helpers are inert in the browser + expect(mockSplashScreen.hide).not.toHaveBeenCalled(); + expect(mockStatusBar.setStyle).not.toHaveBeenCalled(); + expect(mockStatusBar.setOverlaysWebView).not.toHaveBeenCalled(); + expect(mockStatusBar.setBackgroundColor).not.toHaveBeenCalled(); + + // Deep-link routing and push registration are inert in the browser + expect(mockAppAddListener).not.toHaveBeenCalled(); + expect(mockGetLaunchUrl).not.toHaveBeenCalled(); + expect(mockPushNotifications.addListener).not.toHaveBeenCalled(); + expect(mockPushNotifications.register).not.toHaveBeenCalled(); + expect(mockPushNotifications.requestPermissions).not.toHaveBeenCalled(); + }); + }); + + describe('in the native shell', () => { + beforeEach(() => { + setNativePlatform('ios'); + setUserAgent( + `${browserUserAgent} MPDXShell/${MIN_SUPPORTED_SHELL_VERSION}`, + ); + }); + + it('hides the splash screen and styles the status bar after hydration', async () => { + const { findByTestId } = renderApp(); + await flushEffects(); + + expect(await findByTestId('page-content')).toBeInTheDocument(); + expect(mockSplashScreen.hide).toHaveBeenCalledTimes(1); + expect(mockStatusBar.setStyle).toHaveBeenCalledWith({ style: 'DARK' }); + }); + + it('mounts deep-link routing inside the providers', async () => { + renderApp(); + await flushEffects(); + + expect(mockAppAddListener).toHaveBeenCalledWith( + 'appUrlOpen', + expect.any(Function), + ); + expect(mockPushNotifications.addListener).toHaveBeenCalledWith( + 'pushNotificationActionPerformed', + expect.any(Function), + ); + expect(mockGetLaunchUrl).toHaveBeenCalled(); + }); + + it('silently re-registers push for an opted-in device without ever prompting', async () => { + window.localStorage.setItem('mpdx_push_enabled', 'true'); + mockPushNotifications.checkPermissions.mockResolvedValueOnce({ + receive: 'granted', + }); + + renderApp(); + await flushEffects(); + + expect(mockPushNotifications.register).toHaveBeenCalledTimes(1); + // Invariant: the bootstrap never prompts — only the settings card may + expect(mockPushNotifications.requestPermissions).not.toHaveBeenCalled(); + }); + + it('does not register push when the user has not opted in', async () => { + renderApp(); + await flushEffects(); + + expect(mockPushNotifications.register).not.toHaveBeenCalled(); + expect(mockPushNotifications.requestPermissions).not.toHaveBeenCalled(); + }); + + it('blocks the page tree with the upgrade screen when the shell is below the minimum version', async () => { + setUserAgent(`${browserUserAgent} MPDXShell/0.0.1`); + + const { findByText, queryByTestId } = renderApp(); + await flushEffects(); + + expect(await findByText('Update Required')).toBeInTheDocument(); + // Sign out stays reachable — the screen must never block it + expect(await findByText('Sign Out')).toBeInTheDocument(); + expect(queryByTestId('page-content')).not.toBeInTheDocument(); + // The blocked tree mounts no shell wiring + expect(mockAppAddListener).not.toHaveBeenCalled(); + expect(mockPushNotifications.register).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/pages/_app.page.tsx b/pages/_app.page.tsx index 03c9d83412..62bf084b88 100644 --- a/pages/_app.page.tsx +++ b/pages/_app.page.tsx @@ -1,7 +1,7 @@ import { NextPage } from 'next'; import type { AppProps } from 'next/app'; import Head from 'next/head'; -import React, { ReactElement, useMemo } from 'react'; +import React, { ReactElement, useEffect, useMemo } from 'react'; import { ApolloProvider } from '@apollo/client'; import createEmotionCache from '@emotion/cache'; import { CacheProvider } from '@emotion/react'; @@ -25,7 +25,13 @@ import { GlobalStyles } from 'src/components/GlobalStyles/GlobalStyles'; import { Helpjuice } from 'src/components/Helpjuice/Helpjuice'; import PrimaryLayout from 'src/components/Layouts/Primary'; import Loading from 'src/components/Loading'; +import { NativeDeepLinkProvider } from 'src/components/NativeShell/NativeDeepLinkProvider'; +import { PushBootstrap } from 'src/components/NativeShell/PushBootstrap/PushBootstrap'; +import { UpgradeRequiredScreen } from 'src/components/NativeShell/UpgradeRequiredScreen'; +import { useShellVersionGate } from 'src/components/NativeShell/useShellVersionGate'; +import { OfflineNotifier } from 'src/components/Offline/OfflineNotifier'; import { RouterGuard } from 'src/components/RouterGuard/RouterGuard'; +import { ServiceWorkerUpdatePrompt } from 'src/components/ServiceWorker/ServiceWorkerUpdatePrompt'; import { SetupProvider } from 'src/components/Setup/SetupProvider'; import { SnackbarUtilsConfigurator } from 'src/components/Snackbar/Snackbar'; import TaskModalProvider from 'src/components/Task/Modal/TaskModalProvider'; @@ -34,6 +40,10 @@ import { useLocale } from 'src/hooks/useLocale'; import { useRequiredSession } from 'src/hooks/useRequiredSession'; import makeClient from 'src/lib/apollo/client'; import i18n from 'src/lib/i18n'; +import { + applyStatusBarStyle, + hideSplashScreen, +} from 'src/lib/nativeShell/nativeChrome'; import theme from 'src/theme'; import './helpjuice.css'; import './print.css'; @@ -58,19 +68,37 @@ const GraphQLProviders: React.FC<{ }> = ({ children = null }) => { const { apiToken } = useRequiredSession(); const client = useMemo(() => makeClient(apiToken), [apiToken]); + // Shell version handshake (capacitor-shell.md §8): a Capacitor shell binary + // older than MIN_SUPPORTED_SHELL_VERSION gets a blocking upgrade screen in + // place of the page tree. Always false in the browser. The screen lives + // inside the ApolloProvider because its sign out affordance (which must + // never be blocked) clears local Apollo data like every other signout path. + const { upgradeRequired } = useShellVersionGate(); return ( - - - {children} - - + {upgradeRequired ? ( + + ) : ( + + + {/* Native shell wiring: both render null and are inert in the + browser (isNativeShell() is false, no plugin code loads). + NativeDeepLinkProvider mounts at the app level so the + cold-start push-tap replay is caught (deep-links.md §4.3); + PushBootstrap needs the Apollo client and the user's locale + (push-registration-frontend.md §3.3). */} + + + {children} + + + )} ); }; -const nonAuthenticatedPages = new Set(['/login', '/404', '/500']); +const nonAuthenticatedPages = new Set(['/login', '/404', '/500', '/offline']); const App = ({ Component, @@ -80,6 +108,17 @@ const App = ({ session?: Session; }>): ReactElement => { const { t } = useTranslation(); + + useEffect(() => { + // Native shell chrome (capacitor-shell.md §9): hide the native splash + // screen at first paint after hydration (launchAutoHide is off so the + // splash covers the remote load, avoiding a white flash) and match the + // status bar to the app chrome. Both helpers are no-ops in the browser; + // failures are best-effort (the shell auto-hides the splash eventually). + hideSplashScreen().catch(() => undefined); + applyStatusBarStyle().catch(() => undefined); + }, []); + const Layout = (Component as PageWithLayout).layout || PrimaryLayout; const { session } = pageProps; const rollbarConfig: Rollbar.Configuration = { @@ -160,20 +199,26 @@ const App = ({ /> + + + @@ -193,6 +238,8 @@ const App = ({ > + + {/* On the login page and error pages, the user isn't not authenticated and doesn't have an API token, so don't include the session or Apollo providers because they require an API token */} {nonAuthenticatedPages.has(router.pathname) ? ( diff --git a/pages/accountLists/[accountListId]/settings/notifications.page.tsx b/pages/accountLists/[accountListId]/settings/notifications.page.tsx index f67c7e9342..c4cf016493 100644 --- a/pages/accountLists/[accountListId]/settings/notifications.page.tsx +++ b/pages/accountLists/[accountListId]/settings/notifications.page.tsx @@ -4,6 +4,7 @@ import { Box, Button } from '@mui/material'; import { useTranslation } from 'react-i18next'; import { ensureSessionAndAccountList } from 'pages/api/utils/pagePropsHelpers'; import { NotificationsTable } from 'src/components/Settings/notifications/NotificationsTable'; +import { PushNotificationsCard } from 'src/components/Settings/notifications/PushNotificationsCard/PushNotificationsCard'; import { SetupBanner } from 'src/components/Settings/preferences/SetupBanner'; import { useSetupContext } from 'src/components/Setup/SetupProvider'; import { StickyBox } from 'src/components/Shared/Header/styledComponents'; @@ -73,6 +74,8 @@ const Notifications: React.FC = () => { )}

+ {/* Gated on isNativeShell() inside the card — renders nothing in browsers */} + ); diff --git a/pages/api/Schema/UserDevices/datahandler.test.ts b/pages/api/Schema/UserDevices/datahandler.test.ts new file mode 100644 index 0000000000..971a08f751 --- /dev/null +++ b/pages/api/Schema/UserDevices/datahandler.test.ts @@ -0,0 +1,53 @@ +import { + DestroyUserDevice, + RegisterUserDevice, + UserDeviceResponse, +} from './datahandler'; + +describe('RegisterUserDevice', () => { + it('maps a JSON:API device resource to a UserDevice', () => { + const data: UserDeviceResponse = { + id: 'device-1', + type: 'user_devices', + attributes: { + platform: 'APNS', + version: '1.2.3', + locale: 'fr-FR', + created_at: '2026-06-10T12:00:00Z', + updated_at: '2026-06-10T12:00:00Z', + }, + }; + + expect(RegisterUserDevice(data)).toEqual({ + id: 'device-1', + platform: 'APNS', + version: '1.2.3', + locale: 'fr-FR', + }); + }); + + it('maps a GCM device resource without timestamps', () => { + const data: UserDeviceResponse = { + id: 'device-2', + type: 'user_devices', + attributes: { + platform: 'GCM', + version: '0.0.0', + locale: 'en', + }, + }; + + expect(RegisterUserDevice(data)).toEqual({ + id: 'device-2', + platform: 'GCM', + version: '0.0.0', + locale: 'en', + }); + }); +}); + +describe('DestroyUserDevice', () => { + it('returns success', () => { + expect(DestroyUserDevice()).toEqual({ success: true }); + }); +}); diff --git a/pages/api/Schema/UserDevices/datahandler.ts b/pages/api/Schema/UserDevices/datahandler.ts new file mode 100644 index 0000000000..e09e3f9ef8 --- /dev/null +++ b/pages/api/Schema/UserDevices/datahandler.ts @@ -0,0 +1,29 @@ +import { + UserDevice, + UserDeviceDeletion, +} from '../../graphql-rest.page.generated'; + +export interface UserDeviceResponse { + id: string; + type: string; + attributes: { + platform: string; + version: string; + locale: string; + // Timestamps are returned by the serializer but intentionally ignored. + // The device token is never returned by the serializer. + created_at?: string; + updated_at?: string; + }; +} + +export const RegisterUserDevice = (data: UserDeviceResponse): UserDevice => ({ + id: data.id, + platform: data.attributes.platform, + version: data.attributes.version, + locale: data.attributes.locale, +}); + +export const DestroyUserDevice = (): UserDeviceDeletion => ({ + success: true, +}); diff --git a/pages/api/Schema/UserDevices/resolvers.ts b/pages/api/Schema/UserDevices/resolvers.ts new file mode 100644 index 0000000000..a66afdfe37 --- /dev/null +++ b/pages/api/Schema/UserDevices/resolvers.ts @@ -0,0 +1,10 @@ +import { Resolvers } from '../../graphql-rest.page.generated'; + +export const UserDevicesResolvers: Resolvers = { + Mutation: { + registerUserDevice: (_source, { input }, { dataSources }) => + dataSources.mpdxRestApi.registerUserDevice(input), + destroyUserDevice: (_source, { input: { id } }, { dataSources }) => + dataSources.mpdxRestApi.destroyUserDevice(id), + }, +}; diff --git a/pages/api/Schema/UserDevices/userDevices.graphql b/pages/api/Schema/UserDevices/userDevices.graphql new file mode 100644 index 0000000000..e47536b065 --- /dev/null +++ b/pages/api/Schema/UserDevices/userDevices.graphql @@ -0,0 +1,31 @@ +extend type Mutation { + registerUserDevice(input: RegisterUserDeviceInput!): UserDevice! + destroyUserDevice(input: DestroyUserDeviceInput!): UserDeviceDeletion! +} + +enum UserDevicePlatformEnum { + APNS + GCM +} + +input RegisterUserDeviceInput { + platform: UserDevicePlatformEnum! + token: String! + version: String! + locale: String! +} + +input DestroyUserDeviceInput { + id: ID! +} + +type UserDevice { + id: ID! + platform: String! + version: String! + locale: String! +} + +type UserDeviceDeletion { + success: Boolean! +} diff --git a/pages/api/Schema/index.ts b/pages/api/Schema/index.ts index 903c1eadd3..4837030f77 100644 --- a/pages/api/Schema/index.ts +++ b/pages/api/Schema/index.ts @@ -28,6 +28,8 @@ import DeleteCommentTypeDefs from './Tasks/Comments/DeleteComments/deleteComment import { DeleteCommentResolvers } from './Tasks/Comments/DeleteComments/resolvers'; import { UpdateCommentResolvers } from './Tasks/Comments/UpdateComments/resolvers'; import UpdateCommentTypeDefs from './Tasks/Comments/UpdateComments/updateComments.graphql'; +import { UserDevicesResolvers } from './UserDevices/resolvers'; +import UserDevicesTypeDefs from './UserDevices/userDevices.graphql'; import DesginationDisplayNamesTypeDefs from './donations/getDesignationDisplayNames.graphql'; import { DesginationDisplayNamesResolvers } from './donations/resolvers'; import AppointmentResultsTypeDefs from './reports/appointmentResults/appointmentResults.graphql'; @@ -127,6 +129,10 @@ const schema = buildSubgraphSchema([ typeDefs: FinancialAccountEntriesTypeDefs, resolvers: financialAccountEntriesResolvers, }, + { + typeDefs: UserDevicesTypeDefs, + resolvers: UserDevicesResolvers, + }, ...integrationSchema, ...organizationSchema, ...preferencesSchema, diff --git a/pages/api/graphql-rest.page.ts b/pages/api/graphql-rest.page.ts index ccf89777cc..070975b748 100644 --- a/pages/api/graphql-rest.page.ts +++ b/pages/api/graphql-rest.page.ts @@ -10,6 +10,7 @@ import { ExportSortEnum, MergeContactsInput, MergePeopleBulkInput, + RegisterUserDeviceInput, } from 'src/graphql/types.generated'; import schema from './Schema'; import { getAccountListAnalytics } from './Schema/AccountListAnalytics/dataHandler'; @@ -81,6 +82,11 @@ import { UpdateComment, UpdateCommentResponse, } from './Schema/Tasks/Comments/UpdateComments/datahandler'; +import { + DestroyUserDevice, + RegisterUserDevice, + UserDeviceResponse, +} from './Schema/UserDevices/datahandler'; import { DonationReponseData, DonationReponseIncluded, @@ -628,6 +634,33 @@ class MpdxRestApi extends RESTDataSource { return UpdateComment(data); } + async registerUserDevice(attributes: RegisterUserDeviceInput) { + const { data }: { data: UserDeviceResponse } = await this.post( + 'user/devices', + { + body: { + data: { + type: 'user_devices', + attributes: { + platform: attributes.platform, + token: attributes.token, + version: attributes.version, + locale: attributes.locale, + }, + }, + }, + }, + ); + return RegisterUserDevice(data); + } + + async destroyUserDevice(id: string) { + await this.delete(`user/devices/${encodeURIComponent(id)}`, { + body: { data: { type: 'user_devices' } }, + }); + return DestroyUserDevice(); + } + async getDesginationDisplayNames( accountListId: string, startDate: string | undefined | null, diff --git a/pages/logout.page.test.tsx b/pages/logout.page.test.tsx new file mode 100644 index 0000000000..15d1db3d15 --- /dev/null +++ b/pages/logout.page.test.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { ThemeProvider } from '@mui/material/styles'; +import { render, waitFor } from '@testing-library/react'; +import { signOut } from 'next-auth/react'; +import TestWrapper from '__tests__/util/TestWrapper'; +import { logoutCleanup } from 'src/lib/auth/logoutCleanup'; +import theme from 'src/theme'; +import LogoutPage from './logout.page'; + +jest.mock('src/lib/auth/logoutCleanup', () => ({ + logoutCleanup: jest.fn().mockResolvedValue(undefined), +})); + +const TestComponent: React.FC = () => ( + + + + + +); + +describe('Logout page', () => { + it('renders the logout message', () => { + const { getByText } = render(); + + expect( + getByText("You're currently being logged out."), + ).toBeInTheDocument(); + }); + + it('runs the full logout cleanup chain to completion before signing out', async () => { + let resolveCleanup!: () => void; + jest.mocked(logoutCleanup).mockImplementationOnce( + () => + new Promise((resolve) => { + resolveCleanup = resolve; + }), + ); + render(); + + await waitFor(() => expect(logoutCleanup).toHaveBeenCalledTimes(1)); + // logoutCleanup (push unregister + CacheStorage + DataDog + + // clearApolloData) must finish — not merely be invoked — before signOut + // navigates away + expect(signOut).not.toHaveBeenCalled(); + + resolveCleanup(); + await waitFor(() => + expect(signOut).toHaveBeenCalledWith({ callbackUrl: 'signOut' }), + ); + }); +}); diff --git a/pages/logout.page.tsx b/pages/logout.page.tsx index 2009fef185..b58b0022da 100644 --- a/pages/logout.page.tsx +++ b/pages/logout.page.tsx @@ -5,7 +5,7 @@ import ExitToAppRoundedIcon from '@mui/icons-material/ExitToAppRounded'; import { Box, Typography } from '@mui/material'; import { signOut } from 'next-auth/react'; import { useTranslation } from 'react-i18next'; -import { clearDataDogUser } from 'src/lib/dataDog'; +import { logoutCleanup } from 'src/lib/auth/logoutCleanup'; import { getAppName } from 'src/lib/getAppName'; import { ensureSessionAndAccountList } from './api/utils/pagePropsHelpers'; import { StatusPageWrapper } from './styledComponents/StatusPageWrapper'; @@ -16,10 +16,10 @@ const LogoutPage = ({}): ReactElement => { const client = useApolloClient(); useEffect(() => { - signOut({ callbackUrl: 'signOut' }).then(() => { - clearDataDogUser(); - client.clearStore(); - }); + (async () => { + await logoutCleanup(client); + await signOut({ callbackUrl: 'signOut' }); + })(); }, []); return ( diff --git a/pages/offline.page.tsx b/pages/offline.page.tsx new file mode 100644 index 0000000000..1126be9a73 --- /dev/null +++ b/pages/offline.page.tsx @@ -0,0 +1,48 @@ +import Head from 'next/head'; +import React, { ReactElement } from 'react'; +import WifiOffIcon from '@mui/icons-material/WifiOff'; +import { Box, Button, Typography } from '@mui/material'; +import { useTranslation } from 'react-i18next'; +import BaseLayout from 'src/components/Layouts/Basic'; +import { getAppName } from 'src/lib/getAppName'; +import { StatusPageWrapper } from './styledComponents/StatusPageWrapper'; + +const Offline = (): ReactElement => { + const appName = getAppName(); + const { t } = useTranslation(); + return ( + <> + + {`${t('Offline')} | ${appName}`} + + + + + + {t('You are offline.')} + + {t( + 'This page is not available offline. Check your internet connection and try again.', + )} + + + + + + + ); +}; + +Offline.layout = BaseLayout; + +export default Offline; diff --git a/pages/offline.test.tsx b/pages/offline.test.tsx new file mode 100644 index 0000000000..cbb4077de0 --- /dev/null +++ b/pages/offline.test.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { ThemeProvider } from '@mui/material/styles'; +import { render } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import theme from 'src/theme'; +import Offline from './offline.page'; + +const TestComponent: React.FC = () => ( + + + +); + +describe('Offline page', () => { + const originalLocation = window.location; + + afterEach(() => { + Object.defineProperty(window, 'location', { + configurable: true, + value: originalLocation, + }); + }); + + it('renders the offline message', () => { + const { getByText } = render(); + + expect(getByText('You are offline.')).toBeInTheDocument(); + expect( + getByText( + 'This page is not available offline. Check your internet connection and try again.', + ), + ).toBeInTheDocument(); + }); + + it('reloads the page when Try Again is clicked', async () => { + const reload = jest.fn(); + Object.defineProperty(window, 'location', { + configurable: true, + value: { ...window.location, reload }, + }); + + const { getByRole } = render(); + + await userEvent.click(getByRole('button', { name: 'Try Again' })); + expect(reload).toHaveBeenCalled(); + }); +}); diff --git a/public/.well-known/apple-app-site-association b/public/.well-known/apple-app-site-association new file mode 100644 index 0000000000..c86a21d246 --- /dev/null +++ b/public/.well-known/apple-app-site-association @@ -0,0 +1,22 @@ +{ + "applinks": { + "details": [ + { + "appIDs": ["DQ48D9BF2V.org.cru.mpdx"], + "components": [ + { + "/": "/accountLists/*", + "comment": "All app screens incl. contacts, tasks, reports. The appID above is the legacy production appID inherited from the old native app and is a PLACEHOLDER until the Apple team ID and bundle ID are confirmed (phase3-4-master-plan.md open question Q5)." + }, + { + "/": "/auth/native-callback", + "comment": "Exact-match OAuth return path (deep-links.md section 2.2, capacitor-shell.md section 4.4). iOS prefers the ASWebAuthenticationSession custom-scheme callback; this is the universal-link fallback. Other /auth/* and /api/* paths are deliberately excluded so iOS never hijacks the browser OAuth flow." + } + ] + } + ] + }, + "webcredentials": { + "apps": ["DQ48D9BF2V.org.cru.mpdx"] + } +} diff --git a/public/.well-known/apple-app-site-association.json b/public/.well-known/apple-app-site-association.json deleted file mode 100644 index c2f58f5a7b..0000000000 --- a/public/.well-known/apple-app-site-association.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "applinks": { - "apps": [], - "details": [ - { - "appID": "DQ48D9BF2V.org.cru.mpdx", - "paths": ["/accountLists/*/contacts/*", "/contacts/*", "/auth/mobile"] - } - ] - } -} diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 159f21132d..73e8e96405 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -175,8 +175,8 @@ "(N/A)": "(N/A)", "(Quarter)": "(Quarter)", "(Sent by {{firstName}} {{lastName}})": "(Sent by {{firstName}} {{lastName}})", - "(Subtotal + Attrition) × {{rate}}": "(Subtotal + Attrition) × {{rate}}", - "(Subtotal + Credit Card Fees + Attrition) × {{rate}}": "(Subtotal + Credit Card Fees + Attrition) × {{rate}}", + "(Subtotal + Attrition + Credit Card Fees) ÷ (1 − {{rate}}%) − (Subtotal + Attrition + Credit Card Fees)": "(Subtotal + Attrition + Credit Card Fees) ÷ (1 − {{rate}}%) − (Subtotal + Attrition + Credit Card Fees)", + "(Subtotal + Attrition) ÷ (1 - {{rate}}) - (Subtotal + Attrition)": "(Subtotal + Attrition) ÷ (1 - {{rate}}) - (Subtotal + Attrition)", "(Year)": "(Year)", "{{ combinedCap }} (with neither exceeding {{ singleCap }})": "{{ combinedCap }} (with neither exceeding {{ singleCap }})", "{{ name }} & {{ spouseName }} Combined": "{{ name }} & {{ spouseName }} Combined", @@ -206,6 +206,8 @@ "{{appName}} couldn't save your configuration changes for that organization": "{{appName}} couldn't save your configuration changes for that organization", "{{appName}} couldn't send an invite (check to see if email address is valid)": "{{appName}} couldn't send an invite (check to see if email address is valid)", "{{appName}} couldn't sync your organization account": "{{appName}} couldn't sync your organization account", + "{{appName}} does not have permission to access your photos. Enable photo access for {{appName}} in your device settings and try again.": "{{appName}} does not have permission to access your photos. Enable photo access for {{appName}} in your device settings and try again.", + "{{appName}} does not have permission to use the camera. Enable camera access for {{appName}} in your device settings and try again.": "{{appName}} does not have permission to use the camera. Enable camera access for {{appName}} in your device settings and try again.", "{{appName}} has assigned partnership statuses and giving frequencies based on your partner’s giving history. {{appName}} has made its best attempt at matching the appropriate statuses for you. However, you will need to confirm them to be sure {{appName}}’s matching was accurate.": "{{appName}} has assigned partnership statuses and giving frequencies based on your partner’s giving history. {{appName}} has made its best attempt at matching the appropriate statuses for you. However, you will need to confirm them to be sure {{appName}}’s matching was accurate.", "{{appName}} is now syncing your newsletter recipients with Prayer Letters": "{{appName}} is now syncing your newsletter recipients with Prayer Letters", "{{appName}} merged your account successfully": "{{appName}} merged your account successfully", @@ -241,12 +243,14 @@ "{{fieldName}} must not exceed 100%": "{{fieldName}} must not exceed 100%", "{{filters}} active filter": "{{filters}} active filter", "{{filters}} active filters": "{{filters}} active filters", + "{{from}} to {{to}}": "{{from}} to {{to}}", "{{from}}-{{to}} of {{total}}": "{{from}}-{{to}} of {{total}}", "{{fundType}}": "{{fundType}}", + "{{label}} reduced to its maximum of {{max}}.": "{{label}} reduced to its maximum of {{max}}.", "{{max}} Maximum per year, per child": "{{max}} Maximum per year, per child", "{{max}} Maximum, per adoption, not per year": "{{max}} Maximum, per adoption, not per year", "{{message}}": "{{message}}", - "{{mode}} Minister's Housing Allowance Request": "{{mode}} Minister's Housing Allowance Request", + "{{mode}} Minister's Housing Allowance Calculation Tool": "{{mode}} Minister's Housing Allowance Calculation Tool", "{{months}} months ago": "{{months}} months ago", "{{name}} has one or multiple invalid numbers. Please fix.": "{{name}} has one or multiple invalid numbers. Please fix.", "{{name}} may request up to their Board Approved {{sectionKind}} Amount of {{approvedAmount}}.": "{{name}} may request up to their Board Approved {{sectionKind}} Amount of {{approvedAmount}}.", @@ -274,7 +278,7 @@ "<0>Our records indicate that you have an approved MHA amount. To view your MHA amount, click on the \"View Current MHA\" button below. If you would like to apply for a new MHA, click \"Update Current MHA\".": "<0>Our records indicate that you have an approved MHA amount. To view your MHA amount, click on the \"View Current MHA\" button below. If you would like to apply for a new MHA, click \"Update Current MHA\".", "<0>Our records indicate that you have not applied for Minister's Housing Allowance. If you would like information about applying for one, contact Personnel Records at <2>(407) 826-2230 or <5>MHA@cru.org.": "<0>Our records indicate that you have not applied for Minister's Housing Allowance. If you would like information about applying for one, contact Personnel Records at <2>(407) 826-2230 or <5>MHA@cru.org.", "<0>The next time the board will approve MHA Requests is {after} and your approved annual MHA amount will appear on your <4>Salary Calculation Form{approval} Once approved by the board, keep a copy for your tax records.<1><0> <2>What expenses can I claim on my MHA?": "<0>The next time the board will approve MHA Requests is {after} and your approved annual MHA amount will appear on your <4>Salary Calculation Form{approval} Once approved by the board, keep a copy for your tax records.<1><0> <2>What expenses can I claim on my MHA?", - "<0>You can now change the reminder status of any of your ministry partners online! Your current list and related information is displayed below. To change the reminder status of any of your ministry partners, use the drop-down boxes in the \"Reminder Status\" column.<1>When you're done, click the \"Save\" button at the bottom of the page. Wondering how the <2>Reminder System works and how it differs from the Receipting System? Check out <5>Ministry Partner Reminder help.": "<0>You can now change the reminder status of any of your ministry partners online! Your current list and related information is displayed below. To change the reminder status of any of your ministry partners, use the drop-down boxes in the \"Reminder Status\" column.<1>When you're done, click the \"Save\" button at the bottom of the page. Wondering how the <2>Reminder System works and how it differs from the Receipting System? Check out <5>Ministry Partner Reminder help.", + "<0>You can now change the reminder status of any of your ministry partners online! Your current list and related information is displayed below. To change the reminder status of any of your ministry partners, use the drop-down boxes in the \"Reminder Status\" column.<1>When you're done, a \"Save\" button will appear at the top of the page. Click it to save your changes. Wondering how the <1>Reminder System works and how it differs from the Receipting System? Check out <4>Ministry Partner Reminder help.": "<0>You can now change the reminder status of any of your ministry partners online! Your current list and related information is displayed below. To change the reminder status of any of your ministry partners, use the drop-down boxes in the \"Reminder Status\" column.<1>When you're done, a \"Save\" button will appear at the top of the page. Click it to save your changes. Wondering how the <1>Reminder System works and how it differs from the Receipting System? Check out <4>Ministry Partner Reminder help.", "<0>You can use this form to electronically submit additional salary requests. Please note:<1><0><0>You must have <2>adequate funds in your account to cover this request.<1><0>Your request will be reviewed and if approved, your request for this year <2>will not exceed your Remaining Allowable Salary.": "<0>You can use this form to electronically submit additional salary requests. Please note:<1><0><0>You must have <2>adequate funds in your account to cover this request.<1><0>Your request will be reviewed and if approved, your request for this year <2>will not exceed your Remaining Allowable Salary.", "Send newsletter?": "Send newsletter?", "Source: {{where}}": "Source: {{where}}", @@ -320,16 +324,19 @@ "403(b) Retirement Contribution": "403(b) Retirement Contribution", "403b Contribution": "403b Contribution", "403b Contribution Percentage": "403b Contribution Percentage", + "403b Contributions": "403b Contributions", "403b Contributions if Applicable": "403b Contributions if Applicable", "5. Receipt": "5. Receipt", "60+ days late": "60+ days late", "A blue question icon indicates that the user may be active in the donation system and this account may be automatically recreated. Consider first updating the donation system.": "A blue question icon indicates that the user may be active in the donation system and this account may be automatically recreated. Consider first updating the donation system.", "A blue question icon indicates that the user may be active in the donation system and this user and account may be automatically recreated. Consider first updating the donation system.": "A blue question icon indicates that the user may be active in the donation system and this user and account may be automatically recreated. Consider first updating the donation system.", + "A breakdown of the items that make up your support goal, calculated from the information you entered in Setup and Reimbursable Expenses.": "A breakdown of the items that make up your support goal, calculated from the information you entered in Setup and Reimbursable Expenses.", "A CSV is a comma-separated spreadsheet format that can be created by many programs such as Excel, Google Sheets, Google Contacts or Numbers.": "A CSV is a comma-separated spreadsheet format that can be created by many programs such as Excel, Google Sheets, Google Contacts or Numbers.", "A Few Quick Notes About Monthly Transfers:": "A Few Quick Notes About Monthly Transfers:", "A filter with that name already exists. Do you wish to replace it?": "A filter with that name already exists. Do you wish to replace it?", "A list is required": "A list is required", "A Minister's Housing Allowance Request is a form ministers complete to designate part of their compensation as tax-free housing allowance. To complete this form for the {{nextYear}} tax year, you'll need:": "A Minister's Housing Allowance Request is a form ministers complete to designate part of their compensation as tax-free housing allowance. To complete this form for the {{nextYear}} tax year, you'll need:", + "A new version of the app is available. Updating will reload the page.": "A new version of the app is available. Updating will reload the page.", "A review of your income": "A review of your income", "A server-side error has occurred.": "A server-side error has occurred.", "About this Form": "About this Form", @@ -355,6 +362,7 @@ "Account Number:": "Account Number:", "Account Preferences": "Account Preferences", "Account to Import From": "Account to Import From", + "Account Transfer": "Account Transfer", "Account Transfers": "Account Transfers", "Account transfers to staff members, ministries, projects, etc.": "Account transfers to staff members, ministries, projects, etc.", "Accounts": "Accounts", @@ -389,6 +397,7 @@ "Add Donation": "Add Donation", "Add Email": "Add Email", "Add Email Address": "Add Email Address", + "Add End Date": "Add End Date", "Add Entry": "Add Entry", "Add Excluded Contacts To Appeal": "Add Excluded Contacts To Appeal", "Add fields to rows, columns, and values to create a pivot table": "Add fields to rows, columns, and values to create a pivot table", @@ -408,7 +417,6 @@ "Add Phone Number": "Add Phone Number", "Add Social": "Add Social", "Add star": "Add star", - "Add Stop Date": "Add Stop Date", "add tag": "add tag", "Add Tag(s)": "Add Tag(s)", "Add Tags": "Add Tags", @@ -438,6 +446,7 @@ "Additional Salary Request cancelled successfully.": "Additional Salary Request cancelled successfully.", "Additional Salary Request discarded successfully.": "Additional Salary Request discarded successfully.", "Additional Salary Request Sections": "Additional Salary Request Sections", + "Additional support items beyond your base salary, including benefits, contributions, fees, and reimbursable expenses.": "Additional support items beyond your base salary, including benefits, contributions, fees, and reimbursable expenses.", "Additional Tags": "Additional Tags", "Address": "Address", "Address added successfully": "Address added successfully", @@ -478,7 +487,6 @@ "Amount": "Amount", "Amount ({{ currencyCode }})": "Amount ({{ currencyCode }})", "Amount ({{amount}})": "Amount ({{amount}})", - "Amount cannot exceed {{max}}": "Amount cannot exceed {{max}}", "Amount Committed": "Amount Committed", "Amount is required": "Amount is required", "Amount must be a valid number": "Amount must be a valid number", @@ -501,6 +509,7 @@ "Annual Compensation Rate": "Annual Compensation Rate", "Annual Cost of Providing a Home": "Annual Cost of Providing a Home", "Annual Fair Rental Value of your Home": "Annual Fair Rental Value of your Home", + "Annual Pay Rate": "Annual Pay Rate", "Annual Reimbursable Expenses": "Annual Reimbursable Expenses", "Annually": "Annually", "Anonymize": "Anonymize", @@ -540,7 +549,7 @@ "Are you sure you want to anonymize {{name}} in {{accountList}}?": "Are you sure you want to anonymize {{name}} in {{accountList}}?", "Are you sure you want to change selection?": "Are you sure you want to change selection?", "Are you sure you want to completely delete this tag ({{tagName}}) and remove it from all tasks?": "Are you sure you want to completely delete this tag ({{tagName}}) and remove it from all tasks?", - "Are you sure you want to delete <2>{goal.name ?? t('Unnamed Goal')}? Deleting this goal will remove it permanently.": "Are you sure you want to delete <2>{goal.name ?? t('Unnamed Goal')}? Deleting this goal will remove it permanently.", + "Are you sure you want to delete {{goalName}}? Deleting this goal will remove it permanently.": "Are you sure you want to delete {{goalName}}? Deleting this goal will remove it permanently.", "Are you sure you want to import all contacts? This may import many contacts that you do not wish to have in {{appName}}. Many users find it more helpful to use the \"Only import contacts from certain groups\" option.": "Are you sure you want to import all contacts? This may import many contacts that you do not wish to have in {{appName}}. Many users find it more helpful to use the \"Only import contacts from certain groups\" option.", "Are you sure you want to merge the selected contacts?": "Are you sure you want to merge the selected contacts?", "Are you sure you want to merge the selected people?": "Are you sure you want to merge the selected people?", @@ -624,6 +633,7 @@ "Be cautious when deleting this contact, as its data may sync with Donation Services or other third-party systems. Deleting the contact will not remove it from those systems; consider hiding the contact instead.": "Be cautious when deleting this contact, as its data may sync with Donation Services or other third-party systems. Deleting the contact will not remove it from those systems; consider hiding the contact instead.", "Because of IRS and Cru requirements, the lowest salary you can request is {{minimumSalary}} ({{formula}}) for {{name}} and {{spouseMinimumSalary}} ({{spouseFormula}}) for {{spouseName}}.": "Because of IRS and Cru requirements, the lowest salary you can request is {{minimumSalary}} ({{formula}}) for {{name}} and {{spouseMinimumSalary}} ({{spouseFormula}}) for {{spouseName}}.", "Because of IRS and Cru requirements, the lowest salary you can request is {{minimumSalary}} ({{formula}}).": "Because of IRS and Cru requirements, the lowest salary you can request is {{minimumSalary}} ({{formula}}).", + "Because you or your spouse has a pending Additional Salary Request, this request requires additional approval. This will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.": "Because you or your spouse has a pending Additional Salary Request, this request requires additional approval. This will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.", "Because your request exceeds your maximum allowable salary it will require additional approvals. For the {{requestedAmount}} you are requesting, this will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date. We will review your request through our Progressive Approvals process and notify you of any changes to the status of this request.": "Because your request exceeds your maximum allowable salary it will require additional approvals. For the {{requestedAmount}} you are requesting, this will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date. We will review your request through our Progressive Approvals process and notify you of any changes to the status of this request.", "Because your request exceeds your remaining allowable salary it requires additional review. We will review your request through <2>Progressive Approvals process.<5>": "Because your request exceeds your remaining allowable salary it requires additional review. We will review your request through <2>Progressive Approvals process.<5>", "Before SECA and 403(b)": "Before SECA and 403(b)", @@ -635,7 +645,6 @@ "Benefits": "Benefits", "Benefits charges including health insurance and other staff benefits.": "Benefits charges including health insurance and other staff benefits.", "Benefits for Full-time": "Benefits for Full-time", - "Benefits is a required field": "Benefits is a required field", "Benefits must be a positive number": "Benefits must be a positive number", "Benefits Other": "Benefits Other", "Benefits Plan": "Benefits Plan", @@ -670,6 +679,7 @@ "By synchronizing your Google services with {{appName}}, you will be able\n to:": "By synchronizing your Google services with {{appName}}, you will be able\n to:", "Calculate New Salary": "Calculate New Salary", "Calculate Your MHA Request": "Calculate Your MHA Request", + "Calculating progress": "Calculating progress", "Calculation showing subtotal including net salary, taxes, and SECA contributions.": "Calculation showing subtotal including net salary, taxes, and SECA contributions.", "Calculator Settings": "Calculator Settings", "Calculator Setup": "Calculator Setup", @@ -686,9 +696,12 @@ "Cancel Request": "Cancel Request", "Cancel Transfer": "Cancel Transfer", "Cannot add duplicate tags, duplicate tag has been removed": "Cannot add duplicate tags, duplicate tag has been removed", + "Cannot change the photo while offline.": "Cannot change the photo while offline.", + "Cannot save changes while offline.": "Cannot save changes while offline.", "Cannot upload avatar: file must be an image": "Cannot upload avatar: file must be an image", "Cannot upload avatar: file size cannot exceed 1MB": "Cannot upload avatar: file size cannot exceed 1MB", "Cannot upload avatar: server error": "Cannot upload avatar: server error", + "Cannot upload avatar: unable to compress the image below 1MB": "Cannot upload avatar: unable to compress the image below 1MB", "Cannot upload avatar: Unfortunately we do not support AVIF files.": "Cannot upload avatar: Unfortunately we do not support AVIF files.", "Cannot upload file: file must be a xml file": "Cannot upload file: file must be a xml file", "Cannot upload file: file must be an .tntmpd or .tntdatasync file.": "Cannot upload file: file must be an .tntmpd or .tntdatasync file.", @@ -704,8 +717,10 @@ "Chalk Line": "Chalk Line", "Chalkline is a significant way to save valuable ministry time while more effectively\n connecting with your partners. Send physical newsletters to your current list using\n Chalkline with a simple click. Chalkline is a one way send available anytime you’re\n ready to send a new newsletter out.": "Chalkline is a significant way to save valuable ministry time while more effectively\n connecting with your partners. Send physical newsletters to your current list using\n Chalkline with a simple click. Chalkline is a one way send available anytime you’re\n ready to send a new newsletter out.", "Chalkline Overview": "Chalkline Overview", + "Change photo": "Change photo", "Change the contact's status to: {{status}}": "Change the contact's status to: {{status}}", "Changes saved": "Changes saved", + "Changing this clears Pay Rate.": "Changing this clears Pay Rate.", "Check All": "Check All", "Check if you prefer to split your Combined Maximum Allowable Salary between you and {{ spouseName }} here before requesting your new salary.": "Check if you prefer to split your Combined Maximum Allowable Salary between you and {{ spouseName }} here before requesting your new salary.", "Checkbox selection": "Checkbox selection", @@ -723,6 +738,7 @@ "Choose below which email address will be set as primary.": "Choose below which email address will be set as primary.", "Choose below which mailing address will be set as primary. Primary mailing addresses will be used for Newsletter exports.": "Choose below which mailing address will be set as primary. Primary mailing addresses will be used for Newsletter exports.", "Choose below which phone number will be set as primary.": "Choose below which phone number will be set as primary.", + "Choose from Library": "Choose from Library", "Christmas Island": "Christmas Island", "Church": "Church", "City": "City", @@ -783,6 +799,8 @@ "Compensation": "Compensation", "complete": "complete", "Complete": "Complete", + "Complete all fields to continue": "Complete all fields to continue", + "Complete all required fields to submit": "Complete all required fields to submit", "Complete Task": "Complete Task", "Complete Tasks": "Complete Tasks", "Complete the Form": "Complete the Form", @@ -792,7 +810,6 @@ "Completed the required IBS courses": "Completed the required IBS courses", "Completed Time": "Completed Time", "Conference / Retreat Costs": "Conference / Retreat Costs", - "Conference Savings Account": "Conference Savings Account", "Confirm": "Confirm", "Confirm {{amount}} as {{source}}": "Confirm {{amount}} as {{source}}", "Confirm All ({{value}})": "Confirm All ({{value}})", @@ -862,12 +879,14 @@ "Copy All": "Copy All", "Cost of Providing a Home": "Cost of Providing a Home", "Costa Rica": "Costa Rica", + "Could not load required defaults. Please try again or pick Simple.": "Could not load required defaults. Please try again or pick Simple.", "Couldn't remove the admin": "Couldn't remove the admin", "Couldn't remove the invite": "Couldn't remove the invite", "Counseling": "Counseling", "Counseling that is not for the treatment of a medical condition": "Counseling that is not for the treatment of a medical condition", "Country": "Country", "Couples": "Couples", + "Create": "Create", "Create a new contact for \"{{ name }}\"": "Create a new contact for \"{{ name }}\"", "Create a New Goal": "Create a New Goal", "Create Appeal": "Create Appeal", @@ -893,8 +912,8 @@ "Current MHA (Included in Current Gross Salary)": "Current MHA (Included in Current Gross Salary)", "Current MHA Request": "Current MHA Request", "Current Reality": "Current Reality", + "Current Requested Salary": "Current Requested Salary", "Current Roth 403(b) Contribution Percent": "Current Roth 403(b) Contribution Percent", - "Current Salary": "Current Salary", "Current Salary Information": "Current Salary Information", "Current Tax-Deferred Contribution Percent": "Current Tax-Deferred Contribution Percent", "Current year's ({{year}}) salary not received due to inadequate support": "Current year's ({{year}}) salary not received due to inadequate support", @@ -921,8 +940,10 @@ "Deduction 403b Roth": "Deduction 403b Roth", "Deduction Medical": "Deduction Medical", "Deductions": "Deductions", + "Default": "Default", "Default Account": "Default Account", "Default Currency": "Default Currency", + "Default includes reimbursable expenses and 403b contributions in the goal total.": "Default includes reimbursable expenses and 403b contributions in the goal total.", "Default Primary Source:": "Default Primary Source:", "delete": "delete", "Delete": "Delete", @@ -946,6 +967,7 @@ "Deleting these tasks is permanent and cannot be undone. Please make sure you want to permanently delete them before proceeding.": "Deleting these tasks is permanent and cannot be undone. Please make sure you want to permanently delete them before proceeding.", "Deletion process enqueued: {{fullName}}. Check back later to see the updated data.": "Deletion process enqueued: {{fullName}}. Check back later to see the updated data.", "Deletion process enqueued: {{name}}": "Deletion process enqueued: {{name}}", + "Delivered as push notifications in the {{appName}} mobile app": "Delivered as push notifications in the {{appName}} mobile app", "Denmark": "Denmark", "Density": "Density", "Deposit": "Deposit", @@ -972,6 +994,7 @@ "Disability Earnings": "Disability Earnings", "Disability Insurance": "Disability Insurance", "Disable Calendar Integration": "Disable Calendar Integration", + "Disable on this device": "Disable on this device", "Disabled Google Calendar Integration!": "Disabled Google Calendar Integration!", "Discard": "Discard", "Discard & Start Over": "Discard & Start Over", @@ -1028,7 +1051,7 @@ "Early Adopter": "Early Adopter", "Earnings MHA": "Earnings MHA", "Earnings Numeric": "Earnings Numeric", - "Earnings REB": "Earnings REB", + "Earnings REG": "Earnings REG", "Ecuador": "Ecuador", "Edit": "Edit", "Edit Address": "Edit Address", @@ -1037,6 +1060,7 @@ "Edit Contact Other Details": "Edit Contact Other Details", "EDIT DATE": "EDIT DATE", "Edit Donation": "Edit Donation", + "Edit End Date": "Edit End Date", "Edit Fields": "Edit Fields", "Edit Fund Transfer": "Edit Fund Transfer", "Edit Google Integration": "Edit Google Integration", @@ -1048,7 +1072,6 @@ "Edit Partnership Info": "Edit Partnership Info", "Edit Person": "Edit Person", "Edit Request": "Edit Request", - "Edit Stop Date": "Edit Stop Date", "Edit task": "Edit task", "Edit Task": "Edit Task", "Edit Tasks": "Edit Tasks", @@ -1080,23 +1103,27 @@ "Employment Status is a required field": "Employment Status is a required field", "Enable Calendar Integration": "Enable Calendar Integration", "Enable pivot": "Enable pivot", + "Enable Push Notifications": "Enable Push Notifications", "Enabled Google Calendar Integration!": "Enabled Google Calendar Integration!", "End Date": "End Date", "End Date (Optional)": "End Date (Optional)", - "End date must be after transfer date": "End date must be after transfer date", + "End date added successfully": "End date added successfully", + "End date must be at least one day after the transfer date": "End date must be at least one day after the transfer date", "End date must be later than or equal to start date": "End date must be later than or equal to start date", + "End date updated successfully": "End date updated successfully", "End Date:": "End Date:", "End of Year Ask": "End of Year Ask", "Ending Balance: {{balance}}": "Ending Balance: {{balance}}", "ends with": "ends with", "Ends with": "Ends with", "Engaged": "Engaged", - "Enter amounts for the following categories of reimbursable and ministry expenses. The <2>MPGA tool on StaffWeb can show you your averages in some of these categories. If you did not take full reimbursements for the entire year, or if your reimbursements were abnormally high (e.g. you had a surgery or bought a new computer), or low (e.g. no summer mission), you will want to adjust the averages from the MPGA to reflect an average year. Click the link above, go to the Income/Expenses tab, and look under the Ministry Expenses section.": "Enter amounts for the following categories of reimbursable and ministry expenses. The <2>MPGA tool on StaffWeb can show you your averages in some of these categories. If you did not take full reimbursements for the entire year, or if your reimbursements were abnormally high (e.g. you had a surgery or bought a new computer), or low (e.g. no summer mission), you will want to adjust the averages from the MPGA to reflect an average year. Click the link above, go to the Income/Expenses tab, and look under the Ministry Expenses section.", + "Enter amounts for the following categories of reimbursable and ministry expenses. The <2>Ministry Partner Giving Analysis tool can show you your averages in some of these categories. If you did not take full reimbursements for the entire year, or if your reimbursements were abnormally high (e.g. you had a surgery or bought a new computer), or low (e.g. no summer mission), you will want to adjust the averages from the MPGA to reflect an average year. Click the link above and look at the Ministry rows in the Expenses table.": "Enter amounts for the following categories of reimbursable and ministry expenses. The <2>Ministry Partner Giving Analysis tool can show you your averages in some of these categories. If you did not take full reimbursements for the entire year, or if your reimbursements were abnormally high (e.g. you had a surgery or bought a new computer), or low (e.g. no summer mission), you will want to adjust the averages from the MPGA to reflect an average year. Click the link above and look at the Ministry rows in the Expenses table.", "Enter email address": "Enter email address", "Enter hourly rate": "Enter hourly rate", "Enter monthly benefits charge": "Enter monthly benefits charge", "Enter telephone number": "Enter telephone number", "Enter the greater of this amount or zero.": "Enter the greater of this amount or zero.", + "Enter the ministry expenses you are reimbursed for each year. Monthly entries are used as-is and annual entries are divided by 12; the combined total is included in your support goal.": "Enter the ministry expenses you are reimbursed for each year. Monthly entries are used as-is and annual entries are divided by 12; the combined total is included in your support goal.", "Enter yearly salary": "Enter yearly salary", "Enter your monthly budget": "Enter your monthly budget", "Entered in the previous section.": "Entered in the previous section.", @@ -1109,7 +1136,6 @@ "Eritrea": "Eritrea", "Error deleting email address {{email}}": "Error deleting email address {{email}}", "Error deleting phone number {{phoneNumber}}": "Error deleting phone number {{phoneNumber}}", - "Error saving changes": "Error saving changes", "Error updating {{name}}'s commitment info": "Error updating {{name}}'s commitment info", "Error updating contact {{name}}": "Error updating contact {{name}}", "Error updating contacts": "Error updating contacts", @@ -1174,19 +1200,20 @@ "Failed to add contact(s) to the appeal": "Failed to add contact(s) to the appeal", "Failed to add contacts to appeal": "Failed to add contacts to appeal", "Failed to add email address": "Failed to add email address", + "Failed to add end date": "Failed to add end date", "Failed to add entry. Please try again.": "Failed to add entry. Please try again.", "Failed to add phone number": "Failed to add phone number", - "Failed to add stop date": "Failed to add stop date", "Failed to confirm user group.": "Failed to confirm user group.", "Failed to create transfer": "Failed to create transfer", "Failed to delete entry. Please try again.": "Failed to delete entry. Please try again.", + "Failed to get the photo. Please try again.": "Failed to get the photo. Please try again.", "Failed to load categories. Please try again.": "Failed to load categories. Please try again.", "Failed to request user group change.": "Failed to request user group change.", "Failed to save changes. Please try again.": "Failed to save changes. Please try again.", "Failed to save hours entry. Please try again.": "Failed to save hours entry. Please try again.", "Failed to update {{count}} duplicate(s)_one": "Failed to update {{count}} duplicate(s)", "Failed to update {{count}} duplicate(s)_other": "Failed to update {{count}} duplicate(s)", - "Failed to update stop date": "Failed to update stop date", + "Failed to update end date": "Failed to update end date", "Failed to update the appeal": "Failed to update the appeal", "Failed to update transfer": "Failed to update transfer", "Failed Transfers": "Failed Transfers", @@ -1214,7 +1241,7 @@ "Filter where {{column}} {{operator}} {{value}}": "Filter where {{column}} {{operator}} {{value}}", "Filter where {{column}} is any of: {{value}}": "Filter where {{column}} is any of: {{value}}", "Filters": "Filters", - "Final total goal including attrition rate applied to line 6.": "Final total goal including attrition rate applied to line 6.", + "Final total goal including attrition rate applied to line 5.": "Final total goal including attrition rate applied to line 5.", "Financial Information": "Financial Information", "Financial Partners": "Financial Partners", "Financial, Special, and Prayer partners that have an empty Newsletter Status appear here. Choose a newsletter status for the contacts below.": "Financial, Special, and Prayer partners that have an empty Newsletter Status appear here. Choose a newsletter status for the contacts below.", @@ -1246,7 +1273,9 @@ "For Presenting Your Goal report": "For Presenting Your Goal report", "For the {{amount}} you are requesting, this will take {{approvalTimeframe}} as it needs to be signed off by {{approver}}.": "For the {{amount}} you are requesting, this will take {{approvalTimeframe}} as it needs to be signed off by {{approver}}.", "Foreign Amount": "Foreign Amount", + "Form Progress": "Form Progress", "Form Steps": "Form Steps", + "Form Type": "Form Type", "Form Unavailable": "Form Unavailable", "Fourteen month report table": "Fourteen month report table", "France": "France", @@ -1257,6 +1286,7 @@ "From": "From", "From Account": "From Account", "From account is required": "From account is required", + "Full calculator with reimbursable expenses and 403b contributions.": "Full calculator with reimbursable expenses and 403b contributions.", "Full Names": "Full Names", "Full-time": "Full-time", "Fund Transfer": "Fund Transfer", @@ -1279,6 +1309,7 @@ "Geographic Multiplier": "Geographic Multiplier", "Georgia": "Georgia", "Germany": "Germany", + "Get notified on this device when important partner events happen, based on the notification types you choose below.": "Get notified on this device when important partner events happen, based on the notification types you choose below.", "Get Started": "Get Started", "Get started by reviewing your excluded contacts list.": "Get started by reviewing your excluded contacts list.", "Get the Latest Version": "Get the Latest Version", @@ -1333,6 +1364,7 @@ "Gross Monthly Pay × {{rate}}": "Gross Monthly Pay × {{rate}}", "Gross Monthly Pay from Salary section × 403b Contribution Percentage from Setup section": "Gross Monthly Pay from Salary section × 403b Contribution Percentage from Setup section", "Gross Monthly Pay Subtotal + Reimbursable Expenses + 403b Contributions + Work Comp + Benefits": "Gross Monthly Pay Subtotal + Reimbursable Expenses + 403b Contributions + Work Comp + Benefits", + "Gross Monthly Pay Subtotal + Work Comp + Benefits": "Gross Monthly Pay Subtotal + Work Comp + Benefits", "Gross Monthly Salary": "Gross Monthly Salary", "Gross Requested Salary": "Gross Requested Salary", "Gross Salary": "Gross Salary", @@ -1358,7 +1390,6 @@ "Healthcare expenses that exceed the annual reimbursable limit": "Healthcare expenses that exceed the annual reimbursable limit", "Healthcare Reimbursement": "Healthcare Reimbursement", "Heard Island and Mcdonald Islands": "Heard Island and Mcdonald Islands", - "Help logo": "Help logo", "Hide": "Hide", "Hide announcement": "Hide announcement", "hide children": "hide children", @@ -1374,6 +1405,7 @@ "Hong Kong": "Hong Kong", "Hour To Send Notifications": "Hour To Send Notifications", "Hourly": "Hourly", + "Hourly Pay Rate": "Hourly Pay Rate", "Hours": "Hours", "Hours per Week": "Hours per Week", "Hours Per Week Calculator": "Hours Per Week Calculator", @@ -1389,7 +1421,7 @@ "HR Tools - {{ title }}": "HR Tools - {{ title }}", "HR Tools - Paid with Designation Support Goal Calculator": "HR Tools - Paid with Designation Support Goal Calculator", "HR Tools | Additional Salary Request": "HR Tools | Additional Salary Request", - "HR Tools | MHA Calculation Form": "HR Tools | MHA Calculation Form", + "HR Tools | MHA Calculation Tool": "HR Tools | MHA Calculation Tool", "HR Tools | Ministry Partner Reminders": "HR Tools | Ministry Partner Reminders", "HR Tools | MPD Goal Calculator": "HR Tools | MPD Goal Calculator", "HR Tools | Paid with Designation Support Goal Calculator": "HR Tools | Paid with Designation Support Goal Calculator", @@ -1466,6 +1498,7 @@ "Income Report": "Income Report", "Income:": "Income:", "Income/Expense Analysis": "Income/Expense Analysis", + "Incomplete": "Incomplete", "Increased Recently": "Increased Recently", "India": "India", "Individuals": "Individuals", @@ -1567,9 +1600,11 @@ "Last updated ": "Last updated ", "Last updated:": "Last updated:", "Late Commitments": "Late Commitments", + "Later": "Later", "Latest": "Latest", "Latvia": "Latvia", "Learn About Goalsetting": "Learn About Goalsetting", + "Learn About Goalsetting (opens in a new tab)": "Learn About Goalsetting (opens in a new tab)", "Least Likely": "Least Likely", "Leave empty to use full donation amount": "Leave empty to use full donation amount", "Leave Insurance": "Leave Insurance", @@ -1715,7 +1750,7 @@ "MHA Amount Per Paycheck": "MHA Amount Per Paycheck", "MHA Approved by Board": "MHA Approved by Board", "MHA Available on": "MHA Available on", - "MHA Calculation Form": "MHA Calculation Form", + "MHA Calculation Tool": "MHA Calculation Tool", "MHA Claimed in Salary": "MHA Claimed in Salary", "MHA Edit Request": "MHA Edit Request", "MHA Eligibility": "MHA Eligibility", @@ -1737,14 +1772,17 @@ "Minimum Required Salary": "Minimum Required Salary", "Minimum Salary": "Minimum Salary", "Minister's Housing Allowance": "Minister's Housing Allowance", - "Minister's Housing Allowance Request": "Minister's Housing Allowance Request", + "Minister's Housing Allowance Calculation Tool": "Minister's Housing Allowance Calculation Tool", "Minister's Housing Allowance Status": "Minister's Housing Allowance Status", "Ministry": "Ministry", "Ministry Benefits": "Ministry Benefits", "Ministry Cell Phone": "Ministry Cell Phone", + "Ministry Cell Phone (max {{max}}/mo)": "Ministry Cell Phone (max {{max}}/mo)", + "Ministry Cell Phone and Ministry Internet reimbursements are capped at the per-month maximums shown next to each field name. Amounts entered above the maximum will be saved as the maximum.": "Ministry Cell Phone and Ministry Internet reimbursements are capped at the per-month maximums shown next to each field name. Amounts entered above the maximum will be saved as the maximum.", "Ministry Expenses": "Ministry Expenses", "Ministry Expenses Subtotal": "Ministry Expenses Subtotal", "Ministry Internet": "Ministry Internet", + "Ministry Internet (max {{max}}/mo)": "Ministry Internet (max {{max}}/mo)", "Ministry Miles": "Ministry Miles", "Ministry Partner": "Ministry Partner", "Ministry Partner Giving Analysis": "Ministry Partner Giving Analysis", @@ -1760,6 +1798,7 @@ "Missing In Hand Monthly Equivalent": "Missing In Hand Monthly Equivalent", "Mission Agency": "Mission Agency", "Mobile": "Mobile", + "Mobile App": "Mobile App", "Modal Section Delete Icon": "Modal Section Delete Icon", "Modify Settings": "Modify Settings", "Moldova, Republic of": "Moldova, Republic of", @@ -1770,7 +1809,7 @@ "Monthly": "Monthly", "Monthly Average": "Monthly Average", "Monthly Base": "Monthly Base", - "Monthly Base × (1 + Geographic Multiplier)": "Monthly Base × (1 + Geographic Multiplier)", + "Monthly Base × Geographic Multiplier ({{rate}})": "Monthly Base × Geographic Multiplier ({{rate}})", "Monthly Budget": "Monthly Budget", "Monthly Commitment Average: ": "Monthly Commitment Average: ", "Monthly Commitment Goal: ": "Monthly Commitment Goal: ", @@ -1814,7 +1853,6 @@ "MPDX Tools": "MPDX Tools", "MPDX Tools - {{ title }}": "MPDX Tools - {{ title }}", "Must be a number": "Must be a number", - "Must be greater than $0.": "Must be greater than $0.", "Must complete an MHI form instead": "Must complete an MHI form instead", "Must have at least 1 Phone Number to confirm": "Must have at least 1 Phone Number to confirm", "Must use a positive number for amount": "Must use a positive number for amount", @@ -1832,7 +1870,7 @@ "Namibia": "Namibia", "Nauru": "Nauru", "Nearest Geographic Multiplier Location": "Nearest Geographic Multiplier Location", - "Need to update the amount you're transferring each month? No problem! Just set a stop date for the end of the current month on your existing transfer. After that, go ahead and set up a brand-new monthly transfer with the updated amount.": "Need to update the amount you're transferring each month? No problem! Just set a stop date for the end of the current month on your existing transfer. After that, go ahead and set up a brand-new monthly transfer with the updated amount.", + "Need to update the amount you're transferring each month? No problem! Just set an end date for the end of the current month on your existing transfer. After that, go ahead and set up a brand-new monthly transfer with the updated amount.": "Need to update the amount you're transferring each month? No problem! Just set an end date for the end of the current month on your existing transfer. After that, go ahead and set up a brand-new monthly transfer with the updated amount.", "Nepal": "Nepal", "Net Additional Salary": "Net Additional Salary", "Net Additional Salary (Before Taxes)": "Net Additional Salary (Before Taxes)", @@ -1887,7 +1925,6 @@ "No Appeals have been setup yet.": "No Appeals have been setup yet.", "No call logged in the past year": "No call logged in the past year", "No celebrations to show.": "No celebrations to show.", - "No changes have been made": "No changes have been made", "No Coaches": "No Coaches", "No columns": "No columns", "No comments to show": "No comments to show", @@ -1961,13 +1998,15 @@ "Not taxed now": "Not taxed now", "Not Yet Enrolled": "Not Yet Enrolled", "Note": "Note", - "Note (Optional)": "Note (Optional)", + "Note is required": "Note is required", "Note: Italy staff must complete a paper MHI form.": "Note: Italy staff must complete a paper MHI form.", "Note: You may be enrolled in our automatic annual 1% increase to your 403(b). To verify this or update it, you can go to <2>your Principal account. Your gross salary will not be affected, so your net pay will decrease by 1%. If you would like to receive the same net pay after this 1% increase, you will need to calculate a new salary here.": "Note: You may be enrolled in our automatic annual 1% increase to your 403(b). To verify this or update it, you can go to <2>your Principal account. Your gross salary will not be affected, so your net pay will decrease by 1%. If you would like to receive the same net pay after this 1% increase, you will need to calculate a new salary here.", "Notes": "Notes", "Notes successfully saved.": "Notes successfully saved.", "Notifications": "Notifications", "Notifications ({{unread}} unread)": "Notifications ({{unread}} unread)", + "Notifications are turned off for {{appName}} in your device settings. Open Settings, tap Apps, select {{appName}}, turn on notifications, and then return here.": "Notifications are turned off for {{appName}} in your device settings. Open Settings, tap Apps, select {{appName}}, turn on notifications, and then return here.", + "Notifications are turned off for {{appName}} in your device settings. Open the Settings app, tap Notifications, select {{appName}}, allow notifications, and then return here.": "Notifications are turned off for {{appName}} in your device settings. Open the Settings app, tap Notifications, select {{appName}}, allow notifications, and then return here.", "Notifications table": "Notifications table", "Notifications updated successfully": "Notifications updated successfully", "NS Reference": "NS Reference", @@ -1979,6 +2018,7 @@ "of": "of", "Off": "Off", "Office": "Office", + "Offline": "Offline", "Ok": "Ok", "OK": "OK", "Okta": "Okta", @@ -2026,6 +2066,7 @@ "Other Leave": "Other Leave", "Other Monthly Reimbursements": "Other Monthly Reimbursements", "Other Standard Earnings": "Other Standard Earnings", + "Other Subtotal": "Other Subtotal", "Our apologies. It appears something has gone wrong. Please try again later and contact the administrator if this problem persists.": "Our apologies. It appears something has gone wrong. Please try again later and contact the administrator if this problem persists.", "Our records indicate that you have an MHA request <2>waiting to be processed. To view your MHA request, click on the \"View Current MHA\" button below.": "Our records indicate that you have an MHA request <2>waiting to be processed. To view your MHA request, click on the \"View Current MHA\" button below.", "Our records show that not all staff have a Minister's Housing Allowance for the effective date of this salary calculation. If an MHA Request form has not yet been submitted, it may be completed using <2>this link. Pending MHA Requests will not apply to this salary calculation but a new Salary Calculation Form can be submitted after approval.": "Our records show that not all staff have a Minister's Housing Allowance for the effective date of this salary calculation. If an MHA Request form has not yet been submitted, it may be completed using <2>this link. Pending MHA Requests will not apply to this salary calculation but a new Salary Calculation Form can be submitted after approval.", @@ -2045,6 +2086,7 @@ "Override paycheck amount": "Override paycheck amount", "Overtime Pay": "Overtime Pay", "Own": "Own", + "PA Card": "PA Card", "Paid Time Off": "Paid Time Off", "Paid with Designation Support Goal Calculator": "Paid with Designation Support Goal Calculator", "Pakistan": "Pakistan", @@ -2084,6 +2126,7 @@ "Payee": "Payee", "Payroll Taxes": "Payroll Taxes", "PDF of Mail Merged Labels": "PDF of Mail Merged Labels", + "PDS Goal Summary": "PDS Goal Summary", "Pending Invites": "Pending Invites", "Pending Request": "Pending Request", "Pending Salary Calculation Form": "Pending Salary Calculation Form", @@ -2093,6 +2136,8 @@ "People with new phone numbers or multiple primary phone numbers will appear here.": "People with new phone numbers or multiple primary phone numbers will appear here.", "People with similar names and partner account numbers will appear here.": "People with similar names and partner account numbers will appear here.", "People with similar names will appear here.": "People with similar names will appear here.", + "per hour": "per hour", + "per year": "per year", "Percentage breakdown of taxes, SECA, VTL and other deductions.": "Percentage breakdown of taxes, SECA, VTL and other deductions.", "Percentage of salary contributed to Roth 403(b) retirement account.": "Percentage of salary contributed to Roth 403(b) retirement account.", "Percentage of salary contributed to Traditional 403(b) retirement account.": "Percentage of salary contributed to Traditional 403(b) retirement account.", @@ -2104,8 +2149,8 @@ "person": "person", "Person created successfully": "Person created successfully", "Person deleted successfully": "Person deleted successfully", - "Person Number: {{personNumbers}}_one": "Person Number: {{personNumbers}}", - "Person Number: {{personNumbers}}_other": "Person Numbers: {{personNumbers}}", + "Person Number: {{personNumbers}}": "Person Number: {{personNumbers}}", + "Person Numbers: {{personNumbers}}": "Person Numbers: {{personNumbers}}", "Person updated successfully": "Person updated successfully", "Personal": "Personal", "Personal Contact Information": "Personal Contact Information", @@ -2176,6 +2221,7 @@ "prayerletters.com": "prayerletters.com", "prayerletters.com is a significant way to save valuable ministry\n time while more effectively connecting with your partners. Keep your\n physical newsletter list up to date in {{appName}} and then sync it to your\n prayerletters.com account with this integration.": "prayerletters.com is a significant way to save valuable ministry\n time while more effectively connecting with your partners. Keep your\n physical newsletter list up to date in {{appName}} and then sync it to your\n prayerletters.com account with this integration.", "PrayerLetters.com Overview": "PrayerLetters.com Overview", + "Pre-filled with the maximum allowed amount. Edit to a lower value if needed.": "Pre-filled with the maximum allowed amount. Edit to a lower value if needed.", "Predefined Filters": "Predefined Filters", "Preferences": "Preferences", "Preferences - {{ title }}": "Preferences - {{ title }}", @@ -2207,6 +2253,11 @@ "Progress": "Progress", "Prompt": "Prompt", "Puerto Rico": "Puerto Rico", + "Purchase": "Purchase", + "Push Notifications": "Push Notifications", + "Push notifications are enabled on this device.": "Push notifications are enabled on this device.", + "Push notifications disabled on this device": "Push notifications disabled on this device", + "Push notifications enabled on this device": "Push notifications enabled on this device", "Qatar": "Qatar", "Quarterly": "Quarterly", "Reason": "Reason", @@ -2226,9 +2277,11 @@ "Refresh Google Account": "Refresh Google Account", "Refresh prayerletters.com Account": "Refresh prayerletters.com Account", "Region": "Region", + "Registration": "Registration", "Regular Giving": "Regular Giving", "Regular Pay": "Regular Pay", "Reimbursable Expenses": "Reimbursable Expenses", + "Reimbursable expenses have a {{floor}} per month minimum. If the sum of your monthly entries (plus annual entries divided by 12) falls below {{floor}}, the {{floor}} minimum is used in your support goal instead.": "Reimbursable expenses have a {{floor}} per month minimum. If the sum of your monthly entries (plus annual entries divided by 12) falls below {{floor}}, the {{floor}} minimum is used in your support goal instead.", "Reimbursable expenses that were not approved within 90 days": "Reimbursable expenses that were not approved within 90 days", "Reimbursable Medical Expenses": "Reimbursable Medical Expenses", "Relationship Code": "Relationship Code", @@ -2294,7 +2347,6 @@ "Requested salary must be at least {{min}}": "Requested salary must be at least {{min}}", "Requests exceeding your Maximum Allowable Salary require additional review.": "Requests exceeding your Maximum Allowable Salary require additional review.", "Required": "Required", - "Required field.": "Required field.", "Research Abandoned": "Research Abandoned", "Research Contact Info": "Research Contact Info", "Reset": "Reset", @@ -2313,6 +2365,8 @@ "Retirement Contributions": "Retirement Contributions", "Retrieved from Principal. A combined percentage of your current tax deferred and Roth contributions.": "Retrieved from Principal. A combined percentage of your current tax deferred and Roth contributions.", "Retroactive Pay": "Retroactive Pay", + "Retry": "Retry", + "Returned to Setup because the current step is no longer available.": "Returned to Setup because the current step is no longer available.", "Reunion": "Reunion", "Reverse Filter": "Reverse Filter", "Review and merge duplicate contacts": "Review and merge duplicate contacts", @@ -2321,6 +2375,7 @@ "Review Excluded": "Review Excluded", "Review spouse financial details and settings here.": "Review spouse financial details and settings here.", "Review spouse personal details and preferences here.": "Review spouse personal details and preferences here.", + "Review your complete PDS goal and current support progress. Use this summary to share your goal and track your fundraising.": "Review your complete PDS goal and current support progress. Use this summary to share your goal and track your fundraising.", "Review your financial details and settings here.": "Review your financial details and settings here.", "Review your personal details and preferences here.": "Review your personal details and preferences here.", "Right Wins the Merge": "Right Wins the Merge", @@ -2357,11 +2412,11 @@ "Salary Calculation": "Salary Calculation", "Salary Calculation Form": "Salary Calculation Form", "Salary Calculation Summary": "Salary Calculation Summary", - "Salary Calculator": "Salary Calculator", "Salary Calculator Sections": "Salary Calculator Sections", "Salary Cap Calculation": "Salary Cap Calculation", "Salary Currency": "Salary Currency", "Salary Other": "Salary Other", + "Salary Subtotal": "Salary Subtotal", "Samoa": "Samoa", "San Marino": "San Marino", "Sao Tome and Principe": "Sao Tome and Principe", @@ -2407,6 +2462,7 @@ "Select": "Select", "Select {{count}} contact_one": "Select {{count}} contact", "Select {{count}} contact_other": "Select {{count}} contact", + "Select a form type": "Select a form type", "select all": "select all", "Select all {{count}} contacts_one": "Select all {{count}} contacts", "Select all {{count}} contacts_other": "Select all {{count}} contacts", @@ -2484,6 +2540,8 @@ "Sign In": "Sign In", "Sign In with {{authProviderName}}": "Sign In with {{authProviderName}}", "Sign Out": "Sign Out", + "Simple": "Simple", + "Simple excludes them; existing entries are preserved and will count again if you switch back.": "Simple excludes them; existing entries are preserved and will count again if you switch back.", "Since all columns have been removed, resetting columns to their default values": "Since all columns have been removed, resetting columns to their default values", "Since Campus Crusade is a non-profit organization, staff members are responsible for paying the entire amount of Social Security.": "Since Campus Crusade is a non-profit organization, staff members are responsible for paying the entire amount of Social Security.", "Since you are requesting above {{spouse}}'s and your combined Maximum Allowable Salary, you will need to provide the information below.": "Since you are requesting above {{spouse}}'s and your combined Maximum Allowable Salary, you will need to provide the information below.", @@ -2501,6 +2559,7 @@ "Solomon Islands": "Solomon Islands", "Somalia": "Somalia", "Some of the contact(s) you have selected to add to this appeal are currently excluded. You will not be able to exclude these contacts once you add them to this appeal. Instead, you will be able to remove them from it.": "Some of the contact(s) you have selected to add to this appeal are currently excluded. You will not be able to exclude these contacts once you add them to this appeal. Instead, you will be able to remove them from it.", + "Something went wrong enabling push notifications on this device.": "Something went wrong enabling push notifications on this device.", "Something went wrong while loading your account information. Please try again later. If the problem persists, please contact {link}.": "Something went wrong while loading your account information. Please try again later. If the problem persists, please contact {link}.", "Sort": "Sort", "Sort By": "Sort By", @@ -2538,6 +2597,8 @@ "Staff Account Number": "Staff Account Number", "Staff Account Number: {{personNumber}}": "Staff Account Number: {{personNumber}}", "Staff Assessment": "Staff Assessment", + "Staff Conference Savings Account": "Staff Conference Savings Account", + "Staff Expense": "Staff Expense", "Staff Expense Report": "Staff Expense Report", "Staff IDs:": "Staff IDs:", "Staff Info Summary": "Staff Info Summary", @@ -2545,6 +2606,7 @@ "Staff Savings Fund": "Staff Savings Fund", "Staff Savings Fund Transfers": "Staff Savings Fund Transfers", "Staff You Coach": "Staff You Coach", + "StaffCard": "StaffCard", "Standard": "Standard", "Star": "Star", "Starred": "Starred", @@ -2567,9 +2629,6 @@ "Step 2": "Step 2", "Step 3": "Step 3", "Step 4": "Step 4", - "Stop Date": "Stop Date", - "Stop date added successfully": "Stop date added successfully", - "Stop date updated successfully": "Stop date updated successfully", "Stop grouping by {{name}}": "Stop grouping by {{name}}", "Stop Impersonating": "Stop Impersonating", "Stop recording": "Stop recording", @@ -2577,6 +2636,7 @@ "Stopped Giving": "Stopped Giving", "Stopped Giving Range": "Stopped Giving Range", "Stopping impersonation and redirecting you to the login page": "Stopping impersonation and redirecting you to the login page", + "Streamlined calculator without reimbursable expenses or 403b contributions.": "Streamlined calculator without reimbursable expenses or 403b contributions.", "Street": "Street", "Street Address": "Street Address", "Street is required to import any address information.": "Street is required to import any address information.", @@ -2589,7 +2649,7 @@ "Submit For Approval": "Submit For Approval", "Submitting...": "Submitting...", "Subtotal": "Subtotal", - "Subtotal × {{rate}}": "Subtotal × {{rate}}", + "Subtotal × {{rate}}%": "Subtotal × {{rate}}%", "Subtotal Annual": "Subtotal Annual", "Subtotal including the administrative charge percentage.": "Subtotal including the administrative charge percentage.", "Subtotal Monthly": "Subtotal Monthly", @@ -2632,14 +2692,15 @@ "Summary Report": "Summary Report", "Summary Report - Responsibility Centers": "Summary Report - Responsibility Centers", "Summer Assignment Expenses": "Summer Assignment Expenses", + "Summer Mission": "Summer Mission", "Supplies and Materials": "Supplies and Materials", "Support Goal Percentage Progress": "Support Goal Percentage Progress", "Support Item": "Support Item", + "Support Items": "Support Items", "Support raising, Staff Conference, etc.": "Support raising, Staff Conference, etc.", "Suriname": "Suriname", "Surplus/Deficit": "Surplus/Deficit", "Svalbard and Jan Mayen": "Svalbard and Jan Mayen", - "Swap": "Swap", "Swaziland": "Swaziland", "Sweden": "Sweden", "Sweet! You're connected.": "Sweet! You're connected.", @@ -2671,6 +2732,7 @@ "Tajikistan": "Tajikistan", "Take a moment to verify you and your spouse's information.": "Take a moment to verify you and your spouse's information.", "Take a moment to verify your information.": "Take a moment to verify your information.", + "Take Photo": "Take Photo", "Tanzania, United Republic of": "Tanzania, United Republic of", "task": "task", "Task": "Task", @@ -2732,7 +2794,7 @@ "The Staff Conference Savings Fund was created so RMO staff members could set aside funds to help save for costs associated with the U.S. Staff Conference. Since this fund was created, an increasing number of staff have asked if they could use it to help set aside funds for mission trips, upcoming large expenses...": "The Staff Conference Savings Fund was created so RMO staff members could set aside funds to help save for costs associated with the U.S. Staff Conference. Since this fund was created, an increasing number of staff have asked if they could use it to help set aside funds for mission trips, upcoming large expenses...", "The timezone will be used in setting tasks, appointments, completion dates, etc. Please make sure it matches the one your computer is set to.": "The timezone will be used in setting tasks, appointments, completion dates, etc. Please make sure it matches the one your computer is set to.", "The total amount is less than the commitment amount. Would you like to update the commitment amount to match the total? If not, the contact will be moved to the Received column.": "The total amount is less than the commitment amount. Would you like to update the commitment amount to match the total? If not, the contact will be moved to the Received column.", - "The total is the greater of the {{floor}} minimum or your calculated amount.": "The total is the greater of the {{floor}} minimum or your calculated amount.", + "The transfer will no longer recur after this date. If left blank, the transfer will recur indefinitely until manually stopped.": "The transfer will no longer recur after this date. If left blank, the transfer will recur indefinitely until manually stopped.", "The user group for your account is:": "The user group for your account is:", "The user(s) will lose gift data and donor contact data. Consider whether you should notify the user(s).": "The user(s) will lose gift data and donor contact data. Consider whether you should notify the user(s).", "Their gift is {{daysLate}} day late._plural": "Their gift is {{daysLate}} days late.", @@ -2768,6 +2830,7 @@ "This is the primary email for every person in the selected contacts. If they are marked as \"Opted out of Digital Newsletter\", they are not included in this list.": "This is the primary email for every person in the selected contacts. If they are marked as \"Opted out of Digital Newsletter\", they are not included in this list.", "THIS MERGE WILL AFFECT ALL PEOPLE WITH ACCESS TO THIS ACCOUNT AND CANNOT BE UNDONE": "THIS MERGE WILL AFFECT ALL PEOPLE WITH ACCESS TO THIS ACCOUNT AND CANNOT BE UNDONE", "This organization requires you to log into {{appName}} with your ministry email to access it.": "This organization requires you to log into {{appName}} with your ministry email to access it.", + "This page is not available offline. Check your internet connection and try again.": "This page is not available offline. Check your internet connection and try again.", "This request is still pending board approval. You cannot make changes at this time.": "This request is still pending board approval. You cannot make changes at this time.", "This sets which account you will land in whenever you login to {{appName}}.": "This sets which account you will land in whenever you login to {{appName}}.", "This should be set to the amount of new recurring commitments you expect to raise during the period set above. If you do not know, make your best guess for now. You can change it at any time.": "This should be set to the amount of new recurring commitments you expect to raise during the period set above. If you do not know, make your best guess for now. You can change it at any time.", @@ -2775,6 +2838,7 @@ "This should be the organization from which you are paid and most likely correspond to the country in which you are living and serving. This will set your currency conversions for multi-currency accounts to the currency of this organization both on the dashboard and the corresponding contribution reports.": "This should be the organization from which you are paid and most likely correspond to the country in which you are living and serving. This will set your currency conversions for multi-currency accounts to the currency of this organization both on the dashboard and the corresponding contribution reports.", "This should be the place from which you are living and sending out physical communications. This will be used in exports for mailing address information.": "This should be the place from which you are living and sending out physical communications. This will be used in exports for mailing address information.", "This updated request will take the place of your previous request. Once submitted, you can return and make edits until {{date}}. After this date, your request will be processed as is.": "This updated request will take the place of your previous request. Once submitted, you can return and make edits until {{date}}. After this date, your request will be processed as is.", + "This version of the {{appName}} app is no longer supported. Update to the latest version to keep using {{appName}}.": "This version of the {{appName}} app is no longer supported. Update to the latest version to keep using {{appName}}.", "This will allow {{appName}} to automatically synchronize your donation information.": "This will allow {{appName}} to automatically synchronize your donation information.", "This will clear all entered information and you may start a new form.": "This will clear all entered information and you may start a new form.", "This will delete all designation accounts that are not shared with other account lists. (including the donations for that designation)": "This will delete all designation accounts that are not shared with other account lists. (including the donations for that designation)", @@ -2825,7 +2889,8 @@ "Total Donations: ": "Total Donations: ", "Total Expenses": "Total Expenses", "Total Expenses:": "Total Expenses:", - "Total Goal (line 6 with {{attrition}} attrition)": "Total Goal (line 6 with {{attrition}} attrition)", + "Total Goal": "Total Goal", + "Total Goal (line 5 with {{attrition}} attrition)": "Total Goal (line 5 with {{attrition}} attrition)", "Total Goal (with attrition)": "Total Goal (with attrition)", "Total Hrs": "Total Hrs", "Total Income": "Total Income", @@ -2837,7 +2902,6 @@ "Total must be less than {{max}}": "Total must be less than {{max}}", "Total must be positive": "Total must be positive", "Total Reimbursable Expenses": "Total Reimbursable Expenses", - "Total reimbursable information": "Total reimbursable information", "Total requested amount": "Total requested amount", "Total Rows:": "Total Rows:", "Total Salary Requested": "Total Salary Requested", @@ -2864,12 +2928,12 @@ "Transfer History": "Transfer History", "Transfer History not available": "Transfer History not available", "Transfer stopped successfully": "Transfer stopped successfully", - "TRANSFER TO": "TRANSFER TO", "Transfer updated successfully": "Transfer updated successfully", "Transfers": "Transfers", "Trinidad and Tobago": "Trinidad and Tobago", "true": "true", "Try adding a task or changing your search filters.": "Try adding a task or changing your search filters.", + "Try Again": "Try Again", "Try searching for a different keyword or organization.": "Try searching for a different keyword or organization.", "Tunisia": "Tunisia", "Turkey": "Turkey", @@ -2929,9 +2993,11 @@ "Upcoming Transfers": "Upcoming Transfers", "Upcoming Transfers not available": "Upcoming Transfers not available", "Update": "Update", + "Update {{appName}}": "Update {{appName}}", "Update Commitment Info": "Update Commitment Info", "Update Current MHA": "Update Current MHA", "Update Donations": "Update Donations", + "Update Required": "Update Required", "Updated {{count}} contact(s)_one": "Updated {{count}} contact(s)", "Updated {{count}} contact(s)_other": "Updated {{count}} contact(s)", "Updated {{count}} duplicate(s)_one": "Updated {{count}} duplicate(s)", @@ -2997,7 +3063,7 @@ "Virgin Islands, U.S.": "Virgin Islands, U.S.", "Voluntary 403b Retirement Plan": "Voluntary 403b Retirement Plan", "Wallis and Futuna": "Wallis and Futuna", - "Want your monthly transfer to end at a certain point? You can set a stop date—super handy! Just a heads-up: once it’s there, it can’t be removed, but you can change it to a different date if needed.": "Want your monthly transfer to end at a certain point? You can set a stop date—super handy! Just a heads-up: once it’s there, it can’t be removed, but you can change it to a different date if needed.", + "Want your monthly transfer to end at a certain point? You can set an end date—super handy! Just a heads-up: once it’s there, it can’t be removed, but you can change it to a different date if needed.": "Want your monthly transfer to end at a certain point? You can set an end date—super handy! Just a heads-up: once it’s there, it can’t be removed, but you can change it to a different date if needed.", "WARNING: Please read the implications of deleting this account.": "WARNING: Please read the implications of deleting this account.", "WARNING: Please read the implications of deleting this user.": "WARNING: Please read the implications of deleting this user.", "We are unable accept Additional Salary Requests at this time. Please contact <1>Payroll@cru.org if you have any questions.": "We are unable accept Additional Salary Requests at this time. Please contact <1>Payroll@cru.org if you have any questions.", @@ -3026,7 +3092,6 @@ "What are your total expenses for the last staff conference? Divide that by 36 to get your monthly needs. We encourage you to set up a regular monthly deposit for this amount from your staff account to your Conference.": "What are your total expenses for the last staff conference? Divide that by 36 to get your monthly needs. We encourage you to set up a regular monthly deposit for this amount from your staff account to your Conference.", "What country are you in?": "What country are you in?", "What do you want to call this goal?": "What do you want to call this goal?", - "What's New": "What's New", "WhatsApp": "WhatsApp", "When you add a Google account to {{appName}}, Google will ask you what {{appName}} should be allowed to access. Please select ALL of the checkboxes.

Otherwise, {{appName}} may not work properly.": "When you add a Google account to {{appName}}, Google will ask you what {{appName}} should be allowed to access. Please select ALL of the checkboxes.

Otherwise, {{appName}} may not work properly.", "Which account would you like to see by default when you open {{appName}}?": "Which account would you like to see by default when you open {{appName}}?", @@ -3034,6 +3099,7 @@ "With kids": "With kids", "Withdrawal": "Withdrawal", "Work": "Work", + "Work Comp": "Work Comp", "Work Comp for Part-time": "Work Comp for Part-time", "Workers Compensation": "Workers Compensation", "Would you like {{appName}} to email Chalkline your newsletter list and open their order form in a new tab?": "Would you like {{appName}} to email Chalkline your newsletter list and open their order form in a new tab?", @@ -3057,12 +3123,15 @@ "You are about to permanently delete this Appeal. This will remove all contacts, and delete all pledges, and progress towards this appeal. Are you sure you want to continue?": "You are about to permanently delete this Appeal. This will remove all contacts, and delete all pledges, and progress towards this appeal. Are you sure you want to continue?", "You are about to share access to your {{appName}} account with another user. This will give them access to view and\n modify all of your Contacts, Tasks, Donations, and any other information in your {{appName}} account.": "You are about to share access to your {{appName}} account with another user. This will give them access to view and\n modify all of your Contacts, Tasks, Donations, and any other information in your {{appName}} account.", "You are adding a commitment for": "You are adding a commitment for", + "You are back online.": "You are back online.", "You are cancelling this {{formTitle}}.": "You are cancelling this {{formTitle}}.", "You are changing your MHA Request selection.": "You are changing your MHA Request selection.", "You are currently editing settings for {{email}}": "You are currently editing settings for {{email}}", "You are discarding this {{formTitle}}.": "You are discarding this {{formTitle}}.", "You are discarding your changes to this form.": "You are discarding your changes to this form.", "You are editing the commitment for": "You are editing the commitment for", + "You are offline.": "You are offline.", + "You are offline. Changes cannot be saved until you reconnect.": "You are offline. Changes cannot be saved until you reconnect.", "You are submitting changes to your {{formTitle}}.": "You are submitting changes to your {{formTitle}}.", "You are submitting changes to your Annual {{formTitle}} for board approval.": "You are submitting changes to your Annual {{formTitle}} for board approval.", "You are submitting your {{formTitle}} for board approval.": "You are submitting your {{formTitle}} for board approval.", @@ -3116,6 +3185,8 @@ "You must select at least 2 contacts to merge.": "You must select at least 2 contacts to merge.", "You need to create a list on Mailchimp that {{appName}} can use for your newsletter.": "You need to create a list on Mailchimp that {{appName}} can use for your newsletter.", "You only have access to this account, so you cannot merge it with another one yet. Share this account with\n someone else first. Once they accept your share, you will be able to merge your accounts together.": "You only have access to this account, so you cannot merge it with another one yet. Share this account with\n someone else first. Once they accept your share, you will be able to merge your accounts together.", + "You or your spouse has a pending Additional Salary Request, so this request needs additional approval. This will take {{timeframe}} as it needs to be signed off by {{approvers}}. This may affect your selected effective date.": "You or your spouse has a pending Additional Salary Request, so this request needs additional approval. This will take {{timeframe}} as it needs to be signed off by {{approvers}}. This may affect your selected effective date.", + "You or your spouse has a pending Additional Salary Request, so this request needs additional approval. This will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.": "You or your spouse has a pending Additional Salary Request, so this request needs additional approval. This will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.", "You will be redirected soon...": "You will be redirected soon...", "You will be taken to your organization's donation services system to grant {{appName}} permission to access your donation data.": "You will be taken to your organization's donation services system to grant {{appName}} permission to access your donation data.", "You will each get an email (you might need to check your spam) and will need to accept access to each other’s accounts.": "You will each get an email (you might need to check your spam) and will need to accept access to each other’s accounts.", @@ -3128,7 +3199,7 @@ "You've successfully submitted your {{formTitle}}!": "You've successfully submitted your {{formTitle}}!", "You've successfully submitted your Salary Calculation Form!": "You've successfully submitted your Salary Calculation Form!", "You've successfully updated your {{formTitle}}!": "You've successfully updated your {{formTitle}}!", - "Your {{combined}} Gross Requested Salary exceeds your {{combined}} Maximum Allowable Salary. Please make adjustments to your Salary Request above or fill out the Approval Process Section below to request a higher amount through our Progressive Approvals process. This may take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.": "Your {{combined}} Gross Requested Salary exceeds your {{combined}} Maximum Allowable Salary. Please make adjustments to your Salary Request above or fill out the Approval Process Section below to request a higher amount through our Progressive Approvals process. This may take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.", + "Your {{combined}} Gross Requested Salary exceeds your {{combined}} Maximum Allowable Salary. Please make adjustments to your Salary Request above or fill out the Approval Process Section below to request a higher amount through our Progressive Approvals process. This will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.": "Your {{combined}} Gross Requested Salary exceeds your {{combined}} Maximum Allowable Salary. Please make adjustments to your Salary Request above or fill out the Approval Process Section below to request a higher amount through our Progressive Approvals process. This will take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.", "Your Additional Salary Request": "Your Additional Salary Request", "Your Annual MHA Total": "Your Annual MHA Total", "Your Combined Gross Requested Salary is within your Combined Maximum Allowable Salary. However, {{name}}'s Gross Requested Salary exceeds their individual Maximum Allowable Salary. If this is correct, please provide reasoning for why {{name}}'s Requested Salary should exceed {{cap}} in the Additional Information section below or make changes to how your Requested Salary is distributed above.": "Your Combined Gross Requested Salary is within your Combined Maximum Allowable Salary. However, {{name}}'s Gross Requested Salary exceeds their individual Maximum Allowable Salary. If this is correct, please provide reasoning for why {{name}}'s Requested Salary should exceed {{cap}} in the Additional Information section below or make changes to how your Requested Salary is distributed above.", @@ -3141,6 +3212,7 @@ "Your form is missing information.": "Your form is missing information.", "Your Goal": "Your Goal", "Your Google import has started and your contacts will be in {{appName}} shortly. We will email you when your import is complete.": "Your Google import has started and your contacts will be in {{appName}} shortly. We will email you when your import is complete.", + "Your gross monthly pay broken down by category, calculated from the values entered in Setup.": "Your gross monthly pay broken down by category, calculated from the values entered in Setup.", "Your gross request is within your Maximum Allowable Salary.": "Your gross request is within your Maximum Allowable Salary.", "Your Gross Requested Salary": "Your Gross Requested Salary", "Your Information": "Your Information", @@ -3154,15 +3226,19 @@ "Your MHA Request": "Your MHA Request", "Your MHA Request Summary": "Your MHA Request Summary", "Your Net Additional Salary calculated below represents the amount you will receive as an additional salary check (before taxes) and is equal to the amount you are requesting minus any amount being contributed to your 403(b).": "Your Net Additional Salary calculated below represents the amount you will receive as an additional salary check (before taxes) and is equal to the amount you are requesting minus any amount being contributed to your 403(b).", + "Your request causes your combined Total Requested Salary to exceed your combined Maximum Allowable Salary.": "Your request causes your combined Total Requested Salary to exceed your combined Maximum Allowable Salary.", "Your request causes your Total Requested Salary to exceed your Maximum Allowable Salary.": "Your request causes your Total Requested Salary to exceed your Maximum Allowable Salary.", "Your request has been sent to payroll and you will receive your additional salary separately from your regular paycheck by 9/25/2025.": "Your request has been sent to payroll and you will receive your additional salary separately from your regular paycheck by 9/25/2025.", "Your request requires additional approval because your Gross Salary exceeds your Maximum Allowable Salary. Do you want to continue?": "Your request requires additional approval because your Gross Salary exceeds your Maximum Allowable Salary. Do you want to continue?", + "Your request requires additional approval. Do you want to continue?": "Your request requires additional approval. Do you want to continue?", "Your request requires additional approval. Please fill in the information below to continue.": "Your request requires additional approval. Please fill in the information below to continue.", + "Your request requires additional approvals and cannot be submitted online. SOSA staff can have requests exceeding the {{cap}} cap approved for certain geographic locations with the appropriate levels of approval.<4><5>Please contact <8>payroll@cru.org for further assistance.": "Your request requires additional approvals and cannot be submitted online. SOSA staff can have requests exceeding the {{cap}} cap approved for certain geographic locations with the appropriate levels of approval.<4><5>Please contact <8>payroll@cru.org for further assistance.", "Your request requires Board approval. Please review the information below to continue.": "Your request requires Board approval. Please review the information below to continue.", "Your request will be sent to HR Services.": "Your request will be sent to HR Services.", "Your request will be sent to payroll.": "Your request will be sent to payroll.", "Your Requested Salary plus 403(b) and taxes.": "Your Requested Salary plus 403(b) and taxes.", "Your Salary Calculation Form": "Your Salary Calculation Form", + "Your spouse has a pending Additional Salary Request or Salary Request, so this request needs additional approval.": "Your spouse has a pending Additional Salary Request or Salary Request, so this request needs additional approval.", "Your TntConnect data is importing. We'll send you an email as soon as it's all done and ready! Please be aware that it could take up to 12 hours.": "Your TntConnect data is importing. We'll send you an email as soon as it's all done and ready! Please be aware that it could take up to 12 hours.", "Your Total Additional Salary Request exceeds your remaining allowable salary.": "Your Total Additional Salary Request exceeds your remaining allowable salary.", "Your total additional salary requested exceeds your account balance.": "Your total additional salary requested exceeds your account balance.", diff --git a/public/locales/en/translation_old.json b/public/locales/en/translation_old.json index 8c8e584314..6aa0a84b6c 100644 --- a/public/locales/en/translation_old.json +++ b/public/locales/en/translation_old.json @@ -1,9 +1,12 @@ { " so you can log back in with your official key account.": " so you can log back in with your official key account.", "--All Hidden --": "--All Hidden --", + "(Subtotal + Attrition) × {{rate}}": "(Subtotal + Attrition) × {{rate}}", + "(Subtotal + Credit Card Fees + Attrition) × {{rate}}": "(Subtotal + Credit Card Fees + Attrition) × {{rate}}", "{{appName}}": "{{appName}}", "{{appName}} couldn't save your configuration changes for MailChimp": "{{appName}} couldn't save your configuration changes for MailChimp", "{{appName}} removed your integration with MailChimp": "{{appName}} removed your integration with MailChimp", + "{{mode}} Minister's Housing Allowance Request": "{{mode}} Minister's Housing Allowance Request", "{{name}} may request up to their Board Approved MHA Amount of {{approvedAmount}}.": "{{name}} may request up to their Board Approved MHA Amount of {{approvedAmount}}.", "{{status}}": "{{status}}", "{{tooldesc}}": "{{tooldesc}}", @@ -13,6 +16,7 @@ "+ Add Goal": "+ Add Goal", "+ Add Income": "+ Add Income", "<0>A Minister's Housing Allowance Request is a form ministers complete to designate part of their compensation as tax-free housing allowance. To complete this form for the {nextYear} tax year, you'll need:": "<0>A Minister's Housing Allowance Request is a form ministers complete to designate part of their compensation as tax-free housing allowance. To complete this form for the {nextYear} tax year, you'll need:", + "<0>You can now change the reminder status of any of your ministry partners online! Your current list and related information is displayed below. To change the reminder status of any of your ministry partners, use the drop-down boxes in the \"Reminder Status\" column.<1>When you're done, click the \"Save\" button at the bottom of the page. Wondering how the <2>Reminder System works and how it differs from the Receipting System? Check out <5>Ministry Partner Reminder help.": "<0>You can now change the reminder status of any of your ministry partners online! Your current list and related information is displayed below. To change the reminder status of any of your ministry partners, use the drop-down boxes in the \"Reminder Status\" column.<1>When you're done, click the \"Save\" button at the bottom of the page. Wondering how the <2>Reminder System works and how it differs from the Receipting System? Check out <5>Ministry Partner Reminder help.", "

This contact will be anonymized in your {{appName}} organization. This is permanent and can't be recovered. Only anonymize if you are 100% confident that you are looking at the correct contact.


A contact placeholder will remain with a name like “DataPrivacy, Deleted”. Gift data will remain. Other data such as notes and tasks will be removed. Status will be set as “Never Ask”. Newsletter set to 'N/A'. You can request removal across all other systems at dsar@cru.org.

": "

This contact will be anonymized in your {{appName}} organization. This is permanent and can't be recovered. Only anonymize if you are 100% confident that you are looking at the correct contact.


A contact placeholder will remain with a name like “DataPrivacy, Deleted”. Gift data will remain. Other data such as notes and tasks will be removed. Status will be set as “Never Ask”. Newsletter set to 'N/A'. You can request removal across all other systems at dsar@cru.org.

", "100% - Roth + Traditional 403(b) %": "100% - Roth + Traditional 403(b) %", "12 Month Partner Report": "12 Month Partner Report", @@ -24,8 +28,10 @@ "Add or change the organizations that sync donation information with this\n {{appName}} account. Removing an organization will not remove past information,\n but will prevent future donations and contacts from syncing.": "Add or change the organizations that sync donation information with this\n {{appName}} account. Removing an organization will not remove past information,\n but will prevent future donations and contacts from syncing.", "Add organizations that sync donation information with this {{appName}} account. That \n organization will have the ability to manage or delete your account. Removing an \n organization will not remove past information, but will prevent future donations \n and contacts from syncing.": "Add organizations that sync donation information with this {{appName}} account. That \n organization will have the ability to manage or delete your account. Removing an \n organization will not remove past information, but will prevent future donations \n and contacts from syncing.", "Add Referrals": "Add Referrals", + "Add Stop Date": "Add Stop Date", "Age is required": "Age is required", "Age range must be one of the options": "Age range must be one of the options", + "Amount cannot exceed {{max}}": "Amount cannot exceed {{max}}", "Amount of time before notification": "Amount of time before notification", "Amount Received": "Amount Received", "And error occured.": "And error occured.", @@ -40,6 +46,7 @@ "Appts Produced": "Appts Produced", "Archive": "Archive", "Are you sure you want to delete": "Are you sure you want to delete", + "Are you sure you want to delete <2>{goal.name ?? t('Unnamed Goal')}? Deleting this goal will remove it permanently.": "Are you sure you want to delete <2>{goal.name ?? t('Unnamed Goal')}? Deleting this goal will remove it permanently.", "Are you sure you want to stop this recurring transfer?": "Are you sure you want to stop this recurring transfer?", "Are you sure you wish to {{action}} the {{count}} selected tasks?": "Are you sure you wish to {{action}} the {{count}} selected tasks?", "Are you sure you wish to {{action}} the {{count}} selected tasks?_plural": "Are you sure you wish to {{action}} the {{count}} selected tasks?", @@ -58,6 +65,7 @@ "Automatically log sent MailChimp campaigns in contact task history": "Automatically log sent MailChimp campaigns in contact task history", "Base": "Base", "Benefits Charge": "Benefits Charge", + "Benefits is a required field": "Benefits is a required field", "Benefits plan is required": "Benefits plan is required", "Benefits plan must be one of the options": "Benefits plan must be one of the options", "BOTH": "Both", @@ -86,6 +94,7 @@ "Comparison and details about Roth vs Traditional 403(b) retirement plans.": "Comparison and details about Roth vs Traditional 403(b) retirement plans.", "Complete {{activityType}}": "Complete {{activityType}}", "COMPLETED": "Completed", + "Conference Savings Account": "Conference Savings Account", "Congratulations!<1>You're all set!": "Congratulations!<1>You're all set!", "Connect MailChimp": "Connect MailChimp", "Contact commitment info updated!": "Contact commitment info updated!", @@ -102,6 +111,7 @@ "CULTIVATE_RELATIONSHIP": "Cultivate Relationship", "Current": "Current", "Current MHA": "Current MHA", + "Current Salary": "Current Salary", "Current step is not defined or does not exist.": "Current step is not defined or does not exist.", "DataServer": "DataServer", "Date Committed": "Date Committed", @@ -124,17 +134,22 @@ "Due Date {{ minimumDate }} - {{ maximumDate }}": "Due Date: {{ minimumDate }} - {{ maximumDate }}", "e.g., Emergency Fund, Equipment": "e.g., Emergency Fund, Equipment", "e.g., Freelance, Side Business": "e.g., Freelance, Side Business", + "Earnings REB": "Earnings REB", "Edit Address Icon": "Edit Address Icon", "Edit Contact Details": "Edit Contact Details", "Edit Contact Mailing Details": "Edit Contact Mailing Details", "Edit Mailing": "Edit Mailing", "Edit Other Icon": "Edit Other Icon", + "Edit Stop Date": "Edit Stop Date", "effective_date_banner_message": "effective_date_banner_message", "Electronic Messages": "Electronic Messages", "EMAIL": "Email", "Email Newsletter List": "Email Newsletter List", + "End date must be after transfer date": "End date must be after transfer date", + "Enter amounts for the following categories of reimbursable and ministry expenses. The <2>MPGA tool on StaffWeb can show you your averages in some of these categories. If you did not take full reimbursements for the entire year, or if your reimbursements were abnormally high (e.g. you had a surgery or bought a new computer), or low (e.g. no summer mission), you will want to adjust the averages from the MPGA to reflect an average year. Click the link above, go to the Income/Expenses tab, and look under the Ministry Expenses section.": "Enter amounts for the following categories of reimbursable and ministry expenses. The <2>MPGA tool on StaffWeb can show you your averages in some of these categories. If you did not take full reimbursements for the entire year, or if your reimbursements were abnormally high (e.g. you had a surgery or bought a new computer), or low (e.g. no summer mission), you will want to adjust the averages from the MPGA to reflect an average year. Click the link above, go to the Income/Expenses tab, and look under the Ministry Expenses section.", "Entertainment": "Entertainment", "Error occurred while updating mailing information": "Error occurred while updating mailing information", + "Error saving changes": "Error saving changes", "Error updating phone numbers": "Error updating phone numbers", "EVERY_2_MONTHS": "Every 2 Months", "EVERY_2_WEEKS": "Every 2 Weeks", @@ -146,6 +161,8 @@ "EXPIRED_REFERRAL": "Expired Referral", "Facebook Message": "Facebook Message", "FACEBOOK_MESSAGE": "Facebook Message", + "Failed to add stop date": "Failed to add stop date", + "Failed to update stop date": "Failed to update stop date", "fairRentalValueQuestion1": "fairRentalValueQuestion1", "fairRentalValueQuestion2": "fairRentalValueQuestion2", "Family size is required": "Family size is required", @@ -155,6 +172,7 @@ "Filter ({{count}})_one": "Filter ({{count}})", "Filter ({{count}})_other": "Filter ({{count}})", "Filter ({{count}})_plural": "Filter ({{count}})", + "Final total goal including attrition rate applied to line 6.": "Final total goal including attrition rate applied to line 6.", "Financial": "Financial", "First name is required": "First name is required", "First you need to ": "First you need to ", @@ -179,11 +197,13 @@ "Good Evening, {{ firstName }}.": "Good Evening, {{ firstName }}.", "Good Morning, {{ firstName }}.": "Good Morning, {{ firstName }}.", "Greeting (used in export)": "Greeting (used in export)", + "Help logo": "Help logo", "Hide Right Panel": "Hide Right Panel", "Historic": "Historic", "HOURS": "Hours", "Housing": "Housing", "How the notification will be sent": "How the notification will be sent", + "HR Tools | MHA Calculation Form": "HR Tools | MHA Calculation Form", "If blank you will not be notified": "If blank you will not be notified", "If you are already logged in using your ministry account, you'll need to contact your donation services team to request access.": "If you are already logged in using your ministry account, you'll need to contact your donation services team to request access.", "If you have an existing MailChimp list you'd like to use, Great!\n Or, create a new one for your {{appName}} connection.": "If you have an existing MailChimp list you'd like to use, Great!\n Or, create a new one for your {{appName}} connection.", @@ -195,7 +215,6 @@ "Incident income must be positive": "Incident income must be positive", "Income & Expenses": "Income & Expenses", "Income Label": "Income Label", - "Incomplete": "Incomplete", "Individual Completed": "Individual Completed", "Information about gross annual salary calculations and components.": "Information about gross annual salary calculations and components.", "Information about medical expense deductions and healthcare benefits.": "Information about medical expense deductions and healthcare benefits.", @@ -225,9 +244,11 @@ "Medical Mileage": "Medical Mileage", "Messages": "Messages", "MHA amount per paycheck must be positive": "MHA amount per paycheck must be positive", + "MHA Calculation Form": "MHA Calculation Form", "MHA Calculator": "MHA Calculator", "Minimum": "Minimum", "Minimum Due Date {{ minimumDate }}": "Minimum Due Date: {{ minimumDate }}", + "Minister's Housing Allowance Request": "Minister's Housing Allowance Request", "Ministry Location": "Ministry Location", "Ministry Mileage": "Ministry Mileage", "Ministry Partner Development": "Ministry Partner Development", @@ -235,6 +256,7 @@ "MOBILE": "Mobile", "MONTHLY": "Monthly", "Monthly Activity": "Monthly Activity", + "Monthly Base × (1 + Geographic Multiplier)": "Monthly Base × (1 + Geographic Multiplier)", "Monthly breakdown of gross salary before deductions.": "Monthly breakdown of gross salary before deductions.", "Monthly Commitment Average": "Monthly Commitment Average", "Monthly Commitment Goal": "Monthly Commitment Goal", @@ -243,11 +265,15 @@ "Monthly expenses is required": "Monthly expenses is required", "Monthly expenses must be positive": "Monthly expenses must be positive", "MPDX": "MPDX", + "MPDX does not have permission to access your photos. Enable photo access for MPDX in your device settings and try again.": "MPDX does not have permission to access your photos. Enable photo access for MPDX in your device settings and try again.", + "MPDX does not have permission to use the camera. Enable camera access for MPDX in your device settings and try again.": "MPDX does not have permission to use the camera. Enable camera access for MPDX in your device settings and try again.", "MPGA Monthly Report": "MPGA Monthly Report", + "Must be greater than $0.": "Must be greater than $0.", "Must use a positive number for Admin Cost": "Must use a positive number for Admin Cost", "Must use a positive number for Initial Goal": "Must use a positive number for Initial Goal", "Must use a positive number for Letter Cost": "Must use a positive number for Letter Cost", "Name Account": "Name Account", + "Need to update the amount you're transferring each month? No problem! Just set a stop date for the end of the current month on your existing transfer. After that, go ahead and set up a brand-new monthly transfer with the updated amount.": "Need to update the amount you're transferring each month? No problem! Just set a stop date for the end of the current month on your existing transfer. After that, go ahead and set up a brand-new monthly transfer with the updated amount.", "NEVER_ASK": "Never Ask", "NEVER_CONTACTED": "Never Contacted", "New Appeal Pledges": "New Appeal Pledges", @@ -265,6 +291,7 @@ "Newsletter: {{newsletter}}": "Newsletter: {{newsletter}}", "Next Ask Increase": "Next Ask Increase", "Next, ": "Next, ", + "No changes have been made": "No changes have been made", "No Comments to show.": "No Comments to show.", "No Contacts to show.": "No Contacts to show.", "No phone numbers were updated": "No phone numbers were updated", @@ -274,6 +301,7 @@ "Non Staff Spouse Income": "Non Staff Spouse Income", "NONE": "None", "NOT_INTERESTED": "Not Interested", + "Note (Optional)": "Note (Optional)", "Notification": "Notification", "On your email newsletter list but has no people with a valid email address": "On your email newsletter list but has no people with a valid email address", "On: {{when}}": "On: {{when}}", @@ -296,6 +324,8 @@ "pending": "pending", "Percentage calculation for combined Roth and Traditional 403(b) contributions.": "Percentage calculation for combined Roth and Traditional 403(b) contributions.", "Period": "Period", + "Person Number: {{personNumbers}}_one": "Person Number: {{personNumbers}}", + "Person Number: {{personNumbers}}_other": "Person Numbers: {{personNumbers}}", "Phone Calls": "Phone Calls", "Phone Dials": "Phone Dials", "Phone numbers updated!": "Phone numbers updated!", @@ -351,6 +381,7 @@ "Reports - Partner Giving Analysis": "Reports - Partner Giving Analysis", "Reports - Salary": "Reports - Salary", "requestSummaryCardInfo": "requestSummaryCardInfo", + "Required field.": "Required field.", "RESEARCH_ABANDONED": "Research Abandoned", "Resetting the welcome tour failed.": "Resetting the welcome tour failed.", "Resulting Appointments": "Resulting Appointments", @@ -360,6 +391,7 @@ "Roth 403(b) contribution must be positive": "Roth 403(b) contribution must be positive", "Roth 403(b), Traditional 403b": "Roth 403(b), Traditional 403b", "rows per page": "rows per page", + "Salary Calculator": "Salary Calculator", "Salary Request": "Salary Request", "Saving setup phase failed.": "Saving setup phase failed.", "Scheduled": "Scheduled", @@ -386,9 +418,13 @@ "Spouse's Personal": "Spouse's Personal", "Staff Development": "Staff Development", "Status: {{status}}": "Status: {{status}}", + "Stop Date": "Stop Date", + "Stop date added successfully": "Stop date added successfully", + "Stop date updated successfully": "Stop date updated successfully", "Stop ongoing Transfer": "Stop ongoing Transfer", "Stop Transfer: ${{transfer}}": "Stop Transfer: ${{transfer}}", "Stopping Impersonating and redirecting you to the legacy MPDX": "Stopping Impersonating and redirecting you to the legacy MPDX", + "Subtotal × {{rate}}": "Subtotal × {{rate}}", "Subtotal with 12% admin charge": "Subtotal with 12% admin charge", "Summer Missions": "Summer Missions", "Supplies": "Supplies", @@ -396,6 +432,7 @@ "Support Letter": "Support Letter", "Support Letters": "Support Letters", "SUPPORT_LETTER": "Support Letter", + "Swap": "Swap", "Tag {{tag}}": "Tag: {{tag}}", "Talk To In Person": "Talk To In Person", "TALK_TO_IN_PERSON": "Talk To In Person", @@ -423,6 +460,7 @@ "That's it! Set it and leave it! Now your MailChimp list is\n continuously up to date with your {{appName}} Contacts. That's just\n the surface. Click over to the {{appName}} Help site for more in-depth\n details.": "That's it! Set it and leave it! Now your MailChimp list is\n continuously up to date with your {{appName}} Contacts. That's just\n the surface. Click over to the {{appName}} Help site for more in-depth\n details.", "The amount entered here will be reflected in your total MPD goal. To look at your goal without spouse's salary, leave this blank.": "The amount entered here will be reflected in your total MPD goal. To look at your goal without spouse's salary, leave this blank.", "The Key / Relay": "The Key / Relay", + "The total is the greater of the {{floor}} minimum or your calculated amount.": "The total is the greater of the {{floor}} minimum or your calculated amount.", "There is an error with your MailChimp connection. Please disconnect and reconnect to MailChimp.": "There is an error with your MailChimp connection. Please disconnect and reconnect to MailChimp.", "These {{number}} contacts have been previously excluded from this appeal. Are you certain you wish to add them?": "These {{number}} contacts have been previously excluded from this appeal. Are you certain you wish to add them?", "these resources from Ramsey Solutions": "these resources from Ramsey Solutions", @@ -430,6 +468,7 @@ "This field is required": "This field is required", "This is the primary email for every person in contacts marked as Newsletter-Email or Newsletter-Both. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.": "This is the primary email for every person in contacts marked as Newsletter-Email or Newsletter-Both. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.", "This is the primary email for every person in the selected contacts. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.": "This is the primary email for every person in the selected contacts. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.", + "This version of the MPDX app is no longer supported. Update to the latest version to keep using MPDX.": "This version of the MPDX app is no longer supported. Update to the latest version to keep using MPDX.", "This will log you in on behalf of the user specified below. You will be able to see what the user sees on {{appName}}.\n Impersonation sessions have 20 minute timeout where you will automatically be logged out of the user's account after\n the specified amount of time. Once you are finished impersonating, click 'Exit Impersonation Mode' at the top of the\n page.": "This will log you in on behalf of the user specified below. You will be able to see what the user sees on {{appName}}.\n Impersonation sessions have 20 minute timeout where you will automatically be logged out of the user's account after\n the specified amount of time. Once you are finished impersonating, click 'Exit Impersonation Mode' at the top of the\n page.", "This Year": "This Year", "To Do": "To Do", @@ -458,9 +497,12 @@ "Tools - Merge Contacts": "Tools - Merge Contacts", "Tools - Merge People": "Tools - Merge People", "Total Goal (line 16 x 1.06 attrition)": "Total Goal (line 16 x 1.06 attrition)", + "Total Goal (line 6 with {{attrition}} attrition)": "Total Goal (line 6 with {{attrition}} attrition)", + "Total reimbursable information": "Total reimbursable information", "Traditional 403(b) contribution must be positive": "Traditional 403(b) contribution must be positive", "Transfer failed": "Transfer failed", "Transfer successful": "Transfer successful", + "TRANSFER TO": "TRANSFER TO", "Transportation": "Transportation", "Travel": "Travel", "Twelve month report table": "Twelve month report table", @@ -468,15 +510,18 @@ "Unpaid Vacation": "Unpaid Vacation", "UNRESPONSIVE": "Unresponsive", "Update Information": "Update Information", + "Update MPDX": "Update MPDX", "Updated 3 min ago": "Updated 3 min ago", "User options updated!": "User options updated!", "Utilities": "Utilities", "Video Call": "Video Call", "View Spouse": "View Spouse", "View Your Information": "View Your Information", + "Want your monthly transfer to end at a certain point? You can set a stop date—super handy! Just a heads-up: once it’s there, it can’t be removed, but you can change it to a different date if needed.": "Want your monthly transfer to end at a certain point? You can set a stop date—super handy! Just a heads-up: once it’s there, it can’t be removed, but you can change it to a different date if needed.", "Week on MPD:": "Week on MPD:", "WEEKLY": "Weekly", "What are your one-time financial goals?": "What are your one-time financial goals?", + "What's New": "What's New", "Yearly": "Yearly", "Years on staff is required": "Years on staff is required", "Years on staff must be one of the options": "Years on staff must be one of the options", @@ -493,6 +538,7 @@ "You may request up to your Board Approved MHA Amount of {{approvedAmount}}.": "You may request up to your Board Approved MHA Amount of {{approvedAmount}}.", "You may request up to your Board-approved MHA amount of {{approvedAmount}} combined.": "You may request up to your Board-approved MHA amount of {{approvedAmount}} combined.", "You need to create a list on MailChimp that {{appName}} can use for your newsletter.": "You need to create a list on MailChimp that {{appName}} can use for your newsletter.", + "Your {{combined}} Gross Requested Salary exceeds your {{combined}} Maximum Allowable Salary. Please make adjustments to your Salary Request above or fill out the Approval Process Section below to request a higher amount through our Progressive Approvals process. This may take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.": "Your {{combined}} Gross Requested Salary exceeds your {{combined}} Maximum Allowable Salary. Please make adjustments to your Salary Request above or fill out the Approval Process Section below to request a higher amount through our Progressive Approvals process. This may take {{timeframe}} as it needs to be signed off by the {{approver}}. This may affect your selected effective date.", "Your contacts are now automatically syncing with MailChimp": "Your contacts are now automatically syncing with MailChimp", "Your MailChimp sync has been started. This process may take up to 4 hours to complete.": "Your MailChimp sync has been started. This process may take up to 4 hours to complete." } diff --git a/public/manifest.json b/public/manifest.json index ac587fe7fe..fc893cd639 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,11 +1,15 @@ { + "id": "/", "name": "MPDX", + "short_name": "MPDX", + "description": "Fundraising software built for ministries, missionaries and churches.", "theme_color": "#05699b", "background_color": "#05699b", "display": "standalone", - "Scope": "/", + "scope": "/", "start_url": "/", - "short_name": "MPDX", + "orientation": "any", + "categories": ["productivity", "business"], "icons": [ { "src": "/icons/icon-72x72.png", @@ -48,6 +52,5 @@ "type": "image/png", "purpose": "any maskable" } - ], - "splash_pages": null + ] } diff --git a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonModalSave.test.tsx b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonModalSave.test.tsx index dd35fe2204..3e18903032 100644 --- a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonModalSave.test.tsx +++ b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonModalSave.test.tsx @@ -138,6 +138,58 @@ const TestComponent: React.FC = ({ contactData }) => (
); +describe('PersonModal - native camera avatar integration', () => { + beforeEach(() => { + window.URL.createObjectURL = jest.fn().mockReturnValue('blob:1'); + window.URL.revokeObjectURL = jest.fn(); + (uploadAvatar as jest.Mock).mockResolvedValue(undefined); + // Use the real validator to prove a camera-shaped file passes validation + (validateAvatar as jest.Mock).mockImplementation( + jest.requireActual('./uploadAvatar') + .validateAvatar, + ); + }); + + it('uploads a camera-shaped file that survives validateAvatar on save', async () => { + const { getByTestId, getByText } = render( + , + ); + + // Shaped exactly like useNativeCamera output: avatar.jpeg, image/jpeg, < 1MB + const cameraFile = new File([new Uint8Array(150_000)], 'avatar.jpeg', { + type: 'image/jpeg', + }); + userEvent.upload(getByTestId('PersonNameUpload'), cameraFile); + + // The real validateAvatar accepted the file — no validation error snackbar + expect(mockEnqueue).not.toHaveBeenCalled(); + + userEvent.click(getByText('Save')); + + await waitFor(() => + expect(uploadAvatar).toHaveBeenCalledWith( + expect.objectContaining({ + personId: mockPerson.id, + file: cameraFile, + }), + ), + ); + await waitFor(() => + expect(mockEnqueue).toHaveBeenCalledWith('Person updated successfully', { + variant: 'success', + }), + ); + }); +}); + describe('PersonModal - Saving Deceased', () => { const cache = new InMemoryCache(); jest.spyOn(cache, 'readQuery'); diff --git a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.test.tsx b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.test.tsx new file mode 100644 index 0000000000..a1f61c86c6 --- /dev/null +++ b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.test.tsx @@ -0,0 +1,328 @@ +import React from 'react'; +import { ThemeProvider } from '@mui/material/styles'; +import { render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { Formik } from 'formik'; +import { gqlMock } from '__tests__/util/graphqlMocking'; +import { + PersonCreateInput, + PersonUpdateInput, +} from 'src/graphql/types.generated'; +import { useIsOnline } from 'src/hooks/useIsOnline'; +import { useNativeCamera } from 'src/hooks/useNativeCamera'; +import theme from '../../../../../../../../theme'; +import { + ContactPeopleFragment, + ContactPeopleFragmentDoc, +} from '../../../ContactPeople.generated'; +import { NewSocial } from '../PersonModal'; +import { PersonName } from './PersonName'; + +jest.mock('src/hooks/useNativeCamera'); +jest.mock('src/hooks/useIsOnline'); + +const mockEnqueue = jest.fn(); + +jest.mock('notistack', () => ({ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + ...jest.requireActual('notistack'), + useSnackbar: () => { + return { + enqueueSnackbar: mockEnqueue, + }; + }, +})); + +const mockedUseNativeCamera = useNativeCamera as jest.MockedFunction< + typeof useNativeCamera +>; +const mockedUseIsOnline = useIsOnline as jest.MockedFunction< + typeof useIsOnline +>; +const getAvatarPhoto = jest.fn(); +const setAvatar = jest.fn(); + +const mock = gqlMock(ContactPeopleFragmentDoc, { + mocks: { + people: { + nodes: [ + { + firstName: 'John', + lastName: 'Doe', + avatar: '', + }, + ], + }, + }, +}); +const mockPerson = mock.people.nodes[0]; + +const TestComponent: React.FC = () => ( + + + initialValues={{ + contactId: 'contact-1', + firstName: 'John', + lastName: 'Doe', + title: '', + suffix: '', + newSocials: [], + }} + onSubmit={jest.fn()} + > + {(formikProps) => ( + + )} + + +); + +describe('PersonName', () => { + beforeEach(() => { + mockedUseIsOnline.mockReturnValue(true); + mockedUseNativeCamera.mockReturnValue({ + isNative: false, + getAvatarPhoto, + }); + }); + + describe('on the web (browser)', () => { + it('clicks the hidden file input and renders no menu when the avatar button is clicked', () => { + const { getByRole, getByTestId, queryByRole } = render(); + + const fileInput = getByTestId('PersonNameUpload'); + const clickSpy = jest.spyOn(fileInput, 'click'); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + + expect(clickSpy).toHaveBeenCalledTimes(1); + expect(queryByRole('menu')).not.toBeInTheDocument(); + expect(getAvatarPhoto).not.toHaveBeenCalled(); + // No menu on the web, so the trigger must not advertise one + expect(getByRole('button', { name: 'Change photo' })).not.toHaveAttribute( + 'aria-haspopup', + ); + }); + + it('passes the selected file to setAvatar and resets the input', () => { + const { getByTestId } = render(); + + const fileInput = getByTestId('PersonNameUpload') as HTMLInputElement; + const file = new File(['contents'], 'image.png', { type: 'image/png' }); + userEvent.upload(fileInput, file); + + expect(setAvatar).toHaveBeenCalledTimes(1); + expect(setAvatar).toHaveBeenCalledWith(file); + // Resetting the value is essential for the file size validation alert + // on repeated uploads + expect(fileInput.value).toBe(''); + }); + + it('still opens the file input while offline (no native gating on the web)', () => { + mockedUseIsOnline.mockReturnValue(false); + const { getByRole, getByTestId, queryByRole } = render(); + + const fileInput = getByTestId('PersonNameUpload'); + const clickSpy = jest.spyOn(fileInput, 'click'); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + + expect(clickSpy).toHaveBeenCalledTimes(1); + expect(queryByRole('menu')).not.toBeInTheDocument(); + expect(mockEnqueue).not.toHaveBeenCalled(); + }); + }); + + describe('in the native shell', () => { + beforeEach(() => { + mockedUseNativeCamera.mockReturnValue({ + isNative: true, + getAvatarPhoto, + }); + }); + + it('shows the photo source menu instead of clicking the file input', async () => { + const { findByRole, getByRole, getByTestId } = render(); + + const fileInput = getByTestId('PersonNameUpload'); + const clickSpy = jest.spyOn(fileInput, 'click'); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + + expect( + await findByRole('menuitem', { name: 'Take Photo' }), + ).toBeInTheDocument(); + expect( + getByRole('menuitem', { name: 'Choose from Library' }), + ).toBeInTheDocument(); + expect(clickSpy).not.toHaveBeenCalled(); + }); + + it('wires menu ARIA attributes onto the avatar trigger', async () => { + const { findByRole, getByRole } = render(); + + const trigger = getByRole('button', { name: 'Change photo' }); + expect(trigger).toHaveAttribute('aria-haspopup', 'menu'); + expect(trigger).toHaveAttribute('aria-expanded', 'false'); + expect(trigger).not.toHaveAttribute('aria-controls'); + + userEvent.click(trigger); + + const menu = await findByRole('menu'); + expect(trigger).toHaveAttribute('aria-expanded', 'true'); + expect(trigger).toHaveAttribute('aria-controls', menu.id); + expect(menu).toHaveAttribute('aria-labelledby', trigger.id); + }); + + it('takes a photo and passes the file to setAvatar', async () => { + const file = new File(['camera-bytes'], 'avatar.jpeg', { + type: 'image/jpeg', + }); + getAvatarPhoto.mockResolvedValue({ outcome: 'success', file }); + const { findByRole, getByRole, queryByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click(await findByRole('menuitem', { name: 'Take Photo' })); + + await waitFor(() => expect(setAvatar).toHaveBeenCalledWith(file)); + expect(getAvatarPhoto).toHaveBeenCalledWith('camera'); + await waitFor(() => expect(queryByRole('menu')).not.toBeInTheDocument()); + }); + + it('chooses a photo from the library and passes the file to setAvatar', async () => { + const file = new File(['library-bytes'], 'avatar.jpeg', { + type: 'image/jpeg', + }); + getAvatarPhoto.mockResolvedValue({ outcome: 'success', file }); + const { findByRole, getByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click( + await findByRole('menuitem', { name: 'Choose from Library' }), + ); + + await waitFor(() => expect(setAvatar).toHaveBeenCalledWith(file)); + expect(getAvatarPhoto).toHaveBeenCalledWith('photos'); + }); + + it('shows an error when camera permission is denied', async () => { + getAvatarPhoto.mockResolvedValue({ + outcome: 'permission-denied', + source: 'camera', + }); + const { findByRole, getByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click(await findByRole('menuitem', { name: 'Take Photo' })); + + await waitFor(() => + expect(mockEnqueue).toHaveBeenCalledWith( + 'MPDX does not have permission to use the camera. Enable camera access for MPDX in your device settings and try again.', + { variant: 'error' }, + ), + ); + expect(setAvatar).not.toHaveBeenCalled(); + }); + + it('shows an error when photo library permission is denied', async () => { + getAvatarPhoto.mockResolvedValue({ + outcome: 'permission-denied', + source: 'photos', + }); + const { findByRole, getByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click( + await findByRole('menuitem', { name: 'Choose from Library' }), + ); + + await waitFor(() => + expect(mockEnqueue).toHaveBeenCalledWith( + 'MPDX does not have permission to access your photos. Enable photo access for MPDX in your device settings and try again.', + { variant: 'error' }, + ), + ); + expect(setAvatar).not.toHaveBeenCalled(); + }); + + it('brands the permission-denied messages with the configured app name', async () => { + const originalAppName = process.env.APP_NAME; + process.env.APP_NAME = 'StaffApp'; + try { + getAvatarPhoto.mockResolvedValue({ + outcome: 'permission-denied', + source: 'camera', + }); + const { findByRole, getByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click(await findByRole('menuitem', { name: 'Take Photo' })); + + await waitFor(() => + expect(mockEnqueue).toHaveBeenCalledWith( + 'StaffApp does not have permission to use the camera. Enable camera access for StaffApp in your device settings and try again.', + { variant: 'error' }, + ), + ); + } finally { + process.env.APP_NAME = originalAppName; + } + }); + + it('does nothing when the user cancels the capture', async () => { + getAvatarPhoto.mockResolvedValue({ outcome: 'canceled' }); + const { findByRole, getByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click(await findByRole('menuitem', { name: 'Take Photo' })); + + await waitFor(() => + expect(getAvatarPhoto).toHaveBeenCalledWith('camera'), + ); + expect(setAvatar).not.toHaveBeenCalled(); + expect(mockEnqueue).not.toHaveBeenCalled(); + }); + + it('shows a generic error when the capture fails', async () => { + getAvatarPhoto.mockResolvedValue({ + outcome: 'error', + error: new Error('Native failure'), + }); + const { findByRole, getByRole } = render(); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + userEvent.click(await findByRole('menuitem', { name: 'Take Photo' })); + + await waitFor(() => + expect(mockEnqueue).toHaveBeenCalledWith( + 'Failed to get the photo. Please try again.', + { variant: 'error' }, + ), + ); + expect(setAvatar).not.toHaveBeenCalled(); + }); + + it('shows an offline warning instead of the menu when offline', () => { + mockedUseIsOnline.mockReturnValue(false); + const { getByRole, getByTestId, queryByRole } = render(); + + const fileInput = getByTestId('PersonNameUpload'); + const clickSpy = jest.spyOn(fileInput, 'click'); + + userEvent.click(getByRole('button', { name: 'Change photo' })); + + expect(mockEnqueue).toHaveBeenCalledWith( + 'Cannot change the photo while offline.', + { variant: 'warning' }, + ); + expect(queryByRole('menu')).not.toBeInTheDocument(); + expect(clickSpy).not.toHaveBeenCalled(); + expect(getAvatarPhoto).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.tsx b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.tsx index c2e5c58158..c911f2c87b 100644 --- a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.tsx +++ b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonName/PersonName.tsx @@ -1,13 +1,29 @@ -import React, { useRef } from 'react'; +import React, { useRef, useState } from 'react'; +import PhotoCameraOutlinedIcon from '@mui/icons-material/PhotoCameraOutlined'; +import PhotoLibraryOutlinedIcon from '@mui/icons-material/PhotoLibraryOutlined'; import UploadIcon from '@mui/icons-material/Upload'; -import { Avatar, Grid, IconButton, TextField, Typography } from '@mui/material'; +import { + Avatar, + Grid, + IconButton, + ListItemIcon, + ListItemText, + Menu, + MenuItem, + TextField, + Typography, +} from '@mui/material'; import { styled } from '@mui/material/styles'; import { FormikProps } from 'formik'; +import { useSnackbar } from 'notistack'; import { useTranslation } from 'react-i18next'; import { PersonCreateInput, PersonUpdateInput, } from 'src/graphql/types.generated'; +import { useIsOnline } from 'src/hooks/useIsOnline'; +import { NativePhotoSource, useNativeCamera } from 'src/hooks/useNativeCamera'; +import { getAppName } from 'src/lib/getAppName'; import { ModalSectionContainer } from '../ModalSectionContainer/ModalSectionContainer'; import { NewSocial, Person } from '../PersonModal'; @@ -59,9 +75,64 @@ export const PersonName: React.FC = ({ errors, } = formikProps; + const { enqueueSnackbar } = useSnackbar(); + const appName = getAppName(); + const { isNative, getAvatarPhoto } = useNativeCamera(); + const isOnline = useIsOnline(); + const [menuAnchorEl, setMenuAnchorEl] = useState(null); + const fileRef = useRef(null); - const handleFileClick = () => { - fileRef.current?.click(); + const handleAvatarClick: React.MouseEventHandler = ( + event, + ) => { + if (!isNative) { + // Web/browser path, unchanged: open the hidden file input + fileRef.current?.click(); + return; + } + if (!isOnline) { + // Avatar upload is online-only — degrade cleanly in the native shell + enqueueSnackbar(t('Cannot change the photo while offline.'), { + variant: 'warning', + }); + return; + } + setMenuAnchorEl(event.currentTarget); + }; + const handleMenuClose = () => { + setMenuAnchorEl(null); + }; + const handleNativePhoto = async (source: NativePhotoSource) => { + setMenuAnchorEl(null); + const result = await getAvatarPhoto(source); + switch (result.outcome) { + case 'success': + // Existing pipeline: validate, preview, upload on save + setAvatar(result.file); + break; + case 'canceled': + // Backing out of the camera/picker is not an error + break; + case 'permission-denied': + enqueueSnackbar( + result.source === 'camera' + ? t( + '{{appName}} does not have permission to use the camera. Enable camera access for {{appName}} in your device settings and try again.', + { appName }, + ) + : t( + '{{appName}} does not have permission to access your photos. Enable photo access for {{appName}} in your device settings and try again.', + { appName }, + ), + { variant: 'error' }, + ); + break; + case 'error': + enqueueSnackbar(t('Failed to get the photo. Please try again.'), { + variant: 'error', + }); + break; + } }; const handleFileChange: React.ChangeEventHandler = ( event, @@ -80,7 +151,18 @@ export const PersonName: React.FC = ({ <> {person && ( - +