@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,496 @@
1
+ import { serializeProjectGraph, validSampleGraph } from '@elytracms/core/project-graph';
2
+ import { sampleCollections, sampleDocuments } from '@elytracms/core/cms-core';
3
+ import { PersistenceValidationError, RecordNotFoundError } from './core';
4
+ import { compareReferenceEntries } from './references';
5
+ // --- Assertions (framework-agnostic) -----------------------------------------
6
+ export class ContractAssertionError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'ContractAssertionError';
10
+ }
11
+ }
12
+ function show(value) {
13
+ if (value === undefined)
14
+ return 'undefined';
15
+ try {
16
+ return JSON.stringify(value);
17
+ }
18
+ catch {
19
+ return String(value);
20
+ }
21
+ }
22
+ export function ensure(condition, message) {
23
+ if (!condition)
24
+ throw new ContractAssertionError(message);
25
+ }
26
+ function deepEqual(a, b) {
27
+ if (Object.is(a, b))
28
+ return true;
29
+ if (Array.isArray(a) && Array.isArray(b)) {
30
+ return a.length === b.length && a.every((item, i) => deepEqual(item, b[i]));
31
+ }
32
+ if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {
33
+ const keysA = Object.keys(a).filter((k) => a[k] !== undefined);
34
+ const keysB = Object.keys(b).filter((k) => b[k] !== undefined);
35
+ if (keysA.length !== keysB.length)
36
+ return false;
37
+ return keysA.every((key) => deepEqual(a[key], b[key]));
38
+ }
39
+ return false;
40
+ }
41
+ export function ensureEqual(actual, expected, label) {
42
+ if (!deepEqual(actual, expected)) {
43
+ throw new ContractAssertionError(`${label}: expected ${show(expected)}, got ${show(actual)}`);
44
+ }
45
+ }
46
+ /** Awaits `work` and demands it rejects with an instance of `errorClass`. */
47
+ export async function ensureRejects(work, errorClass, label) {
48
+ try {
49
+ await work;
50
+ }
51
+ catch (error) {
52
+ if (error instanceof errorClass)
53
+ return;
54
+ const detail = error instanceof Error ? `${error.name}: ${error.message}` : show(error);
55
+ throw new ContractAssertionError(`${label}: expected rejection with ${errorClass.name}, got ${detail}`);
56
+ }
57
+ throw new ContractAssertionError(`${label}: expected rejection with ${errorClass.name}`);
58
+ }
59
+ /** Awaits `work` and demands it rejects (with anything). */
60
+ async function ensureRejectsAny(work, label) {
61
+ try {
62
+ await work;
63
+ }
64
+ catch {
65
+ return;
66
+ }
67
+ throw new ContractAssertionError(`${label}: expected a rejection`);
68
+ }
69
+ // --- Scenarios ----------------------------------------------------------------
70
+ const graphScenarios = [
71
+ {
72
+ domain: 'graphs',
73
+ name: 'appends revisions and reloads the latest graph losslessly',
74
+ async run({ adapter, projectId }) {
75
+ const r1 = await adapter.graphs.saveGraph(projectId, validSampleGraph, {
76
+ label: 'Initial import',
77
+ });
78
+ ensureEqual(r1.revision, 1, 'first revision number');
79
+ const r2 = await adapter.graphs.saveGraph(projectId, validSampleGraph);
80
+ ensureEqual(r2.revision, 2, 'second revision number');
81
+ const latest = await adapter.graphs.getLatest(projectId);
82
+ ensureEqual(latest.revision.revision, 2, 'getLatest() revision');
83
+ ensureEqual(serializeProjectGraph(latest.graph), serializeProjectGraph(validSampleGraph), 'lossless serialize → parse round-trip');
84
+ const prior = await adapter.graphs.getRevision(projectId, 1);
85
+ ensureEqual(prior.revision.label, 'Initial import', 'prior revision label');
86
+ ensureEqual((await adapter.graphs.listRevisions(projectId)).map((r) => r.revision), [2, 1], 'listRevisions() newest first');
87
+ },
88
+ },
89
+ {
90
+ domain: 'graphs',
91
+ name: 'reports missing graphs/revisions as not-found (never crashes)',
92
+ crossProject: true,
93
+ async run({ adapter, projectId, emptyProjectId }) {
94
+ await ensureRejects(adapter.graphs.getLatest(emptyProjectId), RecordNotFoundError, 'getLatest() on a project without a graph');
95
+ await adapter.graphs.saveGraph(projectId, validSampleGraph);
96
+ await ensureRejects(adapter.graphs.getRevision(projectId, 99), RecordNotFoundError, 'getRevision() for an unknown revision');
97
+ ensureEqual(await adapter.graphs.hasGraph(projectId), true, 'hasGraph() with a graph');
98
+ ensureEqual(await adapter.graphs.hasGraph(emptyProjectId), false, 'hasGraph() without');
99
+ },
100
+ },
101
+ {
102
+ domain: 'graphs',
103
+ name: 'rejects a malformed graph with a validation error',
104
+ async run({ adapter, projectId }) {
105
+ await ensureRejects(adapter.graphs.saveGraph(projectId, {}), PersistenceValidationError, 'saveGraph() with a malformed graph');
106
+ },
107
+ },
108
+ ];
109
+ const cmsScenarios = [
110
+ {
111
+ domain: 'cms',
112
+ name: 'saves a valid schema, rejects duplicates, preserves createdAt on re-save',
113
+ crossProject: true,
114
+ async run({ adapter, projectId, emptyProjectId }) {
115
+ const record = await adapter.cms.saveSchema(projectId, sampleCollections);
116
+ ensureEqual(record.collections.length, sampleCollections.length, 'saved collection count');
117
+ await ensureRejects(adapter.cms.saveSchema(projectId, [...sampleCollections, sampleCollections[0]]), PersistenceValidationError, 'saveSchema() with a duplicated collection');
118
+ const resaved = await adapter.cms.saveSchema(projectId, sampleCollections);
119
+ ensureEqual(resaved.createdAt, record.createdAt, 'saveSchema() preserves createdAt');
120
+ await ensureRejects(adapter.cms.getSchema(emptyProjectId), RecordNotFoundError, 'getSchema() without a schema');
121
+ ensureEqual(await adapter.cms.findSchema(emptyProjectId), undefined, 'findSchema() without a schema');
122
+ },
123
+ },
124
+ {
125
+ domain: 'cms',
126
+ name: 'round-trips documents with localized variants and the publish pointer',
127
+ async run({ adapter, projectId, seedSchema }) {
128
+ await seedSchema(sampleCollections);
129
+ for (const doc of sampleDocuments)
130
+ await adapter.cms.upsertDocument(projectId, doc);
131
+ const localized = sampleDocuments.find((d) => d.localized);
132
+ const ref = { collection: localized.collection, id: localized.id };
133
+ const reloaded = await adapter.cms.getDocument(projectId, ref);
134
+ ensureEqual(reloaded.document.localized, localized.localized, 'localized variants intact');
135
+ // EC-224: publish-ness is the version pointer — record a snapshot, pin it.
136
+ const version = await adapter.cms.saveDocumentVersion(projectId, reloaded.document, {
137
+ label: 'published',
138
+ });
139
+ const published = await adapter.cms.publishDocumentVersion(projectId, ref, version.version);
140
+ ensureEqual(published.publishedVersion, version.version, 'publishDocumentVersion() pins live');
141
+ ensureEqual((await adapter.cms.getDocument(projectId, ref)).publishedVersion, version.version, 'pin persisted');
142
+ ensureEqual(published.createdAt, reloaded.createdAt, 'pinning preserves createdAt');
143
+ },
144
+ },
145
+ {
146
+ domain: 'cms',
147
+ name: 'stores documents data-only; lists deterministically; deletes with not-found',
148
+ async run({ adapter, projectId, seedSchema }) {
149
+ await seedSchema(sampleCollections);
150
+ // EC-183 (AD-11): the persistence layer is a pure document store — it does
151
+ // NOT reject an undeclared collection (collection-membership validation
152
+ // moved to `@elytracms/core/cms-core` `validateDocument`, run by the studio
153
+ // pre-dispatch and by the operations layer for declared collections). A
154
+ // document in any collection round-trips; shape is still enforced.
155
+ const stored = await adapter.cms.upsertDocument(projectId, {
156
+ collection: 'ghosts',
157
+ id: 'g1',
158
+ values: {},
159
+ });
160
+ ensureEqual(stored.document.collection, 'ghosts', 'stores an undeclared collection');
161
+ await adapter.cms.deleteDocument(projectId, { collection: 'ghosts', id: 'g1' });
162
+ for (const doc of sampleDocuments)
163
+ await adapter.cms.upsertDocument(projectId, doc);
164
+ const posts = await adapter.cms.listDocuments(projectId, 'post');
165
+ ensure(posts.length > 0, 'listDocuments(post) is non-empty');
166
+ ensure(posts.every((r) => r.document.collection === 'post'), 'listDocuments(post) filters by collection');
167
+ const all = await adapter.cms.listDocuments(projectId);
168
+ const keys = all.map((r) => `${r.document.collection}:${r.document.id}`);
169
+ ensureEqual(keys, [...keys].sort(), 'listDocuments() ordered by document key');
170
+ const first = sampleDocuments[0];
171
+ const ref = { collection: first.collection, id: first.id };
172
+ await adapter.cms.deleteDocument(projectId, ref);
173
+ await ensureRejects(adapter.cms.getDocument(projectId, ref), RecordNotFoundError, 'getDocument() after delete');
174
+ await ensureRejects(adapter.cms.deleteDocument(projectId, ref), RecordNotFoundError, 'deleteDocument() when already gone');
175
+ },
176
+ },
177
+ {
178
+ domain: 'cms',
179
+ name: 'records monotonic versions, pins/unpins the live one, cascades on delete (EC-224)',
180
+ async run({ adapter, projectId, seedSchema }) {
181
+ await seedSchema(sampleCollections);
182
+ const doc = sampleDocuments[0];
183
+ const ref = { collection: doc.collection, id: doc.id };
184
+ await adapter.cms.upsertDocument(projectId, doc);
185
+ // No versions, nothing pinned, before the first snapshot.
186
+ ensureEqual((await adapter.cms.listDocumentVersions(projectId, ref)).length, 0, 'no versions initially');
187
+ await ensureRejects(adapter.cms.getDocumentVersion(projectId, ref, 1), RecordNotFoundError, 'getDocumentVersion() before any snapshot');
188
+ // Append two versions — monotonic numbering, newest-first listing.
189
+ const v1 = await adapter.cms.saveDocumentVersion(projectId, doc, { label: 'published' });
190
+ ensureEqual(v1.version, 1, 'first recorded version is 1');
191
+ const v2 = await adapter.cms.saveDocumentVersion(projectId, doc);
192
+ ensureEqual(v2.version, 2, 'second recorded version is 2');
193
+ ensureEqual((await adapter.cms.listDocumentVersions(projectId, ref)).map((r) => r.version), [2, 1], 'listDocumentVersions() newest first');
194
+ ensureEqual((await adapter.cms.getDocumentVersion(projectId, ref, 1)).label, 'published', 'version label round-trips');
195
+ // Pin v1 live; pinning an unknown version is not-found.
196
+ const pinned = await adapter.cms.publishDocumentVersion(projectId, ref, 1);
197
+ ensureEqual(pinned.publishedVersion, 1, 'publishDocumentVersion() pins the live version');
198
+ ensureEqual((await adapter.cms.getDocument(projectId, ref)).publishedVersion, 1, 'published pin persists on the document');
199
+ // A draft edit must NOT clear the live pin (the Sanity model: editing the
200
+ // working draft never unpublishes). Cross-adapter parity: Convex patches
201
+ // the row, in-memory preserves `publishedVersion` the same way.
202
+ await adapter.cms.upsertDocument(projectId, doc);
203
+ ensureEqual((await adapter.cms.getDocument(projectId, ref)).publishedVersion, 1, 'a draft edit (upsert) preserves the published pin');
204
+ await ensureRejects(adapter.cms.publishDocumentVersion(projectId, ref, 99), RecordNotFoundError, 'publishDocumentVersion() with an unknown version');
205
+ // Unpin; unpublishing a second time is an invalid transition.
206
+ const unpinned = await adapter.cms.unpublishDocument(projectId, ref);
207
+ ensureEqual(unpinned.publishedVersion, undefined, 'unpublishDocument() clears the pin');
208
+ await ensureRejects(adapter.cms.unpublishDocument(projectId, ref), PersistenceValidationError, 'unpublishDocument() when nothing is published');
209
+ // Delete cascades the version history; a fresh document renumbers from 1.
210
+ await adapter.cms.publishDocumentVersion(projectId, ref, 2);
211
+ await adapter.cms.deleteDocument(projectId, ref);
212
+ await adapter.cms.upsertDocument(projectId, doc);
213
+ ensureEqual((await adapter.cms.listDocumentVersions(projectId, ref)).length, 0, 'deleteDocument() cascades the version history');
214
+ ensureEqual((await adapter.cms.getDocument(projectId, ref)).publishedVersion, undefined, 'a re-created document is unpublished');
215
+ const reborn = await adapter.cms.saveDocumentVersion(projectId, doc);
216
+ ensureEqual(reborn.version, 1, 'version numbering restarts after a cascade delete');
217
+ // listAllDocumentVersions aggregates across documents (delivery feeders).
218
+ const other = { collection: doc.collection, id: 'ec224-other', values: {} };
219
+ await adapter.cms.upsertDocument(projectId, other);
220
+ await adapter.cms.saveDocumentVersion(projectId, other);
221
+ const allVersions = await adapter.cms.listAllDocumentVersions(projectId);
222
+ const docKeys = new Set(allVersions.map((r) => `${r.collection}:${r.docId}`));
223
+ ensure(docKeys.has(`${doc.collection}:${doc.id}`) &&
224
+ docKeys.has(`${other.collection}:${other.id}`), 'listAllDocumentVersions() spans documents');
225
+ },
226
+ },
227
+ ];
228
+ const assetScenarios = [
229
+ {
230
+ domain: 'assets',
231
+ name: 'upserts, resolves, lists, and removes asset metadata',
232
+ async run({ adapter, projectId }) {
233
+ const a = await adapter.assets.upsertAsset(projectId, {
234
+ filename: 'cover.jpg',
235
+ contentType: 'image/jpeg',
236
+ byteSize: 1024,
237
+ width: 1200,
238
+ height: 630,
239
+ alt: 'Cover image',
240
+ title: 'Launch cover',
241
+ });
242
+ ensureEqual(a.storageKey, `${projectId}/${a.id}`, 'default storageKey derivation');
243
+ ensureEqual(a.title, 'Launch cover', 'title round-trips (EC-152 metadata)');
244
+ ensureEqual(a.width, 1200, 'width round-trips');
245
+ const b = await adapter.assets.upsertAsset(projectId, {
246
+ id: 'asset_logo',
247
+ filename: 'logo.svg',
248
+ contentType: 'image/svg+xml',
249
+ byteSize: 256,
250
+ });
251
+ ensureEqual(b.id, 'asset_logo', 'explicit asset id honored');
252
+ const resolved = await adapter.assets.resolveMany(projectId, [a.id, 'missing']);
253
+ ensureEqual(resolved.get(a.id)?.filename, 'cover.jpg', 'resolveMany() hit');
254
+ ensureEqual(resolved.has('missing'), false, 'resolveMany() miss');
255
+ const listed = await adapter.assets.listAssets(projectId);
256
+ ensureEqual(listed.map((r) => r.id), [a.id, b.id].sort(), 'listAssets() ordered by id');
257
+ await adapter.assets.removeAsset(projectId, a.id);
258
+ await ensureRejects(adapter.assets.getAsset(projectId, a.id), RecordNotFoundError, 'getAsset() after remove');
259
+ await ensureRejects(adapter.assets.removeAsset(projectId, a.id), RecordNotFoundError, 'removeAsset() when already gone');
260
+ ensureEqual(await adapter.assets.findAsset(projectId, a.id), undefined, 'findAsset() miss');
261
+ },
262
+ },
263
+ ];
264
+ const publishingScenarios = [
265
+ {
266
+ domain: 'publishing',
267
+ name: 'publishes, reverts to draft, preserves createdAt',
268
+ async run({ adapter, projectId }) {
269
+ const published = await adapter.publishing.publish(projectId, {
270
+ revisionId: 'rev_1',
271
+ revision: 1,
272
+ });
273
+ ensureEqual(published.status, 'published', 'publish() status');
274
+ ensureEqual(published.publishedRevision, 1, 'publish() pinned revision');
275
+ const republished = await adapter.publishing.publish(projectId, {
276
+ revisionId: 'rev_2',
277
+ revision: 2,
278
+ });
279
+ ensureEqual(republished.publishedRevision, 2, 'republish() repins');
280
+ ensureEqual(republished.createdAt, published.createdAt, 'republish() preserves createdAt');
281
+ const reverted = await adapter.publishing.unpublish(projectId);
282
+ ensureEqual(reverted.status, 'draft', 'unpublish() status');
283
+ ensureEqual(reverted.publishedRevisionId, undefined, 'unpublish() clears the pin');
284
+ ensureEqual(reverted.createdAt, published.createdAt, 'unpublish() preserves createdAt');
285
+ },
286
+ },
287
+ {
288
+ domain: 'publishing',
289
+ name: 'validates transitions and inputs',
290
+ async run({ adapter, projectId }) {
291
+ await ensureRejects(adapter.publishing.unpublish(projectId), PersistenceValidationError, 'unpublish() of a never-published deployment');
292
+ await ensureRejects(adapter.publishing.publish(projectId, { revisionId: '', revision: 1 }), PersistenceValidationError, 'publish() without a revision id');
293
+ await ensureRejects(adapter.publishing.publish(projectId, { revisionId: 'rev_1', revision: 0 }), PersistenceValidationError, 'publish() with a non-positive revision');
294
+ },
295
+ },
296
+ {
297
+ domain: 'publishing',
298
+ name: 'reports the unpublished state as not-found before the first publish',
299
+ async run({ adapter, projectId }) {
300
+ await ensureRejects(adapter.publishing.getState(projectId), RecordNotFoundError, 'getState() before the first publish');
301
+ ensureEqual(await adapter.publishing.findState(projectId), undefined, 'findState() before the first publish');
302
+ },
303
+ },
304
+ ];
305
+ const memberScenarios = [
306
+ {
307
+ domain: 'members',
308
+ name: 'sets, updates, lists, and removes memberships',
309
+ async run({ adapter, projectId, sessionUserId }) {
310
+ const blue = await adapter.members.setMember(projectId, 'user_blue', 'editor');
311
+ ensureEqual(blue.role, 'editor', 'setMember() role');
312
+ await adapter.members.setMember(projectId, 'user_zed', 'viewer');
313
+ const promoted = await adapter.members.setMember(projectId, 'user_blue', 'admin');
314
+ ensureEqual(promoted.role, 'admin', 'setMember() updates an existing role');
315
+ ensureEqual(promoted.createdAt, blue.createdAt, 'role update preserves createdAt');
316
+ ensureEqual((await adapter.members.findMember(projectId, 'user_zed'))?.role, 'viewer', 'findMember()');
317
+ const expectedUsers = [sessionUserId, 'user_blue', 'user_zed'].sort();
318
+ ensureEqual((await adapter.members.listMembers(projectId)).map((m) => m.userId), expectedUsers, 'listMembers() ordered by userId');
319
+ await adapter.members.removeMember(projectId, 'user_zed');
320
+ ensureEqual(await adapter.members.findMember(projectId, 'user_zed'), undefined, 'findMember() after remove');
321
+ await ensureRejects(adapter.members.removeMember(projectId, 'user_zed'), RecordNotFoundError, 'removeMember() when already gone');
322
+ },
323
+ },
324
+ {
325
+ domain: 'members',
326
+ name: 'lists the session user’s memberships across projects, ordered by project',
327
+ crossProject: true,
328
+ async run({ adapter, projectId, emptyProjectId, sessionUserId }) {
329
+ const memberships = await adapter.members.listMembershipsForUser(sessionUserId);
330
+ const projectIds = memberships.map((m) => m.projectId);
331
+ ensureEqual(projectIds, [...projectIds].sort(), 'memberships ordered by projectId');
332
+ ensure(projectIds.includes(projectId), 'membership on the primary project');
333
+ ensure(projectIds.includes(emptyProjectId), 'membership on the empty project');
334
+ ensure(memberships.every((m) => m.userId === sessionUserId), 'memberships belong to the session user');
335
+ },
336
+ },
337
+ ];
338
+ const cliTokenScenarios = [
339
+ {
340
+ domain: 'cli-tokens',
341
+ name: 'creates, lists, revokes (idempotently), and verifies by hash',
342
+ async run({ adapter }) {
343
+ const t1 = await adapter.cliTokens.createToken({
344
+ label: 'CI push token',
345
+ tokenHash: 'hash_a',
346
+ });
347
+ await adapter.cliTokens.createToken({ label: 'Local sync', tokenHash: 'hash_b' });
348
+ const listed = await adapter.cliTokens.listTokens();
349
+ ensureEqual(listed.length, 2, 'listTokens() count');
350
+ ensureEqual(listed.map((t) => t.id), listed.map((t) => t.id).sort(), 'listTokens() ordered by token id');
351
+ ensureEqual((await adapter.cliTokens.findByHash('hash_a'))?.id, t1.id, 'findByHash() resolves the token');
352
+ ensureEqual(await adapter.cliTokens.findByHash('nope'), undefined, 'findByHash() miss');
353
+ const revoked = await adapter.cliTokens.revokeToken(t1.id);
354
+ ensure(typeof revoked.revokedAt === 'string', 'revokeToken() stamps revokedAt');
355
+ const again = await adapter.cliTokens.revokeToken(t1.id);
356
+ ensureEqual(again.revokedAt, revoked.revokedAt, 'revokeToken() is idempotent');
357
+ ensureEqual((await adapter.cliTokens.findByHash('hash_a'))?.revokedAt, revoked.revokedAt, 'revoked tokens stay findable (auditable)');
358
+ await ensureRejects(adapter.cliTokens.revokeToken('tok_missing'), RecordNotFoundError, 'revokeToken() unknown id');
359
+ },
360
+ },
361
+ ];
362
+ const DOC_SOURCE = { type: 'document', id: 'post:hello' };
363
+ const referenceScenarios = [
364
+ {
365
+ domain: 'references',
366
+ name: 'replaces per source and answers outbound/inbound lookups deterministically',
367
+ async run({ adapter, projectId }) {
368
+ const entries = await adapter.references.replaceForSource(projectId, 'draft', DOC_SOURCE, [
369
+ {
370
+ path: 'values/cover',
371
+ target: { type: 'asset', id: 'asset_cover' },
372
+ kind: 'asset-field',
373
+ },
374
+ {
375
+ path: 'values/author',
376
+ target: { type: 'document', id: 'author:ada' },
377
+ kind: 'relation-field',
378
+ },
379
+ ]);
380
+ ensureEqual(entries.length, 2, 'replaceForSource() returns the stored entries');
381
+ ensureEqual(entries, [...entries].sort(compareReferenceEntries), 'entries are canonically ordered');
382
+ const outbound = await adapter.references.outbound(projectId, DOC_SOURCE, {
383
+ variant: 'draft',
384
+ });
385
+ ensureEqual(outbound.length, 2, 'outbound() finds both entries');
386
+ const inbound = await adapter.references.inbound(projectId, {
387
+ type: 'asset',
388
+ id: 'asset_cover',
389
+ });
390
+ ensureEqual(inbound.length, 1, 'inbound() finds the asset usage');
391
+ ensureEqual(inbound[0].source, DOC_SOURCE, 'inbound() attributes the source');
392
+ // Replace-all-for-source: the previous entries vanish.
393
+ await adapter.references.replaceForSource(projectId, 'draft', DOC_SOURCE, [
394
+ {
395
+ path: 'values/author',
396
+ target: { type: 'document', id: 'author:ada' },
397
+ kind: 'relation-field',
398
+ },
399
+ ]);
400
+ ensureEqual((await adapter.references.outbound(projectId, DOC_SOURCE)).length, 1, 'replaceForSource() replaces rather than appends');
401
+ },
402
+ },
403
+ {
404
+ domain: 'references',
405
+ name: 'replaces by source type, removes per source, and clears projects',
406
+ async run({ adapter, projectId }) {
407
+ await adapter.references.replaceForSource(projectId, 'draft', DOC_SOURCE, [
408
+ {
409
+ path: 'values/author',
410
+ target: { type: 'document', id: 'author:ada' },
411
+ kind: 'relation-field',
412
+ },
413
+ ]);
414
+ const pageEntries = await adapter.references.replaceForSourceTypes(projectId, 'draft', ['page'], [
415
+ {
416
+ source: { type: 'page', id: 'page.home' },
417
+ path: 'root/props/cover',
418
+ target: { type: 'asset', id: 'asset_cover' },
419
+ kind: 'prop-binding',
420
+ },
421
+ ]);
422
+ ensureEqual(pageEntries.length, 1, 'replaceForSourceTypes() returns the scoped entries');
423
+ ensureEqual((await adapter.references.listEntries(projectId, 'draft')).length, 2, 'document entries survive a page-scoped replace');
424
+ await adapter.references.removeForSource(projectId, DOC_SOURCE, 'draft');
425
+ ensureEqual((await adapter.references.outbound(projectId, DOC_SOURCE)).length, 0, 'removeForSource() clears the source');
426
+ // EC-269 build marker: absent until set, round-trips, cleared by clearProject.
427
+ ensureEqual(await adapter.references.getBuildMarker(projectId), null, 'build marker is absent until a backfill sets it');
428
+ await adapter.references.setBuildMarker(projectId, { entryCount: 7 });
429
+ ensureEqual((await adapter.references.getBuildMarker(projectId))?.entryCount, 7, 'setBuildMarker() round-trips the marker');
430
+ await adapter.references.clearProject(projectId);
431
+ ensureEqual((await adapter.references.listEntries(projectId)).length, 0, 'clearProject() empties the index');
432
+ ensureEqual(await adapter.references.getBuildMarker(projectId), null, 'clearProject() also clears the build marker');
433
+ },
434
+ },
435
+ ];
436
+ /**
437
+ * The acceptance-criterion round-trip (EC-153): edit the graph → a new revision
438
+ * record → publish that revision → the deployment pins it — against whatever
439
+ * adapter the harness provides.
440
+ */
441
+ export const graphEditPublishRoundTrip = {
442
+ domain: 'round-trip',
443
+ name: 'graph edit → revision record → publish round-trips',
444
+ async run({ adapter, projectId }) {
445
+ const r1 = await adapter.graphs.saveGraph(projectId, validSampleGraph, {
446
+ label: 'Initial import',
447
+ });
448
+ // Edit: rename the project graph (a real content change, deterministic).
449
+ const edited = structuredClone(validSampleGraph);
450
+ edited.metadata = { ...edited.metadata, name: 'Sample Project (edited)' };
451
+ const r2 = await adapter.graphs.saveGraph(projectId, edited, { message: 'Rename project' });
452
+ ensureEqual(r2.revision, r1.revision + 1, 'the edit appends a new revision');
453
+ const state = await adapter.publishing.publish(projectId, {
454
+ revisionId: r2.id,
455
+ revision: r2.revision,
456
+ });
457
+ ensureEqual(state.status, 'published', 'publish() succeeds');
458
+ ensureEqual(state.publishedRevisionId, r2.id, 'the edited revision is pinned');
459
+ const live = await adapter.graphs.getRevision(projectId, r2.revision);
460
+ ensureEqual(live.graph.metadata?.name, 'Sample Project (edited)', 'published graph content');
461
+ const original = await adapter.graphs.getRevision(projectId, r1.revision);
462
+ ensureEqual(original.graph.metadata?.name, 'Sample Project', 'history stays intact');
463
+ const reverted = await adapter.publishing.unpublish(projectId);
464
+ ensureEqual(reverted.status, 'draft', 'unpublish() reverts to draft');
465
+ },
466
+ };
467
+ const stateScenarios = [
468
+ {
469
+ domain: 'round-trip',
470
+ name: 'rejects pinning a version that was never recorded',
471
+ async run({ adapter, projectId, seedSchema }) {
472
+ await seedSchema(sampleCollections);
473
+ const doc = sampleDocuments[0];
474
+ await adapter.cms.upsertDocument(projectId, doc);
475
+ // EC-224: a pin must reference an EXISTING recorded version — pinning an
476
+ // unknown version is a not-found, never a silent no-op.
477
+ await ensureRejectsAny(adapter.cms.publishDocumentVersion(projectId, { collection: doc.collection, id: doc.id }, 999), 'publishDocumentVersion() with an unrecorded version');
478
+ },
479
+ },
480
+ ];
481
+ /**
482
+ * Every behavioural scenario both adapters must pass (EC-049 → EC-153).
483
+ * Hosts iterate this list and run each scenario against a fresh harness.
484
+ */
485
+ export const PERSISTENCE_CONTRACT_SCENARIOS = [
486
+ ...graphScenarios,
487
+ ...cmsScenarios,
488
+ ...assetScenarios,
489
+ ...publishingScenarios,
490
+ ...memberScenarios,
491
+ ...cliTokenScenarios,
492
+ ...referenceScenarios,
493
+ graphEditPublishRoundTrip,
494
+ ...stateScenarios,
495
+ ];
496
+ //# sourceMappingURL=contract-scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-scenarios.js","sourceRoot":"","sources":["../../src/persistence/contract-scenarios.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { z } from 'zod';
2
+ export { createSequentialClock, createSequentialIdFactory, } from '@elytracms/core/studio-core';
3
+ export type { Clock, IdFactory } from '@elytracms/core/studio-core';
4
+ /**
5
+ * Timestamps every persisted record carries (brief §10). Kept as ISO strings so
6
+ * fixtures and seeds stay byte-for-byte deterministic across runs.
7
+ */
8
+ export declare const recordMetaSchema: z.ZodObject<{
9
+ createdAt: z.ZodString;
10
+ updatedAt: z.ZodString;
11
+ }, z.core.$strip>;
12
+ export type RecordMeta = z.infer<typeof recordMetaSchema>;
13
+ /**
14
+ * Defensive deep clone for records handed back from in-memory repositories, so
15
+ * callers can never mutate the persisted store by mutating a returned value.
16
+ * Mirrors the no-aliasing invariant documented in `@elytracms/core/studio-core`'s
17
+ * `InMemoryProjectRepository`. Records are plain JSON-shaped data.
18
+ */
19
+ export declare function cloneRecord<T>(value: T): T;
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 declare const backendKindSchema: z.ZodEnum<{
25
+ convex: "convex";
26
+ "in-memory": "in-memory";
27
+ }>;
28
+ export type BackendKind = z.infer<typeof backendKindSchema>;
29
+ export interface BackendStatus {
30
+ backend: BackendKind;
31
+ available: boolean;
32
+ detail?: string;
33
+ }
34
+ /**
35
+ * A generic structured issue carried by a {@link PersistenceValidationError}.
36
+ * Domain issues (graph/cms/binding) are mapped onto this shape so a single error
37
+ * type can carry any validation failure (brief §4.11).
38
+ */
39
+ export declare const persistenceIssueSchema: z.ZodObject<{
40
+ code: z.ZodString;
41
+ message: z.ZodString;
42
+ path: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
43
+ domain: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$strip>;
45
+ export type PersistenceIssue = z.infer<typeof persistenceIssueSchema>;
46
+ export declare const persistenceErrorCodeSchema: z.ZodEnum<{
47
+ unknown: "unknown";
48
+ validation: "validation";
49
+ "not-found": "not-found";
50
+ conflict: "conflict";
51
+ "backend-unavailable": "backend-unavailable";
52
+ }>;
53
+ export type PersistenceErrorCode = z.infer<typeof persistenceErrorCodeSchema>;
54
+ export declare abstract class PersistenceError extends Error {
55
+ abstract readonly code: PersistenceErrorCode;
56
+ constructor(message: string, options?: {
57
+ cause?: unknown;
58
+ });
59
+ }
60
+ /** No record of `kind` exists for the given key. */
61
+ export declare class RecordNotFoundError extends PersistenceError {
62
+ readonly kind: string;
63
+ readonly key: string;
64
+ readonly code: "not-found";
65
+ constructor(kind: string, key: string);
66
+ }
67
+ /** A record would collide with an existing one (unique key/identity). */
68
+ export declare class RecordConflictError extends PersistenceError {
69
+ readonly kind: string;
70
+ readonly key: string;
71
+ readonly code: "conflict";
72
+ constructor(kind: string, key: string, message?: string);
73
+ }
74
+ /** A write failed structured validation; carries the issues. */
75
+ export declare class PersistenceValidationError extends PersistenceError {
76
+ readonly issues: readonly PersistenceIssue[];
77
+ readonly code: "validation";
78
+ constructor(message: string, issues: readonly PersistenceIssue[]);
79
+ }
80
+ /** The backing store is unreachable or returned a transport-level failure. */
81
+ export declare class BackendUnavailableError extends PersistenceError {
82
+ readonly code: "backend-unavailable";
83
+ constructor(message?: string, options?: {
84
+ cause?: unknown;
85
+ });
86
+ }
87
+ /** Any failure that does not map onto a more specific category. */
88
+ export declare class UnknownPersistenceError extends PersistenceError {
89
+ readonly code: "unknown";
90
+ constructor(message?: string, options?: {
91
+ cause?: unknown;
92
+ });
93
+ }
94
+ export declare function isPersistenceError(value: unknown): value is PersistenceError;
95
+ /** Normalize any thrown value onto the persistence error taxonomy. */
96
+ export declare function asPersistenceError(value: unknown): PersistenceError;