diff --git a/.pnp.cjs b/.pnp.cjs index db7d69286615..0170c99523f7 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -251,6 +251,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@babel/plugin-proposal-class-properties", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-proposal-decorators", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-proposal-dynamic-import", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], + ["@babel/plugin-proposal-logical-assignment-operators", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.13.8"], ["@babel/plugin-proposal-nullish-coalescing-operator", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-proposal-optional-chaining", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-transform-modules-commonjs", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], @@ -868,6 +869,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:7.13.0", { + "packageLocation": "./.yarn/cache/@babel-helper-plugin-utils-npm-7.13.0-5266a343c1-24f7a44e94.zip/node_modules/@babel/helper-plugin-utils/", + "packageDependencies": [ + ["@babel/helper-plugin-utils", "npm:7.13.0"] + ], + "linkType": "HARD", + }], ["npm:7.8.3", { "packageLocation": "./.yarn/cache/@babel-helper-plugin-utils-npm-7.8.3-ad2ca93fbd-c81ed4d3c5.zip/node_modules/@babel/helper-plugin-utils/", "packageDependencies": [ @@ -1173,6 +1181,30 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@babel/plugin-proposal-logical-assignment-operators", [ + ["npm:7.13.8", { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.13.8-2e89e72e8d-b5cf7b2e8d.zip/node_modules/@babel/plugin-proposal-logical-assignment-operators/", + "packageDependencies": [ + ["@babel/plugin-proposal-logical-assignment-operators", "npm:7.13.8"] + ], + "linkType": "SOFT", + }], + ["virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.13.8", { + "packageLocation": "./.yarn/$$virtual/@babel-plugin-proposal-logical-assignment-operators-virtual-cf32b02e08/0/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.13.8-2e89e72e8d-b5cf7b2e8d.zip/node_modules/@babel/plugin-proposal-logical-assignment-operators/", + "packageDependencies": [ + ["@babel/plugin-proposal-logical-assignment-operators", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.13.8"], + ["@babel/core", "npm:7.10.2"], + ["@babel/helper-plugin-utils", "npm:7.13.0"], + ["@babel/plugin-syntax-logical-assignment-operators", "virtual:cf32b02e080250653c72a99aa639dd6650ab6f0a74eb2b34cbe4acabee92bfb7c788f6a9b7193acdf723054a515418d2445d3a02960950c2fe141808f0ea8673#npm:7.10.4"], + ["@types/babel__core", null] + ], + "packagePeers": [ + "@babel/core", + "@types/babel__core" + ], + "linkType": "HARD", + }] + ]], ["@babel/plugin-proposal-nullish-coalescing-operator", [ ["npm:7.10.1", { "packageLocation": "./.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.10.1-0f7f2c1049-643f2e9dcd.zip/node_modules/@babel/plugin-proposal-nullish-coalescing-operator/", @@ -1819,6 +1851,27 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "SOFT", }], + ["npm:7.10.4", { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/", + "packageDependencies": [ + ["@babel/plugin-syntax-logical-assignment-operators", "npm:7.10.4"] + ], + "linkType": "SOFT", + }], + ["virtual:cf32b02e080250653c72a99aa639dd6650ab6f0a74eb2b34cbe4acabee92bfb7c788f6a9b7193acdf723054a515418d2445d3a02960950c2fe141808f0ea8673#npm:7.10.4", { + "packageLocation": "./.yarn/$$virtual/@babel-plugin-syntax-logical-assignment-operators-virtual-465fce7989/0/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/", + "packageDependencies": [ + ["@babel/plugin-syntax-logical-assignment-operators", "virtual:cf32b02e080250653c72a99aa639dd6650ab6f0a74eb2b34cbe4acabee92bfb7c788f6a9b7193acdf723054a515418d2445d3a02960950c2fe141808f0ea8673#npm:7.10.4"], + ["@babel/core", "npm:7.10.2"], + ["@babel/helper-plugin-utils", "npm:7.13.0"], + ["@types/babel__core", null] + ], + "packagePeers": [ + "@babel/core", + "@types/babel__core" + ], + "linkType": "HARD", + }], ["virtual:d802de537b834e0270c554bd4a77559eeb4263acf99b85ad931704a166c1295e43d55e7fe4177cf686641fb726b52f94210b7503c5f8ee351ac8449efe14726f#npm:7.10.1", { "packageLocation": "./.yarn/$$virtual/@babel-plugin-syntax-logical-assignment-operators-virtual-8dfd1c7da8/0/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.1-5a44f07fd1-6f277271a7.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/", "packageDependencies": [ @@ -11156,6 +11209,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@babel/plugin-proposal-class-properties", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-proposal-decorators", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-proposal-dynamic-import", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], + ["@babel/plugin-proposal-logical-assignment-operators", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.13.8"], ["@babel/plugin-proposal-nullish-coalescing-operator", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-proposal-optional-chaining", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], ["@babel/plugin-transform-modules-commonjs", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.10.1"], diff --git a/.yarn/cache/@babel-helper-plugin-utils-npm-7.13.0-5266a343c1-24f7a44e94.zip b/.yarn/cache/@babel-helper-plugin-utils-npm-7.13.0-5266a343c1-24f7a44e94.zip new file mode 100644 index 000000000000..14e851b87f04 Binary files /dev/null and b/.yarn/cache/@babel-helper-plugin-utils-npm-7.13.0-5266a343c1-24f7a44e94.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.13.8-2e89e72e8d-b5cf7b2e8d.zip b/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.13.8-2e89e72e8d-b5cf7b2e8d.zip new file mode 100644 index 000000000000..974922fc22ba Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.13.8-2e89e72e8d-b5cf7b2e8d.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip b/.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip new file mode 100644 index 000000000000..ddbc188c520e Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip differ diff --git a/.yarn/versions/1f394246.yml b/.yarn/versions/1f394246.yml new file mode 100644 index 000000000000..b908b5cf9d1e --- /dev/null +++ b/.yarn/versions/1f394246.yml @@ -0,0 +1,30 @@ +releases: + "@yarnpkg/cli": patch + "@yarnpkg/core": patch + "@yarnpkg/plugin-essentials": patch + +declined: + - "@yarnpkg/plugin-compat" + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-exec" + - "@yarnpkg/plugin-file" + - "@yarnpkg/plugin-git" + - "@yarnpkg/plugin-github" + - "@yarnpkg/plugin-http" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-link" + - "@yarnpkg/plugin-node-modules" + - "@yarnpkg/plugin-npm" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnp" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - "@yarnpkg/builder" + - "@yarnpkg/doctor" + - "@yarnpkg/pnpify" diff --git a/babel.config.js b/babel.config.js index 542ade1c09bc..940a30ebca68 100644 --- a/babel.config.js +++ b/babel.config.js @@ -4,6 +4,7 @@ module.exports = { `@babel/plugin-transform-modules-commonjs`, `@babel/plugin-proposal-optional-chaining`, `@babel/plugin-proposal-nullish-coalescing-operator`, + `@babel/plugin-proposal-logical-assignment-operators`, [`@babel/plugin-proposal-decorators`, {legacy: true}], [`@babel/plugin-proposal-class-properties`, {loose: true}], ], diff --git a/package.json b/package.json index a90221d85fcc..1dc4017f337d 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.1", "@babel/plugin-proposal-decorators": "^7.10.1", "@babel/plugin-proposal-dynamic-import": "^7.10.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", "@babel/plugin-proposal-optional-chaining": "^7.10.1", "@babel/plugin-transform-modules-commonjs": "^7.10.1", diff --git a/packages/plugin-essentials/sources/commands/run.ts b/packages/plugin-essentials/sources/commands/run.ts index 47073f1360fa..41867ac4939d 100644 --- a/packages/plugin-essentials/sources/commands/run.ts +++ b/packages/plugin-essentials/sources/commands/run.ts @@ -103,7 +103,15 @@ export default class RunCommand extends BaseCommand { } } - return await scriptUtils.executePackageAccessibleBinary(effectiveLocator, this.scriptName, this.args, {cwd: this.context.cwd, project, stdin: this.context.stdin, stdout: this.context.stdout, stderr: this.context.stderr, nodeArgs}); + return await scriptUtils.executePackageAccessibleBinary(effectiveLocator, this.scriptName, this.args, { + cwd: this.context.cwd, + project, + stdin: this.context.stdin, + stdout: this.context.stdout, + stderr: this.context.stderr, + nodeArgs, + packageAccessibleBinaries: binaries, + }); } // When it fails, we try to check whether it's a global script (ie we look diff --git a/packages/yarnpkg-core/sources/scriptUtils.ts b/packages/yarnpkg-core/sources/scriptUtils.ts index 44050615b537..c80b1535792b 100644 --- a/packages/yarnpkg-core/sources/scriptUtils.ts +++ b/packages/yarnpkg-core/sources/scriptUtils.ts @@ -84,14 +84,15 @@ export async function makeScriptEnv({project, locator, binFolder, lifecycleScrip // Register some binaries that must be made available in all subprocesses // spawned by Yarn (we thus ensure that they always use the right version) - await makePathWrapper(binFolder, `node` as Filename, process.execPath); - - if (YarnVersion !== null) { - await makePathWrapper(binFolder, `run` as Filename, process.execPath, [process.argv[1], `run`]); - await makePathWrapper(binFolder, `yarn` as Filename, process.execPath, [process.argv[1]]); - await makePathWrapper(binFolder, `yarnpkg` as Filename, process.execPath, [process.argv[1]]); - await makePathWrapper(binFolder, `node-gyp` as Filename, process.execPath, [process.argv[1], `run`, `--top-level`, `node-gyp`]); - } + await Promise.all([ + makePathWrapper(binFolder, `node` as Filename, process.execPath), + ...YarnVersion !== null ? [ + makePathWrapper(binFolder, `run` as Filename, process.execPath, [process.argv[1], `run`]), + makePathWrapper(binFolder, `yarn` as Filename, process.execPath, [process.argv[1]]), + makePathWrapper(binFolder, `yarnpkg` as Filename, process.execPath, [process.argv[1]]), + makePathWrapper(binFolder, `node-gyp` as Filename, process.execPath, [process.argv[1], `run`, `--top-level`, `node-gyp`]), + ] : [], + ]); if (project) { scriptEnv.INIT_CWD = npath.fromPortablePath(project.configuration.startingCwd); @@ -299,6 +300,11 @@ type HasPackageScriptOption = { }; export async function hasPackageScript(locator: Locator, scriptName: string, {project}: HasPackageScriptOption) { + // We can avoid using the linkers if the locator is a workspace + const workspace = project.tryWorkspaceByLocator(locator); + if (workspace !== null) + return hasWorkspaceScript(workspace, scriptName); + const pkg = project.storedPackages.get(locator.locatorHash); if (!pkg) throw new Error(`Package for ${structUtils.prettyLocator(project.configuration, locator)} not found in the project`); @@ -361,7 +367,24 @@ export async function executePackageShellcode(locator: Locator, command: string, }); } +async function initializeWorkspaceEnvironment(workspace: Workspace, {binFolder, cwd, lifecycleScript}: {binFolder: PortablePath, cwd?: PortablePath | undefined, lifecycleScript?: string}) { + const env = await makeScriptEnv({project: workspace.project, locator: workspace.anchoredLocator, binFolder, lifecycleScript}); + + await Promise.all( + Array.from(await getWorkspaceAccessibleBinaries(workspace), ([binaryName, [, binaryPath]]) => + makePathWrapper(binFolder, toFilename(binaryName), process.execPath, [binaryPath]) + ) + ); + + return {manifest: workspace.manifest, binFolder, env, cwd: cwd ?? workspace.cwd}; +} + async function initializePackageEnvironment(locator: Locator, {project, binFolder, cwd, lifecycleScript}: {project: Project, binFolder: PortablePath, cwd?: PortablePath | undefined, lifecycleScript?: string}) { + // We can avoid using the linkers if the locator is a workspace + const workspace = project.tryWorkspaceByLocator(locator); + if (workspace !== null) + return initializeWorkspaceEnvironment(workspace, {binFolder, cwd, lifecycleScript}); + const pkg = project.storedPackages.get(locator.locatorHash); if (!pkg) throw new Error(`Package for ${structUtils.prettyLocator(project.configuration, locator)} not found in the project`); @@ -457,6 +480,9 @@ type GetPackageAccessibleBinariesOptions = { project: Project, }; +type Binary = [Locator, NativePath]; +type PackageAccessibleBinaries = Map; + /** * Return the binaries that can be accessed by the specified package * @@ -464,9 +490,9 @@ type GetPackageAccessibleBinariesOptions = { * @param project The project owning the package */ -export async function getPackageAccessibleBinaries(locator: Locator, {project}: GetPackageAccessibleBinariesOptions) { +export async function getPackageAccessibleBinaries(locator: Locator, {project}: GetPackageAccessibleBinariesOptions): Promise { const configuration = project.configuration; - const binaries: Map = new Map(); + const binaries: PackageAccessibleBinaries = new Map(); const pkg = project.storedPackages.get(locator.locatorHash); if (!pkg) @@ -487,17 +513,17 @@ export async function getPackageAccessibleBinaries(locator: Locator, {project}: visibleLocators.add(resolution); } - for (const locatorHash of visibleLocators) { + const dependenciesWithBinaries = await Promise.all(Array.from(visibleLocators, async locatorHash => { const dependency = project.storedPackages.get(locatorHash); if (!dependency) throw new Error(`Assertion failed: The package (${locatorHash}) should have been registered`); if (dependency.bin.size === 0) - continue; + return miscUtils.mapAndFilter.skip; const linker = linkers.find(linker => linker.supportsPackage(dependency, linkerOptions)); if (!linker) - continue; + return miscUtils.mapAndFilter.skip; let packageLocation: PortablePath | null = null; try { @@ -506,12 +532,22 @@ export async function getPackageAccessibleBinaries(locator: Locator, {project}: // Some packages may not be installed when they are incompatible // with the current system. if (err.code === `LOCATOR_NOT_INSTALLED`) { - continue; + return miscUtils.mapAndFilter.skip; } else { throw err; } } + return {dependency, packageLocation}; + })); + + // The order in which binaries overwrite each other must be stable + for (const candidate of dependenciesWithBinaries) { + if (candidate === miscUtils.mapAndFilter.skip) + continue; + + const {dependency, packageLocation} = candidate; + for (const [name, target] of dependency.bin) { binaries.set(name, [dependency, npath.fromPortablePath(ppath.resolve(packageLocation, target))]); } @@ -537,6 +573,8 @@ type ExecutePackageAccessibleBinaryOptions = { stdin: Readable | null, stdout: Writable, stderr: Writable, + /** @internal */ + packageAccessibleBinaries?: PackageAccessibleBinaries, }; /** @@ -551,8 +589,8 @@ type ExecutePackageAccessibleBinaryOptions = { * @param args The arguments to pass to the file */ -export async function executePackageAccessibleBinary(locator: Locator, binaryName: string, args: Array, {cwd, project, stdin, stdout, stderr, nodeArgs = []}: ExecutePackageAccessibleBinaryOptions) { - const packageAccessibleBinaries = await getPackageAccessibleBinaries(locator, {project}); +export async function executePackageAccessibleBinary(locator: Locator, binaryName: string, args: Array, {cwd, project, stdin, stdout, stderr, nodeArgs = [], packageAccessibleBinaries}: ExecutePackageAccessibleBinaryOptions) { + packageAccessibleBinaries ??= await getPackageAccessibleBinaries(locator, {project}); const binary = packageAccessibleBinaries.get(binaryName); if (!binary) @@ -563,7 +601,7 @@ export async function executePackageAccessibleBinary(locator: Locator, binaryNam const env = await makeScriptEnv({project, locator, binFolder}); await Promise.all( - Array.from(packageAccessibleBinaries, ([binaryName, [, binaryPath]]) => + Array.from(packageAccessibleBinaries!, ([binaryName, [, binaryPath]]) => makePathWrapper(env.BERRY_BIN_FOLDER as PortablePath, toFilename(binaryName), process.execPath, [binaryPath]) ) ); @@ -584,6 +622,8 @@ type ExecuteWorkspaceAccessibleBinaryOptions = { stdin: Readable | null, stdout: Writable, stderr: Writable, + /** @internal */ + packageAccessibleBinaries?: PackageAccessibleBinaries, }; /** @@ -594,6 +634,6 @@ type ExecuteWorkspaceAccessibleBinaryOptions = { * @param args The arguments to pass to the file */ -export async function executeWorkspaceAccessibleBinary(workspace: Workspace, binaryName: string, args: Array, {cwd, stdin, stdout, stderr}: ExecuteWorkspaceAccessibleBinaryOptions) { - return await executePackageAccessibleBinary(workspace.anchoredLocator, binaryName, args, {project: workspace.project, cwd, stdin, stdout, stderr}); +export async function executeWorkspaceAccessibleBinary(workspace: Workspace, binaryName: string, args: Array, {cwd, stdin, stdout, stderr, packageAccessibleBinaries}: ExecuteWorkspaceAccessibleBinaryOptions) { + return await executePackageAccessibleBinary(workspace.anchoredLocator, binaryName, args, {project: workspace.project, cwd, stdin, stdout, stderr, packageAccessibleBinaries}); } diff --git a/yarn.lock b/yarn.lock index 74f8487ef608..e7354be5eb70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -471,6 +471,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.13.0": + version: 7.13.0 + resolution: "@babel/helper-plugin-utils@npm:7.13.0" + checksum: 24f7a44e94662a5dc8bd98ab12625ccd96b11e789ef3f9efd4f6f0eeaf01a13b051a148e709fb1c4e1cacdb536987ea75f4b78509567a0117246ea917195a86b + languageName: node + linkType: hard + "@babel/helper-regex@npm:^7.10.1": version: 7.10.1 resolution: "@babel/helper-regex@npm:7.10.1" @@ -636,6 +643,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.13.8": + version: 7.13.8 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.13.8" + dependencies: + "@babel/helper-plugin-utils": ^7.13.0 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b5cf7b2e8d0a5e7f874a922db6062f3a80748fe06e4327df53b9d89fa24bc8ccf1e6ba591a93231dd364b57e5ea6415d16476b1cee986b886356e78329eedf0b + languageName: node + linkType: hard + "@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.10.1": version: 7.10.1 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.10.1" @@ -844,6 +863,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.1 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.1" @@ -5733,6 +5763,7 @@ __metadata: "@babel/plugin-proposal-class-properties": ^7.10.1 "@babel/plugin-proposal-decorators": ^7.10.1 "@babel/plugin-proposal-dynamic-import": ^7.10.1 + "@babel/plugin-proposal-logical-assignment-operators": ^7.13.8 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.10.1 "@babel/plugin-proposal-optional-chaining": ^7.10.1 "@babel/plugin-transform-modules-commonjs": ^7.10.1