@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,223 @@
1
+ import { splitPath } from './routes';
2
+ const DEFAULT_PARENT_FIELD = 'parent';
3
+ const DEFAULT_SLUG_FIELD = 'slug';
4
+ /** Resolve a {@link HierarchyConfig} to its concrete field names. */
5
+ export function hierarchyFields(config = {}) {
6
+ return {
7
+ parentField: config.parentField ?? DEFAULT_PARENT_FIELD,
8
+ slugField: config.slugField ?? DEFAULT_SLUG_FIELD,
9
+ };
10
+ }
11
+ /**
12
+ * The self-relation field that names a document's parent, if this collection
13
+ * declares one: a single-valued `relation` field, named per the config, whose
14
+ * target is the collection itself.
15
+ */
16
+ export function parentRelationField(collection, config = {}) {
17
+ const { parentField } = hierarchyFields(config);
18
+ const field = collection.fields.find((f) => f.name === parentField);
19
+ if (field &&
20
+ field.type === 'relation' &&
21
+ field.target === collection.id &&
22
+ field.cardinality === 'one') {
23
+ return field;
24
+ }
25
+ return undefined;
26
+ }
27
+ /** Does this collection model a parent/child hierarchy (a `parent` self-relation)? */
28
+ export function isHierarchical(collection, config = {}) {
29
+ return parentRelationField(collection, config) !== undefined;
30
+ }
31
+ /** The parent document id from a `one` self-relation value (a `DocumentRef` or bare id). */
32
+ function readParentId(doc, parentField) {
33
+ const value = doc.values[parentField];
34
+ if (value == null)
35
+ return undefined;
36
+ if (typeof value === 'string')
37
+ return value.length > 0 ? value : undefined;
38
+ if (typeof value === 'object' && 'id' in value) {
39
+ const id = value.id;
40
+ return typeof id === 'string' && id.length > 0 ? id : undefined;
41
+ }
42
+ return undefined;
43
+ }
44
+ /** The local slug segment of a document, or undefined when unset/empty. */
45
+ function readSlug(doc, slugField) {
46
+ const value = doc.values[slugField];
47
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
48
+ }
49
+ /**
50
+ * Compose a document's full path segments by walking its parent chain from the
51
+ * leaf up, then ordering root → leaf. Cycle-safe: revisiting a document stops
52
+ * the walk and flags `cycle`. `getById` looks documents up *within the same
53
+ * collection* (a self-relation never crosses collections).
54
+ */
55
+ export function composePath(doc, getById, config = {}) {
56
+ const { parentField, slugField } = hierarchyFields(config);
57
+ const segments = [];
58
+ const seen = new Set([doc.id]);
59
+ let cycle = false;
60
+ let missingSlug = false;
61
+ let danglingParent = false;
62
+ let current = doc;
63
+ while (current) {
64
+ const slug = readSlug(current, slugField);
65
+ if (slug === undefined)
66
+ missingSlug = true;
67
+ else
68
+ segments.unshift(slug);
69
+ const parentId = readParentId(current, parentField);
70
+ if (parentId === undefined)
71
+ break;
72
+ const parent = getById(parentId);
73
+ if (!parent) {
74
+ danglingParent = true;
75
+ break;
76
+ }
77
+ if (seen.has(parent.id)) {
78
+ cycle = true;
79
+ break;
80
+ }
81
+ seen.add(parent.id);
82
+ current = parent;
83
+ }
84
+ return { segments, ok: !cycle && !missingSlug && !danglingParent, cycle, missingSlug, danglingParent };
85
+ }
86
+ /** Does a document's parent chain loop? (cycle-safe; uses {@link composePath}). */
87
+ export function hasParentCycle(doc, getById, config = {}) {
88
+ return composePath(doc, getById, config).cycle;
89
+ }
90
+ /**
91
+ * Order documents as a depth-first hierarchy (parents immediately before their
92
+ * children, siblings in input order), annotating each with its depth. Roots are
93
+ * documents with no parent, or whose parent is absent (orphans surface at the
94
+ * root). Cycle-safe: documents trapped in a parent cycle are never lost — they
95
+ * are appended at depth 0 rather than recursed into. The read-side of the
96
+ * hierarchical list view (EC-218).
97
+ */
98
+ export function orderHierarchically(docs, config = {}) {
99
+ const { parentField } = hierarchyFields(config);
100
+ const byId = new Map(docs.map((d) => [d.id, d]));
101
+ // Bucket each document under its effective parent key (null = a root).
102
+ const children = new Map();
103
+ for (const doc of docs) {
104
+ const parentId = readParentId(doc, parentField);
105
+ const key = parentId != null && parentId !== doc.id && byId.has(parentId) ? parentId : null;
106
+ const bucket = children.get(key);
107
+ if (bucket)
108
+ bucket.push(doc);
109
+ else
110
+ children.set(key, [doc]);
111
+ }
112
+ const rows = [];
113
+ const visited = new Set();
114
+ const walk = (parentKey, depth) => {
115
+ for (const doc of children.get(parentKey) ?? []) {
116
+ if (visited.has(doc.id))
117
+ continue;
118
+ visited.add(doc.id);
119
+ rows.push({ doc, depth, hasChildren: (children.get(doc.id)?.length ?? 0) > 0 });
120
+ walk(doc.id, depth + 1);
121
+ }
122
+ };
123
+ walk(null, 0);
124
+ // Any document not reached from a root is trapped in a cycle — surface it at
125
+ // the root so the list never silently drops a document. It may still have
126
+ // (cycle-trapped) children, so report hasChildren the same way the main walk does.
127
+ for (const doc of docs) {
128
+ if (!visited.has(doc.id)) {
129
+ visited.add(doc.id);
130
+ rows.push({ doc, depth: 0, hasChildren: (children.get(doc.id)?.length ?? 0) > 0 });
131
+ }
132
+ }
133
+ return rows;
134
+ }
135
+ /**
136
+ * The ids of every descendant of `rootId` (children, grandchildren, …). Used to
137
+ * keep a `parent` picker from offering a document its own subtree — which would
138
+ * create a cycle. Excludes `rootId` itself; cycle-safe.
139
+ */
140
+ export function descendantIds(rootId, docs, config = {}) {
141
+ const { parentField } = hierarchyFields(config);
142
+ const children = new Map();
143
+ for (const doc of docs) {
144
+ const parentId = readParentId(doc, parentField);
145
+ if (parentId == null)
146
+ continue;
147
+ const bucket = children.get(parentId);
148
+ if (bucket)
149
+ bucket.push(doc);
150
+ else
151
+ children.set(parentId, [doc]);
152
+ }
153
+ const out = new Set();
154
+ const stack = [rootId];
155
+ while (stack.length > 0) {
156
+ const id = stack.pop();
157
+ for (const child of children.get(id) ?? []) {
158
+ if (child.id !== rootId && !out.has(child.id)) {
159
+ out.add(child.id);
160
+ stack.push(child.id);
161
+ }
162
+ }
163
+ }
164
+ return out;
165
+ }
166
+ /**
167
+ * Is this route a hierarchy mount? — its pattern ends with a catch-all param
168
+ * segment (`:name*`), declaring "this collection's documents are served by their
169
+ * composed nested paths under this prefix" (EC-218). The host pulls these out of
170
+ * the router and resolves them per-request with {@link resolveByPath}, so the
171
+ * URL→document mapping stays perspective-aware (draft vs published) and the path
172
+ * stays derived, never stored.
173
+ */
174
+ export function isHierarchyTemplate(route) {
175
+ if (!route.document)
176
+ return false;
177
+ const segments = splitPath(route.pattern);
178
+ const last = segments[segments.length - 1];
179
+ return last !== undefined && last.startsWith(':') && last.endsWith('*');
180
+ }
181
+ /**
182
+ * Parse a hierarchy mount from a catch-all template route (EC-218), or undefined
183
+ * when the route is not a valid mount (not a catch-all, or its prefix contains a
184
+ * dynamic segment, which a composed-path mount does not support).
185
+ */
186
+ export function hierarchyMount(route) {
187
+ if (!isHierarchyTemplate(route) || !route.document)
188
+ return undefined;
189
+ const prefix = splitPath(route.pattern).slice(0, -1);
190
+ if (prefix.some((segment) => segment.startsWith(':')))
191
+ return undefined;
192
+ return {
193
+ collection: route.document.collection,
194
+ prefix,
195
+ ...(route.locale ? { locale: route.locale } : {}),
196
+ };
197
+ }
198
+ /**
199
+ * Resolve a path (its slug segments, prefix already stripped) to the one document
200
+ * whose composed nested path matches (EC-218). The caller supplies the documents
201
+ * already selected for the active perspective (draft/published), so resolution is
202
+ * perspective-aware. Documents with a broken or cyclic chain never match.
203
+ * Deterministic on the rare duplicate composed path: the lowest id wins (the same
204
+ * tie-break the single-slug fallback uses).
205
+ */
206
+ export function resolveByPath(segments, docs, config = {}) {
207
+ if (segments.length === 0)
208
+ return undefined;
209
+ const byId = new Map(docs.map((d) => [d.id, d]));
210
+ const getById = (id) => byId.get(id);
211
+ const target = segments.join('/');
212
+ let match;
213
+ for (const doc of docs) {
214
+ const composed = composePath(doc, getById, config);
215
+ if (!composed.ok)
216
+ continue;
217
+ if (composed.segments.join('/') === target && (!match || doc.id < match.id)) {
218
+ match = doc;
219
+ }
220
+ }
221
+ return match;
222
+ }
223
+ //# sourceMappingURL=hierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/cms-core/hierarchy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @elytracms/cms-core — provider-neutral, schema-driven CMS primitives (brief §7.4).
3
+ *
4
+ * Collections & fields, relations & assets, localization, route/redirect
5
+ * resolution, conflict & loop detection, and draft/published + version history.
6
+ * Reuses canonical types from `@elytracms/core/project-graph` and mirrors its
7
+ * structured-issue conventions (brief §4.11): invalid states are explicit
8
+ * `CmsValidationIssue`s, never silent failures or crashes.
9
+ */
10
+ export declare const PACKAGE = "@elytracms/core/cms-core";
11
+ export * from './issues';
12
+ export * from './fields';
13
+ export * from './collections';
14
+ export * from './documents';
15
+ export * from './envelopes';
16
+ export * from './self-type';
17
+ export * from './localization';
18
+ export * from './validate-document';
19
+ export * from './infer';
20
+ export * from './json-schema';
21
+ export * from './routes';
22
+ export * from './hierarchy';
23
+ export * from './url-for-document';
24
+ export * from './versions';
25
+ export * from './fixtures';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @elytracms/cms-core — provider-neutral, schema-driven CMS primitives (brief §7.4).
3
+ *
4
+ * Collections & fields, relations & assets, localization, route/redirect
5
+ * resolution, conflict & loop detection, and draft/published + version history.
6
+ * Reuses canonical types from `@elytracms/core/project-graph` and mirrors its
7
+ * structured-issue conventions (brief §4.11): invalid states are explicit
8
+ * `CmsValidationIssue`s, never silent failures or crashes.
9
+ */
10
+ export const PACKAGE = '@elytracms/core/cms-core';
11
+ export * from './issues';
12
+ export * from './fields';
13
+ export * from './collections';
14
+ export * from './documents';
15
+ export * from './envelopes';
16
+ export * from './self-type';
17
+ export * from './localization';
18
+ export * from './validate-document';
19
+ export * from './infer';
20
+ export * from './json-schema';
21
+ export * from './routes';
22
+ export * from './hierarchy';
23
+ export * from './url-for-document';
24
+ export * from './versions';
25
+ export * from './fixtures';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cms-core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,0BAA0B,CAAA;AAEjD,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,103 @@
1
+ import type { CollectionDef } from './collections';
2
+ import type { DocumentRef } from './documents';
3
+ import type { FieldDef } from './fields';
4
+ /**
5
+ * Map a single field definition to its inferred runtime TS type. Relations
6
+ * resolve to `DocumentRef`(s), assets to asset-id string(s), select to its
7
+ * option-value union, etc. (EC-016: "inferred TS types").
8
+ *
9
+ * This is a *type-level* mapping consumed via `InferDocument<C>`. Cardinality
10
+ * (`one` vs `many`) widens to an array.
11
+ */
12
+ export type InferFieldValue<F extends FieldDef> = F extends {
13
+ type: 'text';
14
+ } ? string : F extends {
15
+ type: 'richText';
16
+ } ? string : F extends {
17
+ type: 'number';
18
+ } ? number : F extends {
19
+ type: 'boolean';
20
+ } ? boolean : F extends {
21
+ type: 'date';
22
+ } ? string | number : F extends {
23
+ type: 'select';
24
+ options: infer O;
25
+ multiple: infer M;
26
+ } ? O extends ReadonlyArray<{
27
+ value: infer V;
28
+ }> ? M extends true ? V[] : V : string : F extends {
29
+ type: 'relation';
30
+ cardinality: infer C;
31
+ } ? C extends 'many' ? DocumentRef[] : DocumentRef : F extends {
32
+ type: 'asset';
33
+ cardinality: infer AC;
34
+ } ? AC extends 'many' ? string[] : string : F extends {
35
+ type: 'object';
36
+ cardinality: infer OC;
37
+ } ? OC extends 'many' ? Record<string, unknown>[] : Record<string, unknown> : unknown;
38
+ /** The union of all field definitions in a collection literal. */
39
+ type FieldUnion<C extends {
40
+ fields: readonly FieldDef[];
41
+ }> = C['fields'][number];
42
+ /** Names of all fields. */
43
+ type FieldNames<C extends {
44
+ fields: readonly FieldDef[];
45
+ }> = FieldUnion<C> extends {
46
+ name: infer N extends string;
47
+ } ? N : never;
48
+ /** Names of required fields (validation.required === true). */
49
+ type RequiredFieldNames<C extends {
50
+ fields: readonly FieldDef[];
51
+ }> = Extract<FieldUnion<C>, {
52
+ validation: {
53
+ required: true;
54
+ };
55
+ }> extends {
56
+ name: infer N extends string;
57
+ } ? N : never;
58
+ /** Names of optional fields (everything that isn't required). */
59
+ type OptionalFieldNames<C extends {
60
+ fields: readonly FieldDef[];
61
+ }> = Exclude<FieldNames<C>, RequiredFieldNames<C>>;
62
+ /** The inferred value type of the field named `N` in collection `C`. */
63
+ type ValueOfField<C extends {
64
+ fields: readonly FieldDef[];
65
+ }, N extends string> = InferFieldValue<Extract<FieldUnion<C>, {
66
+ name: N;
67
+ }>>;
68
+ /**
69
+ * Infer the TS shape of a document for a collection literal (EC-016). Use with
70
+ * `as const` collection definitions to get a precise type:
71
+ *
72
+ * ```ts
73
+ * const post = { id: 'post', kind: 'document', fields: [...] } as const
74
+ * type Post = InferDocument<typeof post>
75
+ * ```
76
+ *
77
+ * Required fields are required; the rest are optional. The value of each field
78
+ * is correlated to that field by name (not positionally), so per-field types are
79
+ * preserved precisely.
80
+ */
81
+ export type InferDocument<C extends {
82
+ fields: readonly FieldDef[];
83
+ }> = {
84
+ [N in RequiredFieldNames<C>]: ValueOfField<C, N>;
85
+ } & {
86
+ [N in OptionalFieldNames<C>]?: ValueOfField<C, N>;
87
+ };
88
+ /**
89
+ * A runtime descriptor of a field's inferred type — useful for codegen and
90
+ * tooling that can't consume the type-level `InferDocument` (EC-016).
91
+ */
92
+ export interface InferredFieldType {
93
+ name: string;
94
+ /** TS type expression, e.g. `string`, `DocumentRef[]`, `'a' | 'b'`. */
95
+ tsType: string;
96
+ optional: boolean;
97
+ localized: boolean;
98
+ }
99
+ /** Produce a runtime descriptor of a field's inferred TS type. */
100
+ export declare function inferredFieldType(field: FieldDef): InferredFieldType;
101
+ /** Runtime descriptors for every field in a collection (EC-016). */
102
+ export declare function inferCollectionTypes(collection: CollectionDef): InferredFieldType[];
103
+ export {};
@@ -0,0 +1,57 @@
1
+ function selectUnion(field) {
2
+ const union = field.options.map((o) => JSON.stringify(o.value)).join(' | ');
3
+ return field.multiple ? `(${union})[]` : union;
4
+ }
5
+ /** Produce a runtime descriptor of a field's inferred TS type. */
6
+ export function inferredFieldType(field) {
7
+ const optional = field.validation?.required !== true;
8
+ const localized = field.localized === true;
9
+ const base = () => {
10
+ switch (field.type) {
11
+ case 'text':
12
+ case 'richText':
13
+ return 'string';
14
+ case 'number':
15
+ return 'number';
16
+ case 'boolean':
17
+ return 'boolean';
18
+ case 'date':
19
+ return 'string | number';
20
+ case 'select':
21
+ return selectUnion(field);
22
+ case 'relation':
23
+ return field.cardinality === 'many' ? 'DocumentRef[]' : 'DocumentRef';
24
+ case 'asset':
25
+ return field.cardinality === 'many' ? 'string[]' : 'string';
26
+ case 'blocks':
27
+ // Composition value (EC-186): an opaque tree to delivery consumers — the
28
+ // host renders it through the canvas engine. EC-187/188 refine this to
29
+ // the composition value type once compositions live in documents.
30
+ return field.cardinality === 'many' ? 'unknown[]' : 'unknown';
31
+ case 'object': {
32
+ // EC-253: a precise nested object type expression (the repeater's item
33
+ // shape), `Array<...>` for `many`. Recurses for nested objects.
34
+ const shape = field.fields
35
+ .map((sub) => {
36
+ const st = inferredFieldType(sub);
37
+ return `${sub.name}${st.optional ? '?' : ''}: ${st.tsType}`;
38
+ })
39
+ .join('; ');
40
+ const objectType = field.fields.length > 0 ? `{ ${shape} }` : 'Record<string, unknown>';
41
+ return field.cardinality === 'many' ? `Array<${objectType}>` : objectType;
42
+ }
43
+ default: {
44
+ // Exhaustiveness: a new field type must add a case above (EC-253).
45
+ const _exhaustive = field;
46
+ void _exhaustive;
47
+ return 'unknown';
48
+ }
49
+ }
50
+ };
51
+ return { name: field.name, tsType: base(), optional, localized };
52
+ }
53
+ /** Runtime descriptors for every field in a collection (EC-016). */
54
+ export function inferCollectionTypes(collection) {
55
+ return collection.fields.map(inferredFieldType);
56
+ }
57
+ //# sourceMappingURL=infer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/cms-core/infer.ts"],"names":[],"mappings":"AA0GA,SAAS,WAAW,CAAC,KAA4C;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3E,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAChD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAA;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAA;IAC1C,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAA;YACjB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAA;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAA;YAClB,KAAK,MAAM;gBACT,OAAO,iBAAiB,CAAA;YAC1B,KAAK,QAAQ;gBACX,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;YAC3B,KAAK,UAAU;gBACb,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAA;YACvE,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC7D,KAAK,QAAQ;gBACX,yEAAyE;gBACzE,uEAAuE;gBACvE,kEAAkE;gBAClE,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;YAC/D,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uEAAuE;gBACvE,gEAAgE;gBAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;qBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;oBACjC,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,CAAA;gBAC7D,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAA;gBACvF,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAA;YAC3E,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,mEAAmE;gBACnE,MAAM,WAAW,GAAU,KAAK,CAAA;gBAChC,KAAK,WAAW,CAAA;gBAChB,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;AAClE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,UAAyB;IAC5D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Stable codes for structured CMS validation issues (brief §4.11, §7.4).
4
+ *
5
+ * We mirror the conventions of `@elytracms/core/project-graph`'s `ValidationIssue`
6
+ * (a structured object with `code`/`severity`/`message`/`path`, never a thrown
7
+ * error) so callers can treat graph and CMS issues uniformly. The code set here
8
+ * is CMS-specific; the shape is shared.
9
+ */
10
+ export declare const cmsIssueCodeSchema: z.ZodEnum<{
11
+ "route-conflict": "route-conflict";
12
+ "duplicate-collection": "duplicate-collection";
13
+ "duplicate-field": "duplicate-field";
14
+ "unknown-collection": "unknown-collection";
15
+ "invalid-collection-config": "invalid-collection-config";
16
+ "invalid-field-config": "invalid-field-config";
17
+ "reserved-field-name": "reserved-field-name";
18
+ "missing-required-field": "missing-required-field";
19
+ "invalid-field-value": "invalid-field-value";
20
+ "unknown-relation-target": "unknown-relation-target";
21
+ "unpublished-relation-target": "unpublished-relation-target";
22
+ "cardinality-violation": "cardinality-violation";
23
+ "unknown-asset": "unknown-asset";
24
+ "duplicate-document": "duplicate-document";
25
+ "unknown-locale": "unknown-locale";
26
+ "missing-localized-value": "missing-localized-value";
27
+ "redirect-loop": "redirect-loop";
28
+ "unknown-route-target": "unknown-route-target";
29
+ "hierarchy-cycle": "hierarchy-cycle";
30
+ "unknown-version": "unknown-version";
31
+ }>;
32
+ export type CmsIssueCode = z.infer<typeof cmsIssueCodeSchema>;
33
+ export declare const cmsIssueSeveritySchema: z.ZodEnum<{
34
+ error: "error";
35
+ warning: "warning";
36
+ }>;
37
+ export type CmsIssueSeverity = z.infer<typeof cmsIssueSeveritySchema>;
38
+ /** A JSON-serializable scalar carried in issue metadata. */
39
+ export type CmsIssueMetaValue = string | number | boolean | null | readonly (string | number)[];
40
+ /**
41
+ * A structured CMS validation issue. Same conventions as
42
+ * `@elytracms/core/project-graph`'s `ValidationIssue`: a path locating the offending
43
+ * data, optional document/collection identity, and free-form metadata.
44
+ */
45
+ export declare const cmsValidationIssueSchema: z.ZodObject<{
46
+ code: z.ZodEnum<{
47
+ "route-conflict": "route-conflict";
48
+ "duplicate-collection": "duplicate-collection";
49
+ "duplicate-field": "duplicate-field";
50
+ "unknown-collection": "unknown-collection";
51
+ "invalid-collection-config": "invalid-collection-config";
52
+ "invalid-field-config": "invalid-field-config";
53
+ "reserved-field-name": "reserved-field-name";
54
+ "missing-required-field": "missing-required-field";
55
+ "invalid-field-value": "invalid-field-value";
56
+ "unknown-relation-target": "unknown-relation-target";
57
+ "unpublished-relation-target": "unpublished-relation-target";
58
+ "cardinality-violation": "cardinality-violation";
59
+ "unknown-asset": "unknown-asset";
60
+ "duplicate-document": "duplicate-document";
61
+ "unknown-locale": "unknown-locale";
62
+ "missing-localized-value": "missing-localized-value";
63
+ "redirect-loop": "redirect-loop";
64
+ "unknown-route-target": "unknown-route-target";
65
+ "hierarchy-cycle": "hierarchy-cycle";
66
+ "unknown-version": "unknown-version";
67
+ }>;
68
+ severity: z.ZodEnum<{
69
+ error: "error";
70
+ warning: "warning";
71
+ }>;
72
+ message: z.ZodString;
73
+ path: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
74
+ collectionId: z.ZodOptional<z.ZodString>;
75
+ documentId: z.ZodOptional<z.ZodString>;
76
+ meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
77
+ }, z.core.$strip>;
78
+ export type CmsValidationIssue = z.infer<typeof cmsValidationIssueSchema>;
79
+ export type CmsPath = ReadonlyArray<string | number>;
80
+ export interface CmsIssueInit {
81
+ code: CmsIssueCode;
82
+ severity?: CmsIssueSeverity;
83
+ message: string;
84
+ path: CmsPath;
85
+ collectionId?: string;
86
+ documentId?: string;
87
+ meta?: Record<string, unknown>;
88
+ }
89
+ /** Construct a structured CMS issue. `severity` defaults to `error`. */
90
+ export declare function cmsIssue(init: CmsIssueInit): CmsValidationIssue;
91
+ /** True if a set of CMS issues contains no error-severity entries. */
92
+ export declare function isCmsValid(issues: readonly CmsValidationIssue[]): boolean;
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Stable codes for structured CMS validation issues (brief §4.11, §7.4).
4
+ *
5
+ * We mirror the conventions of `@elytracms/core/project-graph`'s `ValidationIssue`
6
+ * (a structured object with `code`/`severity`/`message`/`path`, never a thrown
7
+ * error) so callers can treat graph and CMS issues uniformly. The code set here
8
+ * is CMS-specific; the shape is shared.
9
+ */
10
+ export const cmsIssueCodeSchema = z.enum([
11
+ // collections & fields (EC-016)
12
+ 'duplicate-collection',
13
+ 'duplicate-field',
14
+ 'unknown-collection',
15
+ 'invalid-collection-config',
16
+ 'invalid-field-config',
17
+ // self-describing data (EC-277): a field name collides with a reserved node key
18
+ 'reserved-field-name',
19
+ 'missing-required-field',
20
+ 'invalid-field-value',
21
+ // relations & assets (EC-017)
22
+ 'unknown-relation-target',
23
+ // broken published references after a weak unpublish (EC-173)
24
+ 'unpublished-relation-target',
25
+ 'cardinality-violation',
26
+ 'unknown-asset',
27
+ 'duplicate-document',
28
+ // localization (EC-018)
29
+ 'unknown-locale',
30
+ 'missing-localized-value',
31
+ // routes / redirects / resolution (EC-019, EC-020)
32
+ 'route-conflict',
33
+ 'redirect-loop',
34
+ 'unknown-route-target',
35
+ // page hierarchy (EC-218): a parent chain that loops
36
+ 'hierarchy-cycle',
37
+ // versions (EC-021)
38
+ 'unknown-version',
39
+ ]);
40
+ export const cmsIssueSeveritySchema = z.enum(['error', 'warning']);
41
+ /**
42
+ * A structured CMS validation issue. Same conventions as
43
+ * `@elytracms/core/project-graph`'s `ValidationIssue`: a path locating the offending
44
+ * data, optional document/collection identity, and free-form metadata.
45
+ */
46
+ export const cmsValidationIssueSchema = z.object({
47
+ code: cmsIssueCodeSchema,
48
+ severity: cmsIssueSeveritySchema,
49
+ message: z.string(),
50
+ /** Path into the CMS data, e.g. ['collections', 'post', 'fields', 'author']. */
51
+ path: z.array(z.union([z.string(), z.number()])),
52
+ /** The offending collection id, when applicable. */
53
+ collectionId: z.string().optional(),
54
+ /** The offending document id, when applicable. */
55
+ documentId: z.string().optional(),
56
+ meta: z.record(z.string(), z.unknown()).optional(),
57
+ });
58
+ /** Construct a structured CMS issue. `severity` defaults to `error`. */
59
+ export function cmsIssue(init) {
60
+ return {
61
+ code: init.code,
62
+ severity: init.severity ?? 'error',
63
+ message: init.message,
64
+ path: [...init.path],
65
+ ...(init.collectionId ? { collectionId: init.collectionId } : {}),
66
+ ...(init.documentId ? { documentId: init.documentId } : {}),
67
+ ...(init.meta ? { meta: init.meta } : {}),
68
+ };
69
+ }
70
+ /** True if a set of CMS issues contains no error-severity entries. */
71
+ export function isCmsValid(issues) {
72
+ return !issues.some((i) => i.severity === 'error');
73
+ }
74
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/cms-core/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,gCAAgC;IAChC,sBAAsB;IACtB,iBAAiB;IACjB,oBAAoB;IACpB,2BAA2B;IAC3B,sBAAsB;IACtB,gFAAgF;IAChF,qBAAqB;IACrB,wBAAwB;IACxB,qBAAqB;IACrB,8BAA8B;IAC9B,yBAAyB;IACzB,8DAA8D;IAC9D,6BAA6B;IAC7B,uBAAuB;IACvB,eAAe;IACf,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;IAChB,yBAAyB;IACzB,mDAAmD;IACnD,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,qDAAqD;IACrD,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;CAClB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAMlE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,gFAAgF;IAChF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,oDAAoD;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,kDAAkD;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAA;AAeF,wEAAwE;AACxE,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,MAAqC;IAC9D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;AACpD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { JsonValue } from '@elytracms/core/project-graph';
2
+ import type { CollectionDef } from './collections';
3
+ /**
4
+ * A JSON Schema document (draft 2020-12 subset) represented with the canonical
5
+ * `JsonValue` type from `@elytracms/core/project-graph` so it stays serialization-safe.
6
+ */
7
+ export type JsonSchema = {
8
+ [key: string]: JsonValue;
9
+ };
10
+ export interface JsonSchemaOptions {
11
+ /**
12
+ * For localized fields, emit `{ [locale]: <value-schema> }` objects when a
13
+ * locale set is supplied; otherwise localized fields are emitted as their bare
14
+ * value schema (the document's default-locale value).
15
+ */
16
+ locales?: readonly string[];
17
+ /** $id for the schema; defaults to a urn derived from the collection id. */
18
+ $id?: string;
19
+ }
20
+ /**
21
+ * Produce a JSON Schema for a collection's document shape (EC-016). Required
22
+ * fields populate `required`; declared validation metadata maps to standard
23
+ * JSON Schema keywords. Localized fields can be wrapped in a per-locale object.
24
+ */
25
+ export declare function collectionJsonSchema(collection: CollectionDef, options?: JsonSchemaOptions): JsonSchema;