mirror of
https://github.com/jakejarvis/stanza.git
synced 2026-07-16 18:05:58 -04:00
chore: release
This commit is contained in:
@@ -1,7 +0,0 @@
|
||||
---
|
||||
"stanza-cli": minor
|
||||
---
|
||||
|
||||
Add multi-choice **add-on** modules. A `Module` is now a discriminated union on `kind` (`"slot"` default, or `"addon"` carrying a `category`), and `stanza.json` records add-ons in a new `addons` field keyed by category (each holding 0..n modules). Add-on categories (`testing`, `tooling`, `deploy`, `email`, `monorepo`) are disjoint from slots, so they never constrain another module's adapter dispatch — but they can still target a framework via `peers` + per-framework adapters.
|
||||
|
||||
Ships the first two add-ons: `testing-vitest` and `testing-playwright`. They coexist in one project (`stanza add testing vitest`, `stanza add testing playwright`), expose `--testing vitest,playwright` on `stanza init --yes`, and surface as multi-select cards in the web builder. Existing `stanza.json` files are unaffected (the `addons` field defaults to empty).
|
||||
@@ -1,8 +0,0 @@
|
||||
---
|
||||
"stanza-cli": minor
|
||||
"create-stanza": minor
|
||||
---
|
||||
|
||||
Add the **`api`** category to the taxonomy (single-choice, `home: package` → `packages/api/`), matching the documented roadmap for a typed RPC layer between the framework and your services. No first-party modules ship for it yet, so it's inert until a `trpc`/`orpc` module lands — the wizard skips it and the web builder hides it while empty. This is purely additive: `stanza.json`'s schema is unchanged (the `modules` record already keys on arbitrary categories).
|
||||
|
||||
Both published packages (`stanza-cli`, `create-stanza`) now ship npm READMEs. `stanza-cli` also exposes a `stanza-cli` binary alongside the primary `stanza` command, so `npx stanza-cli …` (and `bunx` / `pnpm dlx` / `yarn dlx`) resolve predictably regardless of how each runner handles a single differently-named bin.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
"stanza-cli": minor
|
||||
---
|
||||
|
||||
Unify the module taxonomy into one `Category` concept. The old slot/add-on split conflated two orthogonal properties; categories now carry them explicitly: `cardinality` (`"one"` single-choice / `"many"` coexisting) and `home` (`app` / `repo` / `package`, a tagged union replacing the `packageDir` + `repoScoped` pair). A `Module` is no longer a discriminated union — it carries a single `category` field.
|
||||
|
||||
The manifest unifies to one `modules` record keyed by category, holding arrays (`cardinality: "one"` categories are kept to ≤ 1 record at install time). This bumps `stanza.json`'s version to `0.2` — a clean break with no migration (Stanza is pre-1.0 and unpublished). Constraint-bearing is now emergent: the resolver treats only `cardinality: "one"` categories as peers, so a multi-choice category like `testing` can never accidentally become a peer. Install routing lives in one `categoryHome` lookup shared by the CLI runner and the web preview.
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
"stanza-cli": minor
|
||||
---
|
||||
|
||||
Unify registry loading behind a single **main file**, add transactional apply rollback, and add `stanza doctor`.
|
||||
|
||||
- **Registry main file.** A registry is now addressed by the full URL/path to its main JSON file (the index), which carries a required `path` on every module entry; the loader resolves each module relative to the main file over `file://` and `http(s)://` identically. The `modules/<category>-<id>.json` naming convention, the `.ts` source-tree loader, the in-repo auto-detect, and the inline-template disk fallback are all gone — one loader, no conventions. `STANZA_REGISTRY` must be the full path/URL to a main JSON file (not a directory). **Breaking** (pre-release, clean break): the registry index is now `schemaVersion: 2`, and a third-party `registries` object entry is `{ url, headers?, params? }` where `url` is the full main-file URL — `indexUrl` and `{category}`/`{id}` URL templating are removed.
|
||||
|
||||
- **Auto-rollback.** `stanza add` (and each module in `stanza init`) now wraps its file writes in a transaction: if any step throws — including mid-codemod — the touched files and `stanza.json` are restored to their pre-apply state instead of leaving a partial change.
|
||||
|
||||
- **`stanza doctor`.** New read-only command that checks `stanza.json` against the filesystem (claimed files/deps/scripts/env vars still present, internal packages wired) and reports drift, exiting non-zero when found.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
"stanza-cli": minor
|
||||
---
|
||||
|
||||
Promote template substitution into `@stanza/registry` and switch the syntax to dotted Mustache-style paths. `renderTemplate` and `buildRenderContext` (previously private to the CLI / `@stanza/codemods`) now live next to `synthesizeManifest` / `synthesizeEnvExample` / `synthesizePackageJsons`, joined by a new `synthesizeTemplates` that returns the fully-substituted file list for a resolved selection. The web builder's preview now calls the same code path the CLI does at apply time, so file previews stay byte-identical to what `stanza init` writes — fixes a regression where `{{dbPackageName}}` (and friends) showed up unsubstituted in the preview.
|
||||
|
||||
The template DSL itself moves to dotted paths: `{{project.name}}` (was `{{projectName}}`), `{{project.appDir}}` (was `{{appDir}}`), `{{package.name}}` (was `{{packageName}}`, the active module's own package), and `{{packages.<dir>.name}}` (was `{{<dir>PackageName}}`, e.g. `{{packages.db.name}}` for cross-package imports). Self-documenting, composes for future per-package fields (`{{packages.db.version}}`, `{{packages.db.path}}`) without inventing new flat keys, and aligns with how Mustache resolves nested contexts. Existing first-party modules (`auth-better-auth`, `auth-clerk`) migrated; third-party modules referencing the old flat keys will need a one-line rename.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
"stanza-cli": minor
|
||||
---
|
||||
|
||||
Add a single-choice **tooling** slot for the lint/format toolchain, with three modules: `eslint-prettier` (ESLint flat config + Prettier, per-framework adapters), `biome`, and `oxlint-oxfmt` (both framework-agnostic). Modeled as a slot rather than a multi-choice add-on because the three toolchains are mutually exclusive substitutes.
|
||||
|
||||
Introduces **repo-scoped** slots (`repoScoped: true` on a `Slot`): their config files land at the monorepo root and their scripts/devDependencies merge into the root `package.json`, since one lint/format config governs every workspace. This is a third install home alongside app-scoped and package-scoped slots.
|
||||
|
||||
Also drops the stale `lint: "next lint"` script from the `framework-next` module — `next lint` was removed in Next 16 — so a tooling pick owns the root `lint`/`format` scripts cleanly. The CLI gains `--tooling <id>` on `stanza init --yes` and the web builder renders a single-select "Tooling" card, both automatically from the slot taxonomy.
|
||||
@@ -0,0 +1,32 @@
|
||||
# stanza-cli
|
||||
|
||||
## 0.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- [`19b5e51`](https://github.com/jakejarvis/stanza/commit/19b5e51075383e7c7fda14eb5182d8bdb13be7cb) - Add multi-choice **add-on** modules. A `Module` is now a discriminated union on `kind` (`"slot"` default, or `"addon"` carrying a `category`), and `stanza.json` records add-ons in a new `addons` field keyed by category (each holding 0..n modules). Add-on categories (`testing`, `tooling`, `deploy`, `email`, `monorepo`) are disjoint from slots, so they never constrain another module's adapter dispatch — but they can still target a framework via `peers` + per-framework adapters.
|
||||
|
||||
Ships the first two add-ons: `testing-vitest` and `testing-playwright`. They coexist in one project (`stanza add testing vitest`, `stanza add testing playwright`), expose `--testing vitest,playwright` on `stanza init --yes`, and surface as multi-select cards in the web builder. Existing `stanza.json` files are unaffected (the `addons` field defaults to empty).
|
||||
|
||||
- [`7349b53`](https://github.com/jakejarvis/stanza/commit/7349b53b82dc987873cb75baef92261cc08e2f82) - Add the **`api`** category to the taxonomy (single-choice, `home: package` → `packages/api/`), matching the documented roadmap for a typed RPC layer between the framework and your services. No first-party modules ship for it yet, so it's inert until a `trpc`/`orpc` module lands — the wizard skips it and the web builder hides it while empty. This is purely additive: `stanza.json`'s schema is unchanged (the `modules` record already keys on arbitrary categories).
|
||||
|
||||
Both published packages (`stanza-cli`, `create-stanza`) now ship npm READMEs. `stanza-cli` also exposes a `stanza-cli` binary alongside the primary `stanza` command, so `npx stanza-cli …` (and `bunx` / `pnpm dlx` / `yarn dlx`) resolve predictably regardless of how each runner handles a single differently-named bin.
|
||||
|
||||
- [`71f4c9d`](https://github.com/jakejarvis/stanza/commit/71f4c9d89b4cf863bbb5a1fb3889024f9a0a01b6) - Unify the module taxonomy into one `Category` concept. The old slot/add-on split conflated two orthogonal properties; categories now carry them explicitly: `cardinality` (`"one"` single-choice / `"many"` coexisting) and `home` (`app` / `repo` / `package`, a tagged union replacing the `packageDir` + `repoScoped` pair). A `Module` is no longer a discriminated union — it carries a single `category` field.
|
||||
|
||||
The manifest unifies to one `modules` record keyed by category, holding arrays (`cardinality: "one"` categories are kept to ≤ 1 record at install time). This bumps `stanza.json`'s version to `0.2` — a clean break with no migration (Stanza is pre-1.0 and unpublished). Constraint-bearing is now emergent: the resolver treats only `cardinality: "one"` categories as peers, so a multi-choice category like `testing` can never accidentally become a peer. Install routing lives in one `categoryHome` lookup shared by the CLI runner and the web preview.
|
||||
|
||||
- [`e89fb63`](https://github.com/jakejarvis/stanza/commit/e89fb63c3128343346a0f5530901e333a4001b13) - Unify registry loading behind a single **main file**, add transactional apply rollback, and add `stanza doctor`.
|
||||
- **Registry main file.** A registry is now addressed by the full URL/path to its main JSON file (the index), which carries a required `path` on every module entry; the loader resolves each module relative to the main file over `file://` and `http(s)://` identically. The `modules/<category>-<id>.json` naming convention, the `.ts` source-tree loader, the in-repo auto-detect, and the inline-template disk fallback are all gone — one loader, no conventions. `STANZA_REGISTRY` must be the full path/URL to a main JSON file (not a directory). **Breaking** (pre-release, clean break): the registry index is now `schemaVersion: 2`, and a third-party `registries` object entry is `{ url, headers?, params? }` where `url` is the full main-file URL — `indexUrl` and `{category}`/`{id}` URL templating are removed.
|
||||
- **Auto-rollback.** `stanza add` (and each module in `stanza init`) now wraps its file writes in a transaction: if any step throws — including mid-codemod — the touched files and `stanza.json` are restored to their pre-apply state instead of leaving a partial change.
|
||||
- **`stanza doctor`.** New read-only command that checks `stanza.json` against the filesystem (claimed files/deps/scripts/env vars still present, internal packages wired) and reports drift, exiting non-zero when found.
|
||||
|
||||
- [`8c5433a`](https://github.com/jakejarvis/stanza/commit/8c5433aa3cf120a86b8cf3a7702ba6de0a005bd6) - Promote template substitution into `@stanza/registry` and switch the syntax to dotted Mustache-style paths. `renderTemplate` and `buildRenderContext` (previously private to the CLI / `@stanza/codemods`) now live next to `synthesizeManifest` / `synthesizeEnvExample` / `synthesizePackageJsons`, joined by a new `synthesizeTemplates` that returns the fully-substituted file list for a resolved selection. The web builder's preview now calls the same code path the CLI does at apply time, so file previews stay byte-identical to what `stanza init` writes — fixes a regression where `{{dbPackageName}}` (and friends) showed up unsubstituted in the preview.
|
||||
|
||||
The template DSL itself moves to dotted paths: `{{project.name}}` (was `{{projectName}}`), `{{project.appDir}}` (was `{{appDir}}`), `{{package.name}}` (was `{{packageName}}`, the active module's own package), and `{{packages.<dir>.name}}` (was `{{<dir>PackageName}}`, e.g. `{{packages.db.name}}` for cross-package imports). Self-documenting, composes for future per-package fields (`{{packages.db.version}}`, `{{packages.db.path}}`) without inventing new flat keys, and aligns with how Mustache resolves nested contexts. Existing first-party modules (`auth-better-auth`, `auth-clerk`) migrated; third-party modules referencing the old flat keys will need a one-line rename.
|
||||
|
||||
- [`65c02d4`](https://github.com/jakejarvis/stanza/commit/65c02d4a46406d8f2f97a238c8226e2a0e3001e7) - Add a single-choice **tooling** slot for the lint/format toolchain, with three modules: `eslint-prettier` (ESLint flat config + Prettier, per-framework adapters), `biome`, and `oxlint-oxfmt` (both framework-agnostic). Modeled as a slot rather than a multi-choice add-on because the three toolchains are mutually exclusive substitutes.
|
||||
|
||||
Introduces **repo-scoped** slots (`repoScoped: true` on a `Slot`): their config files land at the monorepo root and their scripts/devDependencies merge into the root `package.json`, since one lint/format config governs every workspace. This is a third install home alongside app-scoped and package-scoped slots.
|
||||
|
||||
Also drops the stale `lint: "next lint"` script from the `framework-next` module — `next lint` was removed in Next 16 — so a tooling pick owns the root `lint`/`format` scripts cleanly. The CLI gains `--tooling <id>` on `stanza init --yes` and the web builder renders a single-select "Tooling" card, both automatically from the slot taxonomy.
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "stanza-cli",
|
||||
"version": "0.0.0",
|
||||
"version": "0.1.0",
|
||||
"description": "Modular monorepo template CLI — shadcn for stacks.",
|
||||
"keywords": [
|
||||
"boilerplate",
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
# create-stanza
|
||||
|
||||
## 0.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- [`7349b53`](https://github.com/jakejarvis/stanza/commit/7349b53b82dc987873cb75baef92261cc08e2f82) - Add the **`api`** category to the taxonomy (single-choice, `home: package` → `packages/api/`), matching the documented roadmap for a typed RPC layer between the framework and your services. No first-party modules ship for it yet, so it's inert until a `trpc`/`orpc` module lands — the wizard skips it and the web builder hides it while empty. This is purely additive: `stanza.json`'s schema is unchanged (the `modules` record already keys on arbitrary categories).
|
||||
|
||||
Both published packages (`stanza-cli`, `create-stanza`) now ship npm READMEs. `stanza-cli` also exposes a `stanza-cli` binary alongside the primary `stanza` command, so `npx stanza-cli …` (and `bunx` / `pnpm dlx` / `yarn dlx`) resolve predictably regardless of how each runner handles a single differently-named bin.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`19b5e51`](https://github.com/jakejarvis/stanza/commit/19b5e51075383e7c7fda14eb5182d8bdb13be7cb), [`7349b53`](https://github.com/jakejarvis/stanza/commit/7349b53b82dc987873cb75baef92261cc08e2f82), [`71f4c9d`](https://github.com/jakejarvis/stanza/commit/71f4c9d89b4cf863bbb5a1fb3889024f9a0a01b6), [`e89fb63`](https://github.com/jakejarvis/stanza/commit/e89fb63c3128343346a0f5530901e333a4001b13), [`8c5433a`](https://github.com/jakejarvis/stanza/commit/8c5433aa3cf120a86b8cf3a7702ba6de0a005bd6), [`65c02d4`](https://github.com/jakejarvis/stanza/commit/65c02d4a46406d8f2f97a238c8226e2a0e3001e7)]:
|
||||
- stanza-cli@0.1.0
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-stanza",
|
||||
"version": "0.0.0",
|
||||
"version": "0.1.0",
|
||||
"description": "`npm init stanza` — the canonical entry point to the stanza wizard.",
|
||||
"keywords": [
|
||||
"cli",
|
||||
|
||||
Reference in New Issue
Block a user