@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.
- package/README.md +117 -6
- package/dist/browser-runtime.d.ts.map +1 -1
- package/dist/browser-runtime.js +34 -20
- 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 +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +134 -2
- 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 +7 -0
- package/dist/runtime/providers.d.ts.map +1 -1
- package/dist/runtime/providers.js +10 -0
- package/dist/runtime/providers.js.map +1 -1
- package/dist/runtime/publish.d.ts +38 -0
- package/dist/runtime/publish.d.ts.map +1 -0
- package/dist/runtime/publish.js +71 -0
- package/dist/runtime/publish.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 +11 -1
- package/dist/runtime/rewrite.d.ts.map +1 -1
- package/dist/runtime/rewrite.js +21 -15
- package/dist/runtime/rewrite.js.map +1 -1
- package/dist/runtime/rich-allowlist.d.ts +28 -0
- package/dist/runtime/rich-allowlist.d.ts.map +1 -0
- package/dist/runtime/rich-allowlist.js +43 -0
- package/dist/runtime/rich-allowlist.js.map +1 -0
- package/dist/runtime/routes/_helpers.d.ts +26 -0
- package/dist/runtime/routes/_helpers.d.ts.map +1 -1
- package/dist/runtime/routes/_helpers.js +83 -0
- package/dist/runtime/routes/_helpers.js.map +1 -1
- package/dist/runtime/routes/admin.d.ts.map +1 -1
- package/dist/runtime/routes/admin.js +55 -6
- package/dist/runtime/routes/admin.js.map +1 -1
- package/dist/runtime/routes/auth-login.d.ts.map +1 -1
- package/dist/runtime/routes/auth-login.js +25 -8
- package/dist/runtime/routes/auth-login.js.map +1 -1
- package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
- package/dist/runtime/routes/auth-logout.js +4 -0
- package/dist/runtime/routes/auth-logout.js.map +1 -1
- package/dist/runtime/routes/collections-metadata.d.ts.map +1 -1
- package/dist/runtime/routes/collections-metadata.js +4 -2
- package/dist/runtime/routes/collections-metadata.js.map +1 -1
- package/dist/runtime/routes/draft.d.ts +8 -0
- package/dist/runtime/routes/draft.d.ts.map +1 -0
- package/dist/runtime/routes/draft.js +38 -0
- package/dist/runtime/routes/draft.js.map +1 -0
- package/dist/runtime/routes/history.d.ts.map +1 -1
- package/dist/runtime/routes/history.js +21 -8
- package/dist/runtime/routes/history.js.map +1 -1
- package/dist/runtime/routes/mutate.d.ts.map +1 -1
- package/dist/runtime/routes/mutate.js +5 -9
- package/dist/runtime/routes/mutate.js.map +1 -1
- package/dist/runtime/routes/publish.d.ts +9 -0
- package/dist/runtime/routes/publish.d.ts.map +1 -0
- package/dist/runtime/routes/publish.js +66 -0
- package/dist/runtime/routes/publish.js.map +1 -0
- package/dist/runtime/routes/schema.d.ts.map +1 -1
- package/dist/runtime/routes/schema.js +4 -2
- package/dist/runtime/routes/schema.js.map +1 -1
- package/dist/runtime/routes/upload.d.ts.map +1 -1
- package/dist/runtime/routes/upload.js +16 -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/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 +515 -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/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 +263 -0
- package/static/cms/editor/highlight.js +46 -0
- package/static/cms/editor/sanitize.js +48 -5
- 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 +42 -0
- package/static/cms/editor/toolbar.js +97 -15
- package/static/cms/editor.js +15 -0
- package/static/cms/signin-hint.css +74 -0
- 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
|
@@ -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
|
-
|
|
63
|
+
Start the dev server:
|
|
37
64
|
|
|
38
65
|
```bash
|
|
39
|
-
|
|
66
|
+
npm run dev
|
|
40
67
|
```
|
|
41
68
|
|
|
42
|
-
|
|
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:
|
|
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":"
|
|
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"}
|
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
|
}
|
|
@@ -140,21 +142,20 @@ function collectBindings(root = document) {
|
|
|
140
142
|
return bindings;
|
|
141
143
|
}
|
|
142
144
|
// --- 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;
|
|
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
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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"}
|
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
|
|
@@ -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;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|