@caretcms/core 0.1.0 → 0.1.2
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/README.md +182 -6
- package/dist/browser-runtime.d.ts +16 -0
- package/dist/browser-runtime.d.ts.map +1 -1
- package/dist/browser-runtime.js +42 -23
- package/dist/browser-runtime.js.map +1 -1
- package/dist/contracts.d.ts +14 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +14 -0
- package/dist/contracts.js.map +1 -0
- package/dist/editable.d.ts +28 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +122 -0
- package/dist/editable.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +274 -4
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +45 -3
- package/dist/loader.js.map +1 -1
- package/dist/providers/storage/markdown.d.ts +7 -0
- package/dist/providers/storage/markdown.d.ts.map +1 -0
- package/dist/providers/storage/markdown.js +6 -0
- package/dist/providers/storage/markdown.js.map +1 -0
- package/dist/runtime/auth/cookie-utils.d.ts +1 -0
- package/dist/runtime/auth/cookie-utils.d.ts.map +1 -1
- package/dist/runtime/auth/cookie-utils.js +1 -1
- package/dist/runtime/auth/cookie-utils.js.map +1 -1
- package/dist/runtime/auth/rate-limiter.d.ts.map +1 -1
- package/dist/runtime/auth/rate-limiter.js +19 -13
- package/dist/runtime/auth/rate-limiter.js.map +1 -1
- package/dist/runtime/auth/session.d.ts +8 -0
- package/dist/runtime/auth/session.d.ts.map +1 -1
- package/dist/runtime/auth/session.js +72 -11
- package/dist/runtime/auth/session.js.map +1 -1
- package/dist/runtime/config.d.ts +1 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +2 -1
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/git-journal.d.ts +19 -0
- package/dist/runtime/git-journal.d.ts.map +1 -0
- package/dist/runtime/git-journal.js +64 -0
- package/dist/runtime/git-journal.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/middleware.d.ts.map +1 -1
- package/dist/runtime/middleware.js +125 -8
- package/dist/runtime/middleware.js.map +1 -1
- package/dist/runtime/mutations/contracts.d.ts.map +1 -1
- package/dist/runtime/mutations/contracts.js +7 -4
- package/dist/runtime/mutations/contracts.js.map +1 -1
- package/dist/runtime/mutations/engine.d.ts +7 -0
- package/dist/runtime/mutations/engine.d.ts.map +1 -1
- package/dist/runtime/mutations/engine.js +30 -17
- package/dist/runtime/mutations/engine.js.map +1 -1
- package/dist/runtime/providers.d.ts +16 -0
- package/dist/runtime/providers.d.ts.map +1 -1
- package/dist/runtime/providers.js +16 -0
- package/dist/runtime/providers.js.map +1 -1
- package/dist/runtime/publish.d.ts +40 -0
- package/dist/runtime/publish.d.ts.map +1 -0
- package/dist/runtime/publish.js +75 -0
- package/dist/runtime/publish.js.map +1 -0
- package/dist/runtime/rebuild-webhook.d.ts +29 -0
- package/dist/runtime/rebuild-webhook.d.ts.map +1 -0
- package/dist/runtime/rebuild-webhook.js +37 -0
- package/dist/runtime/rebuild-webhook.js.map +1 -0
- package/dist/runtime/request-context.d.ts +19 -0
- package/dist/runtime/request-context.d.ts.map +1 -1
- package/dist/runtime/request-context.js.map +1 -1
- package/dist/runtime/rewrite.d.ts +29 -1
- package/dist/runtime/rewrite.d.ts.map +1 -1
- package/dist/runtime/rewrite.js +30 -16
- package/dist/runtime/rewrite.js.map +1 -1
- package/dist/runtime/rich-allowlist.d.ts +29 -0
- package/dist/runtime/rich-allowlist.d.ts.map +1 -0
- package/dist/runtime/rich-allowlist.js +49 -0
- package/dist/runtime/rich-allowlist.js.map +1 -0
- package/dist/runtime/routes/_helpers.d.ts +33 -0
- package/dist/runtime/routes/_helpers.d.ts.map +1 -1
- package/dist/runtime/routes/_helpers.js +117 -1
- package/dist/runtime/routes/_helpers.js.map +1 -1
- package/dist/runtime/routes/admin-entry.d.ts +1 -0
- package/dist/runtime/routes/admin-entry.d.ts.map +1 -1
- package/dist/runtime/routes/admin-entry.js +3 -2
- package/dist/runtime/routes/admin-entry.js.map +1 -1
- package/dist/runtime/routes/admin.d.ts +1 -0
- package/dist/runtime/routes/admin.d.ts.map +1 -1
- package/dist/runtime/routes/admin.js +61 -9
- package/dist/runtime/routes/admin.js.map +1 -1
- package/dist/runtime/routes/auth-login.d.ts +1 -0
- package/dist/runtime/routes/auth-login.d.ts.map +1 -1
- package/dist/runtime/routes/auth-login.js +26 -8
- package/dist/runtime/routes/auth-login.js.map +1 -1
- package/dist/runtime/routes/auth-logout.d.ts +1 -0
- package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
- package/dist/runtime/routes/auth-logout.js +5 -0
- package/dist/runtime/routes/auth-logout.js.map +1 -1
- package/dist/runtime/routes/auth-session.d.ts +1 -0
- package/dist/runtime/routes/auth-session.d.ts.map +1 -1
- package/dist/runtime/routes/auth-session.js +1 -0
- package/dist/runtime/routes/auth-session.js.map +1 -1
- package/dist/runtime/routes/collection-list.d.ts +1 -0
- package/dist/runtime/routes/collection-list.d.ts.map +1 -1
- package/dist/runtime/routes/collection-list.js +3 -2
- package/dist/runtime/routes/collection-list.js.map +1 -1
- package/dist/runtime/routes/collections-metadata.d.ts +1 -0
- package/dist/runtime/routes/collections-metadata.d.ts.map +1 -1
- package/dist/runtime/routes/collections-metadata.js +7 -4
- package/dist/runtime/routes/collections-metadata.js.map +1 -1
- package/dist/runtime/routes/draft.d.ts +13 -0
- package/dist/runtime/routes/draft.d.ts.map +1 -0
- package/dist/runtime/routes/draft.js +55 -0
- package/dist/runtime/routes/draft.js.map +1 -0
- package/dist/runtime/routes/editor-assets.d.ts +1 -0
- package/dist/runtime/routes/editor-assets.d.ts.map +1 -1
- package/dist/runtime/routes/editor-assets.js +1 -0
- package/dist/runtime/routes/editor-assets.js.map +1 -1
- package/dist/runtime/routes/entries.d.ts +1 -0
- package/dist/runtime/routes/entries.d.ts.map +1 -1
- package/dist/runtime/routes/entries.js +3 -2
- package/dist/runtime/routes/entries.js.map +1 -1
- package/dist/runtime/routes/history.d.ts +1 -0
- package/dist/runtime/routes/history.d.ts.map +1 -1
- package/dist/runtime/routes/history.js +24 -10
- package/dist/runtime/routes/history.js.map +1 -1
- package/dist/runtime/routes/mutate.d.ts +1 -0
- package/dist/runtime/routes/mutate.d.ts.map +1 -1
- package/dist/runtime/routes/mutate.js +7 -10
- package/dist/runtime/routes/mutate.js.map +1 -1
- package/dist/runtime/routes/publish.d.ts +10 -0
- package/dist/runtime/routes/publish.d.ts.map +1 -0
- package/dist/runtime/routes/publish.js +75 -0
- package/dist/runtime/routes/publish.js.map +1 -0
- package/dist/runtime/routes/schema.d.ts +1 -0
- package/dist/runtime/routes/schema.d.ts.map +1 -1
- package/dist/runtime/routes/schema.js +7 -4
- package/dist/runtime/routes/schema.js.map +1 -1
- package/dist/runtime/routes/studio-home.d.ts +1 -0
- package/dist/runtime/routes/studio-home.d.ts.map +1 -1
- package/dist/runtime/routes/studio-home.js +10 -9
- package/dist/runtime/routes/studio-home.js.map +1 -1
- package/dist/runtime/routes/theme-stylesheet.d.ts +1 -0
- package/dist/runtime/routes/theme-stylesheet.d.ts.map +1 -1
- package/dist/runtime/routes/theme-stylesheet.js +1 -0
- package/dist/runtime/routes/theme-stylesheet.js.map +1 -1
- package/dist/runtime/routes/upload.d.ts +1 -0
- package/dist/runtime/routes/upload.d.ts.map +1 -1
- package/dist/runtime/routes/upload.js +17 -3
- package/dist/runtime/routes/upload.js.map +1 -1
- package/dist/runtime/sanitize-html.d.ts +8 -2
- package/dist/runtime/sanitize-html.d.ts.map +1 -1
- package/dist/runtime/sanitize-html.js +57 -38
- package/dist/runtime/sanitize-html.js.map +1 -1
- package/dist/runtime/static-bake.d.ts +20 -0
- package/dist/runtime/static-bake.d.ts.map +1 -0
- package/dist/runtime/static-bake.js +58 -0
- package/dist/runtime/static-bake.js.map +1 -0
- package/dist/runtime/stega.d.ts +38 -0
- package/dist/runtime/stega.d.ts.map +1 -0
- package/dist/runtime/stega.js +98 -0
- package/dist/runtime/stega.js.map +1 -0
- package/dist/runtime/storage/atomic-write.d.ts +22 -0
- package/dist/runtime/storage/atomic-write.d.ts.map +1 -0
- package/dist/runtime/storage/atomic-write.js +44 -0
- package/dist/runtime/storage/atomic-write.js.map +1 -0
- package/dist/runtime/storage/filesystem-adapter.d.ts +14 -11
- package/dist/runtime/storage/filesystem-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/filesystem-adapter.js +71 -201
- package/dist/runtime/storage/filesystem-adapter.js.map +1 -1
- package/dist/runtime/storage/frontmatter-codec.d.ts +47 -0
- package/dist/runtime/storage/frontmatter-codec.d.ts.map +1 -0
- package/dist/runtime/storage/frontmatter-codec.js +523 -0
- package/dist/runtime/storage/frontmatter-codec.js.map +1 -0
- package/dist/runtime/storage/fs-runtime.d.ts +8 -0
- package/dist/runtime/storage/fs-runtime.d.ts.map +1 -0
- package/dist/runtime/storage/fs-runtime.js +40 -0
- package/dist/runtime/storage/fs-runtime.js.map +1 -0
- package/dist/runtime/storage/id-contracts.d.ts +22 -0
- package/dist/runtime/storage/id-contracts.d.ts.map +1 -0
- package/dist/runtime/storage/id-contracts.js +27 -0
- package/dist/runtime/storage/id-contracts.js.map +1 -0
- package/dist/runtime/storage/image-validation.d.ts +10 -0
- package/dist/runtime/storage/image-validation.d.ts.map +1 -1
- package/dist/runtime/storage/image-validation.js +17 -4
- package/dist/runtime/storage/image-validation.js.map +1 -1
- package/dist/runtime/storage/in-memory-adapter.d.ts +4 -0
- package/dist/runtime/storage/in-memory-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/in-memory-adapter.js +11 -0
- package/dist/runtime/storage/in-memory-adapter.js.map +1 -1
- package/dist/runtime/storage/markdown-adapter.d.ts +63 -0
- package/dist/runtime/storage/markdown-adapter.d.ts.map +1 -0
- package/dist/runtime/storage/markdown-adapter.js +227 -0
- package/dist/runtime/storage/markdown-adapter.js.map +1 -0
- package/dist/runtime/storage/quota-upload-handler.d.ts +2 -0
- package/dist/runtime/storage/quota-upload-handler.d.ts.map +1 -1
- package/dist/runtime/storage/quota-upload-handler.js +34 -8
- package/dist/runtime/storage/quota-upload-handler.js.map +1 -1
- package/dist/runtime/storage/session-overlay-adapter.d.ts +3 -0
- package/dist/runtime/storage/session-overlay-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/session-overlay-adapter.js +3 -1
- package/dist/runtime/storage/session-overlay-adapter.js.map +1 -1
- package/dist/runtime/storage/sidecar-meta-store.d.ts +51 -0
- package/dist/runtime/storage/sidecar-meta-store.d.ts.map +1 -0
- package/dist/runtime/storage/sidecar-meta-store.js +209 -0
- package/dist/runtime/storage/sidecar-meta-store.js.map +1 -0
- package/dist/runtime/themes/preset-tokens.d.ts +0 -1
- package/dist/runtime/themes/preset-tokens.d.ts.map +1 -1
- package/dist/runtime/themes/preset-tokens.js +1 -1
- package/dist/runtime/themes/preset-tokens.js.map +1 -1
- package/dist/runtime/utils.d.ts +9 -1
- package/dist/runtime/utils.d.ts.map +1 -1
- package/dist/runtime/utils.js +21 -1
- package/dist/runtime/utils.js.map +1 -1
- package/dist/runtime/views/studio-layout.d.ts.map +1 -1
- package/dist/runtime/views/studio-layout.js +11 -10
- package/dist/runtime/views/studio-layout.js.map +1 -1
- package/dist/schema-utils.d.ts.map +1 -1
- package/dist/schema-utils.js +1 -0
- package/dist/schema-utils.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -1
- package/static/cms/dev-toolbar/app.js +265 -0
- package/static/cms/editor/config.js +10 -0
- package/static/cms/editor/helpers.js +5 -1
- package/static/cms/editor/highlight.js +44 -0
- package/static/cms/editor/sanitize.js +56 -9
- package/static/cms/editor/stega-hydrate.js +80 -0
- package/static/cms/editor/text-edit.js +22 -0
- package/static/cms/editor/tokens-and-text.css +1 -1
- package/static/cms/editor/toolbar.css +101 -4
- package/static/cms/editor/toolbar.js +171 -21
- package/static/cms/editor.js +18 -1
- package/static/cms/signin-hint.css +74 -0
- package/static/cms/studio-login.css +70 -0
- package/static/cms/studio.css +80 -13
- package/dist/runtime/schema/template.d.ts +0 -15
- package/dist/runtime/schema/template.d.ts.map +0 -1
- package/dist/runtime/schema/template.js +0 -38
- package/dist/runtime/schema/template.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,25 +2,91 @@
|
|
|
2
2
|
|
|
3
3
|
Inline editing and live content collections for Astro. Add one HTML attribute to make any element editable, and use Astro's live loaders to query CMS data with `getLiveEntry` / `getLiveCollection` (stable on Astro 6, experimental on Astro 5.10+).
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
## Install
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
10
|
npm install @caretcms/core
|
|
9
11
|
```
|
|
10
12
|
|
|
13
|
+
**Static Astro site?** Use static delivery — no SSR adapter:
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
integrations: [caret({ delivery: 'static' })],
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Server-rendered site?** Add an adapter and server output:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @astrojs/node
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
output: 'server',
|
|
27
|
+
adapter: node({ mode: 'standalone' }),
|
|
28
|
+
integrations: [caret()],
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
See [Static delivery](../../docs/static-delivery.md) and [Rendering & output](#rendering--output) below.
|
|
32
|
+
|
|
11
33
|
## Setup
|
|
12
34
|
|
|
35
|
+
### Static delivery (default path for static Astro sites)
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
// astro.config.mjs
|
|
39
|
+
import { defineConfig } from 'astro/config';
|
|
40
|
+
import caret from '@caretcms/core';
|
|
41
|
+
|
|
42
|
+
export default defineConfig({
|
|
43
|
+
integrations: [caret({ delivery: 'static' })],
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- **`astro dev`** — full authoring: `/admin`, `/api/cms`, inline editor.
|
|
48
|
+
- **`astro build`** — bakes stored overrides into generated HTML; authoring routes stay out of production output.
|
|
49
|
+
- **Public updates** — after Publish, run CI/build/deploy (optionally via `delivery.publish.webhookUrl`).
|
|
50
|
+
|
|
51
|
+
### Server delivery (per-request rewriting)
|
|
52
|
+
|
|
13
53
|
```js
|
|
14
54
|
// astro.config.mjs
|
|
15
55
|
import { defineConfig } from 'astro/config';
|
|
56
|
+
import node from '@astrojs/node';
|
|
16
57
|
import caret from '@caretcms/core';
|
|
17
58
|
|
|
18
59
|
export default defineConfig({
|
|
19
60
|
output: 'server',
|
|
61
|
+
adapter: node({ mode: 'standalone' }),
|
|
20
62
|
integrations: [caret()],
|
|
21
63
|
});
|
|
22
64
|
```
|
|
23
65
|
|
|
66
|
+
Edits are visible to visitors immediately — middleware rewrites HTML on each request.
|
|
67
|
+
|
|
68
|
+
**Already have Astro content collections?** If your project has collections under
|
|
69
|
+
`src/content/` and you haven't set `storage`, CaretCMS auto-selects
|
|
70
|
+
`markdownStorage()` so the Studio lists those collections immediately (instead of
|
|
71
|
+
"No collections yet") and edits write back to your `.md` frontmatter. Pass an
|
|
72
|
+
explicit `storage` to override — `storage: filesystemStorage()` opts back out.
|
|
73
|
+
|
|
74
|
+
## Choose your path
|
|
75
|
+
|
|
76
|
+
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.
|
|
77
|
+
|
|
78
|
+
| Start here if… | Use | What you write |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| 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 |
|
|
81
|
+
| The same fields repeat or you want short attribute names | **Scoped inline editing** | a `data-caret-scope` wrapper + short `data-caret` names |
|
|
82
|
+
| 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` |
|
|
83
|
+
|
|
84
|
+
**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.
|
|
85
|
+
|
|
86
|
+
> Adding `data-caret` to an existing site by hand? `npx @caretcms/caretize` scans your Astro
|
|
87
|
+
> project and interactively annotates your templates for you. The attributes below are all you
|
|
88
|
+
> need either way — caretize just writes them.
|
|
89
|
+
|
|
24
90
|
## Inline editing
|
|
25
91
|
|
|
26
92
|
Add `data-caret` attributes to your templates:
|
|
@@ -33,18 +99,28 @@ Add `data-caret` attributes to your templates:
|
|
|
33
99
|
</main>
|
|
34
100
|
```
|
|
35
101
|
|
|
36
|
-
|
|
102
|
+
Start the dev server:
|
|
37
103
|
|
|
38
104
|
```bash
|
|
39
|
-
|
|
105
|
+
npm run dev
|
|
40
106
|
```
|
|
41
107
|
|
|
42
|
-
|
|
108
|
+
With no password configured, a **temporary dev password is printed in the terminal** (dev only —
|
|
109
|
+
production stays locked). To set a permanent one, add `CARET_EDIT_PASSWORD=<your-password>` to a
|
|
110
|
+
`.env` file.
|
|
111
|
+
|
|
112
|
+
Log in at `/admin`, then click any annotated element on the page to edit it. The content Studio
|
|
113
|
+
lives at `/admin/cms`.
|
|
43
114
|
|
|
44
115
|
The inline editor only bootstraps on pages that contain `data-caret` bindings and only after
|
|
45
116
|
`GET /api/cms/auth/session` confirms an authenticated editor session. Session cookies are issued
|
|
46
117
|
as `HttpOnly`, `SameSite=Lax`, and automatically add `Secure` on HTTPS requests.
|
|
47
118
|
|
|
119
|
+
When you're signed in and land on a live page that has **no** `data-caret` bindings yet, CaretCMS
|
|
120
|
+
shows a small "signed in · no editable fields on this page" hint pointing you at the next step —
|
|
121
|
+
so a page that isn't annotated yet reads as "nothing to edit here" rather than "is this broken?".
|
|
122
|
+
The hint is editor-only (anonymous visitors never see it) and never appears inside the Studio.
|
|
123
|
+
|
|
48
124
|
## Live content collections
|
|
49
125
|
|
|
50
126
|
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,14 +192,31 @@ export default defineConfig({
|
|
|
116
192
|
|
|
117
193
|
When provided, Studio uses these for field names, types, and editor widgets instead of guessing from the first entry.
|
|
118
194
|
|
|
195
|
+
**Already describe your collections with Zod?** If you have a `content.config.ts` Zod schema,
|
|
196
|
+
don't write it twice — `@caretcms/zod` derives the Studio schema from that single source:
|
|
197
|
+
|
|
198
|
+
```js
|
|
199
|
+
// astro.config.mjs
|
|
200
|
+
import { schemaFromZod } from '@caretcms/zod';
|
|
201
|
+
import { blogSchema } from './src/schemas.mjs'; // the same object content.config.ts uses
|
|
202
|
+
|
|
203
|
+
caret({ schemas: { blog: schemaFromZod(blogSchema) } });
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
(Keep your Zod schemas in a plain module that imports only `zod` — not `astro:content` — so both
|
|
207
|
+
`content.config.ts` and `astro.config` can import them.) Schemas remain optional: with
|
|
208
|
+
auto-detected `markdownStorage` the Studio already shows each collection with fields inferred from
|
|
209
|
+
existing entries; deriving from Zod just adds proper labels, types, and widget hints.
|
|
210
|
+
|
|
119
211
|
## What you get
|
|
120
212
|
|
|
121
213
|
- **Inline editing** on any `data-caret` element (text and images)
|
|
122
214
|
- **Live content collections** via `caretLoader` for `getLiveEntry` / `getLiveCollection` (Astro 6 stable, Astro 5.10+ behind `experimental.liveContentCollections`)
|
|
123
215
|
- **Content Studio** at `/admin/cms` for structured CRUD
|
|
124
216
|
- **Section composer** for reordering and spacing page sections
|
|
125
|
-
- **Response rewriting** middleware
|
|
217
|
+
- **Response rewriting** middleware (server delivery) or **build-time HTML bake** (static delivery)
|
|
126
218
|
- **Scoped bindings** via `data-caret-scope` to reduce repetition
|
|
219
|
+
- **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
220
|
- **Revision safety** with optimistic locking and restore from history
|
|
128
221
|
- **Storage adapters** — filesystem (default), in-memory, or custom via `StorageAdapter` interface
|
|
129
222
|
|
|
@@ -174,17 +267,100 @@ caret({
|
|
|
174
267
|
apiBasePath: '/api/cms', // API route prefix (default: /api/cms)
|
|
175
268
|
enableAdmin: true, // Inject admin pages (default: true)
|
|
176
269
|
enableInlineEditor: true, // Inject inline editor (default: true)
|
|
177
|
-
|
|
270
|
+
delivery: 'static', // 'static' | 'server' | { mode, bake, publish }
|
|
271
|
+
storage: filesystemStorage(), // Storage adapter (default: markdownStorage when
|
|
272
|
+
// src/content collections exist, else filesystem)
|
|
178
273
|
uploads: localUploads(), // Upload handler (default: local filesystem)
|
|
179
274
|
schemas: {}, // Optional JSON Schema map for Studio (default: inferred)
|
|
180
275
|
})
|
|
181
276
|
```
|
|
182
277
|
|
|
278
|
+
## Rendering & output
|
|
279
|
+
|
|
280
|
+
CaretCMS supports two delivery modes via `delivery`:
|
|
281
|
+
|
|
282
|
+
| | **Static delivery** | **Server delivery** (default) |
|
|
283
|
+
|---|---|---|
|
|
284
|
+
| Config | `caret({ delivery: 'static' })` | `caret()` on `output: 'server'` + adapter |
|
|
285
|
+
| Public HTML | Baked at `astro build` | Rewritten per request in middleware |
|
|
286
|
+
| Production CMS routes | Not shipped in static output | `/admin`, `/api/cms` live on the server |
|
|
287
|
+
| Visitor sees edits | After publish + rebuild | Immediately after save |
|
|
288
|
+
| SSR adapter | Not required | Required |
|
|
289
|
+
|
|
290
|
+
### Static delivery
|
|
291
|
+
|
|
292
|
+
Use when your site stays `output: 'static'`. Local authoring works in `astro dev`; production
|
|
293
|
+
is plain static files with content baked in.
|
|
294
|
+
|
|
295
|
+
```js
|
|
296
|
+
caret({
|
|
297
|
+
delivery: {
|
|
298
|
+
mode: 'static',
|
|
299
|
+
bake: true,
|
|
300
|
+
publish: {
|
|
301
|
+
webhookUrl: 'https://ci.example.com/hooks/rebuild',
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
})
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Full guide: [docs/static-delivery.md](../../docs/static-delivery.md).
|
|
308
|
+
|
|
309
|
+
### Server delivery
|
|
310
|
+
|
|
311
|
+
Middleware injects stored edits at request time. Requires `output: 'server'` (or compatible
|
|
312
|
+
adapter host). Mostly-static site? Under server output you can keep individual pages static
|
|
313
|
+
with `export const prerender = true`; pages with editable content should stay server-rendered.
|
|
314
|
+
|
|
315
|
+
> **Migrating a static site to server delivery:** switching to `output: 'server'` changes
|
|
316
|
+
> how `getStaticPaths` pages receive props. Add `export const prerender = true` to keep a
|
|
317
|
+
> page static, or fetch at request time. This is standard Astro behavior, not CaretCMS-specific.
|
|
318
|
+
|
|
319
|
+
## What gets written to disk
|
|
320
|
+
|
|
321
|
+
The default (embedded) providers write inside your project:
|
|
322
|
+
|
|
323
|
+
| Path | What | Written by |
|
|
324
|
+
|---|---|---|
|
|
325
|
+
| `.caret/data/` | entry JSON | `filesystemStorage()` (default) |
|
|
326
|
+
| `.caret/drafts/` | per-editor draft overlays | `filesystemStorage()` |
|
|
327
|
+
| `.caretcms/` | revisions + history sidecar | both filesystem and markdown storage |
|
|
328
|
+
| `src/content/**.md` | frontmatter edits | `markdownStorage()` (auto-selected when you have content collections) |
|
|
329
|
+
| `public/uploads/` | uploaded images | `localUploads()` (default) |
|
|
330
|
+
|
|
331
|
+
Recommended `.gitignore` for the transient state (keep `.caret/data/` or your
|
|
332
|
+
`src/content` edits if git IS your content store — see the commit-on-publish
|
|
333
|
+
workflow in [docs/deployment.md](../../docs/deployment.md)):
|
|
334
|
+
|
|
335
|
+
```gitignore
|
|
336
|
+
.caretcms/
|
|
337
|
+
.caret/drafts/
|
|
338
|
+
public/uploads/
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Production checklist
|
|
342
|
+
|
|
343
|
+
- `CARET_EDIT_PASSWORD` — the editor password. Without it, production is locked (no dev fallback).
|
|
344
|
+
- `CARET_SESSION_SECRET` — **required in production** when a password is set; sessions are
|
|
345
|
+
HMAC-signed with it. Generate one with `openssl rand -base64 32`. If it's missing, logins
|
|
346
|
+
return a configuration error and existing sessions are treated as signed out.
|
|
347
|
+
- `markdownStorage()` edits `src/content/*.md` **at request time** — a dev/git workflow. In
|
|
348
|
+
production, pair it with commit-on-publish + a CI rebuild (fields rendered through
|
|
349
|
+
`getCollection()` are baked at build time and only refresh on rebuild), or use a server-side
|
|
350
|
+
adapter like [`@caretcms/cloudflare`](https://www.npmjs.com/package/@caretcms/cloudflare).
|
|
351
|
+
- `localUploads()` writes to `public/uploads`, which built sites serve from `dist/client` —
|
|
352
|
+
files uploaded *after* the build won't be served. Treat it as dev-only and use R2 (or your
|
|
353
|
+
own `UploadHandler`) in production.
|
|
354
|
+
- Defaults resolve paths from the **server process's working directory**; run the built server
|
|
355
|
+
from your project root, or pass explicit paths (`filesystemStorage({ dataRoot })`,
|
|
356
|
+
`markdownStorage({ contentRoot })`, `localUploads({ uploadsDir })`).
|
|
357
|
+
|
|
183
358
|
## Requirements
|
|
184
359
|
|
|
185
360
|
- Astro 5 or 6
|
|
186
361
|
- Node 20.19.1+ or 22.12.0+
|
|
187
|
-
-
|
|
362
|
+
- **Static delivery:** default Astro static output (no adapter)
|
|
363
|
+
- **Server delivery:** `output: 'server'` plus an SSR adapter
|
|
188
364
|
|
|
189
365
|
## License
|
|
190
366
|
|
|
@@ -6,7 +6,23 @@ export interface CloudCmsClientConfig {
|
|
|
6
6
|
sessionToken?: string;
|
|
7
7
|
environment?: string;
|
|
8
8
|
}
|
|
9
|
+
type Scope = {
|
|
10
|
+
collection: string;
|
|
11
|
+
id: string;
|
|
12
|
+
};
|
|
13
|
+
type Binding = {
|
|
14
|
+
element: Element;
|
|
15
|
+
collection: string;
|
|
16
|
+
id: string;
|
|
17
|
+
field: string;
|
|
18
|
+
isImage: boolean;
|
|
19
|
+
isRich: boolean;
|
|
20
|
+
hasChildMarkup: boolean;
|
|
21
|
+
};
|
|
22
|
+
export declare function getNearestScope(element: Element): Scope | null;
|
|
23
|
+
export declare function resolveBindingValue(value: string, scope: Scope | null): Omit<Binding, "element" | "isImage" | "isRich" | "hasChildMarkup"> | null;
|
|
9
24
|
export declare function bootstrapCloudCms(config: CloudCmsClientConfig, root?: ParentNode): Promise<void>;
|
|
10
25
|
export declare function hasCloudCmsSession(config: CloudCmsClientConfig): boolean;
|
|
11
26
|
export declare function redirectToCloudCmsLogin(config: CloudCmsClientConfig, redirectTo?: string): void;
|
|
27
|
+
export {};
|
|
12
28
|
//# sourceMappingURL=browser-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"
|
|
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;AAED,KAAK,KAAK,GAAG;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAgGF,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAS9D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAmBjJ;AA+MD,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"}
|
package/dist/browser-runtime.js
CHANGED
|
@@ -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
|
}
|
|
@@ -90,13 +92,18 @@ function parseScopeValue(value) {
|
|
|
90
92
|
return null;
|
|
91
93
|
return { collection, id };
|
|
92
94
|
}
|
|
93
|
-
function getNearestScope(element) {
|
|
94
|
-
|
|
95
|
+
export function getNearestScope(element) {
|
|
96
|
+
// ANCESTORS only — never the element itself. The server's rewrite engine
|
|
97
|
+
// processes scope frames for tags opened BEFORE the bound element, so an
|
|
98
|
+
// element carrying both data-caret-scope and data-caret does not scope its
|
|
99
|
+
// own binding; a bare `closest()` here (which matches self) silently
|
|
100
|
+
// resolved such bindings differently from the published render.
|
|
101
|
+
const scopeElement = element.parentElement?.closest("[data-caret-scope]") ?? null;
|
|
95
102
|
if (!scopeElement)
|
|
96
103
|
return null;
|
|
97
104
|
return parseScopeValue(scopeElement.getAttribute("data-caret-scope"));
|
|
98
105
|
}
|
|
99
|
-
function resolveBindingValue(value, scope) {
|
|
106
|
+
export function resolveBindingValue(value, scope) {
|
|
100
107
|
const parts = value.split("::");
|
|
101
108
|
if (parts.length === 3) {
|
|
102
109
|
return {
|
|
@@ -140,21 +147,20 @@ function collectBindings(root = document) {
|
|
|
140
147
|
return bindings;
|
|
141
148
|
}
|
|
142
149
|
// --- Browser-side HTML sanitizer for rich text ---
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
]);
|
|
146
|
-
const RICH_ALLOWED_ATTRS = {
|
|
147
|
-
a: new Set(["href", "target", "rel"]),
|
|
148
|
-
};
|
|
149
|
-
const SAFE_HREF_RE = /^(?:https?:|mailto:|tel:|\/)/i;
|
|
150
|
+
// Allowlist + matcher come from runtime/rich-allowlist.ts (shared with the
|
|
151
|
+
// server sanitizer); static/cms/editor/sanitize.js mirrors them by hand.
|
|
150
152
|
function sanitizeHtmlBrowser(html) {
|
|
151
153
|
if (!html)
|
|
152
154
|
return "";
|
|
155
|
+
const allowedClasses = (typeof window !== "undefined"
|
|
156
|
+
? window.__CARET__
|
|
157
|
+
?.allowedClasses
|
|
158
|
+
: undefined) ?? null;
|
|
153
159
|
const doc = new DOMParser().parseFromString(`<body>${html}</body>`, "text/html");
|
|
154
|
-
sanitizeNode(doc.body);
|
|
160
|
+
sanitizeNode(doc.body, allowedClasses);
|
|
155
161
|
return doc.body.innerHTML;
|
|
156
162
|
}
|
|
157
|
-
function sanitizeNode(parent) {
|
|
163
|
+
function sanitizeNode(parent, allowedClasses) {
|
|
158
164
|
const children = Array.from(parent.childNodes);
|
|
159
165
|
for (const node of children) {
|
|
160
166
|
if (node.nodeType === Node.TEXT_NODE)
|
|
@@ -170,12 +176,29 @@ function sanitizeNode(parent) {
|
|
|
170
176
|
while (el.firstChild)
|
|
171
177
|
frag.appendChild(el.firstChild);
|
|
172
178
|
parent.replaceChild(frag, el);
|
|
173
|
-
sanitizeNode(parent);
|
|
179
|
+
sanitizeNode(parent, allowedClasses);
|
|
174
180
|
return;
|
|
175
181
|
}
|
|
176
182
|
const allowed = RICH_ALLOWED_ATTRS[tag];
|
|
183
|
+
const classPatterns = allowedClasses ? allowedClasses[tag] : undefined;
|
|
177
184
|
const attrs = Array.from(el.attributes);
|
|
178
185
|
for (const attr of attrs) {
|
|
186
|
+
// class is gated by the per-tag allowlist, not RICH_ALLOWED_ATTRS
|
|
187
|
+
if (attr.name === "class") {
|
|
188
|
+
if (!classPatterns) {
|
|
189
|
+
el.removeAttribute("class");
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const kept = attr.value
|
|
193
|
+
.split(/\s+/)
|
|
194
|
+
.filter((c) => c !== "" && classAllowed(c, classPatterns))
|
|
195
|
+
.join(" ");
|
|
196
|
+
if (kept)
|
|
197
|
+
el.setAttribute("class", kept);
|
|
198
|
+
else
|
|
199
|
+
el.removeAttribute("class");
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
179
202
|
if (!allowed || !allowed.has(attr.name)) {
|
|
180
203
|
el.removeAttribute(attr.name);
|
|
181
204
|
}
|
|
@@ -190,19 +213,15 @@ function sanitizeNode(parent) {
|
|
|
190
213
|
el.setAttribute("rel", "noopener noreferrer");
|
|
191
214
|
}
|
|
192
215
|
}
|
|
193
|
-
sanitizeNode(el);
|
|
216
|
+
sanitizeNode(el, allowedClasses);
|
|
194
217
|
}
|
|
195
218
|
}
|
|
196
219
|
function getNestedString(data, path) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
current = current[key];
|
|
204
|
-
}
|
|
205
|
-
return typeof current === "string" ? current : undefined;
|
|
220
|
+
// Shared dot-path semantics: arrays traverse by numeric index. The previous
|
|
221
|
+
// local copy bailed on arrays, so `items.0.title` resolved server-side (the
|
|
222
|
+
// rewrite engine) but silently failed here in the cloud live-sync path.
|
|
223
|
+
const value = getNestedValue(data, path);
|
|
224
|
+
return typeof value === "string" ? value : undefined;
|
|
206
225
|
}
|
|
207
226
|
function applyBindingValue(binding, value) {
|
|
208
227
|
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"}
|
package/dist/editable.js
ADDED
|
@@ -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
|