@elytracms/core 0.0.6

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 (521) hide show
  1. package/LICENSE +21 -0
  2. package/dist/clipboard/build.d.ts +77 -0
  3. package/dist/clipboard/build.js +128 -0
  4. package/dist/clipboard/build.js.map +1 -0
  5. package/dist/clipboard/clipboard.d.ts +33 -0
  6. package/dist/clipboard/clipboard.js +45 -0
  7. package/dist/clipboard/clipboard.js.map +1 -0
  8. package/dist/clipboard/fragment.d.ts +112 -0
  9. package/dist/clipboard/fragment.js +79 -0
  10. package/dist/clipboard/fragment.js.map +1 -0
  11. package/dist/clipboard/html.d.ts +26 -0
  12. package/dist/clipboard/html.js +82 -0
  13. package/dist/clipboard/html.js.map +1 -0
  14. package/dist/clipboard/index.d.ts +15 -0
  15. package/dist/clipboard/index.js +16 -0
  16. package/dist/clipboard/index.js.map +1 -0
  17. package/dist/clipboard/references.d.ts +50 -0
  18. package/dist/clipboard/references.js +0 -0
  19. package/dist/clipboard/references.js.map +1 -0
  20. package/dist/clipboard/serialize.d.ts +69 -0
  21. package/dist/clipboard/serialize.js +130 -0
  22. package/dist/clipboard/serialize.js.map +1 -0
  23. package/dist/cms-core/collections.d.ts +82 -0
  24. package/dist/cms-core/collections.js +187 -0
  25. package/dist/cms-core/collections.js.map +1 -0
  26. package/dist/cms-core/documents.d.ts +71 -0
  27. package/dist/cms-core/documents.js +67 -0
  28. package/dist/cms-core/documents.js.map +1 -0
  29. package/dist/cms-core/envelopes.d.ts +80 -0
  30. package/dist/cms-core/envelopes.js +124 -0
  31. package/dist/cms-core/envelopes.js.map +1 -0
  32. package/dist/cms-core/fields.d.ts +220 -0
  33. package/dist/cms-core/fields.js +250 -0
  34. package/dist/cms-core/fields.js.map +1 -0
  35. package/dist/cms-core/fixtures.d.ts +92 -0
  36. package/dist/cms-core/fixtures.js +357 -0
  37. package/dist/cms-core/fixtures.js.map +1 -0
  38. package/dist/cms-core/hierarchy.d.ts +113 -0
  39. package/dist/cms-core/hierarchy.js +223 -0
  40. package/dist/cms-core/hierarchy.js.map +1 -0
  41. package/dist/cms-core/index.d.ts +25 -0
  42. package/dist/cms-core/index.js +26 -0
  43. package/dist/cms-core/index.js.map +1 -0
  44. package/dist/cms-core/infer.d.ts +103 -0
  45. package/dist/cms-core/infer.js +57 -0
  46. package/dist/cms-core/infer.js.map +1 -0
  47. package/dist/cms-core/issues.d.ts +92 -0
  48. package/dist/cms-core/issues.js +74 -0
  49. package/dist/cms-core/issues.js.map +1 -0
  50. package/dist/cms-core/json-schema.d.ts +25 -0
  51. package/dist/cms-core/json-schema.js +110 -0
  52. package/dist/cms-core/json-schema.js.map +1 -0
  53. package/dist/cms-core/localization.d.ts +51 -0
  54. package/dist/cms-core/localization.js +89 -0
  55. package/dist/cms-core/localization.js.map +1 -0
  56. package/dist/cms-core/routes.d.ts +76 -0
  57. package/dist/cms-core/routes.js +220 -0
  58. package/dist/cms-core/routes.js.map +1 -0
  59. package/dist/cms-core/self-type.d.ts +41 -0
  60. package/dist/cms-core/self-type.js +191 -0
  61. package/dist/cms-core/self-type.js.map +1 -0
  62. package/dist/cms-core/url-for-document.d.ts +39 -0
  63. package/dist/cms-core/url-for-document.js +138 -0
  64. package/dist/cms-core/url-for-document.js.map +1 -0
  65. package/dist/cms-core/validate-document.d.ts +121 -0
  66. package/dist/cms-core/validate-document.js +871 -0
  67. package/dist/cms-core/validate-document.js.map +1 -0
  68. package/dist/cms-core/versions.d.ts +75 -0
  69. package/dist/cms-core/versions.js +97 -0
  70. package/dist/cms-core/versions.js.map +1 -0
  71. package/dist/collaboration/approval.d.ts +68 -0
  72. package/dist/collaboration/approval.js +104 -0
  73. package/dist/collaboration/approval.js.map +1 -0
  74. package/dist/collaboration/collaboration.d.ts +49 -0
  75. package/dist/collaboration/collaboration.js +56 -0
  76. package/dist/collaboration/collaboration.js.map +1 -0
  77. package/dist/collaboration/comments.d.ts +72 -0
  78. package/dist/collaboration/comments.js +118 -0
  79. package/dist/collaboration/comments.js.map +1 -0
  80. package/dist/collaboration/core.d.ts +25 -0
  81. package/dist/collaboration/core.js +26 -0
  82. package/dist/collaboration/core.js.map +1 -0
  83. package/dist/collaboration/index.d.ts +14 -0
  84. package/dist/collaboration/index.js +15 -0
  85. package/dist/collaboration/index.js.map +1 -0
  86. package/dist/collaboration/presence.d.ts +62 -0
  87. package/dist/collaboration/presence.js +85 -0
  88. package/dist/collaboration/presence.js.map +1 -0
  89. package/dist/collaboration/publishing.d.ts +60 -0
  90. package/dist/collaboration/publishing.js +93 -0
  91. package/dist/collaboration/publishing.js.map +1 -0
  92. package/dist/collaboration/versions.d.ts +52 -0
  93. package/dist/collaboration/versions.js +81 -0
  94. package/dist/collaboration/versions.js.map +1 -0
  95. package/dist/component-registry/index.d.ts +3 -0
  96. package/dist/component-registry/index.js +4 -0
  97. package/dist/component-registry/index.js.map +1 -0
  98. package/dist/component-registry/issues.d.ts +6 -0
  99. package/dist/component-registry/issues.js +2 -0
  100. package/dist/component-registry/issues.js.map +1 -0
  101. package/dist/component-registry/manifest.d.ts +164 -0
  102. package/dist/component-registry/manifest.js +129 -0
  103. package/dist/component-registry/manifest.js.map +1 -0
  104. package/dist/component-registry/registry.d.ts +33 -0
  105. package/dist/component-registry/registry.js +90 -0
  106. package/dist/component-registry/registry.js.map +1 -0
  107. package/dist/content/__fixtures__/filterable-collections.d.ts +14 -0
  108. package/dist/content/__fixtures__/filterable-collections.js +15 -0
  109. package/dist/content/__fixtures__/filterable-collections.js.map +1 -0
  110. package/dist/content/__fixtures__/sample-accessor-types.d.ts +56 -0
  111. package/dist/content/__fixtures__/sample-accessor-types.js +5 -0
  112. package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -0
  113. package/dist/content/__fixtures__/sample-delivery-types.d.ts +122 -0
  114. package/dist/content/__fixtures__/sample-delivery-types.js +5 -0
  115. package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -0
  116. package/dist/content/assets.d.ts +53 -0
  117. package/dist/content/assets.js +38 -0
  118. package/dist/content/assets.js.map +1 -0
  119. package/dist/content/binding-sources.d.ts +53 -0
  120. package/dist/content/binding-sources.js +73 -0
  121. package/dist/content/binding-sources.js.map +1 -0
  122. package/dist/content/client.d.ts +90 -0
  123. package/dist/content/client.js +383 -0
  124. package/dist/content/client.js.map +1 -0
  125. package/dist/content/codegen.d.ts +54 -0
  126. package/dist/content/codegen.js +305 -0
  127. package/dist/content/codegen.js.map +1 -0
  128. package/dist/content/context.d.ts +38 -0
  129. package/dist/content/context.js +21 -0
  130. package/dist/content/context.js.map +1 -0
  131. package/dist/content/cursor.d.ts +33 -0
  132. package/dist/content/cursor.js +104 -0
  133. package/dist/content/cursor.js.map +1 -0
  134. package/dist/content/index.d.ts +28 -0
  135. package/dist/content/index.js +29 -0
  136. package/dist/content/index.js.map +1 -0
  137. package/dist/content/locale.d.ts +30 -0
  138. package/dist/content/locale.js +26 -0
  139. package/dist/content/locale.js.map +1 -0
  140. package/dist/content/perspective.d.ts +29 -0
  141. package/dist/content/perspective.js +31 -0
  142. package/dist/content/perspective.js.map +1 -0
  143. package/dist/content/populate.d.ts +25 -0
  144. package/dist/content/populate.js +22 -0
  145. package/dist/content/populate.js.map +1 -0
  146. package/dist/content/query.d.ts +122 -0
  147. package/dist/content/query.js +257 -0
  148. package/dist/content/query.js.map +1 -0
  149. package/dist/content/raw.d.ts +13 -0
  150. package/dist/content/raw.js +14 -0
  151. package/dist/content/raw.js.map +1 -0
  152. package/dist/content/resolve.d.ts +97 -0
  153. package/dist/content/resolve.js +261 -0
  154. package/dist/content/resolve.js.map +1 -0
  155. package/dist/content/serialize.d.ts +30 -0
  156. package/dist/content/serialize.js +57 -0
  157. package/dist/content/serialize.js.map +1 -0
  158. package/dist/content/tags.d.ts +54 -0
  159. package/dist/content/tags.js +40 -0
  160. package/dist/content/tags.js.map +1 -0
  161. package/dist/data-binding/fixtures.d.ts +20 -0
  162. package/dist/data-binding/fixtures.js +47 -0
  163. package/dist/data-binding/fixtures.js.map +1 -0
  164. package/dist/data-binding/index.d.ts +14 -0
  165. package/dist/data-binding/index.js +15 -0
  166. package/dist/data-binding/index.js.map +1 -0
  167. package/dist/data-binding/issues.d.ts +45 -0
  168. package/dist/data-binding/issues.js +46 -0
  169. package/dist/data-binding/issues.js.map +1 -0
  170. package/dist/data-binding/resolve.d.ts +87 -0
  171. package/dist/data-binding/resolve.js +204 -0
  172. package/dist/data-binding/resolve.js.map +1 -0
  173. package/dist/data-binding/sample.d.ts +21 -0
  174. package/dist/data-binding/sample.js +23 -0
  175. package/dist/data-binding/sample.js.map +1 -0
  176. package/dist/data-binding/sources.d.ts +225 -0
  177. package/dist/data-binding/sources.js +154 -0
  178. package/dist/data-binding/sources.js.map +1 -0
  179. package/dist/data-binding/tokens.d.ts +62 -0
  180. package/dist/data-binding/tokens.js +150 -0
  181. package/dist/data-binding/tokens.js.map +1 -0
  182. package/dist/design-tokens/css.d.ts +34 -0
  183. package/dist/design-tokens/css.js +51 -0
  184. package/dist/design-tokens/css.js.map +1 -0
  185. package/dist/design-tokens/index.d.ts +10 -0
  186. package/dist/design-tokens/index.js +11 -0
  187. package/dist/design-tokens/index.js.map +1 -0
  188. package/dist/design-tokens/style-guide.d.ts +30 -0
  189. package/dist/design-tokens/style-guide.js +31 -0
  190. package/dist/design-tokens/style-guide.js.map +1 -0
  191. package/dist/design-tokens/tokens.d.ts +89 -0
  192. package/dist/design-tokens/tokens.js +112 -0
  193. package/dist/design-tokens/tokens.js.map +1 -0
  194. package/dist/export-sync/builder-source.d.ts +85 -0
  195. package/dist/export-sync/builder-source.js +124 -0
  196. package/dist/export-sync/builder-source.js.map +1 -0
  197. package/dist/export-sync/check.d.ts +61 -0
  198. package/dist/export-sync/check.js +126 -0
  199. package/dist/export-sync/check.js.map +1 -0
  200. package/dist/export-sync/cli.d.ts +89 -0
  201. package/dist/export-sync/cli.js +323 -0
  202. package/dist/export-sync/cli.js.map +1 -0
  203. package/dist/export-sync/core.d.ts +58 -0
  204. package/dist/export-sync/core.js +41 -0
  205. package/dist/export-sync/core.js.map +1 -0
  206. package/dist/export-sync/eject.d.ts +28 -0
  207. package/dist/export-sync/eject.js +21 -0
  208. package/dist/export-sync/eject.js.map +1 -0
  209. package/dist/export-sync/fixtures.d.ts +25 -0
  210. package/dist/export-sync/fixtures.js +87 -0
  211. package/dist/export-sync/fixtures.js.map +1 -0
  212. package/dist/export-sync/generate.d.ts +7 -0
  213. package/dist/export-sync/generate.js +505 -0
  214. package/dist/export-sync/generate.js.map +1 -0
  215. package/dist/export-sync/index.d.ts +37 -0
  216. package/dist/export-sync/index.js +39 -0
  217. package/dist/export-sync/index.js.map +1 -0
  218. package/dist/export-sync/init.d.ts +123 -0
  219. package/dist/export-sync/init.js +234 -0
  220. package/dist/export-sync/init.js.map +1 -0
  221. package/dist/export-sync/manifest-host.d.ts +48 -0
  222. package/dist/export-sync/manifest-host.js +73 -0
  223. package/dist/export-sync/manifest-host.js.map +1 -0
  224. package/dist/export-sync/node.d.ts +20 -0
  225. package/dist/export-sync/node.js +101 -0
  226. package/dist/export-sync/node.js.map +1 -0
  227. package/dist/export-sync/push.d.ts +76 -0
  228. package/dist/export-sync/push.js +197 -0
  229. package/dist/export-sync/push.js.map +1 -0
  230. package/dist/export-sync/registry-sync-client.d.ts +59 -0
  231. package/dist/export-sync/registry-sync-client.js +97 -0
  232. package/dist/export-sync/registry-sync-client.js.map +1 -0
  233. package/dist/export-sync/sync.d.ts +47 -0
  234. package/dist/export-sync/sync.js +47 -0
  235. package/dist/export-sync/sync.js.map +1 -0
  236. package/dist/export-sync/typegen.d.ts +40 -0
  237. package/dist/export-sync/typegen.js +45 -0
  238. package/dist/export-sync/typegen.js.map +1 -0
  239. package/dist/export-sync/validate.d.ts +19 -0
  240. package/dist/export-sync/validate.js +102 -0
  241. package/dist/export-sync/validate.js.map +1 -0
  242. package/dist/export-sync/watch.d.ts +66 -0
  243. package/dist/export-sync/watch.js +70 -0
  244. package/dist/export-sync/watch.js.map +1 -0
  245. package/dist/operations/assets.d.ts +198 -0
  246. package/dist/operations/assets.js +75 -0
  247. package/dist/operations/assets.js.map +1 -0
  248. package/dist/operations/authorization.d.ts +49 -0
  249. package/dist/operations/authorization.js +128 -0
  250. package/dist/operations/authorization.js.map +1 -0
  251. package/dist/operations/changesets.d.ts +160 -0
  252. package/dist/operations/changesets.js +442 -0
  253. package/dist/operations/changesets.js.map +1 -0
  254. package/dist/operations/client.d.ts +49 -0
  255. package/dist/operations/client.js +57 -0
  256. package/dist/operations/client.js.map +1 -0
  257. package/dist/operations/core.d.ts +238 -0
  258. package/dist/operations/core.js +269 -0
  259. package/dist/operations/core.js.map +1 -0
  260. package/dist/operations/documents.d.ts +432 -0
  261. package/dist/operations/documents.js +344 -0
  262. package/dist/operations/documents.js.map +1 -0
  263. package/dist/operations/graph.d.ts +138 -0
  264. package/dist/operations/graph.js +78 -0
  265. package/dist/operations/graph.js.map +1 -0
  266. package/dist/operations/index.d.ts +19 -0
  267. package/dist/operations/index.js +20 -0
  268. package/dist/operations/index.js.map +1 -0
  269. package/dist/operations/members.d.ts +87 -0
  270. package/dist/operations/members.js +56 -0
  271. package/dist/operations/members.js.map +1 -0
  272. package/dist/operations/publishing.d.ts +89 -0
  273. package/dist/operations/publishing.js +57 -0
  274. package/dist/operations/publishing.js.map +1 -0
  275. package/dist/operations/references.d.ts +222 -0
  276. package/dist/operations/references.js +177 -0
  277. package/dist/operations/references.js.map +1 -0
  278. package/dist/operations/schema.d.ts +413 -0
  279. package/dist/operations/schema.js +138 -0
  280. package/dist/operations/schema.js.map +1 -0
  281. package/dist/operations/tokens.d.ts +79 -0
  282. package/dist/operations/tokens.js +102 -0
  283. package/dist/operations/tokens.js.map +1 -0
  284. package/dist/persistence/adapter.d.ts +79 -0
  285. package/dist/persistence/adapter.js +55 -0
  286. package/dist/persistence/adapter.js.map +1 -0
  287. package/dist/persistence/assets.d.ts +120 -0
  288. package/dist/persistence/assets.js +141 -0
  289. package/dist/persistence/assets.js.map +1 -0
  290. package/dist/persistence/backend-validation.d.ts +43 -0
  291. package/dist/persistence/backend-validation.js +57 -0
  292. package/dist/persistence/backend-validation.js.map +1 -0
  293. package/dist/persistence/cli-tokens.d.ts +50 -0
  294. package/dist/persistence/cli-tokens.js +66 -0
  295. package/dist/persistence/cli-tokens.js.map +1 -0
  296. package/dist/persistence/cms.d.ts +148 -0
  297. package/dist/persistence/cms.js +232 -0
  298. package/dist/persistence/cms.js.map +1 -0
  299. package/dist/persistence/contract-scenarios.d.ts +73 -0
  300. package/dist/persistence/contract-scenarios.js +496 -0
  301. package/dist/persistence/contract-scenarios.js.map +1 -0
  302. package/dist/persistence/core.d.ts +96 -0
  303. package/dist/persistence/core.js +110 -0
  304. package/dist/persistence/core.js.map +1 -0
  305. package/dist/persistence/graph.d.ts +61 -0
  306. package/dist/persistence/graph.js +98 -0
  307. package/dist/persistence/graph.js.map +1 -0
  308. package/dist/persistence/index.d.ts +22 -0
  309. package/dist/persistence/index.js +23 -0
  310. package/dist/persistence/index.js.map +1 -0
  311. package/dist/persistence/members.d.ts +70 -0
  312. package/dist/persistence/members.js +0 -0
  313. package/dist/persistence/members.js.map +1 -0
  314. package/dist/persistence/publishing.d.ts +59 -0
  315. package/dist/persistence/publishing.js +95 -0
  316. package/dist/persistence/publishing.js.map +1 -0
  317. package/dist/persistence/reference-extraction.d.ts +44 -0
  318. package/dist/persistence/reference-extraction.js +204 -0
  319. package/dist/persistence/reference-extraction.js.map +1 -0
  320. package/dist/persistence/reference-indexing.d.ts +68 -0
  321. package/dist/persistence/reference-indexing.js +112 -0
  322. package/dist/persistence/reference-indexing.js.map +1 -0
  323. package/dist/persistence/references.d.ts +257 -0
  324. package/dist/persistence/references.js +0 -0
  325. package/dist/persistence/references.js.map +1 -0
  326. package/dist/persistence/seed.d.ts +55 -0
  327. package/dist/persistence/seed.js +102 -0
  328. package/dist/persistence/seed.js.map +1 -0
  329. package/dist/persistence/self-maintaining-adapter.d.ts +41 -0
  330. package/dist/persistence/self-maintaining-adapter.js +79 -0
  331. package/dist/persistence/self-maintaining-adapter.js.map +1 -0
  332. package/dist/plugins/asset-storage.d.ts +76 -0
  333. package/dist/plugins/asset-storage.js +104 -0
  334. package/dist/plugins/asset-storage.js.map +1 -0
  335. package/dist/plugins/component-package.d.ts +54 -0
  336. package/dist/plugins/component-package.js +92 -0
  337. package/dist/plugins/component-package.js.map +1 -0
  338. package/dist/plugins/data-sources.d.ts +78 -0
  339. package/dist/plugins/data-sources.js +99 -0
  340. package/dist/plugins/data-sources.js.map +1 -0
  341. package/dist/plugins/examples.d.ts +47 -0
  342. package/dist/plugins/examples.js +205 -0
  343. package/dist/plugins/examples.js.map +1 -0
  344. package/dist/plugins/export-targets.d.ts +47 -0
  345. package/dist/plugins/export-targets.js +78 -0
  346. package/dist/plugins/export-targets.js.map +1 -0
  347. package/dist/plugins/field-types.d.ts +86 -0
  348. package/dist/plugins/field-types.js +93 -0
  349. package/dist/plugins/field-types.js.map +1 -0
  350. package/dist/plugins/hooks.d.ts +60 -0
  351. package/dist/plugins/hooks.js +94 -0
  352. package/dist/plugins/hooks.js.map +1 -0
  353. package/dist/plugins/index.d.ts +27 -0
  354. package/dist/plugins/index.js +28 -0
  355. package/dist/plugins/index.js.map +1 -0
  356. package/dist/plugins/marketplace.d.ts +90 -0
  357. package/dist/plugins/marketplace.js +110 -0
  358. package/dist/plugins/marketplace.js.map +1 -0
  359. package/dist/plugins/plugin.d.ts +107 -0
  360. package/dist/plugins/plugin.js +122 -0
  361. package/dist/plugins/plugin.js.map +1 -0
  362. package/dist/plugins/templates.d.ts +66 -0
  363. package/dist/plugins/templates.js +74 -0
  364. package/dist/plugins/templates.js.map +1 -0
  365. package/dist/project-graph/binding.d.ts +68 -0
  366. package/dist/project-graph/binding.js +39 -0
  367. package/dist/project-graph/binding.js.map +1 -0
  368. package/dist/project-graph/container.d.ts +126 -0
  369. package/dist/project-graph/container.js +221 -0
  370. package/dist/project-graph/container.js.map +1 -0
  371. package/dist/project-graph/edit.d.ts +66 -0
  372. package/dist/project-graph/edit.js +201 -0
  373. package/dist/project-graph/edit.js.map +1 -0
  374. package/dist/project-graph/fixtures.d.ts +51 -0
  375. package/dist/project-graph/fixtures.js +224 -0
  376. package/dist/project-graph/fixtures.js.map +1 -0
  377. package/dist/project-graph/ids.d.ts +17 -0
  378. package/dist/project-graph/ids.js +19 -0
  379. package/dist/project-graph/ids.js.map +1 -0
  380. package/dist/project-graph/index.d.ts +12 -0
  381. package/dist/project-graph/index.js +13 -0
  382. package/dist/project-graph/index.js.map +1 -0
  383. package/dist/project-graph/issues.d.ts +61 -0
  384. package/dist/project-graph/issues.js +44 -0
  385. package/dist/project-graph/issues.js.map +1 -0
  386. package/dist/project-graph/json.d.ts +6 -0
  387. package/dist/project-graph/json.js +10 -0
  388. package/dist/project-graph/json.js.map +1 -0
  389. package/dist/project-graph/node.d.ts +48 -0
  390. package/dist/project-graph/node.js +42 -0
  391. package/dist/project-graph/node.js.map +1 -0
  392. package/dist/project-graph/normalize.d.ts +17 -0
  393. package/dist/project-graph/normalize.js +110 -0
  394. package/dist/project-graph/normalize.js.map +1 -0
  395. package/dist/project-graph/serialize.d.ts +36 -0
  396. package/dist/project-graph/serialize.js +51 -0
  397. package/dist/project-graph/serialize.js.map +1 -0
  398. package/dist/project-graph/structure.d.ts +40 -0
  399. package/dist/project-graph/structure.js +36 -0
  400. package/dist/project-graph/structure.js.map +1 -0
  401. package/dist/project-graph/validate.d.ts +84 -0
  402. package/dist/project-graph/validate.js +158 -0
  403. package/dist/project-graph/validate.js.map +1 -0
  404. package/dist/rich-text/adapter.d.ts +43 -0
  405. package/dist/rich-text/adapter.js +24 -0
  406. package/dist/rich-text/adapter.js.map +1 -0
  407. package/dist/rich-text/dom-editor.d.ts +101 -0
  408. package/dist/rich-text/dom-editor.js +482 -0
  409. package/dist/rich-text/dom-editor.js.map +1 -0
  410. package/dist/rich-text/embed.d.ts +70 -0
  411. package/dist/rich-text/embed.js +70 -0
  412. package/dist/rich-text/embed.js.map +1 -0
  413. package/dist/rich-text/fixtures.d.ts +25 -0
  414. package/dist/rich-text/fixtures.js +115 -0
  415. package/dist/rich-text/fixtures.js.map +1 -0
  416. package/dist/rich-text/html.d.ts +5 -0
  417. package/dist/rich-text/html.js +309 -0
  418. package/dist/rich-text/html.js.map +1 -0
  419. package/dist/rich-text/index.d.ts +19 -0
  420. package/dist/rich-text/index.js +20 -0
  421. package/dist/rich-text/index.js.map +1 -0
  422. package/dist/rich-text/markdown.d.ts +7 -0
  423. package/dist/rich-text/markdown.js +235 -0
  424. package/dist/rich-text/markdown.js.map +1 -0
  425. package/dist/rich-text/portable-text.d.ts +50 -0
  426. package/dist/rich-text/portable-text.js +223 -0
  427. package/dist/rich-text/portable-text.js.map +1 -0
  428. package/dist/rich-text/registry.d.ts +48 -0
  429. package/dist/rich-text/registry.js +16 -0
  430. package/dist/rich-text/registry.js.map +1 -0
  431. package/dist/rich-text/render.d.ts +69 -0
  432. package/dist/rich-text/render.js +205 -0
  433. package/dist/rich-text/render.js.map +1 -0
  434. package/dist/rich-text/schema.d.ts +86 -0
  435. package/dist/rich-text/schema.js +80 -0
  436. package/dist/rich-text/schema.js.map +1 -0
  437. package/dist/rich-text/test-support.d.ts +7 -0
  438. package/dist/rich-text/test-support.js +8 -0
  439. package/dist/rich-text/test-support.js.map +1 -0
  440. package/dist/runtime-renderer/client.d.ts +14 -0
  441. package/dist/runtime-renderer/client.js +15 -0
  442. package/dist/runtime-renderer/client.js.map +1 -0
  443. package/dist/runtime-renderer/condition.d.ts +8 -0
  444. package/dist/runtime-renderer/condition.js +48 -0
  445. package/dist/runtime-renderer/condition.js.map +1 -0
  446. package/dist/runtime-renderer/content-client.d.ts +62 -0
  447. package/dist/runtime-renderer/content-client.js +37 -0
  448. package/dist/runtime-renderer/content-client.js.map +1 -0
  449. package/dist/runtime-renderer/context.d.ts +185 -0
  450. package/dist/runtime-renderer/context.js +7 -0
  451. package/dist/runtime-renderer/context.js.map +1 -0
  452. package/dist/runtime-renderer/fallback.d.ts +39 -0
  453. package/dist/runtime-renderer/fallback.js +45 -0
  454. package/dist/runtime-renderer/fallback.js.map +1 -0
  455. package/dist/runtime-renderer/index.d.ts +13 -0
  456. package/dist/runtime-renderer/index.js +13 -0
  457. package/dist/runtime-renderer/index.js.map +1 -0
  458. package/dist/runtime-renderer/primitives.d.ts +85 -0
  459. package/dist/runtime-renderer/primitives.js +442 -0
  460. package/dist/runtime-renderer/primitives.js.map +1 -0
  461. package/dist/runtime-renderer/render.d.ts +138 -0
  462. package/dist/runtime-renderer/render.js +825 -0
  463. package/dist/runtime-renderer/render.js.map +1 -0
  464. package/dist/runtime-renderer/rich-text.d.ts +26 -0
  465. package/dist/runtime-renderer/rich-text.js +113 -0
  466. package/dist/runtime-renderer/rich-text.js.map +1 -0
  467. package/dist/starter-kits/index.d.ts +13 -0
  468. package/dist/starter-kits/index.js +14 -0
  469. package/dist/starter-kits/index.js.map +1 -0
  470. package/dist/starter-kits/instantiate.d.ts +29 -0
  471. package/dist/starter-kits/instantiate.js +24 -0
  472. package/dist/starter-kits/instantiate.js.map +1 -0
  473. package/dist/starter-kits/kit.d.ts +61 -0
  474. package/dist/starter-kits/kit.js +37 -0
  475. package/dist/starter-kits/kit.js.map +1 -0
  476. package/dist/starter-kits/kits.d.ts +7 -0
  477. package/dist/starter-kits/kits.js +201 -0
  478. package/dist/starter-kits/kits.js.map +1 -0
  479. package/dist/starter-kits/manifests.d.ts +7 -0
  480. package/dist/starter-kits/manifests.js +111 -0
  481. package/dist/starter-kits/manifests.js.map +1 -0
  482. package/dist/starter-kits/upgrade.d.ts +39 -0
  483. package/dist/starter-kits/upgrade.js +54 -0
  484. package/dist/starter-kits/upgrade.js.map +1 -0
  485. package/dist/starter-kits/validate.d.ts +16 -0
  486. package/dist/starter-kits/validate.js +77 -0
  487. package/dist/starter-kits/validate.js.map +1 -0
  488. package/dist/studio-core/context.d.ts +27 -0
  489. package/dist/studio-core/context.js +44 -0
  490. package/dist/studio-core/context.js.map +1 -0
  491. package/dist/studio-core/errors.d.ts +58 -0
  492. package/dist/studio-core/errors.js +74 -0
  493. package/dist/studio-core/errors.js.map +1 -0
  494. package/dist/studio-core/fixtures.d.ts +18 -0
  495. package/dist/studio-core/fixtures.js +83 -0
  496. package/dist/studio-core/fixtures.js.map +1 -0
  497. package/dist/studio-core/ids.d.ts +22 -0
  498. package/dist/studio-core/ids.js +33 -0
  499. package/dist/studio-core/ids.js.map +1 -0
  500. package/dist/studio-core/index.d.ts +11 -0
  501. package/dist/studio-core/index.js +12 -0
  502. package/dist/studio-core/index.js.map +1 -0
  503. package/dist/studio-core/issues.d.ts +50 -0
  504. package/dist/studio-core/issues.js +33 -0
  505. package/dist/studio-core/issues.js.map +1 -0
  506. package/dist/studio-core/metadata.d.ts +109 -0
  507. package/dist/studio-core/metadata.js +74 -0
  508. package/dist/studio-core/metadata.js.map +1 -0
  509. package/dist/studio-core/repository.d.ts +73 -0
  510. package/dist/studio-core/repository.js +202 -0
  511. package/dist/studio-core/repository.js.map +1 -0
  512. package/dist/studio-core/sections.d.ts +73 -0
  513. package/dist/studio-core/sections.js +68 -0
  514. package/dist/studio-core/sections.js.map +1 -0
  515. package/dist/studio-core/validate.d.ts +15 -0
  516. package/dist/studio-core/validate.js +119 -0
  517. package/dist/studio-core/validate.js.map +1 -0
  518. package/dist/studio-core/workspace-config.d.ts +587 -0
  519. package/dist/studio-core/workspace-config.js +434 -0
  520. package/dist/studio-core/workspace-config.js.map +1 -0
  521. package/package.json +104 -0
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod';
2
+ export { createSequentialClock, createSequentialIdFactory, } from '@elytracms/core/studio-core';
3
+ /**
4
+ * Timestamps every persisted record carries (brief §10). Kept as ISO strings so
5
+ * fixtures and seeds stay byte-for-byte deterministic across runs.
6
+ */
7
+ export const recordMetaSchema = z.object({
8
+ createdAt: z.string().min(1),
9
+ updatedAt: z.string().min(1),
10
+ });
11
+ /**
12
+ * Defensive deep clone for records handed back from in-memory repositories, so
13
+ * callers can never mutate the persisted store by mutating a returned value.
14
+ * Mirrors the no-aliasing invariant documented in `@elytracms/core/studio-core`'s
15
+ * `InMemoryProjectRepository`. Records are plain JSON-shaped data.
16
+ */
17
+ export function cloneRecord(value) {
18
+ return structuredClone(value);
19
+ }
20
+ /**
21
+ * Which backend a persistence adapter is talking to, and whether it's reachable.
22
+ * Lets the Studio surface degraded/offline states without leaking provider types.
23
+ */
24
+ export const backendKindSchema = z.enum(['in-memory', 'convex']);
25
+ /**
26
+ * A generic structured issue carried by a {@link PersistenceValidationError}.
27
+ * Domain issues (graph/cms/binding) are mapped onto this shape so a single error
28
+ * type can carry any validation failure (brief §4.11).
29
+ */
30
+ export const persistenceIssueSchema = z.object({
31
+ code: z.string(),
32
+ message: z.string(),
33
+ path: z.array(z.union([z.string(), z.number()])).optional(),
34
+ /** Originating domain, e.g. 'graph' | 'cms' | 'binding' | 'settings'. */
35
+ domain: z.string().optional(),
36
+ });
37
+ // --- Error taxonomy (brief §4.10, §7.7) -----------------------------------
38
+ //
39
+ // Provider-neutral, mirrors the project-repository taxonomy in @elytracms/studio-core
40
+ // but is domain-general so every record type shares the same five categories.
41
+ export const persistenceErrorCodeSchema = z.enum([
42
+ 'validation',
43
+ 'not-found',
44
+ 'conflict',
45
+ 'backend-unavailable',
46
+ 'unknown',
47
+ ]);
48
+ export class PersistenceError extends Error {
49
+ constructor(message, options) {
50
+ super(message, options);
51
+ this.name = new.target.name;
52
+ }
53
+ }
54
+ /** No record of `kind` exists for the given key. */
55
+ export class RecordNotFoundError extends PersistenceError {
56
+ kind;
57
+ key;
58
+ code = 'not-found';
59
+ constructor(kind, key) {
60
+ super(`No ${kind} found for “${key}”.`);
61
+ this.kind = kind;
62
+ this.key = key;
63
+ }
64
+ }
65
+ /** A record would collide with an existing one (unique key/identity). */
66
+ export class RecordConflictError extends PersistenceError {
67
+ kind;
68
+ key;
69
+ code = 'conflict';
70
+ constructor(kind, key, message) {
71
+ super(message ?? `A ${kind} with key “${key}” already exists.`);
72
+ this.kind = kind;
73
+ this.key = key;
74
+ }
75
+ }
76
+ /** A write failed structured validation; carries the issues. */
77
+ export class PersistenceValidationError extends PersistenceError {
78
+ issues;
79
+ code = 'validation';
80
+ constructor(message, issues) {
81
+ super(message);
82
+ this.issues = issues;
83
+ }
84
+ }
85
+ /** The backing store is unreachable or returned a transport-level failure. */
86
+ export class BackendUnavailableError extends PersistenceError {
87
+ code = 'backend-unavailable';
88
+ constructor(message = 'The persistence backend is unavailable.', options) {
89
+ super(message, options);
90
+ }
91
+ }
92
+ /** Any failure that does not map onto a more specific category. */
93
+ export class UnknownPersistenceError extends PersistenceError {
94
+ code = 'unknown';
95
+ constructor(message = 'An unknown persistence error occurred.', options) {
96
+ super(message, options);
97
+ }
98
+ }
99
+ export function isPersistenceError(value) {
100
+ return value instanceof PersistenceError;
101
+ }
102
+ /** Normalize any thrown value onto the persistence error taxonomy. */
103
+ export function asPersistenceError(value) {
104
+ if (isPersistenceError(value))
105
+ return value;
106
+ if (value instanceof Error)
107
+ return new UnknownPersistenceError(value.message, { cause: value });
108
+ return new UnknownPersistenceError(String(value));
109
+ }
110
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/persistence/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import type { ProjectGraph } from '@elytracms/core/project-graph';
3
+ import { type Clock, type IdFactory } from './core';
4
+ /**
5
+ * An immutable record of one saved graph state (brief §7.1, §10). Each save
6
+ * appends a revision; the highest revision is the latest. The graph is stored
7
+ * serialized so reload is provably lossless (serialize → parse round-trip).
8
+ */
9
+ export declare const graphRevisionRecordSchema: z.ZodObject<{
10
+ id: z.ZodString;
11
+ projectId: z.ZodString;
12
+ revision: z.ZodNumber;
13
+ serializedGraph: z.ZodString;
14
+ schemaVersion: z.ZodNumber;
15
+ createdAt: z.ZodString;
16
+ label: z.ZodOptional<z.ZodString>;
17
+ message: z.ZodOptional<z.ZodString>;
18
+ }, z.core.$strip>;
19
+ export type GraphRevisionRecord = z.infer<typeof graphRevisionRecordSchema>;
20
+ /** A revision paired with its parsed graph. */
21
+ export interface LoadedGraph {
22
+ graph: ProjectGraph;
23
+ revision: GraphRevisionRecord;
24
+ }
25
+ export interface SaveGraphOptions {
26
+ label?: string;
27
+ message?: string;
28
+ }
29
+ /**
30
+ * Persists project graphs and their revision history (brief §7.1, §10).
31
+ * Provider-neutral: an in-memory and a Convex implementation both satisfy it.
32
+ */
33
+ export interface GraphRepository {
34
+ /** Append a new revision for the project's graph and return it. */
35
+ saveGraph(projectId: string, graph: ProjectGraph, options?: SaveGraphOptions): Promise<GraphRevisionRecord>;
36
+ /** Load the latest graph + revision. Throws `RecordNotFoundError` if none. */
37
+ getLatest(projectId: string): Promise<LoadedGraph>;
38
+ /** Load a specific revision. Throws `RecordNotFoundError` if absent. */
39
+ getRevision(projectId: string, revision: number): Promise<LoadedGraph>;
40
+ /** All revisions for a project, newest first. */
41
+ listRevisions(projectId: string): Promise<GraphRevisionRecord[]>;
42
+ /** Whether any graph revision exists for the project. */
43
+ hasGraph(projectId: string): Promise<boolean>;
44
+ }
45
+ export interface InMemoryGraphRepositoryOptions {
46
+ clock?: Clock;
47
+ idFactory?: IdFactory;
48
+ seed?: readonly GraphRevisionRecord[];
49
+ }
50
+ export declare class InMemoryGraphRepository implements GraphRepository {
51
+ /** projectId → revisions in ascending revision order. */
52
+ private readonly byProject;
53
+ private readonly clock;
54
+ private readonly nextId;
55
+ constructor(options?: InMemoryGraphRepositoryOptions);
56
+ saveGraph(projectId: string, graph: ProjectGraph, options?: SaveGraphOptions): Promise<GraphRevisionRecord>;
57
+ getLatest(projectId: string): Promise<LoadedGraph>;
58
+ getRevision(projectId: string, revision: number): Promise<LoadedGraph>;
59
+ listRevisions(projectId: string): Promise<GraphRevisionRecord[]>;
60
+ hasGraph(projectId: string): Promise<boolean>;
61
+ }
@@ -0,0 +1,98 @@
1
+ import { z } from 'zod';
2
+ import { PROJECT_GRAPH_SCHEMA_VERSION, parseProjectGraph, serializeProjectGraph, } from '@elytracms/core/project-graph';
3
+ import { PersistenceValidationError, RecordNotFoundError, cloneRecord, createSequentialClock, createSequentialIdFactory, } from './core';
4
+ /**
5
+ * An immutable record of one saved graph state (brief §7.1, §10). Each save
6
+ * appends a revision; the highest revision is the latest. The graph is stored
7
+ * serialized so reload is provably lossless (serialize → parse round-trip).
8
+ */
9
+ export const graphRevisionRecordSchema = z.object({
10
+ id: z.string().min(1),
11
+ projectId: z.string().min(1),
12
+ /** 1-based, monotonically increasing per project. */
13
+ revision: z.number().int().positive(),
14
+ /** Serialized `ProjectGraph` JSON. */
15
+ serializedGraph: z.string().min(1),
16
+ schemaVersion: z.number().int(),
17
+ createdAt: z.string().min(1),
18
+ /** Optional short label, e.g. "Initial import". */
19
+ label: z.string().optional(),
20
+ /** Optional longer message describing the change. */
21
+ message: z.string().optional(),
22
+ });
23
+ function loaded(record) {
24
+ const parsed = parseProjectGraph(record.serializedGraph);
25
+ if (!parsed.ok) {
26
+ // A stored revision should always reparse; if not, the store is corrupt.
27
+ throw new PersistenceValidationError('Stored graph failed to parse.', [
28
+ { code: 'corrupt-graph', message: 'Stored graph revision is not parseable.', domain: 'graph' },
29
+ ]);
30
+ }
31
+ return { graph: parsed.graph, revision: cloneRecord(record) };
32
+ }
33
+ export class InMemoryGraphRepository {
34
+ /** projectId → revisions in ascending revision order. */
35
+ byProject = new Map();
36
+ clock;
37
+ nextId;
38
+ constructor(options = {}) {
39
+ this.clock = options.clock ?? createSequentialClock();
40
+ this.nextId = options.idFactory ?? createSequentialIdFactory('rev');
41
+ for (const record of options.seed ?? []) {
42
+ const list = this.byProject.get(record.projectId) ?? [];
43
+ list.push(graphRevisionRecordSchema.parse(record));
44
+ list.sort((a, b) => a.revision - b.revision);
45
+ this.byProject.set(record.projectId, list);
46
+ }
47
+ }
48
+ async saveGraph(projectId, graph, options = {}) {
49
+ let serializedGraph;
50
+ try {
51
+ serializedGraph = serializeProjectGraph(graph);
52
+ }
53
+ catch (error) {
54
+ throw new PersistenceValidationError('Graph is not well-formed and cannot be persisted.', [
55
+ {
56
+ code: 'invalid-graph',
57
+ message: error instanceof Error ? error.message : String(error),
58
+ domain: 'graph',
59
+ },
60
+ ]);
61
+ }
62
+ const list = this.byProject.get(projectId) ?? [];
63
+ const revision = (list.at(-1)?.revision ?? 0) + 1;
64
+ const record = {
65
+ id: this.nextId(),
66
+ projectId,
67
+ revision,
68
+ serializedGraph,
69
+ schemaVersion: graph.schemaVersion ?? PROJECT_GRAPH_SCHEMA_VERSION,
70
+ createdAt: this.clock(),
71
+ ...(options.label ? { label: options.label } : {}),
72
+ ...(options.message ? { message: options.message } : {}),
73
+ };
74
+ list.push(record);
75
+ this.byProject.set(projectId, list);
76
+ return cloneRecord(record);
77
+ }
78
+ async getLatest(projectId) {
79
+ const list = this.byProject.get(projectId);
80
+ const latest = list?.at(-1);
81
+ if (!latest)
82
+ throw new RecordNotFoundError('graph', projectId);
83
+ return loaded(latest);
84
+ }
85
+ async getRevision(projectId, revision) {
86
+ const record = this.byProject.get(projectId)?.find((r) => r.revision === revision);
87
+ if (!record)
88
+ throw new RecordNotFoundError('graph-revision', `${projectId}#${revision}`);
89
+ return loaded(record);
90
+ }
91
+ async listRevisions(projectId) {
92
+ return [...(this.byProject.get(projectId) ?? [])].reverse().map(cloneRecord);
93
+ }
94
+ async hasGraph(projectId) {
95
+ return (this.byProject.get(projectId)?.length ?? 0) > 0;
96
+ }
97
+ }
98
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/persistence/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @elytracms/persistence — provider-neutral persistence contracts + in-memory
3
+ * implementations (brief §4.10, §10). Core packages depend on these interfaces,
4
+ * never on Convex directly; a Convex-backed adapter and the in-memory adapter
5
+ * here both satisfy {@link PersistenceAdapter}.
6
+ */
7
+ export declare const PACKAGE = "@elytracms/core/persistence";
8
+ export * from './core';
9
+ export * from './graph';
10
+ export * from './cms';
11
+ export * from './assets';
12
+ export * from './publishing';
13
+ export * from './references';
14
+ export * from './members';
15
+ export * from './cli-tokens';
16
+ export * from './reference-extraction';
17
+ export * from './reference-indexing';
18
+ export * from './self-maintaining-adapter';
19
+ export * from './backend-validation';
20
+ export * from './adapter';
21
+ export * from './seed';
22
+ export * from './contract-scenarios';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @elytracms/persistence — provider-neutral persistence contracts + in-memory
3
+ * implementations (brief §4.10, §10). Core packages depend on these interfaces,
4
+ * never on Convex directly; a Convex-backed adapter and the in-memory adapter
5
+ * here both satisfy {@link PersistenceAdapter}.
6
+ */
7
+ export const PACKAGE = '@elytracms/core/persistence';
8
+ export * from './core';
9
+ export * from './graph';
10
+ export * from './cms';
11
+ export * from './assets';
12
+ export * from './publishing';
13
+ export * from './references';
14
+ export * from './members';
15
+ export * from './cli-tokens';
16
+ export * from './reference-extraction';
17
+ export * from './reference-indexing';
18
+ export * from './self-maintaining-adapter';
19
+ export * from './backend-validation';
20
+ export * from './adapter';
21
+ export * from './seed';
22
+ export * from './contract-scenarios';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAEpD,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,70 @@
1
+ import { z } from 'zod';
2
+ import type { Clock } from './core';
3
+ /**
4
+ * Per-project membership records (EC-150, vision AD-7). The role model is
5
+ * deliberately minimal for v1 — three roles, project-scoped, no field-level
6
+ * permissions. Workspace-level grants (who may create projects, default
7
+ * memberships) land with EC-154; everything here stays project-scoped.
8
+ *
9
+ * Roles:
10
+ * - `viewer` — read-only: queries succeed, every command is denied.
11
+ * - `editor` — edits and publishes content, but cannot administer the project
12
+ * (lifecycle, settings, members, CLI tokens).
13
+ * - `admin` — everything within the project.
14
+ *
15
+ * Enforcement lives at the operations chokepoint
16
+ * (`@elytracms/core/operations` `createRoleAuthorization`) and server-side in the
17
+ * Convex functions (`apps/builder/convex/guard.ts`); this module only defines
18
+ * the storage contract.
19
+ */
20
+ export declare const projectRoleSchema: z.ZodEnum<{
21
+ admin: "admin";
22
+ editor: "editor";
23
+ viewer: "viewer";
24
+ }>;
25
+ export type ProjectRole = z.infer<typeof projectRoleSchema>;
26
+ /** True when `role` grants at least the capabilities of `required`. */
27
+ export declare function roleAtLeast(role: ProjectRole, required: ProjectRole): boolean;
28
+ export declare const projectMemberRecordSchema: z.ZodObject<{
29
+ projectId: z.ZodString;
30
+ userId: z.ZodString;
31
+ role: z.ZodEnum<{
32
+ admin: "admin";
33
+ editor: "editor";
34
+ viewer: "viewer";
35
+ }>;
36
+ createdAt: z.ZodString;
37
+ updatedAt: z.ZodString;
38
+ }, z.core.$strip>;
39
+ export type ProjectMemberRecord = z.infer<typeof projectMemberRecordSchema>;
40
+ /**
41
+ * Membership storage boundary. Mirrors the other repository contracts: the
42
+ * in-memory implementation below and the Convex-backed implementation in
43
+ * `apps/builder` both satisfy it.
44
+ */
45
+ export interface MembersRepository {
46
+ /** Upsert a membership (add a member or change their role). */
47
+ setMember(projectId: string, userId: string, role: ProjectRole): Promise<ProjectMemberRecord>;
48
+ /** Look up one membership; `undefined` when the user is not a member. */
49
+ findMember(projectId: string, userId: string): Promise<ProjectMemberRecord | undefined>;
50
+ /** All members of a project, ordered by userId for determinism. */
51
+ listMembers(projectId: string): Promise<ProjectMemberRecord[]>;
52
+ /** All memberships of a user across projects, ordered by projectId. */
53
+ listMembershipsForUser(userId: string): Promise<ProjectMemberRecord[]>;
54
+ /** Remove a membership. Throws `RecordNotFoundError` when absent. */
55
+ removeMember(projectId: string, userId: string): Promise<void>;
56
+ }
57
+ export interface InMemoryMembersRepositoryOptions {
58
+ clock?: Clock;
59
+ seed?: readonly ProjectMemberRecord[];
60
+ }
61
+ export declare class InMemoryMembersRepository implements MembersRepository {
62
+ private readonly records;
63
+ private readonly clock;
64
+ constructor(options?: InMemoryMembersRepositoryOptions);
65
+ setMember(projectId: string, userId: string, role: ProjectRole): Promise<ProjectMemberRecord>;
66
+ findMember(projectId: string, userId: string): Promise<ProjectMemberRecord | undefined>;
67
+ listMembers(projectId: string): Promise<ProjectMemberRecord[]>;
68
+ listMembershipsForUser(userId: string): Promise<ProjectMemberRecord[]>;
69
+ removeMember(projectId: string, userId: string): Promise<void>;
70
+ }
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/persistence/members.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod';
2
+ import { type Clock } from './core';
3
+ /** Draft vs published — distinct, queryable publishing states (brief §10). */
4
+ export declare const publishingStatusSchema: z.ZodEnum<{
5
+ draft: "draft";
6
+ published: "published";
7
+ }>;
8
+ export type PublishingStatus = z.infer<typeof publishingStatusSchema>;
9
+ /**
10
+ * Publishing state (brief §10). Single-environment (EC-179, vision AD-8): a
11
+ * deployment IS one environment, so there is exactly ONE publishing-state
12
+ * record per project. A `published` record pins the graph revision that is
13
+ * live. Moving a release between environments is a deployment/code-pipeline
14
+ * concern, not an in-deployment dimension — see `env-is-deployment-boundary`.
15
+ */
16
+ export declare const publishingStateRecordSchema: z.ZodObject<{
17
+ createdAt: z.ZodString;
18
+ updatedAt: z.ZodString;
19
+ projectId: z.ZodString;
20
+ status: z.ZodEnum<{
21
+ draft: "draft";
22
+ published: "published";
23
+ }>;
24
+ publishedRevisionId: z.ZodOptional<z.ZodString>;
25
+ publishedRevision: z.ZodOptional<z.ZodNumber>;
26
+ publishedAt: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>;
28
+ export type PublishingStateRecord = z.infer<typeof publishingStateRecordSchema>;
29
+ export interface PublishInput {
30
+ revisionId: string;
31
+ revision: number;
32
+ }
33
+ /**
34
+ * Persists and transitions publishing state (brief §10). Transitions are
35
+ * validated: publishing requires a revision; unpublishing requires a
36
+ * currently-published deployment.
37
+ */
38
+ export interface PublishingRepository {
39
+ getState(projectId: string): Promise<PublishingStateRecord>;
40
+ findState(projectId: string): Promise<PublishingStateRecord | undefined>;
41
+ /** Publish a graph revision. */
42
+ publish(projectId: string, input: PublishInput): Promise<PublishingStateRecord>;
43
+ /** Revert to draft (must currently be published). */
44
+ unpublish(projectId: string): Promise<PublishingStateRecord>;
45
+ }
46
+ export interface InMemoryPublishingRepositoryOptions {
47
+ clock?: Clock;
48
+ seed?: readonly PublishingStateRecord[];
49
+ }
50
+ export declare class InMemoryPublishingRepository implements PublishingRepository {
51
+ /** projectId → record (one per deployment). */
52
+ private readonly byProject;
53
+ private readonly clock;
54
+ constructor(options?: InMemoryPublishingRepositoryOptions);
55
+ getState(projectId: string): Promise<PublishingStateRecord>;
56
+ findState(projectId: string): Promise<PublishingStateRecord | undefined>;
57
+ publish(projectId: string, input: PublishInput): Promise<PublishingStateRecord>;
58
+ unpublish(projectId: string): Promise<PublishingStateRecord>;
59
+ }
@@ -0,0 +1,95 @@
1
+ import { z } from 'zod';
2
+ import { PersistenceValidationError, RecordNotFoundError, cloneRecord, recordMetaSchema, createSequentialClock, } from './core';
3
+ /** Draft vs published — distinct, queryable publishing states (brief §10). */
4
+ export const publishingStatusSchema = z.enum(['draft', 'published']);
5
+ /**
6
+ * Publishing state (brief §10). Single-environment (EC-179, vision AD-8): a
7
+ * deployment IS one environment, so there is exactly ONE publishing-state
8
+ * record per project. A `published` record pins the graph revision that is
9
+ * live. Moving a release between environments is a deployment/code-pipeline
10
+ * concern, not an in-deployment dimension — see `env-is-deployment-boundary`.
11
+ */
12
+ export const publishingStateRecordSchema = recordMetaSchema.extend({
13
+ projectId: z.string().min(1),
14
+ status: publishingStatusSchema,
15
+ /** Graph revision pinned live (when published). */
16
+ publishedRevisionId: z.string().optional(),
17
+ publishedRevision: z.number().int().positive().optional(),
18
+ publishedAt: z.string().optional(),
19
+ });
20
+ export class InMemoryPublishingRepository {
21
+ /** projectId → record (one per deployment). */
22
+ byProject = new Map();
23
+ clock;
24
+ constructor(options = {}) {
25
+ this.clock = options.clock ?? createSequentialClock();
26
+ for (const record of options.seed ?? []) {
27
+ const parsed = publishingStateRecordSchema.parse(record);
28
+ this.byProject.set(parsed.projectId, parsed);
29
+ }
30
+ }
31
+ async getState(projectId) {
32
+ const record = this.byProject.get(projectId);
33
+ if (!record)
34
+ throw new RecordNotFoundError('publishing-state', projectId);
35
+ return cloneRecord(record);
36
+ }
37
+ async findState(projectId) {
38
+ const record = this.byProject.get(projectId);
39
+ return record ? cloneRecord(record) : undefined;
40
+ }
41
+ async publish(projectId, input) {
42
+ if (!input.revisionId) {
43
+ throw new PersistenceValidationError('Cannot publish without a graph revision.', [
44
+ {
45
+ code: 'missing-revision',
46
+ message: 'A revision id is required to publish.',
47
+ domain: 'publishing',
48
+ },
49
+ ]);
50
+ }
51
+ if (!Number.isInteger(input.revision) || input.revision < 1) {
52
+ throw new PersistenceValidationError('Cannot publish an invalid revision number.', [
53
+ {
54
+ code: 'invalid-revision',
55
+ message: `Revision must be a positive integer (got ${input.revision}).`,
56
+ domain: 'publishing',
57
+ },
58
+ ]);
59
+ }
60
+ const now = this.clock();
61
+ const previous = this.byProject.get(projectId);
62
+ const record = {
63
+ projectId,
64
+ status: 'published',
65
+ publishedRevisionId: input.revisionId,
66
+ publishedRevision: input.revision,
67
+ publishedAt: now,
68
+ createdAt: previous?.createdAt ?? now,
69
+ updatedAt: now,
70
+ };
71
+ this.byProject.set(projectId, record);
72
+ return cloneRecord(record);
73
+ }
74
+ async unpublish(projectId) {
75
+ const existing = this.byProject.get(projectId);
76
+ if (!existing || existing.status !== 'published') {
77
+ throw new PersistenceValidationError('Deployment is not currently published.', [
78
+ {
79
+ code: 'invalid-transition',
80
+ message: 'Cannot unpublish: nothing is currently published.',
81
+ domain: 'publishing',
82
+ },
83
+ ]);
84
+ }
85
+ const updated = {
86
+ projectId,
87
+ status: 'draft',
88
+ createdAt: existing.createdAt,
89
+ updatedAt: this.clock(),
90
+ };
91
+ this.byProject.set(projectId, updated);
92
+ return cloneRecord(updated);
93
+ }
94
+ }
95
+ //# sourceMappingURL=publishing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/persistence/publishing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { CmsDocument } from '@elytracms/core/cms-core';
2
+ import type { ComponentNode, ProjectGraph } from '@elytracms/core/project-graph';
3
+ import type { OutboundReference, ReferenceEntry } from './references';
4
+ /**
5
+ * Reference extraction (EC-155, vision AD-6 — reshaped by EC-277/AD-15).
6
+ *
7
+ * Self-describing content makes extraction a **schema-free, manifest-free walk** over
8
+ * the stored value: every reference-bearing node carries an explicit `type`
9
+ * discriminator (`{ type:'reference', … }`, `{ type:'asset', … }`), and composition
10
+ * nodes self-type via `componentId`. So a single pure function reads the value and
11
+ * needs neither the collection schema nor the component manifest — which is exactly
12
+ * what lets the same walk run in the studio, the CLI, or a Convex mutation (AD-6,
13
+ * "maintained on write, every writer caught by construction").
14
+ *
15
+ * The `kind` is derived from *walk context*: a reference/asset node in a normal value
16
+ * position → `relation-field`/`asset-field`; inside a rich-text mark → `rich-text-link`;
17
+ * in a rich-text node's attrs → `rich-text-node`; a composition node's `componentId` →
18
+ * `component-usage`. Bindings are out of scope (v1 is static-only; see EC-278): a
19
+ * binding has no self-typed value, so it contributes no reference.
20
+ */
21
+ /** Join `/`-separated path tokens (numbers are array indices). */
22
+ export declare function referencePath(...segments: ReadonlyArray<string | number>): string;
23
+ /**
24
+ * Extract every outbound reference held by one self-describing CMS document — no
25
+ * schema, no manifest, no binding context (EC-277). Walks `values/<field>` and
26
+ * `localized/<locale>/<field>` (just object keys), then descends each value by its
27
+ * self-typed shape. The returned order is walk order; callers that compare must sort
28
+ * (the index repository sorts via `compareReferenceEntries`), so this stays
29
+ * drift-tolerant: a reference in a field the schema no longer declares is still found.
30
+ */
31
+ export declare function extractReferences(document: CmsDocument): OutboundReference[];
32
+ /**
33
+ * Extract every outbound reference held by one self-describing layout root (EC-277).
34
+ * The graph (EC-187) is layouts-only; pages live in the `page` collection's `body`.
35
+ */
36
+ export declare function extractLayoutReferences(layout: {
37
+ id: string;
38
+ root: ComponentNode;
39
+ }): ReferenceEntry[];
40
+ /**
41
+ * Schema-free, manifest-free graph extraction (EC-277): component usage + self-typed
42
+ * static props across every layout, in deterministic (id-sorted) order.
43
+ */
44
+ export declare function extractSelfTypedGraphReferences(graph: ProjectGraph): ReferenceEntry[];