@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/CHANGELOG.md +268 -32
- package/LICENSE +373 -373
- package/README.md +72 -72
- package/dist/package.js +1 -1
- package/dist/packages/changelog/src/utils/format.js +1 -1
- package/dist/packages/changelog/src/utils/repo.js +1 -1
- package/dist/packages/changelog/src/workflows.d.ts +2 -0
- package/dist/packages/changelog/src/workflows.js +1 -1
- package/dist/packages/core/src/loader.js +1 -1
- package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +1 -1
- package/dist/packages/vite/src/index.d.ts +2 -1
- package/dist/packages/vite/src/index.js +1 -1
- package/dist/packages/vite/src/plugin.d.ts +65 -0
- package/dist/packages/vite/src/plugin.js +1 -0
- package/dist/vite.d.ts +2 -1
- package/dist/vite.js +1 -1
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
# deltabox toolchain
|
|
2
2
|
|
|
3
|
-
|
|
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
|
[](./package.json)
|
|
7
|
-
[](https://www.npmjs.com/package/@deltabox/toolchain)
|
|
6
|
+
[](https://github.com/deltabox-studio/toolchain/actions/workflows/ci.yml)
|
|
7
|
+
[](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
|
-
|
|
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
|
-
- [
|
|
20
|
-
- [
|
|
21
|
-
- [
|
|
22
|
-
- [
|
|
23
|
-
- [
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
- [
|
|
28
|
-
- [
|
|
29
|
-
- [
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
|
232
|
+
The source pages live in `apps/docs`.
|
|
233
233
|
|
|
234
234
|
## License
|
|
235
235
|
|
|
236
|
-
[MPL-2.0](./LICENSE) ©
|
|
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.
|
|
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:`
|
|
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=
|
|
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 -
|
|
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(
|
|
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 "
|
|
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{
|
|
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{
|
|
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.
|
|
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":
|
|
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.
|
|
69
|
-
"@deltabox/toolchain-changelog": "1.
|
|
70
|
-
"@deltabox/toolchain-config": "1.
|
|
71
|
-
"@deltabox/toolchain-core": "1.
|
|
72
|
-
"@deltabox/toolchain-migrate": "1.
|
|
73
|
-
"@deltabox/toolchain-project": "1.
|
|
74
|
-
"@deltabox/toolchain-shared": "1.
|
|
75
|
-
"@deltabox/toolchain-template": "1.
|
|
76
|
-
"@deltabox/toolchain-tsconfig": "1.
|
|
77
|
-
"@deltabox/toolchain-tsdown": "1.
|
|
78
|
-
"@deltabox/toolchain-vite": "1.
|
|
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",
|