@caretcms/core 0.1.0 → 0.1.1

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.
Files changed (191) hide show
  1. package/README.md +117 -6
  2. package/dist/browser-runtime.d.ts.map +1 -1
  3. package/dist/browser-runtime.js +34 -20
  4. package/dist/browser-runtime.js.map +1 -1
  5. package/dist/contracts.d.ts +14 -0
  6. package/dist/contracts.d.ts.map +1 -0
  7. package/dist/contracts.js +14 -0
  8. package/dist/contracts.js.map +1 -0
  9. package/dist/editable.d.ts +28 -0
  10. package/dist/editable.d.ts.map +1 -0
  11. package/dist/editable.js +122 -0
  12. package/dist/editable.js.map +1 -0
  13. package/dist/index.d.ts +30 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +134 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/loader.d.ts.map +1 -1
  18. package/dist/loader.js +45 -3
  19. package/dist/loader.js.map +1 -1
  20. package/dist/providers/storage/markdown.d.ts +7 -0
  21. package/dist/providers/storage/markdown.d.ts.map +1 -0
  22. package/dist/providers/storage/markdown.js +6 -0
  23. package/dist/providers/storage/markdown.js.map +1 -0
  24. package/dist/runtime/auth/cookie-utils.d.ts +1 -0
  25. package/dist/runtime/auth/cookie-utils.d.ts.map +1 -1
  26. package/dist/runtime/auth/cookie-utils.js +1 -1
  27. package/dist/runtime/auth/cookie-utils.js.map +1 -1
  28. package/dist/runtime/auth/rate-limiter.d.ts.map +1 -1
  29. package/dist/runtime/auth/rate-limiter.js +19 -13
  30. package/dist/runtime/auth/rate-limiter.js.map +1 -1
  31. package/dist/runtime/auth/session.d.ts +8 -0
  32. package/dist/runtime/auth/session.d.ts.map +1 -1
  33. package/dist/runtime/auth/session.js +72 -11
  34. package/dist/runtime/auth/session.js.map +1 -1
  35. package/dist/runtime/config.d.ts +1 -0
  36. package/dist/runtime/config.d.ts.map +1 -1
  37. package/dist/runtime/config.js +2 -1
  38. package/dist/runtime/config.js.map +1 -1
  39. package/dist/runtime/git-journal.d.ts +19 -0
  40. package/dist/runtime/git-journal.d.ts.map +1 -0
  41. package/dist/runtime/git-journal.js +64 -0
  42. package/dist/runtime/git-journal.js.map +1 -0
  43. package/dist/runtime/index.d.ts +1 -1
  44. package/dist/runtime/index.d.ts.map +1 -1
  45. package/dist/runtime/index.js +1 -1
  46. package/dist/runtime/index.js.map +1 -1
  47. package/dist/runtime/middleware.d.ts.map +1 -1
  48. package/dist/runtime/middleware.js +125 -8
  49. package/dist/runtime/middleware.js.map +1 -1
  50. package/dist/runtime/mutations/contracts.d.ts.map +1 -1
  51. package/dist/runtime/mutations/contracts.js +7 -4
  52. package/dist/runtime/mutations/contracts.js.map +1 -1
  53. package/dist/runtime/mutations/engine.d.ts +7 -0
  54. package/dist/runtime/mutations/engine.d.ts.map +1 -1
  55. package/dist/runtime/mutations/engine.js +30 -17
  56. package/dist/runtime/mutations/engine.js.map +1 -1
  57. package/dist/runtime/providers.d.ts +7 -0
  58. package/dist/runtime/providers.d.ts.map +1 -1
  59. package/dist/runtime/providers.js +10 -0
  60. package/dist/runtime/providers.js.map +1 -1
  61. package/dist/runtime/publish.d.ts +38 -0
  62. package/dist/runtime/publish.d.ts.map +1 -0
  63. package/dist/runtime/publish.js +71 -0
  64. package/dist/runtime/publish.js.map +1 -0
  65. package/dist/runtime/request-context.d.ts +19 -0
  66. package/dist/runtime/request-context.d.ts.map +1 -1
  67. package/dist/runtime/request-context.js.map +1 -1
  68. package/dist/runtime/rewrite.d.ts +11 -1
  69. package/dist/runtime/rewrite.d.ts.map +1 -1
  70. package/dist/runtime/rewrite.js +21 -15
  71. package/dist/runtime/rewrite.js.map +1 -1
  72. package/dist/runtime/rich-allowlist.d.ts +28 -0
  73. package/dist/runtime/rich-allowlist.d.ts.map +1 -0
  74. package/dist/runtime/rich-allowlist.js +43 -0
  75. package/dist/runtime/rich-allowlist.js.map +1 -0
  76. package/dist/runtime/routes/_helpers.d.ts +26 -0
  77. package/dist/runtime/routes/_helpers.d.ts.map +1 -1
  78. package/dist/runtime/routes/_helpers.js +83 -0
  79. package/dist/runtime/routes/_helpers.js.map +1 -1
  80. package/dist/runtime/routes/admin.d.ts.map +1 -1
  81. package/dist/runtime/routes/admin.js +55 -6
  82. package/dist/runtime/routes/admin.js.map +1 -1
  83. package/dist/runtime/routes/auth-login.d.ts.map +1 -1
  84. package/dist/runtime/routes/auth-login.js +25 -8
  85. package/dist/runtime/routes/auth-login.js.map +1 -1
  86. package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
  87. package/dist/runtime/routes/auth-logout.js +4 -0
  88. package/dist/runtime/routes/auth-logout.js.map +1 -1
  89. package/dist/runtime/routes/collections-metadata.d.ts.map +1 -1
  90. package/dist/runtime/routes/collections-metadata.js +4 -2
  91. package/dist/runtime/routes/collections-metadata.js.map +1 -1
  92. package/dist/runtime/routes/draft.d.ts +8 -0
  93. package/dist/runtime/routes/draft.d.ts.map +1 -0
  94. package/dist/runtime/routes/draft.js +38 -0
  95. package/dist/runtime/routes/draft.js.map +1 -0
  96. package/dist/runtime/routes/history.d.ts.map +1 -1
  97. package/dist/runtime/routes/history.js +21 -8
  98. package/dist/runtime/routes/history.js.map +1 -1
  99. package/dist/runtime/routes/mutate.d.ts.map +1 -1
  100. package/dist/runtime/routes/mutate.js +5 -9
  101. package/dist/runtime/routes/mutate.js.map +1 -1
  102. package/dist/runtime/routes/publish.d.ts +9 -0
  103. package/dist/runtime/routes/publish.d.ts.map +1 -0
  104. package/dist/runtime/routes/publish.js +66 -0
  105. package/dist/runtime/routes/publish.js.map +1 -0
  106. package/dist/runtime/routes/schema.d.ts.map +1 -1
  107. package/dist/runtime/routes/schema.js +4 -2
  108. package/dist/runtime/routes/schema.js.map +1 -1
  109. package/dist/runtime/routes/upload.d.ts.map +1 -1
  110. package/dist/runtime/routes/upload.js +16 -3
  111. package/dist/runtime/routes/upload.js.map +1 -1
  112. package/dist/runtime/sanitize-html.d.ts +8 -2
  113. package/dist/runtime/sanitize-html.d.ts.map +1 -1
  114. package/dist/runtime/sanitize-html.js +57 -38
  115. package/dist/runtime/sanitize-html.js.map +1 -1
  116. package/dist/runtime/stega.d.ts +38 -0
  117. package/dist/runtime/stega.d.ts.map +1 -0
  118. package/dist/runtime/stega.js +98 -0
  119. package/dist/runtime/stega.js.map +1 -0
  120. package/dist/runtime/storage/atomic-write.d.ts +22 -0
  121. package/dist/runtime/storage/atomic-write.d.ts.map +1 -0
  122. package/dist/runtime/storage/atomic-write.js +44 -0
  123. package/dist/runtime/storage/atomic-write.js.map +1 -0
  124. package/dist/runtime/storage/filesystem-adapter.d.ts +14 -11
  125. package/dist/runtime/storage/filesystem-adapter.d.ts.map +1 -1
  126. package/dist/runtime/storage/filesystem-adapter.js +71 -201
  127. package/dist/runtime/storage/filesystem-adapter.js.map +1 -1
  128. package/dist/runtime/storage/frontmatter-codec.d.ts +47 -0
  129. package/dist/runtime/storage/frontmatter-codec.d.ts.map +1 -0
  130. package/dist/runtime/storage/frontmatter-codec.js +515 -0
  131. package/dist/runtime/storage/frontmatter-codec.js.map +1 -0
  132. package/dist/runtime/storage/fs-runtime.d.ts +8 -0
  133. package/dist/runtime/storage/fs-runtime.d.ts.map +1 -0
  134. package/dist/runtime/storage/fs-runtime.js +40 -0
  135. package/dist/runtime/storage/fs-runtime.js.map +1 -0
  136. package/dist/runtime/storage/id-contracts.d.ts +22 -0
  137. package/dist/runtime/storage/id-contracts.d.ts.map +1 -0
  138. package/dist/runtime/storage/id-contracts.js +27 -0
  139. package/dist/runtime/storage/id-contracts.js.map +1 -0
  140. package/dist/runtime/storage/image-validation.d.ts +10 -0
  141. package/dist/runtime/storage/image-validation.d.ts.map +1 -1
  142. package/dist/runtime/storage/image-validation.js +17 -4
  143. package/dist/runtime/storage/image-validation.js.map +1 -1
  144. package/dist/runtime/storage/in-memory-adapter.d.ts +4 -0
  145. package/dist/runtime/storage/in-memory-adapter.d.ts.map +1 -1
  146. package/dist/runtime/storage/in-memory-adapter.js +11 -0
  147. package/dist/runtime/storage/in-memory-adapter.js.map +1 -1
  148. package/dist/runtime/storage/markdown-adapter.d.ts +63 -0
  149. package/dist/runtime/storage/markdown-adapter.d.ts.map +1 -0
  150. package/dist/runtime/storage/markdown-adapter.js +227 -0
  151. package/dist/runtime/storage/markdown-adapter.js.map +1 -0
  152. package/dist/runtime/storage/quota-upload-handler.d.ts +2 -0
  153. package/dist/runtime/storage/quota-upload-handler.d.ts.map +1 -1
  154. package/dist/runtime/storage/quota-upload-handler.js +34 -8
  155. package/dist/runtime/storage/quota-upload-handler.js.map +1 -1
  156. package/dist/runtime/storage/session-overlay-adapter.d.ts +3 -0
  157. package/dist/runtime/storage/session-overlay-adapter.d.ts.map +1 -1
  158. package/dist/runtime/storage/session-overlay-adapter.js +3 -1
  159. package/dist/runtime/storage/session-overlay-adapter.js.map +1 -1
  160. package/dist/runtime/storage/sidecar-meta-store.d.ts +51 -0
  161. package/dist/runtime/storage/sidecar-meta-store.d.ts.map +1 -0
  162. package/dist/runtime/storage/sidecar-meta-store.js +209 -0
  163. package/dist/runtime/storage/sidecar-meta-store.js.map +1 -0
  164. package/dist/runtime/themes/preset-tokens.d.ts +0 -1
  165. package/dist/runtime/themes/preset-tokens.d.ts.map +1 -1
  166. package/dist/runtime/themes/preset-tokens.js +1 -1
  167. package/dist/runtime/themes/preset-tokens.js.map +1 -1
  168. package/dist/runtime/utils.d.ts +9 -1
  169. package/dist/runtime/utils.d.ts.map +1 -1
  170. package/dist/runtime/utils.js +21 -1
  171. package/dist/runtime/utils.js.map +1 -1
  172. package/dist/schema-utils.d.ts.map +1 -1
  173. package/dist/schema-utils.js +1 -0
  174. package/dist/schema-utils.js.map +1 -1
  175. package/dist/types.d.ts +17 -0
  176. package/dist/types.d.ts.map +1 -1
  177. package/package.json +9 -1
  178. package/static/cms/dev-toolbar/app.js +263 -0
  179. package/static/cms/editor/highlight.js +46 -0
  180. package/static/cms/editor/sanitize.js +48 -5
  181. package/static/cms/editor/stega-hydrate.js +80 -0
  182. package/static/cms/editor/text-edit.js +22 -0
  183. package/static/cms/editor/tokens-and-text.css +1 -1
  184. package/static/cms/editor/toolbar.css +42 -0
  185. package/static/cms/editor/toolbar.js +97 -15
  186. package/static/cms/editor.js +15 -0
  187. package/static/cms/signin-hint.css +74 -0
  188. package/dist/runtime/schema/template.d.ts +0 -15
  189. package/dist/runtime/schema/template.d.ts.map +0 -1
  190. package/dist/runtime/schema/template.js +0 -38
  191. package/dist/runtime/schema/template.js.map +0 -1
package/README.md CHANGED
@@ -5,22 +5,49 @@ Inline editing and live content collections for Astro. Add one HTML attribute to
5
5
  ## Install
6
6
 
7
7
  ```bash
8
- npm install @caretcms/core
8
+ npm install @caretcms/core @astrojs/node
9
9
  ```
10
10
 
11
+ Embedded editing renders on the server, so `output: 'server'` needs an SSR
12
+ adapter — `@astrojs/node` above, or whichever adapter matches your host.
13
+
11
14
  ## Setup
12
15
 
13
16
  ```js
14
17
  // astro.config.mjs
15
18
  import { defineConfig } from 'astro/config';
19
+ import node from '@astrojs/node';
16
20
  import caret from '@caretcms/core';
17
21
 
18
22
  export default defineConfig({
19
23
  output: 'server',
24
+ adapter: node({ mode: 'standalone' }),
20
25
  integrations: [caret()],
21
26
  });
22
27
  ```
23
28
 
29
+ **Already have Astro content collections?** If your project has collections under
30
+ `src/content/` and you haven't set `storage`, CaretCMS auto-selects
31
+ `markdownStorage()` so the Studio lists those collections immediately (instead of
32
+ "No collections yet") and edits write back to your `.md` frontmatter. Pass an
33
+ explicit `storage` to override — `storage: filesystemStorage()` opts back out.
34
+
35
+ ## Choose your path
36
+
37
+ CaretCMS gives you two ways to make content editable. They share one storage layer and one login — you can mix them on the same site — but they answer different questions. Start at the top; reach for the next row only when you need it.
38
+
39
+ | Start here if… | Use | What you write |
40
+ |---|---|---|
41
+ | You have static markup (a hero, an about page) and just want to click words/images and change them | **Inline editing** | `data-caret` attributes on the elements |
42
+ | The same fields repeat or you want short attribute names | **Scoped inline editing** | a `data-caret-scope` wrapper + short `data-caret` names |
43
+ | Your content is dynamic data you query in frontmatter (a blog index, a list of products) | **Live collections** | `caretLoader` in `src/caret.config.ts`, then `getLiveEntry` / `getLiveCollection` |
44
+
45
+ **The binding model in one line:** every edit is addressed as `collection::id::field`. Inline editing lets you spell that out in pieces — `data-caret-scope="pages::home"` sets `collection::id`, and `data-caret="headline"` fills in the `field`, so the element above resolves to `pages::home::headline`. Live collections address the same `collection` + `id` from frontmatter instead. Same content, same storage — two ways to reach it.
46
+
47
+ > Adding `data-caret` to an existing site by hand? `npx @caretcms/caretize` scans your Astro
48
+ > project and interactively annotates your templates for you. The attributes below are all you
49
+ > need either way — caretize just writes them.
50
+
24
51
  ## Inline editing
25
52
 
26
53
  Add `data-caret` attributes to your templates:
@@ -33,18 +60,28 @@ Add `data-caret` attributes to your templates:
33
60
  </main>
34
61
  ```
35
62
 
36
- Set a password and start the dev server:
63
+ Start the dev server:
37
64
 
38
65
  ```bash
39
- CARET_EDIT_PASSWORD=devpass npm run dev
66
+ npm run dev
40
67
  ```
41
68
 
42
- Log in at `/admin`, then click any annotated element on the page to edit it.
69
+ With no password configured, a **temporary dev password is printed in the terminal** (dev only
70
+ production stays locked). To set a permanent one, add `CARET_EDIT_PASSWORD=<your-password>` to a
71
+ `.env` file.
72
+
73
+ Log in at `/admin`, then click any annotated element on the page to edit it. The content Studio
74
+ lives at `/admin/cms`.
43
75
 
44
76
  The inline editor only bootstraps on pages that contain `data-caret` bindings and only after
45
77
  `GET /api/cms/auth/session` confirms an authenticated editor session. Session cookies are issued
46
78
  as `HttpOnly`, `SameSite=Lax`, and automatically add `Secure` on HTTPS requests.
47
79
 
80
+ When you're signed in and land on a live page that has **no** `data-caret` bindings yet, CaretCMS
81
+ shows a small "signed in · no editable fields on this page" hint pointing you at the next step —
82
+ so a page that isn't annotated yet reads as "nothing to edit here" rather than "is this broken?".
83
+ The hint is editor-only (anonymous visitors never see it) and never appears inside the Studio.
84
+
48
85
  ## Live content collections
49
86
 
50
87
  You can also wire collections into Astro's native content layer using `caretLoader`. This lets you query CMS data with `getLiveEntry` and `getLiveCollection` from `astro:content` — the same API you use for any Astro live collection.
@@ -116,6 +153,22 @@ export default defineConfig({
116
153
 
117
154
  When provided, Studio uses these for field names, types, and editor widgets instead of guessing from the first entry.
118
155
 
156
+ **Already describe your collections with Zod?** If you have a `content.config.ts` Zod schema,
157
+ don't write it twice — `@caretcms/zod` derives the Studio schema from that single source:
158
+
159
+ ```js
160
+ // astro.config.mjs
161
+ import { schemaFromZod } from '@caretcms/zod';
162
+ import { blogSchema } from './src/schemas.mjs'; // the same object content.config.ts uses
163
+
164
+ caret({ schemas: { blog: schemaFromZod(blogSchema) } });
165
+ ```
166
+
167
+ (Keep your Zod schemas in a plain module that imports only `zod` — not `astro:content` — so both
168
+ `content.config.ts` and `astro.config` can import them.) Schemas remain optional: with
169
+ auto-detected `markdownStorage` the Studio already shows each collection with fields inferred from
170
+ existing entries; deriving from Zod just adds proper labels, types, and widget hints.
171
+
119
172
  ## What you get
120
173
 
121
174
  - **Inline editing** on any `data-caret` element (text and images)
@@ -124,6 +177,7 @@ When provided, Studio uses these for field names, types, and editor widgets inst
124
177
  - **Section composer** for reordering and spacing page sections
125
178
  - **Response rewriting** middleware — stored edits replace template defaults at render time
126
179
  - **Scoped bindings** via `data-caret-scope` to reduce repetition
180
+ - **Dev Toolbar app** — in `astro dev`, inspect and highlight every binding on the page (no login required), grouped by entry with deep-links into Studio
127
181
  - **Revision safety** with optimistic locking and restore from history
128
182
  - **Storage adapters** — filesystem (default), in-memory, or custom via `StorageAdapter` interface
129
183
 
@@ -174,17 +228,74 @@ caret({
174
228
  apiBasePath: '/api/cms', // API route prefix (default: /api/cms)
175
229
  enableAdmin: true, // Inject admin pages (default: true)
176
230
  enableInlineEditor: true, // Inject inline editor (default: true)
177
- storage: filesystemStorage(), // Storage adapter (default: filesystem)
231
+ storage: filesystemStorage(), // Storage adapter (default: markdownStorage when
232
+ // src/content collections exist, else filesystem)
178
233
  uploads: localUploads(), // Upload handler (default: local filesystem)
179
234
  schemas: {}, // Optional JSON Schema map for Studio (default: inferred)
180
235
  })
181
236
  ```
182
237
 
238
+ ## Rendering & output
239
+
240
+ CaretCMS injects your stored edits at request time in middleware (the "response rewriting" step),
241
+ so any page that shows editable content must be **server-rendered** — that's why the integration
242
+ needs `output: 'server'`. On `output: 'static'`, the editing middleware and routes are skipped (you'll
243
+ see a warning) because prerendered HTML is produced at build time, before there's a request to rewrite.
244
+
245
+ Mostly-static site? You don't lose prerendering everywhere — under `output: 'server'` you can opt
246
+ individual pages that *don't* show live edits back into static generation with
247
+ `export const prerender = true`. Pages that surface editable content should stay server-rendered so
248
+ edits appear immediately instead of only after a rebuild.
249
+
250
+ > **Migrating a static site:** switching to `output: 'server'` flips the default for
251
+ > `getStaticPaths`-based pages — they no longer receive props at build time. Add
252
+ > `export const prerender = true` to keep such a page statically generated, or refactor it to fetch
253
+ > its data at request time. This is standard Astro output behavior, not specific to CaretCMS.
254
+
255
+ ## What gets written to disk
256
+
257
+ The default (embedded) providers write inside your project:
258
+
259
+ | Path | What | Written by |
260
+ |---|---|---|
261
+ | `.caret/data/` | entry JSON | `filesystemStorage()` (default) |
262
+ | `.caret/drafts/` | per-editor draft overlays | `filesystemStorage()` |
263
+ | `.caretcms/` | revisions + history sidecar | both filesystem and markdown storage |
264
+ | `src/content/**.md` | frontmatter edits | `markdownStorage()` (auto-selected when you have content collections) |
265
+ | `public/uploads/` | uploaded images | `localUploads()` (default) |
266
+
267
+ Recommended `.gitignore` for the transient state (keep `.caret/data/` or your
268
+ `src/content` edits if git IS your content store — see the commit-on-publish
269
+ workflow in [docs/deployment.md](../../docs/deployment.md)):
270
+
271
+ ```gitignore
272
+ .caretcms/
273
+ .caret/drafts/
274
+ public/uploads/
275
+ ```
276
+
277
+ ## Production checklist
278
+
279
+ - `CARET_EDIT_PASSWORD` — the editor password. Without it, production is locked (no dev fallback).
280
+ - `CARET_SESSION_SECRET` — **required in production** when a password is set; sessions are
281
+ HMAC-signed with it. Generate one with `openssl rand -base64 32`. If it's missing, logins
282
+ return a configuration error and existing sessions are treated as signed out.
283
+ - `markdownStorage()` edits `src/content/*.md` **at request time** — a dev/git workflow. In
284
+ production, pair it with commit-on-publish + a CI rebuild (fields rendered through
285
+ `getCollection()` are baked at build time and only refresh on rebuild), or use a server-side
286
+ adapter like [`@caretcms/cloudflare`](https://www.npmjs.com/package/@caretcms/cloudflare).
287
+ - `localUploads()` writes to `public/uploads`, which built sites serve from `dist/client` —
288
+ files uploaded *after* the build won't be served. Treat it as dev-only and use R2 (or your
289
+ own `UploadHandler`) in production.
290
+ - Defaults resolve paths from the **server process's working directory**; run the built server
291
+ from your project root, or pass explicit paths (`filesystemStorage({ dataRoot })`,
292
+ `markdownStorage({ contentRoot })`, `localUploads({ uploadsDir })`).
293
+
183
294
  ## Requirements
184
295
 
185
296
  - Astro 5 or 6
186
297
  - Node 20.19.1+ or 22.12.0+
187
- - Server output mode (for embedded editing routes)
298
+ - Server output mode (for embedded editing routes) plus an SSR adapter
188
299
 
189
300
  ## License
190
301
 
@@ -1 +1 @@
1
- {"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8UD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,GAAE,UAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAGxE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAMN"}
1
+ {"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuVD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,GAAE,UAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAGxE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAMN"}
@@ -1,3 +1,5 @@
1
+ import { RICH_ALLOWED_TAGS, RICH_ALLOWED_ATTRS, SAFE_HREF_RE, classAllowed, } from "./runtime/rich-allowlist.js";
2
+ import { getNestedValue } from "./runtime/utils.js";
1
3
  function getSessionStorageKey(config) {
2
4
  return `caretcms:cloud-session:${config.endpoint}:${config.projectId}`;
3
5
  }
@@ -140,21 +142,20 @@ function collectBindings(root = document) {
140
142
  return bindings;
141
143
  }
142
144
  // --- Browser-side HTML sanitizer for rich text ---
143
- const RICH_ALLOWED_TAGS = new Set([
144
- "b", "strong", "i", "em", "u", "s", "a", "br", "sub", "sup",
145
- ]);
146
- const RICH_ALLOWED_ATTRS = {
147
- a: new Set(["href", "target", "rel"]),
148
- };
149
- const SAFE_HREF_RE = /^(?:https?:|mailto:|tel:|\/)/i;
145
+ // Allowlist + matcher come from runtime/rich-allowlist.ts (shared with the
146
+ // server sanitizer); static/cms/editor/sanitize.js mirrors them by hand.
150
147
  function sanitizeHtmlBrowser(html) {
151
148
  if (!html)
152
149
  return "";
150
+ const allowedClasses = (typeof window !== "undefined"
151
+ ? window.__CARET__
152
+ ?.allowedClasses
153
+ : undefined) ?? null;
153
154
  const doc = new DOMParser().parseFromString(`<body>${html}</body>`, "text/html");
154
- sanitizeNode(doc.body);
155
+ sanitizeNode(doc.body, allowedClasses);
155
156
  return doc.body.innerHTML;
156
157
  }
157
- function sanitizeNode(parent) {
158
+ function sanitizeNode(parent, allowedClasses) {
158
159
  const children = Array.from(parent.childNodes);
159
160
  for (const node of children) {
160
161
  if (node.nodeType === Node.TEXT_NODE)
@@ -170,12 +171,29 @@ function sanitizeNode(parent) {
170
171
  while (el.firstChild)
171
172
  frag.appendChild(el.firstChild);
172
173
  parent.replaceChild(frag, el);
173
- sanitizeNode(parent);
174
+ sanitizeNode(parent, allowedClasses);
174
175
  return;
175
176
  }
176
177
  const allowed = RICH_ALLOWED_ATTRS[tag];
178
+ const classPatterns = allowedClasses ? allowedClasses[tag] : undefined;
177
179
  const attrs = Array.from(el.attributes);
178
180
  for (const attr of attrs) {
181
+ // class is gated by the per-tag allowlist, not RICH_ALLOWED_ATTRS
182
+ if (attr.name === "class") {
183
+ if (!classPatterns) {
184
+ el.removeAttribute("class");
185
+ continue;
186
+ }
187
+ const kept = attr.value
188
+ .split(/\s+/)
189
+ .filter((c) => c !== "" && classAllowed(c, classPatterns))
190
+ .join(" ");
191
+ if (kept)
192
+ el.setAttribute("class", kept);
193
+ else
194
+ el.removeAttribute("class");
195
+ continue;
196
+ }
179
197
  if (!allowed || !allowed.has(attr.name)) {
180
198
  el.removeAttribute(attr.name);
181
199
  }
@@ -190,19 +208,15 @@ function sanitizeNode(parent) {
190
208
  el.setAttribute("rel", "noopener noreferrer");
191
209
  }
192
210
  }
193
- sanitizeNode(el);
211
+ sanitizeNode(el, allowedClasses);
194
212
  }
195
213
  }
196
214
  function getNestedString(data, path) {
197
- const keys = path.split(".");
198
- let current = data;
199
- for (const key of keys) {
200
- if (!current || typeof current !== "object" || Array.isArray(current)) {
201
- return undefined;
202
- }
203
- current = current[key];
204
- }
205
- return typeof current === "string" ? current : undefined;
215
+ // Shared dot-path semantics: arrays traverse by numeric index. The previous
216
+ // local copy bailed on arrays, so `items.0.title` resolved server-side (the
217
+ // rewrite engine) but silently failed here in the cloud live-sync path.
218
+ const value = getNestedValue(data, path);
219
+ return typeof value === "string" ? value : undefined;
206
220
  }
207
221
  function applyBindingValue(binding, value) {
208
222
  if (binding.isImage) {
@@ -1 +1 @@
1
- {"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Public contract surface for tooling that interoperates with the runtime
3
+ * without importing it (caretize mirrors these; adapters import them).
4
+ *
5
+ * Everything re-exported here is a compatibility promise: the identifier
6
+ * grammar gates what storage keys exist, the tag list gates what the rewrite
7
+ * engine can render, and the rich allowlist gates what survives sanitization.
8
+ * Mirror copies in other packages are held to these by the parity test
9
+ * (`tests/unit/contracts-parity.test.ts`).
10
+ */
11
+ export { COLLECTION_NAME_RE, ENTRY_ID_RE, EDITOR_ID_RE, assertSafeEditorId, } from "./runtime/storage/id-contracts.js";
12
+ export { REWRITABLE_TEXT_TAGS } from "./runtime/rewrite.js";
13
+ export { RICH_ALLOWED_TAGS, RICH_ALLOWED_ATTRS, SAFE_HREF_RE, } from "./runtime/rich-allowlist.js";
14
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Public contract surface for tooling that interoperates with the runtime
3
+ * without importing it (caretize mirrors these; adapters import them).
4
+ *
5
+ * Everything re-exported here is a compatibility promise: the identifier
6
+ * grammar gates what storage keys exist, the tag list gates what the rewrite
7
+ * engine can render, and the rich allowlist gates what survives sanitization.
8
+ * Mirror copies in other packages are held to these by the parity test
9
+ * (`tests/unit/contracts-parity.test.ts`).
10
+ */
11
+ export { COLLECTION_NAME_RE, ENTRY_ID_RE, EDITOR_ID_RE, assertSafeEditorId, } from "./runtime/storage/id-contracts.js";
12
+ export { REWRITABLE_TEXT_TAGS } from "./runtime/rewrite.js";
13
+ export { RICH_ALLOWED_TAGS, RICH_ALLOWED_ATTRS, SAFE_HREF_RE, } from "./runtime/rich-allowlist.js";
14
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * editable() — make an inline value editable in place.
3
+ *
4
+ * The stega twin of `bindEntry` / `data-caret`: instead of putting the binding
5
+ * key on an element (which props/loops break), it hides the key INSIDE the value
6
+ * via stega, so the content stays click-to-edit even when passed through
7
+ * component props, slots, and `.map()` loops — with no attribute and no live
8
+ * collection.
9
+ *
10
+ * Usage in a `.astro` frontmatter:
11
+ *
12
+ * const features = await editable('pages::home::features.items', [
13
+ * { title: 'Fast', description: '…' },
14
+ * { title: 'SEO', description: '…' },
15
+ * ]);
16
+ * <Features items={features} />
17
+ *
18
+ * `key` is `collection::id` or `collection::id::field-prefix`. The value you pass
19
+ * is the DEFAULT — your code stays the source of truth; any saved edits in the
20
+ * store overlay it. In editor mode each string leaf is stega-encoded with its
21
+ * binding key (`collection::id::<dot.path>`), matching the mutation engine's
22
+ * nested-path writes, so edits round-trip to the same store as data-caret.
23
+ *
24
+ * Safe outside a request context (e.g. static build / plain import): returns the
25
+ * value untouched.
26
+ */
27
+ export declare function editable<T>(key: string, value: T): Promise<T>;
28
+ //# sourceMappingURL=editable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../src/editable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAiFH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA6BnE"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * editable() — make an inline value editable in place.
3
+ *
4
+ * The stega twin of `bindEntry` / `data-caret`: instead of putting the binding
5
+ * key on an element (which props/loops break), it hides the key INSIDE the value
6
+ * via stega, so the content stays click-to-edit even when passed through
7
+ * component props, slots, and `.map()` loops — with no attribute and no live
8
+ * collection.
9
+ *
10
+ * Usage in a `.astro` frontmatter:
11
+ *
12
+ * const features = await editable('pages::home::features.items', [
13
+ * { title: 'Fast', description: '…' },
14
+ * { title: 'SEO', description: '…' },
15
+ * ]);
16
+ * <Features items={features} />
17
+ *
18
+ * `key` is `collection::id` or `collection::id::field-prefix`. The value you pass
19
+ * is the DEFAULT — your code stays the source of truth; any saved edits in the
20
+ * store overlay it. In editor mode each string leaf is stega-encoded with its
21
+ * binding key (`collection::id::<dot.path>`), matching the mutation engine's
22
+ * nested-path writes, so edits round-trip to the same store as data-caret.
23
+ *
24
+ * Safe outside a request context (e.g. static build / plain import): returns the
25
+ * value untouched.
26
+ */
27
+ import { getRequestContext } from "./runtime/request-context.js";
28
+ import { stegaCombine } from "./runtime/stega.js";
29
+ import { getNestedValue as getByPath } from "./runtime/utils.js";
30
+ /**
31
+ * Overlay `override` onto `base` (override wins where defined). Objects merge by
32
+ * key, arrays merge by index — so a single saved item field overlays only that
33
+ * leaf and untouched defaults survive. Scalars: override replaces base.
34
+ */
35
+ function deepMerge(base, override) {
36
+ if (override === undefined)
37
+ return base;
38
+ if (Array.isArray(base) && Array.isArray(override)) {
39
+ return base.map((item, i) => deepMerge(item, override[i]));
40
+ }
41
+ if (base !== null &&
42
+ typeof base === "object" &&
43
+ !Array.isArray(base) &&
44
+ override !== null &&
45
+ typeof override === "object" &&
46
+ !Array.isArray(override)) {
47
+ const out = { ...base };
48
+ for (const [k, v] of Object.entries(override)) {
49
+ out[k] = deepMerge(base[k], v);
50
+ }
51
+ return out;
52
+ }
53
+ return override;
54
+ }
55
+ /**
56
+ * An imported asset (Astro `ImageMetadata`): `{ src, width, height, format }`.
57
+ * Its strings are machine identifiers (URL, format token) consumed by the image
58
+ * pipeline — NOT human-readable text. Stega-encoding them corrupts the value
59
+ * (e.g. `format: "jpg"` → `"jpg<invisible>"`, which `astro:assets` rejects), so
60
+ * these objects must pass through `encodeLeaves` untouched.
61
+ */
62
+ function isAssetLike(value) {
63
+ if (value === null || typeof value !== "object")
64
+ return false;
65
+ const v = value;
66
+ return (typeof v.src === "string" &&
67
+ typeof v.width === "number" &&
68
+ typeof v.height === "number" &&
69
+ typeof v.format === "string");
70
+ }
71
+ /** Stega-encode every string leaf with its full `collection::id::field` key. */
72
+ function encodeLeaves(value, collection, id, fieldPath) {
73
+ if (typeof value === "string") {
74
+ return stegaCombine(value, `${collection}::${id}::${fieldPath}`);
75
+ }
76
+ // Asset descriptors (ImageMetadata) carry identifiers, not editable text —
77
+ // leave them intact so the image pipeline receives a clean src/format.
78
+ if (isAssetLike(value)) {
79
+ return value;
80
+ }
81
+ if (Array.isArray(value)) {
82
+ return value.map((v, i) => encodeLeaves(v, collection, id, fieldPath ? `${fieldPath}.${i}` : `${i}`));
83
+ }
84
+ if (value !== null && typeof value === "object") {
85
+ const out = {};
86
+ for (const [k, v] of Object.entries(value)) {
87
+ out[k] = encodeLeaves(v, collection, id, fieldPath ? `${fieldPath}.${k}` : k);
88
+ }
89
+ return out;
90
+ }
91
+ return value;
92
+ }
93
+ export async function editable(key, value) {
94
+ const ctx = getRequestContext();
95
+ if (!ctx)
96
+ return value;
97
+ const parts = key.split("::");
98
+ const collection = parts[0];
99
+ const id = parts[1];
100
+ const fieldPrefix = parts.slice(2).join("::");
101
+ if (!collection || !id)
102
+ return value;
103
+ // 1. Overlay: merge any saved values over the inline default.
104
+ let result = value;
105
+ try {
106
+ const stored = await ctx.adapter.getEntry(collection, id);
107
+ if (stored && stored.data) {
108
+ const override = fieldPrefix ? getByPath(stored.data, fieldPrefix) : stored.data;
109
+ result = deepMerge(value, override);
110
+ }
111
+ }
112
+ catch {
113
+ // store unavailable → keep the inline default
114
+ }
115
+ // 2. Stega: editor only — embed binding keys so it's click-to-edit through
116
+ // whatever props/loops the value flows through.
117
+ if (ctx.editor) {
118
+ result = encodeLeaves(result, collection, id, fieldPrefix);
119
+ }
120
+ return result;
121
+ }
122
+ //# sourceMappingURL=editable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editable.js","sourceRoot":"","sources":["../src/editable.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,11 +2,13 @@ import type { AstroIntegration } from "astro";
2
2
  import type { CaretStorageProvider, CaretUploadProvider } from "./types.js";
3
3
  export type { StorageAdapter, UploadHandler, UploadContext, EntryData, HistoryEntry, CollectionMetadata, CollectionSchema, CaretMode, CaretStorageProvider, CaretUploadProvider, RuntimeProviderReference, } from "./types.js";
4
4
  export { FilesystemAdapter } from "./runtime/storage/filesystem-adapter.js";
5
+ export { MarkdownAdapter } from "./runtime/storage/markdown-adapter.js";
5
6
  export { InMemoryAdapter } from "./runtime/storage/in-memory-adapter.js";
6
7
  export { FilesystemUploadHandler } from "./runtime/storage/filesystem-upload-handler.js";
7
8
  export { bindEntry } from "./runtime/bind.js";
8
9
  export { caretLoader, CaretLoaderError } from "./loader.js";
9
10
  export type { CaretLiveLoader } from "./loader.js";
11
+ export { editable } from "./editable.js";
10
12
  type ProviderDefinitionOptions = {
11
13
  entrypoint: string;
12
14
  exportName?: string;
@@ -34,6 +36,16 @@ type BaseCaretOptions = {
34
36
  apiBasePath?: string;
35
37
  enableAdmin?: boolean;
36
38
  enableInlineEditor?: boolean;
39
+ /**
40
+ * The page the editor lands on after a successful login. Must be an
41
+ * absolute, same-origin path (starts with a single `/`). An explicit
42
+ * `?redirect=` on the login URL always takes precedence. Defaults to `"/"`
43
+ * so the user lands on a live page with the inline editor active rather
44
+ * than the empty Studio shell.
45
+ *
46
+ * @example caret({ editorHome: "/blog" })
47
+ */
48
+ editorHome?: string;
37
49
  /**
38
50
  * Optional collection schemas as JSON Schema objects. When provided, Studio
39
51
  * uses these for field labels, types, and validation instead of inferring
@@ -43,6 +55,20 @@ type BaseCaretOptions = {
43
55
  * by z.toJSONSchema() from a Zod schema).
44
56
  */
45
57
  schemas?: Record<string, JsonSchemaDefinition>;
58
+ /**
59
+ * Per-tag class allowlist for rich-text (`data-caret-rich`) fields. By default
60
+ * the rich-text sanitizer strips every `class` (keeping only semantic inline
61
+ * tags), so design-system classes inside editable content are lost on save.
62
+ * Use this to bless specific classes so they round-trip unchanged.
63
+ *
64
+ * Keys are tag names, values are allowed class names. A pattern ending in `*`
65
+ * is a prefix match (`"text-*"` allows `text-primary`); a lone `"*"` allows any
66
+ * class on that tag. Example: `{ strong: ["text-theme-text-primary"], a: ["cta"] }`.
67
+ *
68
+ * Prefer styling semantic tags via CSS over allowlisting classes; reach for
69
+ * this only when a specific class genuinely must live inside editable content.
70
+ */
71
+ allowedClasses?: Record<string, string[]>;
46
72
  /**
47
73
  * Studio chrome theme. Defaults to 'studio' — a neutral dark chrome that
48
74
  * matches the inline editor's "click to edit" blue. Currently the only
@@ -73,6 +99,10 @@ export declare function filesystemStorage(options?: {
73
99
  dataRoot?: string;
74
100
  metaRoot?: string;
75
101
  }): CaretStorageProvider;
102
+ export declare function markdownStorage(options?: {
103
+ contentRoot?: string;
104
+ metaRoot?: string;
105
+ }): CaretStorageProvider;
76
106
  export declare function localUploads(options?: {
77
107
  uploadsDir?: string;
78
108
  }): CaretUploadProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}