@deltabox/toolchain 1.0.7 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,32 +1,34 @@
1
1
  # deltabox toolchain
2
2
 
3
- > All-in-one, config-driven dev toolchain: scaffold projects, generate and manage
4
- > configs, tsconfigs, changelogs and CI, run Vite+, and migrate other tools onto Ox.
3
+ All-in-one, config-driven dev toolchain: scaffold projects, generate and manage configs, tsconfigs, changelogs and CI, run Vite+, and migrate other tools onto Ox.
5
4
 
6
5
  [![license: MPL-2.0](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](./package.json)
7
- [![node](https://img.shields.io/badge/node-%3E%3D22.5.0-brightgreen.svg)](./package.json)
8
- [![yarn](https://img.shields.io/badge/yarn-4.17.1-2188b6.svg)](./package.json)
9
- [![package](https://img.shields.io/badge/npm-@deltabox%2Ftoolchain-cb3837.svg)](https://www.npmjs.com/package/@deltabox/toolchain)
6
+ [![tests](https://img.shields.io/github/actions/workflow/status/deltabox-studio/toolchain/ci.yml?label=tests&logo=github)](https://github.com/deltabox-studio/toolchain/actions/workflows/ci.yml)
7
+ [![npm version](https://img.shields.io/npm/v/@deltabox/toolchain.svg?color=cb3837&label=npm)](https://www.npmjs.com/package/@deltabox/toolchain)
10
8
 
11
9
  `@deltabox/toolchain` is driven by a single `dbx.config.ts` at a repo
12
10
  root. Define the sections you want and the toolchain generates and keeps the
13
11
  matching files in sync — from a CLI, a programmatic API, and a VS Code extension.
14
12
 
15
- > **Documentation, guides and examples: [toolchain.deltabox.studio](https://toolchain.deltabox.studio).**
13
+ See [CHANGELOG.md](/CHANGELOG.md) for latest updates.
14
+
15
+ **Documentation, guides and examples:** [toolchain.deltabox.studio](https://toolchain.deltabox.studio).
16
16
 
17
17
  ## Table of contents
18
18
 
19
- - [Features](#features)
20
- - [Install](#install)
21
- - [Quickstart](#quickstart)
22
- - [Config generator](#config-generator)
23
- - [CLI](#cli)
24
- - [Programmatic API](#programmatic-api)
25
- - [Packages](#packages)
26
- - [VS Code extension](#vs-code-extension)
27
- - [Development](#development)
28
- - [Docs](#docs)
29
- - [License](#license)
19
+ - [deltabox toolchain](#deltabox-toolchain)
20
+ - [Table of contents](#table-of-contents)
21
+ - [Features](#features)
22
+ - [Install](#install)
23
+ - [Quickstart](#quickstart)
24
+ - [Config generator](#config-generator)
25
+ - [Vite / Vite+ plugin](#vite--vite-plugin)
26
+ - [CLI](#cli)
27
+ - [Programmatic API](#programmatic-api)
28
+ - [VS Code extension](#vs-code-extension)
29
+ - [Development](#development)
30
+ - [Docs](#docs)
31
+ - [License](#license)
30
32
 
31
33
  ## Features
32
34
 
@@ -37,6 +39,9 @@ matching files in sync — from a CLI, a programmatic API, and a VS Code extensi
37
39
  your schemas into a `.env.example`, a JSON Schema, a markdown reference, TS
38
40
  types and CLI flags, and wires `config:*` commands into your own CLI. See the
39
41
  [config generator guide](https://toolchain.deltabox.studio/guide/config-generator).
42
+ - **Vite / Vite+ plugin.** Drive dbx from `vite.config.ts`: the `dbx()` plugin
43
+ runs `dbx sync` before dev/build (or `dbx sync --check` in CI). Works with both
44
+ Vite and Vite+.
40
45
  - **Changelogs & releases.** Conventional-Commits commitlint, a changelog
41
46
  pipeline that bumps versions and writes `CHANGELOG.md`, plus GitHub workflows
42
47
  for CI, changelog, release and issues.
@@ -136,24 +141,43 @@ engine.writeMarkdown({ outDir: 'docs/reference/configuration' });
136
141
  commands on your own CLI. See the [config generator
137
142
  guide](https://toolchain.deltabox.studio/guide/config-generator).
138
143
 
144
+ ## Vite / Vite+ plugin
145
+
146
+ `@deltabox/toolchain` ships a Vite plugin, so a Vite (or Vite+) project can run
147
+ dbx as part of its own pipeline — no separate `dbx sync` step:
148
+
149
+ ```ts
150
+ // vite.config.ts
151
+ import { defineConfig } from 'vite'; // or 'vite-plus'
152
+
153
+ import { defineDbxConfig } from '@deltabox/toolchain/vite';
154
+
155
+ export default defineConfig(
156
+ defineDbxConfig({
157
+ // your usual Vite / Vite+ config
158
+ })
159
+ );
160
+ ```
161
+
162
+ - The `dbx()` plugin runs `dbx sync` before the dev server / build, or
163
+ `dbx sync --check` in CI (which fails the build when generated files are out of
164
+ date), and re-syncs when a `dbx.config.*` / `tsconfig.*.json` input changes.
165
+ - `defineDbxConfig` also registers `vp run dbx:sync` / `vp run dbx:check`. Prefer
166
+ the bare plugin when you don't want the tasks:
167
+
168
+ ```ts
169
+ import { dbx } from '@deltabox/toolchain/vite';
170
+
171
+ export default defineConfig({ plugins: [dbx({ check: true })] });
172
+ ```
173
+
174
+ See the [providers guide](https://toolchain.deltabox.studio/guide/providers).
175
+
139
176
  ## CLI
140
177
 
141
- | Command | Description |
142
- | ------------------------------------------------- | ---------------------------------------------------------------------- |
143
- | `projects` | Discover projects and write `.dbx/toolchain/projects.json`. |
144
- | `sync` | Regenerate managed files (`--check`, `--recursive`, `--watch`). |
145
- | `watch` | Sync once, then re-sync on change. |
146
- | `reset` | Remove generated files, the manifest and/or the config. |
147
- | `project:init` / `:monorepo` / `:workspace` | Scaffold a project, a monorepo root, or a workspace. |
148
- | `project:config` | Generate `dbx.config.ts` for projects missing one. |
149
- | `create` | Scaffold from a template (`--template`, `--name`, `--scope`, `--out`). |
150
- | `template:list` / `:add` / `:info` | Inspect and record template sources. |
151
- | `providers` | List registered providers and their commands (`--json`). |
152
- | `vite <args…>` / `vite:<sub>` | Passthrough to the Vite+ `vp` binary. |
153
- | `migrate` / `migrate:list` | Convert Biome/Prettier/ESLint/Dprint onto Ox. |
154
- | `tsconfig` / `changelog` / `workflow` / `cleanup` | tsconfigs, changelog + versions, GitHub workflows, artifacts. |
155
-
156
- Commands that run against a project load its `dbx.config.ts` first, so
178
+ Visit the [CLI docs](https://toolchain.deltabox.studio/guide/cli) to learn more.
179
+
180
+ Note: Commands that run against a project load its `dbx.config.ts` first, so
157
181
  config-derived defaults apply unless overridden on the command line.
158
182
 
159
183
  ## Programmatic API
@@ -165,32 +189,20 @@ const { config, tokens, projectType } = await loadToolingConfig(process.cwd());
165
189
  await runSync({ tasks: defaultSyncTasks(), cwd: process.cwd(), config, tokens, projectType });
166
190
  ```
167
191
 
168
- ## Packages
169
-
170
- The root package re-exports every workspace below, and each is also importable
171
- via a subpath (`@deltabox/toolchain/tsconfig`, `…/vite`, `…/migrate`, …).
172
-
173
- | Package | Responsibility |
174
- | ------------------------------- | --------------------------------------------------------- |
175
- | `@deltabox/toolchain-shared` | Config model, template engine, provider model, run/spawn. |
176
- | `@deltabox/toolchain-core` | Config loader, project graph, sync engine, manifest. |
177
- | `@deltabox/toolchain-project` | Scaffold generators (single / monorepo / workspace). |
178
- | `@deltabox/toolchain-tsconfig` | TypeScript config templates + tsconfig generator. |
179
- | `@deltabox/toolchain-changelog` | Workflows, commitlint, changelog pipeline. |
180
- | `@deltabox/toolchain-biome` | `biome.json` generation + VS Code settings. |
181
- | `@deltabox/toolchain-tsdown` | tsdown base config + cleanup. |
182
- | `@deltabox/toolchain-config` | Generic Zod/env config engine. |
183
- | `@deltabox/toolchain-vite` | Vite+ provider (`vp` wrapper). |
184
- | `@deltabox/toolchain-template` | Template registry/scaffolder. |
185
- | `@deltabox/toolchain-migrate` | Biome/Prettier/ESLint/Dprint → Ox migrations. |
186
- | `toolchain-vscode` | VS Code extension (`deltabox-toolchain.vsix`). |
187
-
188
192
  ## VS Code extension
189
193
 
190
- Install `packages/vscode/deltabox-toolchain.vsix`, then use the **deltabox
191
- toolchain** activity bar: Sync / Check sync / Scaffold project, **From
192
- template…**, **Run Vite+ command…** and **Create Vite+ project…**. See
193
- [`packages/vscode/README.md`](./packages/vscode/README.md).
194
+ A VS Code extension is available for `deltabox toolchain`.
195
+
196
+ Follow the steps below to use it. Will be published to the marketplace in the future.
197
+
198
+ 1. Download `deltabox-toolchain.vsix` from [releases](https://github.com/deltabox-studio/toolchain/releases).
199
+ 2. In VS Code install the `deltabox-toolchain.vsix` by going to the Extensions sidebar panel, click the three dotted menu on the panel header and select `Install from VSIX...` from the context menu.
200
+ 3. Now a screwdriver icon should pop up on the VS Code sidemenu, and you can use the command palette (Ctrl + P) as well:
201
+ 1. Sync / Check sync / Scaffold project, From template…
202
+ 2. Run Vite+ command...
203
+ 3. Create Vite+ project...
204
+
205
+ See [packages/vscode/README.md](./packages/vscode/README.md) to learn more about how it works.
194
206
 
195
207
  ## Development
196
208
 
@@ -215,22 +227,10 @@ Docs live in `apps/docs` (VitePress): `yarn workspace @deltabox/toolchain-docs b
215
227
 
216
228
  ## Docs
217
229
 
218
- Full documentation, guides and examples live at
219
- **[toolchain.deltabox.studio](https://toolchain.deltabox.studio)**:
220
-
221
- - [Getting Started](https://toolchain.deltabox.studio/guide/)
222
- - [Monorepo guide](https://toolchain.deltabox.studio/guide/monorepo)
223
- - [CLI](https://toolchain.deltabox.studio/guide/cli)
224
- - [Configuration](https://toolchain.deltabox.studio/guide/config)
225
- - [Config generator](https://toolchain.deltabox.studio/guide/config-generator)
226
- - [Providers (Vite+)](https://toolchain.deltabox.studio/guide/providers)
227
- - [Templates](https://toolchain.deltabox.studio/guide/templates)
228
- - [Migrations](https://toolchain.deltabox.studio/guide/migrations)
229
- - [Programmatic API](https://toolchain.deltabox.studio/guide/api)
230
- - [Config reference](https://toolchain.deltabox.studio/config/reference)
230
+ Full documentation, guides and examples live at [toolchain.deltabox.studio](https://toolchain.deltabox.studio).
231
231
 
232
- The source pages live in `apps/docs` (VitePress).
232
+ The source pages live in `apps/docs`.
233
233
 
234
234
  ## License
235
235
 
236
- [MPL-2.0](./LICENSE) © Victor Sango
236
+ [MPL-2.0](./LICENSE) © deltabox
package/dist/package.js CHANGED
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;var e=`1.0.5`;export{e as version};
1
+ import"node:path";import"node:url";import.meta.url;var e=`1.1.21`;export{e as version};
@@ -1,4 +1,4 @@
1
- import"node:path";import"node:url";import.meta.url;import{readFileSync as e,writeFileSync as t}from"node:fs";const n={feat:`New features`,fix:`Bug fixes`,refactor:`Refactors`,docs:`Documentation`,style:`Styles`,chore:`Chores`,test:`Tests`,perf:`Performance`,build:`Build system`,ci:`Continuous integration`,revert:`Reverts`,breaking:`Breaking changes`},r=[`breaking`,`feat`,`fix`,`perf`,`refactor`,`docs`,`style`,`test`,`build`,`ci`,`chore`,`revert`];function i(e){return n[e]??n[e.toLowerCase()]??`Other changes`}function a(e){let t=/^([a-zA-Z][a-zA-Z0-9]*)(\(([^)]*)\))?(!)?:\s*(.*)$/.exec(e);return t?{type:t[1].toLowerCase(),scope:t[3]?.trim()||void 0,breaking:!!t[4],rest:t[5]??``}:{type:`chore`,breaking:!1,rest:e}}function o(e){let t=/* @__PURE__ */ new Map;for(let n of e){let{parsed:e}=n,r=t.get(e.type)??{title:i(e.type),ungrouped:[],scopes:/* @__PURE__ */ new Map};if(e.scope){let t=r.scopes.get(e.scope)??[];t.push(n),r.scopes.set(e.scope,t)}else r.ungrouped.push(n);t.set(e.type,r)}return[...t.entries()].sort((e,t)=>{let n=r.indexOf(e[0]),i=r.indexOf(t[0]);return(n===-1?r.length:n)-(i===-1?r.length:i)}).map(([,e])=>e)}function s(e){if(e.length===0)return`- No description provided.`;let t=[];for(let n of e){t.push(`### ${n.title}`);for(let e of n.ungrouped)t.push(e.text),t.push(...c(e.bodyParagraphs));for(let[e,r]of n.scopes){t.push(`#### ${l(e)}`);for(let e of r)t.push(e.text),t.push(...c(e.bodyParagraphs))}}return t.join(`
1
+ import"node:path";import"node:url";import.meta.url;import{readFileSync as e,writeFileSync as t}from"node:fs";const n={feat:`New features`,fix:`Bug fixes`,refactor:`Refactors`,docs:`Documentation`,style:`Styles`,chore:`Chores`,test:`Tests`,perf:`Performance`,build:`Build system`,ci:`CI`,revert:`Reverts`,breaking:`Breaking changes`},r=[`breaking`,`feat`,`fix`,`perf`,`refactor`,`docs`,`style`,`test`,`build`,`ci`,`chore`,`revert`];function i(e){return n[e]??n[e.toLowerCase()]??`Other changes`}function a(e){let t=/^([a-zA-Z][a-zA-Z0-9]*)(\(([^)]*)\))?(!)?:\s*(.*)$/.exec(e);return t?{type:t[1].toLowerCase(),scope:t[3]?.trim()||void 0,breaking:!!t[4],rest:t[5]??``}:{type:`chore`,breaking:!1,rest:e}}function o(e){let t=/* @__PURE__ */ new Map;for(let n of e){let{parsed:e}=n,r=t.get(e.type)??{title:i(e.type),ungrouped:[],scopes:/* @__PURE__ */ new Map};if(e.scope){let t=r.scopes.get(e.scope)??[];t.push(n),r.scopes.set(e.scope,t)}else r.ungrouped.push(n);t.set(e.type,r)}return[...t.entries()].sort((e,t)=>{let n=r.indexOf(e[0]),i=r.indexOf(t[0]);return(n===-1?r.length:n)-(i===-1?r.length:i)}).map(([,e])=>e)}function s(e){if(e.length===0)return`- No description provided.`;let t=[];for(let n of e){t.push(`### ${n.title}`);for(let e of n.ungrouped)t.push(e.text),t.push(...c(e.bodyParagraphs));for(let[e,r]of n.scopes){t.push(`#### ${l(e)}`);for(let e of r)t.push(e.text),t.push(...c(e.bodyParagraphs))}}return t.join(`
2
2
  `)}function c(e){let t=[];for(let n of e){let[e,...r]=n;e&&(t.push(` - ${e}`),t.push(...r.map(e=>` ${e}`)))}return t}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function u(e){return e.length>0?e.charAt(0).toUpperCase()+e.slice(1):e}function d(e){let t=e.lastIndexOf(`([#`);if(t===-1)return{main:e,inline:``};let n=e.slice(t),r=/^(\(\[#[^\]]+\]\([^)]*\) by [^)]*\)\)?)(?:\(fixes [^)]*\)\)?)?/.exec(n);if(!r)return{main:e,inline:``};let i=r[0]??``;return{main:e.slice(0,t)+i,inline:e.slice(t+i.length).trim()}}function f(e){let t=[],n=[];for(let r of e.split(`
3
3
  `)){let e=r.trim();if(!e){n.length>0&&(t.push(n),n=[]);continue}if(e.startsWith(`-`)||e.startsWith(`*`)||/^[0-9]+[.)]/.test(e)||!e.replace(/(?:close[sd]?|fixe?s|fixed|resolves?|resolved)\b\s*:?\s*#\d+\s*[,;]?\s*/gi,``).trim())continue;let i=/^(BREAKING CHANGE|Reviewed-by|Signed-off-by|Co-authored-by|Acked-by|Co-developed-by|Helped-by|Reported-by|Suggested-by|Tested-by|Cc):\s+(.+)$/i.exec(e);i&&!/^(http|https)\b/.test(e)?(n.length>0&&(t.push(n),n=[]),t.push([`**${(i[1]??``).trim()}:** ${(i[2]??``).trim()}`])):n.push(e)}return n.length>0&&t.push(n),t}function p(e,t){return`https://github.com/${e}/commit/${t}`}function m(e,t){return`https://github.com/${e}/issues/${t}`}function h(e,t){return e.replace(/\[(#[0-9a-fA-F]{6,40})\]\(([^)]*)\)/g,(e,n)=>{let r=n.replace(`#`,``).slice(0,7);return`[#${r}](${p(t,r)})`}).replace(/(^|[^\w[])#([0-9a-fA-F]{7,40})(?![0-9a-fA-F])(?=[)\].,;:\s]|$)/g,(e,n,r)=>{let i=r.slice(0,7);return`${n}[#${i}](${p(t,i)})`})}function g(e,t){return e.replace(/\[#(\d+)(?=[ \]])(?:[^\]]*)\]\([^)]*\)/g,(e,n)=>`[#${n}](${m(t,n)})`).replace(/(^|[^\w[])#(\d+)(?=[)\].,;:\s]|$)/g,(e,n,r)=>`${n}[#${r}](${m(t,r)})`)}function _(e,t){if(!t)return e;let n=h(e,t);return n=g(n,t),n}function v(n,r){if(!r)return;let i=e(n,`utf8`),a=i.split(`
4
4
  `).map(e=>_(e,r)).join(`
@@ -1 +1 @@
1
- import{resolve as e}from"node:path";import"node:url";import.meta.url;import{existsSync as t,globSync as n,readFileSync as r,writeFileSync as i}from"node:fs";function a(){let n=process.cwd();for(let r=0;r<8;r++){if(t(e(n,`package.json`)))return n;let r=e(n,`..`);if(r===n)break;n=r}return process.cwd()}function o(){let i=a(),o=JSON.parse(r(e(i,`package.json`),`utf8`)),s=/* @__PURE__ */ new Set([i]);for(let r of o.workspaces??[])if(r!==`.`)for(let a of n(r,{cwd:i})){let n=e(i,a);t(e(n,`package.json`))&&s.add(n)}return[...s]}function s(){let t=e(a(),`package.json`);return JSON.parse(r(t,`utf8`)).version??`0.0.0`}function c(n){for(let a of o()){let o=e(a,`package.json`);if(!t(o))continue;let s=JSON.parse(r(o,`utf8`));s.version=n,i(o,`${JSON.stringify(s,null,4)}\n`,`utf8`),console.log(` bumped ${o}`)}}function l(){let n=a();return[e(n,`CHANGELOG.md`),...o().filter(t=>e(t)!==e(n)).map(t=>e(t,`CHANGELOG.md`))].filter(e=>t(e))}export{l as changelogFiles,o as discoverWorkspaceDirs,s as readRootVersion,a as repoRoot,c as writeVersion};
1
+ import{resolve as e}from"node:path";import"node:url";import.meta.url;import{existsSync as t,globSync as n,readFileSync as r,writeFileSync as i}from"node:fs";function a(){let n=process.cwd();for(let r=0;r<8;r++){if(t(e(n,`package.json`)))return n;let r=e(n,`..`);if(r===n)break;n=r}return process.cwd()}function o(){let i=a(),o=JSON.parse(r(e(i,`package.json`),`utf8`)),s=/* @__PURE__ */ new Set([i]);for(let r of o.workspaces??[])if(r!==`.`)for(let a of n(r,{cwd:i})){let n=e(i,a);t(e(n,`package.json`))&&s.add(n)}return[...s]}function s(){let t=e(a(),`package.json`);return JSON.parse(r(t,`utf8`)).version??`0.0.0`}function c(n){for(let a of o()){let o=e(a,`package.json`);if(!t(o))continue;let s=r(o,`utf8`),c=s.replace(/("version"\s*:\s*)"[^"]*"/,`$1"${n}"`);c!==s&&(i(o,c,`utf8`),console.log(` bumped ${o}`))}}function l(){let n=a();return[e(n,`CHANGELOG.md`),...o().filter(t=>e(t)!==e(n)).map(t=>e(t,`CHANGELOG.md`))].filter(e=>t(e))}export{l as changelogFiles,o as discoverWorkspaceDirs,s as readRootVersion,a as repoRoot,c as writeVersion};
@@ -9,6 +9,8 @@ export interface WorkflowJob {
9
9
  'runs-on': string;
10
10
  if?: string;
11
11
  needs?: string | string[];
12
+ /** A GitHub environment name (matched by the OIDC trusted publisher). */
13
+ environment?: string;
12
14
  permissions?: Record<string, string>;
13
15
  env?: Record<string, string>;
14
16
  outputs?: Record<string, string>;
@@ -1,5 +1,5 @@
1
1
  import"node:path";import"node:url";import.meta.url;import{applyReplacementsDeep as e}from"../../shared/src/template.js";import{toYaml as t}from"../../shared/src/yaml.js";import"../../shared/src/index.js";const n={nodeVersion:`22`,yarnVersion:`4.17.1`,packageManager:`yarn`,mainBranch:`main`,devBranch:`dev`,tooling:`dbx`},r={ci:`ci.yml`,changelog:`changelog.yml`,release:`release.yml`,sync:`sync.yml`,issues:`issues.yml`};function i(e){return e===void 0?!0:typeof e==`boolean`?e:e.enabled!==!1}function a(e){return`${e.packageManager} ${e.tooling}`}function o(e){return[{name:`Checkout`,uses:`actions/checkout@v4`,with:{"fetch-depth":0,token:"${{ secrets.GITHUB_TOKEN }}"}},{name:`Setup Node`,uses:`actions/setup-node@v4`,with:{"node-version":String(e.nodeVersion)}},{name:`Enable Corepack`,run:`corepack enable\ncorepack prepare ${e.packageManager}@${e.yarnVersion} --activate`},{name:`Install dependencies`,run:`${e.packageManager} install --immutable`}]}function s(e){let t=a(e),n=String(e.mainBranch),r=String(e.devBranch);return{ci:{name:`CI`,on:{push:{branches:[n]},pull_request:{branches:[`release/**`,`feat/**`,`feature/**`,`fix/**`,`chore/**`]}},jobs:{ci:{"runs-on":`ubuntu-latest`,steps:[...o(e),{name:`Commitlint (Conventional Commits)`,if:"${{ github.event_name == 'pull_request' || github.event.before != '0000000000000000000000000000000000000000' }}",run:`set -euo pipefail\nbase="\${{ github.event.pull_request.base.sha || github.event.before }}"\nhead="\${{ github.event.pull_request.head.sha || github.event.after }}"\n${e.packageManager} commitlint --from "$base" --to "$head"`},{name:`Verify generated files are in sync`,run:`${t} sync --check`},{name:`Build`,run:`${e.packageManager} build`}]}}},changelog:{name:`Changelog (dev)`,on:{push:{branches:[r]}},permissions:{contents:`write`},concurrency:{group:`changelog-dev`,"cancel-in-progress":!1},jobs:{"generate-changelog":{"runs-on":`ubuntu-latest`,if:`!startsWith(github.event.head_commit.message, 'chore: version packages ') && !startsWith(github.event.head_commit.message, 'release: ')`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},steps:[...o(e),{name:`Generate changelog + bump versions`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,'after="${{ github.event.after }}"; [ -n "$after" ] || after="HEAD"',`boundary="$(git log --format=%H --grep='^chore: version packages ' -1 || true)"`,`if [ -n "$boundary" ]; then range="$boundary..$after"; else range="$after"; fi`,`${t} changelog --range "$range"`].join(`
2
- `)},{name:`Commit + push changelog updates`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`git diff --quiet && { echo "No changelog changes."; exit 0; }`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git add -A`,`git commit -m "chore: version packages ($(node -p "require('./package.json').version"))"`,`git push origin ${r}`].join(`
2
+ `)},{name:`Commit + push changelog updates`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`git diff --quiet && { echo "No changelog changes."; exit 0; }`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git add -u -- "*package.json" "*CHANGELOG.md"`,`git commit -m "chore: version packages ($(node -p "require('./package.json').version"))"`,`git push origin ${r}`].join(`
3
3
  `)}]}}},release:{name:`Release`,on:{push:{branches:[n]},workflow_dispatch:null},permissions:{contents:`write`,"pull-requests":`write`},concurrency:{group:`release`,"cancel-in-progress":!1},jobs:{"create-release-pr":{"runs-on":`ubuntu-latest`,if:`(github.event_name == 'push' || github.event_name == 'workflow_dispatch') && !startsWith(github.event.head_commit.message, 'chore: version packages ') && !startsWith(github.event.head_commit.message, 'release: ')`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},steps:[...o(e),{name:`Open release PR`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`version="$(node -p "require('./package.json').version")"`,`branch="release/$version"`,`if git ls-remote --exit-code --heads origin "$branch" >/dev/null 2>&1; then`,` echo "Release PR already open for $version."; exit 0`,`fi`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git checkout -b "$branch"`,`git add -A`,`git commit -m "chore: version packages ($version)" || true`,`git push origin "$branch"`,`notes="$(awk '/<!-- release:start -->/{f=1;next} /<!-- release:end -->/{exit} f{print}' CHANGELOG.md 2>/dev/null || true)"`,`[ -n "$notes" ] || notes="Release $version"`,`gh pr create --base ${n} --head "$branch" --title "release: $version" --body "$notes"`].join(`
4
4
  `)}]}}},sync:{name:`Tooling sync`,on:{push:{branches:[n,r]},pull_request:null},jobs:{sync:{"runs-on":`ubuntu-latest`,steps:[...o(e),{name:`Verify generated files are in sync`,run:`${t} sync --check`}]}}},issues:{name:`Issues`,on:{issues:{types:[`opened`]}},permissions:{issues:`write`},jobs:{"enforce-title":{"runs-on":`ubuntu-latest`,steps:[{name:`Check and rename issue title`,env:{GH_TOKEN:"${{ github.token }}",ISSUE_NUMBER:"${{ github.event.issue.number }}"},run:[`set -euo pipefail`,`labels=$(gh issue view "$ISSUE_NUMBER" --json labels -q '.labels[].name' || true)`,`title=$(gh issue view "$ISSUE_NUMBER" --json title -q '.title')`,`type=""`,`for label in $labels; do case "$label" in *bug*) type="bug" ;; esac; done`,`if [ -z "$type" ]; then for label in $labels; do case "$label" in *enhancement*|*feature*|*feat*) type="feat" ;; esac; done; fi`,`if [ -z "$type" ]; then echo "No bug/enhancement label on issue #$ISSUE_NUMBER; skipping."; exit 0; fi`,`prefix="[bug]"; [ "$type" = "feat" ] && prefix="[feat]"`,`stripped=$(printf '%s' "$title" | sed -E 's/^\\[(bug|feat)\\] *//i')`,`new_title="$prefix $stripped"`,`if [ "$new_title" = "$title" ]; then echo "Issue #$ISSUE_NUMBER title already conforms."; exit 0; fi`,`gh issue edit "$ISSUE_NUMBER" --title "$new_title"`].join(`
5
5
  `)}]}}}}}function c(e){return e.steps?Array.isArray(e.steps)?e.steps:[e.steps]:[]}function l(e,t={}){let n=structuredClone(e);if(t.pushBranches){let e=n.on.push??{};n.on.push={...e,branches:t.pushBranches}}if(t.pullRequestBranches){let e=n.on.pull_request??{};n.on.pull_request={...e,branches:t.pullRequestBranches}}t.triggers&&(n.on={...n.on,...t.triggers}),t.extra&&Object.assign(n,t.extra),t.jobs&&(n.jobs={...n.jobs,...t.jobs});let r=Object.keys(n.jobs)[0];for(let e of c(t)){let t=e.job??r;if(!t)continue;let i=n.jobs[t];i&&(i.steps=[...e.before??[],...i.steps,...e.after??[]])}return n}function u(r,i){let a=i.config??{};if(a.enabled===!1)return;let o={...n,...i.tokens,...a.tokens},c=s(o)[r],u=e(l(c,a),o);return t(u)}function d(e,t={}){let n={};for(let a of Object.keys(r)){let o=t[a];if(!i(o))continue;let s=u(a,{tokens:e,config:typeof o==`object`?o:{}});s&&(n[r[a]]=s)}return n}export{n as DEFAULT_WORKFLOW_TOKENS,r as WORKFLOW_FILENAMES,l as applyWorkflowConfig,s as defaultWorkflows,i as isEnabled,u as renderWorkflow,d as renderWorkflows};
@@ -1 +1 @@
1
- import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{CONFIG_FILE_NAMES as n,resolveTokens as r}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as i}from"./project-type.js";import a from"node:fs";function o(t=process.cwd()){for(let r of n){let n=e.resolve(t,r);if(a.existsSync(n))return n}}async function s(e){if(e.endsWith(`.json`))return JSON.parse(a.readFileSync(e,`utf-8`));let n=t(e).href;try{let e=await import(n);return e.default??e}catch(e){try{let{tsImport:e}=await import(`C:\\Users\\user\\coding\\projects\\deltabox\\@deltabox\\toolchain\\node_modules\\tsx\\dist\\esm\\api\\index.mjs`),t=await e(n,import.meta.url);return t.default??t}catch{throw e}}}async function c(e=process.cwd()){let t=o(e),n={};if(t){let e=await s(t),r=e&&typeof e==`object`?e.toolchain:void 0;r&&typeof r==`object`&&(n=r)}let a=r(n);return await n.hooks?.afterLoad?.({cwd:e,config:n,tokens:a,...t?{path:t}:{}}),{config:n,...t?{path:t}:{},tokens:a,projectType:i(e,n)}}export{o as findConfigFile,c as loadToolingConfig};
1
+ import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{CONFIG_FILE_NAMES as n,resolveTokens as r}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as i}from"./project-type.js";import a from"node:fs";function o(t=process.cwd()){for(let r of n){let n=e.resolve(t,r);if(a.existsSync(n))return n}}async function s(e){if(e.endsWith(`.json`))return JSON.parse(a.readFileSync(e,`utf-8`));let n=t(e).href;try{let e=await import(n);return e.default??e}catch(e){try{let{tsImport:e}=await import(`/home/runner/work/toolchain/toolchain/node_modules/tsx/dist/esm/api/index.mjs`),t=await e(n,import.meta.url);return t.default??t}catch{throw e}}}async function c(e=process.cwd()){let t=o(e),n={};if(t){let e=await s(t),r=e&&typeof e==`object`?e.toolchain:void 0;r&&typeof r==`object`&&(n=r)}let a=r(n);return await n.hooks?.afterLoad?.({cwd:e,config:n,tokens:a,...t?{path:t}:{}}),{config:n,...t?{path:t}:{},tokens:a,projectType:i(e,n)}}export{o as findConfigFile,c as loadToolingConfig};
@@ -1,6 +1,6 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- import { TsConfigJson } from "C:\\Users\\user\\coding\\projects\\deltabox\\@deltabox\\toolchain\\node_modules\\type-fest\\index.js";
3
+ import { TsConfigJson } from "/home/runner/work/toolchain/toolchain/node_modules/type-fest/index.js";
4
4
  //#region packages/tsconfig/src/cli/generate/utils.d.ts
5
5
  export type GeneratedTsconfigResult = ReturnType<typeof generateTsconfig>;
6
6
  export declare function generateTsconfig(options: {
@@ -2,7 +2,8 @@ import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
3
  import { viteCommands } from "./cli/index.js";
4
4
  import { VP_COMMANDS, VpCommandInfo, VpGroup, viteCommandName } from "./commands.js";
5
+ import { DBX_TASKS, DbxPluginOptions, DbxSource, DbxViteConfig, ResolvedDbx, dbx, defineDbxConfig, resolveDbx, runDbx } from "./plugin.js";
5
6
  import { viteProvider } from "./provider.js";
6
7
  import { DEFAULT_LINT_IGNORE, DEFAULT_TEST_INCLUDE, renderViteConfig, viteConfigObject, viteSyncTask } from "./sync.js";
7
8
  import { ResolvedVp, RunVpOptions, VpResult, VpSource, describeVp, hasVp, resolveVp, runVp, vpVersion, which } from "./vp.js";
8
- export { DEFAULT_LINT_IGNORE, DEFAULT_TEST_INCLUDE, ResolvedVp, RunVpOptions, VP_COMMANDS, VpCommandInfo, VpGroup, VpResult, VpSource, describeVp, hasVp, renderViteConfig, resolveVp, runVp, viteCommandName, viteCommands, viteConfigObject, viteProvider, viteSyncTask, vpVersion, which };
9
+ export { DBX_TASKS, DEFAULT_LINT_IGNORE, DEFAULT_TEST_INCLUDE, DbxPluginOptions, DbxSource, DbxViteConfig, ResolvedDbx, ResolvedVp, RunVpOptions, VP_COMMANDS, VpCommandInfo, VpGroup, VpResult, VpSource, dbx, defineDbxConfig, describeVp, hasVp, renderViteConfig, resolveDbx, resolveVp, runDbx, runVp, viteCommandName, viteCommands, viteConfigObject, viteProvider, viteSyncTask, vpVersion, which };
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{VP_COMMANDS as e,viteCommandName as t}from"./commands.js";import{describeVp as n,hasVp as r,resolveVp as i,runVp as a,vpVersion as o,which as s}from"./vp.js";import{viteCommands as c}from"./cli/index.js";import{viteProvider as l}from"./provider.js";import{DEFAULT_LINT_IGNORE as u,DEFAULT_TEST_INCLUDE as d,renderViteConfig as f,viteConfigObject as p,viteSyncTask as m}from"./sync.js";export{u as DEFAULT_LINT_IGNORE,d as DEFAULT_TEST_INCLUDE,e as VP_COMMANDS,n as describeVp,r as hasVp,f as renderViteConfig,i as resolveVp,a as runVp,t as viteCommandName,c as viteCommands,p as viteConfigObject,l as viteProvider,m as viteSyncTask,o as vpVersion,s as which};
1
+ import"node:path";import"node:url";import.meta.url;import{VP_COMMANDS as e,viteCommandName as t}from"./commands.js";import{describeVp as n,hasVp as r,resolveVp as i,runVp as a,vpVersion as o,which as s}from"./vp.js";import{viteCommands as c}from"./cli/index.js";import{DBX_TASKS as l,dbx as u,defineDbxConfig as d,resolveDbx as f,runDbx as p}from"./plugin.js";import{viteProvider as m}from"./provider.js";import{DEFAULT_LINT_IGNORE as h,DEFAULT_TEST_INCLUDE as g,renderViteConfig as _,viteConfigObject as v,viteSyncTask as y}from"./sync.js";export{l as DBX_TASKS,h as DEFAULT_LINT_IGNORE,g as DEFAULT_TEST_INCLUDE,e as VP_COMMANDS,u as dbx,d as defineDbxConfig,n as describeVp,r as hasVp,_ as renderViteConfig,f as resolveDbx,i as resolveVp,p as runDbx,a as runVp,t as viteCommandName,c as viteCommands,v as viteConfigObject,m as viteProvider,y as viteSyncTask,o as vpVersion,s as which};
@@ -0,0 +1,65 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { Plugin, UserConfig } from "/home/runner/work/toolchain/toolchain/node_modules/vite/dist/node/index.js";
4
+ //#region packages/vite/src/plugin.d.ts
5
+ /** How a `dbx` binary was resolved. */
6
+ export type DbxSource = 'local' | 'global' | 'npx';
7
+ /** A resolved `dbx` invocation. */
8
+ export interface ResolvedDbx {
9
+ /** The executable to spawn. */
10
+ exe: string;
11
+ /** Leading args (eg. `--yes @deltabox/toolchain` for the npx fallback). */
12
+ args: string[];
13
+ /** Where the binary came from. */
14
+ source: DbxSource;
15
+ }
16
+ /**
17
+ * Resolve the `dbx` binary: project-local shim -> global `PATH` ->
18
+ * `npx --yes @deltabox/toolchain`.
19
+ */
20
+ export declare function resolveDbx(cwd?: string): ResolvedDbx;
21
+ /** Run `dbx <args>` in `cwd`, streaming output. Resolves with the exit code. */
22
+ export declare function runDbx(args: string[], cwd?: string): Promise<number>;
23
+ /** The Vite+ tasks the wrapper registers, keyed by task name. */
24
+ export declare const DBX_TASKS: {
25
+ readonly 'dbx:sync': {
26
+ readonly command: 'dbx sync';
27
+ };
28
+ readonly 'dbx:check': {
29
+ readonly command: 'dbx sync --check';
30
+ };
31
+ };
32
+ export interface DbxPluginOptions {
33
+ /** Project root (default: the resolved Vite root). */
34
+ cwd?: string;
35
+ /** Run `dbx sync` before the dev server / build (default true). */
36
+ sync?: boolean;
37
+ /**
38
+ * Run `dbx sync --check` and fail the build when generated files are out of
39
+ * date (default: true when `CI` is set in the environment).
40
+ */
41
+ check?: boolean;
42
+ /** Re-sync when a dbx input file changes in watch mode (default true). */
43
+ watch?: boolean;
44
+ /** Debounce (ms) for watch-triggered syncs (default 150). */
45
+ debounce?: number;
46
+ }
47
+ /**
48
+ * A Vite / Vite+ plugin that runs `@deltabox/toolchain` in the Vite pipeline:
49
+ * `dbx sync` before dev/build (or `dbx sync --check` in CI) and a debounced
50
+ * re-sync when a dbx input changes. Add it to `plugins`, or use
51
+ * {@link defineDbxConfig}, which also registers the `vp run dbx:*` tasks.
52
+ */
53
+ export declare function dbx(options?: DbxPluginOptions): Plugin;
54
+ /** A Vite+ config: Vite's `UserConfig` plus the Vite+ `run` block. */
55
+ export type DbxViteConfig = UserConfig & {
56
+ run?: {
57
+ tasks?: Record<string, unknown>;
58
+ } & Record<string, unknown>;
59
+ };
60
+ /**
61
+ * Wrap a Vite+ config with dbx: prepend the {@link dbx} plugin and register the
62
+ * `dbx:sync` / `dbx:check` tasks.
63
+ */
64
+ export declare function defineDbxConfig(config: DbxViteConfig, options?: DbxPluginOptions): DbxViteConfig;
65
+ //#endregion
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{spawnCross as t}from"../../shared/src/run.js";import"../../shared/src/index.js";import{which as n}from"./vp.js";import r from"node:fs";const i=process.platform===`win32`;function a(t){let n=e.join(t,`node_modules`,`.bin`,`dbx`);return i?[`${n}.cmd`,`${n}.exe`,`${n}.ps1`,n]:[n]}function o(e=process.cwd()){for(let t of a(e))if(r.existsSync(t))return{exe:t,args:[],source:`local`};let t=n(`dbx`);return t?{exe:t,args:[],source:`global`}:{exe:i?`npx.cmd`:`npx`,args:[`--yes`,`@deltabox/toolchain`],source:`npx`}}function s(e,n=process.cwd()){let r=o(n);return new Promise(i=>{let a=t(r.exe,[...r.args,...e],{cwd:n,env:process.env,stdio:`inherit`});a.on(`error`,()=>i(1)),a.on(`exit`,e=>i(e??0))})}const c={"dbx:sync":{command:`dbx sync`},"dbx:check":{command:`dbx sync --check`}},l=[/dbx\.config\.[cm]?[jt]s$/,/tsconfig\.(?:default|monorepo)\.json$/];function u(e={}){let t=e.check??!!process.env.CI,n=e.sync??!0,r=e.watch??!0,i=e.debounce??150,a=e.cwd??process.cwd(),o,c=!1,u=async()=>{if(!c){c=!0;try{await s([`sync`],a)}finally{c=!1}}},d=()=>{o&&clearTimeout(o),o=setTimeout(()=>{u()},i)};return{name:`deltabox-toolchain`,enforce:`pre`,configResolved(t){a=e.cwd??t.root},async buildStart(){t?await s([`sync`,`--check`],a)!==0&&this.error("deltabox-toolchain: generated files are out of date — run `dbx sync`."):n&&await u()},watchChange(e){r&&n&&l.some(t=>t.test(e))&&d()}}}function d(e,t={}){let n=e.plugins??[],r=e.run??{};return{...e,plugins:[u(t),...n],run:{...r,tasks:{...c,...r.tasks}}}}export{c as DBX_TASKS,u as dbx,d as defineDbxConfig,o as resolveDbx,s as runDbx};
package/dist/vite.d.ts CHANGED
@@ -2,8 +2,9 @@ import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
3
  import { viteCommands } from "./packages/vite/src/cli/index.js";
4
4
  import { VP_COMMANDS, VpCommandInfo, VpGroup, viteCommandName } from "./packages/vite/src/commands.js";
5
+ import { DBX_TASKS, DbxPluginOptions, DbxSource, DbxViteConfig, ResolvedDbx, dbx, defineDbxConfig, resolveDbx, runDbx } from "./packages/vite/src/plugin.js";
5
6
  import { viteProvider } from "./packages/vite/src/provider.js";
6
7
  import { DEFAULT_LINT_IGNORE, DEFAULT_TEST_INCLUDE, renderViteConfig, viteConfigObject, viteSyncTask } from "./packages/vite/src/sync.js";
7
8
  import { ResolvedVp, RunVpOptions, VpResult, VpSource, describeVp, hasVp, resolveVp, runVp, vpVersion, which } from "./packages/vite/src/vp.js";
8
9
  import "./packages/vite/src/index.js";
9
- export { DEFAULT_LINT_IGNORE, DEFAULT_TEST_INCLUDE, ResolvedVp, RunVpOptions, VP_COMMANDS, VpCommandInfo, VpGroup, VpResult, VpSource, describeVp, hasVp, renderViteConfig, resolveVp, runVp, viteCommandName, viteCommands, viteConfigObject, viteProvider, viteSyncTask, vpVersion, which };
10
+ export { DBX_TASKS, DEFAULT_LINT_IGNORE, DEFAULT_TEST_INCLUDE, DbxPluginOptions, DbxSource, DbxViteConfig, ResolvedDbx, ResolvedVp, RunVpOptions, VP_COMMANDS, VpCommandInfo, VpGroup, VpResult, VpSource, dbx, defineDbxConfig, describeVp, hasVp, renderViteConfig, resolveDbx, resolveVp, runDbx, runVp, viteCommandName, viteCommands, viteConfigObject, viteProvider, viteSyncTask, vpVersion, which };
package/dist/vite.js CHANGED
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{VP_COMMANDS as e,viteCommandName as t}from"./packages/vite/src/commands.js";import{describeVp as n,hasVp as r,resolveVp as i,runVp as a,vpVersion as o,which as s}from"./packages/vite/src/vp.js";import{viteCommands as c}from"./packages/vite/src/cli/index.js";import{viteProvider as l}from"./packages/vite/src/provider.js";import{DEFAULT_LINT_IGNORE as u,DEFAULT_TEST_INCLUDE as d,renderViteConfig as f,viteConfigObject as p,viteSyncTask as m}from"./packages/vite/src/sync.js";import"./packages/vite/src/index.js";export{u as DEFAULT_LINT_IGNORE,d as DEFAULT_TEST_INCLUDE,e as VP_COMMANDS,n as describeVp,r as hasVp,f as renderViteConfig,i as resolveVp,a as runVp,t as viteCommandName,c as viteCommands,p as viteConfigObject,l as viteProvider,m as viteSyncTask,o as vpVersion,s as which};
1
+ import"node:path";import"node:url";import.meta.url;import{VP_COMMANDS as e,viteCommandName as t}from"./packages/vite/src/commands.js";import{describeVp as n,hasVp as r,resolveVp as i,runVp as a,vpVersion as o,which as s}from"./packages/vite/src/vp.js";import{viteCommands as c}from"./packages/vite/src/cli/index.js";import{DBX_TASKS as l,dbx as u,defineDbxConfig as d,resolveDbx as f,runDbx as p}from"./packages/vite/src/plugin.js";import{viteProvider as m}from"./packages/vite/src/provider.js";import{DEFAULT_LINT_IGNORE as h,DEFAULT_TEST_INCLUDE as g,renderViteConfig as _,viteConfigObject as v,viteSyncTask as y}from"./packages/vite/src/sync.js";import"./packages/vite/src/index.js";export{l as DBX_TASKS,h as DEFAULT_LINT_IGNORE,g as DEFAULT_TEST_INCLUDE,e as VP_COMMANDS,u as dbx,d as defineDbxConfig,n as describeVp,r as hasVp,_ as renderViteConfig,f as resolveDbx,i as resolveVp,p as runDbx,a as runVp,t as viteCommandName,c as viteCommands,v as viteConfigObject,m as viteProvider,y as viteSyncTask,o as vpVersion,s as which};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deltabox/toolchain",
3
- "version": "1.0.7",
3
+ "version": "1.1.21",
4
4
  "description": "All-in-one toolchain: scaffold projects, manage templates, configs, tsconfigs, changelogs and builds.",
5
5
  "homepage": "https://toolchain.deltabox.studio",
6
6
  "author": "Victor Sango <victor@deltabox.studio>",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public",
51
- "provenance": false
51
+ "provenance": true
52
52
  },
53
53
  "workspaces": [
54
54
  "packages/*",
@@ -65,17 +65,17 @@
65
65
  "devDependencies": {
66
66
  "@commitlint/cli": "^21.2.2",
67
67
  "@commitlint/config-conventional": "^21.2.2",
68
- "@deltabox/toolchain-biome": "1.0.7",
69
- "@deltabox/toolchain-changelog": "1.0.7",
70
- "@deltabox/toolchain-config": "1.0.7",
71
- "@deltabox/toolchain-core": "1.0.7",
72
- "@deltabox/toolchain-migrate": "1.0.7",
73
- "@deltabox/toolchain-project": "1.0.7",
74
- "@deltabox/toolchain-shared": "1.0.7",
75
- "@deltabox/toolchain-template": "1.0.7",
76
- "@deltabox/toolchain-tsconfig": "1.0.7",
77
- "@deltabox/toolchain-tsdown": "1.0.7",
78
- "@deltabox/toolchain-vite": "1.0.7",
68
+ "@deltabox/toolchain-biome": "1.1.21",
69
+ "@deltabox/toolchain-changelog": "1.1.21",
70
+ "@deltabox/toolchain-config": "1.1.21",
71
+ "@deltabox/toolchain-core": "1.1.21",
72
+ "@deltabox/toolchain-migrate": "1.1.21",
73
+ "@deltabox/toolchain-project": "1.1.21",
74
+ "@deltabox/toolchain-shared": "1.1.21",
75
+ "@deltabox/toolchain-template": "1.1.21",
76
+ "@deltabox/toolchain-tsconfig": "1.1.21",
77
+ "@deltabox/toolchain-tsdown": "1.1.21",
78
+ "@deltabox/toolchain-vite": "1.1.21",
79
79
  "@types/node": "^22.10.2",
80
80
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
81
81
  "cross-env": "^10.1.0",