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/*'],
+ },
+});