diff --git a/blog-cloudflare/.agents/skills/creating-plugins/references/hooks.md b/blog-cloudflare/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/blog-cloudflare/.agents/skills/creating-plugins/references/hooks.md +++ b/blog-cloudflare/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/blog-cloudflare/package.json b/blog-cloudflare/package.json index 5496327..417b00a 100644 --- a/blog-cloudflare/package.json +++ b/blog-cloudflare/package.json @@ -16,11 +16,11 @@ "dependencies": { "@astrojs/cloudflare": "^14.0.0", "@astrojs/react": "^6.0.0", - "@emdash-cms/cloudflare": "^0.35.0", + "@emdash-cms/cloudflare": "^0.36.0", "@emdash-cms/plugin-forms": "^0.2.5", "@emdash-cms/plugin-webhook-notifier": "^0.2.0", "astro": "^7.0.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/blog-cloudflare/pnpm-workspace.yaml b/blog-cloudflare/pnpm-workspace.yaml index ef16ef5..aa12284 100644 --- a/blog-cloudflare/pnpm-workspace.yaml +++ b/blog-cloudflare/pnpm-workspace.yaml @@ -3,7 +3,6 @@ allowBuilds: esbuild: true workerd: true - better-sqlite3: false sharp: false # Supply-chain hardening: cooldown on brand-new releases (EmDash exempt) diff --git a/blog-cloudflare/src/worker.ts b/blog-cloudflare/src/worker.ts index 75fe3e2..670648c 100644 --- a/blog-cloudflare/src/worker.ts +++ b/blog-cloudflare/src/worker.ts @@ -5,4 +5,4 @@ export { PluginBridge }; export default { ...handler, scheduled: createScheduledHandler(), -}; +} satisfies ExportedHandler; diff --git a/blog-cloudflare/tsconfig.json b/blog-cloudflare/tsconfig.json index 0903753..c2e1508 100644 --- a/blog-cloudflare/tsconfig.json +++ b/blog-cloudflare/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "types": ["node"] }, - "include": ["src", ".astro/types.d.ts", "emdash-env.d.ts"] + "include": ["src", ".astro/types.d.ts", "emdash-env.d.ts", "worker-configuration.d.ts"] } diff --git a/blog-cloudflare/wrangler.jsonc b/blog-cloudflare/wrangler.jsonc index 23632b0..cd8fd49 100644 --- a/blog-cloudflare/wrangler.jsonc +++ b/blog-cloudflare/wrangler.jsonc @@ -22,8 +22,8 @@ "binding": "LOADER", }, ], - // General maintenance plus the bounded Media Usage lane (see src/worker.ts) + // General maintenance cron trigger "triggers": { - "crons": ["* * * * *", "*/2 * * * *"], + "crons": ["* * * * *"], }, } diff --git a/blog/.agents/skills/creating-plugins/references/hooks.md b/blog/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/blog/.agents/skills/creating-plugins/references/hooks.md +++ b/blog/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/blog/package.json b/blog/package.json index 9a29a73..bf2b130 100644 --- a/blog/package.json +++ b/blog/package.json @@ -18,8 +18,7 @@ "@astrojs/react": "^6.0.0", "@emdash-cms/plugin-audit-log": "^0.2.0", "astro": "^7.0.0", - "better-sqlite3": "^12.8.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/blog/pnpm-workspace.yaml b/blog/pnpm-workspace.yaml index 243f2bd..793caf0 100644 --- a/blog/pnpm-workspace.yaml +++ b/blog/pnpm-workspace.yaml @@ -2,7 +2,6 @@ # strictDepBuilds (pnpm >=10.26 / 11) passes. allowBuilds: esbuild: true - better-sqlite3: true sharp: true workerd: false diff --git a/marketing-cloudflare/.agents/skills/creating-plugins/references/hooks.md b/marketing-cloudflare/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/marketing-cloudflare/.agents/skills/creating-plugins/references/hooks.md +++ b/marketing-cloudflare/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/marketing-cloudflare/package.json b/marketing-cloudflare/package.json index 9c3d58a..8d3cedd 100644 --- a/marketing-cloudflare/package.json +++ b/marketing-cloudflare/package.json @@ -16,11 +16,11 @@ "dependencies": { "@astrojs/cloudflare": "^14.0.0", "@astrojs/react": "^6.0.0", - "@emdash-cms/cloudflare": "^0.35.0", + "@emdash-cms/cloudflare": "^0.36.0", "@iconify-json/ph": "^1.2.2", "astro": "^7.0.0", "astro-iconset": "^0.0.4", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/marketing-cloudflare/pnpm-workspace.yaml b/marketing-cloudflare/pnpm-workspace.yaml index ef16ef5..aa12284 100644 --- a/marketing-cloudflare/pnpm-workspace.yaml +++ b/marketing-cloudflare/pnpm-workspace.yaml @@ -3,7 +3,6 @@ allowBuilds: esbuild: true workerd: true - better-sqlite3: false sharp: false # Supply-chain hardening: cooldown on brand-new releases (EmDash exempt) diff --git a/marketing-cloudflare/src/worker.ts b/marketing-cloudflare/src/worker.ts index 75fe3e2..670648c 100644 --- a/marketing-cloudflare/src/worker.ts +++ b/marketing-cloudflare/src/worker.ts @@ -5,4 +5,4 @@ export { PluginBridge }; export default { ...handler, scheduled: createScheduledHandler(), -}; +} satisfies ExportedHandler; diff --git a/marketing-cloudflare/wrangler.jsonc b/marketing-cloudflare/wrangler.jsonc index e5e23e7..fcc837d 100644 --- a/marketing-cloudflare/wrangler.jsonc +++ b/marketing-cloudflare/wrangler.jsonc @@ -22,8 +22,8 @@ "binding": "LOADER", }, ], - // General maintenance plus the bounded Media Usage lane (see src/worker.ts) + // General maintenance cron trigger "triggers": { - "crons": ["* * * * *", "*/2 * * * *"], + "crons": ["* * * * *"], }, } diff --git a/marketing/.agents/skills/creating-plugins/references/hooks.md b/marketing/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/marketing/.agents/skills/creating-plugins/references/hooks.md +++ b/marketing/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/marketing/package.json b/marketing/package.json index 3b50951..6147bfc 100644 --- a/marketing/package.json +++ b/marketing/package.json @@ -19,8 +19,7 @@ "@iconify-json/ph": "^1.2.2", "astro": "^7.0.0", "astro-iconset": "^0.0.4", - "better-sqlite3": "^12.8.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/marketing/pnpm-workspace.yaml b/marketing/pnpm-workspace.yaml index 243f2bd..793caf0 100644 --- a/marketing/pnpm-workspace.yaml +++ b/marketing/pnpm-workspace.yaml @@ -2,7 +2,6 @@ # strictDepBuilds (pnpm >=10.26 / 11) passes. allowBuilds: esbuild: true - better-sqlite3: true sharp: true workerd: false diff --git a/portfolio-cloudflare/.agents/skills/creating-plugins/references/hooks.md b/portfolio-cloudflare/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/portfolio-cloudflare/.agents/skills/creating-plugins/references/hooks.md +++ b/portfolio-cloudflare/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/portfolio-cloudflare/package.json b/portfolio-cloudflare/package.json index 32ec6d9..2eaaed3 100644 --- a/portfolio-cloudflare/package.json +++ b/portfolio-cloudflare/package.json @@ -16,9 +16,9 @@ "dependencies": { "@astrojs/cloudflare": "^14.0.0", "@astrojs/react": "^6.0.0", - "@emdash-cms/cloudflare": "^0.35.0", + "@emdash-cms/cloudflare": "^0.36.0", "astro": "^7.0.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/portfolio-cloudflare/pnpm-workspace.yaml b/portfolio-cloudflare/pnpm-workspace.yaml index ef16ef5..aa12284 100644 --- a/portfolio-cloudflare/pnpm-workspace.yaml +++ b/portfolio-cloudflare/pnpm-workspace.yaml @@ -3,7 +3,6 @@ allowBuilds: esbuild: true workerd: true - better-sqlite3: false sharp: false # Supply-chain hardening: cooldown on brand-new releases (EmDash exempt) diff --git a/portfolio-cloudflare/src/worker.ts b/portfolio-cloudflare/src/worker.ts index 75fe3e2..670648c 100644 --- a/portfolio-cloudflare/src/worker.ts +++ b/portfolio-cloudflare/src/worker.ts @@ -5,4 +5,4 @@ export { PluginBridge }; export default { ...handler, scheduled: createScheduledHandler(), -}; +} satisfies ExportedHandler; diff --git a/portfolio-cloudflare/wrangler.jsonc b/portfolio-cloudflare/wrangler.jsonc index 792c1fd..ebc2105 100644 --- a/portfolio-cloudflare/wrangler.jsonc +++ b/portfolio-cloudflare/wrangler.jsonc @@ -22,8 +22,8 @@ "binding": "LOADER", }, ], - // General maintenance plus the bounded Media Usage lane (see src/worker.ts) + // General maintenance cron trigger "triggers": { - "crons": ["* * * * *", "*/2 * * * *"], + "crons": ["* * * * *"], }, } diff --git a/portfolio/.agents/skills/creating-plugins/references/hooks.md b/portfolio/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/portfolio/.agents/skills/creating-plugins/references/hooks.md +++ b/portfolio/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/portfolio/package.json b/portfolio/package.json index 6bd36f1..7f31c8f 100644 --- a/portfolio/package.json +++ b/portfolio/package.json @@ -17,8 +17,7 @@ "@astrojs/node": "^11.0.0", "@astrojs/react": "^6.0.0", "astro": "^7.0.0", - "better-sqlite3": "^12.8.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/portfolio/pnpm-workspace.yaml b/portfolio/pnpm-workspace.yaml index 243f2bd..793caf0 100644 --- a/portfolio/pnpm-workspace.yaml +++ b/portfolio/pnpm-workspace.yaml @@ -2,7 +2,6 @@ # strictDepBuilds (pnpm >=10.26 / 11) passes. allowBuilds: esbuild: true - better-sqlite3: true sharp: true workerd: false diff --git a/starter-cloudflare/.agents/skills/creating-plugins/references/hooks.md b/starter-cloudflare/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/starter-cloudflare/.agents/skills/creating-plugins/references/hooks.md +++ b/starter-cloudflare/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/starter-cloudflare/package.json b/starter-cloudflare/package.json index 9a7de96..b90d759 100644 --- a/starter-cloudflare/package.json +++ b/starter-cloudflare/package.json @@ -16,9 +16,9 @@ "dependencies": { "@astrojs/cloudflare": "^14.0.0", "@astrojs/react": "^6.0.0", - "@emdash-cms/cloudflare": "^0.35.0", + "@emdash-cms/cloudflare": "^0.36.0", "astro": "^7.0.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/starter-cloudflare/pnpm-workspace.yaml b/starter-cloudflare/pnpm-workspace.yaml index ef16ef5..aa12284 100644 --- a/starter-cloudflare/pnpm-workspace.yaml +++ b/starter-cloudflare/pnpm-workspace.yaml @@ -3,7 +3,6 @@ allowBuilds: esbuild: true workerd: true - better-sqlite3: false sharp: false # Supply-chain hardening: cooldown on brand-new releases (EmDash exempt) diff --git a/starter-cloudflare/src/worker.ts b/starter-cloudflare/src/worker.ts index 75fe3e2..670648c 100644 --- a/starter-cloudflare/src/worker.ts +++ b/starter-cloudflare/src/worker.ts @@ -5,4 +5,4 @@ export { PluginBridge }; export default { ...handler, scheduled: createScheduledHandler(), -}; +} satisfies ExportedHandler; diff --git a/starter-cloudflare/tsconfig.json b/starter-cloudflare/tsconfig.json index 0903753..c2e1508 100644 --- a/starter-cloudflare/tsconfig.json +++ b/starter-cloudflare/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "types": ["node"] }, - "include": ["src", ".astro/types.d.ts", "emdash-env.d.ts"] + "include": ["src", ".astro/types.d.ts", "emdash-env.d.ts", "worker-configuration.d.ts"] } diff --git a/starter-cloudflare/wrangler.jsonc b/starter-cloudflare/wrangler.jsonc index 23632b0..cd8fd49 100644 --- a/starter-cloudflare/wrangler.jsonc +++ b/starter-cloudflare/wrangler.jsonc @@ -22,8 +22,8 @@ "binding": "LOADER", }, ], - // General maintenance plus the bounded Media Usage lane (see src/worker.ts) + // General maintenance cron trigger "triggers": { - "crons": ["* * * * *", "*/2 * * * *"], + "crons": ["* * * * *"], }, } diff --git a/starter/.agents/skills/creating-plugins/references/hooks.md b/starter/.agents/skills/creating-plugins/references/hooks.md index 2a1532d..f6d5160 100644 --- a/starter/.agents/skills/creating-plugins/references/hooks.md +++ b/starter/.agents/skills/creating-plugins/references/hooks.md @@ -96,15 +96,11 @@ Returns: `void` ### `content:beforeSave` -Runs before save. Return modified content, void to keep unchanged, or throw to cancel. +Runs before save. Return modified content, or void to keep it unchanged. A plugin running in the sandbox cannot cancel a save: the sandbox logs the thrown error and the save continues. From the host process — a native plugin, or a sandboxed plugin moved to `plugins: []` — throw `ContentSaveRejectedError` (exported from `emdash`) to cancel with a message the admin shows to the editor; any other thrown error cancels with a generic message. ```typescript "content:beforeSave": async (event, ctx) => { - const { content, collection, isNew } = event; - - if (collection === "posts" && !content.title) { - throw new Error("Posts require a title"); - } + const { content } = event; // Transform if (content.slug) { diff --git a/starter/package.json b/starter/package.json index 200dbed..d961764 100644 --- a/starter/package.json +++ b/starter/package.json @@ -17,8 +17,7 @@ "@astrojs/node": "^11.0.0", "@astrojs/react": "^6.0.0", "astro": "^7.0.0", - "better-sqlite3": "^12.8.0", - "emdash": "^0.35.0", + "emdash": "^0.36.0", "react": "19.2.4", "react-dom": "19.2.4" }, diff --git a/starter/pnpm-workspace.yaml b/starter/pnpm-workspace.yaml index 243f2bd..793caf0 100644 --- a/starter/pnpm-workspace.yaml +++ b/starter/pnpm-workspace.yaml @@ -2,7 +2,6 @@ # strictDepBuilds (pnpm >=10.26 / 11) passes. allowBuilds: esbuild: true - better-sqlite3: true sharp: true workerd: false