Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
464a6c6efc |
2
.github/workflows/compiler_typescript.yml
vendored
2
.github/workflows/compiler_typescript.yml
vendored
@@ -96,4 +96,4 @@ jobs:
|
||||
- run: xvfb-run -a yarn workspace ${{ matrix.workspace_name }} test
|
||||
if: runner.os == 'Linux' && matrix.workspace_name == 'react-forgive'
|
||||
- run: yarn workspace ${{ matrix.workspace_name }} test
|
||||
if: matrix.workspace_name != 'react-forgive'
|
||||
if: runner.os != 'Linux' && matrix.workspace_name != 'react-forgive'
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* HACK: @poteto React Compiler inlines Zod in its build artifact. Zod spreads values passed to .map
|
||||
* which causes issues in @babel/plugin-transform-spread in loose mode, as it will result in
|
||||
* {undefined: undefined} which fails to parse.
|
||||
*
|
||||
* [@babel/plugin-transform-block-scoping', {throwIfClosureRequired: true}] also causes issues with
|
||||
* the built version of the compiler. The minimal set of plugins needed for this file is reexported
|
||||
* from babel.config-ts.
|
||||
*
|
||||
* I will remove this hack later when we move eslint-plugin-react-hooks into the compiler directory.
|
||||
**/
|
||||
|
||||
const baseConfig = require('./babel.config-ts');
|
||||
|
||||
module.exports = {
|
||||
plugins: baseConfig.plugins,
|
||||
};
|
||||
@@ -7,8 +7,6 @@ module.exports = {
|
||||
plugins: [
|
||||
'@babel/plugin-syntax-jsx',
|
||||
'@babel/plugin-transform-flow-strip-types',
|
||||
['@babel/plugin-transform-class-properties', {loose: true}],
|
||||
'@babel/plugin-transform-classes',
|
||||
],
|
||||
presets: [
|
||||
['@babel/preset-env', {targets: {node: 'current'}}],
|
||||
|
||||
@@ -4,8 +4,7 @@ module.exports = {
|
||||
plugins: [
|
||||
'@babel/plugin-syntax-jsx',
|
||||
'@babel/plugin-transform-flow-strip-types',
|
||||
['@babel/plugin-transform-class-properties', {loose: true}],
|
||||
'@babel/plugin-transform-classes',
|
||||
['@babel/plugin-proposal-class-properties', {loose: true}],
|
||||
'syntax-trailing-function-commas',
|
||||
[
|
||||
'@babel/plugin-proposal-object-rest-spread',
|
||||
|
||||
@@ -9,13 +9,6 @@ import {expect, test} from '@playwright/test';
|
||||
import {encodeStore, type Store} from '../../lib/stores';
|
||||
import {format} from 'prettier';
|
||||
|
||||
function isMonacoLoaded(): boolean {
|
||||
return (
|
||||
typeof window['MonacoEnvironment'] !== 'undefined' &&
|
||||
window['__MONACO_LOADED__'] === true
|
||||
);
|
||||
}
|
||||
|
||||
function formatPrint(data: Array<string>): Promise<string> {
|
||||
return format(data.join(''), {parser: 'babel'});
|
||||
}
|
||||
@@ -112,7 +105,6 @@ function nonReactFn() {
|
||||
|
||||
test('editor should open successfully', async ({page}) => {
|
||||
await page.goto(`/`, {waitUntil: 'networkidle'});
|
||||
await page.waitForFunction(isMonacoLoaded);
|
||||
await page.screenshot({
|
||||
fullPage: true,
|
||||
path: 'test-results/00-fresh-page.png',
|
||||
@@ -128,7 +120,6 @@ test('editor should compile from hash successfully', async ({page}) => {
|
||||
};
|
||||
const hash = encodeStore(store);
|
||||
await page.goto(`/#${hash}`, {waitUntil: 'networkidle'});
|
||||
await page.waitForFunction(isMonacoLoaded);
|
||||
|
||||
// User input from hash compiles
|
||||
await page.screenshot({
|
||||
@@ -152,7 +143,6 @@ test('reset button works', async ({page}) => {
|
||||
};
|
||||
const hash = encodeStore(store);
|
||||
await page.goto(`/#${hash}`, {waitUntil: 'networkidle'});
|
||||
await page.waitForFunction(isMonacoLoaded);
|
||||
|
||||
// Reset button works
|
||||
page.on('dialog', dialog => dialog.accept());
|
||||
@@ -176,7 +166,6 @@ TEST_CASE_INPUTS.forEach((t, idx) =>
|
||||
};
|
||||
const hash = encodeStore(store);
|
||||
await page.goto(`/#${hash}`, {waitUntil: 'networkidle'});
|
||||
await page.waitForFunction(isMonacoLoaded);
|
||||
await page.screenshot({
|
||||
fullPage: true,
|
||||
path: `test-results/03-0${idx}-${t.name}.png`,
|
||||
|
||||
@@ -89,9 +89,6 @@ export default function Input({errors, language}: Props): JSX.Element {
|
||||
_: editor.IStandaloneCodeEditor,
|
||||
monaco: Monaco,
|
||||
) => void = (_, monaco) => {
|
||||
if (typeof window !== 'undefined') {
|
||||
window['__MONACO_LOADED__'] = true;
|
||||
}
|
||||
setMonaco(monaco);
|
||||
|
||||
const tscOptions = {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"vercel-build": "yarn build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"test": "playwright test --workers=4"
|
||||
"test": "playwright test"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.18.9",
|
||||
@@ -22,9 +22,9 @@
|
||||
"@babel/plugin-transform-block-scoping": "^7.18.9",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.18.9",
|
||||
"@babel/preset-react": "^7.18.9",
|
||||
"@babel/preset-typescript": "^7.26.0",
|
||||
"@babel/preset-typescript": "^7.18.9",
|
||||
"@babel/traverse": "^7.18.9",
|
||||
"@babel/types": "7.26.3",
|
||||
"@babel/types": "7.18.9",
|
||||
"@heroicons/react": "^1.0.6",
|
||||
"@monaco-editor/react": "^4.4.6",
|
||||
"@playwright/test": "^1.42.1",
|
||||
@@ -39,13 +39,13 @@
|
||||
"prettier": "^3.3.3",
|
||||
"pretty-format": "^29.3.1",
|
||||
"re-resizable": "^6.9.16",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
"react": "19.0.0-rc-77b637d6-20241016",
|
||||
"react-dom": "19.0.0-rc-77b637d6-20241016"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "18.11.9",
|
||||
"@types/react": "^19.0.0",
|
||||
"@types/react-dom": "^19.0.0",
|
||||
"@types/react": "npm:types-react@19.0.0-rc.1",
|
||||
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"clsx": "^1.2.1",
|
||||
"concurrently": "^7.4.0",
|
||||
@@ -55,5 +55,9 @@
|
||||
"postcss": "^8.4.31",
|
||||
"tailwindcss": "^3.2.4",
|
||||
"wait-on": "^7.2.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"@types/react": "npm:types-react@19.0.0-rc.1",
|
||||
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export default defineConfig({
|
||||
// Test directory
|
||||
testDir: path.join(__dirname, '__tests__/e2e'),
|
||||
// If a test fails, retry it additional 2 times
|
||||
retries: 3,
|
||||
retries: 2,
|
||||
// Artifacts folder where screenshots, videos, and traces are stored.
|
||||
outputDir: 'test-results/',
|
||||
// Note: we only use text snapshots, so its safe to omit the host environment name
|
||||
|
||||
@@ -23,15 +23,6 @@
|
||||
"@babel/highlight" "^7.24.7"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/code-frame@^7.26.2":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/compat-data@^7.25.2":
|
||||
version "7.25.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb"
|
||||
@@ -68,17 +59,6 @@
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^2.5.1"
|
||||
|
||||
"@babel/generator@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7"
|
||||
integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.24.7":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab"
|
||||
@@ -86,13 +66,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.24.7"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
|
||||
integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.25.2":
|
||||
version "7.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c"
|
||||
@@ -104,26 +77,26 @@
|
||||
lru-cache "^5.1.1"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-create-class-features-plugin@^7.25.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
|
||||
integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==
|
||||
"@babel/helper-create-class-features-plugin@^7.25.0":
|
||||
version "7.25.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14"
|
||||
integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==
|
||||
dependencies:
|
||||
"@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/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.9"
|
||||
"@babel/helper-annotate-as-pure" "^7.24.7"
|
||||
"@babel/helper-member-expression-to-functions" "^7.24.8"
|
||||
"@babel/helper-optimise-call-expression" "^7.24.7"
|
||||
"@babel/helper-replace-supers" "^7.25.0"
|
||||
"@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
|
||||
"@babel/traverse" "^7.25.4"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-member-expression-to-functions@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
|
||||
integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
|
||||
"@babel/helper-member-expression-to-functions@^7.24.8":
|
||||
version "7.24.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6"
|
||||
integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
"@babel/traverse" "^7.24.8"
|
||||
"@babel/types" "^7.24.8"
|
||||
|
||||
"@babel/helper-module-imports@^7.24.7":
|
||||
version "7.24.7"
|
||||
@@ -133,14 +106,6 @@
|
||||
"@babel/traverse" "^7.24.7"
|
||||
"@babel/types" "^7.24.7"
|
||||
|
||||
"@babel/helper-module-imports@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
|
||||
integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.2":
|
||||
version "7.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6"
|
||||
@@ -151,40 +116,26 @@
|
||||
"@babel/helper-validator-identifier" "^7.24.7"
|
||||
"@babel/traverse" "^7.25.2"
|
||||
|
||||
"@babel/helper-module-transforms@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
|
||||
integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
|
||||
"@babel/helper-optimise-call-expression@^7.24.7":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f"
|
||||
integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
"@babel/traverse" "^7.25.9"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
|
||||
integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
"@babel/types" "^7.24.7"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8":
|
||||
version "7.24.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878"
|
||||
integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==
|
||||
|
||||
"@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
|
||||
integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
|
||||
|
||||
"@babel/helper-replace-supers@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
|
||||
integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
|
||||
"@babel/helper-replace-supers@^7.25.0":
|
||||
version "7.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9"
|
||||
integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==
|
||||
dependencies:
|
||||
"@babel/helper-member-expression-to-functions" "^7.25.9"
|
||||
"@babel/helper-optimise-call-expression" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.5"
|
||||
"@babel/helper-member-expression-to-functions" "^7.24.8"
|
||||
"@babel/helper-optimise-call-expression" "^7.24.7"
|
||||
"@babel/traverse" "^7.25.0"
|
||||
|
||||
"@babel/helper-simple-access@^7.24.7":
|
||||
version "7.24.7"
|
||||
@@ -194,39 +145,29 @@
|
||||
"@babel/traverse" "^7.24.7"
|
||||
"@babel/types" "^7.24.7"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
|
||||
integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.24.7":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9"
|
||||
integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
"@babel/traverse" "^7.24.7"
|
||||
"@babel/types" "^7.24.7"
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
|
||||
"@babel/helper-string-parser@^7.24.8":
|
||||
version "7.24.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d"
|
||||
integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.24.7":
|
||||
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.24.7":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
|
||||
integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
|
||||
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
|
||||
|
||||
"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8":
|
||||
version "7.24.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d"
|
||||
integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==
|
||||
|
||||
"@babel/helper-validator-option@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
|
||||
integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
|
||||
|
||||
"@babel/helpers@^7.25.0":
|
||||
version "7.25.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60"
|
||||
@@ -252,13 +193,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.6"
|
||||
|
||||
"@babel/parser@^7.26.10", "@babel/parser@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
|
||||
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/plugin-syntax-jsx@^7.24.7":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d"
|
||||
@@ -266,27 +200,13 @@
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.24.7"
|
||||
|
||||
"@babel/plugin-syntax-jsx@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290"
|
||||
integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/plugin-syntax-typescript@^7.18.9":
|
||||
"@babel/plugin-syntax-typescript@^7.18.9", "@babel/plugin-syntax-typescript@^7.24.7":
|
||||
version "7.25.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff"
|
||||
integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.24.8"
|
||||
|
||||
"@babel/plugin-syntax-typescript@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399"
|
||||
integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/plugin-transform-block-scoping@^7.18.9":
|
||||
version "7.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac"
|
||||
@@ -294,7 +214,7 @@
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.24.8"
|
||||
|
||||
"@babel/plugin-transform-modules-commonjs@^7.18.9":
|
||||
"@babel/plugin-transform-modules-commonjs@^7.18.9", "@babel/plugin-transform-modules-commonjs@^7.24.7":
|
||||
version "7.24.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c"
|
||||
integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==
|
||||
@@ -303,14 +223,6 @@
|
||||
"@babel/helper-plugin-utils" "^7.24.8"
|
||||
"@babel/helper-simple-access" "^7.24.7"
|
||||
|
||||
"@babel/plugin-transform-modules-commonjs@^7.25.9":
|
||||
version "7.26.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb"
|
||||
integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==
|
||||
dependencies:
|
||||
"@babel/helper-module-transforms" "^7.26.0"
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/plugin-transform-react-display-name@^7.24.7":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b"
|
||||
@@ -344,16 +256,16 @@
|
||||
"@babel/helper-annotate-as-pure" "^7.24.7"
|
||||
"@babel/helper-plugin-utils" "^7.24.7"
|
||||
|
||||
"@babel/plugin-transform-typescript@^7.25.9":
|
||||
version "7.26.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950"
|
||||
integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==
|
||||
"@babel/plugin-transform-typescript@^7.24.7":
|
||||
version "7.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add"
|
||||
integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==
|
||||
dependencies:
|
||||
"@babel/helper-annotate-as-pure" "^7.25.9"
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.26.5"
|
||||
"@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/plugin-syntax-typescript" "^7.25.9"
|
||||
"@babel/helper-annotate-as-pure" "^7.24.7"
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.0"
|
||||
"@babel/helper-plugin-utils" "^7.24.8"
|
||||
"@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
|
||||
"@babel/plugin-syntax-typescript" "^7.24.7"
|
||||
|
||||
"@babel/preset-react@^7.18.9":
|
||||
version "7.24.7"
|
||||
@@ -367,16 +279,16 @@
|
||||
"@babel/plugin-transform-react-jsx-development" "^7.24.7"
|
||||
"@babel/plugin-transform-react-pure-annotations" "^7.24.7"
|
||||
|
||||
"@babel/preset-typescript@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d"
|
||||
integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==
|
||||
"@babel/preset-typescript@^7.18.9":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1"
|
||||
integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
"@babel/helper-validator-option" "^7.25.9"
|
||||
"@babel/plugin-syntax-jsx" "^7.25.9"
|
||||
"@babel/plugin-transform-modules-commonjs" "^7.25.9"
|
||||
"@babel/plugin-transform-typescript" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.24.7"
|
||||
"@babel/helper-validator-option" "^7.24.7"
|
||||
"@babel/plugin-syntax-jsx" "^7.24.7"
|
||||
"@babel/plugin-transform-modules-commonjs" "^7.24.7"
|
||||
"@babel/plugin-transform-typescript" "^7.24.7"
|
||||
|
||||
"@babel/runtime@^7.21.0":
|
||||
version "7.25.6"
|
||||
@@ -394,16 +306,7 @@
|
||||
"@babel/parser" "^7.25.0"
|
||||
"@babel/types" "^7.25.0"
|
||||
|
||||
"@babel/template@^7.26.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
|
||||
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/parser" "^7.26.9"
|
||||
"@babel/types" "^7.26.9"
|
||||
|
||||
"@babel/traverse@^7.18.9", "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2":
|
||||
"@babel/traverse@^7.18.9", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.4":
|
||||
version "7.25.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41"
|
||||
integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==
|
||||
@@ -416,34 +319,22 @@
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380"
|
||||
integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==
|
||||
"@babel/types@7.18.9":
|
||||
version "7.18.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f"
|
||||
integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
"@babel/helper-validator-identifier" "^7.18.6"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@7.26.3", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6":
|
||||
version "7.26.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0"
|
||||
integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==
|
||||
"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6":
|
||||
version "7.25.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6"
|
||||
integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
|
||||
"@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259"
|
||||
integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
"@babel/helper-string-parser" "^7.24.8"
|
||||
"@babel/helper-validator-identifier" "^7.24.7"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@emnapi/runtime@^1.2.0":
|
||||
version "1.3.1"
|
||||
@@ -842,15 +733,17 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4"
|
||||
integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==
|
||||
|
||||
"@types/react-dom@^19.0.0":
|
||||
version "19.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.4.tgz#bedba97f9346bd4c0fe5d39e689713804ec9ac89"
|
||||
integrity sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==
|
||||
"@types/react-dom@npm:types-react-dom@19.0.0-rc.1":
|
||||
version "19.0.0-rc.1"
|
||||
resolved "https://registry.yarnpkg.com/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz#1d544d02c5df2a82d87c2eff979afa2e21a8317a"
|
||||
integrity sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react@^19.0.0":
|
||||
version "19.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.10.tgz#d0c66dafd862474190fe95ce11a68de69ed2b0eb"
|
||||
integrity sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==
|
||||
"@types/react@*", "@types/react@npm:types-react@19.0.0-rc.1":
|
||||
version "19.0.0-rc.1"
|
||||
resolved "https://registry.yarnpkg.com/types-react/-/types-react-19.0.0-rc.1.tgz#576d1a702f6d0cc5b24813a293913e5cbfeaa647"
|
||||
integrity sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==
|
||||
dependencies:
|
||||
csstype "^3.0.2"
|
||||
|
||||
@@ -2575,11 +2468,6 @@ jsesc@^2.5.1:
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
||||
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
|
||||
|
||||
jsesc@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
|
||||
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
|
||||
|
||||
json-buffer@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
|
||||
@@ -3137,12 +3025,12 @@ re-resizable@^6.9.16:
|
||||
resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.10.0.tgz#d684a096ab438f1a93f59ad3a580a206b0ce31ee"
|
||||
integrity sha512-hysSK0xmA5nz24HBVztlk4yCqCLCvS32E6ZpWxVKop9x3tqCa4yAj1++facrmkOf62JsJHjmjABdKxXofYioCw==
|
||||
|
||||
react-dom@^19.0.0:
|
||||
version "19.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57"
|
||||
integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==
|
||||
react-dom@19.0.0-rc-77b637d6-20241016:
|
||||
version "19.0.0-rc-77b637d6-20241016"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc-77b637d6-20241016.tgz#71afcba4abbd81a73e85086029202423cf85355e"
|
||||
integrity sha512-xp5LvY+O6uvg0fNbSMyMXe0kbgzw6qn0mbqrdXStm4LBpFeMswLZ+XSNr+eJ0HyIiWrCw0rrXaVdqOxc9wtdKA==
|
||||
dependencies:
|
||||
scheduler "^0.25.0"
|
||||
scheduler "0.25.0-rc-77b637d6-20241016"
|
||||
|
||||
react-is@^16.13.1:
|
||||
version "16.13.1"
|
||||
@@ -3154,10 +3042,10 @@ react-is@^18.0.0:
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
|
||||
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
|
||||
|
||||
react@^19.0.0:
|
||||
version "19.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
|
||||
integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==
|
||||
react@19.0.0-rc-77b637d6-20241016:
|
||||
version "19.0.0-rc-77b637d6-20241016"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-77b637d6-20241016.tgz#9e20f116d0195979f192537e00a0fa1687680319"
|
||||
integrity sha512-9A+i+PGSH/P4MezU4w38K9cbJuy0pzsXoPjPWIv6TQGCFmc5qCzC+8yce8dzfSEF1KJgCF2CLc5qtq/ePfiVqg==
|
||||
|
||||
read-cache@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -3279,10 +3167,10 @@ safe-regex-test@^1.0.3:
|
||||
es-errors "^1.3.0"
|
||||
is-regex "^1.1.4"
|
||||
|
||||
scheduler@^0.25.0:
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
|
||||
integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
|
||||
scheduler@0.25.0-rc-77b637d6-20241016:
|
||||
version "0.25.0-rc-77b637d6-20241016"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-77b637d6-20241016.tgz#ab8f8d1cccc9668946caaa1103acdcdb5c871122"
|
||||
integrity sha512-R5NTrZXJaW4Dj2jHmad2MTehpFq4yUQOxRKDNV7clP1q4Pz6RtUIcofdPnGUWM0krlJAw8DHd/4jT41pFK4iEg==
|
||||
|
||||
semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
@@ -3629,6 +3517,11 @@ thenify-all@^1.0.0:
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
|
||||
to-fast-properties@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
||||
integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
|
||||
|
||||
to-regex-range@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# React Compiler Development Guide
|
||||
|
||||
Note: for general notes about contributing, see the [CONTRIBUTING.md](../../CONTRIBUTING.md).
|
||||
Note: for general notes about contributing, see the [CONTRIBUTING.md](../CONTRIBUTING.md).
|
||||
|
||||
## Compiler Development
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
"react-is": "0.0.0-experimental-4beb1fd8-20241118"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/types": "^7.26.0",
|
||||
"@tsconfig/strictest": "^2.0.5",
|
||||
"concurrently": "^7.4.0",
|
||||
"esbuild": "^0.25.0",
|
||||
@@ -38,15 +37,12 @@
|
||||
"prettier-plugin-hermes-parser": "^0.26.0",
|
||||
"prompt-promise": "^1.0.3",
|
||||
"rimraf": "^5.0.10",
|
||||
"to-fast-properties": "^2.0.0",
|
||||
"tsup": "^8.4.0",
|
||||
"typescript": "^5.4.3",
|
||||
"wait-on": "^7.2.0",
|
||||
"yargs": "^17.7.2"
|
||||
},
|
||||
"resolutions": {
|
||||
"rimraf": "5.0.10",
|
||||
"@babel/types": "7.26.3"
|
||||
"rimraf": "5.0.10"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22"
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"!*.tsbuildinfo"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "rimraf dist && tsup",
|
||||
"build": "rimraf dist && scripts/build.js",
|
||||
"test": "./scripts/link-react-compiler-runtime.sh && yarn snap:ci",
|
||||
"jest": "yarn build && ts-node node_modules/.bin/jest",
|
||||
"snap": "node ../snap/dist/main.js",
|
||||
@@ -17,10 +17,10 @@
|
||||
"snap:ci": "yarn snap:build && yarn snap",
|
||||
"ts:analyze-trace": "scripts/ts-analyze-trace.sh",
|
||||
"lint": "yarn eslint src",
|
||||
"watch": "yarn build --watch"
|
||||
"watch": "scripts/build.js --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.26.0"
|
||||
"@babel/types": "^7.19.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.2.0",
|
||||
|
||||
61
compiler/packages/babel-plugin-react-compiler/scripts/build.js
Executable file
61
compiler/packages/babel-plugin-react-compiler/scripts/build.js
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const esbuild = require('esbuild');
|
||||
const yargs = require('yargs');
|
||||
const path = require('path');
|
||||
|
||||
const argv = yargs(process.argv.slice(2))
|
||||
.options('w', {
|
||||
alias: 'watch',
|
||||
default: false,
|
||||
type: 'boolean',
|
||||
})
|
||||
.parse();
|
||||
|
||||
const config = {
|
||||
entryPoints: [path.join(__dirname, '../src/index.ts')],
|
||||
outfile: path.join(__dirname, '../dist/index.js'),
|
||||
bundle: true,
|
||||
external: ['@babel/types'],
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
};
|
||||
|
||||
async function main() {
|
||||
if (argv.w) {
|
||||
const ctx = await esbuild.context(config);
|
||||
await ctx.watch();
|
||||
console.log('watching for changes...');
|
||||
} else {
|
||||
await esbuild.build({
|
||||
sourcemap: true,
|
||||
minify: false,
|
||||
...config,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -188,7 +188,6 @@ export class CompilerError extends Error {
|
||||
constructor(...args: Array<any>) {
|
||||
super(...args);
|
||||
this.name = 'ReactCompilerError';
|
||||
this.details = [];
|
||||
}
|
||||
|
||||
override get message(): string {
|
||||
@@ -198,10 +197,7 @@ export class CompilerError extends Error {
|
||||
override set message(_message: string) {}
|
||||
|
||||
override toString(): string {
|
||||
if (Array.isArray(this.details)) {
|
||||
return this.details.map(detail => detail.toString()).join('\n\n');
|
||||
}
|
||||
return this.name;
|
||||
return this.details.map(detail => detail.toString()).join('\n\n');
|
||||
}
|
||||
|
||||
push(options: CompilerErrorDetailOptions): CompilerErrorDetail {
|
||||
|
||||
@@ -3,9 +3,6 @@ import {hasOwnProperty} from '../Utils/utils';
|
||||
import {PluginOptions} from './Options';
|
||||
|
||||
function hasModule(name: string): boolean {
|
||||
if (typeof require === 'undefined') {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return !!require.resolve(name);
|
||||
} catch (error: any) {
|
||||
|
||||
@@ -1909,31 +1909,16 @@ function lowerExpression(
|
||||
|
||||
if (operator === '=') {
|
||||
const left = expr.get('left');
|
||||
if (left.isLVal()) {
|
||||
return lowerAssignment(
|
||||
builder,
|
||||
left.node.loc ?? GeneratedSource,
|
||||
InstructionKind.Reassign,
|
||||
left,
|
||||
lowerExpressionToTemporary(builder, expr.get('right')),
|
||||
left.isArrayPattern() || left.isObjectPattern()
|
||||
? 'Destructure'
|
||||
: 'Assignment',
|
||||
);
|
||||
} else {
|
||||
/**
|
||||
* OptionalMemberExpressions as the left side of an AssignmentExpression are Stage 1 and
|
||||
* not supported by React Compiler yet.
|
||||
*/
|
||||
builder.errors.push({
|
||||
reason: `(BuildHIR::lowerExpression) Unsupported syntax on the left side of an AssignmentExpression`,
|
||||
description: `Expected an LVal, got: ${left.type}`,
|
||||
severity: ErrorSeverity.Todo,
|
||||
loc: left.node.loc ?? null,
|
||||
suggestions: null,
|
||||
});
|
||||
return {kind: 'UnsupportedNode', node: exprNode, loc: exprLoc};
|
||||
}
|
||||
return lowerAssignment(
|
||||
builder,
|
||||
left.node.loc ?? GeneratedSource,
|
||||
InstructionKind.Reassign,
|
||||
left,
|
||||
lowerExpressionToTemporary(builder, expr.get('right')),
|
||||
left.isArrayPattern() || left.isObjectPattern()
|
||||
? 'Destructure'
|
||||
: 'Assignment',
|
||||
);
|
||||
}
|
||||
|
||||
const operators: {
|
||||
@@ -2106,7 +2091,7 @@ function lowerExpression(
|
||||
propName = namePath.node.name;
|
||||
if (propName.indexOf(':') !== -1) {
|
||||
builder.errors.push({
|
||||
reason: `(BuildHIR::lowerExpression) Unexpected colon in attribute name \`${propName}\``,
|
||||
reason: `(BuildHIR::lowerExpression) Unexpected colon in attribute name \`${name}\``,
|
||||
severity: ErrorSeverity.Todo,
|
||||
loc: namePath.node.loc ?? null,
|
||||
suggestions: null,
|
||||
|
||||
@@ -63,20 +63,8 @@ export function findContextIdentifiers(
|
||||
state: FindContextIdentifierState,
|
||||
): void {
|
||||
const left = path.get('left');
|
||||
if (left.isLVal()) {
|
||||
const currentFn = state.currentFn.at(-1) ?? null;
|
||||
handleAssignment(currentFn, state.identifiers, left);
|
||||
} else {
|
||||
/**
|
||||
* OptionalMemberExpressions as the left side of an AssignmentExpression are Stage 1 and
|
||||
* not supported by React Compiler yet.
|
||||
*/
|
||||
CompilerError.throwTodo({
|
||||
reason: `Unsupported syntax on the left side of an AssignmentExpression`,
|
||||
description: `Expected an LVal, got: ${left.type}`,
|
||||
loc: left.node.loc ?? null,
|
||||
});
|
||||
}
|
||||
const currentFn = state.currentFn.at(-1) ?? null;
|
||||
handleAssignment(currentFn, state.identifiers, left);
|
||||
},
|
||||
UpdateExpression(
|
||||
path: NodePath<t.UpdateExpression>,
|
||||
|
||||
@@ -119,8 +119,8 @@ const TYPED_GLOBALS: Array<[string, BuiltInType]> = [
|
||||
],
|
||||
/*
|
||||
* https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from
|
||||
* Array.from(arrayLike, optionalFn, optionalThis)
|
||||
* Note that the Effect of `arrayLike` is polymorphic i.e.
|
||||
* Array.from(arrayLike, optionalFn, optionalThis) not added because
|
||||
* the Effect of `arrayLike` is polymorphic i.e.
|
||||
* - Effect.read if
|
||||
* - it does not have an @iterator property and is array-like
|
||||
* (i.e. has a length property)
|
||||
@@ -128,20 +128,6 @@ const TYPED_GLOBALS: Array<[string, BuiltInType]> = [
|
||||
* - Effect.mutate if it is a self-mutative iterator (e.g. a generator
|
||||
* function)
|
||||
*/
|
||||
[
|
||||
'from',
|
||||
addFunction(DEFAULT_SHAPES, [], {
|
||||
positionalParams: [
|
||||
Effect.ConditionallyMutate,
|
||||
Effect.ConditionallyMutate,
|
||||
Effect.ConditionallyMutate,
|
||||
],
|
||||
restParam: Effect.Read,
|
||||
returnType: {kind: 'Object', shapeId: BuiltInArrayId},
|
||||
calleeEffect: Effect.Read,
|
||||
returnValueKind: ValueKind.Mutable,
|
||||
}),
|
||||
],
|
||||
[
|
||||
'of',
|
||||
// Array.of(element0, ..., elementN)
|
||||
|
||||
@@ -872,33 +872,11 @@ function inferBlock(
|
||||
reason: new Set([ValueReason.Other]),
|
||||
context: new Set(),
|
||||
};
|
||||
|
||||
for (const element of instrValue.elements) {
|
||||
if (element.kind === 'Spread') {
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
element.place,
|
||||
isArrayType(element.place.identifier)
|
||||
? Effect.Capture
|
||||
: Effect.ConditionallyMutate,
|
||||
ValueReason.Other,
|
||||
);
|
||||
} else if (element.kind === 'Identifier') {
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
element,
|
||||
Effect.Capture,
|
||||
ValueReason.Other,
|
||||
);
|
||||
} else {
|
||||
let _: 'Hole' = element.kind;
|
||||
}
|
||||
}
|
||||
state.initialize(instrValue, valueKind);
|
||||
state.define(instr.lvalue, instrValue);
|
||||
instr.lvalue.effect = Effect.Store;
|
||||
continuation = {
|
||||
kind: 'funeffects',
|
||||
kind: 'initialize',
|
||||
valueKind,
|
||||
effect: {kind: Effect.Capture, reason: ValueReason.Other},
|
||||
lvalueEffect: Effect.Store,
|
||||
};
|
||||
break;
|
||||
}
|
||||
@@ -1263,12 +1241,21 @@ function inferBlock(
|
||||
for (let i = 0; i < instrValue.args.length; i++) {
|
||||
const arg = instrValue.args[i];
|
||||
const place = arg.kind === 'Identifier' ? arg : arg.place;
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
place,
|
||||
getArgumentEffect(effects != null ? effects[i] : null, arg),
|
||||
ValueReason.Other,
|
||||
);
|
||||
if (effects !== null) {
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
place,
|
||||
effects[i],
|
||||
ValueReason.Other,
|
||||
);
|
||||
} else {
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
place,
|
||||
Effect.ConditionallyMutate,
|
||||
ValueReason.Other,
|
||||
);
|
||||
}
|
||||
hasCaptureArgument ||= place.effect === Effect.Capture;
|
||||
}
|
||||
if (signature !== null) {
|
||||
@@ -1320,10 +1307,7 @@ function inferBlock(
|
||||
signature !== null
|
||||
? {
|
||||
kind: signature.returnValueKind,
|
||||
reason: new Set([
|
||||
signature.returnValueReason ??
|
||||
ValueReason.KnownReturnSignature,
|
||||
]),
|
||||
reason: new Set([ValueReason.Other]),
|
||||
context: new Set(),
|
||||
}
|
||||
: {
|
||||
@@ -1372,16 +1356,25 @@ function inferBlock(
|
||||
for (let i = 0; i < instrValue.args.length; i++) {
|
||||
const arg = instrValue.args[i];
|
||||
const place = arg.kind === 'Identifier' ? arg : arg.place;
|
||||
/*
|
||||
* If effects are inferred for an argument, we should fail invalid
|
||||
* mutating effects
|
||||
*/
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
place,
|
||||
getArgumentEffect(effects != null ? effects[i] : null, arg),
|
||||
ValueReason.Other,
|
||||
);
|
||||
if (effects !== null) {
|
||||
/*
|
||||
* If effects are inferred for an argument, we should fail invalid
|
||||
* mutating effects
|
||||
*/
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
place,
|
||||
effects[i],
|
||||
ValueReason.Other,
|
||||
);
|
||||
} else {
|
||||
state.referenceAndRecordEffects(
|
||||
freezeActions,
|
||||
place,
|
||||
Effect.ConditionallyMutate,
|
||||
ValueReason.Other,
|
||||
);
|
||||
}
|
||||
hasCaptureArgument ||= place.effect === Effect.Capture;
|
||||
}
|
||||
if (signature !== null) {
|
||||
@@ -2056,31 +2049,3 @@ function areArgumentsImmutableAndNonMutating(
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function getArgumentEffect(
|
||||
signatureEffect: Effect | null,
|
||||
arg: Place | SpreadPattern,
|
||||
): Effect {
|
||||
if (signatureEffect != null) {
|
||||
if (arg.kind === 'Identifier') {
|
||||
return signatureEffect;
|
||||
} else if (
|
||||
signatureEffect === Effect.Mutate ||
|
||||
signatureEffect === Effect.ConditionallyMutate
|
||||
) {
|
||||
return signatureEffect;
|
||||
} else {
|
||||
// see call-spread-argument-mutable-iterator test fixture
|
||||
if (signatureEffect === Effect.Freeze) {
|
||||
CompilerError.throwTodo({
|
||||
reason: 'Support spread syntax for hook arguments',
|
||||
loc: arg.place.loc,
|
||||
});
|
||||
}
|
||||
// effects[i] is Effect.Capture | Effect.Read | Effect.Store
|
||||
return Effect.ConditionallyMutate;
|
||||
}
|
||||
} else {
|
||||
return Effect.ConditionallyMutate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,15 +178,11 @@ function mergeLocation(l: SourceLocation, r: SourceLocation): SourceLocation {
|
||||
return l;
|
||||
} else {
|
||||
return {
|
||||
filename: l.filename,
|
||||
identifierName: l.identifierName,
|
||||
start: {
|
||||
index: Math.min(l.start.index, r.start.index),
|
||||
line: Math.min(l.start.line, r.start.line),
|
||||
column: Math.min(l.start.column, r.start.column),
|
||||
},
|
||||
end: {
|
||||
index: Math.max(l.end.index, r.end.index),
|
||||
line: Math.max(l.end.line, r.end.line),
|
||||
column: Math.max(l.end.column, r.end.column),
|
||||
},
|
||||
@@ -206,7 +202,7 @@ export function inRange(
|
||||
return id >= range.start && id < range.end;
|
||||
}
|
||||
|
||||
function mayAllocate(_env: Environment, instruction: Instruction): boolean {
|
||||
function mayAllocate(env: Environment, instruction: Instruction): boolean {
|
||||
const {value} = instruction;
|
||||
switch (value.kind) {
|
||||
case 'Destructure': {
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import {useIdentity, Stringify} from 'shared-runtime';
|
||||
|
||||
/**
|
||||
* TODO: Note that this `Array.from` is inferred to be mutating its first
|
||||
* argument. This is because React Compiler's typing system does not yet support
|
||||
* annotating a function with a set of argument match cases + distinct
|
||||
* definitions (polymorphism).
|
||||
*
|
||||
* In this case, we should be able to infer that the `Array.from` call is
|
||||
* not mutating its 0th argument.
|
||||
* The 0th argument should be typed as having `effect:Mutate` only when
|
||||
* (1) it might be a mutable iterable or
|
||||
* (2) the 1st argument might mutate its callee
|
||||
*/
|
||||
function Component({value}) {
|
||||
const arr = [{value: 'foo'}, {value: 'bar'}, {value}];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr, (x, idx) => ({...x, id: idx}));
|
||||
return <Stringify>{derived.at(-1)}</Stringify>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{value: 5}],
|
||||
sequentialRenders: [{value: 5}, {value: 6}, {value: 6}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { c as _c } from "react/compiler-runtime";
|
||||
import { useIdentity, Stringify } from "shared-runtime";
|
||||
|
||||
/**
|
||||
* TODO: Note that this `Array.from` is inferred to be mutating its first
|
||||
* argument. This is because React Compiler's typing system does not yet support
|
||||
* annotating a function with a set of argument match cases + distinct
|
||||
* definitions (polymorphism).
|
||||
*
|
||||
* In this case, we should be able to infer that the `Array.from` call is
|
||||
* not mutating its 0th argument.
|
||||
* The 0th argument should be typed as having `effect:Mutate` only when
|
||||
* (1) it might be a mutable iterable or
|
||||
* (2) the 1st argument might mutate its callee
|
||||
*/
|
||||
function Component(t0) {
|
||||
const $ = _c(4);
|
||||
const { value } = t0;
|
||||
const arr = [{ value: "foo" }, { value: "bar" }, { value }];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr, _temp);
|
||||
let t1;
|
||||
if ($[0] !== derived) {
|
||||
t1 = derived.at(-1);
|
||||
$[0] = derived;
|
||||
$[1] = t1;
|
||||
} else {
|
||||
t1 = $[1];
|
||||
}
|
||||
let t2;
|
||||
if ($[2] !== t1) {
|
||||
t2 = <Stringify>{t1}</Stringify>;
|
||||
$[2] = t1;
|
||||
$[3] = t2;
|
||||
} else {
|
||||
t2 = $[3];
|
||||
}
|
||||
return t2;
|
||||
}
|
||||
function _temp(x, idx) {
|
||||
return { ...x, id: idx };
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{ value: 5 }],
|
||||
sequentialRenders: [{ value: 5 }, { value: 6 }, { value: 6 }],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) <div>{"children":{"value":5,"id":2}}</div>
|
||||
<div>{"children":{"value":6,"id":2}}</div>
|
||||
<div>{"children":{"value":6,"id":2}}</div>
|
||||
@@ -1,26 +0,0 @@
|
||||
import {useIdentity, Stringify} from 'shared-runtime';
|
||||
|
||||
/**
|
||||
* TODO: Note that this `Array.from` is inferred to be mutating its first
|
||||
* argument. This is because React Compiler's typing system does not yet support
|
||||
* annotating a function with a set of argument match cases + distinct
|
||||
* definitions (polymorphism).
|
||||
*
|
||||
* In this case, we should be able to infer that the `Array.from` call is
|
||||
* not mutating its 0th argument.
|
||||
* The 0th argument should be typed as having `effect:Mutate` only when
|
||||
* (1) it might be a mutable iterable or
|
||||
* (2) the 1st argument might mutate its callee
|
||||
*/
|
||||
function Component({value}) {
|
||||
const arr = [{value: 'foo'}, {value: 'bar'}, {value}];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr, (x, idx) => ({...x, id: idx}));
|
||||
return <Stringify>{derived.at(-1)}</Stringify>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{value: 5}],
|
||||
sequentialRenders: [{value: 5}, {value: 6}, {value: 6}],
|
||||
};
|
||||
@@ -1,88 +0,0 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import {useIdentity, Stringify} from 'shared-runtime';
|
||||
|
||||
/**
|
||||
* TODO: Note that this `Array.from` is inferred to be mutating its first
|
||||
* argument. This is because React Compiler's typing system does not yet support
|
||||
* annotating a function with a set of argument match cases + distinct
|
||||
* definitions (polymorphism)
|
||||
*
|
||||
* In this case, we should be able to infer that the `Array.from` call is
|
||||
* not mutating its 0th argument.
|
||||
* The 0th argument should be typed as having `effect:Mutate` only when
|
||||
* (1) it might be a mutable iterable or
|
||||
* (2) the 1st argument might mutate its callee
|
||||
*/
|
||||
function Component({value}) {
|
||||
const arr = [{value: 'foo'}, {value: 'bar'}, {value}];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr);
|
||||
return <Stringify>{derived.at(-1)}</Stringify>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{value: 5}],
|
||||
sequentialRenders: [{value: 5}, {value: 6}, {value: 6}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { c as _c } from "react/compiler-runtime";
|
||||
import { useIdentity, Stringify } from "shared-runtime";
|
||||
|
||||
/**
|
||||
* TODO: Note that this `Array.from` is inferred to be mutating its first
|
||||
* argument. This is because React Compiler's typing system does not yet support
|
||||
* annotating a function with a set of argument match cases + distinct
|
||||
* definitions (polymorphism)
|
||||
*
|
||||
* In this case, we should be able to infer that the `Array.from` call is
|
||||
* not mutating its 0th argument.
|
||||
* The 0th argument should be typed as having `effect:Mutate` only when
|
||||
* (1) it might be a mutable iterable or
|
||||
* (2) the 1st argument might mutate its callee
|
||||
*/
|
||||
function Component(t0) {
|
||||
const $ = _c(4);
|
||||
const { value } = t0;
|
||||
const arr = [{ value: "foo" }, { value: "bar" }, { value }];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr);
|
||||
let t1;
|
||||
if ($[0] !== derived) {
|
||||
t1 = derived.at(-1);
|
||||
$[0] = derived;
|
||||
$[1] = t1;
|
||||
} else {
|
||||
t1 = $[1];
|
||||
}
|
||||
let t2;
|
||||
if ($[2] !== t1) {
|
||||
t2 = <Stringify>{t1}</Stringify>;
|
||||
$[2] = t1;
|
||||
$[3] = t2;
|
||||
} else {
|
||||
t2 = $[3];
|
||||
}
|
||||
return t2;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{ value: 5 }],
|
||||
sequentialRenders: [{ value: 5 }, { value: 6 }, { value: 6 }],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) <div>{"children":{"value":5}}</div>
|
||||
<div>{"children":{"value":6}}</div>
|
||||
<div>{"children":{"value":6}}</div>
|
||||
@@ -1,26 +0,0 @@
|
||||
import {useIdentity, Stringify} from 'shared-runtime';
|
||||
|
||||
/**
|
||||
* TODO: Note that this `Array.from` is inferred to be mutating its first
|
||||
* argument. This is because React Compiler's typing system does not yet support
|
||||
* annotating a function with a set of argument match cases + distinct
|
||||
* definitions (polymorphism)
|
||||
*
|
||||
* In this case, we should be able to infer that the `Array.from` call is
|
||||
* not mutating its 0th argument.
|
||||
* The 0th argument should be typed as having `effect:Mutate` only when
|
||||
* (1) it might be a mutable iterable or
|
||||
* (2) the 1st argument might mutate its callee
|
||||
*/
|
||||
function Component({value}) {
|
||||
const arr = [{value: 'foo'}, {value: 'bar'}, {value}];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr);
|
||||
return <Stringify>{derived.at(-1)}</Stringify>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{value: 5}],
|
||||
sequentialRenders: [{value: 5}, {value: 6}, {value: 6}],
|
||||
};
|
||||
@@ -1,64 +0,0 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import {mutateAndReturn, Stringify, useIdentity} from 'shared-runtime';
|
||||
|
||||
function Component({value}) {
|
||||
const arr = [{value: 'foo'}, {value: 'bar'}, {value}];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr, mutateAndReturn);
|
||||
return <Stringify>{derived.at(-1)}</Stringify>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{value: 5}],
|
||||
sequentialRenders: [{value: 5}, {value: 6}, {value: 6}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { c as _c } from "react/compiler-runtime";
|
||||
import { mutateAndReturn, Stringify, useIdentity } from "shared-runtime";
|
||||
|
||||
function Component(t0) {
|
||||
const $ = _c(4);
|
||||
const { value } = t0;
|
||||
const arr = [{ value: "foo" }, { value: "bar" }, { value }];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr, mutateAndReturn);
|
||||
let t1;
|
||||
if ($[0] !== derived) {
|
||||
t1 = derived.at(-1);
|
||||
$[0] = derived;
|
||||
$[1] = t1;
|
||||
} else {
|
||||
t1 = $[1];
|
||||
}
|
||||
let t2;
|
||||
if ($[2] !== t1) {
|
||||
t2 = <Stringify>{t1}</Stringify>;
|
||||
$[2] = t1;
|
||||
$[3] = t2;
|
||||
} else {
|
||||
t2 = $[3];
|
||||
}
|
||||
return t2;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{ value: 5 }],
|
||||
sequentialRenders: [{ value: 5 }, { value: 6 }, { value: 6 }],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) <div>{"children":{"value":5,"wat0":"joe"}}</div>
|
||||
<div>{"children":{"value":6,"wat0":"joe"}}</div>
|
||||
<div>{"children":{"value":6,"wat0":"joe"}}</div>
|
||||
@@ -1,14 +0,0 @@
|
||||
import {mutateAndReturn, Stringify, useIdentity} from 'shared-runtime';
|
||||
|
||||
function Component({value}) {
|
||||
const arr = [{value: 'foo'}, {value: 'bar'}, {value}];
|
||||
useIdentity();
|
||||
const derived = Array.from(arr, mutateAndReturn);
|
||||
return <Stringify>{derived.at(-1)}</Stringify>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [{value: 5}],
|
||||
sequentialRenders: [{value: 5}, {value: 6}, {value: 6}],
|
||||
};
|
||||
@@ -1,62 +0,0 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
function useBar({arg}) {
|
||||
/**
|
||||
* Note that mutableIterator is mutated by the later object spread. Therefore,
|
||||
* `s.values()` should be memoized within the same block as the object spread.
|
||||
* In terms of compiler internals, they should have the same reactive scope.
|
||||
*/
|
||||
const obj = {};
|
||||
const s = new Set([obj, 5, 4]);
|
||||
const mutableIterator = s.values();
|
||||
const arr = [...mutableIterator];
|
||||
|
||||
obj.x = arg;
|
||||
return arr;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useBar,
|
||||
params: [{arg: 3}],
|
||||
sequentialRenders: [{arg: 3}, {arg: 3}, {arg: 4}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { c as _c } from "react/compiler-runtime";
|
||||
function useBar(t0) {
|
||||
const $ = _c(2);
|
||||
const { arg } = t0;
|
||||
let arr;
|
||||
if ($[0] !== arg) {
|
||||
const obj = {};
|
||||
const s = new Set([obj, 5, 4]);
|
||||
const mutableIterator = s.values();
|
||||
arr = [...mutableIterator];
|
||||
|
||||
obj.x = arg;
|
||||
$[0] = arg;
|
||||
$[1] = arr;
|
||||
} else {
|
||||
arr = $[1];
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useBar,
|
||||
params: [{ arg: 3 }],
|
||||
sequentialRenders: [{ arg: 3 }, { arg: 3 }, { arg: 4 }],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) [{"x":3},5,4]
|
||||
[{"x":3},5,4]
|
||||
[{"x":4},5,4]
|
||||
@@ -1,20 +0,0 @@
|
||||
function useBar({arg}) {
|
||||
/**
|
||||
* Note that mutableIterator is mutated by the later object spread. Therefore,
|
||||
* `s.values()` should be memoized within the same block as the object spread.
|
||||
* In terms of compiler internals, they should have the same reactive scope.
|
||||
*/
|
||||
const obj = {};
|
||||
const s = new Set([obj, 5, 4]);
|
||||
const mutableIterator = s.values();
|
||||
const arr = [...mutableIterator];
|
||||
|
||||
obj.x = arg;
|
||||
return arr;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useBar,
|
||||
params: [{arg: 3}],
|
||||
sequentialRenders: [{arg: 3}, {arg: 3}, {arg: 4}],
|
||||
};
|
||||
@@ -55,20 +55,26 @@ import { c as _c } from "react/compiler-runtime"; /**
|
||||
|
||||
function useBar(t0) {
|
||||
"use memo";
|
||||
const $ = _c(2);
|
||||
const $ = _c(3);
|
||||
const { arg } = t0;
|
||||
let t1;
|
||||
if ($[0] !== arg) {
|
||||
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
||||
const s = new Set([1, 5, 4]);
|
||||
const mutableIterator = s.values();
|
||||
|
||||
t1 = [arg, ...mutableIterator];
|
||||
$[0] = arg;
|
||||
$[1] = t1;
|
||||
t1 = s.values();
|
||||
$[0] = t1;
|
||||
} else {
|
||||
t1 = $[1];
|
||||
t1 = $[0];
|
||||
}
|
||||
return t1;
|
||||
const mutableIterator = t1;
|
||||
let t2;
|
||||
if ($[1] !== arg) {
|
||||
t2 = [arg, ...mutableIterator];
|
||||
$[1] = arg;
|
||||
$[2] = t2;
|
||||
} else {
|
||||
t2 = $[2];
|
||||
}
|
||||
return t2;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
@@ -78,8 +84,4 @@ export const FIXTURE_ENTRYPOINT = {
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) [3,1,5,4]
|
||||
[3,1,5,4]
|
||||
[4,1,5,4]
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import {useIdentity} from 'shared-runtime';
|
||||
|
||||
function useFoo() {
|
||||
const it = new Set([1, 2]).values();
|
||||
useIdentity();
|
||||
return Math.max(...it);
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useFoo,
|
||||
params: [{}],
|
||||
sequentialRenders: [{}, {}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { useIdentity } from "shared-runtime";
|
||||
|
||||
function useFoo() {
|
||||
const it = new Set([1, 2]).values();
|
||||
useIdentity();
|
||||
return Math.max(...it);
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useFoo,
|
||||
params: [{}],
|
||||
sequentialRenders: [{}, {}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) 2
|
||||
2
|
||||
@@ -1,13 +0,0 @@
|
||||
import {useIdentity} from 'shared-runtime';
|
||||
|
||||
function useFoo() {
|
||||
const it = new Set([1, 2]).values();
|
||||
useIdentity();
|
||||
return Math.max(...it);
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useFoo,
|
||||
params: [{}],
|
||||
sequentialRenders: [{}, {}],
|
||||
};
|
||||
@@ -1,33 +0,0 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import {useIdentity} from 'shared-runtime';
|
||||
|
||||
function Component() {
|
||||
const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
return useIdentity(...items.values());
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [],
|
||||
sequentialRenders: [{}, {}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
|
||||
## Error
|
||||
|
||||
```
|
||||
3 | function Component() {
|
||||
4 | const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
> 5 | return useIdentity(...items.values());
|
||||
| ^^^^^^^^^^^^^^ Todo: Support spread syntax for hook arguments (5:5)
|
||||
6 | }
|
||||
7 |
|
||||
8 | export const FIXTURE_ENTRYPOINT = {
|
||||
```
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
import {useIdentity} from 'shared-runtime';
|
||||
|
||||
function Component() {
|
||||
const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
return useIdentity(...items.values());
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Component,
|
||||
params: [],
|
||||
sequentialRenders: [{}, {}],
|
||||
};
|
||||
@@ -4,10 +4,9 @@
|
||||
```javascript
|
||||
import {makeArray} from 'shared-runtime';
|
||||
|
||||
const other = [0, 1];
|
||||
function Component({}) {
|
||||
function Component(props) {
|
||||
const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
const max = Math.max(2, items.push(5), ...other);
|
||||
const max = Math.max(...items.filter(Boolean));
|
||||
return max;
|
||||
}
|
||||
|
||||
@@ -22,13 +21,13 @@ export const FIXTURE_ENTRYPOINT = {
|
||||
## Error
|
||||
|
||||
```
|
||||
4 | function Component({}) {
|
||||
5 | const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
> 6 | const max = Math.max(2, items.push(5), ...other);
|
||||
| ^^^^^^^^ Invariant: [Codegen] Internal error: MethodCall::property must be an unpromoted + unmemoized MemberExpression. Got a `Identifier` (6:6)
|
||||
7 | return max;
|
||||
8 | }
|
||||
9 |
|
||||
3 | function Component(props) {
|
||||
4 | const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
> 5 | const max = Math.max(...items.filter(Boolean));
|
||||
| ^^^^^^^^ Invariant: [Codegen] Internal error: MethodCall::property must be an unpromoted + unmemoized MemberExpression. Got a `Identifier` (5:5)
|
||||
6 | return max;
|
||||
7 | }
|
||||
8 |
|
||||
```
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import {makeArray} from 'shared-runtime';
|
||||
|
||||
const other = [0, 1];
|
||||
function Component({}) {
|
||||
function Component(props) {
|
||||
const items = makeArray(0, 1, 2, null, 4, false, 6);
|
||||
const max = Math.max(2, items.push(5), ...other);
|
||||
const max = Math.max(...items.filter(Boolean));
|
||||
return max;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,29 +68,21 @@ function Validate({ x, input }) {
|
||||
}
|
||||
function useFoo(input) {
|
||||
"use memo";
|
||||
const $ = _c(5);
|
||||
const $ = _c(3);
|
||||
|
||||
const x = Array.from([{}]);
|
||||
useIdentity();
|
||||
x.push([input]);
|
||||
let t0;
|
||||
if ($[0] !== input) {
|
||||
t0 = [input];
|
||||
if ($[0] !== input || $[1] !== x) {
|
||||
t0 = <Validate x={x} input={input} />;
|
||||
$[0] = input;
|
||||
$[1] = t0;
|
||||
$[1] = x;
|
||||
$[2] = t0;
|
||||
} else {
|
||||
t0 = $[1];
|
||||
t0 = $[2];
|
||||
}
|
||||
x.push(t0);
|
||||
let t1;
|
||||
if ($[2] !== input || $[3] !== x) {
|
||||
t1 = <Validate x={x} input={input} />;
|
||||
$[2] = input;
|
||||
$[3] = x;
|
||||
$[4] = t1;
|
||||
} else {
|
||||
t1 = $[4];
|
||||
}
|
||||
return t1;
|
||||
return t0;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
|
||||
@@ -37,12 +37,6 @@ function useFoo({val1, val2}) {
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useFoo,
|
||||
params: [{val1: 1, val2: 2}],
|
||||
params: [
|
||||
{val1: 1, val2: 2},
|
||||
{val1: 1, val2: 2},
|
||||
{val1: 1, val2: 3},
|
||||
{val1: 4, val2: 2},
|
||||
],
|
||||
};
|
||||
|
||||
```
|
||||
@@ -77,51 +71,29 @@ function Validate({ x, val1, val2 }) {
|
||||
}
|
||||
function useFoo(t0) {
|
||||
"use memo";
|
||||
const $ = _c(8);
|
||||
const $ = _c(4);
|
||||
const { val1, val2 } = t0;
|
||||
|
||||
const x = Array.from([]);
|
||||
useIdentity();
|
||||
x.push([val1]);
|
||||
x.push([val2]);
|
||||
let t1;
|
||||
if ($[0] !== val1) {
|
||||
t1 = [val1];
|
||||
if ($[0] !== val1 || $[1] !== val2 || $[2] !== x) {
|
||||
t1 = <Validate x={x} val1={val1} val2={val2} />;
|
||||
$[0] = val1;
|
||||
$[1] = t1;
|
||||
$[1] = val2;
|
||||
$[2] = x;
|
||||
$[3] = t1;
|
||||
} else {
|
||||
t1 = $[1];
|
||||
t1 = $[3];
|
||||
}
|
||||
x.push(t1);
|
||||
let t2;
|
||||
if ($[2] !== val2) {
|
||||
t2 = [val2];
|
||||
$[2] = val2;
|
||||
$[3] = t2;
|
||||
} else {
|
||||
t2 = $[3];
|
||||
}
|
||||
x.push(t2);
|
||||
let t3;
|
||||
if ($[4] !== val1 || $[5] !== val2 || $[6] !== x) {
|
||||
t3 = <Validate x={x} val1={val1} val2={val2} />;
|
||||
$[4] = val1;
|
||||
$[5] = val2;
|
||||
$[6] = x;
|
||||
$[7] = t3;
|
||||
} else {
|
||||
t3 = $[7];
|
||||
}
|
||||
return t3;
|
||||
return t1;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useFoo,
|
||||
params: [{ val1: 1, val2: 2 }],
|
||||
params: [
|
||||
{ val1: 1, val2: 2 },
|
||||
{ val1: 1, val2: 2 },
|
||||
{ val1: 1, val2: 3 },
|
||||
{ val1: 4, val2: 2 },
|
||||
],
|
||||
};
|
||||
|
||||
```
|
||||
@@ -33,10 +33,4 @@ function useFoo({val1, val2}) {
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useFoo,
|
||||
params: [{val1: 1, val2: 2}],
|
||||
params: [
|
||||
{val1: 1, val2: 2},
|
||||
{val1: 1, val2: 2},
|
||||
{val1: 1, val2: 3},
|
||||
{val1: 4, val2: 2},
|
||||
],
|
||||
};
|
||||
@@ -22,8 +22,6 @@ export {
|
||||
findDirectiveEnablingMemoization,
|
||||
findDirectiveDisablingMemoization,
|
||||
type CompilerPipelineValue,
|
||||
type Logger,
|
||||
type LoggerEvent,
|
||||
type PluginOptions,
|
||||
} from './Entrypoint';
|
||||
export {
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
"moduleResolution": "Bundler",
|
||||
"rootDir": "src",
|
||||
"outDir": "dist",
|
||||
// https://github.com/microsoft/TypeScript/issues/30925
|
||||
"tsBuildInfoFile": "dist/tsconfig.tsbuildinfo",
|
||||
"jsx": "react-jsxdev",
|
||||
// weaken strictness from preset
|
||||
"importsNotUsedAsValues": "remove",
|
||||
@@ -14,8 +16,8 @@
|
||||
"target": "ES2015",
|
||||
// ideally turn off only during dev, or on a per-file basis
|
||||
"noUnusedLocals": false,
|
||||
"removeComments": true,
|
||||
"declaration": true,
|
||||
"composite": true,
|
||||
"removeComments": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
import {defineConfig} from 'tsup';
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['./src/index.ts'],
|
||||
outDir: './dist',
|
||||
external: ['@babel/types'],
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
dts: false,
|
||||
bundle: true,
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
target: 'es2015',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/`,
|
||||
},
|
||||
});
|
||||
@@ -4,9 +4,9 @@
|
||||
"description": "ESLint plugin to display errors found by the React compiler.",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"build": "rimraf dist && tsup",
|
||||
"test": "jest",
|
||||
"watch": "yarn build --watch"
|
||||
"build": "rimraf dist && scripts/build.js",
|
||||
"test": "tsc && jest",
|
||||
"watch": "scripts/build.js --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
@@ -22,7 +22,7 @@
|
||||
"devDependencies": {
|
||||
"@babel/preset-env": "^7.22.4",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@babel/types": "^7.26.0",
|
||||
"@babel/types": "^7.19.0",
|
||||
"@types/eslint": "^8.56.12",
|
||||
"@types/node": "^20.2.5",
|
||||
"babel-jest": "^29.0.3",
|
||||
|
||||
67
compiler/packages/eslint-plugin-react-compiler/scripts/build.js
Executable file
67
compiler/packages/eslint-plugin-react-compiler/scripts/build.js
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const esbuild = require('esbuild');
|
||||
const yargs = require('yargs');
|
||||
const path = require('path');
|
||||
|
||||
const argv = yargs(process.argv.slice(2))
|
||||
.options('w', {
|
||||
alias: 'watch',
|
||||
default: false,
|
||||
type: 'boolean',
|
||||
})
|
||||
.parse();
|
||||
|
||||
const config = {
|
||||
entryPoints: [path.join(__dirname, '../src/index.ts')],
|
||||
outfile: path.join(__dirname, '../dist/index.js'),
|
||||
bundle: true,
|
||||
external: [
|
||||
'@babel/core',
|
||||
'@babel/plugin-proposal-private-methods',
|
||||
'hermes-parser',
|
||||
'zod',
|
||||
'zod-validation-error',
|
||||
],
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
};
|
||||
|
||||
async function main() {
|
||||
if (argv.w) {
|
||||
const ctx = await esbuild.context(config);
|
||||
await ctx.watch();
|
||||
console.log('watching for changes...');
|
||||
} else {
|
||||
await esbuild.build({
|
||||
sourcemap: true,
|
||||
minify: false,
|
||||
...config,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -7,27 +7,22 @@
|
||||
|
||||
import ReactCompilerRule from './rules/ReactCompilerRule';
|
||||
|
||||
const meta = {
|
||||
name: 'eslint-plugin-react-compiler',
|
||||
};
|
||||
|
||||
const rules = {
|
||||
'react-compiler': ReactCompilerRule,
|
||||
};
|
||||
|
||||
const configs = {
|
||||
recommended: {
|
||||
plugins: {
|
||||
'react-compiler': {
|
||||
rules: {
|
||||
'react-compiler': ReactCompilerRule,
|
||||
module.exports = {
|
||||
rules: {
|
||||
'react-compiler': ReactCompilerRule,
|
||||
},
|
||||
configs: {
|
||||
recommended: {
|
||||
plugins: {
|
||||
'react-compiler': {
|
||||
rules: {
|
||||
'react-compiler': ReactCompilerRule,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
'react-compiler/react-compiler': 'error',
|
||||
rules: {
|
||||
'react-compiler/react-compiler': 'error',
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export {configs, rules, meta};
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
// v0.17.1
|
||||
declare module 'hermes-eslint' {
|
||||
declare module "hermes-eslint" {
|
||||
// https://fburl.com/2vikhmaa
|
||||
type ParseForESLintOptions = {
|
||||
/**
|
||||
@@ -37,7 +37,7 @@ declare module 'hermes-eslint' {
|
||||
/**
|
||||
* The source type of the script.
|
||||
*/
|
||||
sourceType: 'script' | 'module';
|
||||
sourceType: "script" | "module";
|
||||
|
||||
/**
|
||||
* Ignore <fbt /> JSX elements when adding references to the module-level `React` variable.
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
*/
|
||||
|
||||
// v0.17.1
|
||||
declare module 'hermes-parser' {
|
||||
declare module "hermes-parser" {
|
||||
type HermesParserOptions = {
|
||||
allowReturnOutsideFunction?: boolean;
|
||||
babel?: boolean;
|
||||
flow?: 'all' | 'detect';
|
||||
flow?: "all" | "detect";
|
||||
enableExperimentalComponentSyntax?: boolean;
|
||||
sourceFilename?: string;
|
||||
sourceType?: 'module' | 'script' | 'unambiguous';
|
||||
sourceType?: "module" | "script" | "unambiguous";
|
||||
tokens?: boolean;
|
||||
};
|
||||
export function parse(code: string, options: Partial<HermesParserOptions>);
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
"rootDir": "../",
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsxdev",
|
||||
"paths": {
|
||||
"*": ["./src/types/*"]
|
||||
},
|
||||
|
||||
// weaken strictness from preset
|
||||
"importsNotUsedAsValues": "remove",
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
import {defineConfig} from 'tsup';
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['./src/index.ts'],
|
||||
outDir: './dist',
|
||||
external: [
|
||||
'@babel/core',
|
||||
'@babel/plugin-proposal-private-methods',
|
||||
'hermes-parser',
|
||||
'zod',
|
||||
'zod-validation-error',
|
||||
],
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
dts: false,
|
||||
bundle: true,
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
});
|
||||
@@ -6,9 +6,9 @@
|
||||
"src"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "rimraf dist && tsup",
|
||||
"build": "rimraf dist && scripts/build.js",
|
||||
"test": "jest src",
|
||||
"watch": "yarn build --watch"
|
||||
"watch": "scripts/build.js --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"invariant": "^2.2.4",
|
||||
|
||||
61
compiler/packages/make-read-only-util/scripts/build.js
Executable file
61
compiler/packages/make-read-only-util/scripts/build.js
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const esbuild = require('esbuild');
|
||||
const yargs = require('yargs');
|
||||
const path = require('path');
|
||||
|
||||
const argv = yargs(process.argv.slice(2))
|
||||
.options('w', {
|
||||
alias: 'watch',
|
||||
default: false,
|
||||
type: 'boolean',
|
||||
})
|
||||
.parse();
|
||||
|
||||
const config = {
|
||||
entryPoints: [path.join(__dirname, '../src/makeReadOnly.ts')],
|
||||
outfile: path.join(__dirname, '../dist/index.js'),
|
||||
bundle: true,
|
||||
format: 'esm',
|
||||
platform: 'browser',
|
||||
target: 'es6',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
};
|
||||
|
||||
async function main() {
|
||||
if (argv.w) {
|
||||
const ctx = await esbuild.context(config);
|
||||
await ctx.watch();
|
||||
console.log('watching for changes...');
|
||||
} else {
|
||||
await esbuild.build({
|
||||
sourcemap: true,
|
||||
minify: false,
|
||||
...config,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -1,29 +0,0 @@
|
||||
import {defineConfig} from 'tsup';
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['./src/makeReadOnly.ts'],
|
||||
outDir: './dist',
|
||||
splitting: false,
|
||||
sourcemap: true,
|
||||
dts: false,
|
||||
bundle: true,
|
||||
format: 'cjs',
|
||||
platform: 'browser',
|
||||
target: 'es2015',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
});
|
||||
@@ -6,9 +6,9 @@
|
||||
"react-compiler-healthcheck": "dist/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "rimraf dist && tsup",
|
||||
"build": "rimraf dist && scripts/build.js",
|
||||
"test": "echo 'no tests'",
|
||||
"watch": "yarn build --watch"
|
||||
"watch": "scripts/build.js --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.24.4",
|
||||
|
||||
72
compiler/packages/react-compiler-healthcheck/scripts/build.js
vendored
Executable file
72
compiler/packages/react-compiler-healthcheck/scripts/build.js
vendored
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const esbuild = require('esbuild');
|
||||
const yargs = require('yargs');
|
||||
const path = require('path');
|
||||
|
||||
const argv = yargs(process.argv.slice(2))
|
||||
.options('w', {
|
||||
alias: 'watch',
|
||||
default: false,
|
||||
type: 'boolean',
|
||||
})
|
||||
.parse();
|
||||
|
||||
const config = {
|
||||
entryPoints: [path.join(__dirname, '../src/index.ts')],
|
||||
outfile: path.join(__dirname, '../dist/index.js'),
|
||||
bundle: true,
|
||||
external: [
|
||||
'@babel/core',
|
||||
'@babel/parser',
|
||||
'chalk',
|
||||
'fast-glob',
|
||||
'ora',
|
||||
'yargs',
|
||||
'zod',
|
||||
'zod-validation-error',
|
||||
],
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
banner: {
|
||||
js: `#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
};
|
||||
|
||||
async function main() {
|
||||
if (argv.w) {
|
||||
const ctx = await esbuild.context(config);
|
||||
await ctx.watch();
|
||||
console.log('watching for changes...');
|
||||
} else {
|
||||
await esbuild.build({
|
||||
sourcemap: true,
|
||||
minify: false,
|
||||
...config,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -1,7 +1,3 @@
|
||||
export const config = {
|
||||
knownIncompatibleLibraries: [
|
||||
'mobx-react',
|
||||
'mobx-react-lite',
|
||||
'@risingstack/react-easy-state',
|
||||
],
|
||||
knownIncompatibleLibraries: ['mobx', '@risingstack/react-easy-state'],
|
||||
};
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
import {defineConfig} from 'tsup';
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['./src/index.ts'],
|
||||
outDir: './dist',
|
||||
external: [
|
||||
'@babel/core',
|
||||
'@babel/parser',
|
||||
'chalk',
|
||||
'fast-glob',
|
||||
'ora',
|
||||
'yargs',
|
||||
'zod',
|
||||
'zod-validation-error',
|
||||
],
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
dts: false,
|
||||
bundle: true,
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
banner: {
|
||||
js: `#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
});
|
||||
@@ -13,9 +13,9 @@
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "rimraf dist && tsup",
|
||||
"build": "rimraf dist && scripts/build.js",
|
||||
"test": "echo 'no tests'",
|
||||
"watch": "yarn build --watch"
|
||||
"watch": "scripts/build.js --watch"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
67
compiler/packages/react-compiler-runtime/scripts/build.js
vendored
Executable file
67
compiler/packages/react-compiler-runtime/scripts/build.js
vendored
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const esbuild = require('esbuild');
|
||||
const yargs = require('yargs');
|
||||
const path = require('path');
|
||||
const {Generator} = require('npm-dts');
|
||||
|
||||
const argv = yargs(process.argv.slice(2))
|
||||
.options('w', {
|
||||
alias: 'watch',
|
||||
default: false,
|
||||
type: 'boolean',
|
||||
})
|
||||
.parse();
|
||||
|
||||
const config = {
|
||||
entryPoints: [path.join(__dirname, '../src/index.ts')],
|
||||
outfile: path.join(__dirname, '../dist/index.js'),
|
||||
bundle: true,
|
||||
external: ['react'],
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
target: 'es6',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
};
|
||||
|
||||
async function main() {
|
||||
if (argv.w) {
|
||||
const ctx = await esbuild.context(config);
|
||||
await ctx.watch();
|
||||
console.log('watching for changes...');
|
||||
} else {
|
||||
await esbuild.build({
|
||||
sourcemap: true,
|
||||
minify: false,
|
||||
...config,
|
||||
});
|
||||
await new Generator({
|
||||
entry: 'src/index.ts',
|
||||
output: 'dist/index.d.ts',
|
||||
}).generate();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -1,30 +0,0 @@
|
||||
import {defineConfig} from 'tsup';
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['./src/index.ts'],
|
||||
outDir: './dist',
|
||||
external: ['react'],
|
||||
splitting: false,
|
||||
sourcemap: true,
|
||||
dts: false,
|
||||
bundle: true,
|
||||
format: 'cjs',
|
||||
platform: 'node',
|
||||
target: 'es2015',
|
||||
banner: {
|
||||
js: `/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @lightSyntaxTransform
|
||||
* @noflow
|
||||
* @nolint
|
||||
* @preventMunge
|
||||
* @preserve-invariant-messages
|
||||
*/
|
||||
|
||||
"use no memo";`,
|
||||
},
|
||||
});
|
||||
@@ -23,7 +23,7 @@
|
||||
"@babel/code-frame": "^7.22.5",
|
||||
"@babel/plugin-syntax-jsx": "^7.18.6",
|
||||
"@babel/preset-flow": "^7.7.4",
|
||||
"@babel/preset-typescript": "^7.26.0",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@parcel/watcher": "^2.1.0",
|
||||
"@testing-library/react": "^13.4.0",
|
||||
"babel-plugin-idx": "^3.0.3",
|
||||
|
||||
@@ -462,6 +462,7 @@ const skipFilter = new Set([
|
||||
|
||||
// bugs
|
||||
'bug-object-expression-computed-key-modified-during-after-construction-hoisted-sequence-expr',
|
||||
'bug-array-spread-mutable-iterator',
|
||||
`bug-capturing-func-maybealias-captured-mutate`,
|
||||
'bug-aliased-capture-aliased-mutate',
|
||||
'bug-aliased-capture-mutate',
|
||||
|
||||
@@ -4,7 +4,7 @@ const {execHelper} = require('./utils');
|
||||
async function buildPackages(pkgNames) {
|
||||
const spinner = ora(`Building packages`).info();
|
||||
for (const pkgName of pkgNames) {
|
||||
const command = `NODE_ENV=production yarn workspace ${pkgName} run build --dts`;
|
||||
const command = `NODE_ENV=production yarn workspace ${pkgName} run build`;
|
||||
spinner.start(`Running: ${command}\n`);
|
||||
try {
|
||||
await execHelper(command);
|
||||
|
||||
@@ -126,17 +126,6 @@
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/generator@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7"
|
||||
integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
|
||||
@@ -151,13 +140,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
|
||||
integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
|
||||
version "7.22.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz#c9b83d1ba74e163e023f008a3d3204588a7ceb60"
|
||||
@@ -230,19 +212,6 @@
|
||||
"@babel/helper-split-export-declaration" "^7.18.6"
|
||||
semver "^6.3.0"
|
||||
|
||||
"@babel/helper-create-class-features-plugin@^7.25.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
|
||||
integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==
|
||||
dependencies:
|
||||
"@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/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.9"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.1":
|
||||
version "7.22.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz#a7ed9a8488b45b467fca353cd1a44dc5f0cf5c70"
|
||||
@@ -279,7 +248,31 @@
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
|
||||
integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
|
||||
|
||||
"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0", "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.7.4":
|
||||
"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.21.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
|
||||
integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
|
||||
dependencies:
|
||||
"@babel/template" "^7.20.7"
|
||||
"@babel/types" "^7.21.0"
|
||||
|
||||
"@babel/helper-function-name@^7.19.0":
|
||||
version "7.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
|
||||
integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
|
||||
dependencies:
|
||||
"@babel/template" "^7.18.10"
|
||||
"@babel/types" "^7.19.0"
|
||||
|
||||
"@babel/helper-function-name@^7.22.5":
|
||||
version "7.22.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
|
||||
integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
|
||||
dependencies:
|
||||
"@babel/template" "^7.22.5"
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-function-name@^7.7.4":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2"
|
||||
integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==
|
||||
@@ -315,14 +308,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-member-expression-to-functions@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
|
||||
integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-imports@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
|
||||
@@ -410,13 +395,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
|
||||
integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0":
|
||||
version "7.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf"
|
||||
@@ -437,11 +415,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
|
||||
integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
|
||||
|
||||
"@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
|
||||
integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
|
||||
|
||||
"@babel/helper-remap-async-to-generator@^7.18.9":
|
||||
version "7.18.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
|
||||
@@ -484,15 +457,6 @@
|
||||
"@babel/helper-member-expression-to-functions" "^7.22.5"
|
||||
"@babel/helper-optimise-call-expression" "^7.22.5"
|
||||
|
||||
"@babel/helper-replace-supers@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
|
||||
integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
|
||||
dependencies:
|
||||
"@babel/helper-member-expression-to-functions" "^7.25.9"
|
||||
"@babel/helper-optimise-call-expression" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.5"
|
||||
|
||||
"@babel/helper-simple-access@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea"
|
||||
@@ -528,14 +492,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
|
||||
integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-split-export-declaration@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
|
||||
@@ -557,6 +513,31 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.24.7"
|
||||
|
||||
"@babel/helper-string-parser@^7.18.10":
|
||||
version "7.18.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56"
|
||||
integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==
|
||||
|
||||
"@babel/helper-string-parser@^7.19.4":
|
||||
version "7.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
|
||||
integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
|
||||
|
||||
"@babel/helper-string-parser@^7.21.5":
|
||||
version "7.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd"
|
||||
integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==
|
||||
|
||||
"@babel/helper-string-parser@^7.22.5":
|
||||
version "7.22.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
|
||||
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
|
||||
|
||||
"@babel/helper-string-parser@^7.24.8":
|
||||
version "7.24.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d"
|
||||
integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
@@ -677,6 +658,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32"
|
||||
integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==
|
||||
|
||||
"@babel/parser@^7.22.5":
|
||||
version "7.22.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
|
||||
integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
|
||||
|
||||
"@babel/parser@^7.24.4":
|
||||
version "7.24.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
|
||||
@@ -696,13 +682,6 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.3"
|
||||
|
||||
"@babel/parser@^7.26.10", "@babel/parser@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
|
||||
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/parser@^7.7.4":
|
||||
version "7.21.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
|
||||
@@ -848,13 +827,6 @@
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.18.6"
|
||||
|
||||
"@babel/plugin-syntax-jsx@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290"
|
||||
integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
|
||||
@@ -918,13 +890,6 @@
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.18.6"
|
||||
|
||||
"@babel/plugin-syntax-typescript@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399"
|
||||
integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
|
||||
@@ -1155,14 +1120,6 @@
|
||||
"@babel/helper-plugin-utils" "^7.21.5"
|
||||
"@babel/helper-simple-access" "^7.21.5"
|
||||
|
||||
"@babel/plugin-transform-modules-commonjs@^7.25.9":
|
||||
version "7.26.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb"
|
||||
integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==
|
||||
dependencies:
|
||||
"@babel/helper-module-transforms" "^7.26.0"
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/plugin-transform-modules-commonjs@^7.8.3":
|
||||
version "7.21.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7"
|
||||
@@ -1382,17 +1339,6 @@
|
||||
"@babel/helper-plugin-utils" "^7.19.0"
|
||||
"@babel/plugin-syntax-typescript" "^7.18.6"
|
||||
|
||||
"@babel/plugin-transform-typescript@^7.25.9":
|
||||
version "7.26.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950"
|
||||
integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==
|
||||
dependencies:
|
||||
"@babel/helper-annotate-as-pure" "^7.25.9"
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.26.5"
|
||||
"@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/plugin-syntax-typescript" "^7.25.9"
|
||||
|
||||
"@babel/plugin-transform-unicode-escapes@^7.21.5":
|
||||
version "7.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2"
|
||||
@@ -1551,17 +1497,6 @@
|
||||
"@babel/helper-validator-option" "^7.18.6"
|
||||
"@babel/plugin-transform-typescript" "^7.18.6"
|
||||
|
||||
"@babel/preset-typescript@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d"
|
||||
integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
"@babel/helper-validator-option" "^7.25.9"
|
||||
"@babel/plugin-syntax-jsx" "^7.25.9"
|
||||
"@babel/plugin-transform-modules-commonjs" "^7.25.9"
|
||||
"@babel/plugin-transform-typescript" "^7.25.9"
|
||||
|
||||
"@babel/register@^7.0.0":
|
||||
version "7.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132"
|
||||
@@ -1619,6 +1554,15 @@
|
||||
"@babel/parser" "^7.21.9"
|
||||
"@babel/types" "^7.21.5"
|
||||
|
||||
"@babel/template@^7.22.5":
|
||||
version "7.22.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
|
||||
integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.22.5"
|
||||
"@babel/parser" "^7.22.5"
|
||||
"@babel/types" "^7.22.5"
|
||||
|
||||
"@babel/template@^7.24.7":
|
||||
version "7.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a"
|
||||
@@ -1637,15 +1581,6 @@
|
||||
"@babel/parser" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/template@^7.26.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
|
||||
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/parser" "^7.26.9"
|
||||
"@babel/types" "^7.26.9"
|
||||
|
||||
"@babel/template@^7.3.3":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31"
|
||||
@@ -1683,20 +1618,69 @@
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/traverse@^7.26.5", "@babel/traverse@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380"
|
||||
integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
version "7.18.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f"
|
||||
integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
"@babel/helper-validator-identifier" "^7.18.6"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@7.26.3", "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.22.5", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.6", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.10", "@babel/types@^7.26.3", "@babel/types@^7.26.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.4":
|
||||
"@babel/types@^7.18.10", "@babel/types@^7.19.0", "@babel/types@^7.2.0":
|
||||
version "7.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600"
|
||||
integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.18.10"
|
||||
"@babel/helper-validator-identifier" "^7.18.6"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.2.2", "@babel/types@^7.20.2", "@babel/types@^7.21.2":
|
||||
version "7.21.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4"
|
||||
integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.19.4"
|
||||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.4.4":
|
||||
version "7.22.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071"
|
||||
integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.21.5"
|
||||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.20.7":
|
||||
version "7.20.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f"
|
||||
integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.19.4"
|
||||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.22.5":
|
||||
version "7.22.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
|
||||
integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.22.5"
|
||||
"@babel/helper-validator-identifier" "^7.22.5"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.6", "@babel/types@^7.7.4":
|
||||
version "7.25.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6"
|
||||
integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.24.8"
|
||||
"@babel/helper-validator-identifier" "^7.24.7"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3":
|
||||
version "7.26.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0"
|
||||
integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==
|
||||
@@ -2633,15 +2617,6 @@
|
||||
"@types/yargs" "^17.0.8"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.2":
|
||||
version "0.3.8"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
|
||||
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
|
||||
@@ -2744,101 +2719,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
|
||||
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz#661a45a4709c70e59e596ec78daa9cb8b8d27604"
|
||||
integrity sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz#128fe8dd510d880cf98b4cb6c7add326815a0c4b"
|
||||
integrity sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz#363467bc49fd0b1e17075798ac8e9ad1e1e29535"
|
||||
integrity sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz#c2fe3d85fffe47f0ed0f076b3563ada22c8af19c"
|
||||
integrity sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==
|
||||
|
||||
"@rollup/rollup-freebsd-arm64@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz#d95bd8f6eaaf829781144fc8bd2d5d71d9f6a9f5"
|
||||
integrity sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==
|
||||
|
||||
"@rollup/rollup-freebsd-x64@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz#c3576c6011656e4966ded29f051edec636b44564"
|
||||
integrity sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz#48c87d0dee4f8dc9591a416717f91b4a89d77e3d"
|
||||
integrity sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz#f4c4e7c03a7767f2e5aa9d0c5cfbf5c0f59f2d41"
|
||||
integrity sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz#1015c9d07a99005025d13b8622b7600029d0b52f"
|
||||
integrity sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz#8f895eb5577748fc75af21beae32439626e0a14c"
|
||||
integrity sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==
|
||||
|
||||
"@rollup/rollup-linux-loongarch64-gnu@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz#c9cd5dbbdc6b3ca4dbeeb0337498cf31949004a0"
|
||||
integrity sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==
|
||||
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz#7ebb5b4441faa17843a210f7d0583a20c93b40e4"
|
||||
integrity sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz#10f5d7349fbd2fe78f9e36ecc90aab3154435c8d"
|
||||
integrity sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz#196347d2fa20593ab09d0b7e2589fb69bdf742c6"
|
||||
integrity sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz#7193cbd8d128212b8acda37e01b39d9e96259ef8"
|
||||
integrity sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz#29a6867278ca0420b891574cfab98ecad70c59d1"
|
||||
integrity sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz#89427dcac0c8e3a6d32b13a03a296a275d0de9a9"
|
||||
integrity sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz#ecb9711ba2b6d2bf6ee51265abe057ab90913deb"
|
||||
integrity sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.34.9":
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz#1973871850856ae72bc678aeb066ab952330e923"
|
||||
integrity sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==
|
||||
|
||||
"@sideway/address@^4.1.5":
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
|
||||
@@ -3008,7 +2888,7 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
|
||||
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
|
||||
|
||||
"@types/estree@1.0.6", "@types/estree@^1.0.6":
|
||||
"@types/estree@^1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
|
||||
integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
|
||||
@@ -3599,11 +3479,6 @@ ansi-styles@^6.1.0:
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
|
||||
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
|
||||
|
||||
any-promise@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
|
||||
|
||||
anymatch@^3.0.3:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
||||
@@ -3989,13 +3864,6 @@ buffer@^6.0.3:
|
||||
base64-js "^1.3.1"
|
||||
ieee754 "^1.2.1"
|
||||
|
||||
bundle-require@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-5.1.0.tgz#8db66f41950da3d77af1ef3322f4c3e04009faee"
|
||||
integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==
|
||||
dependencies:
|
||||
load-tsconfig "^0.2.3"
|
||||
|
||||
c8@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/c8/-/c8-9.1.0.tgz#0e57ba3ab9e5960ab1d650b4a86f71e53cb68112"
|
||||
@@ -4013,11 +3881,6 @@ c8@^9.1.0:
|
||||
yargs "^17.7.2"
|
||||
yargs-parser "^21.1.1"
|
||||
|
||||
cac@^6.7.14:
|
||||
version "6.7.14"
|
||||
resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
|
||||
integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
|
||||
|
||||
call-bind@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
||||
@@ -4098,13 +3961,6 @@ chokidar@^3.5.3:
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
chokidar@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
|
||||
integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
|
||||
dependencies:
|
||||
readdirp "^4.0.1"
|
||||
|
||||
ci-info@^3.2.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.4.0.tgz#b28484fd436cbc267900364f096c9dc185efb251"
|
||||
@@ -4252,11 +4108,6 @@ commander@^2.9.0:
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
commander@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
|
||||
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
|
||||
|
||||
commondir@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
||||
@@ -4282,11 +4133,6 @@ concurrently@^7.4.0:
|
||||
tree-kill "^1.2.2"
|
||||
yargs "^17.3.1"
|
||||
|
||||
consola@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.0.tgz#4cfc9348fd85ed16a17940b3032765e31061ab88"
|
||||
integrity sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==
|
||||
|
||||
convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
|
||||
@@ -4395,7 +4241,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, d
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^4.3.5, debug@^4.4.0:
|
||||
debug@^4.3.5:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
||||
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
||||
@@ -5024,11 +4870,6 @@ fbt@^1.0.2:
|
||||
dependencies:
|
||||
invariant "^2.2.4"
|
||||
|
||||
fdir@^6.4.3:
|
||||
version "6.4.3"
|
||||
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72"
|
||||
integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==
|
||||
|
||||
fecha@^4.2.0:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
|
||||
@@ -6875,11 +6716,6 @@ joi@^17.11.0:
|
||||
"@sideway/formula" "^3.0.1"
|
||||
"@sideway/pinpoint" "^2.0.0"
|
||||
|
||||
joycon@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03"
|
||||
integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==
|
||||
|
||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
@@ -7088,21 +6924,11 @@ lie@~3.3.0:
|
||||
dependencies:
|
||||
immediate "~3.0.5"
|
||||
|
||||
lilconfig@^3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
|
||||
integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
|
||||
|
||||
lines-and-columns@^1.1.6:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
|
||||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
|
||||
|
||||
load-tsconfig@^0.2.3:
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1"
|
||||
integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==
|
||||
|
||||
locate-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||
@@ -7140,11 +6966,6 @@ lodash.merge@^4.6.2:
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
||||
|
||||
lodash.sortby@^4.7.0:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||
integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
|
||||
|
||||
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
@@ -7403,15 +7224,6 @@ ms@^2.1.1, ms@^2.1.3:
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
mz@^2.7.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
native-or-another@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/native-or-another/-/native-or-another-2.0.0.tgz#17a567f92beea9cd71acff96a7681a735eca3bff"
|
||||
@@ -7520,7 +7332,7 @@ nwsapi@^2.2.4:
|
||||
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
|
||||
integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
|
||||
|
||||
object-assign@^4.0.1, object-assign@^4.1.1:
|
||||
object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
@@ -7752,7 +7564,7 @@ picocolors@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
picocolors@^1.1.0, picocolors@^1.1.1:
|
||||
picocolors@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
@@ -7762,21 +7574,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
picomatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
|
||||
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
|
||||
|
||||
pify@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
||||
|
||||
pirates@^4.0.1:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
|
||||
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
|
||||
|
||||
pirates@^4.0.4, pirates@^4.0.5:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
|
||||
@@ -7796,13 +7598,6 @@ pkg-dir@^4.2.0:
|
||||
dependencies:
|
||||
find-up "^4.0.0"
|
||||
|
||||
postcss-load-config@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096"
|
||||
integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==
|
||||
dependencies:
|
||||
lilconfig "^3.1.1"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -7996,11 +7791,6 @@ readable-stream@~2.3.6:
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readdirp@^4.0.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
|
||||
integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
|
||||
|
||||
readdirp@~3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
||||
@@ -8157,34 +7947,6 @@ rimraf@5.0.10, rimraf@6.0.1, rimraf@^3.0.0, rimraf@^3.0.2, rimraf@^5.0.10:
|
||||
dependencies:
|
||||
glob "^10.3.7"
|
||||
|
||||
rollup@^4.34.8:
|
||||
version "4.34.9"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.9.tgz#e1eb397856476778aeb6ac2ac3d09b2ce177a558"
|
||||
integrity sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==
|
||||
dependencies:
|
||||
"@types/estree" "1.0.6"
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-android-arm-eabi" "4.34.9"
|
||||
"@rollup/rollup-android-arm64" "4.34.9"
|
||||
"@rollup/rollup-darwin-arm64" "4.34.9"
|
||||
"@rollup/rollup-darwin-x64" "4.34.9"
|
||||
"@rollup/rollup-freebsd-arm64" "4.34.9"
|
||||
"@rollup/rollup-freebsd-x64" "4.34.9"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.34.9"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.34.9"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.34.9"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.34.9"
|
||||
"@rollup/rollup-linux-loongarch64-gnu" "4.34.9"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.34.9"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.34.9"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.34.9"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.34.9"
|
||||
"@rollup/rollup-linux-x64-musl" "4.34.9"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.34.9"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.34.9"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.34.9"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
rrweb-cssom@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1"
|
||||
@@ -8361,13 +8123,6 @@ source-map-support@^0.5.16:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map@0.8.0-beta.0:
|
||||
version "0.8.0-beta.0"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
|
||||
integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
|
||||
dependencies:
|
||||
whatwg-url "^7.0.0"
|
||||
|
||||
source-map@^0.5.0:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
@@ -8501,19 +8256,6 @@ strip-json-comments@^3.1.1:
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||
|
||||
sucrase@^3.35.0:
|
||||
version "3.35.0"
|
||||
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
|
||||
integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.2"
|
||||
commander "^4.0.0"
|
||||
glob "^10.3.10"
|
||||
lines-and-columns "^1.1.6"
|
||||
mz "^2.7.0"
|
||||
pirates "^4.0.1"
|
||||
ts-interface-checker "^0.1.9"
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
@@ -8590,33 +8332,6 @@ text-table@^0.2.0:
|
||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
||||
|
||||
thenify-all@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||
integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
|
||||
dependencies:
|
||||
thenify ">= 3.1.0 < 4"
|
||||
|
||||
"thenify@>= 3.1.0 < 4":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
|
||||
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
|
||||
tinyexec@^0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2"
|
||||
integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==
|
||||
|
||||
tinyglobby@^0.2.11:
|
||||
version "0.2.12"
|
||||
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5"
|
||||
integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==
|
||||
dependencies:
|
||||
fdir "^6.4.3"
|
||||
picomatch "^4.0.2"
|
||||
|
||||
tmp@0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
|
||||
@@ -8649,13 +8364,6 @@ tough-cookie@^4.0.0, tough-cookie@^4.1.2:
|
||||
universalify "^0.2.0"
|
||||
url-parse "^1.5.3"
|
||||
|
||||
tr46@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
|
||||
integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
tr46@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
|
||||
@@ -8695,11 +8403,6 @@ ts-api-utils@^1.3.0:
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
|
||||
integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
|
||||
|
||||
ts-interface-checker@^0.1.9:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
|
||||
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
|
||||
|
||||
ts-jest@^28.0.7:
|
||||
version "28.0.8"
|
||||
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73"
|
||||
@@ -8752,28 +8455,6 @@ tslib@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338"
|
||||
integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==
|
||||
|
||||
tsup@^8.4.0:
|
||||
version "8.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.4.0.tgz#2fdf537e7abc8f1ccbbbfe4228f16831457d4395"
|
||||
integrity sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==
|
||||
dependencies:
|
||||
bundle-require "^5.1.0"
|
||||
cac "^6.7.14"
|
||||
chokidar "^4.0.3"
|
||||
consola "^3.4.0"
|
||||
debug "^4.4.0"
|
||||
esbuild "^0.25.0"
|
||||
joycon "^3.1.1"
|
||||
picocolors "^1.1.1"
|
||||
postcss-load-config "^6.0.1"
|
||||
resolve-from "^5.0.0"
|
||||
rollup "^4.34.8"
|
||||
source-map "0.8.0-beta.0"
|
||||
sucrase "^3.35.0"
|
||||
tinyexec "^0.3.2"
|
||||
tinyglobby "^0.2.11"
|
||||
tree-kill "^1.2.2"
|
||||
|
||||
type-check@^0.4.0, type-check@~0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
||||
@@ -8960,11 +8641,6 @@ wcwidth@^1.0.1:
|
||||
dependencies:
|
||||
defaults "^1.0.3"
|
||||
|
||||
webidl-conversions@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
|
||||
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
|
||||
|
||||
webidl-conversions@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
|
||||
@@ -8998,15 +8674,6 @@ whatwg-url@^12.0.0, whatwg-url@^12.0.1:
|
||||
tr46 "^4.1.1"
|
||||
webidl-conversions "^7.0.0"
|
||||
|
||||
whatwg-url@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
|
||||
integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
|
||||
dependencies:
|
||||
lodash.sortby "^4.7.0"
|
||||
tr46 "^1.0.1"
|
||||
webidl-conversions "^4.0.2"
|
||||
|
||||
which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
|
||||
@@ -89,7 +89,6 @@ class Header extends React.Component {
|
||||
<option value="/selection-events">Selection Events</option>
|
||||
<option value="/suspense">Suspense</option>
|
||||
<option value="/form-state">Form State</option>
|
||||
<option value="/fragment-refs">Fragment Refs</option>
|
||||
</select>
|
||||
</label>
|
||||
<label htmlFor="global_version">
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
import Fixture from '../../Fixture';
|
||||
import FixtureSet from '../../FixtureSet';
|
||||
import TestCase from '../../TestCase';
|
||||
|
||||
const React = window.React;
|
||||
const {Fragment, useEffect, useRef, useState} = React;
|
||||
|
||||
function WrapperComponent(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
function handler(e) {
|
||||
const text = e.currentTarget.innerText;
|
||||
alert('You clicked: ' + text);
|
||||
}
|
||||
|
||||
export default function FragmentRefsPage() {
|
||||
const fragmentRef = useRef(null);
|
||||
const [extraChildCount, setExtraChildCount] = useState(0);
|
||||
|
||||
React.useEffect(() => {
|
||||
fragmentRef.current.addEventListener('click', handler);
|
||||
|
||||
const lastFragmentRefValue = fragmentRef.current;
|
||||
return () => {
|
||||
lastFragmentRefValue.removeEventListener('click', handler);
|
||||
};
|
||||
});
|
||||
|
||||
return (
|
||||
<FixtureSet title="Fragment Refs">
|
||||
<TestCase title="Event registration">
|
||||
<TestCase.Steps>
|
||||
<li>Click one of the children, observe the alert</li>
|
||||
<li>Add a new child, click it, observe the alert</li>
|
||||
<li>Remove the event listeners, click a child, observe no alert</li>
|
||||
<li>
|
||||
Add the event listeners back, click a child, observe the alert
|
||||
</li>
|
||||
</TestCase.Steps>
|
||||
|
||||
<TestCase.ExpectedResult>
|
||||
<p>
|
||||
Fragment refs can manage event listeners on the first level of host
|
||||
children. This page loads with an effect that sets up click event
|
||||
hanndlers on each child card. Clicking on a card will show an alert
|
||||
with the card's text.
|
||||
</p>
|
||||
<p>
|
||||
New child nodes will also have event listeners applied. Removed
|
||||
nodes will have their listeners cleaned up.
|
||||
</p>
|
||||
</TestCase.ExpectedResult>
|
||||
|
||||
<Fixture>
|
||||
<div className="control-box" id="control-box">
|
||||
<div>Target count: {extraChildCount + 3}</div>
|
||||
<button
|
||||
onClick={() => {
|
||||
setExtraChildCount(prev => prev + 1);
|
||||
}}>
|
||||
Add Child
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
fragmentRef.current.addEventListener('click', handler);
|
||||
}}>
|
||||
Add click event listeners
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
fragmentRef.current.removeEventListener('click', handler);
|
||||
}}>
|
||||
Remove click event listeners
|
||||
</button>
|
||||
<div class="card-container">
|
||||
<Fragment ref={fragmentRef}>
|
||||
<div className="card" id="child-a">
|
||||
Child A
|
||||
</div>
|
||||
<div className="card" id="child-b">
|
||||
Child B
|
||||
</div>
|
||||
<WrapperComponent>
|
||||
<div className="card" id="child-c">
|
||||
Child C
|
||||
</div>
|
||||
{Array.from({length: extraChildCount}).map((_, index) => (
|
||||
<div
|
||||
className="card"
|
||||
id={'extra-child-' + index}
|
||||
key={index}>
|
||||
Extra Child {index}
|
||||
</div>
|
||||
))}
|
||||
</WrapperComponent>
|
||||
</Fragment>
|
||||
</div>
|
||||
</div>
|
||||
</Fixture>
|
||||
</TestCase>
|
||||
</FixtureSet>
|
||||
);
|
||||
}
|
||||
@@ -309,16 +309,3 @@ th {
|
||||
tbody tr:nth-child(even) {
|
||||
background: #f0f0f0;
|
||||
}
|
||||
|
||||
.card-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: white;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(0, 0, 0, 0.24);
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import {execSync} from 'node:child_process';
|
||||
import {exec} from 'node:child_process';
|
||||
import {dirname, resolve} from 'node:path';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
execSync('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
exec('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
cwd: resolve(__dirname, '..', '..'),
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
@@ -2,15 +2,7 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@ampproject/remapping@^2.2.0":
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
|
||||
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2":
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
@@ -19,228 +11,11 @@
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/compat-data@^7.26.5":
|
||||
version "7.26.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
|
||||
integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
|
||||
|
||||
"@babel/core@^7.24.4":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9"
|
||||
integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.2.0"
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/helper-compilation-targets" "^7.26.5"
|
||||
"@babel/helper-module-transforms" "^7.26.0"
|
||||
"@babel/helpers" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/traverse" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
convert-source-map "^2.0.0"
|
||||
debug "^4.1.0"
|
||||
gensync "^1.0.0-beta.2"
|
||||
json5 "^2.2.3"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/generator@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7"
|
||||
integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
|
||||
integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
|
||||
integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.26.5"
|
||||
"@babel/helper-validator-option" "^7.25.9"
|
||||
browserslist "^4.24.0"
|
||||
lru-cache "^5.1.1"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-create-class-features-plugin@^7.25.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
|
||||
integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==
|
||||
dependencies:
|
||||
"@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/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.9"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-member-expression-to-functions@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
|
||||
integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-imports@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
|
||||
integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-transforms@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
|
||||
integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
"@babel/traverse" "^7.25.9"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
|
||||
integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.25.9":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
|
||||
integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
|
||||
|
||||
"@babel/helper-replace-supers@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
|
||||
integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
|
||||
dependencies:
|
||||
"@babel/helper-member-expression-to-functions" "^7.25.9"
|
||||
"@babel/helper-optimise-call-expression" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.5"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
|
||||
integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
|
||||
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
|
||||
|
||||
"@babel/helper-validator-option@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
|
||||
integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
|
||||
|
||||
"@babel/helpers@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384"
|
||||
integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==
|
||||
dependencies:
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/parser@^7.24.4", "@babel/parser@^7.26.10", "@babel/parser@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
|
||||
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/plugin-transform-private-methods@^7.24.4":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57"
|
||||
integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==
|
||||
dependencies:
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/template@^7.26.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
|
||||
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/parser" "^7.26.9"
|
||||
"@babel/types" "^7.26.9"
|
||||
|
||||
"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380"
|
||||
integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259"
|
||||
integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.8"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
|
||||
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@jridgewell/resolve-uri@^3.1.0":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/set-array@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
|
||||
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
|
||||
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
acorn-jsx@^5.2.0:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||
@@ -317,26 +92,11 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
browserslist@^4.24.0:
|
||||
version "4.24.4"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
|
||||
integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001688"
|
||||
electron-to-chromium "^1.5.73"
|
||||
node-releases "^2.0.19"
|
||||
update-browserslist-db "^1.1.1"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
caniuse-lite@^1.0.30001688:
|
||||
version "1.0.30001703"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz#977cb4920598c158f491ecf4f4f2cfed9e354718"
|
||||
integrity sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==
|
||||
|
||||
chalk@^2.1.0:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
@@ -400,11 +160,6 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
convert-source-map@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
|
||||
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
|
||||
|
||||
cross-spawn@^6.0.5:
|
||||
version "6.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57"
|
||||
@@ -416,7 +171,7 @@ cross-spawn@^6.0.5:
|
||||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
debug@^4.0.1, debug@^4.1.0, debug@^4.3.1:
|
||||
debug@^4.0.1:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
||||
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
||||
@@ -435,11 +190,6 @@ doctrine@^3.0.0:
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
electron-to-chromium@^1.5.73:
|
||||
version "1.5.114"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz#f2bb4fda80a7db4ea273565e75b0ebbe19af0ac3"
|
||||
integrity sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==
|
||||
|
||||
emoji-regex@^7.0.1:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
||||
@@ -450,11 +200,6 @@ emoji-regex@^8.0.0:
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
escalade@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
@@ -632,11 +377,6 @@ functional-red-black-tree@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
|
||||
|
||||
gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||
|
||||
glob-parent@^5.0.0:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
@@ -656,11 +396,6 @@ glob@^7.1.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^12.1.0:
|
||||
version "12.4.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
|
||||
@@ -678,18 +413,6 @@ has-flag@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
hermes-estree@0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480"
|
||||
integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==
|
||||
|
||||
hermes-parser@^0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1"
|
||||
integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==
|
||||
dependencies:
|
||||
hermes-estree "0.25.1"
|
||||
|
||||
iconv-lite@^0.4.24:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
@@ -787,11 +510,6 @@ js-yaml@^3.13.1:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
|
||||
jsesc@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
|
||||
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
|
||||
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
@@ -802,11 +520,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
|
||||
|
||||
json5@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
levn@^0.3.0, levn@~0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||
@@ -820,13 +533,6 @@ lodash@^4.17.14, lodash@^4.17.19:
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
mimic-fn@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
@@ -871,11 +577,6 @@ nice-try@^1.0.4:
|
||||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
|
||||
|
||||
node-releases@^2.0.19:
|
||||
version "2.0.19"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
||||
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
@@ -924,7 +625,7 @@ path-key@^2.0.1:
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
|
||||
|
||||
picocolors@^1.0.0, picocolors@^1.1.1:
|
||||
picocolors@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
@@ -991,7 +692,7 @@ semver@^5.5.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
|
||||
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
|
||||
|
||||
semver@^6.1.2, semver@^6.3.1:
|
||||
semver@^6.1.2:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
@@ -1127,14 +828,6 @@ type-fest@^0.8.1:
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
||||
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
||||
|
||||
update-browserslist-db@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
|
||||
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
|
||||
dependencies:
|
||||
escalade "^3.2.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
||||
@@ -1170,18 +863,3 @@ write@1.0.3:
|
||||
integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
|
||||
dependencies:
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
yallist@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||
|
||||
zod-validation-error@^3.0.3:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.4.0.tgz#3a8a1f55c65579822d7faa190b51336c61bee2a6"
|
||||
integrity sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==
|
||||
|
||||
zod@^3.22.4:
|
||||
version "3.24.2"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3"
|
||||
integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import {execSync} from 'node:child_process';
|
||||
import {exec} from 'node:child_process';
|
||||
import {dirname, resolve} from 'node:path';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
execSync('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
exec('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
cwd: resolve(__dirname, '..', '..'),
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
@@ -2,14 +2,6 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@ampproject/remapping@^2.2.0":
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
|
||||
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@babel/code-frame@7.12.11":
|
||||
version "7.12.11"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
|
||||
@@ -17,160 +9,11 @@
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.10.4"
|
||||
|
||||
"@babel/code-frame@^7.26.2":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/compat-data@^7.26.5":
|
||||
version "7.26.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
|
||||
integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
|
||||
|
||||
"@babel/core@^7.24.4":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9"
|
||||
integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.2.0"
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/helper-compilation-targets" "^7.26.5"
|
||||
"@babel/helper-module-transforms" "^7.26.0"
|
||||
"@babel/helpers" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/traverse" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
convert-source-map "^2.0.0"
|
||||
debug "^4.1.0"
|
||||
gensync "^1.0.0-beta.2"
|
||||
json5 "^2.2.3"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/generator@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7"
|
||||
integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
|
||||
integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
|
||||
integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.26.5"
|
||||
"@babel/helper-validator-option" "^7.25.9"
|
||||
browserslist "^4.24.0"
|
||||
lru-cache "^5.1.1"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-create-class-features-plugin@^7.25.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
|
||||
integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==
|
||||
dependencies:
|
||||
"@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/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.9"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-member-expression-to-functions@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
|
||||
integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-imports@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
|
||||
integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-transforms@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
|
||||
integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
"@babel/traverse" "^7.25.9"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
|
||||
integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.25.9":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
|
||||
integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
|
||||
|
||||
"@babel/helper-replace-supers@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
|
||||
integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
|
||||
dependencies:
|
||||
"@babel/helper-member-expression-to-functions" "^7.25.9"
|
||||
"@babel/helper-optimise-call-expression" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.5"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
|
||||
integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
|
||||
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
|
||||
|
||||
"@babel/helper-validator-option@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
|
||||
integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
|
||||
|
||||
"@babel/helpers@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384"
|
||||
integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==
|
||||
dependencies:
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/highlight@^7.10.4":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6"
|
||||
@@ -181,51 +24,6 @@
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/parser@^7.24.4", "@babel/parser@^7.26.10", "@babel/parser@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
|
||||
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/plugin-transform-private-methods@^7.24.4":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57"
|
||||
integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==
|
||||
dependencies:
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/template@^7.26.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
|
||||
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/parser" "^7.26.9"
|
||||
"@babel/types" "^7.26.9"
|
||||
|
||||
"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380"
|
||||
integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259"
|
||||
integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
|
||||
"@eslint/eslintrc@^0.4.3":
|
||||
version "0.4.3"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
|
||||
@@ -255,38 +53,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
|
||||
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.8"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
|
||||
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@jridgewell/resolve-uri@^3.1.0":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/set-array@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
|
||||
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
|
||||
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
acorn-jsx@^5.3.1:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||
@@ -366,26 +132,11 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
browserslist@^4.24.0:
|
||||
version "4.24.4"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
|
||||
integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001688"
|
||||
electron-to-chromium "^1.5.73"
|
||||
node-releases "^2.0.19"
|
||||
update-browserslist-db "^1.1.1"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
caniuse-lite@^1.0.30001688:
|
||||
version "1.0.30001703"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz#977cb4920598c158f491ecf4f4f2cfed9e354718"
|
||||
integrity sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==
|
||||
|
||||
chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
@@ -432,11 +183,6 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
convert-source-map@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
|
||||
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
|
||||
|
||||
cross-spawn@^7.0.2:
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||
@@ -446,7 +192,7 @@ cross-spawn@^7.0.2:
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
|
||||
debug@^4.0.1, debug@^4.1.1:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
||||
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
||||
@@ -465,11 +211,6 @@ doctrine@^3.0.0:
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
electron-to-chromium@^1.5.73:
|
||||
version "1.5.114"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz#f2bb4fda80a7db4ea273565e75b0ebbe19af0ac3"
|
||||
integrity sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
@@ -483,11 +224,6 @@ enquirer@^2.3.5:
|
||||
ansi-colors "^4.1.1"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
escalade@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
@@ -667,11 +403,6 @@ functional-red-black-tree@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
|
||||
|
||||
gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||
|
||||
glob-parent@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
@@ -691,11 +422,6 @@ glob@^7.1.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^13.6.0, globals@^13.9.0:
|
||||
version "13.24.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
|
||||
@@ -713,18 +439,6 @@ has-flag@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
hermes-estree@0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480"
|
||||
integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==
|
||||
|
||||
hermes-parser@^0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1"
|
||||
integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==
|
||||
dependencies:
|
||||
hermes-estree "0.25.1"
|
||||
|
||||
ignore@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||
@@ -791,11 +505,6 @@ js-yaml@^3.13.1:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
|
||||
jsesc@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
|
||||
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
|
||||
|
||||
json-buffer@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
|
||||
@@ -816,11 +525,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
|
||||
|
||||
json5@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
keyv@^4.5.3:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
||||
@@ -846,13 +550,6 @@ lodash.truncate@^4.4.2:
|
||||
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
|
||||
integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
@@ -870,11 +567,6 @@ natural-compare@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
node-releases@^2.0.19:
|
||||
version "2.0.19"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
||||
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
@@ -911,7 +603,7 @@ path-key@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
picocolors@^1.0.0, picocolors@^1.1.1:
|
||||
picocolors@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
@@ -953,11 +645,6 @@ rimraf@^3.0.2:
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
semver@^7.2.1:
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
|
||||
@@ -1052,14 +739,6 @@ type-fest@^0.20.2:
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
|
||||
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
||||
|
||||
update-browserslist-db@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
|
||||
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
|
||||
dependencies:
|
||||
escalade "^3.2.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
||||
@@ -1088,18 +767,3 @@ wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
yallist@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||
|
||||
zod-validation-error@^3.0.3:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.4.0.tgz#3a8a1f55c65579822d7faa190b51336c61bee2a6"
|
||||
integrity sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==
|
||||
|
||||
zod@^3.22.4:
|
||||
version "3.24.2"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3"
|
||||
integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import {execSync} from 'node:child_process';
|
||||
import {exec} from 'node:child_process';
|
||||
import {dirname, resolve} from 'node:path';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
execSync('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
exec('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
cwd: resolve(__dirname, '..', '..'),
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
@@ -2,213 +2,6 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@ampproject/remapping@^2.2.0":
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
|
||||
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@babel/code-frame@^7.26.2":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/compat-data@^7.26.5":
|
||||
version "7.26.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
|
||||
integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
|
||||
|
||||
"@babel/core@^7.24.4":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9"
|
||||
integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.2.0"
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/helper-compilation-targets" "^7.26.5"
|
||||
"@babel/helper-module-transforms" "^7.26.0"
|
||||
"@babel/helpers" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/traverse" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
convert-source-map "^2.0.0"
|
||||
debug "^4.1.0"
|
||||
gensync "^1.0.0-beta.2"
|
||||
json5 "^2.2.3"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/generator@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7"
|
||||
integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
|
||||
integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
|
||||
integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.26.5"
|
||||
"@babel/helper-validator-option" "^7.25.9"
|
||||
browserslist "^4.24.0"
|
||||
lru-cache "^5.1.1"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-create-class-features-plugin@^7.25.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
|
||||
integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==
|
||||
dependencies:
|
||||
"@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/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.9"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-member-expression-to-functions@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
|
||||
integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-imports@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
|
||||
integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-transforms@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
|
||||
integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
"@babel/traverse" "^7.25.9"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
|
||||
integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.25.9":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
|
||||
integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
|
||||
|
||||
"@babel/helper-replace-supers@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
|
||||
integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
|
||||
dependencies:
|
||||
"@babel/helper-member-expression-to-functions" "^7.25.9"
|
||||
"@babel/helper-optimise-call-expression" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.5"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
|
||||
integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
|
||||
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
|
||||
|
||||
"@babel/helper-validator-option@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
|
||||
integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
|
||||
|
||||
"@babel/helpers@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384"
|
||||
integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==
|
||||
dependencies:
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/parser@^7.24.4", "@babel/parser@^7.26.10", "@babel/parser@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
|
||||
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/plugin-transform-private-methods@^7.24.4":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57"
|
||||
integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==
|
||||
dependencies:
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/template@^7.26.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
|
||||
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/parser" "^7.26.9"
|
||||
"@babel/types" "^7.26.9"
|
||||
|
||||
"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380"
|
||||
integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259"
|
||||
integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
|
||||
"@eslint-community/eslint-utils@^4.2.0":
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
|
||||
@@ -260,38 +53,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
|
||||
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.8"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
|
||||
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@jridgewell/resolve-uri@^3.1.0":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/set-array@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
|
||||
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
|
||||
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
|
||||
@@ -368,26 +129,11 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
browserslist@^4.24.0:
|
||||
version "4.24.4"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
|
||||
integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001688"
|
||||
electron-to-chromium "^1.5.73"
|
||||
node-releases "^2.0.19"
|
||||
update-browserslist-db "^1.1.1"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
caniuse-lite@^1.0.30001688:
|
||||
version "1.0.30001703"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz#977cb4920598c158f491ecf4f4f2cfed9e354718"
|
||||
integrity sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==
|
||||
|
||||
chalk@^4.0.0:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
@@ -413,11 +159,6 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
convert-source-map@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
|
||||
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
|
||||
|
||||
cross-spawn@^7.0.2:
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||
@@ -427,7 +168,7 @@ cross-spawn@^7.0.2:
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
debug@^4.1.0, debug@^4.3.1, debug@^4.3.2:
|
||||
debug@^4.3.1, debug@^4.3.2:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
||||
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
||||
@@ -446,16 +187,6 @@ doctrine@^3.0.0:
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
electron-to-chromium@^1.5.73:
|
||||
version "1.5.114"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz#f2bb4fda80a7db4ea273565e75b0ebbe19af0ac3"
|
||||
integrity sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==
|
||||
|
||||
escalade@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
|
||||
escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||
@@ -611,11 +342,6 @@ fs.realpath@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||
|
||||
gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||
|
||||
glob-parent@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
|
||||
@@ -635,11 +361,6 @@ glob@^7.1.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^13.19.0:
|
||||
version "13.24.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
|
||||
@@ -657,18 +378,6 @@ has-flag@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
hermes-estree@0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480"
|
||||
integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==
|
||||
|
||||
hermes-parser@^0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1"
|
||||
integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==
|
||||
dependencies:
|
||||
hermes-estree "0.25.1"
|
||||
|
||||
ignore@^5.2.0:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
|
||||
@@ -722,11 +431,6 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
@@ -734,11 +438,6 @@ js-yaml@^4.1.0:
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
jsesc@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
|
||||
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
|
||||
|
||||
json-buffer@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
|
||||
@@ -754,11 +453,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
|
||||
|
||||
json5@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
keyv@^4.5.3:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
||||
@@ -786,13 +480,6 @@ lodash.merge@^4.6.2:
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
@@ -817,11 +504,6 @@ natural-compare@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
node-releases@^2.0.19:
|
||||
version "2.0.19"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
||||
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
@@ -877,11 +559,6 @@ path-key@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
picocolors@^1.0.0, picocolors@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -921,11 +598,6 @@ run-parallel@^1.1.9:
|
||||
dependencies:
|
||||
queue-microtask "^1.2.2"
|
||||
|
||||
semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
shebang-command@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||
@@ -974,14 +646,6 @@ type-fest@^0.20.2:
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
|
||||
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
||||
|
||||
update-browserslist-db@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
|
||||
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
|
||||
dependencies:
|
||||
escalade "^3.2.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
||||
@@ -1006,22 +670,7 @@ wrappy@1:
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
yallist@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||
|
||||
yocto-queue@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||
|
||||
zod-validation-error@^3.0.3:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.4.0.tgz#3a8a1f55c65579822d7faa190b51336c61bee2a6"
|
||||
integrity sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==
|
||||
|
||||
zod@^3.22.4:
|
||||
version "3.24.2"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3"
|
||||
integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import {execSync} from 'node:child_process';
|
||||
import {exec} from 'node:child_process';
|
||||
import {dirname, resolve} from 'node:path';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
execSync('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
exec('yarn build -r stable eslint-plugin-react-hooks', {
|
||||
cwd: resolve(__dirname, '..', '..'),
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
@@ -2,213 +2,6 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@ampproject/remapping@^2.2.0":
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
|
||||
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@babel/code-frame@^7.26.2":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
"@babel/compat-data@^7.26.5":
|
||||
version "7.26.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
|
||||
integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
|
||||
|
||||
"@babel/core@^7.24.4":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9"
|
||||
integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.2.0"
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/helper-compilation-targets" "^7.26.5"
|
||||
"@babel/helper-module-transforms" "^7.26.0"
|
||||
"@babel/helpers" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/traverse" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
convert-source-map "^2.0.0"
|
||||
debug "^4.1.0"
|
||||
gensync "^1.0.0-beta.2"
|
||||
json5 "^2.2.3"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/generator@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7"
|
||||
integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/types" "^7.26.10"
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-annotate-as-pure@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
|
||||
integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
|
||||
integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.26.5"
|
||||
"@babel/helper-validator-option" "^7.25.9"
|
||||
browserslist "^4.24.0"
|
||||
lru-cache "^5.1.1"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-create-class-features-plugin@^7.25.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
|
||||
integrity sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==
|
||||
dependencies:
|
||||
"@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/helper-skip-transparent-expression-wrappers" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.9"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-member-expression-to-functions@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
|
||||
integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-imports@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
|
||||
integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-module-transforms@^7.26.0":
|
||||
version "7.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
|
||||
integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
"@babel/traverse" "^7.25.9"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
|
||||
integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
|
||||
dependencies:
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.25.9":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
|
||||
integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
|
||||
|
||||
"@babel/helper-replace-supers@^7.26.5":
|
||||
version "7.26.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
|
||||
integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
|
||||
dependencies:
|
||||
"@babel/helper-member-expression-to-functions" "^7.25.9"
|
||||
"@babel/helper-optimise-call-expression" "^7.25.9"
|
||||
"@babel/traverse" "^7.26.5"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
|
||||
integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.9"
|
||||
"@babel/types" "^7.25.9"
|
||||
|
||||
"@babel/helper-string-parser@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
|
||||
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
|
||||
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
|
||||
|
||||
"@babel/helper-validator-option@^7.25.9":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
|
||||
integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
|
||||
|
||||
"@babel/helpers@^7.26.10":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384"
|
||||
integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==
|
||||
dependencies:
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/parser@^7.24.4", "@babel/parser@^7.26.10", "@babel/parser@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
|
||||
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.26.10"
|
||||
|
||||
"@babel/plugin-transform-private-methods@^7.24.4":
|
||||
version "7.25.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57"
|
||||
integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==
|
||||
dependencies:
|
||||
"@babel/helper-create-class-features-plugin" "^7.25.9"
|
||||
"@babel/helper-plugin-utils" "^7.25.9"
|
||||
|
||||
"@babel/template@^7.26.9":
|
||||
version "7.26.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
|
||||
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/parser" "^7.26.9"
|
||||
"@babel/types" "^7.26.9"
|
||||
|
||||
"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380"
|
||||
integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.26.2"
|
||||
"@babel/generator" "^7.26.10"
|
||||
"@babel/parser" "^7.26.10"
|
||||
"@babel/template" "^7.26.9"
|
||||
"@babel/types" "^7.26.10"
|
||||
debug "^4.3.1"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9":
|
||||
version "7.26.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259"
|
||||
integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.25.9"
|
||||
"@babel/helper-validator-identifier" "^7.25.9"
|
||||
|
||||
"@eslint-community/eslint-utils@^4.2.0":
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
|
||||
@@ -298,38 +91,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161"
|
||||
integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.8"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
|
||||
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@jridgewell/resolve-uri@^3.1.0":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/set-array@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
|
||||
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
|
||||
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
dependencies:
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@types/estree@^1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
|
||||
@@ -385,26 +146,11 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
browserslist@^4.24.0:
|
||||
version "4.24.4"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
|
||||
integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001688"
|
||||
electron-to-chromium "^1.5.73"
|
||||
node-releases "^2.0.19"
|
||||
update-browserslist-db "^1.1.1"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
caniuse-lite@^1.0.30001688:
|
||||
version "1.0.30001703"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz#977cb4920598c158f491ecf4f4f2cfed9e354718"
|
||||
integrity sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==
|
||||
|
||||
chalk@^4.0.0:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
@@ -430,11 +176,6 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
convert-source-map@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
|
||||
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
|
||||
|
||||
cross-spawn@^7.0.6:
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||
@@ -444,7 +185,7 @@ cross-spawn@^7.0.6:
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
debug@^4.1.0, debug@^4.3.1, debug@^4.3.2:
|
||||
debug@^4.3.1, debug@^4.3.2:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
||||
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
||||
@@ -456,16 +197,6 @@ deep-is@^0.1.3:
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
||||
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
||||
|
||||
electron-to-chromium@^1.5.73:
|
||||
version "1.5.114"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz#f2bb4fda80a7db4ea273565e75b0ebbe19af0ac3"
|
||||
integrity sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==
|
||||
|
||||
escalade@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
|
||||
escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||
@@ -609,11 +340,6 @@ flatted@^3.2.9:
|
||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27"
|
||||
integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==
|
||||
|
||||
gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||
|
||||
glob-parent@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
|
||||
@@ -621,11 +347,6 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^14.0.0:
|
||||
version "14.0.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
|
||||
@@ -636,18 +357,6 @@ has-flag@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
hermes-estree@0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480"
|
||||
integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==
|
||||
|
||||
hermes-parser@^0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1"
|
||||
integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==
|
||||
dependencies:
|
||||
hermes-estree "0.25.1"
|
||||
|
||||
ignore@^5.2.0:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
|
||||
@@ -688,11 +397,6 @@ jiti@^2.4.2:
|
||||
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560"
|
||||
integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
@@ -700,11 +404,6 @@ js-yaml@^4.1.0:
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
jsesc@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
|
||||
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
|
||||
|
||||
json-buffer@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
|
||||
@@ -720,11 +419,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
|
||||
|
||||
json5@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
keyv@^4.5.4:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
||||
@@ -752,13 +446,6 @@ lodash.merge@^4.6.2:
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
@@ -776,11 +463,6 @@ natural-compare@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
node-releases@^2.0.19:
|
||||
version "2.0.19"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
||||
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
||||
|
||||
optionator@^0.9.3:
|
||||
version "0.9.4"
|
||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
|
||||
@@ -824,11 +506,6 @@ path-key@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
picocolors@^1.0.0, picocolors@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -844,11 +521,6 @@ resolve-from@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
shebang-command@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||
@@ -880,14 +552,6 @@ type-check@^0.4.0, type-check@~0.4.0:
|
||||
dependencies:
|
||||
prelude-ls "^1.2.1"
|
||||
|
||||
update-browserslist-db@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
|
||||
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
|
||||
dependencies:
|
||||
escalade "^3.2.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
||||
@@ -907,22 +571,7 @@ word-wrap@^1.2.5:
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
||||
|
||||
yallist@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||
|
||||
yocto-queue@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||
|
||||
zod-validation-error@^3.0.3:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.4.0.tgz#3a8a1f55c65579822d7faa190b51336c61bee2a6"
|
||||
integrity sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==
|
||||
|
||||
zod@^3.22.4:
|
||||
version "3.24.2"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3"
|
||||
integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==
|
||||
|
||||
@@ -2,8 +2,6 @@ import React, {
|
||||
unstable_ViewTransition as ViewTransition,
|
||||
unstable_Activity as Activity,
|
||||
unstable_useSwipeTransition as useSwipeTransition,
|
||||
useEffect,
|
||||
useState,
|
||||
} from 'react';
|
||||
|
||||
import SwipeRecognizer from './SwipeRecognizer';
|
||||
@@ -55,13 +53,6 @@ export default function Page({url, navigate}) {
|
||||
navigate(show ? '/?a' : '/?b');
|
||||
}
|
||||
|
||||
const [counter, setCounter] = useState(0);
|
||||
|
||||
useEffect(() => {
|
||||
const timer = setInterval(() => setCounter(c => c + 1), 1000);
|
||||
return () => clearInterval(timer);
|
||||
}, []);
|
||||
|
||||
const exclamation = (
|
||||
<ViewTransition name="exclamation" onShare={onTransition}>
|
||||
<span>!</span>
|
||||
@@ -85,7 +76,7 @@ export default function Page({url, navigate}) {
|
||||
'navigation-back': transitions['slide-right'],
|
||||
'navigation-forward': transitions['slide-left'],
|
||||
}}>
|
||||
<h1>{!show ? 'A' + counter : 'B' + counter}</h1>
|
||||
<h1>{!show ? 'A' : 'B'}</h1>
|
||||
</ViewTransition>
|
||||
{show ? (
|
||||
<div>
|
||||
|
||||
9
netlify.toml
Normal file
9
netlify.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[build]
|
||||
base = ""
|
||||
publish = "fixtures/dom/build"
|
||||
command = "yarn build --type=UMD_DEV && cd fixtures/dom/ && yarn && yarn build"
|
||||
|
||||
[[redirects]]
|
||||
from = "/*"
|
||||
to = "/index.html"
|
||||
status = 200
|
||||
14
package.json
14
package.json
@@ -7,7 +7,6 @@
|
||||
"@babel/cli": "^7.10.5",
|
||||
"@babel/code-frame": "^7.10.4",
|
||||
"@babel/core": "^7.11.1",
|
||||
"@babel/helper-define-map": "^7.18.6",
|
||||
"@babel/helper-module-imports": "^7.10.4",
|
||||
"@babel/parser": "^7.11.3",
|
||||
"@babel/plugin-external-helpers": "^7.10.4",
|
||||
@@ -20,8 +19,7 @@
|
||||
"@babel/plugin-transform-arrow-functions": "^7.10.4",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.10.4",
|
||||
"@babel/plugin-transform-block-scoping": "^7.11.1",
|
||||
"@babel/plugin-transform-class-properties": "^7.25.9",
|
||||
"@babel/plugin-transform-classes": "^7.25.9",
|
||||
"@babel/plugin-transform-classes": "^7.10.4",
|
||||
"@babel/plugin-transform-computed-properties": "^7.10.4",
|
||||
"@babel/plugin-transform-destructuring": "^7.10.4",
|
||||
"@babel/plugin-transform-for-of": "^7.10.4",
|
||||
@@ -35,7 +33,6 @@
|
||||
"@babel/plugin-transform-shorthand-properties": "^7.10.4",
|
||||
"@babel/plugin-transform-spread": "^7.11.0",
|
||||
"@babel/plugin-transform-template-literals": "^7.10.5",
|
||||
"@babel/preset-env": "^7.26.9",
|
||||
"@babel/preset-flow": "^7.10.4",
|
||||
"@babel/preset-react": "^7.23.3",
|
||||
"@babel/preset-typescript": "^7.26.0",
|
||||
@@ -45,7 +42,6 @@
|
||||
"@rollup/plugin-node-resolve": "^15.0.1",
|
||||
"@rollup/plugin-replace": "^5.0.2",
|
||||
"@rollup/plugin-typescript": "^12.1.2",
|
||||
"@types/invariant": "^2.2.35",
|
||||
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
||||
"@typescript-eslint/parser": "^6.21.0",
|
||||
"abortcontroller-polyfill": "^1.7.5",
|
||||
@@ -78,8 +74,8 @@
|
||||
"glob-stream": "^6.1.0",
|
||||
"google-closure-compiler": "^20230206.0.0",
|
||||
"gzip-size": "^5.1.1",
|
||||
"hermes-eslint": "^0.25.1",
|
||||
"hermes-parser": "^0.25.1",
|
||||
"hermes-eslint": "^0.22.0",
|
||||
"hermes-parser": "^0.22.0",
|
||||
"jest": "^29.4.2",
|
||||
"jest-cli": "^29.4.2",
|
||||
"jest-diff": "^29.4.2",
|
||||
@@ -107,8 +103,6 @@
|
||||
"targz": "^1.0.1",
|
||||
"through2": "^3.0.1",
|
||||
"tmp": "^0.1.0",
|
||||
"to-fast-properties": "^2.0.0",
|
||||
"tsup": "^8.4.0",
|
||||
"typescript": "^5.4.3",
|
||||
"undici": "^5.28.4",
|
||||
"web-streams-polyfill": "^3.1.1",
|
||||
@@ -118,7 +112,6 @@
|
||||
"testRegex": "/scripts/jest/dont-run-jest-directly\\.js$"
|
||||
},
|
||||
"scripts": {
|
||||
"prebuild": "yarn --cwd compiler install --frozen-lockfile && ./scripts/react-compiler/link-compiler.sh",
|
||||
"build": "node ./scripts/rollup/build-all-release-channels.js",
|
||||
"build-for-devtools": "cross-env RELEASE_CHANNEL=experimental yarn build react/index,react/jsx,react/compiler-runtime,react-dom/index,react-dom/client,react-dom/unstable_testing,react-dom/test-utils,react-is,react-debug-tools,scheduler,react-test-renderer,react-refresh,react-art --type=NODE",
|
||||
"build-for-devtools-dev": "yarn build-for-devtools --type=NODE_DEV",
|
||||
@@ -130,7 +123,6 @@
|
||||
"lint-build": "node ./scripts/rollup/validate/index.js",
|
||||
"extract-errors": "node scripts/error-codes/extract-errors.js",
|
||||
"postinstall": "node ./scripts/flow/createFlowConfigs.js",
|
||||
"pretest": "./scripts/react-compiler/build-compiler.sh && ./scripts/react-compiler/link-compiler.sh",
|
||||
"test": "node ./scripts/jest/jest-cli.js",
|
||||
"test-stable": "node ./scripts/jest/jest-cli.js --release-channel=stable",
|
||||
"test-www": "node ./scripts/jest/jest-cli.js --release-channel=www-modern",
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
## 5.2.0
|
||||
|
||||
- Support flat config ([@michaelfaith](https://github.com/michaelfaith) in [#30774](https://github.com/facebook/react/pull/30774))
|
||||
- Convert the plugin to TypeScript and provide package type declarations ([@michaelfaith](https://github.com/michaelfaith) in [#32279](https://github.com/facebook/react/pull/32279), [#32283](https://github.com/facebook/react/pull/32283), [#32240](https://github.com/facebook/react/pull/32240), [#32400](https://github.com/facebook/react/pull/32400) and [@poteto](https://github.com/poteto) in [#32420](https://github.com/facebook/react/pull/32420))
|
||||
- Fix false positive error in components with `do`/`while` loops ([@tyxla](https://github.com/tyxla) in [#31720](https://github.com/facebook/react/pull/31720))
|
||||
- Detect issues in class properties ([@mjesun](https://github.com/mjesun) & [@ecraig12345](https://github.com/ecraig12345) in [#31823](https://github.com/facebook/react/pull/31823))
|
||||
|
||||
## 5.1.0
|
||||
|
||||
- Add support for `do`/`while` loops ([@tyxla](https://github.com/tyxla) in [#28714](https://github.com/facebook/react/pull/28714))
|
||||
- Fix error when callback argument is an identifier with an `as` expression ([@mskelton](https://github.com/mskelton) in [#31119](https://github.com/facebook/react/pull/31119))
|
||||
|
||||
## 5.0.0
|
||||
|
||||
* **New Violations:** Component names now need to start with an uppercase letter instead of a non-lowercase letter. This means `_Button` or `_component` are no longer valid. ([@kassens](https://github.com/kassens)) in [#25162](https://github.com/facebook/react/pull/25162)
|
||||
|
||||
@@ -1,290 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import {ErrorSeverity} from 'babel-plugin-react-compiler';
|
||||
import {RuleTester as ESLintTester} from 'eslint';
|
||||
import ReactCompilerRule from '../src/rules/ReactCompiler';
|
||||
|
||||
const ESLintTesterV8 = require('eslint-v8').RuleTester;
|
||||
|
||||
/**
|
||||
* A string template tag that removes padding from the left side of multi-line strings
|
||||
* @param {Array} strings array of code strings (only one expected)
|
||||
*/
|
||||
function normalizeIndent(strings: TemplateStringsArray): string {
|
||||
const codeLines = strings[0]?.split('\n') ?? [];
|
||||
const leftPadding = codeLines[1]?.match(/\s+/)![0] ?? '';
|
||||
return codeLines.map(line => line.slice(leftPadding.length)).join('\n');
|
||||
}
|
||||
|
||||
type CompilerTestCases = {
|
||||
valid: ESLintTester.ValidTestCase[];
|
||||
invalid: ESLintTester.InvalidTestCase[];
|
||||
};
|
||||
|
||||
const tests: CompilerTestCases = {
|
||||
valid: [
|
||||
{
|
||||
name: 'Basic example',
|
||||
code: normalizeIndent`
|
||||
function foo(x, y) {
|
||||
if (x) {
|
||||
return foo(false, y);
|
||||
}
|
||||
return [y * 10];
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: 'Violation with Flow suppression',
|
||||
code: `
|
||||
// Valid since error already suppressed with flow.
|
||||
function useHookWithHook() {
|
||||
if (cond) {
|
||||
// $FlowFixMe[react-rule-hook]
|
||||
useConditionalHook();
|
||||
}
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: 'Basic example with component syntax',
|
||||
code: normalizeIndent`
|
||||
export default component HelloWorld(
|
||||
text: string = 'Hello!',
|
||||
onClick: () => void,
|
||||
) {
|
||||
return <div onClick={onClick}>{text}</div>;
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: 'Unsupported syntax',
|
||||
code: normalizeIndent`
|
||||
function foo(x) {
|
||||
var y = 1;
|
||||
return y * x;
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
// OK because invariants are only meant for the compiler team's consumption
|
||||
name: '[Invariant] Defined after use',
|
||||
code: normalizeIndent`
|
||||
function Component(props) {
|
||||
let y = function () {
|
||||
m(x);
|
||||
};
|
||||
|
||||
let x = { a };
|
||||
m(x);
|
||||
return y;
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "Classes don't throw",
|
||||
code: normalizeIndent`
|
||||
class Foo {
|
||||
#bar() {}
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
// Don't report the issue if Flow already has
|
||||
name: '[InvalidInput] Ref access during render',
|
||||
code: normalizeIndent`
|
||||
function Component(props) {
|
||||
const ref = useRef(null);
|
||||
// $FlowFixMe[react-rule-unsafe-ref]
|
||||
const value = ref.current;
|
||||
return value;
|
||||
}
|
||||
`,
|
||||
},
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
name: '[InvalidInput] Ref access during render',
|
||||
code: normalizeIndent`
|
||||
function Component(props) {
|
||||
const ref = useRef(null);
|
||||
const value = ref.current;
|
||||
return value;
|
||||
}
|
||||
`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'Ref values (the `current` property) may not be accessed during render. (https://react.dev/reference/react/useRef)',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Reportable levels can be configured',
|
||||
options: [{reportableLevels: new Set([ErrorSeverity.Todo])}],
|
||||
code: normalizeIndent`
|
||||
function Foo(x) {
|
||||
var y = 1;
|
||||
return <div>{y * x}</div>;
|
||||
}`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'(BuildHIR::lowerStatement) Handle var kinds in VariableDeclaration',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: '[InvalidReact] ESlint suppression',
|
||||
// Indentation is intentionally weird so it doesn't add extra whitespace
|
||||
code: normalizeIndent`
|
||||
function Component(props) {
|
||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
||||
return <div>{props.foo}</div>;
|
||||
}`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'React Compiler has skipped optimizing this component because one or more React ESLint rules were disabled. React Compiler only works when your components follow all the rules of React, disabling them may result in unexpected or incorrect behavior',
|
||||
suggestions: [
|
||||
{
|
||||
output: normalizeIndent`
|
||||
function Component(props) {
|
||||
|
||||
return <div>{props.foo}</div>;
|
||||
}`,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
message:
|
||||
"Definition for rule 'react-hooks/rules-of-hooks' was not found.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Multiple diagnostics are surfaced',
|
||||
options: [
|
||||
{
|
||||
reportableLevels: new Set([
|
||||
ErrorSeverity.Todo,
|
||||
ErrorSeverity.InvalidReact,
|
||||
]),
|
||||
},
|
||||
],
|
||||
code: normalizeIndent`
|
||||
function Foo(x) {
|
||||
var y = 1;
|
||||
return <div>{y * x}</div>;
|
||||
}
|
||||
function Bar(props) {
|
||||
props.a.b = 2;
|
||||
return <div>{props.c}</div>
|
||||
}`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'(BuildHIR::lowerStatement) Handle var kinds in VariableDeclaration',
|
||||
},
|
||||
{
|
||||
message:
|
||||
'Mutating component props or hook arguments is not allowed. Consider using a local variable instead',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Test experimental/unstable report all bailouts mode',
|
||||
options: [
|
||||
{
|
||||
reportableLevels: new Set([ErrorSeverity.InvalidReact]),
|
||||
__unstable_donotuse_reportAllBailouts: true,
|
||||
},
|
||||
],
|
||||
code: normalizeIndent`
|
||||
function Foo(x) {
|
||||
var y = 1;
|
||||
return <div>{y * x}</div>;
|
||||
}`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'[ReactCompilerBailout] (BuildHIR::lowerStatement) Handle var kinds in VariableDeclaration (@:3:2)',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "'use no forget' does not disable eslint rule",
|
||||
code: normalizeIndent`
|
||||
let count = 0;
|
||||
function Component() {
|
||||
'use no forget';
|
||||
count = count + 1;
|
||||
return <div>Hello world {count}</div>
|
||||
}
|
||||
`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'Unexpected reassignment of a variable which was defined outside of the component. Components and hooks should be pure and side-effect free, but variable reassignment is a form of side-effect. If this variable is used in rendering, use useState instead. (https://react.dev/reference/rules/components-and-hooks-must-be-pure#side-effects-must-run-outside-of-render)',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Unused 'use no forget' directive is reported when no errors are present on components",
|
||||
code: normalizeIndent`
|
||||
function Component() {
|
||||
'use no forget';
|
||||
return <div>Hello world</div>
|
||||
}
|
||||
`,
|
||||
errors: [
|
||||
{
|
||||
message: "Unused 'use no forget' directive",
|
||||
suggestions: [
|
||||
{
|
||||
output:
|
||||
// yuck
|
||||
'\nfunction Component() {\n \n return <div>Hello world</div>\n}\n',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Unused 'use no forget' directive is reported when no errors are present on non-components or hooks",
|
||||
code: normalizeIndent`
|
||||
function notacomponent() {
|
||||
'use no forget';
|
||||
return 1 + 1;
|
||||
}
|
||||
`,
|
||||
errors: [
|
||||
{
|
||||
message: "Unused 'use no forget' directive",
|
||||
suggestions: [
|
||||
{
|
||||
output:
|
||||
// yuck
|
||||
'\nfunction notacomponent() {\n \n return 1 + 1;\n}\n',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const eslintTester = new ESLintTesterV8({
|
||||
parser: require.resolve('hermes-eslint'),
|
||||
parserOptions: {
|
||||
ecmaVersion: 2015,
|
||||
sourceType: 'module',
|
||||
enableExperimentalComponentSyntax: true,
|
||||
},
|
||||
});
|
||||
eslintTester.run('react-compiler - eslint: v8', ReactCompilerRule, tests);
|
||||
@@ -1,78 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import {RuleTester} from 'eslint';
|
||||
import ReactCompilerRule from '../src/rules/ReactCompiler';
|
||||
|
||||
const ESLintTesterV8 = require('eslint-v8').RuleTester;
|
||||
|
||||
/**
|
||||
* A string template tag that removes padding from the left side of multi-line strings
|
||||
* @param {Array} strings array of code strings (only one expected)
|
||||
*/
|
||||
function normalizeIndent(strings: TemplateStringsArray): string {
|
||||
const codeLines = strings[0]?.split('\n') ?? [];
|
||||
const leftPadding = codeLines[1]?.match(/\s+/)![0] ?? '';
|
||||
return codeLines.map(line => line.slice(leftPadding.length)).join('\n');
|
||||
}
|
||||
|
||||
type CompilerTestCases = {
|
||||
valid: RuleTester.ValidTestCase[];
|
||||
invalid: RuleTester.InvalidTestCase[];
|
||||
};
|
||||
|
||||
const tests: CompilerTestCases = {
|
||||
valid: [
|
||||
{
|
||||
name: 'Basic example',
|
||||
filename: 'test.tsx',
|
||||
code: normalizeIndent`
|
||||
function Button(props) {
|
||||
return null;
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: 'Repro for hooks as normal values',
|
||||
filename: 'test.tsx',
|
||||
code: normalizeIndent`
|
||||
function Button(props) {
|
||||
const scrollview = React.useRef<ScrollView>(null);
|
||||
return <Button thing={scrollview} />;
|
||||
}
|
||||
`,
|
||||
},
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
name: 'Mutating useState value',
|
||||
filename: 'test.tsx',
|
||||
code: `
|
||||
import { useState } from 'react';
|
||||
function Component(props) {
|
||||
// typescript syntax that hermes-parser doesn't understand yet
|
||||
const x: \`foo\${1}\` = 'foo1';
|
||||
const [state, setState] = useState({a: 0});
|
||||
state.a = 1;
|
||||
return <div>{props.foo}</div>;
|
||||
}
|
||||
`,
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
"Mutating a value returned from 'useState()', which should not be mutated. Use the setter function to update instead",
|
||||
line: 7,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const eslintTester = new ESLintTesterV8({
|
||||
parser: require.resolve('@typescript-eslint/parser-v5'),
|
||||
});
|
||||
eslintTester.run('react-compiler - eslint: v8', ReactCompilerRule, tests);
|
||||
@@ -21,8 +21,7 @@
|
||||
"react"
|
||||
],
|
||||
"scripts": {
|
||||
"build:compiler": "cd ../../compiler && yarn workspace babel-plugin-react-compiler build",
|
||||
"test": "yarn build:compiler && jest",
|
||||
"test": "jest",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"license": "MIT",
|
||||
@@ -38,18 +37,9 @@
|
||||
"peerDependencies": {
|
||||
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.24.4",
|
||||
"@babel/parser": "^7.24.4",
|
||||
"@babel/plugin-transform-private-methods": "^7.24.4",
|
||||
"hermes-parser": "^0.25.1",
|
||||
"zod": "^3.22.4",
|
||||
"zod-validation-error": "^3.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/eslint-parser": "^7.11.4",
|
||||
"@babel/preset-typescript": "^7.26.0",
|
||||
"@babel/types": "^7.19.0",
|
||||
"@tsconfig/strictest": "^2.0.5",
|
||||
"@typescript-eslint/parser-v2": "npm:@typescript-eslint/parser@^2.26.0",
|
||||
"@typescript-eslint/parser-v3": "npm:@typescript-eslint/parser@^3.10.0",
|
||||
@@ -61,7 +51,6 @@
|
||||
"@types/node": "^20.2.5",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"eslint-v7": "npm:eslint@^7.7.0",
|
||||
"eslint-v8": "npm:eslint@^8.57.1",
|
||||
"eslint-v9": "npm:eslint@^9.0.0",
|
||||
"jest": "^29.5.0",
|
||||
"typescript": "^5.4.3"
|
||||
|
||||
@@ -4,17 +4,14 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type {ESLint, Linter, Rule} from 'eslint';
|
||||
|
||||
import ExhaustiveDeps from './rules/ExhaustiveDeps';
|
||||
import ReactCompiler from './rules/ReactCompiler';
|
||||
import RulesOfHooks from './rules/RulesOfHooks';
|
||||
import ExhaustiveDeps from './rules/ExhaustiveDeps';
|
||||
import type {ESLint, Linter, Rule} from 'eslint';
|
||||
|
||||
// All rules
|
||||
const rules = {
|
||||
'exhaustive-deps': ExhaustiveDeps,
|
||||
'react-compiler': ReactCompiler,
|
||||
'rules-of-hooks': RulesOfHooks,
|
||||
'exhaustive-deps': ExhaustiveDeps,
|
||||
} satisfies Record<string, Rule.RuleModule>;
|
||||
|
||||
// Config rules
|
||||
|
||||
@@ -1,346 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
/* eslint-disable no-for-of-loops/no-for-of-loops */
|
||||
|
||||
import {transformFromAstSync} from '@babel/core';
|
||||
// @ts-expect-error: no types available
|
||||
import PluginProposalPrivateMethods from '@babel/plugin-transform-private-methods';
|
||||
import type {SourceLocation as BabelSourceLocation} from '@babel/types';
|
||||
import BabelPluginReactCompiler, {
|
||||
type CompilerErrorDetailOptions,
|
||||
CompilerSuggestionOperation,
|
||||
ErrorSeverity,
|
||||
parsePluginOptions,
|
||||
validateEnvironmentConfig,
|
||||
OPT_OUT_DIRECTIVES,
|
||||
type Logger,
|
||||
type LoggerEvent,
|
||||
type PluginOptions,
|
||||
} from 'babel-plugin-react-compiler';
|
||||
import type {Rule} from 'eslint';
|
||||
import {Statement} from 'estree';
|
||||
import * as HermesParser from 'hermes-parser';
|
||||
|
||||
type CompilerErrorDetailWithLoc = Omit<CompilerErrorDetailOptions, 'loc'> & {
|
||||
loc: BabelSourceLocation;
|
||||
};
|
||||
|
||||
function assertExhaustive(_: never, errorMsg: string): never {
|
||||
throw new Error(errorMsg);
|
||||
}
|
||||
|
||||
const DEFAULT_REPORTABLE_LEVELS = new Set([
|
||||
ErrorSeverity.InvalidReact,
|
||||
ErrorSeverity.InvalidJS,
|
||||
]);
|
||||
let reportableLevels = DEFAULT_REPORTABLE_LEVELS;
|
||||
|
||||
function isReportableDiagnostic(
|
||||
detail: CompilerErrorDetailOptions,
|
||||
): detail is CompilerErrorDetailWithLoc {
|
||||
return (
|
||||
reportableLevels.has(detail.severity) &&
|
||||
detail.loc != null &&
|
||||
typeof detail.loc !== 'symbol'
|
||||
);
|
||||
}
|
||||
|
||||
function makeSuggestions(
|
||||
detail: CompilerErrorDetailOptions,
|
||||
): Array<Rule.SuggestionReportDescriptor> {
|
||||
const suggest: Array<Rule.SuggestionReportDescriptor> = [];
|
||||
if (Array.isArray(detail.suggestions)) {
|
||||
for (const suggestion of detail.suggestions) {
|
||||
switch (suggestion.op) {
|
||||
case CompilerSuggestionOperation.InsertBefore:
|
||||
suggest.push({
|
||||
desc: suggestion.description,
|
||||
fix(fixer) {
|
||||
return fixer.insertTextBeforeRange(
|
||||
suggestion.range,
|
||||
suggestion.text,
|
||||
);
|
||||
},
|
||||
});
|
||||
break;
|
||||
case CompilerSuggestionOperation.InsertAfter:
|
||||
suggest.push({
|
||||
desc: suggestion.description,
|
||||
fix(fixer) {
|
||||
return fixer.insertTextAfterRange(
|
||||
suggestion.range,
|
||||
suggestion.text,
|
||||
);
|
||||
},
|
||||
});
|
||||
break;
|
||||
case CompilerSuggestionOperation.Replace:
|
||||
suggest.push({
|
||||
desc: suggestion.description,
|
||||
fix(fixer) {
|
||||
return fixer.replaceTextRange(suggestion.range, suggestion.text);
|
||||
},
|
||||
});
|
||||
break;
|
||||
case CompilerSuggestionOperation.Remove:
|
||||
suggest.push({
|
||||
desc: suggestion.description,
|
||||
fix(fixer) {
|
||||
return fixer.removeRange(suggestion.range);
|
||||
},
|
||||
});
|
||||
break;
|
||||
default:
|
||||
assertExhaustive(suggestion, 'Unhandled suggestion operation');
|
||||
}
|
||||
}
|
||||
}
|
||||
return suggest;
|
||||
}
|
||||
|
||||
const COMPILER_OPTIONS: Partial<PluginOptions> = {
|
||||
noEmit: true,
|
||||
panicThreshold: 'none',
|
||||
// Don't emit errors on Flow suppressions--Flow already gave a signal
|
||||
flowSuppressions: false,
|
||||
};
|
||||
|
||||
const rule: Rule.RuleModule = {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'Surfaces diagnostics from React Forget',
|
||||
recommended: true,
|
||||
},
|
||||
fixable: 'code',
|
||||
hasSuggestions: true,
|
||||
// validation is done at runtime with zod
|
||||
schema: [{type: 'object', additionalProperties: true}],
|
||||
},
|
||||
create(context: Rule.RuleContext) {
|
||||
// Compat with older versions of eslint
|
||||
const sourceCode = context.sourceCode ?? context.getSourceCode();
|
||||
const filename = context.filename ?? context.getFilename();
|
||||
const userOpts = context.options[0] ?? {};
|
||||
if (
|
||||
userOpts.reportableLevels != null &&
|
||||
userOpts.reportableLevels instanceof Set
|
||||
) {
|
||||
reportableLevels = userOpts.reportableLevels;
|
||||
} else {
|
||||
reportableLevels = DEFAULT_REPORTABLE_LEVELS;
|
||||
}
|
||||
/**
|
||||
* Experimental setting to report all compilation bailouts on the compilation
|
||||
* unit (e.g. function or hook) instead of the offensive line.
|
||||
* Intended to be used when a codebase is 100% reliant on the compiler for
|
||||
* memoization (i.e. deleted all manual memo) and needs compilation success
|
||||
* signals for perf debugging.
|
||||
*/
|
||||
let __unstable_donotuse_reportAllBailouts: boolean = false;
|
||||
if (
|
||||
userOpts.__unstable_donotuse_reportAllBailouts != null &&
|
||||
typeof userOpts.__unstable_donotuse_reportAllBailouts === 'boolean'
|
||||
) {
|
||||
__unstable_donotuse_reportAllBailouts =
|
||||
userOpts.__unstable_donotuse_reportAllBailouts;
|
||||
}
|
||||
|
||||
let shouldReportUnusedOptOutDirective = true;
|
||||
const options: PluginOptions = {
|
||||
...parsePluginOptions(userOpts),
|
||||
...COMPILER_OPTIONS,
|
||||
};
|
||||
const userLogger: Logger | null = options.logger;
|
||||
options.logger = {
|
||||
logEvent: (eventFilename, event): void => {
|
||||
userLogger?.logEvent(eventFilename, event);
|
||||
if (event.kind === 'CompileError') {
|
||||
shouldReportUnusedOptOutDirective = false;
|
||||
const detail = event.detail;
|
||||
const suggest = makeSuggestions(detail);
|
||||
if (__unstable_donotuse_reportAllBailouts && event.fnLoc != null) {
|
||||
const locStr =
|
||||
detail.loc != null && typeof detail.loc !== 'symbol'
|
||||
? ` (@:${detail.loc.start.line}:${detail.loc.start.column})`
|
||||
: '';
|
||||
/**
|
||||
* Report bailouts with a smaller span (just the first line).
|
||||
* Compiler bailout lints only serve to flag that a react function
|
||||
* has not been optimized by the compiler for codebases which depend
|
||||
* on compiler memo heavily for perf. These lints are also often not
|
||||
* actionable.
|
||||
*/
|
||||
let endLoc;
|
||||
if (event.fnLoc.end.line === event.fnLoc.start.line) {
|
||||
endLoc = event.fnLoc.end;
|
||||
} else {
|
||||
endLoc = {
|
||||
line: event.fnLoc.start.line,
|
||||
// Babel loc line numbers are 1-indexed
|
||||
column:
|
||||
sourceCode.text.split(/\r?\n|\r|\n/g)[
|
||||
event.fnLoc.start.line - 1
|
||||
]?.length ?? 0,
|
||||
};
|
||||
}
|
||||
const firstLineLoc = {
|
||||
start: event.fnLoc.start,
|
||||
end: endLoc,
|
||||
};
|
||||
context.report({
|
||||
message: `[ReactCompilerBailout] ${detail.reason}${locStr}`,
|
||||
loc: firstLineLoc,
|
||||
suggest,
|
||||
});
|
||||
}
|
||||
|
||||
if (!isReportableDiagnostic(detail)) {
|
||||
return;
|
||||
}
|
||||
if (
|
||||
hasFlowSuppression(detail.loc, 'react-rule-hook') ||
|
||||
hasFlowSuppression(detail.loc, 'react-rule-unsafe-ref')
|
||||
) {
|
||||
// If Flow already caught this error, we don't need to report it again.
|
||||
return;
|
||||
}
|
||||
const loc =
|
||||
detail.loc == null || typeof detail.loc === 'symbol'
|
||||
? event.fnLoc
|
||||
: detail.loc;
|
||||
if (loc != null) {
|
||||
context.report({
|
||||
message: detail.reason,
|
||||
loc,
|
||||
suggest,
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
options.environment = validateEnvironmentConfig(
|
||||
options.environment ?? {},
|
||||
);
|
||||
} catch (err: unknown) {
|
||||
options.logger?.logEvent('', err as LoggerEvent);
|
||||
}
|
||||
|
||||
function hasFlowSuppression(
|
||||
nodeLoc: BabelSourceLocation,
|
||||
suppression: string,
|
||||
): boolean {
|
||||
const comments = sourceCode.getAllComments();
|
||||
const flowSuppressionRegex = new RegExp(
|
||||
'\\$FlowFixMe\\[' + suppression + '\\]',
|
||||
);
|
||||
for (const commentNode of comments) {
|
||||
if (
|
||||
flowSuppressionRegex.test(commentNode.value) &&
|
||||
commentNode.loc!.end.line === nodeLoc.start.line - 1
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
let babelAST;
|
||||
if (filename.endsWith('.tsx') || filename.endsWith('.ts')) {
|
||||
try {
|
||||
const {parse: babelParse} = require('@babel/parser');
|
||||
babelAST = babelParse(sourceCode.text, {
|
||||
filename,
|
||||
sourceType: 'unambiguous',
|
||||
plugins: ['typescript', 'jsx'],
|
||||
});
|
||||
} catch {
|
||||
/* empty */
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
babelAST = HermesParser.parse(sourceCode.text, {
|
||||
babel: true,
|
||||
enableExperimentalComponentSyntax: true,
|
||||
sourceFilename: filename,
|
||||
sourceType: 'module',
|
||||
});
|
||||
} catch {
|
||||
/* empty */
|
||||
}
|
||||
}
|
||||
|
||||
if (babelAST != null) {
|
||||
try {
|
||||
transformFromAstSync(babelAST, sourceCode.text, {
|
||||
filename,
|
||||
highlightCode: false,
|
||||
retainLines: true,
|
||||
plugins: [
|
||||
[PluginProposalPrivateMethods, {loose: true}],
|
||||
[BabelPluginReactCompiler, options],
|
||||
],
|
||||
sourceType: 'module',
|
||||
configFile: false,
|
||||
babelrc: false,
|
||||
});
|
||||
} catch (err) {
|
||||
/* errors handled by injected logger */
|
||||
}
|
||||
}
|
||||
|
||||
function reportUnusedOptOutDirective(stmt: Statement) {
|
||||
if (
|
||||
stmt.type === 'ExpressionStatement' &&
|
||||
stmt.expression.type === 'Literal' &&
|
||||
typeof stmt.expression.value === 'string' &&
|
||||
OPT_OUT_DIRECTIVES.has(stmt.expression.value) &&
|
||||
stmt.loc != null
|
||||
) {
|
||||
context.report({
|
||||
message: `Unused '${stmt.expression.value}' directive`,
|
||||
loc: stmt.loc,
|
||||
suggest: [
|
||||
{
|
||||
desc: 'Remove the directive',
|
||||
fix(fixer) {
|
||||
return fixer.remove(stmt);
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
}
|
||||
if (shouldReportUnusedOptOutDirective) {
|
||||
return {
|
||||
FunctionDeclaration(fnDecl) {
|
||||
for (const stmt of fnDecl.body.body) {
|
||||
reportUnusedOptOutDirective(stmt);
|
||||
}
|
||||
},
|
||||
ArrowFunctionExpression(fnExpr) {
|
||||
if (fnExpr.body.type === 'BlockStatement') {
|
||||
for (const stmt of fnExpr.body.body) {
|
||||
reportUnusedOptOutDirective(stmt);
|
||||
}
|
||||
}
|
||||
},
|
||||
FunctionExpression(fnExpr) {
|
||||
for (const stmt of fnExpr.body.body) {
|
||||
reportUnusedOptOutDirective(stmt);
|
||||
}
|
||||
},
|
||||
};
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default rule;
|
||||
@@ -1,58 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
// v0.17.1
|
||||
declare module 'hermes-eslint' {
|
||||
// https://fburl.com/2vikhmaa
|
||||
type ParseForESLintOptions = {
|
||||
/**
|
||||
* Whether the whole script is executed under node.js environment.
|
||||
* When enabled, the scope manager adds a function scope immediately following the global scope.
|
||||
* Defaults to `false`.
|
||||
*/
|
||||
globalReturn: boolean;
|
||||
|
||||
/**
|
||||
* The identifier that's used for JSX Element creation (after transpilation).
|
||||
* This should not be a member expression - just the root identifier (i.e. use "React" instead of "React.createElement").
|
||||
*
|
||||
* To use the new global JSX transform function, you can explicitly set this to `null`.
|
||||
*
|
||||
* Defaults to `"React"`.
|
||||
*/
|
||||
jsxPragma: string | null;
|
||||
|
||||
/**
|
||||
* The identifier that's used for JSX fragment elements (after transpilation).
|
||||
* If `null`, assumes transpilation will always use a member on `jsxFactory` (i.e. React.Fragment).
|
||||
* This should not be a member expression - just the root identifier (i.e. use "h" instead of "h.Fragment").
|
||||
* Defaults to `null`.
|
||||
*/
|
||||
jsxFragmentName: string | null;
|
||||
|
||||
/**
|
||||
* The source type of the script.
|
||||
*/
|
||||
sourceType: 'script' | 'module';
|
||||
|
||||
/**
|
||||
* Ignore <fbt /> JSX elements when adding references to the module-level `React` variable.
|
||||
* FBT is JSX that's transformed to non-JSX and thus references differently
|
||||
*
|
||||
* https://facebook.github.io/fbt/
|
||||
*/
|
||||
fbt: boolean;
|
||||
|
||||
/**
|
||||
* Support experimental component syntax
|
||||
*
|
||||
* Defaults to `true`.
|
||||
*/
|
||||
enableExperimentalComponentSyntax?: boolean;
|
||||
};
|
||||
export function parse(code: string, options?: Partial<ParseForESLintOptions>);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
// v0.17.1
|
||||
declare module 'hermes-parser' {
|
||||
type HermesParserOptions = {
|
||||
allowReturnOutsideFunction?: boolean;
|
||||
babel?: boolean;
|
||||
flow?: 'all' | 'detect';
|
||||
enableExperimentalComponentSyntax?: boolean;
|
||||
sourceFilename?: string;
|
||||
sourceType?: 'module' | 'script' | 'unambiguous';
|
||||
tokens?: boolean;
|
||||
};
|
||||
export function parse(code: string, options: Partial<HermesParserOptions>);
|
||||
}
|
||||
@@ -2,32 +2,14 @@
|
||||
"extends": "@tsconfig/strictest/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "ES2015",
|
||||
"target": "ES2015",
|
||||
"target": "ES5",
|
||||
"moduleResolution": "Bundler",
|
||||
"lib": ["ES2020", "dom"],
|
||||
"lib": ["ES2020"],
|
||||
"rootDir": ".",
|
||||
"sourceMap": false,
|
||||
"types": ["estree-jsx", "node"],
|
||||
"downlevelIteration": true,
|
||||
"paths": {
|
||||
"babel-plugin-react-compiler": ["../../compiler/packages/babel-plugin-react-compiler/src"]
|
||||
},
|
||||
"jsx": "react-jsxdev",
|
||||
"rootDir": "../..",
|
||||
"baseUrl": ".",
|
||||
"typeRoots": [
|
||||
"../../node_modules/@types"
|
||||
],
|
||||
"checkJs": false,
|
||||
"allowJs": false,
|
||||
|
||||
// weaken strictness from preset
|
||||
"importsNotUsedAsValues": "remove",
|
||||
"noUncheckedIndexedAccess": false,
|
||||
"noUnusedParameters": false,
|
||||
"useUnknownInCatchVariables": true,
|
||||
// ideally turn off only during dev, or on a per-file basis
|
||||
"noUnusedLocals": false,
|
||||
"removeComments": true,
|
||||
"downlevelIteration": true
|
||||
},
|
||||
"include": ["src/**/*.ts", "__tests__/**/*.ts"]
|
||||
"exclude": ["node_modules"],
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
|
||||
@@ -857,6 +857,17 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.log was called without assertConsoleLogDev:
|
||||
+ Not asserted
|
||||
+ Not asserted
|
||||
+ Not asserted
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
@@ -928,7 +939,7 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
@@ -940,6 +951,26 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
+ C%s,
|
||||
+ in App (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.warn was called without assertConsoleWarnDev:
|
||||
+ A%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ B%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ C%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
}
|
||||
@@ -994,7 +1025,7 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
@@ -1019,6 +1050,45 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
+ C%s,
|
||||
+ in App (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.log was called without assertConsoleLogDev:
|
||||
+ A
|
||||
+ B
|
||||
+ C
|
||||
|
||||
console.warn was called without assertConsoleWarnDev:
|
||||
+ A%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ B%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ C%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
|
||||
console.error was called without assertConsoleErrorDev:
|
||||
+ A%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ B%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ C%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
}
|
||||
@@ -1859,7 +1929,7 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
@@ -1871,6 +1941,23 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.warn was called without assertConsoleWarnDev:
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
}
|
||||
@@ -1933,7 +2020,7 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
@@ -1947,6 +2034,26 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.error was called without assertConsoleErrorDev:
|
||||
+ A%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ B%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ C%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1999,7 +2106,7 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
@@ -2026,6 +2133,45 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.log was called without assertConsoleLogDev:
|
||||
+ A
|
||||
+ B
|
||||
+ C
|
||||
|
||||
console.warn was called without assertConsoleWarnDev:
|
||||
+ A%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ B%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ C%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
|
||||
console.error was called without assertConsoleErrorDev:
|
||||
+ A%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ B%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
+ C%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ in App (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -2908,7 +3054,7 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
} else if (gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
@@ -2920,6 +3066,23 @@ describe('ReactInternalTestUtils console assertions', () => {
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
} else {
|
||||
expect(message).toMatchInlineSnapshot(`
|
||||
"asserConsoleLogsCleared(expected)
|
||||
|
||||
console.error was called without assertConsoleErrorDev:
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
+ Not asserted%s,
|
||||
+ in Yield (at **)
|
||||
+ in div (at **)
|
||||
|
||||
You must call one of the assertConsoleDev helpers between each act call."
|
||||
`);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
*/
|
||||
|
||||
/* eslint-disable react-internal/no-production-logging */
|
||||
|
||||
const chalk = require('chalk');
|
||||
const util = require('util');
|
||||
const shouldIgnoreConsoleError = require('./shouldIgnoreConsoleError');
|
||||
@@ -39,16 +38,25 @@ const patchConsoleMethod = (methodName, logged) => {
|
||||
(methodName === 'error' || methodName === 'warn')
|
||||
) {
|
||||
const React = require('react');
|
||||
|
||||
// Ideally we could remove this check, but we have some tests like
|
||||
// useSyncExternalStoreShared-test that tests against React 17,
|
||||
// which doesn't have the captureOwnerStack method.
|
||||
if (React.captureOwnerStack) {
|
||||
// enableOwnerStacks enabled. When it's always on, we can assume this case.
|
||||
const stack = React.captureOwnerStack();
|
||||
if (stack) {
|
||||
format += '%s';
|
||||
args.push(stack);
|
||||
}
|
||||
} else {
|
||||
// Otherwise we have to use internals to emulate parent stacks.
|
||||
const ReactSharedInternals =
|
||||
React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE ||
|
||||
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
|
||||
if (ReactSharedInternals && ReactSharedInternals.getCurrentStack) {
|
||||
const stack = ReactSharedInternals.getCurrentStack();
|
||||
if (stack !== '') {
|
||||
format += '%s';
|
||||
args.push(stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
37
packages/react-art/src/ReactFiberConfigART.js
vendored
37
packages/react-art/src/ReactFiberConfigART.js
vendored
@@ -302,10 +302,6 @@ export function createInstance(type, props, internalInstanceHandle) {
|
||||
return instance;
|
||||
}
|
||||
|
||||
export function cloneMutableInstance(instance, keepChildren) {
|
||||
return instance;
|
||||
}
|
||||
|
||||
export function createTextInstance(
|
||||
text,
|
||||
rootContainerInstance,
|
||||
@@ -314,31 +310,6 @@ export function createTextInstance(
|
||||
return text;
|
||||
}
|
||||
|
||||
export function cloneMutableTextInstance(textInstance) {
|
||||
return textInstance;
|
||||
}
|
||||
|
||||
export type FragmentInstanceType = null;
|
||||
|
||||
export function createFragmentInstance(fiber): null {
|
||||
return null;
|
||||
}
|
||||
|
||||
export function updateFragmentInstanceFiber(fiber, instance): void {
|
||||
// Noop
|
||||
}
|
||||
|
||||
export function commitNewChildToFragmentInstance(
|
||||
child,
|
||||
fragmentInstance,
|
||||
): void {
|
||||
// Noop
|
||||
}
|
||||
|
||||
export function deleteChildFromFragmentInstance(child, fragmentInstance): void {
|
||||
// Noop
|
||||
}
|
||||
|
||||
export function finalizeInitialChildren(domElement, type, props) {
|
||||
return false;
|
||||
}
|
||||
@@ -504,14 +475,6 @@ export function restoreRootViewTransitionName(rootContainer) {
|
||||
// Noop
|
||||
}
|
||||
|
||||
export function cloneRootViewTransitionContainer(rootContainer) {
|
||||
throw new Error('Not implemented.');
|
||||
}
|
||||
|
||||
export function removeRootViewTransitionClone(rootContainer, clone) {
|
||||
throw new Error('Not implemented.');
|
||||
}
|
||||
|
||||
export type InstanceMeasurement = null;
|
||||
|
||||
export function measureInstance(instance) {
|
||||
|
||||
@@ -203,7 +203,11 @@ describe('ReactCache', () => {
|
||||
"boolean, but instead received: [ 'Hi', 100 ]\n\n" +
|
||||
'To use non-primitive values as keys, you must pass a hash ' +
|
||||
'function as the second argument to createResource().\n' +
|
||||
' in App (at **)',
|
||||
' in App (at **)' +
|
||||
(gate(flags => flags.enableOwnerStacks)
|
||||
? ''
|
||||
: '\n in Suspense (at **)'),
|
||||
|
||||
...(gate('enableSiblingPrerendering')
|
||||
? [
|
||||
'Invalid key type. Expected a string, number, symbol, or ' +
|
||||
|
||||
257
packages/react-client/src/ReactFlightClient.js
vendored
257
packages/react-client/src/ReactFlightClient.js
vendored
@@ -45,6 +45,7 @@ import type {TemporaryReferenceSet} from './ReactFlightTemporaryReferences';
|
||||
|
||||
import {
|
||||
enablePostpone,
|
||||
enableOwnerStacks,
|
||||
enableProfilerTimer,
|
||||
enableComponentPerformanceTrack,
|
||||
} from 'shared/ReactFeatureFlags';
|
||||
@@ -64,10 +65,7 @@ import {
|
||||
rendererPackageName,
|
||||
} from './ReactFlightClientConfig';
|
||||
|
||||
import {
|
||||
createBoundServerReference,
|
||||
registerBoundServerReference,
|
||||
} from './ReactFlightReplyClient';
|
||||
import {createBoundServerReference} from './ReactFlightReplyClient';
|
||||
|
||||
import {readTemporaryReference} from './ReactFlightTemporaryReferences';
|
||||
|
||||
@@ -757,7 +755,7 @@ function createElement(
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: validated, // Whether the element has already been validated on the server.
|
||||
value: enableOwnerStacks ? validated : 1, // Whether the element has already been validated on the server.
|
||||
});
|
||||
// debugInfo contains Server Component debug information.
|
||||
Object.defineProperty(element, '_debugInfo', {
|
||||
@@ -767,68 +765,79 @@ function createElement(
|
||||
value: null,
|
||||
});
|
||||
let env = response._rootEnvironmentName;
|
||||
if (owner !== null && owner.env != null) {
|
||||
// Interestingly we don't actually have the environment name of where
|
||||
// this JSX was created if it doesn't have an owner but if it does
|
||||
// it must be the same environment as the owner. We could send it separately
|
||||
// but it seems a bit unnecessary for this edge case.
|
||||
env = owner.env;
|
||||
}
|
||||
let normalizedStackTrace: null | Error = null;
|
||||
if (owner === null && response._debugRootStack != null) {
|
||||
// We override the stack if we override the owner since the stack where the root JSX
|
||||
// was created on the server isn't very useful but where the request was made is.
|
||||
normalizedStackTrace = response._debugRootStack;
|
||||
} else if (stack !== null) {
|
||||
// We create a fake stack and then create an Error object inside of it.
|
||||
// This means that the stack trace is now normalized into the native format
|
||||
// of the browser and the stack frames will have been registered with
|
||||
// source mapping information.
|
||||
// This can unfortunately happen within a user space callstack which will
|
||||
// remain on the stack.
|
||||
normalizedStackTrace = createFakeJSXCallStackInDEV(response, stack, env);
|
||||
}
|
||||
Object.defineProperty(element, '_debugStack', {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: normalizedStackTrace,
|
||||
});
|
||||
if (enableOwnerStacks) {
|
||||
if (owner !== null && owner.env != null) {
|
||||
// Interestingly we don't actually have the environment name of where
|
||||
// this JSX was created if it doesn't have an owner but if it does
|
||||
// it must be the same environment as the owner. We could send it separately
|
||||
// but it seems a bit unnecessary for this edge case.
|
||||
env = owner.env;
|
||||
}
|
||||
let normalizedStackTrace: null | Error = null;
|
||||
if (owner === null && response._debugRootStack != null) {
|
||||
// We override the stack if we override the owner since the stack where the root JSX
|
||||
// was created on the server isn't very useful but where the request was made is.
|
||||
normalizedStackTrace = response._debugRootStack;
|
||||
} else if (stack !== null) {
|
||||
// We create a fake stack and then create an Error object inside of it.
|
||||
// This means that the stack trace is now normalized into the native format
|
||||
// of the browser and the stack frames will have been registered with
|
||||
// source mapping information.
|
||||
// This can unfortunately happen within a user space callstack which will
|
||||
// remain on the stack.
|
||||
normalizedStackTrace = createFakeJSXCallStackInDEV(
|
||||
response,
|
||||
stack,
|
||||
env,
|
||||
);
|
||||
}
|
||||
Object.defineProperty(element, '_debugStack', {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: normalizedStackTrace,
|
||||
});
|
||||
|
||||
let task: null | ConsoleTask = null;
|
||||
if (supportsCreateTask && stack !== null) {
|
||||
const createTaskFn = (console: any).createTask.bind(
|
||||
console,
|
||||
getTaskName(type),
|
||||
);
|
||||
const callStack = buildFakeCallStack(
|
||||
response,
|
||||
stack,
|
||||
env,
|
||||
createTaskFn,
|
||||
);
|
||||
// This owner should ideally have already been initialized to avoid getting
|
||||
// user stack frames on the stack.
|
||||
const ownerTask =
|
||||
owner === null ? null : initializeFakeTask(response, owner, env);
|
||||
if (ownerTask === null) {
|
||||
const rootTask = response._debugRootTask;
|
||||
if (rootTask != null) {
|
||||
task = rootTask.run(callStack);
|
||||
} else {
|
||||
task = callStack();
|
||||
}
|
||||
} else {
|
||||
task = ownerTask.run(callStack);
|
||||
}
|
||||
}
|
||||
Object.defineProperty(element, '_debugTask', {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: task,
|
||||
});
|
||||
|
||||
let task: null | ConsoleTask = null;
|
||||
if (supportsCreateTask && stack !== null) {
|
||||
const createTaskFn = (console: any).createTask.bind(
|
||||
console,
|
||||
getTaskName(type),
|
||||
);
|
||||
const callStack = buildFakeCallStack(response, stack, env, createTaskFn);
|
||||
// This owner should ideally have already been initialized to avoid getting
|
||||
// user stack frames on the stack.
|
||||
const ownerTask =
|
||||
owner === null ? null : initializeFakeTask(response, owner, env);
|
||||
if (ownerTask === null) {
|
||||
const rootTask = response._debugRootTask;
|
||||
if (rootTask != null) {
|
||||
task = rootTask.run(callStack);
|
||||
} else {
|
||||
task = callStack();
|
||||
}
|
||||
} else {
|
||||
task = ownerTask.run(callStack);
|
||||
if (owner !== null) {
|
||||
initializeFakeStack(response, owner);
|
||||
}
|
||||
}
|
||||
Object.defineProperty(element, '_debugTask', {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: task,
|
||||
});
|
||||
|
||||
// This owner should ideally have already been initialized to avoid getting
|
||||
// user stack frames on the stack.
|
||||
if (owner !== null) {
|
||||
initializeFakeStack(response, owner);
|
||||
}
|
||||
}
|
||||
|
||||
if (initializingHandler !== null) {
|
||||
@@ -854,11 +863,13 @@ function createElement(
|
||||
name: getComponentNameFromType(element.type) || '',
|
||||
owner: element._owner,
|
||||
};
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugStack = element._debugStack;
|
||||
if (supportsCreateTask) {
|
||||
if (enableOwnerStacks) {
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugTask = element._debugTask;
|
||||
erroredComponent.debugStack = element._debugStack;
|
||||
if (supportsCreateTask) {
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugTask = element._debugTask;
|
||||
}
|
||||
}
|
||||
erroredChunk._debugInfo = [erroredComponent];
|
||||
}
|
||||
@@ -1046,11 +1057,13 @@ function waitForReference<T>(
|
||||
name: getComponentNameFromType(element.type) || '',
|
||||
owner: element._owner,
|
||||
};
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugStack = element._debugStack;
|
||||
if (supportsCreateTask) {
|
||||
if (enableOwnerStacks) {
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugTask = element._debugTask;
|
||||
erroredComponent.debugStack = element._debugStack;
|
||||
if (supportsCreateTask) {
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugTask = element._debugTask;
|
||||
}
|
||||
}
|
||||
const chunkDebugInfo: ReactDebugInfo =
|
||||
chunk._debugInfo || (chunk._debugInfo = []);
|
||||
@@ -1099,14 +1112,7 @@ function loadServerReference<A: Iterable<any>, T>(
|
||||
let promise: null | Thenable<any> = preloadModule(serverReference);
|
||||
if (!promise) {
|
||||
if (!metaData.bound) {
|
||||
const resolvedValue = (requireModule(serverReference): any);
|
||||
registerBoundServerReference(
|
||||
resolvedValue,
|
||||
metaData.id,
|
||||
metaData.bound,
|
||||
response._encodeFormAction,
|
||||
);
|
||||
return resolvedValue;
|
||||
return (requireModule(serverReference): any);
|
||||
} else {
|
||||
promise = Promise.resolve(metaData.bound);
|
||||
}
|
||||
@@ -1138,13 +1144,6 @@ function loadServerReference<A: Iterable<any>, T>(
|
||||
resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs);
|
||||
}
|
||||
|
||||
registerBoundServerReference(
|
||||
resolvedValue,
|
||||
metaData.id,
|
||||
metaData.bound,
|
||||
response._encodeFormAction,
|
||||
);
|
||||
|
||||
parentObject[key] = resolvedValue;
|
||||
|
||||
// If this is the root object for a model reference, where `handler.value`
|
||||
@@ -1224,11 +1223,13 @@ function loadServerReference<A: Iterable<any>, T>(
|
||||
name: getComponentNameFromType(element.type) || '',
|
||||
owner: element._owner,
|
||||
};
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugStack = element._debugStack;
|
||||
if (supportsCreateTask) {
|
||||
if (enableOwnerStacks) {
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugTask = element._debugTask;
|
||||
erroredComponent.debugStack = element._debugStack;
|
||||
if (supportsCreateTask) {
|
||||
// $FlowFixMe[cannot-write]
|
||||
erroredComponent.debugTask = element._debugTask;
|
||||
}
|
||||
}
|
||||
const chunkDebugInfo: ReactDebugInfo =
|
||||
chunk._debugInfo || (chunk._debugInfo = []);
|
||||
@@ -1608,8 +1609,8 @@ function parseModelTuple(
|
||||
tuple[2],
|
||||
tuple[3],
|
||||
__DEV__ ? (tuple: any)[4] : null,
|
||||
__DEV__ ? (tuple: any)[5] : null,
|
||||
__DEV__ ? (tuple: any)[6] : 0,
|
||||
__DEV__ && enableOwnerStacks ? (tuple: any)[5] : null,
|
||||
__DEV__ && enableOwnerStacks ? (tuple: any)[6] : 0,
|
||||
);
|
||||
}
|
||||
return value;
|
||||
@@ -2082,6 +2083,27 @@ function stopStream(
|
||||
controller.close(row === '' ? '"$undefined"' : row);
|
||||
}
|
||||
|
||||
function formatV8Stack(
|
||||
errorName: string,
|
||||
errorMessage: string,
|
||||
stack: null | ReactStackTrace,
|
||||
): string {
|
||||
let v8StyleStack = errorName + ': ' + errorMessage;
|
||||
if (stack) {
|
||||
for (let i = 0; i < stack.length; i++) {
|
||||
const frame = stack[i];
|
||||
const [name, filename, line, col] = frame;
|
||||
if (!name) {
|
||||
v8StyleStack += '\n at ' + filename + ':' + line + ':' + col;
|
||||
} else {
|
||||
v8StyleStack +=
|
||||
'\n at ' + name + ' (' + filename + ':' + line + ':' + col + ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
return v8StyleStack;
|
||||
}
|
||||
|
||||
type ErrorWithDigest = Error & {digest?: string};
|
||||
function resolveErrorProd(response: Response): Error {
|
||||
if (__DEV__) {
|
||||
@@ -2180,20 +2202,34 @@ function resolvePostponeDev(
|
||||
);
|
||||
}
|
||||
let postponeInstance: Postpone;
|
||||
const callStack = buildFakeCallStack(
|
||||
response,
|
||||
stack,
|
||||
env,
|
||||
// $FlowFixMe[incompatible-use]
|
||||
Error.bind(null, reason || ''),
|
||||
);
|
||||
const rootTask = response._debugRootTask;
|
||||
if (rootTask != null) {
|
||||
postponeInstance = rootTask.run(callStack);
|
||||
if (!enableOwnerStacks) {
|
||||
// Executing Error within a native stack isn't really limited to owner stacks
|
||||
// but we gate it behind the same flag for now while iterating.
|
||||
// eslint-disable-next-line react-internal/prod-error-codes
|
||||
postponeInstance = (Error(reason || ''): any);
|
||||
postponeInstance.$$typeof = REACT_POSTPONE_TYPE;
|
||||
// For backwards compat we use the V8 formatting when the flag is off.
|
||||
postponeInstance.stack = formatV8Stack(
|
||||
postponeInstance.name,
|
||||
postponeInstance.message,
|
||||
stack,
|
||||
);
|
||||
} else {
|
||||
postponeInstance = callStack();
|
||||
const callStack = buildFakeCallStack(
|
||||
response,
|
||||
stack,
|
||||
env,
|
||||
// $FlowFixMe[incompatible-use]
|
||||
Error.bind(null, reason || ''),
|
||||
);
|
||||
const rootTask = response._debugRootTask;
|
||||
if (rootTask != null) {
|
||||
postponeInstance = rootTask.run(callStack);
|
||||
} else {
|
||||
postponeInstance = callStack();
|
||||
}
|
||||
postponeInstance.$$typeof = REACT_POSTPONE_TYPE;
|
||||
}
|
||||
postponeInstance.$$typeof = REACT_POSTPONE_TYPE;
|
||||
const chunks = response._chunks;
|
||||
const chunk = chunks.get(id);
|
||||
if (!chunk) {
|
||||
@@ -2212,7 +2248,8 @@ function resolveHint<Code: HintCode>(
|
||||
dispatchHint(code, hintModel);
|
||||
}
|
||||
|
||||
const supportsCreateTask = __DEV__ && !!(console: any).createTask;
|
||||
const supportsCreateTask =
|
||||
__DEV__ && enableOwnerStacks && !!(console: any).createTask;
|
||||
|
||||
type FakeFunction<T> = (() => T) => T;
|
||||
const fakeFunctionCache: Map<string, FakeFunction<any>> = __DEV__
|
||||
@@ -2553,11 +2590,15 @@ function resolveDebugInfo(
|
||||
let currentOwnerInDEV: null | ReactComponentInfo = null;
|
||||
function getCurrentStackInDEV(): string {
|
||||
if (__DEV__) {
|
||||
const owner: null | ReactComponentInfo = currentOwnerInDEV;
|
||||
if (owner === null) {
|
||||
return '';
|
||||
if (enableOwnerStacks) {
|
||||
const owner: null | ReactComponentInfo = currentOwnerInDEV;
|
||||
if (owner === null) {
|
||||
return '';
|
||||
}
|
||||
return getOwnerStackByComponentInfoInDev(owner);
|
||||
}
|
||||
return getOwnerStackByComponentInfoInDev(owner);
|
||||
// We don't have Parent Stacks in Flight.
|
||||
return '';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
174
packages/react-client/src/ReactFlightReplyClient.js
vendored
174
packages/react-client/src/ReactFlightReplyClient.js
vendored
@@ -63,14 +63,10 @@ export type EncodeFormActionCallback = <A>(
|
||||
|
||||
export type ServerReferenceId = any;
|
||||
|
||||
type ServerReferenceClosure = {
|
||||
id: ServerReferenceId,
|
||||
originalBind: Function,
|
||||
bound: null | Thenable<Array<any>>,
|
||||
};
|
||||
|
||||
const knownServerReferences: WeakMap<Function, ServerReferenceClosure> =
|
||||
new WeakMap();
|
||||
const knownServerReferences: WeakMap<
|
||||
Function,
|
||||
{id: ServerReferenceId, bound: null | Thenable<Array<any>>},
|
||||
> = new WeakMap();
|
||||
|
||||
// Serializable values
|
||||
export type ReactServerValue =
|
||||
@@ -764,17 +760,16 @@ export function processReply(
|
||||
}
|
||||
|
||||
if (typeof value === 'function') {
|
||||
const referenceClosure = knownServerReferences.get(value);
|
||||
if (referenceClosure !== undefined) {
|
||||
const {id, bound} = referenceClosure;
|
||||
const referenceClosureJSON = JSON.stringify({id, bound}, resolveToJSON);
|
||||
const metaData = knownServerReferences.get(value);
|
||||
if (metaData !== undefined) {
|
||||
const metaDataJSON = JSON.stringify(metaData, resolveToJSON);
|
||||
if (formData === null) {
|
||||
// Upgrade to use FormData to allow us to stream this value.
|
||||
formData = new FormData();
|
||||
}
|
||||
// The reference to this function came from the same client so we can pass it back.
|
||||
const refId = nextPartId++;
|
||||
formData.set(formFieldPrefix + refId, referenceClosureJSON);
|
||||
formData.set(formFieldPrefix + refId, metaDataJSON);
|
||||
return serializeServerReferenceID(refId);
|
||||
}
|
||||
if (temporaryReferences !== undefined && key.indexOf(':') === -1) {
|
||||
@@ -869,7 +864,7 @@ export function processReply(
|
||||
}
|
||||
|
||||
const boundCache: WeakMap<
|
||||
ServerReferenceClosure,
|
||||
{id: ServerReferenceId, bound: null | Thenable<Array<any>>},
|
||||
Thenable<FormData>,
|
||||
> = new WeakMap();
|
||||
|
||||
@@ -910,8 +905,8 @@ function defaultEncodeFormAction(
|
||||
this: any => Promise<any>,
|
||||
identifierPrefix: string,
|
||||
): ReactCustomFormAction {
|
||||
const referenceClosure = knownServerReferences.get(this);
|
||||
if (!referenceClosure) {
|
||||
const reference = knownServerReferences.get(this);
|
||||
if (!reference) {
|
||||
throw new Error(
|
||||
'Tried to encode a Server Action from a different instance than the encoder is from. ' +
|
||||
'This is a bug in React.',
|
||||
@@ -919,13 +914,12 @@ function defaultEncodeFormAction(
|
||||
}
|
||||
let data: null | FormData = null;
|
||||
let name;
|
||||
const boundPromise = referenceClosure.bound;
|
||||
const boundPromise = reference.bound;
|
||||
if (boundPromise !== null) {
|
||||
let thenable = boundCache.get(referenceClosure);
|
||||
let thenable = boundCache.get(reference);
|
||||
if (!thenable) {
|
||||
const {id, bound} = referenceClosure;
|
||||
thenable = encodeFormData({id, bound});
|
||||
boundCache.set(referenceClosure, thenable);
|
||||
thenable = encodeFormData(reference);
|
||||
boundCache.set(reference, thenable);
|
||||
}
|
||||
if (thenable.status === 'rejected') {
|
||||
throw thenable.reason;
|
||||
@@ -947,7 +941,7 @@ function defaultEncodeFormAction(
|
||||
name = '$ACTION_REF_' + identifierPrefix;
|
||||
} else {
|
||||
// This is the simple case so we can just encode the ID.
|
||||
name = '$ACTION_ID_' + referenceClosure.id;
|
||||
name = '$ACTION_ID_' + reference.id;
|
||||
}
|
||||
return {
|
||||
name: name,
|
||||
@@ -958,22 +952,22 @@ function defaultEncodeFormAction(
|
||||
}
|
||||
|
||||
function customEncodeFormAction(
|
||||
reference: any => Promise<any>,
|
||||
proxy: any => Promise<any>,
|
||||
identifierPrefix: string,
|
||||
encodeFormAction: EncodeFormActionCallback,
|
||||
): ReactCustomFormAction {
|
||||
const referenceClosure = knownServerReferences.get(reference);
|
||||
if (!referenceClosure) {
|
||||
const reference = knownServerReferences.get(proxy);
|
||||
if (!reference) {
|
||||
throw new Error(
|
||||
'Tried to encode a Server Action from a different instance than the encoder is from. ' +
|
||||
'This is a bug in React.',
|
||||
);
|
||||
}
|
||||
let boundPromise: Promise<Array<any>> = (referenceClosure.bound: any);
|
||||
let boundPromise: Promise<Array<any>> = (reference.bound: any);
|
||||
if (boundPromise === null) {
|
||||
boundPromise = Promise.resolve([]);
|
||||
}
|
||||
return encodeFormAction(referenceClosure.id, boundPromise);
|
||||
return encodeFormAction(reference.id, boundPromise);
|
||||
}
|
||||
|
||||
function isSignatureEqual(
|
||||
@@ -981,19 +975,19 @@ function isSignatureEqual(
|
||||
referenceId: ServerReferenceId,
|
||||
numberOfBoundArgs: number,
|
||||
): boolean {
|
||||
const referenceClosure = knownServerReferences.get(this);
|
||||
if (!referenceClosure) {
|
||||
const reference = knownServerReferences.get(this);
|
||||
if (!reference) {
|
||||
throw new Error(
|
||||
'Tried to encode a Server Action from a different instance than the encoder is from. ' +
|
||||
'This is a bug in React.',
|
||||
);
|
||||
}
|
||||
if (referenceClosure.id !== referenceId) {
|
||||
if (reference.id !== referenceId) {
|
||||
// These are different functions.
|
||||
return false;
|
||||
}
|
||||
// Now check if the number of bound arguments is the same.
|
||||
const boundPromise = referenceClosure.bound;
|
||||
const boundPromise = reference.bound;
|
||||
if (boundPromise === null) {
|
||||
// No bound arguments.
|
||||
return numberOfBoundArgs === 0;
|
||||
@@ -1131,26 +1125,15 @@ function createFakeServerFunction<A: Iterable<any>, T>(
|
||||
}
|
||||
}
|
||||
|
||||
export function registerBoundServerReference<T: Function>(
|
||||
reference: T,
|
||||
id: ServerReferenceId,
|
||||
bound: null | Thenable<Array<any>>,
|
||||
function registerServerReference(
|
||||
proxy: any,
|
||||
reference: {id: ServerReferenceId, bound: null | Thenable<Array<any>>},
|
||||
encodeFormAction: void | EncodeFormActionCallback,
|
||||
): void {
|
||||
if (knownServerReferences.has(reference)) {
|
||||
return;
|
||||
}
|
||||
|
||||
knownServerReferences.set(reference, {
|
||||
id,
|
||||
originalBind: reference.bind,
|
||||
bound,
|
||||
});
|
||||
|
||||
) {
|
||||
// Expose encoder for use by SSR, as well as a special bind that can be used to
|
||||
// keep server capabilities.
|
||||
if (usedWithSSR) {
|
||||
// Only expose this in builds that would actually use it. Not needed in the browser.
|
||||
// Only expose this in builds that would actually use it. Not needed on the client.
|
||||
const $$FORM_ACTION =
|
||||
encodeFormAction === undefined
|
||||
? defaultEncodeFormAction
|
||||
@@ -1164,21 +1147,13 @@ export function registerBoundServerReference<T: Function>(
|
||||
encodeFormAction,
|
||||
);
|
||||
};
|
||||
Object.defineProperties((reference: any), {
|
||||
Object.defineProperties((proxy: any), {
|
||||
$$FORM_ACTION: {value: $$FORM_ACTION},
|
||||
$$IS_SIGNATURE_EQUAL: {value: isSignatureEqual},
|
||||
bind: {value: bind},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function registerServerReference<T: Function>(
|
||||
reference: T,
|
||||
id: ServerReferenceId,
|
||||
encodeFormAction?: EncodeFormActionCallback,
|
||||
): ServerReference<T> {
|
||||
registerBoundServerReference(reference, id, null, encodeFormAction);
|
||||
return reference;
|
||||
knownServerReferences.set(proxy, reference);
|
||||
}
|
||||
|
||||
// $FlowFixMe[method-unbinding]
|
||||
@@ -1186,54 +1161,43 @@ const FunctionBind = Function.prototype.bind;
|
||||
// $FlowFixMe[method-unbinding]
|
||||
const ArraySlice = Array.prototype.slice;
|
||||
function bind(this: Function): Function {
|
||||
const referenceClosure = knownServerReferences.get(this);
|
||||
|
||||
if (!referenceClosure) {
|
||||
// $FlowFixMe[prop-missing]
|
||||
return FunctionBind.apply(this, arguments);
|
||||
}
|
||||
|
||||
const newFn = referenceClosure.originalBind.apply(this, arguments);
|
||||
|
||||
if (__DEV__) {
|
||||
const thisBind = arguments[0];
|
||||
if (thisBind != null) {
|
||||
// This doesn't warn in browser environments since it's not instrumented outside
|
||||
// usedWithSSR. This makes this an SSR only warning which we don't generally do.
|
||||
// TODO: Consider a DEV only instrumentation in the browser.
|
||||
console.error(
|
||||
'Cannot bind "this" of a Server Action. Pass null or undefined as the first argument to .bind().',
|
||||
);
|
||||
// $FlowFixMe[unsupported-syntax]
|
||||
// $FlowFixMe[prop-missing]
|
||||
const newFn = FunctionBind.apply(this, arguments);
|
||||
const reference = knownServerReferences.get(this);
|
||||
if (reference) {
|
||||
if (__DEV__) {
|
||||
const thisBind = arguments[0];
|
||||
if (thisBind != null) {
|
||||
// This doesn't warn in browser environments since it's not instrumented outside
|
||||
// usedWithSSR. This makes this an SSR only warning which we don't generally do.
|
||||
// TODO: Consider a DEV only instrumentation in the browser.
|
||||
console.error(
|
||||
'Cannot bind "this" of a Server Action. Pass null or undefined as the first argument to .bind().',
|
||||
);
|
||||
}
|
||||
}
|
||||
const args = ArraySlice.call(arguments, 1);
|
||||
let boundPromise = null;
|
||||
if (reference.bound !== null) {
|
||||
boundPromise = Promise.resolve((reference.bound: any)).then(boundArgs =>
|
||||
boundArgs.concat(args),
|
||||
);
|
||||
} else {
|
||||
boundPromise = Promise.resolve(args);
|
||||
}
|
||||
// Expose encoder for use by SSR, as well as a special bind that can be used to
|
||||
// keep server capabilities.
|
||||
if (usedWithSSR) {
|
||||
// Only expose this in builds that would actually use it. Not needed on the client.
|
||||
Object.defineProperties((newFn: any), {
|
||||
$$FORM_ACTION: {value: this.$$FORM_ACTION},
|
||||
$$IS_SIGNATURE_EQUAL: {value: isSignatureEqual},
|
||||
bind: {value: bind},
|
||||
});
|
||||
}
|
||||
knownServerReferences.set(newFn, {id: reference.id, bound: boundPromise});
|
||||
}
|
||||
|
||||
const args = ArraySlice.call(arguments, 1);
|
||||
let boundPromise = null;
|
||||
if (referenceClosure.bound !== null) {
|
||||
boundPromise = Promise.resolve((referenceClosure.bound: any)).then(
|
||||
boundArgs => boundArgs.concat(args),
|
||||
);
|
||||
} else {
|
||||
boundPromise = Promise.resolve(args);
|
||||
}
|
||||
|
||||
knownServerReferences.set(newFn, {
|
||||
id: referenceClosure.id,
|
||||
originalBind: newFn.bind,
|
||||
bound: boundPromise,
|
||||
});
|
||||
|
||||
// Expose encoder for use by SSR, as well as a special bind that can be used to
|
||||
// keep server capabilities.
|
||||
if (usedWithSSR) {
|
||||
// Only expose this in builds that would actually use it. Not needed on the client.
|
||||
Object.defineProperties((newFn: any), {
|
||||
$$FORM_ACTION: {value: this.$$FORM_ACTION},
|
||||
$$IS_SIGNATURE_EQUAL: {value: isSignatureEqual},
|
||||
bind: {value: bind},
|
||||
});
|
||||
}
|
||||
|
||||
return newFn;
|
||||
}
|
||||
|
||||
@@ -1294,7 +1258,7 @@ export function createBoundServerReference<A: Iterable<any>, T>(
|
||||
);
|
||||
}
|
||||
}
|
||||
registerBoundServerReference(action, id, bound, encodeFormAction);
|
||||
registerServerReference(action, {id, bound}, encodeFormAction);
|
||||
return action;
|
||||
}
|
||||
|
||||
@@ -1394,6 +1358,6 @@ export function createServerReference<A: Iterable<any>, T>(
|
||||
);
|
||||
}
|
||||
}
|
||||
registerBoundServerReference(action, id, null, encodeFormAction);
|
||||
registerServerReference(action, {id, bound: null}, encodeFormAction);
|
||||
return action;
|
||||
}
|
||||
|
||||
@@ -321,7 +321,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
firstName: 'Seb',
|
||||
lastName: 'Smith',
|
||||
@@ -365,7 +367,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
firstName: 'Seb',
|
||||
lastName: 'Smith',
|
||||
@@ -1396,19 +1400,30 @@ describe('ReactFlight', () => {
|
||||
environmentName: 'Server',
|
||||
},
|
||||
],
|
||||
findSourceMapURLCalls: [
|
||||
[__filename, 'Server'],
|
||||
[__filename, 'Server'],
|
||||
// TODO: What should we request here? The outer (<anonymous>) or the inner (inspected-page.html)?
|
||||
['inspected-page.html:29:11), <anonymous>', 'Server'],
|
||||
[
|
||||
'file://~/(some)(really)(exotic-directory)/ReactFlight-test.js',
|
||||
'Server',
|
||||
],
|
||||
['file:///testing.js', 'Server'],
|
||||
['', 'Server'],
|
||||
[__filename, 'Server'],
|
||||
],
|
||||
findSourceMapURLCalls: gate(flags => flags.enableOwnerStacks)
|
||||
? [
|
||||
[__filename, 'Server'],
|
||||
[__filename, 'Server'],
|
||||
// TODO: What should we request here? The outer (<anonymous>) or the inner (inspected-page.html)?
|
||||
['inspected-page.html:29:11), <anonymous>', 'Server'],
|
||||
[
|
||||
'file://~/(some)(really)(exotic-directory)/ReactFlight-test.js',
|
||||
'Server',
|
||||
],
|
||||
['file:///testing.js', 'Server'],
|
||||
['', 'Server'],
|
||||
[__filename, 'Server'],
|
||||
]
|
||||
: [
|
||||
// TODO: What should we request here? The outer (<anonymous>) or the inner (inspected-page.html)?
|
||||
['inspected-page.html:29:11), <anonymous>', 'Server'],
|
||||
[
|
||||
'file://~/(some)(really)(exotic-directory)/ReactFlight-test.js',
|
||||
'Server',
|
||||
],
|
||||
['file:///testing.js', 'Server'],
|
||||
['', 'Server'],
|
||||
],
|
||||
});
|
||||
} else {
|
||||
expect(errors.map(getErrorForJestMatcher)).toEqual([
|
||||
@@ -1460,6 +1475,9 @@ describe('ReactFlight', () => {
|
||||
'Check the render method of `Component`. See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in span (at **)\n' +
|
||||
' in Component (at **)\n' +
|
||||
(gate(flags => flags.enableOwnerStacks)
|
||||
? ''
|
||||
: ' in Indirection (at **)\n') +
|
||||
' in App (at **)',
|
||||
]);
|
||||
});
|
||||
@@ -1520,26 +1538,46 @@ describe('ReactFlight', () => {
|
||||
},
|
||||
};
|
||||
const transport = ReactNoopFlightServer.render(<input value={obj} />);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <input value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <input value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <input value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
' ^^^^^^^^^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <input value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <input value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a toJSON instance is passed to a host component child', () => {
|
||||
@@ -1551,68 +1589,120 @@ describe('ReactFlight', () => {
|
||||
const transport = ReactNoopFlightServer.render(
|
||||
<div>Womp womp: {new MyError('spaghetti')}</div>,
|
||||
);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Error objects cannot be rendered as text children. Try formatting it using toString().\n' +
|
||||
' <div>Womp womp: {Error}</div>\n' +
|
||||
' ^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Error objects cannot be rendered as text children. Try formatting it using toString().\n' +
|
||||
' <div>Womp womp: {Error}</div>\n' +
|
||||
' ^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Error objects cannot be rendered as text children. Try formatting it using toString().\n' +
|
||||
' <div>Womp womp: {Error}</div>\n' +
|
||||
' ^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Error objects cannot be rendered as text children. Try formatting it using toString().\n' +
|
||||
' <div>Womp womp: {Error}</div>\n' +
|
||||
' ^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Error objects cannot be rendered as text children. Try formatting it using toString().\n' +
|
||||
' <div>Womp womp: {Error}</div>\n' +
|
||||
' ^^^^^^^',
|
||||
'Error objects cannot be rendered as text children. Try formatting it using toString().\n' +
|
||||
' <div>Womp womp: {Error}</div>\n' +
|
||||
' ^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a special object is passed to a host component', () => {
|
||||
const transport = ReactNoopFlightServer.render(<input value={Math} />);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <input value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <input value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <input value={Math}>\n' +
|
||||
' ^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
' ^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <input value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <input value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if an object with symbols is passed to a host component', () => {
|
||||
const transport = ReactNoopFlightServer.render(
|
||||
<input value={{[Symbol.iterator]: {}}} />,
|
||||
);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <input value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <input value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <input value={{}}>\n' +
|
||||
' ^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
' ^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <input value={{}}>\n' +
|
||||
' ^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <input value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a toJSON instance is passed to a Client Component', () => {
|
||||
@@ -1626,26 +1716,46 @@ describe('ReactFlight', () => {
|
||||
}
|
||||
const Client = clientReference(ClientImpl);
|
||||
const transport = ReactNoopFlightServer.render(<Client value={obj} />);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <... value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <... value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <... value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
' ^^^^^^^^^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <... value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <... value={{toJSON: ...}}>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a toJSON instance is passed to a Client Component child', () => {
|
||||
@@ -1661,26 +1771,46 @@ describe('ReactFlight', () => {
|
||||
const transport = ReactNoopFlightServer.render(
|
||||
<Client>Current date: {obj}</Client>,
|
||||
);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <>Current date: {{toJSON: ...}}</>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <>Current date: {{toJSON: ...}}</>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <>Current date: {{toJSON: ...}}</>\n' +
|
||||
' ^^^^^^^^^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
' ^^^^^^^^^^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <>Current date: {{toJSON: ...}}</>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with toJSON methods are not supported. ' +
|
||||
'Convert it manually to a simple value before passing it to props.\n' +
|
||||
' <>Current date: {{toJSON: ...}}</>\n' +
|
||||
' ^^^^^^^^^^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a special object is passed to a Client Component', () => {
|
||||
@@ -1689,24 +1819,43 @@ describe('ReactFlight', () => {
|
||||
}
|
||||
const Client = clientReference(ClientImpl);
|
||||
const transport = ReactNoopFlightServer.render(<Client value={Math} />);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <... value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <... value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <... value={Math}>\n' +
|
||||
' ^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
' ^^^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <... value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' <... value={Math}>\n' +
|
||||
' ^^^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if an object with symbols is passed to a Client Component', () => {
|
||||
@@ -1718,24 +1867,42 @@ describe('ReactFlight', () => {
|
||||
const transport = ReactNoopFlightServer.render(
|
||||
<Client value={{[Symbol.iterator]: {}}} />,
|
||||
);
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
|
||||
ReactNoopFlightClient.read(transport);
|
||||
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^\n',
|
||||
]);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^\n',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a special object is passed to a nested object in Client Component', () => {
|
||||
@@ -1748,20 +1915,36 @@ describe('ReactFlight', () => {
|
||||
);
|
||||
ReactNoopFlightClient.read(transport);
|
||||
|
||||
assertConsoleErrorDev([
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
{withoutStack: true},
|
||||
],
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
' ^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
],
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Objects with symbol properties like Symbol.iterator are not supported.\n' +
|
||||
' <... value={{}}>\n' +
|
||||
' ^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV if a special object is passed to a nested array in Client Component', () => {
|
||||
@@ -1773,20 +1956,36 @@ describe('ReactFlight', () => {
|
||||
<Client value={['looooong string takes up noise', Math, <h1>hi</h1>]} />,
|
||||
);
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
[
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' [..., Math, <h1/>]\n' +
|
||||
' ^^^^',
|
||||
{withoutStack: true},
|
||||
],
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' [..., Math, <h1/>]\n' +
|
||||
' ^^^^',
|
||||
' ^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev(
|
||||
[
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' [..., Math, <h1/>]\n' +
|
||||
' ^^^^',
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' [..., Math, <h1/>]\n' +
|
||||
' ^^^^',
|
||||
],
|
||||
{withoutStack: true},
|
||||
],
|
||||
'Only plain objects can be passed to Client Components from Server Components. ' +
|
||||
'Math objects are not supported.\n' +
|
||||
' [..., Math, <h1/>]\n' +
|
||||
' ^^^^\n' +
|
||||
' at (<anonymous>)',
|
||||
]);
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should NOT warn in DEV for key getters', () => {
|
||||
@@ -1813,16 +2012,26 @@ describe('ReactFlight', () => {
|
||||
jest.resetModules();
|
||||
jest.mock('react', () => React);
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in NoKey (at **)',
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in NoKey (at **)',
|
||||
]);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in NoKey (at **)',
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in NoKey (at **)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop.\n\n' +
|
||||
'Check the top-level render call using <div>. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in NoKey (at **)',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
// @gate !__DEV__ || enableOwnerStacks
|
||||
it('should warn in DEV a child is missing keys on a fragment', () => {
|
||||
// While we're on the server we need to have the Server version active to track component stacks.
|
||||
jest.resetModules();
|
||||
@@ -1837,14 +2046,23 @@ describe('ReactFlight', () => {
|
||||
jest.resetModules();
|
||||
jest.mock('react', () => React);
|
||||
ReactNoopFlightClient.read(transport);
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in Fragment (at **)',
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in Fragment (at **)',
|
||||
]);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in Fragment (at **)',
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in Fragment (at **)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop.\n\n' +
|
||||
'Check the top-level render call using <div>. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in Fragment (at **)',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should warn in DEV a child is missing keys in client component', async () => {
|
||||
@@ -1861,12 +2079,20 @@ describe('ReactFlight', () => {
|
||||
|
||||
ReactNoop.render(await ReactNoopFlightClient.read(transport));
|
||||
});
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop.\n\n' +
|
||||
'Check the top-level render call using <ParentClient>. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in div (at **)',
|
||||
]);
|
||||
if (gate(flags => flags.enableOwnerStacks)) {
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop.\n\n' +
|
||||
'Check the top-level render call using <ParentClient>. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in div (at **)',
|
||||
]);
|
||||
} else {
|
||||
assertConsoleErrorDev([
|
||||
'Each child in a list should have a unique "key" prop. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.\n' +
|
||||
' in div (at **)',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should error if a class instance is passed to a host component', () => {
|
||||
@@ -2813,7 +3039,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
transport: expect.arrayContaining([]),
|
||||
},
|
||||
@@ -2835,7 +3063,9 @@ describe('ReactFlight', () => {
|
||||
env: 'third-party',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {},
|
||||
},
|
||||
{time: 14},
|
||||
@@ -2852,7 +3082,9 @@ describe('ReactFlight', () => {
|
||||
env: 'third-party',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in myLazy (at **)\n in lazyInitializer (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in myLazy (at **)\n in lazyInitializer (at **)'
|
||||
: undefined,
|
||||
props: {},
|
||||
},
|
||||
{time: 16},
|
||||
@@ -2868,7 +3100,9 @@ describe('ReactFlight', () => {
|
||||
env: 'third-party',
|
||||
key: '3',
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {},
|
||||
},
|
||||
{time: 12},
|
||||
@@ -2942,7 +3176,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
transport: expect.arrayContaining([]),
|
||||
},
|
||||
@@ -2962,7 +3198,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: 'keyed',
|
||||
owner: null,
|
||||
stack: ' in ServerComponent (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in ServerComponent (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
children: {},
|
||||
},
|
||||
@@ -2981,7 +3219,9 @@ describe('ReactFlight', () => {
|
||||
env: 'third-party',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {},
|
||||
},
|
||||
{time: 12},
|
||||
@@ -3095,13 +3335,19 @@ describe('ReactFlight', () => {
|
||||
});
|
||||
|
||||
expect(sawReactPrefix).toBe(false);
|
||||
if (__DEV__) {
|
||||
if (__DEV__ && gate(flags => flags.enableOwnerStacks)) {
|
||||
expect(environments.slice(0, 4)).toEqual([
|
||||
'Server',
|
||||
'third-party',
|
||||
'third-party',
|
||||
'third-party',
|
||||
]);
|
||||
} else if (__DEV__) {
|
||||
expect(environments.slice(0, 3)).toEqual([
|
||||
'third-party',
|
||||
'third-party',
|
||||
'third-party',
|
||||
]);
|
||||
} else {
|
||||
expect(environments).toEqual([]);
|
||||
}
|
||||
@@ -3138,7 +3384,9 @@ describe('ReactFlight', () => {
|
||||
env: 'A',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {},
|
||||
},
|
||||
{
|
||||
@@ -3154,7 +3402,7 @@ describe('ReactFlight', () => {
|
||||
expect(ReactNoop).toMatchRenderedOutput(<div>hi</div>);
|
||||
});
|
||||
|
||||
// @gate __DEV__
|
||||
// @gate __DEV__ && enableOwnerStacks
|
||||
it('replays logs, but not onError logs', async () => {
|
||||
function foo() {
|
||||
return 'hello';
|
||||
@@ -3326,7 +3574,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: null,
|
||||
owner: null,
|
||||
stack: ' in Object.<anonymous> (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Object.<anonymous> (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
firstName: 'Seb',
|
||||
},
|
||||
@@ -3340,7 +3590,9 @@ describe('ReactFlight', () => {
|
||||
env: 'Server',
|
||||
key: null,
|
||||
owner: greetInfo,
|
||||
stack: ' in Greeting (at **)',
|
||||
stack: gate(flag => flag.enableOwnerStacks)
|
||||
? ' in Greeting (at **)'
|
||||
: undefined,
|
||||
props: {
|
||||
children: expect.objectContaining({
|
||||
type: 'span',
|
||||
@@ -3365,7 +3617,7 @@ describe('ReactFlight', () => {
|
||||
expect(ReactNoop).toMatchRenderedOutput(<span>Hello, Seb</span>);
|
||||
});
|
||||
|
||||
// @gate __DEV__
|
||||
// @gate __DEV__ && enableOwnerStacks
|
||||
it('can get the component owner stacks during rendering in dev', () => {
|
||||
let stack;
|
||||
|
||||
@@ -3397,7 +3649,7 @@ describe('ReactFlight', () => {
|
||||
);
|
||||
});
|
||||
|
||||
// @gate __DEV__
|
||||
// @gate __DEV__ && enableOwnerStacks
|
||||
it('can track owner for a flight response created in another render', async () => {
|
||||
jest.resetModules();
|
||||
jest.mock('react', () => ReactServer);
|
||||
@@ -3460,7 +3712,7 @@ describe('ReactFlight', () => {
|
||||
);
|
||||
});
|
||||
|
||||
// @gate __DEV__
|
||||
// @gate __DEV__ && enableOwnerStacks
|
||||
it('can get the component owner stacks for onError in dev', async () => {
|
||||
const thrownError = new Error('hi');
|
||||
let caughtError;
|
||||
@@ -3502,6 +3754,7 @@ describe('ReactFlight', () => {
|
||||
);
|
||||
});
|
||||
|
||||
// @gate (enableOwnerStacks) || !__DEV__
|
||||
it('should include only one component stack in replayed logs (if DevTools or polyfill adds them)', () => {
|
||||
class MyError extends Error {
|
||||
toJSON() {
|
||||
|
||||
@@ -2347,7 +2347,10 @@ describe('ReactHooksInspectionIntegration', () => {
|
||||
|
||||
await act(async () => await LazyFoo);
|
||||
assertConsoleErrorDev([
|
||||
'Foo: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.',
|
||||
'Foo: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.' +
|
||||
(gate(flags => flags.enableOwnerStacks)
|
||||
? ''
|
||||
: '\n in Foo (at **)\n' + ' in Suspense (at **)'),
|
||||
]);
|
||||
|
||||
const childFiber = renderer.root._currentFiber();
|
||||
|
||||
@@ -917,7 +917,7 @@ export function createProfilingHooks({
|
||||
// Creating a cache of component stacks won't help, generating a single stack is already expensive enough.
|
||||
// We should find a way to lazily generate component stacks on demand, when user inspects a specific event.
|
||||
// If we succeed with moving React DevTools Timeline Profiler to Performance panel, then Timeline Profiler would probably be removed.
|
||||
// Now that owner stacks are adopted, revisit this again and cache component stacks per Fiber,
|
||||
// If not, then once enableOwnerStacks is adopted, revisit this again and cache component stacks per Fiber,
|
||||
// but only return them when needed, sending hundreds of component stacks is beyond the Bridge's bandwidth.
|
||||
|
||||
// Postprocess Profile data
|
||||
|
||||
@@ -1280,8 +1280,6 @@ export function setInitialProperties(
|
||||
return;
|
||||
}
|
||||
case 'dialog': {
|
||||
listenToNonDelegatedEvent('beforetoggle', domElement);
|
||||
listenToNonDelegatedEvent('toggle', domElement);
|
||||
listenToNonDelegatedEvent('cancel', domElement);
|
||||
listenToNonDelegatedEvent('close', domElement);
|
||||
break;
|
||||
|
||||
@@ -34,7 +34,6 @@ import {getCurrentRootHostContainer} from 'react-reconciler/src/ReactFiberHostCo
|
||||
import hasOwnProperty from 'shared/hasOwnProperty';
|
||||
import {checkAttributeStringCoercion} from 'shared/CheckStringCoercion';
|
||||
import {REACT_CONTEXT_TYPE} from 'shared/ReactSymbols';
|
||||
import {OffscreenComponent} from 'react-reconciler/src/ReactWorkTags';
|
||||
|
||||
export {
|
||||
setCurrentUpdatePriority,
|
||||
@@ -545,13 +544,6 @@ export function createInstance(
|
||||
return domElement;
|
||||
}
|
||||
|
||||
export function cloneMutableInstance(
|
||||
instance: Instance,
|
||||
keepChildren: boolean,
|
||||
): Instance {
|
||||
return instance.cloneNode(keepChildren);
|
||||
}
|
||||
|
||||
export function appendInitialChild(
|
||||
parentInstance: Instance,
|
||||
child: Instance | TextInstance,
|
||||
@@ -617,12 +609,6 @@ export function createTextInstance(
|
||||
return textNode;
|
||||
}
|
||||
|
||||
export function cloneMutableTextInstance(
|
||||
textInstance: TextInstance,
|
||||
): TextInstance {
|
||||
return textInstance.cloneNode(false);
|
||||
}
|
||||
|
||||
let currentPopstateTransitionEvent: Event | null = null;
|
||||
export function shouldAttemptEagerTransition(): boolean {
|
||||
const event = window.event;
|
||||
@@ -809,7 +795,7 @@ export function appendChild(
|
||||
parentInstance: Instance,
|
||||
child: Instance | TextInstance,
|
||||
): void {
|
||||
if (supportsMoveBefore && child.parentNode !== null) {
|
||||
if (supportsMoveBefore) {
|
||||
// $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore.
|
||||
parentInstance.moveBefore(child, null);
|
||||
} else {
|
||||
@@ -829,7 +815,7 @@ export function appendChildToContainer(
|
||||
container.nodeType === COMMENT_NODE
|
||||
) {
|
||||
parentNode = (container.parentNode: any);
|
||||
if (supportsMoveBefore && child.parentNode !== null) {
|
||||
if (supportsMoveBefore) {
|
||||
// $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore.
|
||||
parentNode.moveBefore(child, container);
|
||||
} else {
|
||||
@@ -841,7 +827,7 @@ export function appendChildToContainer(
|
||||
} else {
|
||||
parentNode = (container: any);
|
||||
}
|
||||
if (supportsMoveBefore && child.parentNode !== null) {
|
||||
if (supportsMoveBefore) {
|
||||
// $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore.
|
||||
parentNode.moveBefore(child, null);
|
||||
} else {
|
||||
@@ -871,7 +857,7 @@ export function insertBefore(
|
||||
child: Instance | TextInstance,
|
||||
beforeChild: Instance | TextInstance | SuspenseInstance,
|
||||
): void {
|
||||
if (supportsMoveBefore && child.parentNode !== null) {
|
||||
if (supportsMoveBefore) {
|
||||
// $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore.
|
||||
parentInstance.moveBefore(child, beforeChild);
|
||||
} else {
|
||||
@@ -897,7 +883,7 @@ export function insertInContainerBefore(
|
||||
} else {
|
||||
parentNode = (container: any);
|
||||
}
|
||||
if (supportsMoveBefore && child.parentNode !== null) {
|
||||
if (supportsMoveBefore) {
|
||||
// $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore.
|
||||
parentNode.moveBefore(child, beforeChild);
|
||||
} else {
|
||||
@@ -1221,24 +1207,10 @@ export function cancelRootViewTransitionName(rootContainer: Container): void {
|
||||
}
|
||||
|
||||
export function restoreRootViewTransitionName(rootContainer: Container): void {
|
||||
let containerInstance: Instance;
|
||||
if (rootContainer.nodeType === DOCUMENT_NODE) {
|
||||
containerInstance = (rootContainer: any).body;
|
||||
} else if (rootContainer.nodeName === 'HTML') {
|
||||
containerInstance = (rootContainer.ownerDocument.body: any);
|
||||
} else {
|
||||
// If the container is not the whole document, then we ideally should probably
|
||||
// clone the whole document outside of the React too.
|
||||
containerInstance = (rootContainer: any);
|
||||
}
|
||||
// $FlowFixMe[prop-missing]
|
||||
if (containerInstance.style.viewTransitionName === 'root') {
|
||||
// If we moved the root view transition name to the container in a gesture
|
||||
// we need to restore it now.
|
||||
containerInstance.style.viewTransitionName = '';
|
||||
}
|
||||
const documentElement: null | HTMLElement =
|
||||
containerInstance.ownerDocument.documentElement;
|
||||
rootContainer.nodeType === DOCUMENT_NODE
|
||||
? (rootContainer: any).documentElement
|
||||
: rootContainer.ownerDocument.documentElement;
|
||||
if (
|
||||
documentElement !== null &&
|
||||
// $FlowFixMe[prop-missing]
|
||||
@@ -1249,226 +1221,6 @@ export function restoreRootViewTransitionName(rootContainer: Container): void {
|
||||
}
|
||||
}
|
||||
|
||||
function getComputedTransform(style: CSSStyleDeclaration): string {
|
||||
// Gets the merged transform of all the short hands.
|
||||
const computedStyle: any = style;
|
||||
let transform: string = computedStyle.transform;
|
||||
if (transform === 'none') {
|
||||
transform = '';
|
||||
}
|
||||
const scale: string = computedStyle.scale;
|
||||
if (scale !== 'none' && scale !== '') {
|
||||
const parts = scale.split(' ');
|
||||
transform =
|
||||
(parts.length === 3 ? 'scale3d' : 'scale') +
|
||||
'(' +
|
||||
parts.join(', ') +
|
||||
') ' +
|
||||
transform;
|
||||
}
|
||||
const rotate: string = computedStyle.rotate;
|
||||
if (rotate !== 'none' && rotate !== '') {
|
||||
const parts = rotate.split(' ');
|
||||
if (parts.length === 1) {
|
||||
transform = 'rotate(' + parts[0] + ') ' + transform;
|
||||
} else if (parts.length === 2) {
|
||||
transform =
|
||||
'rotate' + parts[0].toUpperCase() + '(' + parts[1] + ') ' + transform;
|
||||
} else {
|
||||
transform = 'rotate3d(' + parts.join(', ') + ') ' + transform;
|
||||
}
|
||||
}
|
||||
const translate: string = computedStyle.translate;
|
||||
if (translate !== 'none' && translate !== '') {
|
||||
const parts = translate.split(' ');
|
||||
transform =
|
||||
(parts.length === 3 ? 'translate3d' : 'translate') +
|
||||
'(' +
|
||||
parts.join(', ') +
|
||||
') ' +
|
||||
transform;
|
||||
}
|
||||
return transform;
|
||||
}
|
||||
|
||||
function moveOutOfViewport(
|
||||
originalStyle: CSSStyleDeclaration,
|
||||
element: HTMLElement,
|
||||
): void {
|
||||
// Apply a transform that safely puts the whole element outside the viewport
|
||||
// while still letting it paint its "old" state to a snapshot.
|
||||
const transform = getComputedTransform(originalStyle);
|
||||
// Clear the long form properties.
|
||||
// $FlowFixMe
|
||||
element.style.translate = 'none';
|
||||
// $FlowFixMe
|
||||
element.style.scale = 'none';
|
||||
// $FlowFixMe
|
||||
element.style.rotate = 'none';
|
||||
// Apply a translate to move it way out of the viewport. This is applied first
|
||||
// so that it is in the coordinate space of the parent and not after applying
|
||||
// other transforms. That's why we need to merge the long form properties.
|
||||
// TODO: Ideally we'd adjust for the parent's rotate/scale. Otherwise when
|
||||
// we move back the ::view-transition-group we might overshoot or undershoot.
|
||||
element.style.transform = 'translate(-20000px, -20000px) ' + transform;
|
||||
}
|
||||
|
||||
function moveOldFrameIntoViewport(keyframe: any): void {
|
||||
// In the resulting View Transition Animation, the first frame will be offset.
|
||||
const computedTransform: ?string = keyframe.transform;
|
||||
if (computedTransform != null) {
|
||||
let transform = computedTransform === 'none' ? '' : computedTransform;
|
||||
transform = 'translate(20000px, 20000px) ' + transform;
|
||||
keyframe.transform = transform;
|
||||
}
|
||||
}
|
||||
|
||||
export function cloneRootViewTransitionContainer(
|
||||
rootContainer: Container,
|
||||
): Instance {
|
||||
// This implies that we're not going to animate the root document but instead
|
||||
// the clone so we first clear the name of the root container.
|
||||
const documentElement: null | HTMLElement =
|
||||
rootContainer.nodeType === DOCUMENT_NODE
|
||||
? (rootContainer: any).documentElement
|
||||
: rootContainer.ownerDocument.documentElement;
|
||||
if (
|
||||
documentElement !== null &&
|
||||
// $FlowFixMe[prop-missing]
|
||||
documentElement.style.viewTransitionName === ''
|
||||
) {
|
||||
// $FlowFixMe[prop-missing]
|
||||
documentElement.style.viewTransitionName = 'none';
|
||||
}
|
||||
|
||||
let containerInstance: HTMLElement;
|
||||
if (rootContainer.nodeType === DOCUMENT_NODE) {
|
||||
containerInstance = (rootContainer: any).body;
|
||||
} else if (rootContainer.nodeName === 'HTML') {
|
||||
containerInstance = (rootContainer.ownerDocument.body: any);
|
||||
} else {
|
||||
// If the container is not the whole document, then we ideally should probably
|
||||
// clone the whole document outside of the React too.
|
||||
containerInstance = (rootContainer: any);
|
||||
}
|
||||
|
||||
const containerParent = containerInstance.parentNode;
|
||||
if (containerParent === null) {
|
||||
throw new Error('Cannot use a useSwipeTransition() in a detached root.');
|
||||
}
|
||||
|
||||
const clone: HTMLElement = containerInstance.cloneNode(false);
|
||||
|
||||
const computedStyle = getComputedStyle(containerInstance);
|
||||
|
||||
if (
|
||||
computedStyle.position === 'absolute' ||
|
||||
computedStyle.position === 'fixed'
|
||||
) {
|
||||
// If the style is already absolute, we don't have to do anything because it'll appear
|
||||
// in the same place.
|
||||
} else {
|
||||
// Otherwise we need to absolutely position the clone in the same location as the original.
|
||||
let positionedAncestor: HTMLElement = containerParent;
|
||||
while (
|
||||
positionedAncestor.parentNode != null &&
|
||||
positionedAncestor.parentNode.nodeType !== DOCUMENT_NODE
|
||||
) {
|
||||
if (getComputedStyle(positionedAncestor).position !== 'static') {
|
||||
break;
|
||||
}
|
||||
// $FlowFixMe: This is refined.
|
||||
positionedAncestor = positionedAncestor.parentNode;
|
||||
}
|
||||
|
||||
const positionedAncestorStyle: any = positionedAncestor.style;
|
||||
const containerInstanceStyle: any = containerInstance.style;
|
||||
// Clear the transform while we're measuring since it affects the bounding client rect.
|
||||
const prevAncestorTranslate = positionedAncestorStyle.translate;
|
||||
const prevAncestorScale = positionedAncestorStyle.scale;
|
||||
const prevAncestorRotate = positionedAncestorStyle.rotate;
|
||||
const prevAncestorTransform = positionedAncestorStyle.transform;
|
||||
const prevTranslate = containerInstanceStyle.translate;
|
||||
const prevScale = containerInstanceStyle.scale;
|
||||
const prevRotate = containerInstanceStyle.rotate;
|
||||
const prevTransform = containerInstanceStyle.transform;
|
||||
positionedAncestorStyle.translate = 'none';
|
||||
positionedAncestorStyle.scale = 'none';
|
||||
positionedAncestorStyle.rotate = 'none';
|
||||
positionedAncestorStyle.transform = 'none';
|
||||
containerInstanceStyle.translate = 'none';
|
||||
containerInstanceStyle.scale = 'none';
|
||||
containerInstanceStyle.rotate = 'none';
|
||||
containerInstanceStyle.transform = 'none';
|
||||
|
||||
const ancestorRect = positionedAncestor.getBoundingClientRect();
|
||||
const rect = containerInstance.getBoundingClientRect();
|
||||
|
||||
const cloneStyle = clone.style;
|
||||
cloneStyle.position = 'absolute';
|
||||
cloneStyle.top = rect.top - ancestorRect.top + 'px';
|
||||
cloneStyle.left = rect.left - ancestorRect.left + 'px';
|
||||
cloneStyle.width = rect.width + 'px';
|
||||
cloneStyle.height = rect.height + 'px';
|
||||
cloneStyle.margin = '0px';
|
||||
cloneStyle.boxSizing = 'border-box';
|
||||
|
||||
positionedAncestorStyle.translate = prevAncestorTranslate;
|
||||
positionedAncestorStyle.scale = prevAncestorScale;
|
||||
positionedAncestorStyle.rotate = prevAncestorRotate;
|
||||
positionedAncestorStyle.transform = prevAncestorTransform;
|
||||
containerInstanceStyle.translate = prevTranslate;
|
||||
containerInstanceStyle.scale = prevScale;
|
||||
containerInstanceStyle.rotate = prevRotate;
|
||||
containerInstanceStyle.transform = prevTransform;
|
||||
}
|
||||
|
||||
// For this transition the container will act as the root. Nothing outside of it should
|
||||
// be affected anyway. This lets us transition from the cloned container to the original.
|
||||
// $FlowFixMe[prop-missing]
|
||||
clone.style.viewTransitionName = 'root';
|
||||
|
||||
// Move out of the viewport so that it's still painted for the snapshot but is not visible
|
||||
// for the frame where the snapshot happens.
|
||||
moveOutOfViewport(computedStyle, clone);
|
||||
|
||||
// Insert the clone after the root container as a sibling. This may inject a body
|
||||
// as the next sibling of an existing body. document.body will still point to the
|
||||
// first one and any id selectors will still find the first one. That's why it's
|
||||
// important that it's after the existing node.
|
||||
containerInstance.parentNode.insertBefore(
|
||||
clone,
|
||||
containerInstance.nextSibling,
|
||||
);
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
export function removeRootViewTransitionClone(
|
||||
rootContainer: Container,
|
||||
clone: Instance,
|
||||
): void {
|
||||
let containerInstance: Instance;
|
||||
if (rootContainer.nodeType === DOCUMENT_NODE) {
|
||||
containerInstance = (rootContainer: any).body;
|
||||
} else if (rootContainer.nodeName === 'HTML') {
|
||||
containerInstance = (rootContainer.ownerDocument.body: any);
|
||||
} else {
|
||||
// If the container is not the whole document, then we ideally should probably
|
||||
// clone the whole document outside of the React too.
|
||||
containerInstance = (rootContainer: any);
|
||||
}
|
||||
const containerParent = containerInstance.parentNode;
|
||||
if (containerParent === null) {
|
||||
throw new Error('Cannot use a useSwipeTransition() in a detached root.');
|
||||
}
|
||||
// We assume that the clone is still within the same parent.
|
||||
containerParent.removeChild(clone);
|
||||
|
||||
// Now the root is on the containerInstance itself until we call restoreRootViewTransitionName.
|
||||
containerInstance.style.viewTransitionName = 'root';
|
||||
}
|
||||
|
||||
export type InstanceMeasurement = {
|
||||
rect: ClientRect | DOMRect,
|
||||
abs: boolean, // is absolutely positioned
|
||||
@@ -1551,25 +1303,6 @@ export function hasInstanceAffectedParent(
|
||||
return oldRect.height !== newRect.height || oldRect.width !== newRect.width;
|
||||
}
|
||||
|
||||
function cancelAllViewTransitionAnimations(scope: Element) {
|
||||
// In Safari, we need to manually cancel all manually start animations
|
||||
// or it'll block or interfer with future transitions.
|
||||
const animations = scope.getAnimations({subtree: true});
|
||||
for (let i = 0; i < animations.length; i++) {
|
||||
const anim = animations[i];
|
||||
const effect: KeyframeEffect = (anim.effect: any);
|
||||
// $FlowFixMe
|
||||
const pseudo: ?string = effect.pseudoElement;
|
||||
if (
|
||||
pseudo != null &&
|
||||
pseudo.startsWith('::view-transition') &&
|
||||
effect.target === scope
|
||||
) {
|
||||
anim.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// How long to wait for new fonts to load before just committing anyway.
|
||||
// This freezes the screen. It needs to be short enough that it doesn't cause too much of
|
||||
// an issue when it's a new load and slow, yet long enough that you have a chance to load
|
||||
@@ -1577,75 +1310,6 @@ function cancelAllViewTransitionAnimations(scope: Element) {
|
||||
// either cached the font or preloaded it earlier.
|
||||
const SUSPENSEY_FONT_TIMEOUT = 500;
|
||||
|
||||
function customizeViewTransitionError(
|
||||
error: Object,
|
||||
ignoreAbort: boolean,
|
||||
): mixed {
|
||||
if (typeof error === 'object' && error !== null) {
|
||||
switch (error.name) {
|
||||
case 'TimeoutError': {
|
||||
// We assume that the only reason a Timeout can happen is because the Navigation
|
||||
// promise. We expect any other work to either be fast or have a timeout (fonts).
|
||||
if (__DEV__) {
|
||||
// eslint-disable-next-line react-internal/prod-error-codes
|
||||
return new Error(
|
||||
'A ViewTransition timed out because a Navigation stalled. ' +
|
||||
'This can happen if a Navigation is blocked on React itself. ' +
|
||||
"Such as if it's resolved inside useEffect. " +
|
||||
'This can be solved by moving the resolution to useLayoutEffect.',
|
||||
{cause: error},
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'AbortError': {
|
||||
if (ignoreAbort) {
|
||||
return null;
|
||||
}
|
||||
if (__DEV__) {
|
||||
// eslint-disable-next-line react-internal/prod-error-codes
|
||||
return new Error(
|
||||
'A ViewTransition was aborted early. This might be because you have ' +
|
||||
'other View Transition libraries on the page and only one can run at ' +
|
||||
"a time. To avoid this, use only React's built-in <ViewTransition> " +
|
||||
'to coordinate.',
|
||||
{cause: error},
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'InvalidStateError': {
|
||||
if (
|
||||
error.message ===
|
||||
'View transition was skipped because document visibility state is hidden.' ||
|
||||
error.message ===
|
||||
'Skipping view transition because document visibility state has become hidden.' ||
|
||||
error.message ===
|
||||
'Skipping view transition because viewport size changed.'
|
||||
) {
|
||||
// Skip logging this. This is not considered an error.
|
||||
return null;
|
||||
}
|
||||
if (__DEV__) {
|
||||
if (
|
||||
error.message === 'Transition was aborted because of invalid state'
|
||||
) {
|
||||
// Chrome doesn't include the reason in the message but logs it in the console..
|
||||
// Redirect the user to look there.
|
||||
// eslint-disable-next-line react-internal/prod-error-codes
|
||||
return new Error(
|
||||
'A ViewTransition could not start. See the console for more details.',
|
||||
{cause: error},
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
export function startViewTransition(
|
||||
rootContainer: Container,
|
||||
transitionTypes: null | TransitionTypes,
|
||||
@@ -1654,7 +1318,6 @@ export function startViewTransition(
|
||||
afterMutationCallback: () => void,
|
||||
spawnedWorkCallback: () => void,
|
||||
passiveCallback: () => mixed,
|
||||
errorCallback: mixed => void,
|
||||
): boolean {
|
||||
const ownerDocument: Document =
|
||||
rootContainer.nodeType === DOCUMENT_NODE
|
||||
@@ -1712,20 +1375,24 @@ export function startViewTransition(
|
||||
});
|
||||
// $FlowFixMe[prop-missing]
|
||||
ownerDocument.__reactViewTransition = transition;
|
||||
const handleError = (error: mixed) => {
|
||||
try {
|
||||
error = customizeViewTransitionError(error, false);
|
||||
if (error !== null) {
|
||||
errorCallback(error);
|
||||
if (__DEV__) {
|
||||
transition.ready.then(undefined, (reason: mixed) => {
|
||||
if (
|
||||
typeof reason === 'object' &&
|
||||
reason !== null &&
|
||||
reason.name === 'TimeoutError'
|
||||
) {
|
||||
console.error(
|
||||
'A ViewTransition timed out because a Navigation stalled. ' +
|
||||
'This can happen if a Navigation is blocked on React itself. ' +
|
||||
"Such as if it's resolved inside useEffect. " +
|
||||
'This can be solved by moving the resolution to useLayoutEffect.',
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
// Continue the reset of the work.
|
||||
spawnedWorkCallback();
|
||||
}
|
||||
};
|
||||
transition.ready.then(spawnedWorkCallback, handleError);
|
||||
transition.finished.finally(() => {
|
||||
cancelAllViewTransitionAnimations((ownerDocument.documentElement: any));
|
||||
});
|
||||
}
|
||||
transition.ready.then(spawnedWorkCallback, spawnedWorkCallback);
|
||||
transition.finished.then(() => {
|
||||
// $FlowFixMe[prop-missing]
|
||||
if (ownerDocument.__reactViewTransition === transition) {
|
||||
// $FlowFixMe[prop-missing]
|
||||
@@ -1750,125 +1417,11 @@ export type RunningGestureTransition = {
|
||||
...
|
||||
};
|
||||
|
||||
function mergeTranslate(translateA: ?string, translateB: ?string): string {
|
||||
if (!translateA || translateA === 'none') {
|
||||
return translateB || '';
|
||||
}
|
||||
if (!translateB || translateB === 'none') {
|
||||
return translateA || '';
|
||||
}
|
||||
const partsA = translateA.split(' ');
|
||||
const partsB = translateB.split(' ');
|
||||
let i;
|
||||
let result = '';
|
||||
for (i = 0; i < partsA.length && i < partsB.length; i++) {
|
||||
if (i > 0) {
|
||||
result += ' ';
|
||||
}
|
||||
result += 'calc(' + partsA[i] + ' + ' + partsB[i] + ')';
|
||||
}
|
||||
for (; i < partsA.length; i++) {
|
||||
result += ' ' + partsA[i];
|
||||
}
|
||||
for (; i < partsB.length; i++) {
|
||||
result += ' ' + partsB[i];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function animateGesture(
|
||||
keyframes: any,
|
||||
targetElement: Element,
|
||||
pseudoElement: string,
|
||||
timeline: AnimationTimeline,
|
||||
rangeStart: number,
|
||||
rangeEnd: number,
|
||||
moveFirstFrameIntoViewport: boolean,
|
||||
moveAllFramesIntoViewport: boolean,
|
||||
) {
|
||||
for (let i = 0; i < keyframes.length; i++) {
|
||||
const keyframe = keyframes[i];
|
||||
// Delete any easing since we always apply linear easing to gestures.
|
||||
delete keyframe.easing;
|
||||
delete keyframe.computedOffset;
|
||||
// Chrome returns "auto" for width/height which is not a valid value to
|
||||
// animate to. Similarly, transform: "none" is actually lack of transform.
|
||||
if (keyframe.width === 'auto') {
|
||||
delete keyframe.width;
|
||||
}
|
||||
if (keyframe.height === 'auto') {
|
||||
delete keyframe.height;
|
||||
}
|
||||
if (keyframe.transform === 'none') {
|
||||
delete keyframe.transform;
|
||||
}
|
||||
if (moveAllFramesIntoViewport) {
|
||||
if (keyframe.transform == null) {
|
||||
// If a transform is not explicitly specified to override the auto
|
||||
// generated one on the pseudo element, then we need to adjust it to
|
||||
// put it back into the viewport. We don't know the offset relative to
|
||||
// the screen so instead we use the translate prop to do a relative
|
||||
// adjustment.
|
||||
// TODO: If the "transform" was manually overridden on the pseudo
|
||||
// element itself and no longer the auto generated one, then we shouldn't
|
||||
// adjust it. I'm not sure how to detect this.
|
||||
if (keyframe.translate == null || keyframe.translate === '') {
|
||||
// TODO: If there's a CSS rule targeting translate on the pseudo element
|
||||
// already we need to merge it.
|
||||
const elementTranslate: ?string = (getComputedStyle(
|
||||
targetElement,
|
||||
pseudoElement,
|
||||
): any).translate;
|
||||
keyframe.translate = mergeTranslate(
|
||||
elementTranslate,
|
||||
'20000px 20000px',
|
||||
);
|
||||
} else {
|
||||
keyframe.translate = mergeTranslate(
|
||||
keyframe.translate,
|
||||
'20000px 20000px',
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (moveFirstFrameIntoViewport) {
|
||||
// If this is the generated animation that does a FLIP matrix translation
|
||||
// from the old position, we need to adjust it from the out of viewport
|
||||
// position. If this is going from old to new it only applies to first
|
||||
// keyframe. Otherwise it applies to every keyframe.
|
||||
moveOldFrameIntoViewport(keyframes[0]);
|
||||
}
|
||||
const reverse = rangeStart > rangeEnd;
|
||||
targetElement.animate(keyframes, {
|
||||
pseudoElement: pseudoElement,
|
||||
// Set the timeline to the current gesture timeline to drive the updates.
|
||||
timeline: timeline,
|
||||
// We reset all easing functions to linear so that it feels like you
|
||||
// have direct impact on the transition and to avoid double bouncing
|
||||
// from scroll bouncing.
|
||||
easing: 'linear',
|
||||
// We fill in both direction for overscroll.
|
||||
fill: 'both',
|
||||
// We play all gestures in reverse, except if we're in reverse direction
|
||||
// in which case we need to play it in reverse of the reverse.
|
||||
direction: reverse ? 'normal' : 'reverse',
|
||||
// Range start needs to be higher than range end. If it goes in reverse
|
||||
// we reverse the whole animation below.
|
||||
rangeStart: (reverse ? rangeEnd : rangeStart) + '%',
|
||||
rangeEnd: (reverse ? rangeStart : rangeEnd) + '%',
|
||||
});
|
||||
}
|
||||
|
||||
export function startGestureTransition(
|
||||
rootContainer: Container,
|
||||
timeline: GestureTimeline,
|
||||
rangeStart: number,
|
||||
rangeEnd: number,
|
||||
transitionTypes: null | TransitionTypes,
|
||||
mutationCallback: () => void,
|
||||
animateCallback: () => void,
|
||||
errorCallback: mixed => void,
|
||||
): null | RunningGestureTransition {
|
||||
const ownerDocument: Document =
|
||||
rootContainer.nodeType === DOCUMENT_NODE
|
||||
@@ -1882,140 +1435,27 @@ export function startGestureTransition(
|
||||
});
|
||||
// $FlowFixMe[prop-missing]
|
||||
ownerDocument.__reactViewTransition = transition;
|
||||
let blockingAnim = null;
|
||||
const readyCallback = () => {
|
||||
const documentElement: Element = (ownerDocument.documentElement: any);
|
||||
// Loop through all View Transition Animations.
|
||||
const animations = documentElement.getAnimations({subtree: true});
|
||||
// First do a pass to collect all known group and new items so we can look
|
||||
// up if they exist later.
|
||||
const foundGroups: Set<string> = new Set();
|
||||
const foundNews: Set<string> = new Set();
|
||||
for (let i = 0; i < animations.length; i++) {
|
||||
// $FlowFixMe
|
||||
const pseudoElement: ?string = animations[i].effect.pseudoElement;
|
||||
if (pseudoElement == null) {
|
||||
} else if (pseudoElement.startsWith('::view-transition-group')) {
|
||||
foundGroups.add(pseudoElement.slice(23));
|
||||
} else if (pseudoElement.startsWith('::view-transition-new')) {
|
||||
// TODO: This is not really a sufficient detection because if the new
|
||||
// pseudo element might exist but have animations disabled on it.
|
||||
foundNews.add(pseudoElement.slice(21));
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < animations.length; i++) {
|
||||
const anim = animations[i];
|
||||
if (anim.playState !== 'running') {
|
||||
continue;
|
||||
}
|
||||
const effect: KeyframeEffect = (anim.effect: any);
|
||||
// $FlowFixMe
|
||||
const pseudoElement: ?string = effect.pseudoElement;
|
||||
if (
|
||||
pseudoElement != null &&
|
||||
pseudoElement.startsWith('::view-transition') &&
|
||||
effect.target === documentElement
|
||||
) {
|
||||
// Ideally we could mutate the existing animation but unfortunately
|
||||
// the mutable APIs seem less tested and therefore are lacking or buggy.
|
||||
// Therefore we create a new animation instead.
|
||||
anim.cancel();
|
||||
let isGeneratedGroupAnim = false;
|
||||
let isExitGroupAnim = false;
|
||||
if (pseudoElement.startsWith('::view-transition-group')) {
|
||||
const groupName = pseudoElement.slice(23);
|
||||
if (foundNews.has(groupName)) {
|
||||
// If this has both "new" and "old" state we expect this to be an auto-generated
|
||||
// animation that started outside the viewport. We need to adjust this first frame
|
||||
// to be inside the viewport.
|
||||
// $FlowFixMe[prop-missing]
|
||||
const animationName: ?string = anim.animationName;
|
||||
isGeneratedGroupAnim =
|
||||
animationName != null &&
|
||||
// $FlowFixMe[prop-missing]
|
||||
animationName.startsWith('-ua-view-transition-group-anim-');
|
||||
} else {
|
||||
// If this has only an "old" state then the pseudo element will be outside
|
||||
// the viewport. If any keyframes don't override "transform" we need to
|
||||
// adjust them.
|
||||
isExitGroupAnim = true;
|
||||
}
|
||||
// TODO: If this has only an old state and no new state,
|
||||
}
|
||||
animateGesture(
|
||||
effect.getKeyframes(),
|
||||
// $FlowFixMe: Always documentElement atm.
|
||||
effect.target,
|
||||
pseudoElement,
|
||||
timeline,
|
||||
rangeStart,
|
||||
rangeEnd,
|
||||
isGeneratedGroupAnim,
|
||||
isExitGroupAnim,
|
||||
);
|
||||
if (pseudoElement.startsWith('::view-transition-old')) {
|
||||
const groupName = pseudoElement.slice(21);
|
||||
if (!foundGroups.has(groupName) && !foundNews.has(groupName)) {
|
||||
foundGroups.add(groupName);
|
||||
// We haven't seen any group animation with this name. Since the old
|
||||
// state was outside the viewport we need to put it back. Since we
|
||||
// can't programmatically target the element itself, we use an
|
||||
// animation to adjust it.
|
||||
// This usually happens for exit animations where the element has
|
||||
// the old position.
|
||||
// If we also have a "new" state then we skip this because it means
|
||||
// someone manually disabled the auto-generated animation. We need to
|
||||
// treat the old state as having the position of the "new" state which
|
||||
// will happen by default.
|
||||
const pseudoElementName = '::view-transition-group' + groupName;
|
||||
animateGesture(
|
||||
[{}, {}],
|
||||
// $FlowFixMe: Always documentElement atm.
|
||||
effect.target,
|
||||
pseudoElementName,
|
||||
timeline,
|
||||
rangeStart,
|
||||
rangeEnd,
|
||||
false,
|
||||
true, // We let the helper apply the translate
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// View Transitions with ScrollTimeline has a quirk where they end if the
|
||||
// ScrollTimeline ever reaches 100% but that doesn't mean we're done because
|
||||
// you can swipe back again. We can prevent this by adding a paused Animation
|
||||
// that never stops. This seems to keep all running Animations alive until
|
||||
// we explicitly abort (or something forces the View Transition to cancel).
|
||||
const blockingAnim = documentElement.animate([{}, {}], {
|
||||
const documentElement: Element = (ownerDocument.documentElement: any);
|
||||
blockingAnim = documentElement.animate([{}, {}], {
|
||||
pseudoElement: '::view-transition',
|
||||
duration: 1,
|
||||
});
|
||||
blockingAnim.pause();
|
||||
animateCallback();
|
||||
};
|
||||
// In Chrome, "new" animations are not ready in the ready callback. We have to wait
|
||||
// until requestAnimationFrame before we can observe them through getAnimations().
|
||||
// However, in Safari, that would cause a flicker because we're applying them late.
|
||||
// TODO: Think of a feature detection for this instead.
|
||||
const readyForAnimations =
|
||||
navigator.userAgent.indexOf('Chrome') !== -1
|
||||
? () => requestAnimationFrame(readyCallback)
|
||||
: readyCallback;
|
||||
const handleError = (error: mixed) => {
|
||||
try {
|
||||
error = customizeViewTransitionError(error, true);
|
||||
if (error !== null) {
|
||||
errorCallback(error);
|
||||
}
|
||||
} finally {
|
||||
// Continue the reset of the work.
|
||||
readyCallback();
|
||||
transition.ready.then(readyCallback, readyCallback);
|
||||
transition.finished.then(() => {
|
||||
if (blockingAnim !== null) {
|
||||
// In Safari, we need to manually clear this or it'll block future transitions.
|
||||
blockingAnim.cancel();
|
||||
}
|
||||
};
|
||||
transition.ready.then(readyForAnimations, handleError);
|
||||
transition.finished.finally(() => {
|
||||
cancelAllViewTransitionAnimations((ownerDocument.documentElement: any));
|
||||
// $FlowFixMe[prop-missing]
|
||||
if (ownerDocument.__reactViewTransition === transition) {
|
||||
// $FlowFixMe[prop-missing]
|
||||
@@ -2166,235 +1606,6 @@ export function subscribeToGestureDirection(
|
||||
}
|
||||
}
|
||||
|
||||
type EventListenerOptionsOrUseCapture =
|
||||
| boolean
|
||||
| {
|
||||
capture?: boolean,
|
||||
once?: boolean,
|
||||
passive?: boolean,
|
||||
signal?: AbortSignal,
|
||||
...
|
||||
};
|
||||
|
||||
type StoredEventListener = {
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture: void | EventListenerOptionsOrUseCapture,
|
||||
};
|
||||
|
||||
export type FragmentInstanceType = {
|
||||
_fragmentFiber: Fiber,
|
||||
_eventListeners: null | Array<StoredEventListener>,
|
||||
addEventListener(
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture?: EventListenerOptionsOrUseCapture,
|
||||
): void,
|
||||
removeEventListener(
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture?: EventListenerOptionsOrUseCapture,
|
||||
): void,
|
||||
focus(): void,
|
||||
};
|
||||
|
||||
function FragmentInstance(this: FragmentInstanceType, fragmentFiber: Fiber) {
|
||||
this._fragmentFiber = fragmentFiber;
|
||||
this._eventListeners = null;
|
||||
}
|
||||
// $FlowFixMe[prop-missing]
|
||||
FragmentInstance.prototype.addEventListener = function (
|
||||
this: FragmentInstanceType,
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture?: EventListenerOptionsOrUseCapture,
|
||||
): void {
|
||||
if (this._eventListeners === null) {
|
||||
this._eventListeners = [];
|
||||
}
|
||||
|
||||
const listeners = this._eventListeners;
|
||||
// Element.addEventListener will only apply uniquely new event listeners by default. Since we
|
||||
// need to collect the listeners to apply to appended children, we track them ourselves and use
|
||||
// custom equality check for the options.
|
||||
const isNewEventListener =
|
||||
indexOfEventListener(listeners, type, listener, optionsOrUseCapture) === -1;
|
||||
if (isNewEventListener) {
|
||||
listeners.push({type, listener, optionsOrUseCapture});
|
||||
traverseFragmentInstanceChildren(
|
||||
this,
|
||||
this._fragmentFiber.child,
|
||||
addEventListenerToChild,
|
||||
type,
|
||||
listener,
|
||||
optionsOrUseCapture,
|
||||
);
|
||||
}
|
||||
this._eventListeners = listeners;
|
||||
};
|
||||
function addEventListenerToChild(
|
||||
child: Instance,
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture?: EventListenerOptionsOrUseCapture,
|
||||
): boolean {
|
||||
child.addEventListener(type, listener, optionsOrUseCapture);
|
||||
return false;
|
||||
}
|
||||
// $FlowFixMe[prop-missing]
|
||||
FragmentInstance.prototype.removeEventListener = function (
|
||||
this: FragmentInstanceType,
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture?: EventListenerOptionsOrUseCapture,
|
||||
): void {
|
||||
const listeners = this._eventListeners;
|
||||
if (listeners === null) {
|
||||
return;
|
||||
}
|
||||
if (typeof listeners !== 'undefined' && listeners.length > 0) {
|
||||
traverseFragmentInstanceChildren(
|
||||
this,
|
||||
this._fragmentFiber.child,
|
||||
removeEventListenerFromChild,
|
||||
type,
|
||||
listener,
|
||||
optionsOrUseCapture,
|
||||
);
|
||||
const index = indexOfEventListener(
|
||||
listeners,
|
||||
type,
|
||||
listener,
|
||||
optionsOrUseCapture,
|
||||
);
|
||||
if (this._eventListeners !== null) {
|
||||
this._eventListeners.splice(index, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
function removeEventListenerFromChild(
|
||||
child: Instance,
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture?: EventListenerOptionsOrUseCapture,
|
||||
): boolean {
|
||||
child.removeEventListener(type, listener, optionsOrUseCapture);
|
||||
return false;
|
||||
}
|
||||
// $FlowFixMe[prop-missing]
|
||||
FragmentInstance.prototype.focus = function (this: FragmentInstanceType) {
|
||||
traverseFragmentInstanceChildren(
|
||||
this,
|
||||
this._fragmentFiber.child,
|
||||
setFocusIfFocusable,
|
||||
);
|
||||
};
|
||||
|
||||
function traverseFragmentInstanceChildren<A, B, C>(
|
||||
fragmentInstance: FragmentInstanceType,
|
||||
child: Fiber | null,
|
||||
fn: (Instance, A, B, C) => boolean,
|
||||
a: A,
|
||||
b: B,
|
||||
c: C,
|
||||
): void {
|
||||
while (child !== null) {
|
||||
if (child.tag === HostComponent) {
|
||||
if (fn(child.stateNode, a, b, c)) {
|
||||
return;
|
||||
}
|
||||
} else if (
|
||||
child.tag === OffscreenComponent &&
|
||||
child.memoizedState !== null
|
||||
) {
|
||||
// Skip hidden subtrees
|
||||
} else {
|
||||
traverseFragmentInstanceChildren(
|
||||
fragmentInstance,
|
||||
child.child,
|
||||
fn,
|
||||
a,
|
||||
b,
|
||||
c,
|
||||
);
|
||||
}
|
||||
child = child.sibling;
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeListenerOptions(
|
||||
opts: ?EventListenerOptionsOrUseCapture,
|
||||
): string {
|
||||
if (opts == null) {
|
||||
return '0';
|
||||
}
|
||||
|
||||
if (typeof opts === 'boolean') {
|
||||
return `c=${opts ? '1' : '0'}`;
|
||||
}
|
||||
|
||||
return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`;
|
||||
}
|
||||
|
||||
function indexOfEventListener(
|
||||
eventListeners: Array<StoredEventListener>,
|
||||
type: string,
|
||||
listener: EventListener,
|
||||
optionsOrUseCapture: void | EventListenerOptionsOrUseCapture,
|
||||
): number {
|
||||
for (let i = 0; i < eventListeners.length; i++) {
|
||||
const item = eventListeners[i];
|
||||
if (
|
||||
item.type === type &&
|
||||
item.listener === listener &&
|
||||
normalizeListenerOptions(item.optionsOrUseCapture) ===
|
||||
normalizeListenerOptions(optionsOrUseCapture)
|
||||
) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
export function createFragmentInstance(
|
||||
fragmentFiber: Fiber,
|
||||
): FragmentInstanceType {
|
||||
return new (FragmentInstance: any)(fragmentFiber);
|
||||
}
|
||||
|
||||
export function updateFragmentInstanceFiber(
|
||||
fragmentFiber: Fiber,
|
||||
instance: FragmentInstanceType,
|
||||
): void {
|
||||
instance._fragmentFiber = fragmentFiber;
|
||||
}
|
||||
|
||||
export function commitNewChildToFragmentInstance(
|
||||
childElement: Instance,
|
||||
fragmentInstance: FragmentInstanceType,
|
||||
): void {
|
||||
const eventListeners = fragmentInstance._eventListeners;
|
||||
if (eventListeners !== null) {
|
||||
for (let i = 0; i < eventListeners.length; i++) {
|
||||
const {type, listener, optionsOrUseCapture} = eventListeners[i];
|
||||
childElement.addEventListener(type, listener, optionsOrUseCapture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function deleteChildFromFragmentInstance(
|
||||
childElement: Instance,
|
||||
fragmentInstance: FragmentInstanceType,
|
||||
): void {
|
||||
const eventListeners = fragmentInstance._eventListeners;
|
||||
if (eventListeners !== null) {
|
||||
for (let i = 0; i < eventListeners.length; i++) {
|
||||
const {type, listener, optionsOrUseCapture} = eventListeners[i];
|
||||
childElement.removeEventListener(type, listener, optionsOrUseCapture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function clearContainer(container: Container): void {
|
||||
const nodeType = container.nodeType;
|
||||
if (nodeType === DOCUMENT_NODE) {
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
import type {Fiber} from 'react-reconciler/src/ReactInternalTypes';
|
||||
import type {HydrationDiffNode} from 'react-reconciler/src/ReactFiberHydrationDiffs';
|
||||
|
||||
import {enableOwnerStacks} from 'shared/ReactFeatureFlags';
|
||||
|
||||
import {
|
||||
current,
|
||||
runWithFiberInDEV,
|
||||
@@ -613,7 +615,7 @@ function validateDOMNesting(
|
||||
ancestorDescription,
|
||||
);
|
||||
}
|
||||
if (child) {
|
||||
if (enableOwnerStacks && child) {
|
||||
// For debugging purposes find the nearest ancestor that caused the issue.
|
||||
// The stack trace of this ancestor can be useful to find the cause.
|
||||
// If the parent is a direct parent in the same owner, we don't bother.
|
||||
|
||||
@@ -52,6 +52,7 @@ import {
|
||||
enableLegacyFBSupport,
|
||||
enableCreateEventHandleAPI,
|
||||
enableScopeAPI,
|
||||
enableOwnerStacks,
|
||||
disableCommentsAsDOMContainers,
|
||||
enableScrollEndPolyfill,
|
||||
} from 'shared/ReactFeatureFlags';
|
||||
@@ -274,7 +275,7 @@ function processDispatchQueueItemsInOrder(
|
||||
if (instance !== previousInstance && event.isPropagationStopped()) {
|
||||
return;
|
||||
}
|
||||
if (__DEV__ && instance !== null) {
|
||||
if (__DEV__ && enableOwnerStacks && instance !== null) {
|
||||
runWithFiberInDEV(
|
||||
instance,
|
||||
executeDispatch,
|
||||
@@ -293,7 +294,7 @@ function processDispatchQueueItemsInOrder(
|
||||
if (instance !== previousInstance && event.isPropagationStopped()) {
|
||||
return;
|
||||
}
|
||||
if (__DEV__ && instance !== null) {
|
||||
if (__DEV__ && enableOwnerStacks && instance !== null) {
|
||||
runWithFiberInDEV(
|
||||
instance,
|
||||
executeDispatch,
|
||||
|
||||
@@ -75,7 +75,8 @@ describe('ReactChildReconciler', () => {
|
||||
'This may happen if you return fn instead of <fn /> from render. ' +
|
||||
'Or maybe you meant to call this function rather than return it.\n' +
|
||||
' <h1>{fn}</h1>\n' +
|
||||
' in h1 (at **)',
|
||||
' in h1 (at **)' +
|
||||
(gate('enableOwnerStacks') ? '' : '\n in div (at **)'),
|
||||
]);
|
||||
const node = container.firstChild;
|
||||
|
||||
@@ -99,6 +100,7 @@ describe('ReactChildReconciler', () => {
|
||||
'Keys should be unique so that components maintain their identity across updates. ' +
|
||||
'Non-unique keys may cause children to be duplicated and/or omitted — ' +
|
||||
'the behavior is unsupported and could change in a future version.\n' +
|
||||
(gate('enableOwnerStacks') ? '' : ' in div (at **)\n') +
|
||||
' in div (at **)\n' +
|
||||
' in Component (at **)',
|
||||
]);
|
||||
@@ -135,7 +137,11 @@ describe('ReactChildReconciler', () => {
|
||||
'duplicated and/or omitted — the behavior is unsupported and ' +
|
||||
'could change in a future version.\n' +
|
||||
' in div (at **)\n' +
|
||||
(gate(flags => flags.enableOwnerStacks) ? '' : ' in div (at **)\n') +
|
||||
' in Component (at **)\n' +
|
||||
(gate(flags => flags.enableOwnerStacks)
|
||||
? ''
|
||||
: ' in Parent (at **)\n') +
|
||||
' in GrandParent (at **)',
|
||||
]);
|
||||
});
|
||||
@@ -159,6 +165,7 @@ describe('ReactChildReconciler', () => {
|
||||
'duplicated and/or omitted — the behavior is unsupported and ' +
|
||||
'could change in a future version.\n' +
|
||||
' in div (at **)\n' +
|
||||
(gate(flags => flags.enableOwnerStacks) ? '' : ' in div (at **)\n') +
|
||||
' in Component (at **)',
|
||||
]);
|
||||
});
|
||||
@@ -194,7 +201,11 @@ describe('ReactChildReconciler', () => {
|
||||
'duplicated and/or omitted — the behavior is unsupported and ' +
|
||||
'could change in a future version.\n' +
|
||||
' in div (at **)\n' +
|
||||
(gate(flags => flags.enableOwnerStacks) ? '' : ' in div (at **)\n') +
|
||||
' in Component (at **)\n' +
|
||||
(gate(flags => flags.enableOwnerStacks)
|
||||
? ''
|
||||
: ' in Parent (at **)\n') +
|
||||
' in GrandParent (at **)',
|
||||
]);
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user