diff --git a/.gitignore b/.gitignore index ed9f9e57949..f03ab8513e1 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,8 @@ build/ tmp/ lib/ lib-esm/ +libx/ +libx-esm/ storybook-static/ dist/ eslint-report.json diff --git a/docs/plan-tsup-migration.md b/docs/plan-tsup-migration.md new file mode 100644 index 00000000000..a03f4b82a98 --- /dev/null +++ b/docs/plan-tsup-migration.md @@ -0,0 +1,182 @@ +# Migration Plan: Replace `talend-scripts build` with `tsup` (ESM-only) + +## Overview + +Migrate all library packages from the current `talend-scripts build` pipeline +(Babel + tsc) to **tsup** while simultaneously dropping CommonJS support. +Output will be ESM-only. + +A parallel `build:libx` script outputting to `libx/` allows side-by-side comparison +with the current `lib-esm/` before cutting over. + +## Key Decisions + +| Decision | Choice | +| ---------------------------------------------------------- | ------------------------------------------------------------- | +| Module format | **ESM-only** — no more `lib/` (CJS) | +| Build tool | **tsup** (esbuild-based, ~10× faster than Babel) | +| TypeScript declarations | **tsup `dts: true`** (Phase 3, after comparison) | +| CSS/SCSS/JSON assets | **Copied as-is** via `onSuccess` — not bundled | +| Babel custom plugins (`import-from-index`, `assets-api`) | **Dropped** — no longer needed | +| Fork packages (`react-bootstrap`, `json-schema-form-core`) | **Out of scope** — stay on talend-scripts | +| `icons` (Vite), `theme` (Webpack) | **Out of scope** — already use other tools | +| Comparison directory | `libx/` (tsup Phase 1 output) vs `lib-esm/` (current) | +| Shared config package | `@talend/scripts-config-tsup` in `tools/scripts-config-tsup/` | + +--- + +## Phases + +### Phase 0 — Setup ✅ DONE + +- [x] Add `tsup` as `devDependency` to each consumer package (not the root — pnpm-compatible explicit deps) +- [x] Create `tools/scripts-config-tsup/` workspace package + - [x] Exports `baseConfig()` helper — common tsup options + - [x] Exports `copyAssets()` helper — replaces `cpx2` copy step + - [x] Exports `SOURCE_PATTERNS` and `EXCLUDE_PATTERNS` glob arrays + +### Phase 1 — Add `build:libx` per package (in progress) + +For each package: created `tsup.config.ts` + added `"build:libx": "tsup"` script. + +Run `yarn workspace run build:libx` to produce `libx/` output for comparison. + +#### Batch 1 — Pure TS, no assets + +| Package | tsup.config.ts | build:libx script | Compare | Validate | +| --------------------- | :------------: | :---------------: | :-----: | :------: | +| `packages/a11y` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/assets-api` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/http` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/utils` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/cmf-cqrs` | ✅ | ✅ | ⬜ | ⬜ | + +#### Batch 2 — JS/JSX, no assets + +| Package | tsup.config.ts | build:libx script | Compare | Validate | +| -------------------------------------- | :------------: | :---------------: | :-----: | :------: | +| `packages/cmf` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/cmf-router` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/sagas` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/router-bridge` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/storybook-cmf` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/faceted-search-query-client` | ✅ | ✅ | ⬜ | ⬜ | + +#### Batch 3 — TS + CSS assets + +| Package | tsup.config.ts | build:libx script | Compare | Validate | +| ------------------------ | :------------: | :---------------: | :-----: | :------: | +| `packages/stepper` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/forms` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/dataviz` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/containers` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/flow-designer` | ✅ | ✅ | ⬜ | ⬜ | + +#### Batch 4 — CSS/SCSS assets + +| Package | tsup.config.ts | build:libx script | Compare | Validate | +| ------------------------- | :------------: | :---------------: | :-----: | :------: | +| `packages/components` | ✅ | ✅ | ⬜ | ⬜ | +| `packages/faceted-search` | ✅ | ✅ | ⬜ | ⬜ | + +#### Batch 5 — Special cases + +| Package | tsup.config.ts | build:libx script | Compare | Validate | Notes | +| ------------------------- | :------------: | :---------------: | :-----: | :------: | ---------------------------------------------- | +| `packages/design-system` | ✅ | ✅ | ⬜ | ⬜ | Also copies SVG images from `src/images/` | +| `packages/design-tokens` | ✅ | ✅ | ⬜ | ⬜ | `build:css` (SCSS→CSS) remains a separate step | +| `packages/storybook-docs` | ✅ | ✅ | ⬜ | ⬜ | `build:styles` remains a separate step | + +--- + +### Phase 2 — Validate & fix (TODO) + +For each package above, check `✅` when done: + +- [ ] Run `yarn workspace run build:libx` — build succeeds +- [ ] `diff -rq lib-esm/ libx/` — compare current vs tsup output + - [ ] JS files use ESM syntax (`import`/`export`) + - [ ] `.css`, `.scss`, `.json` assets are present + - [ ] Source maps (`.js.map`) are present + - [ ] Package content is equivalent (no missing/extra files) +- [ ] Run `yarn workspace test` to confirm no regressions +- [ ] Confirm the two dropped Babel plugins have no runtime impact: + - `babel-plugin-import-from-index` — consumers import from package root + - `babel-plugin-assets-api` — CDN version injection no longer needed +- [ ] Compare bundle sizes (`lib-esm/` vs `libx/`) + +### Phase 3 — Cutover (TODO) + +For each package: + +- [ ] Enable `dts: true` in `tsup.config.ts` (TypeScript declarations via tsup) +- [ ] Verify `.d.ts` files are generated correctly in `libx/` +- [ ] Update `package.json`: + - Change `outDir` from `libx` to the final directory (`lib` after dropping CJS) + - Change `"build:lib"` script to `"tsup"` (or keep alias) + - Remove `"build:lib:esm"` script + - Update `"main"` → ESM output path + - Update `"types"` → new declaration file path + - Remove `"module"` (redundant once ESM is main) + - Update `"exports"` → single ESM entry: + ```json + "exports": { + ".": { + "import": "./lib/index.js", + "types": "./lib/index.d.ts" + } + } + ``` + - Add `"type": "module"` if needed +- [ ] Remove `@talend/scripts-config-babel` from `devDependencies` (if only used for build) +- [ ] Remove `@talend/scripts-core` from `devDependencies` (if only used for `build:lib`) + +After all packages are migrated: + +- [ ] Update root `package.json` `postinstall` — single `talend-yarn-workspace run build:lib` +- [ ] Remove `libx/` from `.gitignore` (or add it if not there already) +- [ ] Run full monorepo test suite: `yarn test` +- [ ] Verify Storybook builds (`yarn start-storybook`) +- [ ] Verify playground apps work +- [ ] Submit PR and add a changeset with `@changesets/cli` + +--- + +## How to Compare Outputs + +```bash +# Build current output (if lib-esm/ doesn't exist yet): +yarn workspace @talend/react-a11y run build:lib:esm + +# Build tsup output: +yarn workspace @talend/react-a11y run build:libx + +# Compare: +diff -rq packages/a11y/lib-esm/ packages/a11y/libx/ +``` + +--- + +## Relevant Files + +| File | Purpose | +| ----------------------------------------------- | --------------------------------------- | +| `tools/scripts-config-tsup/src/index.ts` | Shared `baseConfig()` + `copyAssets()` | +| `tools/scripts-core/src/scripts/build-lib.js` | Legacy build (reference) | +| `tools/scripts-config-babel/babel.config.js` | Legacy Babel config (reference) | +| `tools/scripts-config-typescript/tsconfig.json` | Base TS config used by packages | +| Root `package.json` | `postinstall` / workspace orchestration | + +--- + +## Notes + +- **`bundle: false`** (file-per-file transform) matches current Babel behavior and + preserves tree-shaking for consumers. With `bundle: true`, all entry points would + need to be explicitly listed. +- **Deep imports** (`exports["./lib/*"]`) continue to work with file-per-file output. + The `exports` map will need updating in Phase 3 to point to the new directory. +- **`design-tokens`** and **`storybook-docs`** have secondary build steps (`build:css`, + `build:styles`) that are independent from the JS compilation and should be kept. +- **`utils`** previously used `build:lib: "talend-scripts build --tsc"` (TypeScript-only, + no Babel). tsup/esbuild handles TypeScript natively — no special treatment needed. diff --git a/packages/a11y/package.json b/packages/a11y/package.json index d314eb6ffd6..94650352265 100644 --- a/packages/a11y/package.json +++ b/packages/a11y/package.json @@ -14,6 +14,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "test": "vitest run", "lint": "eslint -o eslint-report.json --format json .", @@ -37,6 +38,8 @@ "@talend/utils": "^3.7.1" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", "@talend/scripts-core": "^20.0.0", diff --git a/packages/a11y/tsup.config.ts b/packages/a11y/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/a11y/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/assets-api/package.json b/packages/assets-api/package.json index 06a5b755914..0f35b1b3887 100644 --- a/packages/assets-api/package.json +++ b/packages/assets-api/package.json @@ -13,6 +13,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "start": "echo nothing to start", "test": "vitest run", @@ -35,6 +36,8 @@ }, "dependencies": {}, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@talend/babel-plugin-import-from-index": "^1.13.1", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", diff --git a/packages/assets-api/tsup.config.ts b/packages/assets-api/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/assets-api/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/cmf-cqrs/package.json b/packages/cmf-cqrs/package.json index af60330ca68..4b06a4b7d25 100644 --- a/packages/cmf-cqrs/package.json +++ b/packages/cmf-cqrs/package.json @@ -16,6 +16,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "start": "echo nothing to start", "test": "vitest run", @@ -47,6 +48,8 @@ "redux-saga": "^1.4.2" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitest/coverage-v8": "^4.0.18", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", diff --git a/packages/cmf-cqrs/tsup.config.ts b/packages/cmf-cqrs/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/cmf-cqrs/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/cmf-router/package.json b/packages/cmf-router/package.json index 6d617880c01..b095df2c858 100644 --- a/packages/cmf-router/package.json +++ b/packages/cmf-router/package.json @@ -19,6 +19,7 @@ "scripts": { "build:lib:esm": "talend-scripts build --esm", "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "start": "echo nothing to start", "test": "vitest run", "test:watch": "vitest", @@ -43,6 +44,8 @@ "react-dom": "^18.3.1" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitest/coverage-v8": "^4.0.18", "@redux-saga/testing-utils": "^1.2.1", "@talend/eslint-config": "^14.1.2", diff --git a/packages/cmf-router/tsup.config.ts b/packages/cmf-router/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/cmf-router/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/cmf/package.json b/packages/cmf/package.json index 2e12bd6de07..558e4e208ff 100644 --- a/packages/cmf/package.json +++ b/packages/cmf/package.json @@ -19,6 +19,7 @@ }, "scripts": { "build:lib": "talend-scripts build && talend-scripts build --esm", + "build:libx": "tsup && tsup-postbuild", "start": "echo nothing to start", "test": "vitest run", "test:update": "vitest run --update", @@ -61,6 +62,8 @@ "redux-thunk": "^2.4.2" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@redux-saga/testing-utils": "^1.2.1", diff --git a/packages/cmf/tsup.config.ts b/packages/cmf/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/cmf/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/components/package.json b/packages/components/package.json index 5fdeb746307..663f956fc04 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -16,6 +16,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:tsc": "yarn run tsc", "build:lib:esm": "talend-scripts build --esm", "watch": "talend-scripts build --watch", @@ -80,6 +81,8 @@ "warning": "^3.0.0" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@storybook/addon-a11y": "^10.2.1", "@storybook/addon-links": "^10.2.1", "@storybook/react": "^10.2.1", diff --git a/packages/components/tsup.config.ts b/packages/components/tsup.config.ts new file mode 100644 index 00000000000..8b745c094f0 --- /dev/null +++ b/packages/components/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/containers/package.json b/packages/containers/package.json index 8b0f12847aa..b2553bb5380 100644 --- a/packages/containers/package.json +++ b/packages/containers/package.json @@ -17,6 +17,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "start": "storybook dev -p 6007", "test": "vitest run", @@ -60,6 +61,8 @@ "reselect": "^2.5.4" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@talend/icons": "^8.0.0", diff --git a/packages/containers/tsup.config.ts b/packages/containers/tsup.config.ts new file mode 100644 index 00000000000..8b745c094f0 --- /dev/null +++ b/packages/containers/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/dataviz/package.json b/packages/dataviz/package.json index 730583a2e0e..4caeafd374f 100644 --- a/packages/dataviz/package.json +++ b/packages/dataviz/package.json @@ -14,6 +14,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "build-storybook": "storybook build", "extract-i18n": "i18next-scanner --config i18next-scanner.config.js", @@ -53,6 +54,8 @@ "topojson-client": "^3.1.0" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@storybook/addon-a11y": "^10.2.1", "@storybook/react": "^10.2.1", "@storybook/react-vite": "^10.2.1", diff --git a/packages/dataviz/tsup.config.ts b/packages/dataviz/tsup.config.ts new file mode 100644 index 00000000000..8b745c094f0 --- /dev/null +++ b/packages/dataviz/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 94cf594e9f5..3b518d3aed7 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -17,6 +17,7 @@ }, "scripts": { "build:lib": "talend-scripts build && talend-scripts build --esm", + "build:libx": "tsup && tsup-postbuild", "watch": "talend-scripts build --watch", "watch:esm": "talend-scripts build --watch --esm", "test": "vitest run", @@ -57,6 +58,8 @@ "typeface-source-sans-pro": "^1.1.13" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@storybook/addon-a11y": "^10.2.1", "@storybook/addon-links": "^10.2.1", "@storybook/react": "^10.2.1", diff --git a/packages/design-system/tsup.config.ts b/packages/design-system/tsup.config.ts new file mode 100644 index 00000000000..d0c1500f7f8 --- /dev/null +++ b/packages/design-system/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +// design-system ships CSS modules AND SVG logo images from src/images/ +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + extraAssetExtensions: ['.svg', '.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico'], + }), +); diff --git a/packages/design-tokens/package.json b/packages/design-tokens/package.json index e6298d8442a..c2196c5c435 100644 --- a/packages/design-tokens/package.json +++ b/packages/design-tokens/package.json @@ -29,6 +29,7 @@ }, "scripts": { "build:lib": "talend-scripts build && npm run build:css", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "build:css": "sass src/index.scss dist/TalendDesignTokens.css --no-source-map --style=compressed", "lint": "eslint -o eslint-report.json --format json ." @@ -52,6 +53,8 @@ "access": "public" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "sass": "^1.97.3", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", diff --git a/packages/design-tokens/tsup.config.ts b/packages/design-tokens/tsup.config.ts new file mode 100644 index 00000000000..44954f366cf --- /dev/null +++ b/packages/design-tokens/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +// design-tokens ships SCSS token files alongside the JS output. +// The separate `build:css` script for compiled CSS output is not part of this tsup build. +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/faceted-search-query-client/package.json b/packages/faceted-search-query-client/package.json index d8abdf0dae6..87c73491349 100644 --- a/packages/faceted-search-query-client/package.json +++ b/packages/faceted-search-query-client/package.json @@ -17,6 +17,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "test": "vitest run", "test:watch": "vitest --watch", @@ -46,6 +47,8 @@ "lodash": "^4.17.23" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", "@talend/react-faceted-search": "22.1.1", diff --git a/packages/faceted-search-query-client/tsup.config.ts b/packages/faceted-search-query-client/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/faceted-search-query-client/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/faceted-search/package.json b/packages/faceted-search/package.json index 0ba4980322a..d035764ca7b 100644 --- a/packages/faceted-search/package.json +++ b/packages/faceted-search/package.json @@ -17,6 +17,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "test": "vitest run", "test:watch": "vitest --watch", @@ -53,6 +54,8 @@ "lodash": "^4.17.23" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@storybook/react": "^10.2.1", diff --git a/packages/faceted-search/tsup.config.ts b/packages/faceted-search/tsup.config.ts new file mode 100644 index 00000000000..8b745c094f0 --- /dev/null +++ b/packages/faceted-search/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/flow-designer/package.json b/packages/flow-designer/package.json index 9ed798a3c10..d740e8853fc 100644 --- a/packages/flow-designer/package.json +++ b/packages/flow-designer/package.json @@ -17,6 +17,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "lint": "eslint -o eslint-report.json --format json .", "test": "vitest run", @@ -30,6 +31,8 @@ "author": "Talend ", "license": "Apache-2.0", "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@talend/babel-plugin-import-from-index": "^1.13.1", diff --git a/packages/flow-designer/tsup.config.ts b/packages/flow-designer/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/flow-designer/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/forms/package.json b/packages/forms/package.json index f2b656e4147..9e048354eaf 100644 --- a/packages/forms/package.json +++ b/packages/forms/package.json @@ -19,6 +19,7 @@ "build:lib:esm": "talend-scripts build --esm", "build-storybook": "storybook build", "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "test": "cross-env TZ=UTC vitest run", "test:watch": "cross-env TZ=UTC vitest", "test:cov": "cross-env TZ=UTC vitest run --coverage", @@ -66,6 +67,8 @@ "tv4": "^1.3.0" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.0", "@vitest/coverage-v8": "^4.0.18", "@talend/locales-tui-forms": "^15.2.0", diff --git a/packages/forms/tsup.config.ts b/packages/forms/tsup.config.ts new file mode 100644 index 00000000000..8b745c094f0 --- /dev/null +++ b/packages/forms/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/http/package.json b/packages/http/package.json index 2035a38c09b..63bb35c112f 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -29,6 +29,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "start": "echo nothing to start", "test": "vitest run", @@ -37,6 +38,8 @@ "test:cov": "vitest run --coverage" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitest/coverage-v8": "^4.0.18", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", diff --git a/packages/http/tsup.config.ts b/packages/http/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/http/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/router-bridge/package.json b/packages/router-bridge/package.json index 070c7f9437f..736780d1982 100644 --- a/packages/router-bridge/package.json +++ b/packages/router-bridge/package.json @@ -15,6 +15,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "build": "talend-scripts build", "lint": "eslint -o eslint-report.json --format json .", @@ -30,6 +31,8 @@ "license": "Apache-2.0", "homepage": "https://github.com/ui/tree/master/packages/router-bridge#readme", "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", "@talend/scripts-core": "^20.0.0", diff --git a/packages/router-bridge/tsup.config.ts b/packages/router-bridge/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/router-bridge/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/sagas/package.json b/packages/sagas/package.json index 3de91f425c5..c6af8615f25 100644 --- a/packages/sagas/package.json +++ b/packages/sagas/package.json @@ -17,6 +17,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "test": "vitest run", "test:watch": "vitest", @@ -50,6 +51,8 @@ "react-dom": "^18.3.1" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", "@talend/scripts-core": "^20.0.0", diff --git a/packages/sagas/tsup.config.ts b/packages/sagas/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/sagas/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/stepper/package.json b/packages/stepper/package.json index 842ad47716f..49a67253946 100644 --- a/packages/stepper/package.json +++ b/packages/stepper/package.json @@ -17,6 +17,7 @@ }, "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "extract-i18n": "i18next-scanner --config i18next-scanner.config.js", "test": "vitest run", @@ -52,6 +53,8 @@ "lodash": "^4.17.23" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@talend/icons": "^8.0.0", diff --git a/packages/stepper/tsup.config.ts b/packages/stepper/tsup.config.ts new file mode 100644 index 00000000000..8b745c094f0 --- /dev/null +++ b/packages/stepper/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/storybook-cmf/package.json b/packages/storybook-cmf/package.json index 12f897a8b53..51a995ecbbc 100644 --- a/packages/storybook-cmf/package.json +++ b/packages/storybook-cmf/package.json @@ -18,6 +18,7 @@ ], "scripts": { "build:lib": "talend-scripts build", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "test": "vitest run", "lint": "eslint -o eslint-report.json --format json .", @@ -34,6 +35,8 @@ } }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@talend/eslint-config": "^14.1.2", diff --git a/packages/storybook-cmf/tsup.config.ts b/packages/storybook-cmf/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/storybook-cmf/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/packages/storybook-docs/package.json b/packages/storybook-docs/package.json index bf2e668585d..fdaeb6932bf 100644 --- a/packages/storybook-docs/package.json +++ b/packages/storybook-docs/package.json @@ -8,6 +8,7 @@ "scripts": { "build:styles": "webpack --config webpack.custom.js --mode=production", "build:lib": "talend-scripts build && npm run build:styles", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "start": "npm run storybook", "lint:js": "eslint -o eslint-report.json --format json .", @@ -40,6 +41,8 @@ "react": "^18.3.1" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@figma/rest-api-spec": "^0.36.0", "@storybook/addon-a11y": "^10.2.1", "@storybook/react-vite": "^10.2.1", diff --git a/packages/storybook-docs/tsup.config.ts b/packages/storybook-docs/tsup.config.ts new file mode 100644 index 00000000000..3e9883b8150 --- /dev/null +++ b/packages/storybook-docs/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +// storybook-docs ships CSS module files alongside the JS output. +// The separate `build:styles` script is not part of this tsup build. +export default defineConfig( + baseConfig({ + outDir: 'libx', + copyStaticAssets: true, + }), +); diff --git a/packages/utils/package.json b/packages/utils/package.json index 9c26d1f764f..5b4368b95ca 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -23,6 +23,7 @@ "license": "Apache-2.0", "scripts": { "build:lib": "talend-scripts build --tsc", + "build:libx": "tsup && tsup-postbuild", "build:lib:esm": "talend-scripts build --esm", "lint": "eslint -o eslint-report.json --format json .", "test": "vitest run", @@ -33,6 +34,8 @@ "test:update": "vitest run --update" }, "devDependencies": { + "@talend/scripts-config-tsup": "^1.0.0", + "tsup": "^8.3.0", "@talend/eslint-config": "^14.1.2", "@talend/eslint-plugin": "^1.8.1", "@talend/scripts-core": "^20.0.0", diff --git a/packages/utils/tsup.config.ts b/packages/utils/tsup.config.ts new file mode 100644 index 00000000000..d6f898b7f35 --- /dev/null +++ b/packages/utils/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; +import { baseConfig } from '@talend/scripts-config-tsup'; + +export default defineConfig( + baseConfig({ + outDir: 'libx', + }), +); diff --git a/tools/scripts-config-tsup/package.json b/tools/scripts-config-tsup/package.json new file mode 100644 index 00000000000..a1bfec221c3 --- /dev/null +++ b/tools/scripts-config-tsup/package.json @@ -0,0 +1,20 @@ +{ + "name": "@talend/scripts-config-tsup", + "version": "1.0.0", + "description": "Shared tsup configuration for Talend library packages", + "license": "Apache-2.0", + "type": "module", + "main": "./src/index.ts", + "exports": { + ".": "./src/index.ts" + }, + "bin": { + "tsup-postbuild": "./bin/postbuild.js" + }, + "publishConfig": { + "access": "public" + }, + "peerDependencies": { + "tsup": ">=8.0.0" + } +} diff --git a/tools/scripts-config-tsup/src/index.ts b/tools/scripts-config-tsup/src/index.ts new file mode 100644 index 00000000000..285d0ca76c3 --- /dev/null +++ b/tools/scripts-config-tsup/src/index.ts @@ -0,0 +1,137 @@ +import { copyFileSync, existsSync, mkdirSync, readdirSync, renameSync } from 'fs'; +import { dirname, extname, join, relative } from 'path'; +import type { Options } from 'tsup'; + +export const SOURCE_PATTERNS = ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.js', 'src/**/*.jsx']; + +export const EXCLUDE_PATTERNS = [ + '!src/**/*.test.ts', + '!src/**/*.test.tsx', + '!src/**/*.test.js', + '!src/**/*.test.jsx', + '!src/**/*.spec.ts', + '!src/**/*.spec.tsx', + '!src/**/*.spec.js', + '!src/**/*.spec.jsx', + '!src/**/*.stories.ts', + '!src/**/*.stories.tsx', + '!src/**/*.stories.js', + '!src/**/*.stories.jsx', + '!src/**/__mocks__/**', + '!src/**/__tests__/**', +]; + +const DEFAULT_COPY_EXTENSIONS = ['.css', '.scss', '.json']; + +function walkFiles(dir: string): string[] { + if (!existsSync(dir)) return []; + const results: string[] = []; + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const fullPath = join(dir, entry.name); + if (entry.isDirectory()) { + results.push(...walkFiles(fullPath)); + } else { + results.push(fullPath); + } + } + return results; +} + +/** + * Copy static assets (CSS, SCSS, JSON, and any extra extensions) from srcDir to outDir, + * preserving the directory structure. Mirrors the cpx2 copy step in the legacy build. + */ +export function copyAssets(srcDir: string, outDir: string, extraExtensions: string[] = []): void { + const extensions = new Set([...DEFAULT_COPY_EXTENSIONS, ...extraExtensions]); + for (const srcPath of walkFiles(srcDir)) { + if (!extensions.has(extname(srcPath))) continue; + const destPath = join(outDir, relative(srcDir, srcPath)); + mkdirSync(dirname(destPath), { recursive: true }); + copyFileSync(srcPath, destPath); + } +} + +/** + * Rename .d.mts → .d.ts (and .d.mts.map → .d.ts.map) in the output directory. + * + * tsup v8 generates .d.mts for ESM format regardless of the outExtension setting, + * but we use .js (not .mjs) to match the legacy lib-esm/ output. Renaming keeps + * declaration files consistent with the JS output extension. + */ +export function renameDtsFiles(outDir: string): void { + for (const file of walkFiles(outDir)) { + if (file.endsWith('.d.mts')) { + renameSync(file, file.replace(/\.d\.mts$/, '.d.ts')); + } else if (file.endsWith('.d.mts.map')) { + renameSync(file, file.replace(/\.d\.mts\.map$/, '.d.ts.map')); + } + } +} + +export interface BaseConfigOptions { + /** Output directory. Defaults to 'libx' for the parallel comparison build. */ + outDir?: string; + /** + * Copy CSS/SCSS/JSON assets from src/ to outDir after build. + * Mirrors the cpx2 copy step in the legacy talend-scripts build. + */ + copyStaticAssets?: boolean; + /** + * Extra file extensions to copy alongside the defaults (.css, .scss, .json). + * Useful for design-system which ships SVG/image assets. + */ + extraAssetExtensions?: string[]; + /** Any other tsup options to merge/override. */ + [key: string]: unknown; +} + +/** + * Returns a tsup Options object with sensible defaults for Talend library packages. + * - ESM-only output (no CommonJS) + * - File-per-file transform mode (bundle: false), matching the legacy Babel pipeline + * - Source maps enabled + * - .d.ts declaration generation (tsup dts, then normalized from .d.mts → .d.ts) + * - Optional static asset copying (CSS/SCSS/JSON/images) + * + * @example + * // Simple TS package: + * export default defineConfig(baseConfig({ outDir: 'libx' })); + * + * // Package with CSS modules: + * export default defineConfig(baseConfig({ outDir: 'libx', copyStaticAssets: true })); + * + * // design-system (CSS + SVG images): + * export default defineConfig(baseConfig({ + * outDir: 'libx', + * copyStaticAssets: true, + * extraAssetExtensions: ['.svg', '.png'], + * })); + */ +export function baseConfig({ + outDir = 'libx', + copyStaticAssets = false, + extraAssetExtensions = [], + ...rest +}: BaseConfigOptions = {}): Options { + return { + entry: [...SOURCE_PATTERNS, ...EXCLUDE_PATTERNS], + format: ['esm'], + target: 'es2020', + sourcemap: true, + dts: true, + bundle: false, + clean: true, + outDir, + // Force .js extension (not .mjs) to match the existing lib-esm/ output and + // consumer package.json exports entries which reference .js files. + outExtension: () => ({ js: '.js' }), + async onSuccess() { + // tsup v8 generates .d.mts for ESM — normalize to .d.ts to match legacy output. + renameDtsFiles(outDir); + if (copyStaticAssets) { + copyAssets('src', outDir, extraAssetExtensions); + } + }, + ...(rest as Partial), + }; +} diff --git a/yarn.lock b/yarn.lock index d21bc218e0c..91532fbe91d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2393,7 +2393,7 @@ glob "^13.0.1" react-docgen-typescript "^2.2.2" -"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== @@ -3558,6 +3558,15 @@ raf "^3.4.1" regenerator-runtime "^0.13.11" +"@talend/scripts-config-stylelint@^4.5.0": + version "4.5.1" + resolved "https://npm.pkg.github.com/download/@talend/scripts-config-stylelint/4.5.1/df7b6c06a47504b0c65fcac0508b7efd8357b70f#df7b6c06a47504b0c65fcac0508b7efd8357b70f" + integrity sha512-irjusFPw/LRsyUg6NPqiwykpxrX1fHRZ43Yrjb6SUjcPrVuPRqOMvDzEuRqwXEGlmpNbFIstxdg761zGnvo0WQ== + dependencies: + stylelint "^15.11.0" + stylelint-config-sass-guidelines "^10.0.0" + stylelint-config-standard "^34.0.0" + "@talend/scripts-core@^18.0.0": version "18.0.0" resolved "https://npm.pkg.github.com/download/@talend/scripts-core/18.0.0/1272cbee7eca7082519b4bbbb4b3c64e023f9ea1#1272cbee7eca7082519b4bbbb4b3c64e023f9ea1" @@ -5709,6 +5718,13 @@ bundle-require@^4.0.1: dependencies: load-tsconfig "^0.2.3" +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" + bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -5719,6 +5735,11 @@ bytestreamjs@^2.0.1: resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== +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== + cacache@^19.0.1: version "19.0.1" resolved "https://registry.yarnpkg.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd" @@ -5945,7 +5966,7 @@ chokidar@^3.5.3, chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" -chokidar@^4.0.0, chokidar@^4.0.1: +chokidar@^4.0.0, chokidar@^4.0.1, chokidar@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== @@ -6179,6 +6200,11 @@ commander@^13.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== +commander@^4.0.0, commander@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^6.2.0, commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -6194,11 +6220,6 @@ commander@^9.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -commander@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -6259,6 +6280,11 @@ concurrently@^8.2.2: tree-kill "^1.2.2" yargs "^17.7.2" +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" @@ -6285,6 +6311,11 @@ connected-react-router@^6.9.3: immutable "^3.8.1 || ^4.0.0" seamless-immutable "^7.1.3" +consola@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -8531,6 +8562,15 @@ find-up@^6.3.0: locate-path "^7.1.0" path-exists "^5.0.0" +fix-dts-default-cjs-exports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz#955cb6b3d519691c57828b078adadf2cb92e9549" + integrity sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg== + dependencies: + magic-string "^0.30.17" + mlly "^1.7.4" + rollup "^4.34.8" + flat-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -10631,6 +10671,11 @@ jiti@^2.5.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== +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-cookie@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -10925,7 +10970,7 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^3.1.3: +lilconfig@^3.1.1, lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== @@ -11159,7 +11204,7 @@ lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -magic-string@^0.30.0, magic-string@^0.30.21: +magic-string@^0.30.0, magic-string@^0.30.17, magic-string@^0.30.21: version "0.30.21" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== @@ -11932,6 +11977,16 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.7.4: + version "1.8.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.1.tgz#2ed89f4fbbbde26db9fcc86df5bfa3153cfacea1" + integrity sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ== + dependencies: + acorn "^8.16.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.3" + mock-socket@^9.3.1: version "9.3.1" resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" @@ -12716,7 +12771,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^2.0.3: +pathe@^2.0.1, pathe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== @@ -12783,7 +12838,7 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.4: +pirates@^4.0.1, pirates@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== @@ -12802,6 +12857,15 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" +pkg-types@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + pkijs@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.3.3.tgz#b3f04d7b2eaacb05c81675f882be374e591626ec" @@ -12989,6 +13053,13 @@ postcss-lab-function@^4.2.1: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.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" + postcss-loader@^8.2.0: version "8.2.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.1.tgz#c3d9b35498af906fe6c25eb62583c06f619f92fc" @@ -13008,6 +13079,11 @@ postcss-media-minmax@^5.0.0: resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + postcss-merge-longhand@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" @@ -13286,6 +13362,11 @@ postcss-safe-parser@^7.0.1: resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz#36e4f7e608111a0ca940fd9712ce034718c40ec0" integrity sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A== +postcss-scss@^4.0.6: + version "4.0.9" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685" + integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== + postcss-selector-not@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" @@ -13293,7 +13374,7 @@ postcss-selector-not@^6.0.1: dependencies: postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== @@ -14454,7 +14535,7 @@ robust-predicates@^3.0.2: resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== -rollup@^4.43.0: +rollup@^4.34.8, rollup@^4.43.0: version "4.59.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.59.0.tgz#cf74edac17c1486f562d728a4d923a694abdf06f" integrity sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg== @@ -15037,6 +15118,11 @@ source-map@^0.5.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + spawn-command@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" @@ -15462,11 +15548,31 @@ stylehacks@^7.0.5: browserslist "^4.28.1" postcss-selector-parser "^7.1.1" +stylelint-config-recommended@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz#c48a358cc46b629ea01f22db60b351f703e00597" + integrity sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ== + stylelint-config-recommended@^18.0.0: version "18.0.0" resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz#1d86be73565c3cd5e6babb8abcc932012a86bd76" integrity sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg== +stylelint-config-sass-guidelines@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-10.0.0.tgz#ace99689eb6769534c9b40d62e2a8562b1ddc9f2" + integrity sha512-+Rr2Dd4b72CWA4qoj1Kk+y449nP/WJsrD0nzQAWkmPPIuyVcy2GMIcfNr0Z8JJOLjRvtlkKxa49FCNXMePBikQ== + dependencies: + postcss-scss "^4.0.6" + stylelint-scss "^4.4.0" + +stylelint-config-standard@^34.0.0: + version "34.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz#309f3c48118a02aae262230c174282e40e766cf4" + integrity sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ== + dependencies: + stylelint-config-recommended "^13.0.0" + stylelint-config-standard@^40.0.0: version "40.0.0" resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-40.0.0.tgz#6bb72b94f8be434cdf2902ba26b2167d572c5414" @@ -15474,6 +15580,16 @@ stylelint-config-standard@^40.0.0: dependencies: stylelint-config-recommended "^18.0.0" +stylelint-scss@^4.4.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.7.0.tgz#f986bf8c5a4b93eae2b67d3a3562eef822657908" + integrity sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg== + dependencies: + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + stylelint@^15.11.0: version "15.11.0" resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.11.0.tgz#3ff8466f5f5c47362bc7c8c9d382741c58bc3292" @@ -15575,6 +15691,19 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" +sucrase@^3.35.0: + version "3.35.1" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.1.tgz#4619ea50393fe8bd0ae5071c26abd9b2e346bfe1" + integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + tinyglobby "^0.2.11" + ts-interface-checker "^0.1.9" + superagent@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/superagent/-/superagent-7.1.6.tgz#64f303ed4e4aba1e9da319f134107a54cacdc9c6" @@ -15880,12 +16009,17 @@ tinybench@^2.9.0: resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== +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== + tinyexec@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== -tinyglobby@^0.2.12, tinyglobby@^0.2.15: +tinyglobby@^0.2.11, tinyglobby@^0.2.12, tinyglobby@^0.2.15: version "0.2.15" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== @@ -16078,6 +16212,11 @@ ts-easing@^0.2.0: resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== +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== + tsconfig-paths@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" @@ -16097,6 +16236,29 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.5.0, tslib@^2.8 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== +tsup@^8.3.0: + version "8.5.1" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.5.1.tgz#a9c7a875b93344bdf70600dedd78e70f88ec9a65" + integrity sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing== + dependencies: + bundle-require "^5.1.0" + cac "^6.7.14" + chokidar "^4.0.3" + consola "^3.4.0" + debug "^4.4.0" + esbuild "^0.27.0" + fix-dts-default-cjs-exports "^1.0.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.7.6" + sucrase "^3.35.0" + tinyexec "^0.3.2" + tinyglobby "^0.2.11" + tree-kill "^1.2.2" + tsyringe@^4.10.0: version "4.10.0" resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" @@ -16292,6 +16454,11 @@ typescript@^5.9.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== +ufo@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.3.tgz#799666e4e88c122a9659805e30b9dc071c3aed4f" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== + uglify-js@^3.1.4: version "3.19.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f"