Minor Changes
-
#859
3015280Thanks @ask-bonk! - Adds non-interactive mode tocreate-emdashfor CI / scripted scaffolding (#711). Pass--template,--platform,--pm,--install/--no-install,--yes, and--forceto skip prompts; partial flag use only prompts for unset fields. Interactive flow is unchanged when no flags are supplied.--template <key>accepts a bare template (blog | starter | marketing | portfolio) or the combined form<platform>:<key>(e.g.cloudflare:blog).--pm <key>(alias--package-manager) selects the package manager.--yes/-yaccepts defaults for any unset field (cloudflare, blog, detected pm,my-sitefor an unset name).--forceis required alongside--yesto overwrite a non-empty target directory; without it, the CLI refuses rather than silently clobbering files.--help/-hprints usage. Unknown flags fail loudly so typos don't silently drop into interactive mode.- An extra positional argument (e.g.
npm create emdash my blogwith a space instead of a hyphen) is now rejected as a likely typo.
No new dependencies — built on
node:util'sparseArgs. -
#811
cee403dThanks @ascorbic! - Scaffolds a freshEMDASH_ENCRYPTION_KEYinto.dev.vars(Cloudflare
templates) or.env(Node templates) on project creation, and ensures the
file is gitignored. Idempotent — won't overwrite an existing key on re-runs.
Patch Changes
-
#852
e73bb5fThanks @ask-bonk! - Removes the "Blank" template from thenpm create emdashpicker. The minimal-content template isstarter; the previously listedblankonly existed for the Node.js path (never Cloudflare) and was confusing. PickStarterfor a minimal site on either platform. -
#869
a8bac5dThanks @ask-bonk! - Fixes autosave validation errors on content seeded from the blog,
portfolio, and starter templates (issue #867).Two related issues:
_keywas strictly required on Portable Text blocks by the
generated Zod schema, but the rest of the block schema is
.passthrough()and the editor regenerates_keyon every change,
so requiring it on input rejected legitimate seed/import data
without protecting any real invariant._keyis now optional in the
validator.- The portfolio template shipped
featured_imageas bare URL strings.
imagefields validate as{ id, ... }objects, so any user who
edited a different field on a portfolio entry hit
featured_image: expected object, received string. The portfolio
seeds now use$mediareferences in the same shape as the blog
template, and every shipped template seed has stable_keys on its
Portable Text nodes.
A regression test runs every shipped template seed through the same
validator the autosave endpoint uses, so future template changes that
break this invariant fail before release.