@elytracms/core 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/LICENSE +21 -0
  2. package/dist/clipboard/build.d.ts +77 -0
  3. package/dist/clipboard/build.js +128 -0
  4. package/dist/clipboard/build.js.map +1 -0
  5. package/dist/clipboard/clipboard.d.ts +33 -0
  6. package/dist/clipboard/clipboard.js +45 -0
  7. package/dist/clipboard/clipboard.js.map +1 -0
  8. package/dist/clipboard/fragment.d.ts +112 -0
  9. package/dist/clipboard/fragment.js +79 -0
  10. package/dist/clipboard/fragment.js.map +1 -0
  11. package/dist/clipboard/html.d.ts +26 -0
  12. package/dist/clipboard/html.js +82 -0
  13. package/dist/clipboard/html.js.map +1 -0
  14. package/dist/clipboard/index.d.ts +15 -0
  15. package/dist/clipboard/index.js +16 -0
  16. package/dist/clipboard/index.js.map +1 -0
  17. package/dist/clipboard/references.d.ts +50 -0
  18. package/dist/clipboard/references.js +0 -0
  19. package/dist/clipboard/references.js.map +1 -0
  20. package/dist/clipboard/serialize.d.ts +69 -0
  21. package/dist/clipboard/serialize.js +130 -0
  22. package/dist/clipboard/serialize.js.map +1 -0
  23. package/dist/cms-core/collections.d.ts +82 -0
  24. package/dist/cms-core/collections.js +187 -0
  25. package/dist/cms-core/collections.js.map +1 -0
  26. package/dist/cms-core/documents.d.ts +71 -0
  27. package/dist/cms-core/documents.js +67 -0
  28. package/dist/cms-core/documents.js.map +1 -0
  29. package/dist/cms-core/envelopes.d.ts +80 -0
  30. package/dist/cms-core/envelopes.js +124 -0
  31. package/dist/cms-core/envelopes.js.map +1 -0
  32. package/dist/cms-core/fields.d.ts +220 -0
  33. package/dist/cms-core/fields.js +250 -0
  34. package/dist/cms-core/fields.js.map +1 -0
  35. package/dist/cms-core/fixtures.d.ts +92 -0
  36. package/dist/cms-core/fixtures.js +357 -0
  37. package/dist/cms-core/fixtures.js.map +1 -0
  38. package/dist/cms-core/hierarchy.d.ts +113 -0
  39. package/dist/cms-core/hierarchy.js +223 -0
  40. package/dist/cms-core/hierarchy.js.map +1 -0
  41. package/dist/cms-core/index.d.ts +25 -0
  42. package/dist/cms-core/index.js +26 -0
  43. package/dist/cms-core/index.js.map +1 -0
  44. package/dist/cms-core/infer.d.ts +103 -0
  45. package/dist/cms-core/infer.js +57 -0
  46. package/dist/cms-core/infer.js.map +1 -0
  47. package/dist/cms-core/issues.d.ts +92 -0
  48. package/dist/cms-core/issues.js +74 -0
  49. package/dist/cms-core/issues.js.map +1 -0
  50. package/dist/cms-core/json-schema.d.ts +25 -0
  51. package/dist/cms-core/json-schema.js +110 -0
  52. package/dist/cms-core/json-schema.js.map +1 -0
  53. package/dist/cms-core/localization.d.ts +51 -0
  54. package/dist/cms-core/localization.js +89 -0
  55. package/dist/cms-core/localization.js.map +1 -0
  56. package/dist/cms-core/routes.d.ts +76 -0
  57. package/dist/cms-core/routes.js +220 -0
  58. package/dist/cms-core/routes.js.map +1 -0
  59. package/dist/cms-core/self-type.d.ts +41 -0
  60. package/dist/cms-core/self-type.js +191 -0
  61. package/dist/cms-core/self-type.js.map +1 -0
  62. package/dist/cms-core/url-for-document.d.ts +39 -0
  63. package/dist/cms-core/url-for-document.js +138 -0
  64. package/dist/cms-core/url-for-document.js.map +1 -0
  65. package/dist/cms-core/validate-document.d.ts +121 -0
  66. package/dist/cms-core/validate-document.js +871 -0
  67. package/dist/cms-core/validate-document.js.map +1 -0
  68. package/dist/cms-core/versions.d.ts +75 -0
  69. package/dist/cms-core/versions.js +97 -0
  70. package/dist/cms-core/versions.js.map +1 -0
  71. package/dist/collaboration/approval.d.ts +68 -0
  72. package/dist/collaboration/approval.js +104 -0
  73. package/dist/collaboration/approval.js.map +1 -0
  74. package/dist/collaboration/collaboration.d.ts +49 -0
  75. package/dist/collaboration/collaboration.js +56 -0
  76. package/dist/collaboration/collaboration.js.map +1 -0
  77. package/dist/collaboration/comments.d.ts +72 -0
  78. package/dist/collaboration/comments.js +118 -0
  79. package/dist/collaboration/comments.js.map +1 -0
  80. package/dist/collaboration/core.d.ts +25 -0
  81. package/dist/collaboration/core.js +26 -0
  82. package/dist/collaboration/core.js.map +1 -0
  83. package/dist/collaboration/index.d.ts +14 -0
  84. package/dist/collaboration/index.js +15 -0
  85. package/dist/collaboration/index.js.map +1 -0
  86. package/dist/collaboration/presence.d.ts +62 -0
  87. package/dist/collaboration/presence.js +85 -0
  88. package/dist/collaboration/presence.js.map +1 -0
  89. package/dist/collaboration/publishing.d.ts +60 -0
  90. package/dist/collaboration/publishing.js +93 -0
  91. package/dist/collaboration/publishing.js.map +1 -0
  92. package/dist/collaboration/versions.d.ts +52 -0
  93. package/dist/collaboration/versions.js +81 -0
  94. package/dist/collaboration/versions.js.map +1 -0
  95. package/dist/component-registry/index.d.ts +3 -0
  96. package/dist/component-registry/index.js +4 -0
  97. package/dist/component-registry/index.js.map +1 -0
  98. package/dist/component-registry/issues.d.ts +6 -0
  99. package/dist/component-registry/issues.js +2 -0
  100. package/dist/component-registry/issues.js.map +1 -0
  101. package/dist/component-registry/manifest.d.ts +164 -0
  102. package/dist/component-registry/manifest.js +129 -0
  103. package/dist/component-registry/manifest.js.map +1 -0
  104. package/dist/component-registry/registry.d.ts +33 -0
  105. package/dist/component-registry/registry.js +90 -0
  106. package/dist/component-registry/registry.js.map +1 -0
  107. package/dist/content/__fixtures__/filterable-collections.d.ts +14 -0
  108. package/dist/content/__fixtures__/filterable-collections.js +15 -0
  109. package/dist/content/__fixtures__/filterable-collections.js.map +1 -0
  110. package/dist/content/__fixtures__/sample-accessor-types.d.ts +56 -0
  111. package/dist/content/__fixtures__/sample-accessor-types.js +5 -0
  112. package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -0
  113. package/dist/content/__fixtures__/sample-delivery-types.d.ts +122 -0
  114. package/dist/content/__fixtures__/sample-delivery-types.js +5 -0
  115. package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -0
  116. package/dist/content/assets.d.ts +53 -0
  117. package/dist/content/assets.js +38 -0
  118. package/dist/content/assets.js.map +1 -0
  119. package/dist/content/binding-sources.d.ts +53 -0
  120. package/dist/content/binding-sources.js +73 -0
  121. package/dist/content/binding-sources.js.map +1 -0
  122. package/dist/content/client.d.ts +90 -0
  123. package/dist/content/client.js +383 -0
  124. package/dist/content/client.js.map +1 -0
  125. package/dist/content/codegen.d.ts +54 -0
  126. package/dist/content/codegen.js +305 -0
  127. package/dist/content/codegen.js.map +1 -0
  128. package/dist/content/context.d.ts +38 -0
  129. package/dist/content/context.js +21 -0
  130. package/dist/content/context.js.map +1 -0
  131. package/dist/content/cursor.d.ts +33 -0
  132. package/dist/content/cursor.js +104 -0
  133. package/dist/content/cursor.js.map +1 -0
  134. package/dist/content/index.d.ts +28 -0
  135. package/dist/content/index.js +29 -0
  136. package/dist/content/index.js.map +1 -0
  137. package/dist/content/locale.d.ts +30 -0
  138. package/dist/content/locale.js +26 -0
  139. package/dist/content/locale.js.map +1 -0
  140. package/dist/content/perspective.d.ts +29 -0
  141. package/dist/content/perspective.js +31 -0
  142. package/dist/content/perspective.js.map +1 -0
  143. package/dist/content/populate.d.ts +25 -0
  144. package/dist/content/populate.js +22 -0
  145. package/dist/content/populate.js.map +1 -0
  146. package/dist/content/query.d.ts +122 -0
  147. package/dist/content/query.js +257 -0
  148. package/dist/content/query.js.map +1 -0
  149. package/dist/content/raw.d.ts +13 -0
  150. package/dist/content/raw.js +14 -0
  151. package/dist/content/raw.js.map +1 -0
  152. package/dist/content/resolve.d.ts +97 -0
  153. package/dist/content/resolve.js +261 -0
  154. package/dist/content/resolve.js.map +1 -0
  155. package/dist/content/serialize.d.ts +30 -0
  156. package/dist/content/serialize.js +57 -0
  157. package/dist/content/serialize.js.map +1 -0
  158. package/dist/content/tags.d.ts +54 -0
  159. package/dist/content/tags.js +40 -0
  160. package/dist/content/tags.js.map +1 -0
  161. package/dist/data-binding/fixtures.d.ts +20 -0
  162. package/dist/data-binding/fixtures.js +47 -0
  163. package/dist/data-binding/fixtures.js.map +1 -0
  164. package/dist/data-binding/index.d.ts +14 -0
  165. package/dist/data-binding/index.js +15 -0
  166. package/dist/data-binding/index.js.map +1 -0
  167. package/dist/data-binding/issues.d.ts +45 -0
  168. package/dist/data-binding/issues.js +46 -0
  169. package/dist/data-binding/issues.js.map +1 -0
  170. package/dist/data-binding/resolve.d.ts +87 -0
  171. package/dist/data-binding/resolve.js +204 -0
  172. package/dist/data-binding/resolve.js.map +1 -0
  173. package/dist/data-binding/sample.d.ts +21 -0
  174. package/dist/data-binding/sample.js +23 -0
  175. package/dist/data-binding/sample.js.map +1 -0
  176. package/dist/data-binding/sources.d.ts +225 -0
  177. package/dist/data-binding/sources.js +154 -0
  178. package/dist/data-binding/sources.js.map +1 -0
  179. package/dist/data-binding/tokens.d.ts +62 -0
  180. package/dist/data-binding/tokens.js +150 -0
  181. package/dist/data-binding/tokens.js.map +1 -0
  182. package/dist/design-tokens/css.d.ts +34 -0
  183. package/dist/design-tokens/css.js +51 -0
  184. package/dist/design-tokens/css.js.map +1 -0
  185. package/dist/design-tokens/index.d.ts +10 -0
  186. package/dist/design-tokens/index.js +11 -0
  187. package/dist/design-tokens/index.js.map +1 -0
  188. package/dist/design-tokens/style-guide.d.ts +30 -0
  189. package/dist/design-tokens/style-guide.js +31 -0
  190. package/dist/design-tokens/style-guide.js.map +1 -0
  191. package/dist/design-tokens/tokens.d.ts +89 -0
  192. package/dist/design-tokens/tokens.js +112 -0
  193. package/dist/design-tokens/tokens.js.map +1 -0
  194. package/dist/export-sync/builder-source.d.ts +85 -0
  195. package/dist/export-sync/builder-source.js +124 -0
  196. package/dist/export-sync/builder-source.js.map +1 -0
  197. package/dist/export-sync/check.d.ts +61 -0
  198. package/dist/export-sync/check.js +126 -0
  199. package/dist/export-sync/check.js.map +1 -0
  200. package/dist/export-sync/cli.d.ts +89 -0
  201. package/dist/export-sync/cli.js +323 -0
  202. package/dist/export-sync/cli.js.map +1 -0
  203. package/dist/export-sync/core.d.ts +58 -0
  204. package/dist/export-sync/core.js +41 -0
  205. package/dist/export-sync/core.js.map +1 -0
  206. package/dist/export-sync/eject.d.ts +28 -0
  207. package/dist/export-sync/eject.js +21 -0
  208. package/dist/export-sync/eject.js.map +1 -0
  209. package/dist/export-sync/fixtures.d.ts +25 -0
  210. package/dist/export-sync/fixtures.js +87 -0
  211. package/dist/export-sync/fixtures.js.map +1 -0
  212. package/dist/export-sync/generate.d.ts +7 -0
  213. package/dist/export-sync/generate.js +505 -0
  214. package/dist/export-sync/generate.js.map +1 -0
  215. package/dist/export-sync/index.d.ts +37 -0
  216. package/dist/export-sync/index.js +39 -0
  217. package/dist/export-sync/index.js.map +1 -0
  218. package/dist/export-sync/init.d.ts +123 -0
  219. package/dist/export-sync/init.js +234 -0
  220. package/dist/export-sync/init.js.map +1 -0
  221. package/dist/export-sync/manifest-host.d.ts +48 -0
  222. package/dist/export-sync/manifest-host.js +73 -0
  223. package/dist/export-sync/manifest-host.js.map +1 -0
  224. package/dist/export-sync/node.d.ts +20 -0
  225. package/dist/export-sync/node.js +101 -0
  226. package/dist/export-sync/node.js.map +1 -0
  227. package/dist/export-sync/push.d.ts +76 -0
  228. package/dist/export-sync/push.js +197 -0
  229. package/dist/export-sync/push.js.map +1 -0
  230. package/dist/export-sync/registry-sync-client.d.ts +59 -0
  231. package/dist/export-sync/registry-sync-client.js +97 -0
  232. package/dist/export-sync/registry-sync-client.js.map +1 -0
  233. package/dist/export-sync/sync.d.ts +47 -0
  234. package/dist/export-sync/sync.js +47 -0
  235. package/dist/export-sync/sync.js.map +1 -0
  236. package/dist/export-sync/typegen.d.ts +40 -0
  237. package/dist/export-sync/typegen.js +45 -0
  238. package/dist/export-sync/typegen.js.map +1 -0
  239. package/dist/export-sync/validate.d.ts +19 -0
  240. package/dist/export-sync/validate.js +102 -0
  241. package/dist/export-sync/validate.js.map +1 -0
  242. package/dist/export-sync/watch.d.ts +66 -0
  243. package/dist/export-sync/watch.js +70 -0
  244. package/dist/export-sync/watch.js.map +1 -0
  245. package/dist/operations/assets.d.ts +198 -0
  246. package/dist/operations/assets.js +75 -0
  247. package/dist/operations/assets.js.map +1 -0
  248. package/dist/operations/authorization.d.ts +49 -0
  249. package/dist/operations/authorization.js +128 -0
  250. package/dist/operations/authorization.js.map +1 -0
  251. package/dist/operations/changesets.d.ts +160 -0
  252. package/dist/operations/changesets.js +442 -0
  253. package/dist/operations/changesets.js.map +1 -0
  254. package/dist/operations/client.d.ts +49 -0
  255. package/dist/operations/client.js +57 -0
  256. package/dist/operations/client.js.map +1 -0
  257. package/dist/operations/core.d.ts +238 -0
  258. package/dist/operations/core.js +269 -0
  259. package/dist/operations/core.js.map +1 -0
  260. package/dist/operations/documents.d.ts +432 -0
  261. package/dist/operations/documents.js +344 -0
  262. package/dist/operations/documents.js.map +1 -0
  263. package/dist/operations/graph.d.ts +138 -0
  264. package/dist/operations/graph.js +78 -0
  265. package/dist/operations/graph.js.map +1 -0
  266. package/dist/operations/index.d.ts +19 -0
  267. package/dist/operations/index.js +20 -0
  268. package/dist/operations/index.js.map +1 -0
  269. package/dist/operations/members.d.ts +87 -0
  270. package/dist/operations/members.js +56 -0
  271. package/dist/operations/members.js.map +1 -0
  272. package/dist/operations/publishing.d.ts +89 -0
  273. package/dist/operations/publishing.js +57 -0
  274. package/dist/operations/publishing.js.map +1 -0
  275. package/dist/operations/references.d.ts +222 -0
  276. package/dist/operations/references.js +177 -0
  277. package/dist/operations/references.js.map +1 -0
  278. package/dist/operations/schema.d.ts +413 -0
  279. package/dist/operations/schema.js +138 -0
  280. package/dist/operations/schema.js.map +1 -0
  281. package/dist/operations/tokens.d.ts +79 -0
  282. package/dist/operations/tokens.js +102 -0
  283. package/dist/operations/tokens.js.map +1 -0
  284. package/dist/persistence/adapter.d.ts +79 -0
  285. package/dist/persistence/adapter.js +55 -0
  286. package/dist/persistence/adapter.js.map +1 -0
  287. package/dist/persistence/assets.d.ts +120 -0
  288. package/dist/persistence/assets.js +141 -0
  289. package/dist/persistence/assets.js.map +1 -0
  290. package/dist/persistence/backend-validation.d.ts +43 -0
  291. package/dist/persistence/backend-validation.js +57 -0
  292. package/dist/persistence/backend-validation.js.map +1 -0
  293. package/dist/persistence/cli-tokens.d.ts +50 -0
  294. package/dist/persistence/cli-tokens.js +66 -0
  295. package/dist/persistence/cli-tokens.js.map +1 -0
  296. package/dist/persistence/cms.d.ts +148 -0
  297. package/dist/persistence/cms.js +232 -0
  298. package/dist/persistence/cms.js.map +1 -0
  299. package/dist/persistence/contract-scenarios.d.ts +73 -0
  300. package/dist/persistence/contract-scenarios.js +496 -0
  301. package/dist/persistence/contract-scenarios.js.map +1 -0
  302. package/dist/persistence/core.d.ts +96 -0
  303. package/dist/persistence/core.js +110 -0
  304. package/dist/persistence/core.js.map +1 -0
  305. package/dist/persistence/graph.d.ts +61 -0
  306. package/dist/persistence/graph.js +98 -0
  307. package/dist/persistence/graph.js.map +1 -0
  308. package/dist/persistence/index.d.ts +22 -0
  309. package/dist/persistence/index.js +23 -0
  310. package/dist/persistence/index.js.map +1 -0
  311. package/dist/persistence/members.d.ts +70 -0
  312. package/dist/persistence/members.js +0 -0
  313. package/dist/persistence/members.js.map +1 -0
  314. package/dist/persistence/publishing.d.ts +59 -0
  315. package/dist/persistence/publishing.js +95 -0
  316. package/dist/persistence/publishing.js.map +1 -0
  317. package/dist/persistence/reference-extraction.d.ts +44 -0
  318. package/dist/persistence/reference-extraction.js +204 -0
  319. package/dist/persistence/reference-extraction.js.map +1 -0
  320. package/dist/persistence/reference-indexing.d.ts +68 -0
  321. package/dist/persistence/reference-indexing.js +112 -0
  322. package/dist/persistence/reference-indexing.js.map +1 -0
  323. package/dist/persistence/references.d.ts +257 -0
  324. package/dist/persistence/references.js +0 -0
  325. package/dist/persistence/references.js.map +1 -0
  326. package/dist/persistence/seed.d.ts +55 -0
  327. package/dist/persistence/seed.js +102 -0
  328. package/dist/persistence/seed.js.map +1 -0
  329. package/dist/persistence/self-maintaining-adapter.d.ts +41 -0
  330. package/dist/persistence/self-maintaining-adapter.js +79 -0
  331. package/dist/persistence/self-maintaining-adapter.js.map +1 -0
  332. package/dist/plugins/asset-storage.d.ts +76 -0
  333. package/dist/plugins/asset-storage.js +104 -0
  334. package/dist/plugins/asset-storage.js.map +1 -0
  335. package/dist/plugins/component-package.d.ts +54 -0
  336. package/dist/plugins/component-package.js +92 -0
  337. package/dist/plugins/component-package.js.map +1 -0
  338. package/dist/plugins/data-sources.d.ts +78 -0
  339. package/dist/plugins/data-sources.js +99 -0
  340. package/dist/plugins/data-sources.js.map +1 -0
  341. package/dist/plugins/examples.d.ts +47 -0
  342. package/dist/plugins/examples.js +205 -0
  343. package/dist/plugins/examples.js.map +1 -0
  344. package/dist/plugins/export-targets.d.ts +47 -0
  345. package/dist/plugins/export-targets.js +78 -0
  346. package/dist/plugins/export-targets.js.map +1 -0
  347. package/dist/plugins/field-types.d.ts +86 -0
  348. package/dist/plugins/field-types.js +93 -0
  349. package/dist/plugins/field-types.js.map +1 -0
  350. package/dist/plugins/hooks.d.ts +60 -0
  351. package/dist/plugins/hooks.js +94 -0
  352. package/dist/plugins/hooks.js.map +1 -0
  353. package/dist/plugins/index.d.ts +27 -0
  354. package/dist/plugins/index.js +28 -0
  355. package/dist/plugins/index.js.map +1 -0
  356. package/dist/plugins/marketplace.d.ts +90 -0
  357. package/dist/plugins/marketplace.js +110 -0
  358. package/dist/plugins/marketplace.js.map +1 -0
  359. package/dist/plugins/plugin.d.ts +107 -0
  360. package/dist/plugins/plugin.js +122 -0
  361. package/dist/plugins/plugin.js.map +1 -0
  362. package/dist/plugins/templates.d.ts +66 -0
  363. package/dist/plugins/templates.js +74 -0
  364. package/dist/plugins/templates.js.map +1 -0
  365. package/dist/project-graph/binding.d.ts +68 -0
  366. package/dist/project-graph/binding.js +39 -0
  367. package/dist/project-graph/binding.js.map +1 -0
  368. package/dist/project-graph/container.d.ts +126 -0
  369. package/dist/project-graph/container.js +221 -0
  370. package/dist/project-graph/container.js.map +1 -0
  371. package/dist/project-graph/edit.d.ts +66 -0
  372. package/dist/project-graph/edit.js +201 -0
  373. package/dist/project-graph/edit.js.map +1 -0
  374. package/dist/project-graph/fixtures.d.ts +51 -0
  375. package/dist/project-graph/fixtures.js +224 -0
  376. package/dist/project-graph/fixtures.js.map +1 -0
  377. package/dist/project-graph/ids.d.ts +17 -0
  378. package/dist/project-graph/ids.js +19 -0
  379. package/dist/project-graph/ids.js.map +1 -0
  380. package/dist/project-graph/index.d.ts +12 -0
  381. package/dist/project-graph/index.js +13 -0
  382. package/dist/project-graph/index.js.map +1 -0
  383. package/dist/project-graph/issues.d.ts +61 -0
  384. package/dist/project-graph/issues.js +44 -0
  385. package/dist/project-graph/issues.js.map +1 -0
  386. package/dist/project-graph/json.d.ts +6 -0
  387. package/dist/project-graph/json.js +10 -0
  388. package/dist/project-graph/json.js.map +1 -0
  389. package/dist/project-graph/node.d.ts +48 -0
  390. package/dist/project-graph/node.js +42 -0
  391. package/dist/project-graph/node.js.map +1 -0
  392. package/dist/project-graph/normalize.d.ts +17 -0
  393. package/dist/project-graph/normalize.js +110 -0
  394. package/dist/project-graph/normalize.js.map +1 -0
  395. package/dist/project-graph/serialize.d.ts +36 -0
  396. package/dist/project-graph/serialize.js +51 -0
  397. package/dist/project-graph/serialize.js.map +1 -0
  398. package/dist/project-graph/structure.d.ts +40 -0
  399. package/dist/project-graph/structure.js +36 -0
  400. package/dist/project-graph/structure.js.map +1 -0
  401. package/dist/project-graph/validate.d.ts +84 -0
  402. package/dist/project-graph/validate.js +158 -0
  403. package/dist/project-graph/validate.js.map +1 -0
  404. package/dist/rich-text/adapter.d.ts +43 -0
  405. package/dist/rich-text/adapter.js +24 -0
  406. package/dist/rich-text/adapter.js.map +1 -0
  407. package/dist/rich-text/dom-editor.d.ts +101 -0
  408. package/dist/rich-text/dom-editor.js +482 -0
  409. package/dist/rich-text/dom-editor.js.map +1 -0
  410. package/dist/rich-text/embed.d.ts +70 -0
  411. package/dist/rich-text/embed.js +70 -0
  412. package/dist/rich-text/embed.js.map +1 -0
  413. package/dist/rich-text/fixtures.d.ts +25 -0
  414. package/dist/rich-text/fixtures.js +115 -0
  415. package/dist/rich-text/fixtures.js.map +1 -0
  416. package/dist/rich-text/html.d.ts +5 -0
  417. package/dist/rich-text/html.js +309 -0
  418. package/dist/rich-text/html.js.map +1 -0
  419. package/dist/rich-text/index.d.ts +19 -0
  420. package/dist/rich-text/index.js +20 -0
  421. package/dist/rich-text/index.js.map +1 -0
  422. package/dist/rich-text/markdown.d.ts +7 -0
  423. package/dist/rich-text/markdown.js +235 -0
  424. package/dist/rich-text/markdown.js.map +1 -0
  425. package/dist/rich-text/portable-text.d.ts +50 -0
  426. package/dist/rich-text/portable-text.js +223 -0
  427. package/dist/rich-text/portable-text.js.map +1 -0
  428. package/dist/rich-text/registry.d.ts +48 -0
  429. package/dist/rich-text/registry.js +16 -0
  430. package/dist/rich-text/registry.js.map +1 -0
  431. package/dist/rich-text/render.d.ts +69 -0
  432. package/dist/rich-text/render.js +205 -0
  433. package/dist/rich-text/render.js.map +1 -0
  434. package/dist/rich-text/schema.d.ts +86 -0
  435. package/dist/rich-text/schema.js +80 -0
  436. package/dist/rich-text/schema.js.map +1 -0
  437. package/dist/rich-text/test-support.d.ts +7 -0
  438. package/dist/rich-text/test-support.js +8 -0
  439. package/dist/rich-text/test-support.js.map +1 -0
  440. package/dist/runtime-renderer/client.d.ts +14 -0
  441. package/dist/runtime-renderer/client.js +15 -0
  442. package/dist/runtime-renderer/client.js.map +1 -0
  443. package/dist/runtime-renderer/condition.d.ts +8 -0
  444. package/dist/runtime-renderer/condition.js +48 -0
  445. package/dist/runtime-renderer/condition.js.map +1 -0
  446. package/dist/runtime-renderer/content-client.d.ts +62 -0
  447. package/dist/runtime-renderer/content-client.js +37 -0
  448. package/dist/runtime-renderer/content-client.js.map +1 -0
  449. package/dist/runtime-renderer/context.d.ts +185 -0
  450. package/dist/runtime-renderer/context.js +7 -0
  451. package/dist/runtime-renderer/context.js.map +1 -0
  452. package/dist/runtime-renderer/fallback.d.ts +39 -0
  453. package/dist/runtime-renderer/fallback.js +45 -0
  454. package/dist/runtime-renderer/fallback.js.map +1 -0
  455. package/dist/runtime-renderer/index.d.ts +13 -0
  456. package/dist/runtime-renderer/index.js +13 -0
  457. package/dist/runtime-renderer/index.js.map +1 -0
  458. package/dist/runtime-renderer/primitives.d.ts +85 -0
  459. package/dist/runtime-renderer/primitives.js +442 -0
  460. package/dist/runtime-renderer/primitives.js.map +1 -0
  461. package/dist/runtime-renderer/render.d.ts +138 -0
  462. package/dist/runtime-renderer/render.js +825 -0
  463. package/dist/runtime-renderer/render.js.map +1 -0
  464. package/dist/runtime-renderer/rich-text.d.ts +26 -0
  465. package/dist/runtime-renderer/rich-text.js +113 -0
  466. package/dist/runtime-renderer/rich-text.js.map +1 -0
  467. package/dist/starter-kits/index.d.ts +13 -0
  468. package/dist/starter-kits/index.js +14 -0
  469. package/dist/starter-kits/index.js.map +1 -0
  470. package/dist/starter-kits/instantiate.d.ts +29 -0
  471. package/dist/starter-kits/instantiate.js +24 -0
  472. package/dist/starter-kits/instantiate.js.map +1 -0
  473. package/dist/starter-kits/kit.d.ts +61 -0
  474. package/dist/starter-kits/kit.js +37 -0
  475. package/dist/starter-kits/kit.js.map +1 -0
  476. package/dist/starter-kits/kits.d.ts +7 -0
  477. package/dist/starter-kits/kits.js +201 -0
  478. package/dist/starter-kits/kits.js.map +1 -0
  479. package/dist/starter-kits/manifests.d.ts +7 -0
  480. package/dist/starter-kits/manifests.js +111 -0
  481. package/dist/starter-kits/manifests.js.map +1 -0
  482. package/dist/starter-kits/upgrade.d.ts +39 -0
  483. package/dist/starter-kits/upgrade.js +54 -0
  484. package/dist/starter-kits/upgrade.js.map +1 -0
  485. package/dist/starter-kits/validate.d.ts +16 -0
  486. package/dist/starter-kits/validate.js +77 -0
  487. package/dist/starter-kits/validate.js.map +1 -0
  488. package/dist/studio-core/context.d.ts +27 -0
  489. package/dist/studio-core/context.js +44 -0
  490. package/dist/studio-core/context.js.map +1 -0
  491. package/dist/studio-core/errors.d.ts +58 -0
  492. package/dist/studio-core/errors.js +74 -0
  493. package/dist/studio-core/errors.js.map +1 -0
  494. package/dist/studio-core/fixtures.d.ts +18 -0
  495. package/dist/studio-core/fixtures.js +83 -0
  496. package/dist/studio-core/fixtures.js.map +1 -0
  497. package/dist/studio-core/ids.d.ts +22 -0
  498. package/dist/studio-core/ids.js +33 -0
  499. package/dist/studio-core/ids.js.map +1 -0
  500. package/dist/studio-core/index.d.ts +11 -0
  501. package/dist/studio-core/index.js +12 -0
  502. package/dist/studio-core/index.js.map +1 -0
  503. package/dist/studio-core/issues.d.ts +50 -0
  504. package/dist/studio-core/issues.js +33 -0
  505. package/dist/studio-core/issues.js.map +1 -0
  506. package/dist/studio-core/metadata.d.ts +109 -0
  507. package/dist/studio-core/metadata.js +74 -0
  508. package/dist/studio-core/metadata.js.map +1 -0
  509. package/dist/studio-core/repository.d.ts +73 -0
  510. package/dist/studio-core/repository.js +202 -0
  511. package/dist/studio-core/repository.js.map +1 -0
  512. package/dist/studio-core/sections.d.ts +73 -0
  513. package/dist/studio-core/sections.js +68 -0
  514. package/dist/studio-core/sections.js.map +1 -0
  515. package/dist/studio-core/validate.d.ts +15 -0
  516. package/dist/studio-core/validate.js +119 -0
  517. package/dist/studio-core/validate.js.map +1 -0
  518. package/dist/studio-core/workspace-config.d.ts +587 -0
  519. package/dist/studio-core/workspace-config.js +434 -0
  520. package/dist/studio-core/workspace-config.js.map +1 -0
  521. package/package.json +104 -0
@@ -0,0 +1,110 @@
1
+ function fieldSchema(field) {
2
+ switch (field.type) {
3
+ case 'text':
4
+ case 'richText': {
5
+ const schema = { type: 'string' };
6
+ if (field.validation?.min !== undefined)
7
+ schema.minLength = field.validation.min;
8
+ if (field.validation?.max !== undefined)
9
+ schema.maxLength = field.validation.max;
10
+ if (field.validation?.pattern !== undefined)
11
+ schema.pattern = field.validation.pattern;
12
+ return schema;
13
+ }
14
+ case 'number': {
15
+ const schema = { type: 'number' };
16
+ if (field.validation?.min !== undefined)
17
+ schema.minimum = field.validation.min;
18
+ if (field.validation?.max !== undefined)
19
+ schema.maximum = field.validation.max;
20
+ return schema;
21
+ }
22
+ case 'boolean':
23
+ return { type: 'boolean' };
24
+ case 'date':
25
+ // ISO string or epoch number.
26
+ return { type: ['string', 'number'], format: 'date-time' };
27
+ case 'select': {
28
+ const values = field.options.map((o) => o.value);
29
+ const item = { type: 'string', enum: values };
30
+ return field.multiple ? { type: 'array', items: item } : item;
31
+ }
32
+ case 'relation': {
33
+ const ref = {
34
+ type: 'object',
35
+ properties: {
36
+ collection: { type: 'string', const: field.target },
37
+ id: { type: 'string' },
38
+ },
39
+ required: ['collection', 'id'],
40
+ additionalProperties: false,
41
+ };
42
+ return field.cardinality === 'many' ? { type: 'array', items: ref } : ref;
43
+ }
44
+ case 'asset': {
45
+ const id = { type: 'string' };
46
+ return field.cardinality === 'many' ? { type: 'array', items: id } : id;
47
+ }
48
+ case 'blocks':
49
+ // A composition value (EC-186): a ComponentNode tree the host renders via
50
+ // the canvas engine. Opaque to JSON Schema consumers — `many` is an
51
+ // ordered list, `one` a single tree.
52
+ return field.cardinality === 'many' ? { type: 'array' } : { type: 'object' };
53
+ case 'object': {
54
+ // EC-253: a nested object of the subfield schemas; `many` wraps it in an
55
+ // array (the repeater). Recurses for nested objects.
56
+ const properties = {};
57
+ const required = [];
58
+ for (const sub of field.fields) {
59
+ properties[sub.name] = fieldSchema(sub);
60
+ if (sub.validation?.required)
61
+ required.push(sub.name);
62
+ }
63
+ const objectSchema = { type: 'object', properties, additionalProperties: false };
64
+ if (required.length > 0)
65
+ objectSchema.required = required;
66
+ return field.cardinality === 'many'
67
+ ? { type: 'array', items: objectSchema }
68
+ : objectSchema;
69
+ }
70
+ default: {
71
+ // Exhaustiveness: a new field type must add a case above (EC-253).
72
+ const _exhaustive = field;
73
+ void _exhaustive;
74
+ return {};
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Produce a JSON Schema for a collection's document shape (EC-016). Required
80
+ * fields populate `required`; declared validation metadata maps to standard
81
+ * JSON Schema keywords. Localized fields can be wrapped in a per-locale object.
82
+ */
83
+ export function collectionJsonSchema(collection, options = {}) {
84
+ const properties = {};
85
+ const required = [];
86
+ for (const field of collection.fields) {
87
+ let schema = fieldSchema(field);
88
+ if (field.localized && options.locales && options.locales.length > 0) {
89
+ const localeProps = {};
90
+ for (const locale of options.locales)
91
+ localeProps[locale] = schema;
92
+ schema = { type: 'object', properties: localeProps };
93
+ }
94
+ properties[field.name] = schema;
95
+ if (field.validation?.required)
96
+ required.push(field.name);
97
+ }
98
+ const out = {
99
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
100
+ $id: options.$id ?? `urn:elytra:collection:${collection.id}`,
101
+ title: collection.form?.labelSingular ?? collection.form?.label ?? collection.id,
102
+ type: 'object',
103
+ properties,
104
+ additionalProperties: false,
105
+ };
106
+ if (required.length > 0)
107
+ out.required = required;
108
+ return out;
109
+ }
110
+ //# sourceMappingURL=json-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/cms-core/json-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ import type { CollectionDef } from './collections';
3
+ import type { CmsDocument, FieldValues, Locale } from './documents';
4
+ import type { CmsValidationIssue } from './issues';
5
+ /**
6
+ * Locale configuration for a project (EC-018): the set of supported locales and
7
+ * the default used for fallback. Provider-neutral.
8
+ */
9
+ export declare const localeConfigSchema: z.ZodObject<{
10
+ default: z.ZodString;
11
+ locales: z.ZodArray<z.ZodString>;
12
+ }, z.core.$strip>;
13
+ export type LocaleConfig = z.infer<typeof localeConfigSchema>;
14
+ /** Build a locale config, ensuring the default is included in the locale set. */
15
+ export declare function createLocaleConfig(init: {
16
+ default: Locale;
17
+ locales: readonly Locale[];
18
+ }): LocaleConfig;
19
+ /** True if a locale is part of the configured set. */
20
+ export declare function isKnownLocale(config: LocaleConfig, locale: Locale): boolean;
21
+ /** Whether a given field stores per-locale values. */
22
+ export declare function isFieldLocalized(collection: CollectionDef, fieldName: string): boolean;
23
+ /** The document's authoring/default locale, falling back to the project default. */
24
+ export declare function documentDefaultLocale(doc: CmsDocument, config: LocaleConfig): Locale;
25
+ export interface ResolvedField {
26
+ value: unknown;
27
+ /** The locale the value was actually read from (may differ from requested). */
28
+ sourceLocale: Locale;
29
+ /** True when the requested locale had no value and fallback was used. */
30
+ fellBack: boolean;
31
+ }
32
+ /**
33
+ * Resolve a single field's value for a requested locale with default-locale
34
+ * fallback (EC-018):
35
+ * - Non-localized fields always read from `doc.values`.
36
+ * - Localized fields read `doc.localized[locale]`; if absent, fall back to the
37
+ * document's default locale, then to `doc.values` as a last resort.
38
+ */
39
+ export declare function resolveField(collection: CollectionDef, doc: CmsDocument, fieldName: string, locale: Locale, config: LocaleConfig): ResolvedField;
40
+ /**
41
+ * Resolve the full field-values view of a document for a locale, applying
42
+ * default-locale fallback per field (EC-018). The returned bag is flat:
43
+ * `{ [field]: value }`, suitable for rendering or relation resolution.
44
+ */
45
+ export declare function resolveDocumentForLocale(collection: CollectionDef, doc: CmsDocument, locale: Locale, config: LocaleConfig): FieldValues;
46
+ /**
47
+ * Validate that requesting `locale` is well-formed against the project config
48
+ * (EC-018): emits `unknown-locale` for unsupported locales. Resolution itself
49
+ * never throws; this surfaces an explicit structured issue.
50
+ */
51
+ export declare function validateLocale(config: LocaleConfig, locale: Locale, path?: ReadonlyArray<string | number>): CmsValidationIssue[];
@@ -0,0 +1,89 @@
1
+ import { z } from 'zod';
2
+ import { fieldOf } from './collections';
3
+ import { cmsIssue } from './issues';
4
+ /**
5
+ * Locale configuration for a project (EC-018): the set of supported locales and
6
+ * the default used for fallback. Provider-neutral.
7
+ */
8
+ export const localeConfigSchema = z.object({
9
+ default: z.string().min(1),
10
+ locales: z.array(z.string().min(1)).min(1),
11
+ });
12
+ /** Build a locale config, ensuring the default is included in the locale set. */
13
+ export function createLocaleConfig(init) {
14
+ const locales = init.locales.includes(init.default)
15
+ ? [...init.locales]
16
+ : [init.default, ...init.locales];
17
+ return { default: init.default, locales };
18
+ }
19
+ /** True if a locale is part of the configured set. */
20
+ export function isKnownLocale(config, locale) {
21
+ return config.locales.includes(locale);
22
+ }
23
+ /** Whether a given field stores per-locale values. */
24
+ export function isFieldLocalized(collection, fieldName) {
25
+ return fieldOf(collection, fieldName)?.localized === true;
26
+ }
27
+ /** The document's authoring/default locale, falling back to the project default. */
28
+ export function documentDefaultLocale(doc, config) {
29
+ return doc.defaultLocale ?? config.default;
30
+ }
31
+ /**
32
+ * Resolve a single field's value for a requested locale with default-locale
33
+ * fallback (EC-018):
34
+ * - Non-localized fields always read from `doc.values`.
35
+ * - Localized fields read `doc.localized[locale]`; if absent, fall back to the
36
+ * document's default locale, then to `doc.values` as a last resort.
37
+ */
38
+ export function resolveField(collection, doc, fieldName, locale, config) {
39
+ if (!isFieldLocalized(collection, fieldName)) {
40
+ return { value: doc.values[fieldName], sourceLocale: locale, fellBack: false };
41
+ }
42
+ const requested = doc.localized?.[locale];
43
+ if (requested && fieldName in requested) {
44
+ return { value: requested[fieldName], sourceLocale: locale, fellBack: false };
45
+ }
46
+ const fallbackLocale = documentDefaultLocale(doc, config);
47
+ if (fallbackLocale !== locale) {
48
+ const fallback = doc.localized?.[fallbackLocale];
49
+ if (fallback && fieldName in fallback) {
50
+ return { value: fallback[fieldName], sourceLocale: fallbackLocale, fellBack: true };
51
+ }
52
+ }
53
+ // Last resort: a value stored on the shared bag (e.g. authored before the
54
+ // field was localized). Reported as a fallback to the default locale.
55
+ if (fieldName in doc.values) {
56
+ return { value: doc.values[fieldName], sourceLocale: fallbackLocale, fellBack: true };
57
+ }
58
+ return { value: undefined, sourceLocale: fallbackLocale, fellBack: fallbackLocale !== locale };
59
+ }
60
+ /**
61
+ * Resolve the full field-values view of a document for a locale, applying
62
+ * default-locale fallback per field (EC-018). The returned bag is flat:
63
+ * `{ [field]: value }`, suitable for rendering or relation resolution.
64
+ */
65
+ export function resolveDocumentForLocale(collection, doc, locale, config) {
66
+ const out = {};
67
+ for (const field of collection.fields) {
68
+ out[field.name] = resolveField(collection, doc, field.name, locale, config).value;
69
+ }
70
+ return out;
71
+ }
72
+ /**
73
+ * Validate that requesting `locale` is well-formed against the project config
74
+ * (EC-018): emits `unknown-locale` for unsupported locales. Resolution itself
75
+ * never throws; this surfaces an explicit structured issue.
76
+ */
77
+ export function validateLocale(config, locale, path = ['locale']) {
78
+ if (isKnownLocale(config, locale))
79
+ return [];
80
+ return [
81
+ cmsIssue({
82
+ code: 'unknown-locale',
83
+ message: `Locale "${locale}" is not in the configured locale set.`,
84
+ path,
85
+ meta: { locale, configured: config.locales },
86
+ }),
87
+ ];
88
+ }
89
+ //# sourceMappingURL=localization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/cms-core/localization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod';
2
+ import type { DocumentRef } from './documents';
3
+ import type { CmsValidationIssue } from './issues';
4
+ /**
5
+ * A route record (EC-019, reshaped by EC-187). A path pattern may contain
6
+ * dynamic segments written `:name` (e.g. `/blog/:slug`). A route maps a concrete
7
+ * URL to a **render target = a collection + document** via its `document` ref
8
+ * — `/` → `{ collection: 'page', id: 'home' }`, `/blog/:slug` →
9
+ * `{ collection: 'post', id: ':slug' }`. The catch-all dispatches on the
10
+ * resolved document's collection. There is no `templateId`/`pageId` anymore:
11
+ * page content is a `page`-collection document, not a graph page.
12
+ */
13
+ export declare const routeRecordSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ pattern: z.ZodString;
16
+ locale: z.ZodOptional<z.ZodString>;
17
+ document: z.ZodOptional<z.ZodObject<{
18
+ collection: z.ZodString;
19
+ id: z.ZodString;
20
+ }, z.core.$strip>>;
21
+ }, z.core.$strip>;
22
+ export type RouteRecord = z.infer<typeof routeRecordSchema>;
23
+ /** A redirect record (EC-019/020). */
24
+ export declare const redirectRecordSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ from: z.ZodString;
27
+ to: z.ZodString;
28
+ permanent: z.ZodDefault<z.ZodBoolean>;
29
+ }, z.core.$strip>;
30
+ export type RedirectRecord = z.infer<typeof redirectRecordSchema>;
31
+ /** Result of `resolveUrl` (EC-019). */
32
+ export type ResolveStatus = 'ok' | 'redirect' | 'notFound';
33
+ export interface ResolveResult {
34
+ status: ResolveStatus;
35
+ /** The matched route, when status is `ok`. */
36
+ route?: RouteRecord;
37
+ /** The document the URL resolves to, when known. */
38
+ documentRef?: DocumentRef;
39
+ /** The terminal redirect target, when status is `redirect`. */
40
+ redirectTarget?: string;
41
+ /** Extracted dynamic params, e.g. `{ slug: 'hello' }`. */
42
+ dynamicParams: Record<string, string>;
43
+ /** True when resolution fell back to a default-locale route (EC-018). */
44
+ fallback: boolean;
45
+ /** Whether the matched redirect is permanent (301) vs temporary (302). */
46
+ permanent?: boolean;
47
+ }
48
+ /** Split a path into non-empty segments, ignoring a trailing slash. */
49
+ export declare function splitPath(path: string): string[];
50
+ /**
51
+ * The router (EC-019/020). Compiles routes + redirects once, then answers
52
+ * `resolveUrl`. Construction surfaces structural issues (route conflicts,
53
+ * redirect loops) as structured issues — it never throws or loops.
54
+ */
55
+ export interface Router {
56
+ readonly issues: readonly CmsValidationIssue[];
57
+ resolveUrl(url: string, locale?: string): ResolveResult;
58
+ /** Resolve a redirect chain from `from` to its terminus (EC-020). */
59
+ followRedirects(from: string): RedirectResolution;
60
+ }
61
+ export interface RouterOptions {
62
+ /** Default locale used for locale fallback during resolution (EC-018). */
63
+ defaultLocale?: string;
64
+ }
65
+ export interface RedirectResolution {
66
+ /** Final URL after following all hops. */
67
+ target: string;
68
+ /** Ordered list of intermediate URLs visited (including `from` and `target`). */
69
+ chain: string[];
70
+ /** True if a loop was detected; `target` is then the loop entry point. */
71
+ loop: boolean;
72
+ /** Whether every hop was permanent. */
73
+ permanent: boolean;
74
+ }
75
+ /** Build a router from route + redirect records. */
76
+ export declare function createRouter(routes: readonly RouteRecord[], redirects?: readonly RedirectRecord[], options?: RouterOptions): Router;
@@ -0,0 +1,220 @@
1
+ import { z } from 'zod';
2
+ import { localeSchema } from './documents';
3
+ import { cmsIssue } from './issues';
4
+ /**
5
+ * A route record (EC-019, reshaped by EC-187). A path pattern may contain
6
+ * dynamic segments written `:name` (e.g. `/blog/:slug`). A route maps a concrete
7
+ * URL to a **render target = a collection + document** via its `document` ref
8
+ * — `/` → `{ collection: 'page', id: 'home' }`, `/blog/:slug` →
9
+ * `{ collection: 'post', id: ':slug' }`. The catch-all dispatches on the
10
+ * resolved document's collection. There is no `templateId`/`pageId` anymore:
11
+ * page content is a `page`-collection document, not a graph page.
12
+ */
13
+ export const routeRecordSchema = z.object({
14
+ id: z.string().min(1),
15
+ /** Path pattern, leading slash, with optional `:param` segments. */
16
+ pattern: z.string().min(1),
17
+ /** Locale this route serves (EC-018). Omitted = locale-agnostic. */
18
+ locale: localeSchema.optional(),
19
+ /**
20
+ * The document this route resolves to: a `page`-collection document (whose
21
+ * `body` composition renders into a layout), or a content-collection document
22
+ * (rendered by a dev route component). The `id` may be a `:param` placeholder
23
+ * materialized from the matched URL (EC-166).
24
+ */
25
+ document: z
26
+ .object({ collection: z.string().min(1), id: z.string().min(1) })
27
+ .optional(),
28
+ });
29
+ /** A redirect record (EC-019/020). */
30
+ export const redirectRecordSchema = z.object({
31
+ id: z.string().min(1),
32
+ from: z.string().min(1),
33
+ to: z.string().min(1),
34
+ /** 301 permanent (default) or 302 temporary. */
35
+ permanent: z.boolean().default(true),
36
+ });
37
+ /** Split a path into non-empty segments, ignoring a trailing slash. */
38
+ export function splitPath(path) {
39
+ const [pathname] = path.split(/[?#]/, 1);
40
+ return (pathname ?? '')
41
+ .split('/')
42
+ .filter((s) => s.length > 0);
43
+ }
44
+ function compilePattern(pattern) {
45
+ return splitPath(pattern).map((seg) => seg.startsWith(':')
46
+ ? { kind: 'param', name: seg.slice(1) }
47
+ : { kind: 'static', value: seg });
48
+ }
49
+ /**
50
+ * Match a concrete URL path against a compiled pattern. Returns extracted params
51
+ * or `undefined` if it doesn't match. Segment counts must be equal.
52
+ */
53
+ function matchSegments(segments, urlSegments) {
54
+ if (segments.length !== urlSegments.length)
55
+ return undefined;
56
+ const params = {};
57
+ for (let i = 0; i < segments.length; i++) {
58
+ const seg = segments[i];
59
+ const value = urlSegments[i];
60
+ if (seg === undefined || value === undefined)
61
+ return undefined;
62
+ if (seg.kind === 'static') {
63
+ if (seg.value !== value)
64
+ return undefined;
65
+ }
66
+ else {
67
+ params[seg.name] = decodeURIComponent(value);
68
+ }
69
+ }
70
+ return params;
71
+ }
72
+ /**
73
+ * A "specificity key": more static segments and fewer params win when two routes
74
+ * could match. Used to choose deterministically and to detect *true* conflicts
75
+ * (two patterns with identical specificity matching the same concrete URL).
76
+ */
77
+ function specificity(segments) {
78
+ return segments.map((s) => (s.kind === 'static' ? 'S' : 'P')).join('');
79
+ }
80
+ function normalizePath(path) {
81
+ const [pathname] = path.split(/[?#]/, 1);
82
+ const segs = splitPath(pathname ?? '');
83
+ return '/' + segs.join('/');
84
+ }
85
+ /** Build a router from route + redirect records. */
86
+ export function createRouter(routes, redirects = [], options = {}) {
87
+ const issues = [];
88
+ const compiled = routes.map((route) => ({
89
+ route,
90
+ segments: compilePattern(route.pattern),
91
+ }));
92
+ // --- Route conflict detection (EC-020) ---
93
+ // Two routes conflict when, for the same locale, they would match the exact
94
+ // same set of concrete URLs: identical specificity signature AND the static
95
+ // segments line up at the same positions.
96
+ const conflictKey = (c) => {
97
+ const locale = c.route.locale ?? '*';
98
+ const sig = c.segments
99
+ .map((s) => (s.kind === 'static' ? `s:${s.value}` : 'p'))
100
+ .join('/');
101
+ return `${locale}|${sig}`;
102
+ };
103
+ const byKey = new Map();
104
+ for (const c of compiled) {
105
+ const key = conflictKey(c);
106
+ const existing = byKey.get(key);
107
+ if (existing) {
108
+ issues.push(cmsIssue({
109
+ code: 'route-conflict',
110
+ message: `Routes "${existing.route.id}" and "${c.route.id}" both match the same URLs (pattern "${c.route.pattern}").`,
111
+ path: ['routes', c.route.id],
112
+ meta: { conflictsWith: existing.route.id, pattern: c.route.pattern },
113
+ }));
114
+ }
115
+ else {
116
+ byKey.set(key, c);
117
+ }
118
+ }
119
+ // --- Redirect map + loop detection (EC-020) ---
120
+ const redirectMap = new Map();
121
+ for (const r of redirects) {
122
+ redirectMap.set(normalizePath(r.from), r);
123
+ }
124
+ const followRedirects = (from) => {
125
+ const chain = [];
126
+ const seen = new Set();
127
+ let current = normalizePath(from);
128
+ let permanent = true;
129
+ chain.push(current);
130
+ // Bounded by the number of redirects; the `seen` guard makes loops impossible.
131
+ while (true) {
132
+ const hop = redirectMap.get(current);
133
+ if (!hop) {
134
+ return { target: current, chain, loop: false, permanent };
135
+ }
136
+ if (!hop.permanent)
137
+ permanent = false;
138
+ const next = normalizePath(hop.to);
139
+ if (seen.has(next) || next === current) {
140
+ chain.push(next);
141
+ return { target: next, chain, loop: true, permanent };
142
+ }
143
+ seen.add(current);
144
+ current = next;
145
+ chain.push(current);
146
+ }
147
+ };
148
+ // Eagerly report redirect loops as structured issues (EC-020).
149
+ const loopReported = new Set();
150
+ for (const r of redirects) {
151
+ const res = followRedirects(r.from);
152
+ if (res.loop && !loopReported.has(res.target)) {
153
+ loopReported.add(res.target);
154
+ issues.push(cmsIssue({
155
+ code: 'redirect-loop',
156
+ message: `Redirect chain starting at "${r.from}" loops (…${res.chain.slice(-3).join(' -> ')}).`,
157
+ path: ['redirects', r.id],
158
+ meta: { chain: res.chain },
159
+ }));
160
+ }
161
+ }
162
+ const orderedMatches = (urlSegments, locale) => {
163
+ const matches = [];
164
+ for (const c of compiled) {
165
+ if (locale !== undefined && c.route.locale !== undefined && c.route.locale !== locale) {
166
+ continue;
167
+ }
168
+ const params = matchSegments(c.segments, urlSegments);
169
+ if (params)
170
+ matches.push({ compiled: c, params });
171
+ }
172
+ // Most specific first (fewest params, more static).
173
+ matches.sort((a, b) => specificity(a.compiled.segments).localeCompare(specificity(b.compiled.segments)) * -1);
174
+ return matches;
175
+ };
176
+ const resolveUrl = (url, locale) => {
177
+ const path = normalizePath(url);
178
+ // 1. Redirects take precedence (resolve to terminus).
179
+ if (redirectMap.has(path)) {
180
+ const res = followRedirects(path);
181
+ return {
182
+ status: 'redirect',
183
+ redirectTarget: res.target,
184
+ permanent: res.permanent,
185
+ dynamicParams: {},
186
+ fallback: false,
187
+ };
188
+ }
189
+ const urlSegments = splitPath(path);
190
+ // 2. Match routes for the requested locale.
191
+ let fallback = false;
192
+ let matches = orderedMatches(urlSegments, locale);
193
+ // 3. Locale fallback to the default locale (EC-018).
194
+ if (matches.length === 0 && locale && options.defaultLocale && locale !== options.defaultLocale) {
195
+ const fallbackMatches = orderedMatches(urlSegments, options.defaultLocale);
196
+ if (fallbackMatches.length > 0) {
197
+ matches = fallbackMatches;
198
+ fallback = true;
199
+ }
200
+ }
201
+ // 3b. As a last resort try locale-agnostic routes (no locale on requested pass).
202
+ if (matches.length === 0 && locale === undefined) {
203
+ matches = orderedMatches(urlSegments, undefined);
204
+ }
205
+ const best = matches[0];
206
+ if (!best) {
207
+ return { status: 'notFound', dynamicParams: {}, fallback };
208
+ }
209
+ const route = best.compiled.route;
210
+ return {
211
+ status: 'ok',
212
+ route,
213
+ ...(route.document ? { documentRef: route.document } : {}),
214
+ dynamicParams: best.params,
215
+ fallback,
216
+ };
217
+ };
218
+ return { issues, resolveUrl, followRedirects };
219
+ }
220
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/cms-core/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { CollectionDef } from './collections';
2
+ import type { CmsDocument } from './documents';
3
+ import type { FieldDef } from './fields';
4
+ /**
5
+ * Self-typing on write (EC-277, vision AD-14/AD-15): the *write-time lens*.
6
+ *
7
+ * The schema is a lens, not a mirror — it shapes the editing UI and, on write,
8
+ * wraps bare field values into their self-describing envelope so the stored value
9
+ * carries its own `type` discriminator. This is the only place the schema (and, for
10
+ * a composition's static props, the component manifest) touches the value on the way
11
+ * IN; from then on derivation (the reference walk) reads the envelope and needs
12
+ * neither. It is also the exact transform the lazy migration applies to legacy bare
13
+ * content (the migration IS this lens, applied once).
14
+ *
15
+ * "Schema leads, component adopts": the field-def (and the manifest's prop field-defs)
16
+ * lead the write-time wrapping; the component adopts the self-typed value on read.
17
+ * Using the manifest HERE (write) is what keeps extraction schema-free THERE (read).
18
+ *
19
+ * Idempotent: an already-self-typed value passes through unchanged, so running it
20
+ * over partially-migrated content is safe.
21
+ */
22
+ /**
23
+ * Resolves a component id to its prop field-defs (the manifest's `props`, name → def).
24
+ * Manifests are code (AD-11); cms-core stays free of `@elytracms/core/component-registry`
25
+ * by accepting this structural lookup, threaded from the layer that owns the registry
26
+ * (operations / the studio form engine). Omit → composition static props are not
27
+ * self-typed (component usage still self-describes via `componentId`).
28
+ */
29
+ export type PropFieldLookup = (componentId: string) => Record<string, FieldDef> | undefined;
30
+ export interface SelfTypeOptions {
31
+ lookupManifest?: PropFieldLookup;
32
+ }
33
+ /** Self-type one field value through the lens of its field-def. Idempotent. */
34
+ export declare function selfTypeFieldValue(field: FieldDef, value: unknown, options?: SelfTypeOptions): unknown;
35
+ /**
36
+ * Self-type a whole document (its `values` and every `localized` locale) through the
37
+ * collection schema. Returns a new document; the input is not mutated. A document
38
+ * whose collection is absent from the schema is returned unchanged (drift-tolerant —
39
+ * AD-14: the store never blocks on schema divergence).
40
+ */
41
+ export declare function selfTypeDocument(document: CmsDocument, collection: CollectionDef, options?: SelfTypeOptions): CmsDocument;