diff --git a/examples/isolated-declarations-oxc/package.json b/examples/isolated-declarations-oxc/package.json index 85ff77eb8..4d2af6182 100644 --- a/examples/isolated-declarations-oxc/package.json +++ b/examples/isolated-declarations-oxc/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", - "oxc-transform": "^0.30.0", + "oxc-transform": "^0.30.1", "rimraf": "^6.0.1", "typescript": "^5.6.2" } diff --git a/examples/isolated-declarations-swc/package.json b/examples/isolated-declarations-swc/package.json index ef8771fc2..e57b4d72d 100644 --- a/examples/isolated-declarations-swc/package.json +++ b/examples/isolated-declarations-swc/package.json @@ -33,7 +33,7 @@ "clean": "rimraf node_modules dist" }, "devDependencies": { - "@swc/core": "^1.7.26", + "@swc/core": "^1.7.28", "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", "rimraf": "^6.0.1", diff --git a/examples/multi-exports/package.json b/examples/multi-exports/package.json index d52186ec6..6b09733c6 100644 --- a/examples/multi-exports/package.json +++ b/examples/multi-exports/package.json @@ -58,7 +58,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", diff --git a/examples/react-tsx-css/package.json b/examples/react-tsx-css/package.json index e2c99103c..625c9f0f3 100644 --- a/examples/react-tsx-css/package.json +++ b/examples/react-tsx-css/package.json @@ -17,7 +17,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", diff --git a/examples/react-tsx/package.json b/examples/react-tsx/package.json index 21449399e..956f7b21e 100644 --- a/examples/react-tsx/package.json +++ b/examples/react-tsx/package.json @@ -37,7 +37,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", diff --git a/examples/react-use-client/package.json b/examples/react-use-client/package.json index 3ec0ab2f5..a1a442d2f 100644 --- a/examples/react-use-client/package.json +++ b/examples/react-use-client/package.json @@ -39,7 +39,7 @@ "react-dom": "^19.0.0-rc-eb3ad065-20240822" }, "devDependencies": { - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", diff --git a/examples/transformer-esbuild/package.json b/examples/transformer-esbuild/package.json index 54f2c8470..69eeb8a0c 100644 --- a/examples/transformer-esbuild/package.json +++ b/examples/transformer-esbuild/package.json @@ -37,7 +37,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "esbuild": "^0.24.0", diff --git a/examples/transformer-sucrase/package.json b/examples/transformer-sucrase/package.json index d418280cb..691806557 100644 --- a/examples/transformer-sucrase/package.json +++ b/examples/transformer-sucrase/package.json @@ -37,7 +37,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "sucrase": "^3.35.0", diff --git a/examples/transformer-swc/package.json b/examples/transformer-swc/package.json index fa3f894e5..b7de3859c 100644 --- a/examples/transformer-swc/package.json +++ b/examples/transformer-swc/package.json @@ -37,9 +37,9 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@swc/core": "^1.7.26", + "@swc/core": "^1.7.28", "@swc/helpers": "^0.5.13", - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@visulima/packem": "workspace:*", "typescript": "^5.6.2" diff --git a/package.json b/package.json index c3243a849..a61794994 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,8 @@ "husky": "^9.1.6", "is-ci": "^3.0.1", "lint-staged": "^15.2.10", - "nx": "^19.8.0", - "pkg-pr-new": "^0.0.25", + "nx": "^19.8.1", + "pkg-pr-new": "^0.0.27", "plop": "^4.0.1", "prettier": "^3.3.3", "publint": "^0.2.11", diff --git a/packages/packem/__fixtures__/module-conditions/import-module-require/import.js b/packages/packem/__fixtures__/module-conditions/import-module-require/import.js new file mode 100644 index 000000000..78cd0a385 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/import-module-require/import.js @@ -0,0 +1 @@ +export const resolved = "import"; diff --git a/packages/packem/__fixtures__/module-conditions/import-module-require/module.js b/packages/packem/__fixtures__/module-conditions/import-module-require/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/import-module-require/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/import-module-require/package.json b/packages/packem/__fixtures__/module-conditions/import-module-require/package.json new file mode 100644 index 000000000..2f23e63ac --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/import-module-require/package.json @@ -0,0 +1,11 @@ +{ + "type": "module", + "exports": { + "node": { + "import": "./import.js", + "module-sync": "./module.js", + "require": "./require.cjs" + }, + "default": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/import-module-require/require.cjs b/packages/packem/__fixtures__/module-conditions/import-module-require/require.cjs new file mode 100644 index 000000000..d298de8c7 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/import-module-require/require.cjs @@ -0,0 +1 @@ +exports.resolved = "require"; diff --git a/packages/packem/__fixtures__/module-conditions/module-and-import/import.js b/packages/packem/__fixtures__/module-conditions/module-and-import/import.js new file mode 100644 index 000000000..78cd0a385 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-and-import/import.js @@ -0,0 +1 @@ +export const resolved = "import"; diff --git a/packages/packem/__fixtures__/module-conditions/module-and-import/module.js b/packages/packem/__fixtures__/module-conditions/module-and-import/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-and-import/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/module-and-import/package.json b/packages/packem/__fixtures__/module-conditions/module-and-import/package.json new file mode 100644 index 000000000..a212d6b82 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-and-import/package.json @@ -0,0 +1,10 @@ +{ + "type": "module", + "exports": { + "node": { + "module-sync": "./module.js", + "import": "./import.js" + }, + "default": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/module-and-require/module.js b/packages/packem/__fixtures__/module-conditions/module-and-require/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-and-require/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/module-and-require/package.json b/packages/packem/__fixtures__/module-conditions/module-and-require/package.json new file mode 100644 index 000000000..490433266 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-and-require/package.json @@ -0,0 +1,10 @@ +{ + "type": "module", + "exports": { + "node": { + "module-sync": "./module.js", + "require": "./require.cjs" + }, + "default": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/module-and-require/require.cjs b/packages/packem/__fixtures__/module-conditions/module-and-require/require.cjs new file mode 100644 index 000000000..d298de8c7 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-and-require/require.cjs @@ -0,0 +1 @@ +exports.resolved = "require"; diff --git a/packages/packem/__fixtures__/module-conditions/module-import-require/import.js b/packages/packem/__fixtures__/module-conditions/module-import-require/import.js new file mode 100644 index 000000000..78cd0a385 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-import-require/import.js @@ -0,0 +1 @@ +export const resolved = "import"; diff --git a/packages/packem/__fixtures__/module-conditions/module-import-require/module.js b/packages/packem/__fixtures__/module-conditions/module-import-require/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-import-require/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/module-import-require/package.json b/packages/packem/__fixtures__/module-conditions/module-import-require/package.json new file mode 100644 index 000000000..78a2514a8 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-import-require/package.json @@ -0,0 +1,11 @@ +{ + "type": "module", + "exports": { + "node": { + "module-sync": "./module.js", + "import": "./import.js", + "require": "./require.cjs" + }, + "default": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/module-import-require/require.cjs b/packages/packem/__fixtures__/module-conditions/module-import-require/require.cjs new file mode 100644 index 000000000..d298de8c7 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-import-require/require.cjs @@ -0,0 +1 @@ +exports.resolved = "require"; diff --git a/packages/packem/__fixtures__/module-conditions/module-only/module.js b/packages/packem/__fixtures__/module-conditions/module-only/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-only/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/module-only/package.json b/packages/packem/__fixtures__/module-conditions/module-only/package.json new file mode 100644 index 000000000..d1562e0a3 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-only/package.json @@ -0,0 +1,6 @@ +{ + "type": "module", + "exports": { + "module-sync": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/module-require-import/import.js b/packages/packem/__fixtures__/module-conditions/module-require-import/import.js new file mode 100644 index 000000000..78cd0a385 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-require-import/import.js @@ -0,0 +1 @@ +export const resolved = "import"; diff --git a/packages/packem/__fixtures__/module-conditions/module-require-import/module.js b/packages/packem/__fixtures__/module-conditions/module-require-import/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-require-import/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/module-require-import/package.json b/packages/packem/__fixtures__/module-conditions/module-require-import/package.json new file mode 100644 index 000000000..ea3094106 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-require-import/package.json @@ -0,0 +1,11 @@ +{ + "type": "module", + "exports": { + "node": { + "module-sync": "./module.js", + "require": "./require.cjs", + "import": "./import.js" + }, + "default": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/module-require-import/require.cjs b/packages/packem/__fixtures__/module-conditions/module-require-import/require.cjs new file mode 100644 index 000000000..11692b1f8 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/module-require-import/require.cjs @@ -0,0 +1 @@ +export const resolved = "require"; diff --git a/packages/packem/__fixtures__/module-conditions/require-module-import/import.js b/packages/packem/__fixtures__/module-conditions/require-module-import/import.js new file mode 100644 index 000000000..78cd0a385 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/require-module-import/import.js @@ -0,0 +1 @@ +export const resolved = "import"; diff --git a/packages/packem/__fixtures__/module-conditions/require-module-import/module.js b/packages/packem/__fixtures__/module-conditions/require-module-import/module.js new file mode 100644 index 000000000..a9cd1c435 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/require-module-import/module.js @@ -0,0 +1 @@ +export const resolved = "module"; diff --git a/packages/packem/__fixtures__/module-conditions/require-module-import/package.json b/packages/packem/__fixtures__/module-conditions/require-module-import/package.json new file mode 100644 index 000000000..bdded7c4c --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/require-module-import/package.json @@ -0,0 +1,11 @@ +{ + "type": "module", + "exports": { + "node": { + "require": "./require.cjs", + "module-sync": "./module.js", + "import": "./module.js" + }, + "default": "./module.js" + } +} diff --git a/packages/packem/__fixtures__/module-conditions/require-module-import/require.cjs b/packages/packem/__fixtures__/module-conditions/require-module-import/require.cjs new file mode 100644 index 000000000..d298de8c7 --- /dev/null +++ b/packages/packem/__fixtures__/module-conditions/require-module-import/require.cjs @@ -0,0 +1 @@ +exports.resolved = "require"; diff --git a/packages/packem/__tests__/helpers.ts b/packages/packem/__tests__/helpers.ts index 1b4e6cb97..de20a7d14 100644 --- a/packages/packem/__tests__/helpers.ts +++ b/packages/packem/__tests__/helpers.ts @@ -1,3 +1,4 @@ +import { existsSync } from "node:fs"; import { mkdir } from "node:fs/promises"; import { dirname, join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; @@ -7,6 +8,7 @@ import type { PackageJson } from "@visulima/package"; import type { TsConfigJson } from "@visulima/tsconfig"; import type { Options } from "execa"; import { execaNode } from "execa"; +import { expect } from "vitest"; import type { BuildConfig } from "../src/types"; @@ -102,3 +104,19 @@ export const createTsConfig = (fixturePath: string, config: TsConfigJson, name = }, ); }; + +export const assertContainFiles = (directory: string, filePaths: string[]): void => { + const results = []; + + for (const filePath of filePaths) { + const fullPath = resolve(directory, filePath); + // eslint-disable-next-line security/detect-non-literal-fs-filename + const existed = existsSync(fullPath); + + if (existed) { + results.push(filePath); + } + } + + expect(results).toStrictEqual(filePaths); +}; diff --git a/packages/packem/__tests__/intigration/package-json-exports.test.ts b/packages/packem/__tests__/intigration/package-json-exports.test.ts index 44bcaab9c..85f638263 100644 --- a/packages/packem/__tests__/intigration/package-json-exports.test.ts +++ b/packages/packem/__tests__/intigration/package-json-exports.test.ts @@ -1,4 +1,4 @@ -import { existsSync, readdirSync } from "node:fs"; +import { cpSync, existsSync, readdirSync } from "node:fs"; import { rm } from "node:fs/promises"; import { join } from "node:path"; @@ -6,7 +6,12 @@ import { isAccessibleSync, readFileSync, writeFileSync } from "@visulima/fs"; import { temporaryDirectory } from "tempy"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { createPackageJson, createPackemConfig, createTsConfig, execPackemSync, installPackage } from "../helpers"; +import { assertContainFiles, createPackageJson, createPackemConfig, createTsConfig, execPackemSync, installPackage } from "../helpers"; + +const splitedNodeJsVersion = process.versions.node.split("."); + +// eslint-disable-next-line @typescript-eslint/restrict-plus-operands +const NODE_JS_VERSION = splitedNodeJsVersion[0] + "." + splitedNodeJsVersion[1]; describe("packem package.json exports", () => { let temporaryDirectoryPath: string; @@ -1465,6 +1470,324 @@ const Colorize = /* @__PURE__ */ __name(function() { const result = Colorize(); module.exports = result; +`); + }); + + it("should work with multiple exports conditions", async () => { + expect.assertions(9); + + writeFileSync(`${temporaryDirectoryPath}/src/index.ts`, `export const runtime = 'node';`); + writeFileSync(`${temporaryDirectoryPath}/src/index.browser.ts`, `export const runtime = 'browser';`); + writeFileSync(`${temporaryDirectoryPath}/src/index.edge-light.ts`, `export const runtime = 'edge-light';`); + writeFileSync(`${temporaryDirectoryPath}/src/index.workerd.ts`, `export const runtime = 'workerd';`); + + await installPackage(temporaryDirectoryPath, "typescript"); + createTsConfig(temporaryDirectoryPath, {}); + + await createPackemConfig(temporaryDirectoryPath, {}); + createPackageJson(temporaryDirectoryPath, { + devDependencies: { + typescript: "*", + }, + exports: { + ".": { + browser: { + default: "./dist/index.browser.mjs", + types: "./dist/index.browser.d.mts", + }, + "edge-light": { + default: "./dist/index.edge-light.mjs", + types: "./dist/index.edge-light.d.mts", + }, + import: { + default: "./dist/index.mjs", + types: "./dist/index.d.mts", + }, + node: { + default: "./dist/index.cjs", + import: "./dist/index.mjs", + types: "./dist/index.d.ts", + }, + require: { + default: "./dist/index.cjs", + types: "./dist/index.d.cts", + }, + workerd: { + default: "./dist/index.workerd.mjs", + types: "./dist/index.workerd.d.mts", + }, + }, + }, + main: "dist/index.cjs", + module: "dist/index.mjs", + type: "module", + types: "dist/index.d.ts", + }); + + const binProcess = await execPackemSync("build", [], { + cwd: temporaryDirectoryPath, + }); + + expect(binProcess.stderr).toBe(""); + expect(binProcess.exitCode).toBe(0); + + const distributionFiles = [ + // entry files + "index.mjs", + "index.cjs", + "index.browser.mjs", + "index.workerd.mjs", + "index.edge-light.mjs", + // types + "index.d.cts", + "index.d.ts", + "index.browser.d.mts", + "index.workerd.d.mts", + "index.edge-light.d.mts", + ]; + + // eslint-disable-next-line security/detect-non-literal-fs-filename + const files = readdirSync(join(temporaryDirectoryPath, "dist")); + + expect(files).toHaveLength(14); + + assertContainFiles(join(temporaryDirectoryPath, "dist"), distributionFiles); + + for (const [file, regex] of [ + ["index.cjs", /const runtime = "node"/], + ["index.mjs", /const runtime = "node"/], + ["index.browser.mjs", /const runtime = "browser"/], + ["index.workerd.mjs", /const runtime = "workerd"/], + ["index.edge-light.mjs", /const runtime = "edge-light"/], + ]) { + const content = readFileSync(`${temporaryDirectoryPath}/dist/${file as string}`); + + expect(content).toMatch(regex as RegExp); + } + }); + + it.skipIf(NODE_JS_VERSION !== "22.9")("should support the new 'module-sync' exports", async () => { + expect.assertions(3); + + writeFileSync( + `${temporaryDirectoryPath}/src/index.mts`, + `import { resolved as import_module_require } from 'import-module-require'; +import { resolved as module_and_import } from 'module-and-import'; +import { resolved as module_and_require } from 'module-and-require'; +import { resolved as module_import_require } from 'module-import-require'; +import { resolved as module_only } from 'module-only'; +import { resolved as module_require_import } from 'module-require-import'; +import { resolved as require_module_import } from 'require-module-import'; + +console.log('import-module-require', import_module_require); +console.log('module-and-import', module_and_import); +console.log('module-and-require', module_and_require); +console.log('module-import-require', module_import_require); +console.log('module-only', module_only); +console.log('module-require-import', module_require_import); +console.log('require-module-import', require_module_import);`, + ); + + writeFileSync( + `${temporaryDirectoryPath}/src/index.cts`, + `console.log('import-module-require', require('import-module-require').resolved); +console.log('module-and-import', require('module-and-import').resolved); +console.log('module-and-require', require('module-and-require').resolved); +console.log('module-import-require', require('module-import-require').resolved); +console.log('module-only', require('module-only').resolved); +console.log('module-require-import', require('module-require-import').resolved); +console.log('require-module-import', require('require-module-import').resolved);`, + ); + + await installPackage(temporaryDirectoryPath, "typescript"); + createTsConfig(temporaryDirectoryPath, {}); + + await createPackemConfig(temporaryDirectoryPath, {}); + createPackageJson(temporaryDirectoryPath, { + devDependencies: { + typescript: "*", + }, + exports: { + // On older version of Node.js, where "module-sync" and require(esm) are + // not supported, use the CJS version to avoid dual-package hazard. + // When package authors think it's time to drop support for older versions of + // On new version of Node.js, both require() and import get the ESM version + default: "./dist/index.cjs", + // Node.js, they can remove the exports conditions and just use "main": "index.js". + "module-sync": "./dist/index.mjs", + }, + type: "module", + }); + + const fixturePath = join(__dirname, "../../__fixtures__/module-conditions"); + // eslint-disable-next-line security/detect-non-literal-fs-filename + const moduleConditionsFixture = readdirSync(fixturePath); + + for (const file of moduleConditionsFixture) { + cpSync(`${fixturePath}/${file}`, `${temporaryDirectoryPath}/node_modules/${file}`, { + recursive: true, + }); + } + + const binProcess = await execPackemSync("build", [], { + cwd: temporaryDirectoryPath, + nodeOptions: ["--experimental-require-module"], + reject: false, + }); + + expect(binProcess.exitCode).toBe(0); + + const cjs = readFileSync(`${temporaryDirectoryPath}/dist/index.cjs`); + + expect(cjs).toBe(`'use strict'; + +console.log("import-module-require", require("import-module-require").resolved); +console.log("module-and-import", require("module-and-import").resolved); +console.log("module-and-require", require("module-and-require").resolved); +console.log("module-import-require", require("module-import-require").resolved); +console.log("module-only", require("module-only").resolved); +console.log("module-require-import", require("module-require-import").resolved); +console.log("require-module-import", require("require-module-import").resolved); +`); + + const mjs = readFileSync(`${temporaryDirectoryPath}/dist/index.mjs`); + + expect(mjs).toBe(`const resolved$6 = "module"; + +const resolved$5 = "module"; + +const resolved$4 = "module"; + +const resolved$3 = "module"; + +const resolved$2 = "module"; + +const resolved$1 = "module"; + +const resolved = "module"; + +console.log("import-module-require", resolved$6); +console.log("module-and-import", resolved$5); +console.log("module-and-require", resolved$4); +console.log("module-import-require", resolved$3); +console.log("module-only", resolved$2); +console.log("module-require-import", resolved$1); +console.log("require-module-import", resolved); +`); + }); + + it.skipIf(NODE_JS_VERSION !== "22.9")("should support the new 'module-sync' exports node", async () => { + expect.assertions(3); + + writeFileSync( + `${temporaryDirectoryPath}/src/index.mts`, + `import { resolved as import_module_require } from 'import-module-require'; +import { resolved as module_and_import } from 'module-and-import'; +import { resolved as module_and_require } from 'module-and-require'; +import { resolved as module_import_require } from 'module-import-require'; +// This use the new "module-sync" export condition, this is only supported on newest Node.js version +import { resolved as module_only } from 'module-only'; +import { resolved as module_require_import } from 'module-require-import'; +import { resolved as require_module_import } from 'require-module-import'; + +console.log('import-module-require', import_module_require); +console.log('module-and-import', module_and_import); +console.log('module-and-require', module_and_require); +console.log('module-import-require', module_import_require); +console.log('module-only', module_only); +console.log('module-require-import', module_require_import); +console.log('require-module-import', require_module_import);`, + ); + + writeFileSync( + `${temporaryDirectoryPath}/src/index.cts`, + `console.log('import-module-require', require('import-module-require').resolved); +console.log('module-and-import', require('module-and-import').resolved); +console.log('module-and-require', require('module-and-require').resolved); +console.log('module-import-require', require('module-import-require').resolved); +console.log('module-only', require('module-only').resolved); +console.log('module-require-import', require('module-require-import').resolved); +console.log('require-module-import', require('require-module-import').resolved);`, + ); + + await installPackage(temporaryDirectoryPath, "typescript"); + createTsConfig(temporaryDirectoryPath, {}); + + await createPackemConfig(temporaryDirectoryPath, {}); + createPackageJson(temporaryDirectoryPath, { + devDependencies: { + typescript: "*", + }, + exports: { + // On any other environment, use the ESM version. + default: "./dist/index.js", + node: { + // On older version of Node.js, where "module-sync" and require(esm) are + // not supported, use the CJS version to avoid dual-package hazard. + // When package authors think it's time to drop support for older versions of + // the ESM version + default: "./dist/index.cjs", + // On new version of Node.js, both require() and import get + // Node.js, they can remove the exports conditions and just use "main": "index.js". + "module-sync": "./dist/index.mjs", + }, + }, + type: "module", + }); + + const fixturePath = join(__dirname, "../../__fixtures__/module-conditions"); + // eslint-disable-next-line security/detect-non-literal-fs-filename + const moduleConditionsFixture = readdirSync(fixturePath); + + for (const file of moduleConditionsFixture) { + cpSync(`${fixturePath}/${file}`, `${temporaryDirectoryPath}/node_modules/${file}`, { + recursive: true, + }); + } + + const binProcess = await execPackemSync("build", [], { + cwd: temporaryDirectoryPath, + nodeOptions: ["--experimental-require-module"], + }); + + expect(binProcess.exitCode).toBe(0); + + const cjs = readFileSync(`${temporaryDirectoryPath}/dist/index.cjs`); + + expect(cjs).toBe(`'use strict'; + +console.log("import-module-require", require("import-module-require").resolved); +console.log("module-and-import", require("module-and-import").resolved); +console.log("module-and-require", require("module-and-require").resolved); +console.log("module-import-require", require("module-import-require").resolved); +console.log("module-only", require("module-only").resolved); +console.log("module-require-import", require("module-require-import").resolved); +console.log("require-module-import", require("require-module-import").resolved); +`); + + const mjs = readFileSync(`${temporaryDirectoryPath}/dist/index.mjs`); + + expect(mjs).toBe(`const resolved$6 = "module"; + +const resolved$5 = "module"; + +const resolved$4 = "module"; + +const resolved$3 = "module"; + +const resolved$2 = "module"; + +const resolved$1 = "module"; + +const resolved = "module"; + +console.log("import-module-require", resolved$6); +console.log("module-and-import", resolved$5); +console.log("module-and-require", resolved$4); +console.log("module-import-require", resolved$3); +console.log("module-only", resolved$2); +console.log("module-require-import", resolved$1); +console.log("require-module-import", resolved); `); }); }); diff --git a/packages/packem/package.json b/packages/packem/package.json index 6d51ba53d..d6c56d79d 100644 --- a/packages/packem/package.json +++ b/packages/packem/package.json @@ -208,7 +208,7 @@ "@rollup/plugin-dynamic-import-vars": "2.1.3", "@rollup/plugin-inject": "5.0.5", "@rollup/plugin-json": "6.1.0", - "@rollup/plugin-node-resolve": "15.2.4", + "@rollup/plugin-node-resolve": "15.3.0", "@rollup/plugin-replace": "5.0.7", "@rollup/plugin-wasm": "6.2.2", "@rollup/pluginutils": "5.1.2", @@ -251,7 +251,7 @@ "@babel/core": "^7.25.2", "@rushstack/eslint-plugin-security": "^0.8.3", "@secretlint/secretlint-rule-preset-recommend": "^8.2.4", - "@swc/core": "^1.7.26", + "@swc/core": "^1.7.28", "@swc/types": "0.1.12", "@total-typescript/ts-reset": "^0.6.1", "@types/estree": "^1.0.6", @@ -259,7 +259,7 @@ "@types/glob-parent": "^5.1.3", "@types/is-glob": "^4.0.4", "@types/node": "18.19.50", - "@types/react": "^18.3.8", + "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@types/semver": "^7.5.8", "@vitest/coverage-v8": "^2.1.1", diff --git a/packages/packem/src/create-bundler.ts b/packages/packem/src/create-bundler.ts index d26c4e997..24c0f6cb7 100644 --- a/packages/packem/src/create-bundler.ts +++ b/packages/packem/src/create-bundler.ts @@ -223,6 +223,7 @@ const generateOptions = ( resolve: { // old behavior node 14 and removed in node 17 allowExportsFolderMapping: false, + exportConditions: ["module-sync"], extensions: DEFAULT_EXTENSIONS, // Following option must be *false* for polyfill to work preferBuiltins: false, diff --git a/packages/packem/src/rollup/plugins/esbuild/index.ts b/packages/packem/src/rollup/plugins/esbuild/index.ts index 875285501..eaac5cf1f 100644 --- a/packages/packem/src/rollup/plugins/esbuild/index.ts +++ b/packages/packem/src/rollup/plugins/esbuild/index.ts @@ -155,7 +155,6 @@ export default ({ exclude, include, loaders: _loaders, logger, optimizeDeps, sou // @see https://github.com/evanw/esbuild/issues/1932#issuecomment-1013380565 sourcefile: id.replace(/\.[cm]ts/, ".ts"), sourcemap: sourceMap, - ...esbuildOptions, }); diff --git a/packages/packem/src/utils/extract-export-filenames.ts b/packages/packem/src/utils/extract-export-filenames.ts index f61b4aa47..4dd54c59e 100644 --- a/packages/packem/src/utils/extract-export-filenames.ts +++ b/packages/packem/src/utils/extract-export-filenames.ts @@ -1,11 +1,29 @@ import type { PackageJson } from "@visulima/package"; -import { SPECIAL_EXPORT_CONVENTIONS } from "../constants"; +import { RUNTIME_EXPORT_CONVENTIONS, SPECIAL_EXPORT_CONVENTIONS } from "../constants"; import type { BuildOptions } from "../types"; import { inferExportType, inferExportTypeFromFileName } from "./infer-export-type"; +// This Set contains keys representing various JavaScript runtime environments and module systems. +// It is used to identify and process different types of exports in package.json files. +// You can find the list of runtime keys here: https://runtime-keys.proposal.wintercg.org/ // eslint-disable-next-line @typescript-eslint/consistent-generic-constructors -const exportsKeys: Set = new Set(["import", "require", "node", "node-addons", "default", "types", "deno", "browser", ...SPECIAL_EXPORT_CONVENTIONS]); +const runtimeExportConventions: Set = new Set([ + "electron", + "import", + "require", + "node", + "node-addons", + "default", + "types", + "deno", + "browser", + "module-sync", + "bun", + "workerd", + ...RUNTIME_EXPORT_CONVENTIONS, + ...SPECIAL_EXPORT_CONVENTIONS, +]); export type OutputDescriptor = { exportKey?: string; @@ -13,7 +31,7 @@ export type OutputDescriptor = { file: string; isExecutable?: true; key: "exports" | "main" | "types" | "module" | "bin"; - subKey?: typeof exportsKeys | (NonNullable & string); + subKey?: typeof runtimeExportConventions | (NonNullable & string); type?: "cjs" | "esm"; }; @@ -78,7 +96,7 @@ export const extractExportFilenames = ( exportKey: key.replace("./", ""), file: entryExport, key: "exports", - ...(exportsKeys.has(condition) ? { subKey: condition as OutputDescriptor["subKey"] } : {}), + ...(runtimeExportConventions.has(condition) ? { subKey: condition as OutputDescriptor["subKey"] } : {}), type: inferExportType(condition, conditions, packageType, entryExport), } as OutputDescriptor); } else { diff --git a/packages/packem/src/utils/infer-export-type.ts b/packages/packem/src/utils/infer-export-type.ts index c55d91467..10b8e485a 100644 --- a/packages/packem/src/utils/infer-export-type.ts +++ b/packages/packem/src/utils/infer-export-type.ts @@ -11,6 +11,10 @@ export const inferExportTypeFromFileName = (filename: string): "cjs" | "esm" | u }; export const inferExportType = (condition: string, previousConditions: string[], packageType: "cjs" | "esm", filename?: string): "cjs" | "esm" => { + if (condition === "module-sync") { + return "esm"; + } + if (filename) { const inferredType = inferExportTypeFromFileName(filename); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a90ad32e..24892a0c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,11 +67,11 @@ importers: specifier: ^15.2.10 version: 15.2.10 nx: - specifier: ^19.8.0 - version: 19.8.0(@swc/core@1.7.26(@swc/helpers@0.5.13)) + specifier: ^19.8.1 + version: 19.8.1(@swc/core@1.7.28(@swc/helpers@0.5.13)) pkg-pr-new: - specifier: ^0.0.25 - version: 0.0.25 + specifier: ^0.0.27 + version: 0.0.27 plop: specifier: ^4.0.1 version: 4.0.1 @@ -160,8 +160,8 @@ importers: specifier: ^0.24.0 version: 0.24.0 oxc-transform: - specifier: ^0.30.0 - version: 0.30.0 + specifier: ^0.30.1 + version: 0.30.1 rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -172,8 +172,8 @@ importers: examples/isolated-declarations-swc: devDependencies: '@swc/core': - specifier: ^1.7.26 - version: 1.7.26(@swc/helpers@0.5.13) + specifier: ^1.7.28 + version: 1.7.28(@swc/helpers@0.5.13) '@visulima/packem': specifier: workspace:* version: link:../../packages/packem @@ -237,8 +237,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -286,8 +286,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -317,8 +317,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -345,8 +345,8 @@ importers: version: 19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614) devDependencies: '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -373,8 +373,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -398,8 +398,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -423,14 +423,14 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@swc/core': - specifier: ^1.7.26 - version: 1.7.26(@swc/helpers@0.5.13) + specifier: ^1.7.28 + version: 1.7.28(@swc/helpers@0.5.13) '@swc/helpers': specifier: ^0.5.13 version: 0.5.13 '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -507,8 +507,8 @@ importers: specifier: 6.1.0 version: 6.1.0(rollup@4.22.4) '@rollup/plugin-node-resolve': - specifier: 15.2.4 - version: 15.2.4(rollup@4.22.4) + specifier: 15.3.0 + version: 15.3.0(rollup@4.22.4) '@rollup/plugin-replace': specifier: 5.0.7 version: 5.0.7(rollup@4.22.4) @@ -631,8 +631,8 @@ importers: specifier: ^8.2.4 version: 8.2.4 '@swc/core': - specifier: ^1.7.26 - version: 1.7.26(@swc/helpers@0.5.13) + specifier: ^1.7.28 + version: 1.7.28(@swc/helpers@0.5.13) '@swc/types': specifier: 0.1.12 version: 0.1.12 @@ -655,8 +655,8 @@ importers: specifier: 18.19.50 version: 18.19.50 '@types/react': - specifier: ^18.3.8 - version: 18.3.8 + specifier: ^18.3.9 + version: 18.3.9 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -1809,66 +1809,66 @@ packages: resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@nrwl/tao@19.8.0': - resolution: {integrity: sha512-tybyYdhHNfyBRb8SOc/SasT1iwjYkp/QibS8L3ayTvpvvzJpNr8BpuTznQWIkaIjilflmcdHl+rMiQDqwABqpg==} + '@nrwl/tao@19.8.1': + resolution: {integrity: sha512-g/HkoLcPdHZvytjaBeGDhDyPUz4u4btKMTWiv6LwCrByrEpTIPlzjWbg1a70KUcKyJzUTDdDuTtef47ydfA4Lw==} hasBin: true - '@nx/nx-darwin-arm64@19.8.0': - resolution: {integrity: sha512-JWtBb6ndCdGE+RBIwKN85BZnX41lFGsFxnsmot71GeAj/g7Cb0PM2qcmxawoy8yLPTBGZhb+eHER3z3nDIqRog==} + '@nx/nx-darwin-arm64@19.8.1': + resolution: {integrity: sha512-UqAqR+pmcOMV9zufbRtaLk1OIA7fjQLmKjy4fAlPVf7EAcY+j+d+xkmezLJ4eLxNKy3T1WUiAFVBp2FuotfW2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@19.8.0': - resolution: {integrity: sha512-NcNaqbbStBkyahLaoKFtW6nEdjCjYT5ZOmGjc6UpAx1Y3pkk/FcIOYJRCBxwuOsRRsEAyeVcHPdYrouZmV+6Yw==} + '@nx/nx-darwin-x64@19.8.1': + resolution: {integrity: sha512-D5xlqCM9hc/gzSAM/a9KqWP2D3qHRUxk4/03573tjC7Pssgkmd2eBsLDIit2+BmxKBoUuNbVK9R3iQNUOuGHdA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@19.8.0': - resolution: {integrity: sha512-QXHRnMW5LrpYvtmdFRL2CRgX9CWDccrs2xhQNNzcgsLgL87Wte5kjDoJJN4GQjtrmjD3Q93w67CE9lhqnpXBvQ==} + '@nx/nx-freebsd-x64@19.8.1': + resolution: {integrity: sha512-EsMZ0H1r9tl5j4GI0DKBxtV4p+O8B06Ys8kQVBOs3dDykpTIf1kbYc/4UrISqFJn+fgS/fCGcMqdIb+LI3eg4w==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@19.8.0': - resolution: {integrity: sha512-VjZOLMxz0gT+0AdDygxQS0Vvi3AcEzO3y9o9WdGKKaDVUDycrFn72X+ZbvFoio1dF7S1s2TbmOlR09Bu1yTgGg==} + '@nx/nx-linux-arm-gnueabihf@19.8.1': + resolution: {integrity: sha512-0+a49tWjIjcr/t6kQ5iizkhCg4FQD1ByadM2z0YLvwCDfYUnYN9+U2yULukIFaVMBPhQKIruPgV1jMBJCycs/w==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@19.8.0': - resolution: {integrity: sha512-sCSrXkSmEfDUDGLESXB3eHXECAIYz9nosFZpCggyUP1vgF/QcV40fHnV38nrFbKaVHuoaxy43RgnD+I3o6sDSw==} + '@nx/nx-linux-arm64-gnu@19.8.1': + resolution: {integrity: sha512-jcM0VNtJMTWUmZpMPidM3lkT1Rk4jiCdBDaQtrUqEifKsB7mvDxGQUy81a8iPCTrWLznZUajEczzL6963ADm1w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@19.8.0': - resolution: {integrity: sha512-F3xEe7NGjsVKZTVlvUiUOTmCzxteRsQH2SSsYXyAfgJ42P3eZPc9HgeLx6RByjC/NBCwc7XEECMP1FjQgQXHVw==} + '@nx/nx-linux-arm64-musl@19.8.1': + resolution: {integrity: sha512-Ov8hj6XIsp6LUiIX7q0ndjOfJE4JVBe9p78ursqtKvwnnZJIO5L1SQYw6zcqcodJ81E7SoX2U8oCOjfnmSISkw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@19.8.0': - resolution: {integrity: sha512-4uYuE+LvxOFXvi9z9ueJSVrME5D383SHNCjs6jYwc9KovCsmL5oPVXRieoE4/hYI4lrjly+CrAnPZU1P7ocBiw==} + '@nx/nx-linux-x64-gnu@19.8.1': + resolution: {integrity: sha512-+mTXbGB+N5oqS/K9DmuYxu15FuOIxvngU7YGt8/B6k/M3ZYL8QD9PcPsu/Te6TcVEK8qXfK3MR1yJJGt+Wtb+Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@19.8.0': - resolution: {integrity: sha512-9UDEGjOvNt+m+kMBCAB7CGisSwv05Xvaq8K3NJ+xM5GPG74EkQel24mSoIJfm/6zmDkdZCiRzNN9VRjOjzOz6Q==} + '@nx/nx-linux-x64-musl@19.8.1': + resolution: {integrity: sha512-ENsiCXfpdDPDyf+7dD6wV620A0Sp2QaO3At0vmfSP5+JRrwwSCSByjIz3OkT6CCSCWSqA6jMlWq/Wjm+x3oGkg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@19.8.0': - resolution: {integrity: sha512-JVzm0KjyLZY5ponBukZ/b35wttW0b3LB0nqaiiHY7WKwSzo+m0UGEYHD/Yk6rKA0RRZN2wQVeIzLeWfYcZYrhA==} + '@nx/nx-win32-arm64-msvc@19.8.1': + resolution: {integrity: sha512-WjKW5makPC+cNTPxwdRSSrx8JH40bq+ql4GGel+lE4JXZVF9gB+bdMO9DCRwhq3RkJooTE17PDwiCisZP1oV8A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@19.8.0': - resolution: {integrity: sha512-IRLhMZIInvp9okLsjnj76zaz8iaMovtLr6MHIFOOPIMsZYRhqQTArF5Os/NqEezeYYxvX6YZ5hKYe0xQO7A5LA==} + '@nx/nx-win32-x64-msvc@19.8.1': + resolution: {integrity: sha512-B58kXaAcRAoiQvAidv744wFgREWneR78IilTlQpNe0LFzhLLdT+Y06KvysviPNlpopMmukZET+scCK0kM0djoA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2011,81 +2011,41 @@ packages: cpu: [x64] os: [win32] - '@oxc-transform/binding-darwin-arm64@0.30.0': - resolution: {integrity: sha512-wwW2PGrF8Xhtrp5mvwduccdSUlgyKeQm/7lV7A03qLUW+AVnhwJNU8zk8GhnpvdEKj50OjLFaneFdbX3vckQVg==} - cpu: [arm64] - os: [darwin] - '@oxc-transform/binding-darwin-arm64@0.30.1': resolution: {integrity: sha512-lBxKwDNtirJAa5R02A45XXh6TY5Bd0qljxHh6EOg+QONxhI3kEBmE0YZZcrw6OfI9Ay6rcunbvHjcwCQKtp5Ng==} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.30.0': - resolution: {integrity: sha512-Rag/DYdOez2YwqeIeAj+gR07aEZ8aJ88EcatH3b34+uqxv+aUyEl9URJzmqfj7ecoWxpTUG1i8MnhijVL9YjVw==} - cpu: [x64] - os: [darwin] - '@oxc-transform/binding-darwin-x64@0.30.1': resolution: {integrity: sha512-Fo/ujIN7NYh3nU3Anw5WdLZYTdZIfwURzaUL+BbthH7f+R4Zq81bAalq8C4LL7h3CLQfD5IdkHHAzjFVJ5Ar6w==} cpu: [x64] os: [darwin] - '@oxc-transform/binding-linux-arm64-gnu@0.30.0': - resolution: {integrity: sha512-mPk2/2mb/SYpb1gDxHwz9l+ZJEw3WxGFs4C6qKBlCR2JligTLDubCbZHx8tuUPcSEQypmhk9adDlINE+Pm++WQ==} - cpu: [arm64] - os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.30.1': resolution: {integrity: sha512-NxYq6SEZGQMLYvQJ5X8/L0+NFBHfkKFK4msEgE80xoLxjCpTlkZXKZGByZk0zAl2tHv+fPEcAC/g4UGo8W5MvA==} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.30.0': - resolution: {integrity: sha512-LZ+6VCMyCYTkviUpgHOJyc04+aCogw73afRzmn4Xem8mZSFzWAu02xI9qXL8DbJTnWY4OIRN2d6hEoc/ZS289A==} - cpu: [arm64] - os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.30.1': resolution: {integrity: sha512-upndDxYQIyXgzhUExecxdG28PElAmAzC8WB/2Z7gUPBPvaMkrpD0YnlFUgEdxyquo5CCM2+CUHsH9mpXy9Sw4g==} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.30.0': - resolution: {integrity: sha512-LhhIrSfopnP856WF/fICjPRLJRV+vRa8/u/ZY/AoIn8J+WWmyog4tkDnjRsmHkcaQIZE/aSQluOivBFeeejYoQ==} - cpu: [x64] - os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.30.1': resolution: {integrity: sha512-rTas53HRgtkw0BBYeilgFVFJF5+lLXOe0W3Jcf3wfYGEHx6bjIdKs1eJtQaDi5dWzPXIqMUi21FpXKdQYxkoqQ==} cpu: [x64] os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.30.0': - resolution: {integrity: sha512-0np0ctlIbb8VnvbUBspk3/FXVyhMaclNuP7KeNjHFc46N1wmWPeSGf8iLMXOmHYY94dMb6eVM7LLZNy5CR4/Sw==} - cpu: [x64] - os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.30.1': resolution: {integrity: sha512-949fbH3VOjqnKpoUkAbESA2IYDwNFUSDsdKtjjQqq1KmFcyBRVqD1At4p8ZyJPcVLGSxc3FmtqTaP0o1WjKPfw==} cpu: [x64] os: [linux] - '@oxc-transform/binding-win32-arm64-msvc@0.30.0': - resolution: {integrity: sha512-D29pU5NrkUyxPLj1hQkdM4+i2QRRrWzKYQGO3MZwf/hQYqrt28PgWUeYi45j4DQPQNdmivI2i29dysq9uXaXNg==} - cpu: [arm64] - os: [win32] - '@oxc-transform/binding-win32-arm64-msvc@0.30.1': resolution: {integrity: sha512-3iPY96gJ0CI/xuYmPaY06aOtaCtPID8JpSwRCaPgBNWimpo9L+OVTgwadDdSLDDPXyNvKeg1+cMZUnED6BKn+A==} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.30.0': - resolution: {integrity: sha512-clLRwyTrYvXqGVKa/jIH4y3sfKxhdj0xnSW3z4z1muc131/GRsFY+OYTdflVi4ULk51HBLtkYRQ73Fjy+CBegw==} - cpu: [x64] - os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.30.1': resolution: {integrity: sha512-PEZ5POpHCYaIPjr+/fowN+xg6FPB/P6H/uVCpMUGpUJmN6ELHLnHfoYO0az/TgG4n0dBR5LdG45yhAc1jb99KA==} cpu: [x64] @@ -2164,8 +2124,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.2.4': - resolution: {integrity: sha512-wnKAGisav1m2vgVK2/2mNowK5DCqff7kpz76cY1pECVE0qRQTCAIcWP5xmdGDi8X8K9SYeeC98i6cD3fk6qkDg==} + '@rollup/plugin-node-resolve@15.3.0': + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^4.22.4 @@ -2424,68 +2384,68 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@swc/core-darwin-arm64@1.7.26': - resolution: {integrity: sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==} + '@swc/core-darwin-arm64@1.7.28': + resolution: {integrity: sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.26': - resolution: {integrity: sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==} + '@swc/core-darwin-x64@1.7.28': + resolution: {integrity: sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.26': - resolution: {integrity: sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==} + '@swc/core-linux-arm-gnueabihf@1.7.28': + resolution: {integrity: sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.26': - resolution: {integrity: sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==} + '@swc/core-linux-arm64-gnu@1.7.28': + resolution: {integrity: sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.26': - resolution: {integrity: sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==} + '@swc/core-linux-arm64-musl@1.7.28': + resolution: {integrity: sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.26': - resolution: {integrity: sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==} + '@swc/core-linux-x64-gnu@1.7.28': + resolution: {integrity: sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.26': - resolution: {integrity: sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==} + '@swc/core-linux-x64-musl@1.7.28': + resolution: {integrity: sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.26': - resolution: {integrity: sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==} + '@swc/core-win32-arm64-msvc@1.7.28': + resolution: {integrity: sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.26': - resolution: {integrity: sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==} + '@swc/core-win32-ia32-msvc@1.7.28': + resolution: {integrity: sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.26': - resolution: {integrity: sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==} + '@swc/core-win32-x64-msvc@1.7.28': + resolution: {integrity: sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.26': - resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==} + '@swc/core@1.7.28': + resolution: {integrity: sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -2770,8 +2730,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.8': - resolution: {integrity: sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==} + '@types/react@18.3.9': + resolution: {integrity: sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -6617,8 +6577,8 @@ packages: - which - write-file-atomic - nx@19.8.0: - resolution: {integrity: sha512-zD1ZvkfxECrd9QnvUyAUVLESmjl0bpIhB1gLcYN2BqsCkB1vkngbxIvXDorI98keOVEfHzeuwNSkufQNls1hug==} + nx@19.8.1: + resolution: {integrity: sha512-7yyfPh28VymTxmxpoY/9eeJ+iFy/aM7FOyxzB6gMOi4vE6g4pfgvpYAUViZqRFeKSqJpdpLep9+/kQvWZchRlQ==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -6718,9 +6678,6 @@ packages: oxc-parser@0.29.0: resolution: {integrity: sha512-egoHzaoNPRI4dIJsp70nVA4jGIOGku0Q77DhXiTwqbS/CVgIqYzzOfYfJUwQEZWvSET3ipZHJymTthmI2qs+8A==} - oxc-transform@0.30.0: - resolution: {integrity: sha512-WWAwbAHoqzkz1+qKi7oZthd1c9fZiUvaQJofZ8Art3/9BGzZ5jtDcPZTphBij4GLwOA32UI44ZUfLuYTxMYY/A==} - oxc-transform@0.30.1: resolution: {integrity: sha512-6HKMW0n2aDHJkGs49zbxDoyiVqRxHCVjPHQ6ZvMZa3EZ3S4Tv0HzlI1azrsvaFm/l/kHtqOqlikxf0iJ35UR6g==} @@ -7035,8 +6992,8 @@ packages: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} - pkg-pr-new@0.0.25: - resolution: {integrity: sha512-3BspB84BvGOpb5s0Bs49XQCyJ3pLmyFyAqqduWuhoj9h5YdaVOf4FuThBEOb81tjsqK0RitFbBm1fSp2qUnuBg==} + pkg-pr-new@0.0.27: + resolution: {integrity: sha512-DFfztRUIvmY6YK5zFAdFipaoUEAp8pSj/363Bid2Bbwyy0zZYj+B7piSQ6KOX8F+GleYbAmM6IJOZG5VuLrTvQ==} hasBin: true pkg-types@1.1.3: @@ -9845,43 +9802,43 @@ snapshots: '@npmcli/name-from-folder@2.0.0': {} - '@nrwl/tao@19.8.0(@swc/core@1.7.26(@swc/helpers@0.5.13))': + '@nrwl/tao@19.8.1(@swc/core@1.7.28(@swc/helpers@0.5.13))': dependencies: - nx: 19.8.0(@swc/core@1.7.26(@swc/helpers@0.5.13)) + nx: 19.8.1(@swc/core@1.7.28(@swc/helpers@0.5.13)) tslib: 2.6.2 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug - '@nx/nx-darwin-arm64@19.8.0': + '@nx/nx-darwin-arm64@19.8.1': optional: true - '@nx/nx-darwin-x64@19.8.0': + '@nx/nx-darwin-x64@19.8.1': optional: true - '@nx/nx-freebsd-x64@19.8.0': + '@nx/nx-freebsd-x64@19.8.1': optional: true - '@nx/nx-linux-arm-gnueabihf@19.8.0': + '@nx/nx-linux-arm-gnueabihf@19.8.1': optional: true - '@nx/nx-linux-arm64-gnu@19.8.0': + '@nx/nx-linux-arm64-gnu@19.8.1': optional: true - '@nx/nx-linux-arm64-musl@19.8.0': + '@nx/nx-linux-arm64-musl@19.8.1': optional: true - '@nx/nx-linux-x64-gnu@19.8.0': + '@nx/nx-linux-x64-gnu@19.8.1': optional: true - '@nx/nx-linux-x64-musl@19.8.0': + '@nx/nx-linux-x64-musl@19.8.1': optional: true - '@nx/nx-win32-arm64-msvc@19.8.0': + '@nx/nx-win32-arm64-msvc@19.8.1': optional: true - '@nx/nx-win32-x64-msvc@19.8.0': + '@nx/nx-win32-x64-msvc@19.8.1': optional: true '@octokit/action@6.1.0': @@ -10032,51 +9989,27 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.29.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.30.0': - optional: true - '@oxc-transform/binding-darwin-arm64@0.30.1': optional: true - '@oxc-transform/binding-darwin-x64@0.30.0': - optional: true - '@oxc-transform/binding-darwin-x64@0.30.1': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.30.0': - optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.30.1': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.30.0': - optional: true - '@oxc-transform/binding-linux-arm64-musl@0.30.1': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.30.0': - optional: true - '@oxc-transform/binding-linux-x64-gnu@0.30.1': optional: true - '@oxc-transform/binding-linux-x64-musl@0.30.0': - optional: true - '@oxc-transform/binding-linux-x64-musl@0.30.1': optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.30.0': - optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.30.1': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.30.0': - optional: true - '@oxc-transform/binding-win32-x64-msvc@0.30.1': optional: true @@ -10143,7 +10076,7 @@ snapshots: optionalDependencies: rollup: 4.22.4 - '@rollup/plugin-node-resolve@15.2.4(rollup@4.22.4)': + '@rollup/plugin-node-resolve@15.3.0(rollup@4.22.4)': dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.22.4) '@types/resolve': 1.20.2 @@ -10463,51 +10396,51 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@swc/core-darwin-arm64@1.7.26': + '@swc/core-darwin-arm64@1.7.28': optional: true - '@swc/core-darwin-x64@1.7.26': + '@swc/core-darwin-x64@1.7.28': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.26': + '@swc/core-linux-arm-gnueabihf@1.7.28': optional: true - '@swc/core-linux-arm64-gnu@1.7.26': + '@swc/core-linux-arm64-gnu@1.7.28': optional: true - '@swc/core-linux-arm64-musl@1.7.26': + '@swc/core-linux-arm64-musl@1.7.28': optional: true - '@swc/core-linux-x64-gnu@1.7.26': + '@swc/core-linux-x64-gnu@1.7.28': optional: true - '@swc/core-linux-x64-musl@1.7.26': + '@swc/core-linux-x64-musl@1.7.28': optional: true - '@swc/core-win32-arm64-msvc@1.7.26': + '@swc/core-win32-arm64-msvc@1.7.28': optional: true - '@swc/core-win32-ia32-msvc@1.7.26': + '@swc/core-win32-ia32-msvc@1.7.28': optional: true - '@swc/core-win32-x64-msvc@1.7.26': + '@swc/core-win32-x64-msvc@1.7.28': optional: true - '@swc/core@1.7.26(@swc/helpers@0.5.13)': + '@swc/core@1.7.28(@swc/helpers@0.5.13)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.26 - '@swc/core-darwin-x64': 1.7.26 - '@swc/core-linux-arm-gnueabihf': 1.7.26 - '@swc/core-linux-arm64-gnu': 1.7.26 - '@swc/core-linux-arm64-musl': 1.7.26 - '@swc/core-linux-x64-gnu': 1.7.26 - '@swc/core-linux-x64-musl': 1.7.26 - '@swc/core-win32-arm64-msvc': 1.7.26 - '@swc/core-win32-ia32-msvc': 1.7.26 - '@swc/core-win32-x64-msvc': 1.7.26 + '@swc/core-darwin-arm64': 1.7.28 + '@swc/core-darwin-x64': 1.7.28 + '@swc/core-linux-arm-gnueabihf': 1.7.28 + '@swc/core-linux-arm64-gnu': 1.7.28 + '@swc/core-linux-arm64-musl': 1.7.28 + '@swc/core-linux-x64-gnu': 1.7.28 + '@swc/core-linux-x64-musl': 1.7.28 + '@swc/core-win32-arm64-msvc': 1.7.28 + '@swc/core-win32-ia32-msvc': 1.7.28 + '@swc/core-win32-x64-msvc': 1.7.28 '@swc/helpers': 0.5.13 '@swc/counter@0.1.3': {} @@ -10971,9 +10904,9 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.8 + '@types/react': 18.3.9 - '@types/react@18.3.8': + '@types/react@18.3.9': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -15684,10 +15617,10 @@ snapshots: npm@10.8.0: {} - nx@19.8.0(@swc/core@1.7.26(@swc/helpers@0.5.13)): + nx@19.8.1(@swc/core@1.7.28(@swc/helpers@0.5.13)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 - '@nrwl/tao': 19.8.0(@swc/core@1.7.26(@swc/helpers@0.5.13)) + '@nrwl/tao': 19.8.1(@swc/core@1.7.28(@swc/helpers@0.5.13)) '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 @@ -15722,17 +15655,17 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 19.8.0 - '@nx/nx-darwin-x64': 19.8.0 - '@nx/nx-freebsd-x64': 19.8.0 - '@nx/nx-linux-arm-gnueabihf': 19.8.0 - '@nx/nx-linux-arm64-gnu': 19.8.0 - '@nx/nx-linux-arm64-musl': 19.8.0 - '@nx/nx-linux-x64-gnu': 19.8.0 - '@nx/nx-linux-x64-musl': 19.8.0 - '@nx/nx-win32-arm64-msvc': 19.8.0 - '@nx/nx-win32-x64-msvc': 19.8.0 - '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@nx/nx-darwin-arm64': 19.8.1 + '@nx/nx-darwin-x64': 19.8.1 + '@nx/nx-freebsd-x64': 19.8.1 + '@nx/nx-linux-arm-gnueabihf': 19.8.1 + '@nx/nx-linux-arm64-gnu': 19.8.1 + '@nx/nx-linux-arm64-musl': 19.8.1 + '@nx/nx-linux-x64-gnu': 19.8.1 + '@nx/nx-linux-x64-musl': 19.8.1 + '@nx/nx-win32-arm64-msvc': 19.8.1 + '@nx/nx-win32-x64-msvc': 19.8.1 + '@swc/core': 1.7.28(@swc/helpers@0.5.13) transitivePeerDependencies: - debug @@ -15865,17 +15798,6 @@ snapshots: '@oxc-parser/binding-win32-arm64-msvc': 0.29.0 '@oxc-parser/binding-win32-x64-msvc': 0.29.0 - oxc-transform@0.30.0: - optionalDependencies: - '@oxc-transform/binding-darwin-arm64': 0.30.0 - '@oxc-transform/binding-darwin-x64': 0.30.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.30.0 - '@oxc-transform/binding-linux-arm64-musl': 0.30.0 - '@oxc-transform/binding-linux-x64-gnu': 0.30.0 - '@oxc-transform/binding-linux-x64-musl': 0.30.0 - '@oxc-transform/binding-win32-arm64-msvc': 0.30.0 - '@oxc-transform/binding-win32-x64-msvc': 0.30.0 - oxc-transform@0.30.1: optionalDependencies: '@oxc-transform/binding-darwin-arm64': 0.30.1 @@ -16185,7 +16107,7 @@ snapshots: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-pr-new@0.0.25: + pkg-pr-new@0.0.27: dependencies: '@jsdevtools/ez-spawn': 3.0.4 '@octokit/action': 6.1.0