@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../../../src/runtime/storage/atomic-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,QAAgB;IAClE,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,MAAM,CAAC;IAClD,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAI,GAAW,EAAE,IAAsB;IACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,WAAW,CAAC,GAAG,CACb,GAAG,EACH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;QAChB,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,16 +1,25 @@
1
1
  import type { CollectionMetadata, EntryData, HistoryEntry, StorageAdapter } from "../../types.js";
2
+ /**
3
+ * Reference StorageAdapter that stores each entry as a JSON file under
4
+ * `.caret/data/<collection>/<id>.json`, delegating all revision, history, and
5
+ * collection-metadata concerns to a shared `SidecarMetaStore` (`.caretcms/`).
6
+ */
2
7
  export declare class FilesystemAdapter implements StorageAdapter {
3
8
  private readonly dataRoot;
4
- private readonly metaRoot;
9
+ private readonly meta;
10
+ private readonly draftsRoot;
5
11
  constructor(options?: {
6
12
  dataRoot?: string;
7
13
  metaRoot?: string;
14
+ draftsRoot?: string;
8
15
  });
9
16
  private collectionDir;
10
- private revisionStorePath;
11
- private revisionMapKey;
12
- private historyFilePath;
13
- private discoverFromDir;
17
+ /** The data root — what git stages for commit-on-publish (a no-op if it's
18
+ * gitignored, e.g. the default `.caret/data`). */
19
+ committablePath(): string;
20
+ /** A persistent draft overlay for one editor, as a sibling JSON store under
21
+ * `<.caret>/drafts/<editorId>/`. Same id → same on-disk store. */
22
+ makeEditorOverlay(editorId: string): Promise<StorageAdapter>;
14
23
  discoverCollections(): Promise<string[]>;
15
24
  isKnownCollection(collection: string): Promise<boolean>;
16
25
  getEntry(collection: string, id: string): Promise<EntryData | null>;
@@ -18,16 +27,10 @@ export declare class FilesystemAdapter implements StorageAdapter {
18
27
  listEntries(collection: string): Promise<EntryData[]>;
19
28
  writeEntry(collection: string, id: string, data: Record<string, unknown>): Promise<void>;
20
29
  deleteEntry(collection: string, id: string): Promise<void>;
21
- private readRevisionMap;
22
- private writeRevisionMap;
23
30
  getRevision(collection: string, id: string): Promise<number>;
24
31
  bumpRevision(collection: string, id: string): Promise<number>;
25
- private readHistoryFile;
26
- private writeHistoryFile;
27
32
  getHistory(collection: string, id: string): Promise<HistoryEntry[]>;
28
33
  appendHistory(collection: string, id: string, entry: HistoryEntry): Promise<void>;
29
- private collectionsMetaDir;
30
- private collectionMetaPath;
31
34
  createCollection(metadata: CollectionMetadata): Promise<void>;
32
35
  deleteCollection(collection: string): Promise<void>;
33
36
  getCollectionMetadata(collection: string): Promise<CollectionMetadata | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAiFlG,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAM9D,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;YAMT,eAAe;IAWvB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IASxC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAanE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYnD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMrD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAalD,eAAe;YAmBf,gBAAgB;IAMxB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAcrD,eAAe;YAYf,gBAAgB;IAUxB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAInE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvF,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;IAIpB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAY7E,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAiB9D"}
1
+ {"version":3,"file":"filesystem-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWlG;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IASnF,OAAO,CAAC,aAAa;IAIrB;uDACmD;IACnD,eAAe,IAAI,MAAM;IAIzB;uEACmE;IAC7D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW5D,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IASxC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoBnE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcnD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMrD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM7D,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAInE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3E,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAI7E,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAGxD"}
@@ -1,105 +1,54 @@
1
- import { mkdir, readFile, readdir, rm, unlink, writeFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
- const COLLECTION_NAME_RE = /^[a-z][a-z0-9_-]*$/;
4
- const HISTORY_LIMIT = 50;
5
- /** workerd (incl. Astro 6's dev server) sets navigator.userAgent to this. */
6
- const WORKERD_USER_AGENT = "Cloudflare-Workers";
7
- /**
8
- * Return a human-readable runtime name if filesystem storage cannot work here,
9
- * or null when a real Node filesystem is available.
10
- *
11
- * Astro 6's dev server runs on the same workerd runtime as production, so a
12
- * Workers-targeted project has no filesystem in dev *or* prod — the failure
13
- * would otherwise surface as silently-empty reads and cryptic write errors.
14
- */
15
- function detectUnsupportedRuntime() {
16
- const g = globalThis;
17
- // navigator.userAgent === "Cloudflare-Workers" only when the `global_navigator`
18
- // compat flag is on, so also check WebSocketPair — a workerd global present
19
- // regardless of compat flags — to detect Workers even on an old compat date.
20
- if (g.navigator?.userAgent === WORKERD_USER_AGENT || typeof g.WebSocketPair === "function") {
21
- return "Cloudflare Workers (workerd)";
22
- }
23
- if (typeof process === "undefined" || typeof process.cwd !== "function") {
24
- return "a non-Node runtime";
25
- }
26
- return null;
27
- }
28
- function assertFilesystemRuntime() {
29
- const runtime = detectUnsupportedRuntime();
30
- if (!runtime)
31
- return;
32
- throw new Error(`[caretcms] Filesystem storage is not available on ${runtime}.\n` +
33
- `Astro 6's dev server also runs on workerd, so this fails in dev as well as production.\n\n` +
34
- `Targeting Cloudflare Workers? Use the KV adapter from @caretcms/cloudflare in BOTH dev and prod:\n\n` +
35
- ` import { cloudflareStorage } from '@caretcms/cloudflare';\n` +
36
- ` // caret({ storage: cloudflareStorage(), ... })\n\n` +
37
- `Targeting a Node host? Filesystem storage works there — make sure you are not building for an edge runtime.`);
38
- }
1
+ import { mkdir, readFile, readdir, rm, unlink } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { atomicWrite } from "./atomic-write.js";
4
+ import { assertFilesystemRuntime } from "./fs-runtime.js";
5
+ import { SidecarMetaStore, listCollectionDirs } from "./sidecar-meta-store.js";
6
+ import { COLLECTION_NAME_RE, ENTRY_ID_RE, assertSafeEditorId } from "./id-contracts.js";
39
7
  function asObjectRecord(value) {
40
8
  if (!value || typeof value !== "object" || Array.isArray(value))
41
9
  return null;
42
10
  return value;
43
11
  }
44
- function isHistoryEntry(value) {
45
- if (!value || typeof value !== "object" || Array.isArray(value))
46
- return false;
47
- const obj = value;
48
- return (typeof obj.ts === "number" &&
49
- Number.isFinite(obj.ts) &&
50
- typeof obj.action === "string" &&
51
- "data" in obj);
52
- }
53
- function isValidRevision(value) {
54
- return typeof value === "number" && Number.isInteger(value) && value >= 0;
55
- }
56
- const revisionWriteChains = new Map();
57
- function serializeRevisionWrite(filePath, task) {
58
- const previous = revisionWriteChains.get(filePath) ?? Promise.resolve();
59
- const next = previous.then(task, task);
60
- revisionWriteChains.set(filePath, next.finally(() => {
61
- if (revisionWriteChains.get(filePath) === next) {
62
- revisionWriteChains.delete(filePath);
63
- }
64
- }));
65
- return next;
66
- }
12
+ /**
13
+ * Reference StorageAdapter that stores each entry as a JSON file under
14
+ * `.caret/data/<collection>/<id>.json`, delegating all revision, history, and
15
+ * collection-metadata concerns to a shared `SidecarMetaStore` (`.caretcms/`).
16
+ */
67
17
  export class FilesystemAdapter {
68
18
  dataRoot;
69
- metaRoot;
19
+ meta;
20
+ draftsRoot;
70
21
  constructor(options) {
71
22
  assertFilesystemRuntime();
72
23
  this.dataRoot = options?.dataRoot ?? join(process.cwd(), ".caret", "data");
73
- this.metaRoot = options?.metaRoot ?? join(process.cwd(), ".caretcms");
24
+ const metaRoot = options?.metaRoot ?? join(process.cwd(), ".caretcms");
25
+ this.meta = new SidecarMetaStore({ metaRoot });
26
+ // Per-editor draft overlays live as sibling JSON stores under `<.caret>/drafts/`.
27
+ this.draftsRoot = options?.draftsRoot ?? join(dirname(this.dataRoot), "drafts");
74
28
  }
75
29
  collectionDir(collection) {
76
30
  return join(this.dataRoot, collection);
77
31
  }
78
- revisionStorePath() {
79
- return join(this.metaRoot, "revisions.json");
80
- }
81
- revisionMapKey(collection, id) {
82
- return `${collection}::${id}`;
83
- }
84
- historyFilePath(collection, id) {
85
- return join(this.metaRoot, "history", collection, `${id}.json`);
32
+ /** The data root — what git stages for commit-on-publish (a no-op if it's
33
+ * gitignored, e.g. the default `.caret/data`). */
34
+ committablePath() {
35
+ return this.dataRoot;
36
+ }
37
+ /** A persistent draft overlay for one editor, as a sibling JSON store under
38
+ * `<.caret>/drafts/<editorId>/`. Same id → same on-disk store. */
39
+ async makeEditorOverlay(editorId) {
40
+ const safe = assertSafeEditorId(editorId);
41
+ return new FilesystemAdapter({
42
+ dataRoot: join(this.draftsRoot, safe, "data"),
43
+ metaRoot: join(this.draftsRoot, safe, "meta"),
44
+ draftsRoot: join(this.draftsRoot, safe, "nested-drafts"),
45
+ });
86
46
  }
87
47
  // --- Collections ---
88
- async discoverFromDir(dir) {
89
- try {
90
- const entries = await readdir(dir, { withFileTypes: true });
91
- return entries
92
- .filter((e) => e.isDirectory() && COLLECTION_NAME_RE.test(e.name))
93
- .map((e) => e.name);
94
- }
95
- catch {
96
- return [];
97
- }
98
- }
99
48
  async discoverCollections() {
100
49
  const [fromData, fromMeta] = await Promise.all([
101
- this.discoverFromDir(this.dataRoot),
102
- this.discoverFromDir(join(this.metaRoot, "history")),
50
+ listCollectionDirs(this.dataRoot),
51
+ this.meta.listHistoryCollections(),
103
52
  ]);
104
53
  const merged = new Set([...fromData, ...fromMeta]);
105
54
  return [...merged].sort((a, b) => a.localeCompare(b));
@@ -112,6 +61,14 @@ export class FilesystemAdapter {
112
61
  }
113
62
  // --- Entries ---
114
63
  async getEntry(collection, id) {
64
+ // Defense in depth, mirroring the markdown adapter: the mutation engine
65
+ // validates before writes, but READS arrive straight from data-caret
66
+ // attributes via the rewrite engine. An unvalidated id here both joins
67
+ // arbitrary segments into a path and lets case-insensitive filesystems
68
+ // (macOS dev) resolve ids that a case-sensitive deploy (Linux) won't —
69
+ // a works-in-dev, breaks-in-prod trap.
70
+ if (!COLLECTION_NAME_RE.test(collection) || !ENTRY_ID_RE.test(id))
71
+ return null;
115
72
  const filePath = join(this.collectionDir(collection), `${id}.json`);
116
73
  try {
117
74
  const raw = await readFile(filePath, "utf8");
@@ -126,11 +83,14 @@ export class FilesystemAdapter {
126
83
  }
127
84
  }
128
85
  async listEntryIds(collection) {
86
+ if (!COLLECTION_NAME_RE.test(collection))
87
+ return [];
129
88
  try {
130
89
  const files = await readdir(this.collectionDir(collection), { withFileTypes: true });
131
90
  return files
132
91
  .filter((item) => item.isFile() && item.name.endsWith(".json"))
133
92
  .map((item) => item.name.slice(0, -".json".length))
93
+ .filter((stem) => ENTRY_ID_RE.test(stem))
134
94
  .sort((a, b) => a.localeCompare(b));
135
95
  }
136
96
  catch {
@@ -143,12 +103,17 @@ export class FilesystemAdapter {
143
103
  return entries.filter((entry) => Boolean(entry));
144
104
  }
145
105
  async writeEntry(collection, id, data) {
106
+ if (!COLLECTION_NAME_RE.test(collection) || !ENTRY_ID_RE.test(id)) {
107
+ throw new Error(`[caretcms] invalid entry path ${collection}/${id}`);
108
+ }
146
109
  const dir = this.collectionDir(collection);
147
110
  await mkdir(dir, { recursive: true });
148
111
  const filePath = join(dir, `${id}.json`);
149
- await writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, "utf8");
112
+ await atomicWrite(filePath, `${JSON.stringify(data, null, 2)}\n`);
150
113
  }
151
114
  async deleteEntry(collection, id) {
115
+ if (!COLLECTION_NAME_RE.test(collection) || !ENTRY_ID_RE.test(id))
116
+ return;
152
117
  const filePath = join(this.collectionDir(collection), `${id}.json`);
153
118
  try {
154
119
  await unlink(filePath);
@@ -160,132 +125,37 @@ export class FilesystemAdapter {
160
125
  throw error;
161
126
  }
162
127
  }
163
- // --- Revisions ---
164
- async readRevisionMap() {
165
- const filePath = this.revisionStorePath();
166
- try {
167
- const raw = await readFile(filePath, "utf8");
168
- const parsed = JSON.parse(raw);
169
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
170
- return {};
171
- const map = parsed;
172
- const out = {};
173
- Object.entries(map).forEach(([key, value]) => {
174
- if (isValidRevision(value)) {
175
- out[key] = value;
176
- }
177
- });
178
- return out;
179
- }
180
- catch {
181
- return {};
182
- }
183
- }
184
- async writeRevisionMap(map) {
185
- const filePath = this.revisionStorePath();
186
- await mkdir(this.metaRoot, { recursive: true });
187
- await writeFile(filePath, `${JSON.stringify(map, null, 2)}\n`, "utf8");
128
+ // --- Revisions (delegated) ---
129
+ getRevision(collection, id) {
130
+ return this.meta.getRevision(collection, id);
188
131
  }
189
- async getRevision(collection, id) {
190
- const map = await this.readRevisionMap();
191
- const value = map[this.revisionMapKey(collection, id)];
192
- return isValidRevision(value) ? value : 0;
132
+ bumpRevision(collection, id) {
133
+ return this.meta.bumpRevision(collection, id);
193
134
  }
194
- async bumpRevision(collection, id) {
195
- return serializeRevisionWrite(this.revisionStorePath(), async () => {
196
- const map = await this.readRevisionMap();
197
- const key = this.revisionMapKey(collection, id);
198
- const current = isValidRevision(map[key]) ? map[key] : 0;
199
- const next = current + 1;
200
- map[key] = next;
201
- await this.writeRevisionMap(map);
202
- return next;
203
- });
204
- }
205
- // --- History ---
206
- async readHistoryFile(collection, id) {
207
- const filePath = this.historyFilePath(collection, id);
208
- try {
209
- const raw = await readFile(filePath, "utf8");
210
- const parsed = JSON.parse(raw);
211
- if (!Array.isArray(parsed))
212
- return [];
213
- return parsed.filter(isHistoryEntry);
214
- }
215
- catch {
216
- return [];
217
- }
135
+ // --- History (delegated) ---
136
+ getHistory(collection, id) {
137
+ return this.meta.getHistory(collection, id);
218
138
  }
219
- async writeHistoryFile(collection, id, entries) {
220
- const filePath = this.historyFilePath(collection, id);
221
- await mkdir(join(this.metaRoot, "history", collection), { recursive: true });
222
- await writeFile(filePath, `${JSON.stringify(entries, null, 2)}\n`, "utf8");
223
- }
224
- async getHistory(collection, id) {
225
- return this.readHistoryFile(collection, id);
226
- }
227
- async appendHistory(collection, id, entry) {
228
- const current = await this.readHistoryFile(collection, id);
229
- const next = [entry, ...current].slice(0, HISTORY_LIMIT);
230
- await this.writeHistoryFile(collection, id, next);
231
- }
232
- // --- Collection Management ---
233
- collectionsMetaDir() {
234
- return join(this.metaRoot, "collections");
235
- }
236
- collectionMetaPath(collection) {
237
- return join(this.collectionsMetaDir(), `${collection}.json`);
139
+ appendHistory(collection, id, entry) {
140
+ return this.meta.appendHistory(collection, id, entry);
238
141
  }
142
+ // --- Collection management ---
239
143
  async createCollection(metadata) {
240
- const dir = this.collectionsMetaDir();
241
- await mkdir(dir, { recursive: true });
242
- const filePath = this.collectionMetaPath(metadata.id);
243
- await writeFile(filePath, `${JSON.stringify(metadata, null, 2)}\n`, "utf8");
244
- // Create empty collection directory
245
- const collectionDir = this.collectionDir(metadata.id);
246
- await mkdir(collectionDir, { recursive: true });
144
+ await this.meta.createCollection(metadata);
145
+ // The JSON adapter owns its data directory, so create it eagerly.
146
+ await mkdir(this.collectionDir(metadata.id), { recursive: true });
247
147
  }
248
148
  async deleteCollection(collection) {
249
- // unlink has no `force` option, so guard the metadata file against ENOENT.
250
- const metaPath = this.collectionMetaPath(collection);
251
- try {
252
- await unlink(metaPath);
253
- }
254
- catch (error) {
255
- const maybeErr = error;
256
- if (maybeErr?.code !== "ENOENT")
257
- throw error;
258
- }
259
- // rm({ force: true }) is a no-op on missing paths and still throws real errors.
149
+ await this.meta.deleteCollection(collection);
150
+ // The JSON adapter owns its entry files, so removing the collection removes
151
+ // its data directory too.
260
152
  await rm(this.collectionDir(collection), { recursive: true, force: true });
261
- await rm(join(this.metaRoot, "history", collection), { recursive: true, force: true });
262
153
  }
263
- async getCollectionMetadata(collection) {
264
- const filePath = this.collectionMetaPath(collection);
265
- try {
266
- const raw = await readFile(filePath, "utf8");
267
- const parsed = JSON.parse(raw);
268
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
269
- return null;
270
- return parsed;
271
- }
272
- catch {
273
- return null;
274
- }
154
+ getCollectionMetadata(collection) {
155
+ return this.meta.getCollectionMetadata(collection);
275
156
  }
276
- async listCollectionMetadata() {
277
- const dir = this.collectionsMetaDir();
278
- try {
279
- const files = await readdir(dir, { withFileTypes: true });
280
- const metadataFiles = files
281
- .filter((item) => item.isFile() && item.name.endsWith(".json"))
282
- .map((item) => item.name.slice(0, -".json".length));
283
- const metadata = await Promise.all(metadataFiles.map((name) => this.getCollectionMetadata(name)));
284
- return metadata.filter((m) => Boolean(m));
285
- }
286
- catch {
287
- return [];
288
- }
157
+ listCollectionMetadata() {
158
+ return this.meta.listCollectionMetadata();
289
159
  }
290
160
  }
291
161
  //# sourceMappingURL=filesystem-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-adapter.js","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem-adapter.js","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Zero-dependency YAML-frontmatter codec for the markdown StorageAdapter.
3
+ *
4
+ * Core ships no runtime dependencies, so this is a hand-rolled parser/serializer
5
+ * for the SUBSET of YAML that appears in Astro content-collection frontmatter:
6
+ * block mappings, block sequences (of scalars or mappings), and scalars
7
+ * (quoted/plain strings, integers, floats, booleans, null), plus empty/scalar
8
+ * flow collections (`[]`, `{}`, `[a, b]`, `{a: b}`).
9
+ *
10
+ * Design rules:
11
+ * - **Fail loud, never lossy.** `parseFrontmatter` returns `{ ok: false }` for
12
+ * any construct it cannot faithfully represent (anchors, aliases, tags, block
13
+ * scalars `|`/`>`, tab indentation). The adapter turns that into a thrown
14
+ * error so a later whole-entry `writeEntry` can never silently drop the
15
+ * frontmatter it failed to read.
16
+ * - **Round-trip safe by construction.** A value is emitted as a plain scalar
17
+ * only when re-parsing that exact text yields the identical string; anything
18
+ * else is double-quoted with JSON escapes (valid YAML double-quote escapes),
19
+ * so `parse(serialize(x))` deep-equals `x` for every supported value.
20
+ * - **Comments are not preserved** on write (preserving them needs a full CST).
21
+ * Documented and accepted for v1; the markdown BODY, by contrast, is never
22
+ * touched — the adapter splices it back verbatim using `bodyStart`.
23
+ */
24
+ export type ParseResult = {
25
+ ok: true;
26
+ data: Record<string, unknown>;
27
+ bodyStart: number;
28
+ } | {
29
+ ok: false;
30
+ reason: string;
31
+ };
32
+ export type SerializeResult = {
33
+ ok: true;
34
+ content: string;
35
+ } | {
36
+ ok: false;
37
+ reason: string;
38
+ };
39
+ export declare function parseFrontmatter(source: string): ParseResult;
40
+ /**
41
+ * Serialize a data record into a YAML frontmatter block (WITHOUT the `---`
42
+ * fences; the adapter composes those around it). Returns `{ ok: false }` if any
43
+ * value cannot be safely represented (non-finite number, Date, function, …) so
44
+ * the write is rejected before touching the file.
45
+ */
46
+ export declare function serializeFrontmatter(data: Record<string, unknown>): SerializeResult;
47
+ //# sourceMappingURL=frontmatter-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter-codec.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/frontmatter-codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA8W5F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAW5D;AA2ED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAWnF"}