From 4fe497b3a14c67ba909057e3ff031c7d4feb32d4 Mon Sep 17 00:00:00 2001 From: Edwin Tantawi Date: Sat, 12 Sep 2026 12:59:35 +0700 Subject: [PATCH 1/5] feat(config): add shared TypeScript config package Introduce @batik/config with base/browser/node/react/library tsconfig presets, and wire the workspace root tsconfig to extend it. --- .changeset/proud-pugs-repeat.md | 5 +++ packages/config/LICENSE | 21 ++++++++++ packages/config/README.md | 3 ++ packages/config/package.json | 40 ++++++++++++++++++ .../config/src/typescript/tsconfig.base.json | 42 +++++++++++++++++++ .../src/typescript/tsconfig.browser.json | 7 ++++ .../src/typescript/tsconfig.library.json | 8 ++++ .../config/src/typescript/tsconfig.node.json | 10 +++++ .../config/src/typescript/tsconfig.react.json | 7 ++++ packages/config/tsconfig.json | 8 ++++ tsconfig.json | 24 +++++++++++ 11 files changed, 175 insertions(+) create mode 100644 .changeset/proud-pugs-repeat.md create mode 100644 packages/config/LICENSE create mode 100644 packages/config/README.md create mode 100644 packages/config/package.json create mode 100644 packages/config/src/typescript/tsconfig.base.json create mode 100644 packages/config/src/typescript/tsconfig.browser.json create mode 100644 packages/config/src/typescript/tsconfig.library.json create mode 100644 packages/config/src/typescript/tsconfig.node.json create mode 100644 packages/config/src/typescript/tsconfig.react.json create mode 100644 packages/config/tsconfig.json create mode 100644 tsconfig.json diff --git a/.changeset/proud-pugs-repeat.md b/.changeset/proud-pugs-repeat.md new file mode 100644 index 0000000..de686ab --- /dev/null +++ b/.changeset/proud-pugs-repeat.md @@ -0,0 +1,5 @@ +--- +"@batik/config": minor +--- + +Add `@batik/config` package with shared TypeScript configurations. diff --git a/packages/config/LICENSE b/packages/config/LICENSE new file mode 100644 index 0000000..8638aca --- /dev/null +++ b/packages/config/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Devsantara + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/config/README.md b/packages/config/README.md new file mode 100644 index 0000000..a1eee95 --- /dev/null +++ b/packages/config/README.md @@ -0,0 +1,3 @@ +# @batik/config + +Shared tooling configuration for Batik. diff --git a/packages/config/package.json b/packages/config/package.json new file mode 100644 index 0000000..f193f4b --- /dev/null +++ b/packages/config/package.json @@ -0,0 +1,40 @@ +{ + "name": "@batik/config", + "version": "0.0.0", + "description": "Shared tooling configuration for Batik", + "keywords": [ + "batik", + "config" + ], + "homepage": "https://github.com/devsantara/batik/tree/main/packages/config#readme", + "bugs": { + "url": "https://github.com/devsantara/batik/issues" + }, + "license": "MIT", + "author": "devsantara", + "repository": { + "type": "git", + "url": "git+https://github.com/devsantara/batik.git", + "directory": "packages/config" + }, + "files": [ + "src", + "README.md", + "CHANGELOG.md", + "LICENSE" + ], + "type": "module", + "exports": { + "./typescript/tsconfig.base.json": "./src/typescript/tsconfig.base.json", + "./typescript/tsconfig.browser.json": "./src/typescript/tsconfig.browser.json", + "./typescript/tsconfig.library.json": "./src/typescript/tsconfig.library.json", + "./typescript/tsconfig.node.json": "./src/typescript/tsconfig.node.json", + "./typescript/tsconfig.react.json": "./src/typescript/tsconfig.react.json" + }, + "publishConfig": { + "access": "public" + }, + "peerDependencies": { + "typescript": ">=5.8" + } +} diff --git a/packages/config/src/typescript/tsconfig.base.json b/packages/config/src/typescript/tsconfig.base.json new file mode 100644 index 0000000..9d40c18 --- /dev/null +++ b/packages/config/src/typescript/tsconfig.base.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + // lib/types are left to environment configs so browser/Node globals aren't mixed. + "target": "ES2022", + "moduleDetection": "force", + // No baseUrl/paths: tsgolint (behind `vp check`) doesn't support baseUrl. + // Use package.json `imports` (`#/...`) for internal aliases. + "module": "preserve", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "verbatimModuleSyntax": true, + "isolatedModules": true, + "erasableSyntaxOnly": true, + "noUncheckedSideEffectImports": true, + // tsdown/Vite own emitted artifacts; tsc only type-checks. + "noEmit": true, + "incremental": true, + "tsBuildInfoFile": "${configDir}/node_modules/.cache/tsconfig.tsbuildinfo", + "strict": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "esModuleInterop": true, + "skipLibCheck": true, + "types": [] + }, + "exclude": [ + "${configDir}/node_modules", + "${configDir}/dist", + "${configDir}/build", + "${configDir}/coverage", + "${configDir}/.next", + "${configDir}/.output" + ] +} diff --git a/packages/config/src/typescript/tsconfig.browser.json b/packages/config/src/typescript/tsconfig.browser.json new file mode 100644 index 0000000..b7adcc7 --- /dev/null +++ b/packages/config/src/typescript/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.base.json", + "compilerOptions": { + "lib": ["ES2022", "DOM", "DOM.Iterable", "DOM.AsyncIterable"] + } +} diff --git a/packages/config/src/typescript/tsconfig.library.json b/packages/config/src/typescript/tsconfig.library.json new file mode 100644 index 0000000..08c59b0 --- /dev/null +++ b/packages/config/src/typescript/tsconfig.library.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + // noEmit (inherited) still holds; tsdown reads these flags to decide what to generate. + "declaration": true, + "declarationMap": true + } +} diff --git a/packages/config/src/typescript/tsconfig.node.json b/packages/config/src/typescript/tsconfig.node.json new file mode 100644 index 0000000..9262e6b --- /dev/null +++ b/packages/config/src/typescript/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.base.json", + "compilerOptions": { + // Pinned to Node 24 (root package.json devEngines), which supports ES2024. + "target": "ES2024", + "lib": ["ES2024"], + "types": ["node"] + } +} diff --git a/packages/config/src/typescript/tsconfig.react.json b/packages/config/src/typescript/tsconfig.react.json new file mode 100644 index 0000000..566c6e7 --- /dev/null +++ b/packages/config/src/typescript/tsconfig.react.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.browser.json", + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json new file mode 100644 index 0000000..bc10568 --- /dev/null +++ b/packages/config/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "./src/typescript/tsconfig.node.json", + "compilerOptions": { + // vite.config.ts is loaded as raw TS by a loader with literal specifier + // resolution, so relative imports must name the .ts extension. + "allowImportingTsExtensions": true + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..67de52e --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + + // The workspace root is a real TypeScript project, not a `files: []` solution + // stub, because it owns every Node-side file that lives outside a package's + // shipped source: the root `vite.config.ts` and each package's build config. + // + // Those build configs deliberately live here rather than in their own + // package's `include`. A package's tsconfig is a browser program with + // `types: []`, and pulling `vite.config.ts` into it drags Vite+'s Node type + // references into the same program - which makes `process`, `Buffer` and + // `__dirname` resolve inside `src/` and silently defeats the isolation. + // + // Packages each own their own tsconfig.json for `src`; there are no project + // references, since tsdown builds the packages and tsgolint checks them. + "extends": "@batik/config/typescript/tsconfig.node.json", + + "include": [ + "vite.config.ts", + "apps/*/vite.config.ts", + "packages/*/vite.config.ts", + "packages/themes/*/vite.config.ts" + ] +} From c1987c0847a8530b48d777de1bf21c97f835ac68 Mon Sep 17 00:00:00 2001 From: Edwin Tantawi Date: Sat, 12 Sep 2026 14:26:24 +0700 Subject: [PATCH 2/5] fix(config): resolve root tsconfig extends and node types The root tsconfig extends `@batik/config/typescript/tsconfig.node.json`, a bare specifier resolved through node_modules. pnpm only symlinks a workspace package that is declared as a dependency, so the extends target did not exist and `vp check` failed with "Invalid tsconfig". That config also sets `types: ["node"]`, which needs `@types/node` present at the root. Add it to the catalog pinned to 24.x, matching the Node version pinned in devEngines. --- package.json | 2 + pnpm-lock.yaml | 105 +++++++++++++++++++++++++------------------- pnpm-workspace.yaml | 1 + 3 files changed, 63 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index cbbc9c3..cb3ce80 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,13 @@ "commitlint": "commitlint" }, "devDependencies": { + "@batik/config": "workspace:*", "@changesets/changelog-github": "catalog:", "@changesets/cli": "catalog:", "@commitlint/cli": "catalog:", "@commitlint/config-conventional": "catalog:", "@commitlint/types": "catalog:", + "@types/node": "catalog:", "@vitest/coverage-v8": "catalog:", "vite": "catalog:", "vite-plus": "catalog:" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 065e4d1..73ce419 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,6 +122,9 @@ catalogs: '@commitlint/types': specifier: 21.2.0 version: 21.2.0 + '@types/node': + specifier: 24.10.4 + version: 24.10.4 '@vitest/coverage-v8': specifier: 4.1.11 version: 4.1.11 @@ -140,6 +143,9 @@ importers: .: devDependencies: + '@batik/config': + specifier: workspace:* + version: link:packages/config '@changesets/changelog-github': specifier: 'catalog:' version: 1.0.1 @@ -148,13 +154,16 @@ importers: version: 3.0.2 '@commitlint/cli': specifier: 'catalog:' - version: 21.2.2(@types/node@22.20.2)(conventional-commits-parser@7.1.2)(typescript@7.0.2) + version: 21.2.2(@types/node@24.10.4)(conventional-commits-parser@7.1.2)(typescript@7.0.2) '@commitlint/config-conventional': specifier: 'catalog:' version: 21.2.2 '@commitlint/types': specifier: 'catalog:' version: 21.2.0 + '@types/node': + specifier: 'catalog:' + version: 24.10.4 '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.11(@vitest/browser@4.1.11)(vitest@4.1.11) @@ -163,10 +172,16 @@ importers: version: runtime:24.21.0 vite: specifier: 'catalog:' - version: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' + version: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' vite-plus: specifier: 'catalog:' - version: 0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0) + version: 0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0) + + packages/config: + dependencies: + typescript: + specifier: '>=5.8' + version: 7.0.2 packages: @@ -711,8 +726,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@22.20.2': - resolution: {integrity: sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw==} + '@types/node@24.10.4': + resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} '@typescript/typescript-aix-ppc64@7.0.2': resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} @@ -1750,8 +1765,8 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} vite-plus@0.3.1: resolution: {integrity: sha512-U8KZ3c3mbX0qLfigx9rW2W9J73w9wjdf4s/s91H77ff5afqSYEdZd8Or41Jl99kD42a+UCL3LFXzb5b+bIBCpQ==} @@ -2006,12 +2021,12 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@commitlint/cli@21.2.2(@types/node@22.20.2)(conventional-commits-parser@7.1.2)(typescript@7.0.2)': + '@commitlint/cli@21.2.2(@types/node@24.10.4)(conventional-commits-parser@7.1.2)(typescript@7.0.2)': dependencies: '@commitlint/config-conventional': 21.2.2 '@commitlint/format': 21.2.2 '@commitlint/lint': 21.2.2 - '@commitlint/load': 21.2.2(@types/node@22.20.2)(typescript@7.0.2) + '@commitlint/load': 21.2.2(@types/node@24.10.4)(typescript@7.0.2) '@commitlint/read': 21.2.1(conventional-commits-parser@7.1.2) '@commitlint/types': 21.2.0 tinyexec: 1.3.1 @@ -2056,14 +2071,14 @@ snapshots: '@commitlint/rules': 21.2.2 '@commitlint/types': 21.2.0 - '@commitlint/load@21.2.2(@types/node@22.20.2)(typescript@7.0.2)': + '@commitlint/load@21.2.2(@types/node@24.10.4)(typescript@7.0.2)': dependencies: '@commitlint/config-validator': 21.2.0 '@commitlint/execute-rule': 21.0.1 '@commitlint/resolve-extends': 21.2.2 '@commitlint/types': 21.2.0 cosmiconfig: 9.0.2(typescript@7.0.2) - cosmiconfig-typescript-loader: 6.3.0(@types/node@22.20.2)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2) + cosmiconfig-typescript-loader: 6.3.0(@types/node@24.10.4)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2) es-toolkit: 1.52.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -2325,9 +2340,9 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@22.20.2': + '@types/node@24.10.4': dependencies: - undici-types: 6.21.0 + undici-types: 7.16.0 '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -2389,28 +2404,28 @@ snapshots: '@typescript/typescript-win32-x64@7.0.2': optional: true - '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': + '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/user-event': 14.6.7(@testing-library/dom@10.4.1) - '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) - vitest: 4.1.11(@types/node@22.20.2)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + vitest: 4.1.11(@types/node@24.10.4)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': + '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/utils': 4.1.11 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: 4.1.11(@types/node@22.20.2)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@24.10.4)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) ws: 8.21.3 transitivePeerDependencies: - bufferutil @@ -2430,9 +2445,9 @@ snapshots: obug: 2.2.1 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 4.1.11(@types/node@22.20.2)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@24.10.4)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) '@vitest/expect@4.1.11': dependencies: @@ -2443,13 +2458,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' '@vitest/pretty-format@4.1.11': dependencies: @@ -2475,7 +2490,7 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.1 - '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)': + '@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)': dependencies: '@oxc-project/runtime': 0.148.0 '@oxc-project/types': 0.148.0 @@ -2484,7 +2499,7 @@ snapshots: yuku-codegen: 0.9.5 yuku-parser: 0.9.5 optionalDependencies: - '@types/node': 22.20.2 + '@types/node': 24.10.4 '@voidzero-dev/vite-plus-darwin-arm64': 0.3.1 '@voidzero-dev/vite-plus-darwin-x64': 0.3.1 '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.1 @@ -2654,9 +2669,9 @@ snapshots: convert-source-map@2.0.0: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@22.20.2)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2): + cosmiconfig-typescript-loader@6.3.0(@types/node@24.10.4)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2): dependencies: - '@types/node': 22.20.2 + '@types/node': 24.10.4 cosmiconfig: 9.0.2(typescript@7.0.2) jiti: 2.6.1 typescript: 7.0.2 @@ -2857,7 +2872,7 @@ snapshots: obug@2.2.1: {} - oxfmt@0.66.0(vite-plus@0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)): + oxfmt@0.66.0(vite-plus@0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)): dependencies: tinypool: 2.1.0 optionalDependencies: @@ -2880,7 +2895,7 @@ snapshots: '@oxfmt/binding-win32-arm64-msvc': 0.66.0 '@oxfmt/binding-win32-ia32-msvc': 0.66.0 '@oxfmt/binding-win32-x64-msvc': 0.66.0 - vite-plus: 0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0) + vite-plus: 0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0) oxlint-tsgolint@7.0.2001: optionalDependencies: @@ -2891,7 +2906,7 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 7.0.2001 '@oxlint-tsgolint/win32-x64': 7.0.2001 - oxlint@1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)): + oxlint@1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.81.0 '@oxlint/binding-android-arm64': 1.81.0 @@ -2913,7 +2928,7 @@ snapshots: '@oxlint/binding-win32-ia32-msvc': 1.81.0 '@oxlint/binding-win32-x64-msvc': 1.81.0 oxlint-tsgolint: 7.0.2001 - vite-plus: 0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0) + vite-plus: 0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0) package-manager-detector@1.8.0: {} @@ -3033,26 +3048,26 @@ snapshots: '@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2 - undici-types@6.21.0: {} + undici-types@7.16.0: {} - vite-plus@0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0): + vite-plus@0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0): dependencies: '@oxc-project/types': 0.148.0 '@oxlint/plugins': 1.79.0 - '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) - '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 '@vitest/spy': 4.1.11 '@vitest/utils': 4.1.11 - oxfmt: 0.66.0(vite-plus@0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) - oxlint: 1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@types/node@22.20.2)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + oxfmt: 0.66.0(vite-plus@0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + oxlint: 1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@types/node@24.10.4)(@vitest/coverage-v8@4.1.11)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) oxlint-tsgolint: 7.0.2001 - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' - vitest: 4.1.11(@types/node@22.20.2)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' + vitest: 4.1.11(@types/node@24.10.4)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) optionalDependencies: '@voidzero-dev/vite-plus-darwin-arm64': 0.3.1 '@voidzero-dev/vite-plus-darwin-x64': 0.3.1 @@ -3092,10 +3107,10 @@ snapshots: - utf-8-validate - yaml - vitest@4.1.11(@types/node@22.20.2)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)): + vitest@4.1.11(@types/node@24.10.4)(@vitest/browser-preview@4.1.11)(@vitest/coverage-v8@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 @@ -3112,11 +3127,11 @@ snapshots: tinyexec: 1.3.1 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0)' why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.20.2 - '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@types/node': 24.10.4 + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@24.10.4)(jiti@2.6.1)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) '@vitest/coverage-v8': 4.1.11(@vitest/browser@4.1.11)(vitest@4.1.11) transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b164612..e7ed656 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,6 +9,7 @@ catalog: '@commitlint/cli': 21.2.2 '@commitlint/config-conventional': 21.2.2 '@commitlint/types': 21.2.0 + '@types/node': 24.10.4 '@vitest/coverage-v8': 4.1.11 vite: npm:@voidzero-dev/vite-plus-core@0.3.1 vite-plus: 0.3.1 From ae176a08957feef3045b81aaa732e9d7f44c1ef3 Mon Sep 17 00:00:00 2001 From: Edwin Tantawi Date: Sat, 12 Sep 2026 20:58:03 +0700 Subject: [PATCH 3/5] fix(config): keep shared TypeScript presets path-free --- packages/config/src/typescript/tsconfig.base.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/config/src/typescript/tsconfig.base.json b/packages/config/src/typescript/tsconfig.base.json index 9d40c18..818eed9 100644 --- a/packages/config/src/typescript/tsconfig.base.json +++ b/packages/config/src/typescript/tsconfig.base.json @@ -30,13 +30,5 @@ "esModuleInterop": true, "skipLibCheck": true, "types": [] - }, - "exclude": [ - "${configDir}/node_modules", - "${configDir}/dist", - "${configDir}/build", - "${configDir}/coverage", - "${configDir}/.next", - "${configDir}/.output" - ] + } } From 47e666f064367be143a84b7753955a84a19c5a3d Mon Sep 17 00:00:00 2001 From: Edwin Tantawi Date: Sat, 12 Sep 2026 21:05:50 +0700 Subject: [PATCH 4/5] refactor(config): simplify TypeScript preset comments --- packages/config/src/typescript/tsconfig.base.json | 4 ---- packages/config/src/typescript/tsconfig.library.json | 1 - packages/config/src/typescript/tsconfig.node.json | 1 - packages/config/tsconfig.json | 2 -- 4 files changed, 8 deletions(-) diff --git a/packages/config/src/typescript/tsconfig.base.json b/packages/config/src/typescript/tsconfig.base.json index 818eed9..bd11690 100644 --- a/packages/config/src/typescript/tsconfig.base.json +++ b/packages/config/src/typescript/tsconfig.base.json @@ -1,11 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - // lib/types are left to environment configs so browser/Node globals aren't mixed. "target": "ES2022", "moduleDetection": "force", - // No baseUrl/paths: tsgolint (behind `vp check`) doesn't support baseUrl. - // Use package.json `imports` (`#/...`) for internal aliases. "module": "preserve", "moduleResolution": "bundler", "resolveJsonModule": true, @@ -13,7 +10,6 @@ "isolatedModules": true, "erasableSyntaxOnly": true, "noUncheckedSideEffectImports": true, - // tsdown/Vite own emitted artifacts; tsc only type-checks. "noEmit": true, "incremental": true, "tsBuildInfoFile": "${configDir}/node_modules/.cache/tsconfig.tsbuildinfo", diff --git a/packages/config/src/typescript/tsconfig.library.json b/packages/config/src/typescript/tsconfig.library.json index 08c59b0..a6d7717 100644 --- a/packages/config/src/typescript/tsconfig.library.json +++ b/packages/config/src/typescript/tsconfig.library.json @@ -1,7 +1,6 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - // noEmit (inherited) still holds; tsdown reads these flags to decide what to generate. "declaration": true, "declarationMap": true } diff --git a/packages/config/src/typescript/tsconfig.node.json b/packages/config/src/typescript/tsconfig.node.json index 9262e6b..b6c0a5a 100644 --- a/packages/config/src/typescript/tsconfig.node.json +++ b/packages/config/src/typescript/tsconfig.node.json @@ -2,7 +2,6 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "./tsconfig.base.json", "compilerOptions": { - // Pinned to Node 24 (root package.json devEngines), which supports ES2024. "target": "ES2024", "lib": ["ES2024"], "types": ["node"] diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json index bc10568..01563e3 100644 --- a/packages/config/tsconfig.json +++ b/packages/config/tsconfig.json @@ -1,8 +1,6 @@ { "extends": "./src/typescript/tsconfig.node.json", "compilerOptions": { - // vite.config.ts is loaded as raw TS by a loader with literal specifier - // resolution, so relative imports must name the .ts extension. "allowImportingTsExtensions": true } } From a97118ef03318dbd64e2466e6e14097d337b0f70 Mon Sep 17 00:00:00 2001 From: Edwin Tantawi Date: Sat, 12 Sep 2026 21:33:07 +0700 Subject: [PATCH 5/5] ci(release): skip redundant package build --- .github/workflows/release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 95f65ca..19e3696 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -76,8 +76,6 @@ jobs: uses: voidzero-dev/setup-vp@v1.19.0 with: cache: false # avoid cache poisoning in release jobs - - name: Build packages - run: vp run -r pack - name: Pack packages id: pack uses: changesets/action/pack@v2.1.2