diff --git a/.circleci/config.yml b/.circleci/config.yml index bbd706d2c..cf974efb1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -71,6 +71,14 @@ jobs: command: | pnpm update-netlify-ignore git add -A && git diff --exit-code --staged + test_unit: + <<: *default-job + steps: + - checkout + - install_js + - run: + name: 'Run tests' + command: pnpm test workflows: version: 2 pipeline: diff --git a/package.json b/package.json index 843f936a2..718410c69 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "prettier": "pretty-quick --ignore-path .eslintignore", "prettier:all": "prettier --write . --ignore-path .eslintignore", "update-netlify-ignore": "node ./update-netlify-ignore.js code-infra-dashboard", + "test": "vitest", "release:prepare": "pnpm install && pnpm release:build", "release:version": "lerna version --no-changelog --no-push --no-git-tag-version --no-private", "release:build": "pnpm --filter \"./packages/**\" run build", @@ -41,7 +42,8 @@ "lerna": "^8.2.2", "prettier": "^3.3.3", "pretty-quick": "^4.0.0", - "typescript": "^4.6.4" + "typescript": "^4.6.4", + "vitest": "^3.1.3" }, "dependencies": { "@next/eslint-plugin-next": "^14.2.4" diff --git a/packages/babel-plugin-display-name/LICENSE b/packages/babel-plugin-display-name/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/packages/babel-plugin-display-name/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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 + + http://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. diff --git a/packages/babel-plugin-display-name/README.md b/packages/babel-plugin-display-name/README.md new file mode 100644 index 000000000..1219b3ab7 --- /dev/null +++ b/packages/babel-plugin-display-name/README.md @@ -0,0 +1,52 @@ +# @babel-plugin-display-name + +Forked from: https://github.com/zendesk/babel-plugin-react-displayname + +## What does it do? + +This plugin converts the following: + +```tsx +const Linebreak = React.memo(() => { + return
; +}); + +const Img = function () { + return ; +}; +``` + +into: + +```tsx +const Linebreak = React.memo(function _Linebreak() { + return
; +}); +Linebreak.displayName = 'Linebreak'; + +const Img = function () { + return ; +}; +Img.displayName = 'Img'; +``` + +## Options + +### `allowedCallees` + +`Object.`, defaults to `{ "react": ["createContext"] }` + +Enables generation of displayNames for certain called functions. + +```json +{ + "plugins": [ + "@probablyup/babel-plugin-react-displayname", + { + "allowedCallees": { + "react": ["createComponent"] + } + } + ] +} +``` diff --git a/packages/babel-plugin-display-name/package.json b/packages/babel-plugin-display-name/package.json new file mode 100644 index 000000000..e2e60c410 --- /dev/null +++ b/packages/babel-plugin-display-name/package.json @@ -0,0 +1,42 @@ +{ + "name": "@mui/internal-babel-plugin-display-name", + "private": true, + "description": "Babel plugin for automatic React display name generation with tree-shaking and prefix support, forked from @zendesk/babel-plugin-react-displayname.", + "repository": { + "type": "git", + "url": "git+https://github.com/mui/mui-public.git", + "directory": "packages/babel-plugin-display-name" + }, + "main": "src/index.js", + "author": "mui", + "files": [ + "src/index.js" + ], + "scripts": { + "test": "jest" + }, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "devDependencies": { + "@babel/core": "^7.20.2", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@types/babel__core": "^7.20.5", + "@types/babel__helper-plugin-utils": "^7.10.3", + "prettier": "^2.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@babel/preset-react": "^7.0.0" + }, + "license": "Apache-2.0", + "keywords": [ + "displayName", + "babel", + "react", + "babel-plugin" + ], + "homepage": "https://github.com/mui/mui-public" +} diff --git a/packages/babel-plugin-display-name/src/index.js b/packages/babel-plugin-display-name/src/index.js new file mode 100644 index 000000000..69dc081e6 --- /dev/null +++ b/packages/babel-plugin-display-name/src/index.js @@ -0,0 +1,447 @@ +// @ts-check + +const { declare } = require('@babel/helper-plugin-utils'); + +/** + * @typedef {import('@babel/core')} babel + * @typedef {{ id: babel.types.Expression, computed?: boolean }} ComponentIdentifier + */ + +// remember to set `cacheDirectory` to `false` when modifying this plugin + +const DEFAULT_ALLOWED_CALLEES = { + react: ['createContext', 'forwardRef', 'memo'], +}; + +/** @type {Map} */ +const calleeModuleMapping = new Map(); // Mapping of callee name to module name +const seenDisplayNames = new Set(); + +function applyAllowedCallees(mapping) { + Object.entries(mapping).forEach(([moduleName, methodNames]) => { + methodNames.forEach((methodName) => { + calleeModuleMapping.set(methodName, moduleName); + }); + }); +} + +module.exports = declare((api, options) => { + api.assertVersion(7); + + calleeModuleMapping.clear(); + + applyAllowedCallees(DEFAULT_ALLOWED_CALLEES); + + if (options.allowedCallees) { + applyAllowedCallees(options.allowedCallees); + } + + const t = api.types; + + return { + name: '@probablyup/babel-plugin-react-displayname', + visitor: { + Program() { + // We allow duplicate names across files, + // so we clear when we're transforming on a new file + seenDisplayNames.clear(); + }, + 'FunctionExpression|ArrowFunctionExpression|ObjectMethod': ( + /** @type {babel.NodePath} */ path, + ) => { + // if the parent is a call expression, make sure it's an allowed one + if ( + path.parentPath && path.parentPath.isCallExpression() + ? isAllowedCallExpression(t, path.parentPath) + : true + ) { + if (doesReturnJSX(t, path.node.body)) { + addDisplayNamesToFunctionComponent(t, path); + } + } + }, + CallExpression(path) { + if (isAllowedCallExpression(t, path)) { + addDisplayNamesToFunctionComponent(t, path); + } + }, + }, + }; +}); + +/** + * Checks if this function returns JSX nodes. + * It does not do type-checking, which means calling + * other functions that return JSX will still return `false`. + * + * @param {babel.types} t content of @babel/types package + * @param {babel.types.Statement | babel.types.Expression} node function node + */ +function doesReturnJSX(t, node) { + if (!node) { + return false; + } + + const body = t.toBlock(node).body; + if (!body) { + return false; + } + + return body.some((statement) => { + /** @type {babel.Node | null | undefined} */ + let currentNode; + + if (t.isReturnStatement(statement)) { + currentNode = statement.argument; + } else if (t.isExpressionStatement(statement) && !t.isCallExpression(statement.expression)) { + currentNode = statement.expression; + } else { + return false; + } + + if ( + t.isCallExpression(currentNode) && + // detect *.createElement and count it as returning JSX + // this could be improved a lot but will work for the 99% case + t.isMemberExpression(currentNode.callee) && + t.isIdentifier(currentNode.callee.property) && + currentNode.callee.property.name === 'createElement' + ) { + return true; + } + + if (t.isConditionalExpression(currentNode)) { + return isJSX(t, currentNode.consequent) || isJSX(t, currentNode.alternate); + } + + if (t.isLogicalExpression(currentNode)) { + return isJSX(t, currentNode.left) || isJSX(t, currentNode.right); + } + + if (t.isArrayExpression(currentNode)) { + return currentNode.elements.some((ele) => isJSX(t, ele)); + } + + return isJSX(t, currentNode); + }); +} + +/** + * Checks if this node is JSXElement or JSXFragment, + * which are the root nodes of react components. + * + * @param {babel.types} t content of @babel/types package + * @param {babel.Node | null | undefined} node babel node + */ +function isJSX(t, node) { + return t.isJSXElement(node) || t.isJSXFragment(node); +} + +/** + * Checks if this path is an allowed CallExpression. + * + * @param {babel.types} t content of @babel/types package + * @param {babel.NodePath} path path of callee + */ +function isAllowedCallExpression(t, path) { + const calleePath = path.get('callee'); + const callee = /** @type {babel.types.Expression} */ (path.node.callee); + /** @type {string | undefined} */ + const calleeName = /** @type {any} */ (callee).name || /** @type {any} */ (callee).property?.name; + const moduleName = calleeName && calleeModuleMapping.get(calleeName); + + if (!moduleName) { + return false; + } + + // If the callee is an identifier expression, then check if it matches + // a named import, e.g. `import {createContext} from 'react'`. + if (calleePath.isIdentifier()) { + return calleePath.referencesImport(moduleName, calleeName); + } + + // Otherwise, check if the member expression's object matches + // a default import (e.g. `import React from 'react'`) + // or namespace import (e.g. `import * as React from 'react') + if (calleePath.isMemberExpression()) { + const object = calleePath.get('object'); + + return ( + object.referencesImport(moduleName, 'default') || object.referencesImport(moduleName, '*') + ); + } + + return false; +} + +/** + * Adds displayName to the function component if it is: + * - assigned to a variable or object path + * - not within other JSX elements + * - not called by a react hook or _createClass helper + * + * @param {babel.types} t content of @babel/types package + * @param {babel.NodePath} path path of function + */ +function addDisplayNamesToFunctionComponent(t, path) { + /** @type {ComponentIdentifier[]} */ + const componentIdentifiers = []; + if (/** @type {any} */ (path.node).key) { + componentIdentifiers.push({ id: /** @type {any} */ (path.node).key }); + } + + /** @type {babel.NodePath | undefined} */ + let assignmentPath; + let hasCallee = false; + let hasObjectProperty = false; + + const scopePath = path.scope.parent && path.scope.parent.path; + path.find((parentPath) => { + // we've hit the scope, stop going further up + if (parentPath === scopePath) { + return true; + } + + // Ignore functions within jsx + if (isJSX(t, parentPath.node)) { + return true; + } + + if (parentPath.isCallExpression()) { + // Ignore immediately invoked function expressions (IIFEs) + const callee = /** @types {babel.types.Expression} */ parentPath.node.callee; + if (t.isArrowFunctionExpression(callee) || t.isFunctionExpression(callee)) { + return true; + } + + // Ignore instances where displayNames are disallowed + // _createClass(() => ) + // useMemo(() => ) + const calleeName = t.isIdentifier(callee) ? callee.name : undefined; + if (calleeName && (calleeName.startsWith('_') || calleeName.startsWith('use'))) { + return true; + } + + hasCallee = true; + } + + // componentIdentifier = + if (parentPath.isAssignmentExpression()) { + assignmentPath = parentPath.parentPath; + componentIdentifiers.unshift({ + id: /** @type {babel.types.Expression} */ (parentPath.node.left), + }); + return true; + } + + // const componentIdentifier = + if (parentPath.isVariableDeclarator()) { + assignmentPath = parentPath.parentPath; + componentIdentifiers.unshift({ + id: /** @type {babel.types.Expression} */ (parentPath.node.id), + }); + return true; + } + + // if this is not a continuous object key: value pair, stop processing it + if (hasObjectProperty && !(parentPath.isObjectProperty() || parentPath.isObjectExpression())) { + return true; + } + + // { componentIdentifier: } + if (parentPath.isObjectProperty()) { + hasObjectProperty = true; + const node = parentPath.node; + componentIdentifiers.unshift({ + id: /** @type {babel.types.Expression} */ (node.key), + computed: node.computed, + }); + } + + return false; + }); + + if (!assignmentPath || componentIdentifiers.length === 0) { + return; + } + + const name = generateDisplayName(t, componentIdentifiers); + + const pattern = `${name}.displayName`; + + // disallow duplicate names if they were assigned in different scopes + if (seenDisplayNames.has(name) && !hasBeenAssignedPrev(t, assignmentPath, pattern, name)) { + return; + } + + // skip unnecessary addition of name if it is reassigned later on + if (hasBeenAssignedNext(t, assignmentPath, pattern)) { + return; + } + + // at this point we're ready to start pushing code + + if (hasCallee) { + // if we're getting called by some wrapper function, + // give this function a name + setInternalFunctionName(t, path, name); + } + + const displayNameStatement = createDisplayNameStatement(t, componentIdentifiers, name); + + assignmentPath.insertAfter(displayNameStatement); + + seenDisplayNames.add(name); +} + +/** + * Generate a displayName string based on the ids collected. + * + * @param {babel.types} t content of @babel/types package + * @param {ComponentIdentifier[]} componentIdentifiers list of { id, computed } objects + */ +function generateDisplayName(t, componentIdentifiers) { + let displayName = ''; + componentIdentifiers.forEach((componentIdentifier) => { + const node = componentIdentifier.id; + if (!node) { + return; + } + const name = generateNodeDisplayName(t, node); + displayName += componentIdentifier.computed ? `[${name}]` : `.${name}`; + }); + + return displayName.slice(1); +} + +/** + * Generate a displayName string based on the node. + * + * @param {babel.types} t content of @babel/types package + * @param {babel.Node} node identifier or member expression node + */ +function generateNodeDisplayName(t, node) { + if (t.isIdentifier(node)) { + return node.name; + } + + if (t.isMemberExpression(node)) { + const objectDisplayName = generateNodeDisplayName(t, node.object); + const propertyDisplayName = generateNodeDisplayName(t, node.property); + + const res = node.computed + ? `${objectDisplayName}[${propertyDisplayName}]` + : `${objectDisplayName}.${propertyDisplayName}`; + return res; + } + + return ''; +} + +/** + * Checks if this path has been previously assigned to a particular value. + * + * @param {babel.types} t content of @babel/types package + * @param {babel.NodePath} assignmentPath path where assignement will take place + * @param {string} pattern assignment path in string form e.g. `x.y.z` + * @param {string} value assignment value to compare with + * @returns {boolean} + */ +function hasBeenAssignedPrev(t, assignmentPath, pattern, value) { + return assignmentPath.getAllPrevSiblings().some((sibling) => { + const expression = /** @type {babel.NodePath} */ (sibling.get('expression')); + if (!t.isAssignmentExpression(expression.node, { operator: '=' })) { + return false; + } + if (!t.isStringLiteral(expression.node.right, { value })) { + return false; + } + return /** @type {babel.NodePath} */ (expression.get('left')).matchesPattern(pattern); + }); +} + +/** + * Checks if this path will be assigned later in the scope. + * + * @param {babel.types} t content of @babel/types package + * @param {babel.NodePath} assignmentPath path where assignement will take place + * @param {string} pattern assignment path in string form e.g. `x.y.z` + * @returns {boolean} + */ +function hasBeenAssignedNext(t, assignmentPath, pattern) { + return assignmentPath.getAllNextSiblings().some((sibling) => { + const expression = /** @type {babel.NodePath} */ (sibling.get('expression')); + if (!t.isAssignmentExpression(expression.node, { operator: '=' })) { + return false; + } + return /** @type {babel.NodePath} */ (expression.get('left')).matchesPattern(pattern); + }); +} + +/** + * Generate a displayName ExpressionStatement node based on the ids. + * + * @param {babel.types} t content of @babel/types package + * @param {ComponentIdentifier[]} componentIdentifiers list of { id, computed } objects + * @param {string} displayName name of the function component + */ +function createDisplayNameStatement(t, componentIdentifiers, displayName) { + const node = createMemberExpression(t, componentIdentifiers); + + const expression = t.assignmentExpression( + '=', + t.memberExpression(node, t.identifier('displayName')), + t.stringLiteral(displayName), + ); + + const ifStatement = t.ifStatement( + t.binaryExpression( + '!==', + t.memberExpression( + t.memberExpression(t.identifier('process'), t.identifier('env')), + t.identifier('NODE_ENV'), + ), + t.stringLiteral('production'), + ), + t.expressionStatement(expression), + ); + + return ifStatement; +} + +/** + * Helper that creates a MemberExpression node from the ids. + * + * @param {babel.types} t content of @babel/types package + * @param {ComponentIdentifier[]} componentIdentifiers list of { id, computed } objects + * @returns {babel.types.Expression} + */ +function createMemberExpression(t, componentIdentifiers) { + let node = componentIdentifiers[0].id; + if (componentIdentifiers.length > 1) { + for (let i = 1; i < componentIdentifiers.length; i += 1) { + const { id, computed } = componentIdentifiers[i]; + node = t.memberExpression(node, id, computed); + } + } + return node; +} + +/** + * Changes the arrow function to a function expression and gives it a name. + * `name` will be changed to ensure that it is unique within the scope. e.g. `helper` -> `_helper` + * + * @param {babel.types} t content of @babel/types package + * @param {string} name name of function to follow after + */ +function setInternalFunctionName(t, path, name) { + if (!name || path.node.id != null || path.node.key != null) { + return; + } + + const id = path.scope.generateUidIdentifier(name); + if (path.isArrowFunctionExpression()) { + path.arrowFunctionToExpression(); + } + path.node.id = id; +} diff --git a/packages/babel-plugin-display-name/src/index.test.js b/packages/babel-plugin-display-name/src/index.test.js new file mode 100644 index 000000000..462e4a509 --- /dev/null +++ b/packages/babel-plugin-display-name/src/index.test.js @@ -0,0 +1,1048 @@ +import { transformSync } from '@babel/core'; +import { describe, it, expect } from 'vitest'; +import plugin from './index'; + +const transform = (code, pluginOptions) => + transformSync(code, { + babelrc: false, + configFile: false, + plugins: [[plugin, pluginOptions]], + presets: [['@babel/preset-react', { pure: false }]], + }).code; + +const transformWithAllowedCallees = (code) => + transform(code, { + allowedCallees: { + 'react-fela': ['createComponent', 'createComponentWithProxy'], + }, + }); + +describe('babelDisplayNamePlugin', () => { + it('should add display name to function expression components', () => { + expect( + transform(` + foo.bar = function() { + return ; + }`), + ).toMatchInlineSnapshot(` + "foo.bar = function () { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + + expect( + transform(` + const Test = function() { + return ; + }`), + ).toMatchInlineSnapshot(` + "const Test = function () { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + }); + + it('should add display name to named function expression components', () => { + expect( + transform(` + foo.bar = function Foo() { + return ; + }`), + ).toMatchInlineSnapshot(` + "foo.bar = function Foo() { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + + expect( + transform(` + const Test = function Foo() { + return ; + }`), + ).toMatchInlineSnapshot(` + "const Test = function Foo() { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + }); + + it('should add display name to arrow function components', () => { + expect( + transform(` + foo.bar = () => { + return ; + }`), + ).toMatchInlineSnapshot(` + "foo.bar = () => { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + + expect( + transform(` + const Test = () => { + return ; + };`), + ).toMatchInlineSnapshot(` + "const Test = () => { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + const Test = () => ;`), + ).toMatchInlineSnapshot(` + "const Test = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + const Test = () => () => ;`), + ).toMatchInlineSnapshot(`"const Test = () => () => React.createElement("img", null);"`); + }); + + it('should add display name to call expressions', () => { + expect( + transform(` + import React from 'react' + const Test = React.memo(() => { + return ; + })`), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const Test = React.memo(() => { + return React.createElement("img", null); + }); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + import React from 'react' + const foo = { + bar: React.memo(() => { + return ; + }) + };`), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const foo = { + bar: React.memo(() => { + return React.createElement("img", null); + }) + }; + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + + expect( + transform(` + import React from 'react' + const Test = React.memo(React.createRef((props, ref) => { + return ; + }))`), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const Test = React.memo(React.createRef((props, ref) => { + return React.createElement("img", null); + })); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + import React from 'react' + const Test = React.memo(function _Test(props, ref) { + return ; + })`), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const Test = React.memo(function _Test(props, ref) { + return React.createElement("img", null); + }); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + import React from 'react' + export const Test = React.memo(() => { + return ; + })`), + ).toMatchInlineSnapshot(` + "import React from 'react'; + export const Test = React.memo(() => { + return React.createElement("img", null); + }); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + }); + + it('should add display name to allowed call expressions', () => { + expect( + transform(` + import { createContext } from 'react'; + const FeatureContext = createContext(); + `), + ).toMatchInlineSnapshot(` + "import { createContext } from 'react'; + const FeatureContext = createContext(); + if (process.env.NODE_ENV !== "production") FeatureContext.displayName = "FeatureContext";" + `); + + expect( + transform(` + import React from 'react'; + const FeatureContext = React.createContext(); + `), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const FeatureContext = React.createContext(); + if (process.env.NODE_ENV !== "production") FeatureContext.displayName = "FeatureContext";" + `); + + expect( + transform(` + import * as React from 'react'; + const FeatureContext = React.createContext(); + `), + ).toMatchInlineSnapshot(` + "import * as React from 'react'; + const FeatureContext = React.createContext(); + if (process.env.NODE_ENV !== "production") FeatureContext.displayName = "FeatureContext";" + `); + + expect( + transform( + ` + import React from 'path/to/react'; + const FeatureContext = React.createContext(); + `, + { + allowedCallees: { + 'path/to/react': ['createContext'], + }, + }, + ), + ).toMatchInlineSnapshot(` + "import React from 'path/to/react'; + const FeatureContext = React.createContext(); + if (process.env.NODE_ENV !== "production") FeatureContext.displayName = "FeatureContext";" + `); + + expect( + transformWithAllowedCallees(` + import { createComponent, createComponentWithProxy } from 'react-fela'; + foo.bar = createComponent(); + foo.bar1 = createComponentWithProxy(); + `), + ).toMatchInlineSnapshot(` + "import { createComponent, createComponentWithProxy } from 'react-fela'; + foo.bar = createComponent(); + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar"; + foo.bar1 = createComponentWithProxy(); + if (process.env.NODE_ENV !== "production") foo.bar1.displayName = "foo.bar1";" + `); + + expect( + transformWithAllowedCallees(` + import { createComponent } from 'react-fela'; + foo = { bar: createComponent() } + `), + ).toMatchInlineSnapshot(` + "import { createComponent } from 'react-fela'; + foo = { + bar: createComponent() + }; + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + + expect( + transformWithAllowedCallees(` + import { createComponent } from 'react-fela'; + const Test = createComponent(); + `), + ).toMatchInlineSnapshot(` + "import { createComponent } from 'react-fela'; + const Test = createComponent(); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + }); + + it('should add display name to object property components', () => { + expect( + transform(` + const Components = { + path: { + test: () => + } + };`), + ).toMatchInlineSnapshot(` + "const Components = { + path: { + test: () => React.createElement("img", null) + } + }; + if (process.env.NODE_ENV !== "production") Components.path.test.displayName = "Components.path.test";" + `); + + expect( + transform(` + const pathStr = 'path'; + const Components = { + [pathStr]: { + test: () => + } + };`), + ).toMatchInlineSnapshot(` + "const pathStr = 'path'; + const Components = { + [pathStr]: { + test: () => React.createElement("img", null) + } + }; + if (process.env.NODE_ENV !== "production") Components[pathStr].test.displayName = "Components[pathStr].test";" + `); + + expect( + transform(` + const Components = { + test: function() { return } + };`), + ).toMatchInlineSnapshot(` + "const Components = { + test: function () { + return React.createElement("img", null); + } + }; + if (process.env.NODE_ENV !== "production") Components.test.displayName = "Components.test";" + `); + + expect( + transform(` + const Components = { + test: function Foo() { return } + };`), + ).toMatchInlineSnapshot(` + "const Components = { + test: function Foo() { + return React.createElement("img", null); + } + }; + if (process.env.NODE_ENV !== "production") Components.test.displayName = "Components.test";" + `); + }); + + it('should add display name to object methods', () => { + expect( + transform(` + const Components = { + path: { + test(props) { + return ; + }, + } + }; + `), + ).toMatchInlineSnapshot(` + "const Components = { + path: { + test(props) { + return React.createElement("img", null); + } + } + }; + if (process.env.NODE_ENV !== "production") Components.path.test.displayName = "Components.path.test";" + `); + + expect( + transform(` + const Components = { + [foo[bar.foobar].baz]: { + test(props) { + return ; + }, + } + }; + `), + ).toMatchInlineSnapshot(` + "const Components = { + [foo[bar.foobar].baz]: { + test(props) { + return React.createElement("img", null); + } + } + }; + if (process.env.NODE_ENV !== "production") Components[foo[bar.foobar].baz].test.displayName = "Components[foo[bar.foobar].baz].test";" + `); + }); + + it('should add display name to fragments', () => { + expect( + transform(` + const Component = (props) => <>; + `), + ).toMatchInlineSnapshot(` + "const Component = props => React.createElement(React.Fragment, null, React.createElement("img", props)); + if (process.env.NODE_ENV !== "production") Component.displayName = "Component";" + `); + }); + + it('should add display name to various expressions', () => { + expect( + transform(` + const Component = () => false ? : null; + const Component1 = () => || null; + const Component2 = () => []; + const Component3 = () => { return }; + + `), + ).toMatchInlineSnapshot(` + "const Component = () => false ? React.createElement("img", null) : null; + if (process.env.NODE_ENV !== "production") Component.displayName = "Component"; + const Component1 = () => React.createElement("img", null) || null; + if (process.env.NODE_ENV !== "production") Component1.displayName = "Component1"; + const Component2 = () => [React.createElement("img", null)]; + if (process.env.NODE_ENV !== "production") Component2.displayName = "Component2"; + const Component3 = () => { + return React.createElement("img", null); + }; + if (process.env.NODE_ENV !== "production") Component3.displayName = "Component3";" + `); + }); + + it('should add display name for various kinds of assignments', () => { + expect( + transform(` + var Test = () => + `), + ).toMatchInlineSnapshot(` + "var Test = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + let Test = () => + `), + ).toMatchInlineSnapshot(` + "let Test = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + + expect( + transform(` + export const Test = () => + `), + ).toMatchInlineSnapshot(` + "export const Test = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + }); + + it('should not add display names for nameless functions', () => { + expect( + transformWithAllowedCallees(` + export default () => + `), + ).toMatchInlineSnapshot(`"export default () => React.createElement("img", null);"`); + + expect( + transformWithAllowedCallees(` + const element = } /> + `), + ).toMatchInlineSnapshot(` + "const element = React.createElement(Text, { + render: () => React.createElement("img", null) + });" + `); + + expect( + transformWithAllowedCallees(` + (() => )() + `), + ).toMatchInlineSnapshot(`"(() => React.createElement("img", null))();"`); + + expect( + transformWithAllowedCallees(` + {() => } + `), + ).toMatchInlineSnapshot(` + "{ + () => React.createElement("img", null); + }" + `); + + expect( + transformWithAllowedCallees(` + (function() { return })() + `), + ).toMatchInlineSnapshot(` + "(function () { + return React.createElement("img", null); + })();" + `); + + expect( + transformWithAllowedCallees(` + (function test() { return })() + `), + ).toMatchInlineSnapshot(` + "(function test() { + return React.createElement("img", null); + })();" + `); + + expect( + transformWithAllowedCallees(` + export default function() { return } + `), + ).toMatchInlineSnapshot(` + "export default function () { + return React.createElement("img", null); + }" + `); + }); + + it('should not move elements out of their current scope', () => { + expect( + transformWithAllowedCallees(` + const Component = (props) => <>{() => }; + `), + ).toMatchInlineSnapshot(` + "const Component = props => React.createElement(React.Fragment, null, () => React.createElement("img", props)); + if (process.env.NODE_ENV !== "production") Component.displayName = "Component";" + `); + + expect( + transformWithAllowedCallees(` + styledComponents.withTheme = (Component) => { + const WithDefaultTheme = (props) => { + return
; + } + return WithDefaultTheme; + }; + `), + ).toMatchInlineSnapshot(` + "styledComponents.withTheme = Component => { + const WithDefaultTheme = props => { + return React.createElement("div", props); + }; + if (process.env.NODE_ENV !== "production") WithDefaultTheme.displayName = "WithDefaultTheme"; + return WithDefaultTheme; + };" + `); + + expect( + transformWithAllowedCallees(` + const Component = (options) => { + return { + test: function test(props) { + return + }, + }; + }; + `), + ).toMatchInlineSnapshot(` + "const Component = options => { + return { + test: function test(props) { + return React.createElement("img", null); + } + }; + };" + `); + + expect( + transformWithAllowedCallees(` + const Component = (props) => ({ test: }); + `), + ).toMatchInlineSnapshot(` + "const Component = props => ({ + test: React.createElement("img", props) + });" + `); + + expect( + transformWithAllowedCallees(` + const Component = (props) => { + const LookUp = ((innerProps) => ({ a: () => }))(props); + return
{() => LookUp.a}
+ }; + `), + ).toMatchInlineSnapshot(` + "const Component = props => { + const LookUp = (innerProps => ({ + a: () => React.createElement("img", innerProps) + }))(props); + return React.createElement("div", null, () => LookUp.a); + }; + if (process.env.NODE_ENV !== "production") Component.displayName = "Component";" + `); + }); + + it('should add not overwrite existing display names', () => { + expect( + transformWithAllowedCallees(` + foo.bar = () => ; + foo.bar.displayName = 'test'; + `), + ).toMatchInlineSnapshot(` + "foo.bar = () => React.createElement("img", null); + foo.bar.displayName = 'test';" + `); + + expect( + transformWithAllowedCallees(` + foo.bar = () => ; + foo.bar.displayName = 'test'; + foo.bar = () => ; + `), + ).toMatchInlineSnapshot(` + "foo.bar = () => React.createElement("img", null); + foo.bar.displayName = 'test'; + foo.bar = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + + expect( + transformWithAllowedCallees(` + foo.bar = () => ; + foo.bar.displayName = 'foo.bar'; + foo.bar = () => ; + `), + ).toMatchInlineSnapshot(` + "foo.bar = () => React.createElement("img", null); + foo.bar.displayName = 'foo.bar'; + foo.bar = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar";" + `); + }); + + it('should not add duplicate display names', () => { + expect( + transformWithAllowedCallees(` + () => { + const Test = () => ; + } + const Test = () => ; + `), + ).toMatchInlineSnapshot(` + "() => { + const Test = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test"; + }; + const Test = () => React.createElement("img", null);" + `); + }); + + it('should not change assignment orders', () => { + expect( + transformWithAllowedCallees(` + foo.bar = () => ; + foo.bar = () =>
; + `), + ).toMatchInlineSnapshot(` + "foo.bar = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar"; + foo.bar = () => React.createElement("br", null);" + `); + + expect( + transformWithAllowedCallees(` + foo.bar = () => ; + delete foo.bar; + `), + ).toMatchInlineSnapshot(` + "foo.bar = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar"; + delete foo.bar;" + `); + + expect( + transformWithAllowedCallees(` + foo.bar = () => ; + function irrelvant() {}; + foo = null; + `), + ).toMatchInlineSnapshot(` + "foo.bar = () => React.createElement("img", null); + if (process.env.NODE_ENV !== "production") foo.bar.displayName = "foo.bar"; + function irrelvant() {} + ; + foo = null;" + `); + }); + + it('should not add display name to object properties', () => { + expect( + transformWithAllowedCallees(` + const Components = { + path: { + test: + } + };`), + ).toMatchInlineSnapshot(` + "const Components = { + path: { + test: React.createElement("img", null) + } + };" + `); + + expect( + transformWithAllowedCallees(` + const Components = () => ({ + path: { + test: + } + });`), + ).toMatchInlineSnapshot(` + "const Components = () => ({ + path: { + test: React.createElement("img", null) + } + });" + `); + + expect( + transformWithAllowedCallees(` + const Components = callee({ foo: () => }); + `), + ).toMatchInlineSnapshot(` + "const Components = callee({ + foo: () => React.createElement("img", null) + });" + `); + + expect( + transformWithAllowedCallees(` + const Components = () =>
{() => }
; + `), + ).toMatchInlineSnapshot(` + "const Components = () => React.createElement("div", null, () => React.createElement("img", null)); + if (process.env.NODE_ENV !== "production") Components.displayName = "Components";" + `); + }); + + it('should not add display name to createClass', () => { + expect( + transformWithAllowedCallees(` + const Component2 = _createClass(() => ); + `), + ).toMatchInlineSnapshot( + `"const Component2 = _createClass(() => React.createElement("img", null));"`, + ); + }); + + it('should not add display name to hooks', () => { + expect( + transformWithAllowedCallees(` + const Component = useMemo(() => ); + `), + ).toMatchInlineSnapshot(`"const Component = useMemo(() => React.createElement("img", null));"`); + }); + + it('should not add display name to class components', () => { + expect( + transformWithAllowedCallees(` + class Test extends React.Component { + render() { + return ; + } + }`), + ).toMatchInlineSnapshot(` + "class Test extends React.Component { + render() { + return React.createElement("img", null); + } + }" + `); + + expect( + transformWithAllowedCallees(` + class Test extends React.Component { + notRender() { + return ; + } + }`), + ).toMatchInlineSnapshot(` + "class Test extends React.Component { + notRender() { + return React.createElement("img", null); + } + }" + `); + + expect( + transformWithAllowedCallees(` + export class Test extends React.Component { + render() { + return ; + } + }`), + ).toMatchInlineSnapshot(` + "export class Test extends React.Component { + render() { + return React.createElement("img", null); + } + }" + `); + + expect( + transformWithAllowedCallees(` + export default class Test extends React.Component { + render() { + return ; + } + }`), + ).toMatchInlineSnapshot(` + "export default class Test extends React.Component { + render() { + return React.createElement("img", null); + } + }" + `); + }); + + it('should not add display name to function components', () => { + expect( + transformWithAllowedCallees(` + function Test() { + return ; + }`), + ).toMatchInlineSnapshot(` + "function Test() { + return React.createElement("img", null); + }" + `); + + expect( + transformWithAllowedCallees(` + export function Test() { + return ; + }`), + ).toMatchInlineSnapshot(` + "export function Test() { + return React.createElement("img", null); + }" + `); + + expect( + transformWithAllowedCallees(` + export default function Test() { + return ; + }`), + ).toMatchInlineSnapshot(` + "export default function Test() { + return React.createElement("img", null); + }" + `); + + expect( + transformWithAllowedCallees(` + export default function() { + return ; + }`), + ).toMatchInlineSnapshot(` + "export default function () { + return React.createElement("img", null); + }" + `); + }); + + it('should not add display name to unknown call expressions', () => { + expect( + transformWithAllowedCallees(` + import { createDirectionalComponent } from 'react-fela'; + foo.bar = createDirectionalComponent(); + `), + ).toMatchInlineSnapshot(` + "import { createDirectionalComponent } from 'react-fela'; + foo.bar = createDirectionalComponent();" + `); + + expect( + transformWithAllowedCallees(` + import fela from 'react-fela'; + foo.bar = fela.createDirectionalComponent(); + `), + ).toMatchInlineSnapshot(` + "import fela from 'react-fela'; + foo.bar = fela.createDirectionalComponent();" + `); + + expect( + transformWithAllowedCallees(` + import * as fela from 'react-fela'; + foo.bar = fela.createDirectionalComponent(); + `), + ).toMatchInlineSnapshot(` + "import * as fela from 'react-fela'; + foo.bar = fela.createDirectionalComponent();" + `); + }); + + it('should not add display name to immediately invoked function expressions', () => { + expect( + transformWithAllowedCallees(` + const Test = (function () { + return ; + })()`), + ).toMatchInlineSnapshot(` + "const Test = function () { + return React.createElement("img", null); + }();" + `); + + expect( + transformWithAllowedCallees(` + const Test = (function test() { + return ; + })()`), + ).toMatchInlineSnapshot(` + "const Test = function test() { + return React.createElement("img", null); + }();" + `); + + expect( + transformWithAllowedCallees(` + const Test = (() => { + return ; + })()`), + ).toMatchInlineSnapshot(` + "const Test = (() => { + return React.createElement("img", null); + })();" + `); + }); + + it('should not add display name to functions within jsx elements', () => { + expect( + transformWithAllowedCallees(` + const Test = callee(
{() => }
); + `), + ).toMatchInlineSnapshot( + `"const Test = callee(React.createElement("div", null, () => React.createElement("img", null)));"`, + ); + + expect( + transformWithAllowedCallees(` + const Test = () => }} />; + `), + ).toMatchInlineSnapshot(` + "const Test = () => React.createElement("img", { + foo: { + bar: () => React.createElement("img", null) + } + }); + if (process.env.NODE_ENV !== "production") Test.displayName = "Test";" + `); + }); + + it('should not add display name to non react components', () => { + expect( + transformWithAllowedCallees(` + // foo.bar = createComponent(); + const Component = ''; + const Component1 = null; + const Component2 = undefined; + const Component3 = 0; + let Component4; + var Component5; + const Component6 = ['foo', 5, null, undefined]; + const Component7 = { foo: 'bar' }; + const Component8 = new Wrapper(); + const Component9 = () => {}; + `), + ).toMatchInlineSnapshot(` + "// foo.bar = createComponent(); + const Component = ''; + const Component1 = null; + const Component2 = undefined; + const Component3 = 0; + let Component4; + var Component5; + const Component6 = ['foo', 5, null, undefined]; + const Component7 = { + foo: 'bar' + }; + const Component8 = new Wrapper(); + const Component9 = () => {};" + `); + }); + + it('should not add display name to other assignments', () => { + expect( + transformWithAllowedCallees(` + const Component = ; + const Component1 = []; + const Component2 = new Wrapper(); + const Component3 = async (props) => await ; + const Component4 = callee(); + `), + ).toMatchInlineSnapshot(` + "const Component = React.createElement("img", null); + const Component1 = [React.createElement("img", null)]; + const Component2 = new Wrapper(React.createElement("img", null)); + const Component3 = async props => await React.createElement("img", null); + const Component4 = callee(React.createElement("img", null));" + `); + }); + + it('should handle things returning React.createElement and not direct JSX', () => { + expect( + transformWithAllowedCallees(` + import React from 'react'; + + const Foo = React.forwardRef( + (props, ref) => { + return React.createElement('div', {...props, ref}) + } + ) + `), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const Foo = React.forwardRef((props, ref) => { + return React.createElement('div', { + ...props, + ref + }); + }); + if (process.env.NODE_ENV !== "production") Foo.displayName = "Foo";" + `); + }); + + it('should handle multiple wrappers', () => { + expect( + transformWithAllowedCallees(` + import React from 'react'; + + const Foo = React.memo( + React.forwardRef( + (props, ref) => { + return React.createElement('div', {...props, ref}) + } + ) + ) + `), + ).toMatchInlineSnapshot(` + "import React from 'react'; + const Foo = React.memo(React.forwardRef((props, ref) => { + return React.createElement('div', { + ...props, + ref + }); + })); + if (process.env.NODE_ENV !== "production") Foo.displayName = "Foo";" + `); + }); +}); diff --git a/packages/babel-plugin-display-name/vite.config.mts b/packages/babel-plugin-display-name/vite.config.mts new file mode 100644 index 000000000..de879913a --- /dev/null +++ b/packages/babel-plugin-display-name/vite.config.mts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: {}, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 590b266ae..d574adbb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,6 +90,9 @@ importers: typescript: specifier: ^4.6.4 version: 4.9.5 + vitest: + specifier: ^3.1.3 + version: 3.1.3(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1) apps/code-infra-dashboard: dependencies: @@ -204,6 +207,34 @@ importers: specifier: ^1.15.1 version: 1.15.1 + packages/babel-plugin-display-name: + dependencies: + '@babel/helper-module-imports': + specifier: ^7.18.6 + version: 7.27.1 + '@babel/helper-plugin-utils': + specifier: ^7.20.2 + version: 7.27.1 + devDependencies: + '@babel/core': + specifier: ^7.20.2 + version: 7.26.0 + '@babel/preset-env': + specifier: ^7.20.2 + version: 7.27.2(@babel/core@7.26.0) + '@babel/preset-react': + specifier: ^7.18.6 + version: 7.27.1(@babel/core@7.26.0) + '@types/babel__core': + specifier: ^7.20.5 + version: 7.20.5 + '@types/babel__helper-plugin-utils': + specifier: ^7.10.3 + version: 7.10.3 + prettier: + specifier: ^2.7.1 + version: 2.8.8 + packages/bundle-size-checker: dependencies: '@aws-sdk/client-s3': @@ -468,89 +499,140 @@ packages: resolution: {integrity: sha512-b9NGO6FKJeLGYnV7Z1yvcP1TNU4dkD5jNsLWOF1/sygZoASaQhNOlaiJ/1OH331YQ1R1oWk38nBb0frsYkDsOQ==} engines: {node: '>=18.0.0'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/compat-data@7.27.2': + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.0': - resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + '@babel/helper-annotate-as-pure@7.27.1': + resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.0': - resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.0': - resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.26.5': - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-wrap-function@7.27.1': + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} engines: {node: '>=6.9.0'} '@babel/helpers@7.26.0': resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.0': - resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-proposal-private-methods@7.18.6': resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -558,184 +640,555 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.27.0': - resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/template@7.27.0': - resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/traverse@7.27.0': - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + '@babel/plugin-transform-async-generator-functions@7.27.1': + resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bugsnag/browser@7.25.0': - resolution: {integrity: sha512-PzzWy5d9Ly1CU1KkxTB6ZaOw/dO+CYSfVtqxVJccy832e6+7rW/dvSw5Jy7rsNhgcKSKjZq86LtNkPSvritOLA==} + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bugsnag/core@7.25.0': - resolution: {integrity: sha512-JZLak1b5BVzy77CPcklViZrppac/pE07L3uSDmfSvFYSCGReXkik2txOgV05VlF9EDe36dtUAIIV7iAPDfFpQQ==} + '@babel/plugin-transform-block-scoping@7.27.1': + resolution: {integrity: sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bugsnag/cuid@3.2.1': - resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==} + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bugsnag/js@7.25.0': - resolution: {integrity: sha512-d8n8SyKdRUz8jMacRW1j/Sj/ckhKbIEp49+Dacp3CS8afRgfMZ//NXhUFFXITsDP5cXouaejR9fx4XVapYXNgg==} + '@babel/plugin-transform-class-static-block@7.27.1': + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 - '@bugsnag/node@7.25.0': - resolution: {integrity: sha512-KlxBaJ8EREEsfKInybAjTO9LmdDXV3cUH5+XNXyqUZrcRVuPOu4j4xvljh+n24ifok/wbFZTKVXUzrN4iKIeIA==} + '@babel/plugin-transform-classes@7.27.1': + resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bugsnag/safe-json-stringify@6.0.0': - resolution: {integrity: sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==} + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} + '@babel/plugin-transform-destructuring@7.27.1': + resolution: {integrity: sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@dependents/detective-less@4.1.0': - resolution: {integrity: sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==} - engines: {node: '>=14'} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/cache@11.14.0': - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/is-prop-valid@1.3.0': - resolution: {integrity: sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==} + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/react@11.14.0': - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true + '@babel/core': ^7.0.0-0 - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/server@11.11.0': - resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==} + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + engines: {node: '>=6.9.0'} peerDependencies: - '@emotion/css': ^11.0.0-rc.0 - peerDependenciesMeta: - '@emotion/css': - optional: true + '@babel/core': ^7.0.0-0 - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/styled@11.14.0': - resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true + '@babel/core': ^7.0.0 - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} peerDependencies: - react: '>=16.8.0' + '@babel/core': ^7.0.0-0 - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@emotion/weak-memoize@0.4.0': - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@babel/plugin-transform-object-rest-spread@7.27.2': + resolution: {integrity: sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/aix-ppc64@0.19.11': - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/aix-ppc64@0.25.2': - resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@babel/plugin-transform-parameters@7.27.1': + resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/android-arm64@0.19.11': - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.27.1': + resolution: {integrity: sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.27.1': + resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.27.2': + resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.27.1': + resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + engines: {node: '>=6.9.0'} + + '@bugsnag/browser@7.25.0': + resolution: {integrity: sha512-PzzWy5d9Ly1CU1KkxTB6ZaOw/dO+CYSfVtqxVJccy832e6+7rW/dvSw5Jy7rsNhgcKSKjZq86LtNkPSvritOLA==} + + '@bugsnag/core@7.25.0': + resolution: {integrity: sha512-JZLak1b5BVzy77CPcklViZrppac/pE07L3uSDmfSvFYSCGReXkik2txOgV05VlF9EDe36dtUAIIV7iAPDfFpQQ==} + + '@bugsnag/cuid@3.2.1': + resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==} + + '@bugsnag/js@7.25.0': + resolution: {integrity: sha512-d8n8SyKdRUz8jMacRW1j/Sj/ckhKbIEp49+Dacp3CS8afRgfMZ//NXhUFFXITsDP5cXouaejR9fx4XVapYXNgg==} + + '@bugsnag/node@7.25.0': + resolution: {integrity: sha512-KlxBaJ8EREEsfKInybAjTO9LmdDXV3cUH5+XNXyqUZrcRVuPOu4j4xvljh+n24ifok/wbFZTKVXUzrN4iKIeIA==} + + '@bugsnag/safe-json-stringify@6.0.0': + resolution: {integrity: sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@dependents/detective-less@4.1.0': + resolution: {integrity: sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==} + engines: {node: '>=14'} + + '@discoveryjs/json-ext@0.5.7': + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.3.0': + resolution: {integrity: sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/server@11.11.0': + resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==} + peerDependencies: + '@emotion/css': ^11.0.0-rc.0 + peerDependenciesMeta: + '@emotion/css': + optional: true + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.14.0': + resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.19.11': + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.19.11': + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] os: [android] '@esbuild/android-arm64@0.24.2': @@ -3093,6 +3546,9 @@ packages: '@types/babel__generator@7.6.8': resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__helper-plugin-utils@7.10.3': + resolution: {integrity: sha512-FcLBBPXInqKfULB2nvOBskQPcnSMZ0s1Y2q76u9H1NPPWaLcTeq38xBeKfF/RBUECK333qeaqRdYoPSwW7rTNQ==} + '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} @@ -3436,7 +3892,36 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@webassemblyjs/ast@1.14.1': + '@vitest/expect@3.1.3': + resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + + '@vitest/mocker@3.1.3': + resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.1.3': + resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + + '@vitest/runner@3.1.3': + resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + + '@vitest/snapshot@3.1.3': + resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + + '@vitest/spy@3.1.3': + resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + + '@vitest/utils@3.1.3': + resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} '@webassemblyjs/floating-point-hex-parser@1.13.2': @@ -3829,6 +4314,10 @@ packages: asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-module-types@5.0.0: resolution: {integrity: sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==} engines: {node: '>=14'} @@ -3884,6 +4373,21 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + backoff@2.5.0: resolution: {integrity: sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==} engines: {node: '>= 0.6'} @@ -4062,6 +4566,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cacache@18.0.4: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -4108,6 +4616,10 @@ packages: caniuse-lite@1.0.30001705: resolution: {integrity: sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + chainsaw@0.1.0: resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} @@ -4130,6 +4642,10 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -4433,6 +4949,9 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} + core-js-compat@3.42.0: + resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4672,6 +5191,10 @@ packages: babel-plugin-macros: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -5005,8 +5528,8 @@ packages: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -5274,6 +5797,9 @@ packages: estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5331,6 +5857,10 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + engines: {node: '>=12.0.0'} + exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} @@ -6928,6 +7458,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6958,6 +7491,9 @@ packages: resolution: {integrity: sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -7870,6 +8406,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + peek-readable@5.4.2: resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} engines: {node: '>=14.16'} @@ -8067,6 +8607,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} @@ -8420,6 +8965,13 @@ packages: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -8427,6 +8979,10 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -8435,6 +8991,13 @@ packages: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + remeda@1.61.0: resolution: {integrity: sha512-caKfSz9rDeSKBQQnlJnVW3mbVdFgxgGWQKq1XlFokqjf+hQD5gxutLGTTY2A/x24UxVyJe9gH5fAkFI63ULw4A==} @@ -8689,6 +9252,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -8836,6 +9402,9 @@ packages: stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -9115,10 +9684,28 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.13: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + title@4.0.1: resolution: {integrity: sha512-xRnPkJx9nvE5MF6LkB5e8QJjE2FW8269wTu/LQdf7zZqBgPly0QJPf/CWAo7srj5so4yXfoLEdCFgurlpi47zg==} hasBin: true @@ -9379,6 +9966,22 @@ packages: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -9561,6 +10164,11 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vite-node@3.1.3: + resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: @@ -9640,6 +10248,34 @@ packages: yaml: optional: true + vitest@3.1.3: + resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.1.3 + '@vitest/ui': 3.1.3 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -9727,6 +10363,11 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -10427,231 +11068,768 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.775.0': + '@aws-sdk/region-config-resolver@3.775.0': + dependencies: + '@aws-sdk/types': 3.775.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.7.0 + + '@aws-sdk/signature-v4-multi-region@3.796.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.7.0 + + '@aws-sdk/token-providers@3.796.0': + dependencies: + '@aws-sdk/nested-clients': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.775.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.7.0 + + '@aws-sdk/util-arn-parser@3.723.0': + dependencies: + tslib: 2.7.0 + + '@aws-sdk/util-endpoints@3.787.0': + dependencies: + '@aws-sdk/types': 3.775.0 + '@smithy/types': 4.2.0 + '@smithy/util-endpoints': 3.0.2 + tslib: 2.7.0 + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.7.0 + + '@aws-sdk/util-user-agent-browser@3.775.0': + dependencies: + '@aws-sdk/types': 3.775.0 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.7.0 + + '@aws-sdk/util-user-agent-node@3.796.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.796.0 + '@aws-sdk/types': 3.775.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.7.0 + + '@aws-sdk/xml-builder@3.775.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.7.0 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.27.2': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@9.4.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.1': + dependencies: + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-annotate-as-pure@7.27.1': + dependencies: + '@babel/types': 7.27.1 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.27.2 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.1 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.0(supports-color@9.4.0) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.27.1 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.27.1': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 + + '@babel/parser@7.27.2': + dependencies: + '@babel/types': 7.27.1 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.0) + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.0) + '@babel/traverse': 7.27.1 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.26.0)': dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/signature-v4-multi-region@3.796.0': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.26.0)': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.796.0 - '@aws-sdk/types': 3.775.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/token-providers@3.796.0': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.26.0)': dependencies: - '@aws-sdk/nested-clients': 3.796.0 - '@aws-sdk/types': 3.775.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.7.0 - transitivePeerDependencies: - - aws-crt + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/types@3.775.0': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.26.0)': dependencies: - '@smithy/types': 4.2.0 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color - '@aws-sdk/util-arn-parser@3.723.0': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.26.0)': dependencies: - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color - '@aws-sdk/util-endpoints@3.787.0': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.26.0)': dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - '@smithy/util-endpoints': 3.0.2 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color - '@aws-sdk/util-locate-window@3.723.0': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.26.0)': dependencies: - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color - '@aws-sdk/util-user-agent-browser@3.775.0': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.26.0)': dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - bowser: 2.11.0 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/util-user-agent-node@3.796.0': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.26.0)': dependencies: - '@aws-sdk/middleware-user-agent': 3.796.0 - '@aws-sdk/types': 3.775.0 - '@smithy/node-config-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/xml-builder@3.775.0': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.26.0)': dependencies: - '@smithy/types': 4.2.0 - tslib: 2.7.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/code-frame@7.26.2': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/compat-data@7.26.8': {} + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.0) - '@babel/core@7.26.0': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.26.0)': dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 - convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@9.4.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/generator@7.27.0': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-annotate-as-pure@7.25.9': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.27.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-compilation-targets@7.27.0': + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.0)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.0 - semver: 6.3.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.25.9': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.9': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.27.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.26.0) + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option@7.25.9': {} + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/helpers@7.26.0': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/parser@7.27.0': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.27.0 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)': + '@babel/preset-env@7.27.2(@babel/core@7.26.0)': dependencies: + '@babel/compat-data': 7.27.2 '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.0) + core-js-compat: 3.42.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.1 + esutils: 2.0.3 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + '@babel/preset-react@7.27.1(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color '@babel/runtime@7.27.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.27.0': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - '@babel/traverse@7.27.0': + '@babel/traverse@7.27.1': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 debug: 4.4.0(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: @@ -10659,18 +11837,18 @@ snapshots: '@babel/types@7.26.10': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@babel/types@7.26.9': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.27.0': + '@babel/types@7.27.1': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@bugsnag/browser@7.25.0': dependencies: @@ -10736,7 +11914,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.27.1 '@babel/runtime': 7.27.0 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -12276,7 +13454,7 @@ snapshots: '@netlify/zip-it-and-ship-it@10.0.6(encoding@0.1.13)(rollup@4.39.0)(supports-color@9.4.0)': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@babel/types': 7.26.10 '@netlify/binary-info': 1.0.0 '@netlify/serverless-functions-api': 1.38.0 @@ -12284,7 +13462,7 @@ snapshots: archiver: 5.3.2 common-path-prefix: 3.0.0 cp-file: 10.0.0 - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 esbuild: 0.19.11 execa: 7.2.0 fast-glob: 3.3.2 @@ -12317,7 +13495,7 @@ snapshots: '@netlify/zip-it-and-ship-it@9.43.1(encoding@0.1.13)(rollup@4.39.0)': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@babel/types': 7.26.9 '@netlify/binary-info': 1.0.0 '@netlify/serverless-functions-api': 1.38.0 @@ -12325,7 +13503,7 @@ snapshots: archiver: 7.0.1 common-path-prefix: 3.0.0 cp-file: 10.0.0 - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 esbuild: 0.19.11 execa: 7.2.0 fast-glob: 3.3.2 @@ -13612,24 +14790,28 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 + + '@types/babel__helper-plugin-utils@7.10.3': + dependencies: + '@types/babel__core': 7.20.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 '@types/body-parser@1.19.5': dependencies: @@ -14107,6 +15289,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/expect@3.1.3': + dependencies: + '@vitest/spy': 3.1.3 + '@vitest/utils': 3.1.3 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1))': + dependencies: + '@vitest/spy': 3.1.3 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.3.5(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1) + + '@vitest/pretty-format@3.1.3': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.1.3': + dependencies: + '@vitest/utils': 3.1.3 + pathe: 2.0.3 + + '@vitest/snapshot@3.1.3': + dependencies: + '@vitest/pretty-format': 3.1.3 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@vitest/spy@3.1.3': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@3.1.3': + dependencies: + '@vitest/pretty-format': 3.1.3 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -14618,6 +15840,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + assertion-error@2.0.1: {} + ast-module-types@5.0.0: {} ast-types-flow@0.0.8: {} @@ -14670,6 +15894,30 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.8 + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.0): + dependencies: + '@babel/compat-data': 7.27.2 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) + core-js-compat: 3.42.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + backoff@2.5.0: dependencies: precond: 0.2.3 @@ -14717,7 +15965,7 @@ snapshots: better-ajv-errors@1.2.0(ajv@8.17.1): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@humanwhocodes/momoa': 2.0.4 ajv: 8.17.1 chalk: 4.1.2 @@ -14853,6 +16101,8 @@ snapshots: bytes@3.1.2: {} + cac@6.7.14: {} + cacache@18.0.4: dependencies: '@npmcli/fs': 3.1.1 @@ -14911,6 +16161,14 @@ snapshots: caniuse-lite@1.0.30001705: {} + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + chainsaw@0.1.0: dependencies: traverse: 0.3.9 @@ -14931,6 +16189,8 @@ snapshots: chardet@0.7.0: {} + check-error@2.1.1: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -15258,6 +16518,10 @@ snapshots: dependencies: is-what: 4.1.16 + core-js-compat@3.42.0: + dependencies: + browserslist: 4.24.4 + core-util-is@1.0.3: {} cors@2.8.5: @@ -15501,6 +16765,8 @@ snapshots: optionalDependencies: babel-plugin-macros: 3.1.0 + deep-eql@5.0.2: {} + deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -15859,7 +17125,7 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - es-module-lexer@1.6.0: {} + es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: dependencies: @@ -16163,7 +17429,7 @@ snapshots: eslint-plugin-react-compiler@19.1.0-rc.2(eslint@8.57.0): dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.0) eslint: 8.57.0 hermes-parser: 0.25.1 @@ -16356,6 +17622,10 @@ snapshots: estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.7 + esutils@2.0.3: {} etag@1.8.1: {} @@ -16459,6 +17729,8 @@ snapshots: expand-template@2.0.3: {} + expect-type@1.2.1: {} + exponential-backoff@3.1.2: {} express-logging@1.1.1: @@ -16816,7 +18088,7 @@ snapshots: fork-ts-checker-webpack-plugin@6.5.3(eslint@9.10.0(jiti@2.4.2))(typescript@5.5.4)(webpack@5.94.0): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.6.0 @@ -18330,6 +19602,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.1.3: {} + lowercase-keys@3.0.0: {} lru-cache@10.4.3: {} @@ -18350,6 +19624,10 @@ snapshots: macos-release@3.3.0: {} + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -18866,7 +20144,7 @@ snapshots: node-source-walk@6.0.2: dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 node-stream-zip@1.15.0: {} @@ -19355,7 +20633,7 @@ snapshots: parse-imports@2.2.1: dependencies: - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 slashes: 3.0.12 parse-json@4.0.0: @@ -19365,14 +20643,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.3.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 index-to-position: 1.1.0 type-fest: 4.39.1 @@ -19429,6 +20707,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.0: {} + peek-readable@5.4.2: {} pend@1.2.0: {} @@ -19632,6 +20912,8 @@ snapshots: prelude-ls@1.2.1: {} + prettier@2.8.8: {} + prettier@3.3.3: {} pretty-bytes@6.1.1: {} @@ -19797,7 +21079,7 @@ snapshots: react-dev-utils@12.0.1(eslint@9.10.0(jiti@2.4.2))(typescript@5.5.4)(webpack@5.94.0): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 address: 1.2.2 browserslist: 4.24.4 chalk: 4.1.2 @@ -20034,6 +21316,12 @@ snapshots: globalthis: 1.0.4 which-builtin-type: 1.1.3 + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + regenerator-runtime@0.14.1: {} regexp.prototype.flags@1.5.2: @@ -20043,6 +21331,15 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.3.1 @@ -20051,6 +21348,12 @@ snapshots: dependencies: rc: 1.2.8 + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + remeda@1.61.0: {} remove-trailing-separator@1.1.0: {} @@ -20326,6 +21629,8 @@ snapshots: get-intrinsic: 1.3.0 object-inspect: 1.13.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -20477,6 +21782,8 @@ snapshots: stack-trace@0.0.10: {} + stackback@0.0.2: {} + stackframe@1.3.4: {} statuses@1.5.0: {} @@ -20790,11 +22097,21 @@ snapshots: through@2.3.8: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + tinyglobby@0.2.13: dependencies: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + title@4.0.1: dependencies: arg: 5.0.2 @@ -21027,6 +22344,17 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} @@ -21155,6 +22483,27 @@ snapshots: vary@1.1.2: {} + vite-node@3.1.3(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0(supports-color@9.4.0) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.3.5(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1)): dependencies: debug: 4.4.0(supports-color@9.4.0) @@ -21191,6 +22540,45 @@ snapshots: terser: 5.39.0 yaml: 2.7.1 + vitest@3.1.3(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1): + dependencies: + '@vitest/expect': 3.1.3 + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1)) + '@vitest/pretty-format': 3.1.3 + '@vitest/runner': 3.1.3 + '@vitest/snapshot': 3.1.3 + '@vitest/spy': 3.1.3 + '@vitest/utils': 3.1.3 + chai: 5.2.0 + debug: 4.4.0(supports-color@9.4.0) + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.13 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1) + vite-node: 3.1.3(@types/node@22.14.0)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.14.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vm-browserify@1.1.2: {} wait-port@1.1.0: @@ -21249,7 +22637,7 @@ snapshots: browserslist: 4.24.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21330,6 +22718,11 @@ snapshots: dependencies: isexe: 3.1.1 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wide-align@1.1.5: dependencies: string-width: 4.2.3 diff --git a/vitest.config.mts b/vitest.config.mts new file mode 100644 index 000000000..f97a014dc --- /dev/null +++ b/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + workspace: ['packages/*'], + }, +});