@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,118 @@
1
+ import { z } from 'zod';
2
+ import { createSequentialClock, createSequentialIds } from './core';
3
+ /**
4
+ * Comment threads (EC-127). A thread anchors to a target — a graph node id or a CMS document ref —
5
+ * and holds an ordered list of messages. Threads can be resolved and reopened; state persists in
6
+ * the store. A notification hook fires on every change so a host can surface alerts.
7
+ */
8
+ /** What a thread is attached to. */
9
+ export const commentAnchorSchema = z.object({
10
+ kind: z.enum(['node', 'document']),
11
+ /** Node id (kind=node) or `${collection}/${id}` (kind=document). */
12
+ ref: z.string().min(1),
13
+ });
14
+ export const commentMessageSchema = z.object({
15
+ id: z.string(),
16
+ author: z.string().optional(),
17
+ body: z.string().min(1),
18
+ at: z.string(),
19
+ });
20
+ export const commentThreadSchema = z.object({
21
+ id: z.string(),
22
+ projectId: z.string().min(1),
23
+ anchor: commentAnchorSchema,
24
+ resolved: z.boolean(),
25
+ messages: z.array(commentMessageSchema),
26
+ createdAt: z.string(),
27
+ updatedAt: z.string(),
28
+ });
29
+ export class CommentStore {
30
+ byProject = new Map();
31
+ clock;
32
+ ids;
33
+ listeners = new Set();
34
+ constructor(options = {}) {
35
+ this.clock = options.clock ?? createSequentialClock();
36
+ this.ids = options.ids ?? createSequentialIds();
37
+ }
38
+ /** Subscribe to comment changes; returns an unsubscribe function. */
39
+ onChange(listener) {
40
+ this.listeners.add(listener);
41
+ return () => this.listeners.delete(listener);
42
+ }
43
+ notify(type, thread) {
44
+ for (const listener of this.listeners)
45
+ listener({ type, thread });
46
+ }
47
+ list_(projectId) {
48
+ const existing = this.byProject.get(projectId);
49
+ if (existing)
50
+ return existing;
51
+ const created = [];
52
+ this.byProject.set(projectId, created);
53
+ return created;
54
+ }
55
+ find(projectId, threadId) {
56
+ const list = this.list_(projectId);
57
+ const index = list.findIndex((t) => t.id === threadId);
58
+ return index < 0 ? undefined : { list, index };
59
+ }
60
+ /** Start a thread on an anchor with its first message. */
61
+ start(projectId, anchor, body, author) {
62
+ const now = this.clock();
63
+ const thread = commentThreadSchema.parse({
64
+ id: this.ids('thr'),
65
+ projectId,
66
+ anchor,
67
+ resolved: false,
68
+ messages: [{ id: this.ids('msg'), ...(author !== undefined ? { author } : {}), body, at: now }],
69
+ createdAt: now,
70
+ updatedAt: now,
71
+ });
72
+ this.list_(projectId).push(thread);
73
+ this.notify('created', thread);
74
+ return thread;
75
+ }
76
+ /** Reply to a thread. Returns the updated thread, or `undefined` if unknown. */
77
+ reply(projectId, threadId, body, author) {
78
+ const found = this.find(projectId, threadId);
79
+ if (!found)
80
+ return undefined;
81
+ const now = this.clock();
82
+ const message = commentMessageSchema.parse({ id: this.ids('msg'), ...(author !== undefined ? { author } : {}), body, at: now });
83
+ const updated = { ...found.list[found.index], messages: [...found.list[found.index].messages, message], updatedAt: now };
84
+ found.list[found.index] = updated;
85
+ this.notify('replied', updated);
86
+ return updated;
87
+ }
88
+ setResolved(projectId, threadId, resolved) {
89
+ const found = this.find(projectId, threadId);
90
+ if (!found)
91
+ return undefined;
92
+ const current = found.list[found.index];
93
+ if (current.resolved === resolved)
94
+ return current;
95
+ const updated = { ...current, resolved, updatedAt: this.clock() };
96
+ found.list[found.index] = updated;
97
+ this.notify(resolved ? 'resolved' : 'reopened', updated);
98
+ return updated;
99
+ }
100
+ resolve(projectId, threadId) {
101
+ return this.setResolved(projectId, threadId, true);
102
+ }
103
+ reopen(projectId, threadId) {
104
+ return this.setResolved(projectId, threadId, false);
105
+ }
106
+ /** All threads for a project (optionally filtered by anchor), newest → oldest. */
107
+ list(projectId, anchor) {
108
+ const all = [...this.list_(projectId)].reverse();
109
+ if (!anchor)
110
+ return all;
111
+ return all.filter((t) => t.anchor.kind === anchor.kind && t.anchor.ref === anchor.ref);
112
+ }
113
+ /** Count of open (unresolved) threads — for badges. */
114
+ openCount(projectId) {
115
+ return this.list_(projectId).filter((t) => !t.resolved).length;
116
+ }
117
+ }
118
+ //# sourceMappingURL=comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/collaboration/comments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @elytracms/collaboration core (brief §10, Phase 10). Versioning + collaboration is modelled as
3
+ * pure, in-memory stores over deterministic primitives (an injected clock + id counter), so every
4
+ * flow — versions, publish history, rollback, presence, comments, approval, environments — is
5
+ * reproducible from fixtures and never throws (validation is data, brief §4.11). A Convex backend
6
+ * sits behind the same store interfaces in production.
7
+ */
8
+ /** Returns an ISO-8601 timestamp; injected so tests stay deterministic. */
9
+ export type Clock = () => string;
10
+ /** A monotonic id generator; injected for determinism. */
11
+ export type IdGen = (kind: string) => string;
12
+ /** Deterministic clock: starts at `startISO`, advances `stepMs` per call. */
13
+ export declare function createSequentialClock(startISO?: string, stepMs?: number): Clock;
14
+ /** Deterministic id generator: `${kind}_000001`, monotonic per-kind. */
15
+ export declare function createSequentialIds(): IdGen;
16
+ /** A participant in a collaboration session (presence, authorship, comments). */
17
+ export interface Actor {
18
+ id: string;
19
+ name: string;
20
+ }
21
+ /** Options shared by every store — injected clock + id generator for determinism. */
22
+ export interface StoreOptions {
23
+ clock?: Clock;
24
+ ids?: IdGen;
25
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @elytracms/collaboration core (brief §10, Phase 10). Versioning + collaboration is modelled as
3
+ * pure, in-memory stores over deterministic primitives (an injected clock + id counter), so every
4
+ * flow — versions, publish history, rollback, presence, comments, approval, environments — is
5
+ * reproducible from fixtures and never throws (validation is data, brief §4.11). A Convex backend
6
+ * sits behind the same store interfaces in production.
7
+ */
8
+ /** Deterministic clock: starts at `startISO`, advances `stepMs` per call. */
9
+ export function createSequentialClock(startISO = '2026-01-01T00:00:00.000Z', stepMs = 1000) {
10
+ let current = Date.parse(startISO);
11
+ return () => {
12
+ const iso = new Date(current).toISOString();
13
+ current += stepMs;
14
+ return iso;
15
+ };
16
+ }
17
+ /** Deterministic id generator: `${kind}_000001`, monotonic per-kind. */
18
+ export function createSequentialIds() {
19
+ const counters = new Map();
20
+ return (kind) => {
21
+ const next = (counters.get(kind) ?? 0) + 1;
22
+ counters.set(kind, next);
23
+ return `${kind}_${String(next).padStart(6, '0')}`;
24
+ };
25
+ }
26
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/collaboration/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,6EAA6E;AAC7E,MAAM,UAAU,qBAAqB,CAAC,QAAQ,GAAG,0BAA0B,EAAE,MAAM,GAAG,IAAI;IACxF,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,OAAO,IAAI,MAAM,CAAA;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC1C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxB,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACnD,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @elytracms/collaboration — versioning + collaboration over the canonical project (brief §10,
3
+ * Phase 10, EC-122–129). Project versions, draft/published preview, per-environment publish
4
+ * history, rollbacks, presence + soft locks + optimistic-concurrency conflicts, comment threads,
5
+ * and an approval-gated publishing workflow — all as pure, deterministic, never-throwing stores.
6
+ */
7
+ export declare const PACKAGE = "@elytracms/core/collaboration";
8
+ export * from './core';
9
+ export * from './versions';
10
+ export * from './publishing';
11
+ export * from './approval';
12
+ export * from './comments';
13
+ export * from './presence';
14
+ export * from './collaboration';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @elytracms/collaboration — versioning + collaboration over the canonical project (brief §10,
3
+ * Phase 10, EC-122–129). Project versions, draft/published preview, per-environment publish
4
+ * history, rollbacks, presence + soft locks + optimistic-concurrency conflicts, comment threads,
5
+ * and an approval-gated publishing workflow — all as pure, deterministic, never-throwing stores.
6
+ */
7
+ export const PACKAGE = '@elytracms/core/collaboration';
8
+ export * from './core';
9
+ export * from './versions';
10
+ export * from './publishing';
11
+ export * from './approval';
12
+ export * from './comments';
13
+ export * from './presence';
14
+ export * from './collaboration';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAA;AAEtD,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,62 @@
1
+ import type { Actor, StoreOptions } from './core';
2
+ /**
3
+ * Multi-user editing primitives (EC-126): presence (who is here + what they're focused on), soft
4
+ * node locks (advisory — claim a node so concurrent edits don't silently clobber), and optimistic
5
+ * concurrency conflict detection (an edit committed against a stale base version is reported as a
6
+ * conflict, never lost). These are the primitives; a Convex backend supplies live transport.
7
+ */
8
+ export interface Participant {
9
+ actor: Actor;
10
+ /** The node the participant currently has selected, if any. */
11
+ focusNodeId?: string;
12
+ since: string;
13
+ }
14
+ export interface NodeLock {
15
+ nodeId: string;
16
+ actorId: string;
17
+ at: string;
18
+ }
19
+ /** The outcome of attempting to acquire a lock. */
20
+ export interface LockResult {
21
+ ok: boolean;
22
+ /** The current owner (the requester on success, or the conflicting holder on failure). */
23
+ ownerId: string;
24
+ }
25
+ /** The outcome of committing an optimistic edit. */
26
+ export interface CommitResult {
27
+ ok: boolean;
28
+ conflict: boolean;
29
+ /** When `conflict`, the head version the edit must be rebased onto. */
30
+ headVersion: number;
31
+ }
32
+ export declare class PresenceStore {
33
+ private readonly participants;
34
+ private readonly locks;
35
+ private readonly clock;
36
+ constructor(options?: StoreOptions);
37
+ private people;
38
+ private lockMap;
39
+ /** Mark an actor present (idempotent; preserves an existing focus). */
40
+ join(projectId: string, actor: Actor): Participant;
41
+ /** Remove an actor and release every lock it held (no edits are lost — locks are advisory). */
42
+ leave(projectId: string, actorId: string): void;
43
+ /** Update an actor's focused node (presence cursor). */
44
+ focus(projectId: string, actorId: string, focusNodeId: string | undefined): void;
45
+ /** Everyone present, in join order. */
46
+ list(projectId: string): Participant[];
47
+ /**
48
+ * Acquire a soft lock on a node. Succeeds if it is free or already held by the requester;
49
+ * fails (reporting the holder) if another actor holds it.
50
+ */
51
+ lockNode(projectId: string, nodeId: string, actorId: string): LockResult;
52
+ /** Release a lock the actor holds (no-op if free or held by someone else). */
53
+ unlockNode(projectId: string, nodeId: string, actorId: string): void;
54
+ /** The actor holding a node's lock, if any. */
55
+ lockOwner(projectId: string, nodeId: string): string | undefined;
56
+ /**
57
+ * Commit an optimistic edit made against `baseVersion`. If the head has advanced past the base
58
+ * (a concurrent commit landed), the edit is reported as a conflict to be rebased — never
59
+ * silently lost. Otherwise it succeeds against the new head.
60
+ */
61
+ commitEdit(baseVersion: number, headVersion: number): CommitResult;
62
+ }
@@ -0,0 +1,85 @@
1
+ import { createSequentialClock } from './core';
2
+ export class PresenceStore {
3
+ participants = new Map();
4
+ locks = new Map();
5
+ clock;
6
+ constructor(options = {}) {
7
+ this.clock = options.clock ?? createSequentialClock();
8
+ }
9
+ people(projectId) {
10
+ const existing = this.participants.get(projectId);
11
+ if (existing)
12
+ return existing;
13
+ const created = new Map();
14
+ this.participants.set(projectId, created);
15
+ return created;
16
+ }
17
+ lockMap(projectId) {
18
+ const existing = this.locks.get(projectId);
19
+ if (existing)
20
+ return existing;
21
+ const created = new Map();
22
+ this.locks.set(projectId, created);
23
+ return created;
24
+ }
25
+ /** Mark an actor present (idempotent; preserves an existing focus). */
26
+ join(projectId, actor) {
27
+ const people = this.people(projectId);
28
+ const existing = people.get(actor.id);
29
+ const participant = existing ?? { actor, since: this.clock() };
30
+ people.set(actor.id, participant);
31
+ return participant;
32
+ }
33
+ /** Remove an actor and release every lock it held (no edits are lost — locks are advisory). */
34
+ leave(projectId, actorId) {
35
+ this.people(projectId).delete(actorId);
36
+ const locks = this.lockMap(projectId);
37
+ for (const [nodeId, lock] of locks)
38
+ if (lock.actorId === actorId)
39
+ locks.delete(nodeId);
40
+ }
41
+ /** Update an actor's focused node (presence cursor). */
42
+ focus(projectId, actorId, focusNodeId) {
43
+ const participant = this.people(projectId).get(actorId);
44
+ if (participant) {
45
+ this.people(projectId).set(actorId, { ...participant, ...(focusNodeId !== undefined ? { focusNodeId } : { focusNodeId: undefined }) });
46
+ }
47
+ }
48
+ /** Everyone present, in join order. */
49
+ list(projectId) {
50
+ return [...this.people(projectId).values()];
51
+ }
52
+ /**
53
+ * Acquire a soft lock on a node. Succeeds if it is free or already held by the requester;
54
+ * fails (reporting the holder) if another actor holds it.
55
+ */
56
+ lockNode(projectId, nodeId, actorId) {
57
+ const locks = this.lockMap(projectId);
58
+ const held = locks.get(nodeId);
59
+ if (held && held.actorId !== actorId)
60
+ return { ok: false, ownerId: held.actorId };
61
+ locks.set(nodeId, { nodeId, actorId, at: this.clock() });
62
+ return { ok: true, ownerId: actorId };
63
+ }
64
+ /** Release a lock the actor holds (no-op if free or held by someone else). */
65
+ unlockNode(projectId, nodeId, actorId) {
66
+ const locks = this.lockMap(projectId);
67
+ if (locks.get(nodeId)?.actorId === actorId)
68
+ locks.delete(nodeId);
69
+ }
70
+ /** The actor holding a node's lock, if any. */
71
+ lockOwner(projectId, nodeId) {
72
+ return this.lockMap(projectId).get(nodeId)?.actorId;
73
+ }
74
+ /**
75
+ * Commit an optimistic edit made against `baseVersion`. If the head has advanced past the base
76
+ * (a concurrent commit landed), the edit is reported as a conflict to be rebased — never
77
+ * silently lost. Otherwise it succeeds against the new head.
78
+ */
79
+ commitEdit(baseVersion, headVersion) {
80
+ if (baseVersion < headVersion)
81
+ return { ok: false, conflict: true, headVersion };
82
+ return { ok: true, conflict: false, headVersion: headVersion + 1 };
83
+ }
84
+ }
85
+ //# sourceMappingURL=presence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence.js","sourceRoot":"","sources":["../../src/collaboration/presence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+ import type { StoreOptions } from './core';
3
+ /**
4
+ * Publishing (EC-129), publish history (EC-124), and draft-vs-published preview resolution
5
+ * (EC-123). A deployment IS one environment (EC-179, vision AD-8), so publishing is a single
6
+ * draft/published axis — NOT a per-environment matrix. The deployment pins the one version that
7
+ * is live; publishing, reverting and rolling back all append to an append-only event log. Moving
8
+ * a release between environments (staging → production) is a deployment/code-pipeline concern, not
9
+ * an in-deployment promote — see `env-is-deployment-boundary`.
10
+ */
11
+ export type PublishAction = 'publish' | 'unpublish' | 'rollback';
12
+ export type PreviewMode = 'draft' | 'published';
13
+ /** Live publish state of the deployment. */
14
+ export declare const publishStateSchema: z.ZodObject<{
15
+ publishedVersionId: z.ZodOptional<z.ZodString>;
16
+ publishedAt: z.ZodOptional<z.ZodString>;
17
+ }, z.core.$strip>;
18
+ export type PublishState = z.infer<typeof publishStateSchema>;
19
+ /** A single publish-history event. */
20
+ export declare const publishEventSchema: z.ZodObject<{
21
+ id: z.ZodString;
22
+ projectId: z.ZodString;
23
+ action: z.ZodEnum<{
24
+ rollback: "rollback";
25
+ publish: "publish";
26
+ unpublish: "unpublish";
27
+ }>;
28
+ versionId: z.ZodOptional<z.ZodString>;
29
+ author: z.ZodOptional<z.ZodString>;
30
+ note: z.ZodOptional<z.ZodString>;
31
+ at: z.ZodString;
32
+ }, z.core.$strip>;
33
+ export type PublishEvent = z.infer<typeof publishEventSchema>;
34
+ export declare class PublishingStore {
35
+ /** projectId → live state. */
36
+ private readonly states;
37
+ /** projectId → events (append-only). */
38
+ private readonly events;
39
+ private readonly clock;
40
+ private readonly ids;
41
+ constructor(options?: StoreOptions);
42
+ private eventList;
43
+ private record;
44
+ /** The live state of the deployment (defaults to unpublished). */
45
+ state(projectId: string): PublishState;
46
+ /** Publish a version (EC-129). Appends a history event (EC-124). */
47
+ publish(projectId: string, versionId: string, author?: string): PublishState;
48
+ /** Revert to draft (no live version). */
49
+ unpublish(projectId: string, author?: string): PublishState;
50
+ /** Record a rollback publish (the version is a rollback version). */
51
+ rollback(projectId: string, versionId: string, author?: string): PublishState;
52
+ /** Full publish history, newest → oldest. */
53
+ history(projectId: string): PublishEvent[];
54
+ /**
55
+ * Resolve which version to render for a preview mode (EC-123). `published` → the live version;
56
+ * `draft` → the working draft version the caller supplies. Lets a preview render draft content
57
+ * distinctly from what is published.
58
+ */
59
+ resolveVersion(projectId: string, mode: PreviewMode, draftVersionId?: string): string | undefined;
60
+ }
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+ import { createSequentialClock, createSequentialIds } from './core';
3
+ /** Live publish state of the deployment. */
4
+ export const publishStateSchema = z.object({
5
+ /** The version live in this deployment, or undefined when nothing is published. */
6
+ publishedVersionId: z.string().optional(),
7
+ publishedAt: z.string().optional(),
8
+ });
9
+ /** A single publish-history event. */
10
+ export const publishEventSchema = z.object({
11
+ id: z.string(),
12
+ projectId: z.string().min(1),
13
+ action: z.enum(['publish', 'unpublish', 'rollback']),
14
+ versionId: z.string().optional(),
15
+ author: z.string().optional(),
16
+ note: z.string().optional(),
17
+ at: z.string(),
18
+ });
19
+ export class PublishingStore {
20
+ /** projectId → live state. */
21
+ states = new Map();
22
+ /** projectId → events (append-only). */
23
+ events = new Map();
24
+ clock;
25
+ ids;
26
+ constructor(options = {}) {
27
+ this.clock = options.clock ?? createSequentialClock();
28
+ this.ids = options.ids ?? createSequentialIds();
29
+ }
30
+ eventList(projectId) {
31
+ const existing = this.events.get(projectId);
32
+ if (existing)
33
+ return existing;
34
+ const created = [];
35
+ this.events.set(projectId, created);
36
+ return created;
37
+ }
38
+ record(projectId, action, versionId, author, note) {
39
+ const event = publishEventSchema.parse({
40
+ id: this.ids('pub'),
41
+ projectId,
42
+ action,
43
+ ...(versionId !== undefined ? { versionId } : {}),
44
+ ...(author !== undefined ? { author } : {}),
45
+ ...(note !== undefined ? { note } : {}),
46
+ at: this.clock(),
47
+ });
48
+ this.eventList(projectId).push(event);
49
+ return event;
50
+ }
51
+ /** The live state of the deployment (defaults to unpublished). */
52
+ state(projectId) {
53
+ return this.states.get(projectId) ?? {};
54
+ }
55
+ /** Publish a version (EC-129). Appends a history event (EC-124). */
56
+ publish(projectId, versionId, author) {
57
+ const at = this.clock();
58
+ const state = { publishedVersionId: versionId, publishedAt: at };
59
+ this.states.set(projectId, state);
60
+ this.record(projectId, 'publish', versionId, author);
61
+ return state;
62
+ }
63
+ /** Revert to draft (no live version). */
64
+ unpublish(projectId, author) {
65
+ const state = {};
66
+ this.states.set(projectId, state);
67
+ this.record(projectId, 'unpublish', undefined, author);
68
+ return state;
69
+ }
70
+ /** Record a rollback publish (the version is a rollback version). */
71
+ rollback(projectId, versionId, author) {
72
+ const at = this.clock();
73
+ const state = { publishedVersionId: versionId, publishedAt: at };
74
+ this.states.set(projectId, state);
75
+ this.record(projectId, 'rollback', versionId, author, 'Rolled back to a prior version.');
76
+ return state;
77
+ }
78
+ /** Full publish history, newest → oldest. */
79
+ history(projectId) {
80
+ return [...this.eventList(projectId)].reverse();
81
+ }
82
+ /**
83
+ * Resolve which version to render for a preview mode (EC-123). `published` → the live version;
84
+ * `draft` → the working draft version the caller supplies. Lets a preview render draft content
85
+ * distinctly from what is published.
86
+ */
87
+ resolveVersion(projectId, mode, draftVersionId) {
88
+ if (mode === 'draft')
89
+ return draftVersionId;
90
+ return this.state(projectId).publishedVersionId;
91
+ }
92
+ }
93
+ //# sourceMappingURL=publishing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/collaboration/publishing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ import type { StoreOptions } from './core';
3
+ /**
4
+ * Project versioning (EC-122) + rollback (EC-125). A version is an immutable snapshot of project
5
+ * state (the serialized graph) with metadata. Versions are append-only and numbered per project;
6
+ * a rollback creates a NEW version whose snapshot equals a prior one's — history is never
7
+ * rewritten, so the rollback itself is auditable.
8
+ */
9
+ export type VersionOrigin = 'edit' | 'import' | 'rollback';
10
+ export declare const versionRecordSchema: z.ZodObject<{
11
+ id: z.ZodString;
12
+ projectId: z.ZodString;
13
+ number: z.ZodNumber;
14
+ snapshot: z.ZodString;
15
+ label: z.ZodOptional<z.ZodString>;
16
+ message: z.ZodOptional<z.ZodString>;
17
+ author: z.ZodOptional<z.ZodString>;
18
+ origin: z.ZodEnum<{
19
+ edit: "edit";
20
+ import: "import";
21
+ rollback: "rollback";
22
+ }>;
23
+ parentId: z.ZodOptional<z.ZodString>;
24
+ createdAt: z.ZodString;
25
+ }, z.core.$strip>;
26
+ export type VersionRecord = z.infer<typeof versionRecordSchema>;
27
+ export interface CreateVersionInput {
28
+ snapshot: string;
29
+ label?: string;
30
+ message?: string;
31
+ author?: string;
32
+ origin?: VersionOrigin;
33
+ }
34
+ /** In-memory, append-only version store. */
35
+ export declare class VersionStore {
36
+ private readonly byProject;
37
+ private readonly clock;
38
+ private readonly ids;
39
+ constructor(options?: StoreOptions);
40
+ private list_;
41
+ /** Append a new version. Returns the created record. */
42
+ create(projectId: string, input: CreateVersionInput): VersionRecord;
43
+ /** All versions for a project, oldest → newest. */
44
+ list(projectId: string): VersionRecord[];
45
+ get(projectId: string, versionId: string): VersionRecord | undefined;
46
+ latest(projectId: string): VersionRecord | undefined;
47
+ /**
48
+ * Roll back to a prior version (EC-125): appends a NEW version carrying the target's snapshot.
49
+ * Returns `undefined` if the target version doesn't exist (the caller surfaces it as an issue).
50
+ */
51
+ rollback(projectId: string, toVersionId: string, author?: string): VersionRecord | undefined;
52
+ }