canopycms 0.0.63 → 0.0.65

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 (1211) hide show
  1. package/README.md +153 -19
  2. package/dist/ai/generate.d.ts +4 -5
  3. package/dist/ai/generate.js +0 -1
  4. package/dist/ai/handler.d.ts +3 -4
  5. package/dist/ai/handler.js +0 -1
  6. package/dist/ai/index.d.ts +7 -8
  7. package/dist/ai/index.js +0 -1
  8. package/dist/ai/json-to-markdown.d.ts +1 -2
  9. package/dist/ai/json-to-markdown.js +11 -2
  10. package/dist/ai/resolve-branch.d.ts +1 -2
  11. package/dist/ai/resolve-branch.js +0 -1
  12. package/dist/ai/strip-mdx.d.ts +0 -1
  13. package/dist/ai/strip-mdx.js +0 -1
  14. package/dist/ai/to-plain-text.d.ts +4 -1
  15. package/dist/ai/to-plain-text.js +47 -1
  16. package/dist/ai/transform-components.d.ts +1 -2
  17. package/dist/ai/transform-components.js +0 -1
  18. package/dist/ai/types.d.ts +1 -2
  19. package/dist/ai/types.js +0 -1
  20. package/dist/api/admin-branch-health.d.ts +7 -8
  21. package/dist/api/admin-branch-health.js +0 -1
  22. package/dist/api/admin.d.ts +16 -17
  23. package/dist/api/admin.js +0 -1
  24. package/dist/api/assets.d.ts +8 -9
  25. package/dist/api/assets.js +9 -1
  26. package/dist/api/branch-merge.d.ts +3 -4
  27. package/dist/api/branch-merge.js +0 -1
  28. package/dist/api/branch-review.d.ts +5 -6
  29. package/dist/api/branch-review.js +0 -1
  30. package/dist/api/branch-status.d.ts +15 -16
  31. package/dist/api/branch-status.js +0 -1
  32. package/dist/api/branch-withdraw.d.ts +3 -4
  33. package/dist/api/branch-withdraw.js +0 -1
  34. package/dist/api/branch.d.ts +13 -14
  35. package/dist/api/branch.js +0 -1
  36. package/dist/api/client.d.ts +14 -15
  37. package/dist/api/client.js +0 -1
  38. package/dist/api/comments.d.ts +11 -12
  39. package/dist/api/comments.js +0 -1
  40. package/dist/api/content.d.ts +22 -24
  41. package/dist/api/content.js +132 -18
  42. package/dist/api/entries-constants.d.ts +0 -1
  43. package/dist/api/entries-constants.js +0 -1
  44. package/dist/api/entries.d.ts +12 -13
  45. package/dist/api/entries.js +12 -2
  46. package/dist/api/github-sync.d.ts +2 -3
  47. package/dist/api/github-sync.js +0 -1
  48. package/dist/api/groups.d.ts +6 -7
  49. package/dist/api/groups.js +0 -1
  50. package/dist/api/guards.d.ts +2 -3
  51. package/dist/api/guards.js +0 -1
  52. package/dist/api/index.d.ts +18 -19
  53. package/dist/api/index.js +0 -1
  54. package/dist/api/permissions.d.ts +10 -11
  55. package/dist/api/permissions.js +0 -1
  56. package/dist/api/reference-options.d.ts +3 -4
  57. package/dist/api/reference-options.js +0 -1
  58. package/dist/api/request-body-hash.d.ts +0 -1
  59. package/dist/api/request-body-hash.js +0 -1
  60. package/dist/api/resolve-references.d.ts +6 -7
  61. package/dist/api/resolve-references.js +24 -6
  62. package/dist/api/route-builder.d.ts +2 -3
  63. package/dist/api/route-builder.js +0 -1
  64. package/dist/api/schema.d.ts +43 -44
  65. package/dist/api/schema.js +0 -1
  66. package/dist/api/settings-helpers.d.ts +2 -3
  67. package/dist/api/settings-helpers.js +0 -1
  68. package/dist/api/types.d.ts +6 -7
  69. package/dist/api/types.js +0 -1
  70. package/dist/api/user.d.ts +2 -3
  71. package/dist/api/user.js +0 -1
  72. package/dist/api/validators.d.ts +3 -4
  73. package/dist/api/validators.js +0 -1
  74. package/dist/assets/asset-prefixes.d.ts +1 -2
  75. package/dist/assets/asset-prefixes.js +0 -1
  76. package/dist/assets/asset-src.d.ts +17 -5
  77. package/dist/assets/asset-src.js +15 -3
  78. package/dist/assets/asset-url.d.ts +28 -7
  79. package/dist/assets/asset-url.js +20 -15
  80. package/dist/assets/factory.d.ts +2 -3
  81. package/dist/assets/factory.js +0 -2
  82. package/dist/assets/finalize.d.ts +2 -3
  83. package/dist/assets/finalize.js +0 -1
  84. package/dist/assets/index.d.ts +12 -13
  85. package/dist/assets/index.js +0 -1
  86. package/dist/assets/keys.d.ts +1 -2
  87. package/dist/assets/keys.js +0 -1
  88. package/dist/assets/pipeline.d.ts +1 -2
  89. package/dist/assets/pipeline.js +0 -1
  90. package/dist/assets/store-local.d.ts +1 -2
  91. package/dist/assets/store-local.js +0 -1
  92. package/dist/assets/store-s3.d.ts +2 -4
  93. package/dist/assets/store-s3.js +0 -1
  94. package/dist/assets/svg-sanitizer.d.ts +0 -1
  95. package/dist/assets/svg-sanitizer.js +0 -1
  96. package/dist/assets/transform-directives.d.ts +0 -1
  97. package/dist/assets/transform-directives.js +0 -1
  98. package/dist/assets/transform.d.ts +1 -2
  99. package/dist/assets/transform.js +0 -1
  100. package/dist/assets/types.d.ts +0 -1
  101. package/dist/assets/types.js +0 -1
  102. package/dist/auth/cache.d.ts +2 -3
  103. package/dist/auth/cache.js +0 -1
  104. package/dist/auth/caching-auth-plugin.d.ts +3 -4
  105. package/dist/auth/caching-auth-plugin.js +0 -1
  106. package/dist/auth/context-helpers.d.ts +1 -2
  107. package/dist/auth/context-helpers.js +0 -1
  108. package/dist/auth/file-based-auth-cache.d.ts +3 -4
  109. package/dist/auth/file-based-auth-cache.js +14 -3
  110. package/dist/auth/index.d.ts +6 -7
  111. package/dist/auth/index.js +0 -1
  112. package/dist/auth/plugin.d.ts +3 -4
  113. package/dist/auth/plugin.js +0 -1
  114. package/dist/auth/types.d.ts +1 -2
  115. package/dist/auth/types.js +0 -1
  116. package/dist/authorization/branch.d.ts +4 -5
  117. package/dist/authorization/branch.js +0 -1
  118. package/dist/authorization/content.d.ts +6 -7
  119. package/dist/authorization/content.js +0 -1
  120. package/dist/authorization/groups/index.d.ts +2 -3
  121. package/dist/authorization/groups/index.js +0 -1
  122. package/dist/authorization/groups/loader.d.ts +3 -4
  123. package/dist/authorization/groups/loader.js +0 -1
  124. package/dist/authorization/groups/schema.d.ts +1 -2
  125. package/dist/authorization/groups/schema.js +0 -1
  126. package/dist/authorization/helpers.d.ts +0 -1
  127. package/dist/authorization/helpers.js +0 -1
  128. package/dist/authorization/index.d.ts +11 -12
  129. package/dist/authorization/index.js +0 -1
  130. package/dist/authorization/path.d.ts +4 -5
  131. package/dist/authorization/path.js +0 -1
  132. package/dist/authorization/permissions/index.d.ts +2 -3
  133. package/dist/authorization/permissions/index.js +0 -1
  134. package/dist/authorization/permissions/loader.d.ts +4 -5
  135. package/dist/authorization/permissions/loader.js +0 -1
  136. package/dist/authorization/permissions/schema.d.ts +2 -3
  137. package/dist/authorization/permissions/schema.js +0 -1
  138. package/dist/authorization/protected-branch.d.ts +2 -3
  139. package/dist/authorization/protected-branch.js +0 -1
  140. package/dist/authorization/settings-file-store.d.ts +1 -2
  141. package/dist/authorization/settings-file-store.js +0 -1
  142. package/dist/authorization/types.d.ts +6 -7
  143. package/dist/authorization/types.js +0 -1
  144. package/dist/authorization/validation.d.ts +1 -2
  145. package/dist/authorization/validation.js +0 -1
  146. package/dist/branch-health.d.ts +22 -3
  147. package/dist/branch-health.js +6 -2
  148. package/dist/branch-metadata.d.ts +2 -3
  149. package/dist/branch-metadata.js +0 -1
  150. package/dist/branch-registry.d.ts +1 -2
  151. package/dist/branch-registry.js +0 -1
  152. package/dist/branch-schema-cache.d.ts +4 -5
  153. package/dist/branch-schema-cache.js +0 -1
  154. package/dist/branch-workspace.d.ts +4 -5
  155. package/dist/branch-workspace.js +0 -1
  156. package/dist/build/generate-ai-content.d.ts +21 -5
  157. package/dist/build/generate-ai-content.js +98 -6
  158. package/dist/build/index.d.ts +2 -3
  159. package/dist/build/index.js +0 -1
  160. package/dist/build-canopy.d.ts +5 -6
  161. package/dist/build-canopy.js +0 -1
  162. package/dist/build-mode.d.ts +1 -2
  163. package/dist/build-mode.js +0 -1
  164. package/dist/cli/cli.d.ts +18 -2
  165. package/dist/cli/cli.js +1172 -490
  166. package/dist/cli/generate-ai-content.d.ts +0 -1
  167. package/dist/cli/generate-ai-content.js +1000 -360
  168. package/dist/cli/init.d.ts +1 -2
  169. package/dist/cli/init.js +43 -6
  170. package/dist/cli/migrate.d.ts +5 -3
  171. package/dist/cli/migrate.js +5 -3
  172. package/dist/cli/project-detect.d.ts +5 -2
  173. package/dist/cli/project-detect.js +5 -1
  174. package/dist/cli/project-root.d.ts +0 -1
  175. package/dist/cli/project-root.js +0 -1
  176. package/dist/cli/sync.d.ts +0 -1
  177. package/dist/cli/sync.js +0 -1
  178. package/dist/cli/template-files/Dockerfile.cms.template +8 -2
  179. package/dist/cli/template-files/cms-stack.ts.template +33 -6
  180. package/dist/cli/template-files/deploy-cms.yml.template +29 -14
  181. package/dist/cli/templates.d.ts +0 -1
  182. package/dist/cli/templates.js +0 -1
  183. package/dist/client.d.ts +13 -14
  184. package/dist/client.js +0 -1
  185. package/dist/comment-store.d.ts +0 -1
  186. package/dist/comment-store.js +0 -1
  187. package/dist/config/flatten.d.ts +1 -2
  188. package/dist/config/flatten.js +0 -1
  189. package/dist/config/helpers.d.ts +3 -4
  190. package/dist/config/helpers.js +2 -2
  191. package/dist/config/index.d.ts +10 -11
  192. package/dist/config/index.js +0 -1
  193. package/dist/config/schemas/collection.d.ts +0 -1
  194. package/dist/config/schemas/collection.js +0 -1
  195. package/dist/config/schemas/config.d.ts +7 -4
  196. package/dist/config/schemas/config.js +12 -1
  197. package/dist/config/schemas/field.d.ts +3 -1
  198. package/dist/config/schemas/field.js +5 -1
  199. package/dist/config/schemas/media.d.ts +0 -1
  200. package/dist/config/schemas/media.js +0 -1
  201. package/dist/config/schemas/permissions.d.ts +0 -1
  202. package/dist/config/schemas/permissions.js +0 -1
  203. package/dist/config/types.d.ts +55 -9
  204. package/dist/config/types.js +0 -1
  205. package/dist/config/validation.d.ts +1 -2
  206. package/dist/config/validation.js +0 -1
  207. package/dist/config.d.ts +2 -3
  208. package/dist/config.js +0 -1
  209. package/dist/content-id-index.d.ts +1 -2
  210. package/dist/content-id-index.js +0 -1
  211. package/dist/content-index-generation.d.ts +0 -1
  212. package/dist/content-index-generation.js +0 -1
  213. package/dist/content-index-registry.d.ts +0 -1
  214. package/dist/content-index-registry.js +0 -1
  215. package/dist/content-listing.d.ts +75 -59
  216. package/dist/content-listing.js +76 -83
  217. package/dist/content-reader.d.ts +4 -5
  218. package/dist/content-reader.js +22 -3
  219. package/dist/content-store.d.ts +137 -6
  220. package/dist/content-store.js +294 -22
  221. package/dist/content-tree.d.ts +15 -5
  222. package/dist/content-tree.js +27 -8
  223. package/dist/context.d.ts +9 -6
  224. package/dist/context.js +0 -1
  225. package/dist/dev-content-watcher.d.ts +12 -3
  226. package/dist/dev-content-watcher.js +120 -30
  227. package/dist/editor/BranchManager.d.ts +4 -5
  228. package/dist/editor/BranchManager.js +0 -1
  229. package/dist/editor/CanopyEditor.d.ts +2 -3
  230. package/dist/editor/CanopyEditor.js +1 -2
  231. package/dist/editor/CanopyEditorPage.d.ts +2 -3
  232. package/dist/editor/CanopyEditorPage.js +0 -1
  233. package/dist/editor/CommentsPanel.d.ts +2 -3
  234. package/dist/editor/CommentsPanel.js +0 -1
  235. package/dist/editor/Editor.d.ts +13 -8
  236. package/dist/editor/Editor.js +4 -5
  237. package/dist/editor/EditorPanes.d.ts +0 -1
  238. package/dist/editor/EditorPanes.js +0 -1
  239. package/dist/editor/EntryNavigator.d.ts +1 -2
  240. package/dist/editor/EntryNavigator.js +0 -1
  241. package/dist/editor/FormRenderer.d.ts +2 -3
  242. package/dist/editor/FormRenderer.js +22 -3
  243. package/dist/editor/GroupManager.d.ts +2 -3
  244. package/dist/editor/GroupManager.js +0 -1
  245. package/dist/editor/PermissionManager.d.ts +2 -3
  246. package/dist/editor/PermissionManager.js +0 -1
  247. package/dist/editor/admin/SystemHealthPanel.d.ts +0 -1
  248. package/dist/editor/admin/SystemHealthPanel.js +0 -1
  249. package/dist/editor/admin/useSystemHealth.d.ts +2 -3
  250. package/dist/editor/admin/useSystemHealth.js +0 -1
  251. package/dist/editor/canopy-path.d.ts +0 -1
  252. package/dist/editor/canopy-path.js +0 -1
  253. package/dist/editor/client-reference-resolver.d.ts +13 -4
  254. package/dist/editor/client-reference-resolver.js +18 -8
  255. package/dist/editor/comments/BranchComments.d.ts +2 -3
  256. package/dist/editor/comments/BranchComments.js +0 -1
  257. package/dist/editor/comments/EntryComments.d.ts +1 -2
  258. package/dist/editor/comments/EntryComments.js +0 -1
  259. package/dist/editor/comments/FieldWrapper.d.ts +1 -2
  260. package/dist/editor/comments/FieldWrapper.js +0 -1
  261. package/dist/editor/comments/InlineCommentThread.d.ts +2 -3
  262. package/dist/editor/comments/InlineCommentThread.js +0 -1
  263. package/dist/editor/comments/ThreadCarousel.d.ts +2 -3
  264. package/dist/editor/comments/ThreadCarousel.js +0 -1
  265. package/dist/editor/components/ConfirmDeleteModal.d.ts +0 -1
  266. package/dist/editor/components/ConfirmDeleteModal.js +0 -1
  267. package/dist/editor/components/EditorFooter.d.ts +0 -1
  268. package/dist/editor/components/EditorFooter.js +0 -1
  269. package/dist/editor/components/EditorHeader.d.ts +4 -5
  270. package/dist/editor/components/EditorHeader.js +0 -1
  271. package/dist/editor/components/EditorSidebar.d.ts +1 -2
  272. package/dist/editor/components/EditorSidebar.js +0 -1
  273. package/dist/editor/components/EntryCreateModal.d.ts +0 -1
  274. package/dist/editor/components/EntryCreateModal.js +21 -10
  275. package/dist/editor/components/RenameEntryModal.d.ts +0 -1
  276. package/dist/editor/components/RenameEntryModal.js +0 -1
  277. package/dist/editor/components/UserBadge.d.ts +2 -3
  278. package/dist/editor/components/UserBadge.js +0 -1
  279. package/dist/editor/components/index.d.ts +3 -4
  280. package/dist/editor/components/index.js +0 -1
  281. package/dist/editor/context/ApiClientContext.d.ts +9 -3
  282. package/dist/editor/context/ApiClientContext.js +8 -4
  283. package/dist/editor/context/AssetContext.d.ts +26 -2
  284. package/dist/editor/context/AssetContext.js +23 -3
  285. package/dist/editor/context/EditorStateContext.d.ts +1 -2
  286. package/dist/editor/context/EditorStateContext.js +0 -1
  287. package/dist/editor/context/SWRProvider.d.ts +0 -1
  288. package/dist/editor/context/SWRProvider.js +0 -1
  289. package/dist/editor/context/index.d.ts +4 -5
  290. package/dist/editor/context/index.js +0 -1
  291. package/dist/editor/editor-config.d.ts +2 -3
  292. package/dist/editor/editor-config.js +0 -1
  293. package/dist/editor/editor-utils.d.ts +22 -10
  294. package/dist/editor/editor-utils.js +41 -10
  295. package/dist/editor/fields/BlockField.d.ts +1 -2
  296. package/dist/editor/fields/BlockField.js +0 -1
  297. package/dist/editor/fields/CodeField.d.ts +0 -1
  298. package/dist/editor/fields/CodeField.js +0 -1
  299. package/dist/editor/fields/DateTimeField.d.ts +0 -1
  300. package/dist/editor/fields/DateTimeField.js +0 -1
  301. package/dist/editor/fields/ImageField.d.ts +1 -2
  302. package/dist/editor/fields/ImageField.js +0 -1
  303. package/dist/editor/fields/InlineGroupField.d.ts +2 -3
  304. package/dist/editor/fields/InlineGroupField.js +0 -1
  305. package/dist/editor/fields/MarkdownField.d.ts +0 -1
  306. package/dist/editor/fields/MarkdownField.js +0 -1
  307. package/dist/editor/fields/MdxImageDialog.d.ts +0 -1
  308. package/dist/editor/fields/MdxImageDialog.js +0 -1
  309. package/dist/editor/fields/NumberField.d.ts +0 -1
  310. package/dist/editor/fields/NumberField.js +0 -1
  311. package/dist/editor/fields/NumberListField.d.ts +0 -1
  312. package/dist/editor/fields/NumberListField.js +0 -1
  313. package/dist/editor/fields/ObjectField.d.ts +11 -2
  314. package/dist/editor/fields/ObjectField.js +3 -4
  315. package/dist/editor/fields/ReferenceField.d.ts +0 -1
  316. package/dist/editor/fields/ReferenceField.js +8 -3
  317. package/dist/editor/fields/SelectField.d.ts +0 -1
  318. package/dist/editor/fields/SelectField.js +0 -1
  319. package/dist/editor/fields/StringListField.d.ts +0 -1
  320. package/dist/editor/fields/StringListField.js +0 -1
  321. package/dist/editor/fields/TextField.d.ts +0 -1
  322. package/dist/editor/fields/TextField.js +0 -1
  323. package/dist/editor/fields/ToggleField.d.ts +0 -1
  324. package/dist/editor/fields/ToggleField.js +0 -1
  325. package/dist/editor/fields/entry-link/EntryLinkContext.d.ts +1 -2
  326. package/dist/editor/fields/entry-link/EntryLinkContext.js +0 -1
  327. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -1
  328. package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -1
  329. package/dist/editor/fields/entry-link/index.d.ts +2 -3
  330. package/dist/editor/fields/entry-link/index.js +0 -1
  331. package/dist/editor/group-manager/ExternalGroupsTab.d.ts +1 -2
  332. package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
  333. package/dist/editor/group-manager/GroupCard.d.ts +1 -2
  334. package/dist/editor/group-manager/GroupCard.js +0 -1
  335. package/dist/editor/group-manager/GroupForm.d.ts +1 -2
  336. package/dist/editor/group-manager/GroupForm.js +0 -1
  337. package/dist/editor/group-manager/InternalGroupsTab.d.ts +1 -2
  338. package/dist/editor/group-manager/InternalGroupsTab.js +0 -1
  339. package/dist/editor/group-manager/MemberList.d.ts +1 -2
  340. package/dist/editor/group-manager/MemberList.js +0 -1
  341. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +1 -2
  342. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -1
  343. package/dist/editor/group-manager/hooks/useGroupState.d.ts +1 -2
  344. package/dist/editor/group-manager/hooks/useGroupState.js +0 -1
  345. package/dist/editor/group-manager/hooks/useUserSearch.d.ts +1 -2
  346. package/dist/editor/group-manager/hooks/useUserSearch.js +0 -1
  347. package/dist/editor/group-manager/index.d.ts +5 -6
  348. package/dist/editor/group-manager/index.js +0 -1
  349. package/dist/editor/group-manager/types.d.ts +4 -5
  350. package/dist/editor/group-manager/types.js +0 -1
  351. package/dist/editor/hooks/index.d.ts +14 -15
  352. package/dist/editor/hooks/index.js +0 -1
  353. package/dist/editor/hooks/useBranchActions.d.ts +0 -1
  354. package/dist/editor/hooks/useBranchActions.js +0 -1
  355. package/dist/editor/hooks/useBranchManager.d.ts +4 -5
  356. package/dist/editor/hooks/useBranchManager.js +0 -1
  357. package/dist/editor/hooks/useBranchesData.d.ts +2 -3
  358. package/dist/editor/hooks/useBranchesData.js +0 -1
  359. package/dist/editor/hooks/useCommentSystem.d.ts +2 -3
  360. package/dist/editor/hooks/useCommentSystem.js +0 -1
  361. package/dist/editor/hooks/useCommentsData.d.ts +2 -3
  362. package/dist/editor/hooks/useCommentsData.js +0 -1
  363. package/dist/editor/hooks/useDraftManager.d.ts +3 -4
  364. package/dist/editor/hooks/useDraftManager.js +0 -1
  365. package/dist/editor/hooks/useEditorLayout.d.ts +1 -2
  366. package/dist/editor/hooks/useEditorLayout.js +0 -1
  367. package/dist/editor/hooks/useEntriesData.d.ts +3 -5
  368. package/dist/editor/hooks/useEntriesData.js +0 -3
  369. package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -3
  370. package/dist/editor/hooks/useEntryLinkResolution.js +0 -1
  371. package/dist/editor/hooks/useEntryManager.d.ts +5 -7
  372. package/dist/editor/hooks/useEntryManager.js +8 -3
  373. package/dist/editor/hooks/useGroupManager.d.ts +2 -3
  374. package/dist/editor/hooks/useGroupManager.js +0 -1
  375. package/dist/editor/hooks/usePermissionManager.d.ts +2 -3
  376. package/dist/editor/hooks/usePermissionManager.js +0 -1
  377. package/dist/editor/hooks/useReferenceResolution.d.ts +1 -2
  378. package/dist/editor/hooks/useReferenceResolution.js +8 -3
  379. package/dist/editor/hooks/useSchemaManager.d.ts +2 -3
  380. package/dist/editor/hooks/useSchemaManager.js +0 -1
  381. package/dist/editor/hooks/useUserContext.d.ts +1 -2
  382. package/dist/editor/hooks/useUserContext.js +8 -3
  383. package/dist/editor/hooks/useUserMetadata.d.ts +2 -3
  384. package/dist/editor/hooks/useUserMetadata.js +0 -1
  385. package/dist/editor/media/AssetCard.d.ts +1 -2
  386. package/dist/editor/media/AssetCard.js +0 -1
  387. package/dist/editor/media/CropStep.d.ts +1 -2
  388. package/dist/editor/media/CropStep.js +0 -1
  389. package/dist/editor/media/MediaLibrary.d.ts +1 -2
  390. package/dist/editor/media/MediaLibrary.js +0 -1
  391. package/dist/editor/media/MediaLibraryBody.d.ts +1 -2
  392. package/dist/editor/media/MediaLibraryBody.js +0 -1
  393. package/dist/editor/media/crop-math.d.ts +1 -2
  394. package/dist/editor/media/crop-math.js +0 -1
  395. package/dist/editor/media/upload-asset.d.ts +2 -3
  396. package/dist/editor/media/upload-asset.js +0 -1
  397. package/dist/editor/media/upload-constants.d.ts +0 -1
  398. package/dist/editor/media/upload-constants.js +0 -1
  399. package/dist/editor/media/useAssetUpload.d.ts +1 -2
  400. package/dist/editor/media/useAssetUpload.js +0 -1
  401. package/dist/editor/media/xhr-upload.d.ts +0 -1
  402. package/dist/editor/media/xhr-upload.js +0 -1
  403. package/dist/editor/permission-manager/GroupSelector.d.ts +1 -2
  404. package/dist/editor/permission-manager/GroupSelector.js +0 -1
  405. package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -2
  406. package/dist/editor/permission-manager/PermissionEditor.js +0 -1
  407. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +1 -2
  408. package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -1
  409. package/dist/editor/permission-manager/PermissionTree.d.ts +1 -2
  410. package/dist/editor/permission-manager/PermissionTree.js +0 -1
  411. package/dist/editor/permission-manager/UserSelector.d.ts +1 -2
  412. package/dist/editor/permission-manager/UserSelector.js +0 -1
  413. package/dist/editor/permission-manager/constants.d.ts +1 -2
  414. package/dist/editor/permission-manager/constants.js +0 -1
  415. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +1 -2
  416. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -1
  417. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +2 -3
  418. package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -1
  419. package/dist/editor/permission-manager/index.d.ts +4 -5
  420. package/dist/editor/permission-manager/index.js +0 -1
  421. package/dist/editor/permission-manager/types.d.ts +3 -4
  422. package/dist/editor/permission-manager/types.js +0 -1
  423. package/dist/editor/permission-manager/utils.d.ts +2 -3
  424. package/dist/editor/permission-manager/utils.js +0 -1
  425. package/dist/editor/preview-bridge.d.ts +1 -2
  426. package/dist/editor/preview-bridge.js +0 -1
  427. package/dist/editor/relative-time.d.ts +0 -1
  428. package/dist/editor/relative-time.js +0 -1
  429. package/dist/editor/schema-editor/CollectionEditor.d.ts +4 -5
  430. package/dist/editor/schema-editor/CollectionEditor.js +0 -1
  431. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +2 -3
  432. package/dist/editor/schema-editor/EntryTypeEditor.js +0 -1
  433. package/dist/editor/schema-editor/index.d.ts +2 -3
  434. package/dist/editor/schema-editor/index.js +0 -1
  435. package/dist/editor/theme.d.ts +0 -1
  436. package/dist/editor/theme.js +0 -1
  437. package/dist/editor/utils/env.d.ts +0 -1
  438. package/dist/editor/utils/env.js +0 -1
  439. package/dist/entry-link-resolver.d.ts +1 -2
  440. package/dist/entry-link-resolver.js +0 -1
  441. package/dist/entry-schema-registry.d.ts +3 -4
  442. package/dist/entry-schema-registry.js +6 -2
  443. package/dist/entry-schema.d.ts +114 -3
  444. package/dist/entry-schema.js +46 -1
  445. package/dist/git-manager.d.ts +1 -2
  446. package/dist/git-manager.js +0 -1
  447. package/dist/github-service.d.ts +1 -2
  448. package/dist/github-service.js +0 -1
  449. package/dist/http/handler.d.ts +6 -7
  450. package/dist/http/handler.js +0 -1
  451. package/dist/http/index.d.ts +6 -7
  452. package/dist/http/index.js +0 -1
  453. package/dist/http/router.d.ts +2 -3
  454. package/dist/http/router.js +0 -1
  455. package/dist/http/types.d.ts +0 -1
  456. package/dist/http/types.js +0 -1
  457. package/dist/id.d.ts +2 -3
  458. package/dist/id.js +0 -1
  459. package/dist/index.d.ts +17 -18
  460. package/dist/index.js +0 -1
  461. package/dist/operating-mode/client-safe-strategy.d.ts +1 -2
  462. package/dist/operating-mode/client-safe-strategy.js +0 -1
  463. package/dist/operating-mode/client-unsafe-strategy.d.ts +1 -2
  464. package/dist/operating-mode/client-unsafe-strategy.js +0 -1
  465. package/dist/operating-mode/client.d.ts +3 -4
  466. package/dist/operating-mode/client.js +0 -1
  467. package/dist/operating-mode/deployment-name-fixtures.d.ts +0 -1
  468. package/dist/operating-mode/deployment-name-fixtures.js +0 -1
  469. package/dist/operating-mode/deployment-name.d.ts +0 -1
  470. package/dist/operating-mode/deployment-name.js +0 -1
  471. package/dist/operating-mode/index.d.ts +5 -6
  472. package/dist/operating-mode/index.js +0 -1
  473. package/dist/operating-mode/mode-env.d.ts +1 -2
  474. package/dist/operating-mode/mode-env.js +0 -1
  475. package/dist/operating-mode/types.d.ts +2 -3
  476. package/dist/operating-mode/types.js +0 -1
  477. package/dist/paths/branch-name.d.ts +1 -2
  478. package/dist/paths/branch-name.js +0 -1
  479. package/dist/paths/branch.d.ts +3 -4
  480. package/dist/paths/branch.js +0 -1
  481. package/dist/paths/index.d.ts +8 -9
  482. package/dist/paths/index.js +0 -1
  483. package/dist/paths/normalize-server.d.ts +1 -2
  484. package/dist/paths/normalize-server.js +0 -1
  485. package/dist/paths/normalize.d.ts +1 -2
  486. package/dist/paths/normalize.js +0 -1
  487. package/dist/paths/resolve.d.ts +2 -3
  488. package/dist/paths/resolve.js +0 -1
  489. package/dist/paths/types.d.ts +0 -1
  490. package/dist/paths/types.js +0 -1
  491. package/dist/paths/validation.d.ts +1 -2
  492. package/dist/paths/validation.js +0 -1
  493. package/dist/reference-resolver.d.ts +3 -4
  494. package/dist/reference-resolver.js +0 -1
  495. package/dist/resolve-canopy-user.d.ts +3 -4
  496. package/dist/resolve-canopy-user.js +0 -1
  497. package/dist/resource-generation.d.ts +0 -1
  498. package/dist/resource-generation.js +0 -1
  499. package/dist/schema/index.d.ts +3 -4
  500. package/dist/schema/index.js +0 -1
  501. package/dist/schema/meta-loader.d.ts +3 -4
  502. package/dist/schema/meta-loader.js +3 -3
  503. package/dist/schema/resolver.d.ts +2 -3
  504. package/dist/schema/resolver.js +0 -1
  505. package/dist/schema/schema-store-types.d.ts +2 -3
  506. package/dist/schema/schema-store-types.js +0 -1
  507. package/dist/schema/schema-store.d.ts +6 -7
  508. package/dist/schema/schema-store.js +33 -1
  509. package/dist/schema/types.d.ts +1 -2
  510. package/dist/schema/types.js +0 -1
  511. package/dist/server.d.ts +54 -45
  512. package/dist/server.js +11 -3
  513. package/dist/services.d.ts +10 -11
  514. package/dist/services.js +0 -1
  515. package/dist/settings-workspace.d.ts +12 -15
  516. package/dist/settings-workspace.js +10 -13
  517. package/dist/static/index.d.ts +164 -6
  518. package/dist/static/index.js +242 -7
  519. package/dist/static/seo.d.ts +8 -30
  520. package/dist/static/seo.js +19 -46
  521. package/dist/sync-core.d.ts +0 -1
  522. package/dist/sync-core.js +0 -1
  523. package/dist/task-queue/index.d.ts +2 -3
  524. package/dist/task-queue/index.js +0 -1
  525. package/dist/task-queue/task-queue.d.ts +1 -2
  526. package/dist/task-queue/task-queue.js +10 -2
  527. package/dist/task-queue/types.d.ts +0 -1
  528. package/dist/task-queue/types.js +0 -1
  529. package/dist/types.d.ts +3 -4
  530. package/dist/types.js +0 -1
  531. package/dist/url-collision.d.ts +86 -0
  532. package/dist/url-collision.js +186 -0
  533. package/dist/url-path-resolver.d.ts +11 -2
  534. package/dist/url-path-resolver.js +37 -5
  535. package/dist/user.d.ts +3 -4
  536. package/dist/user.js +0 -1
  537. package/dist/utils/async-mutex.d.ts +0 -1
  538. package/dist/utils/async-mutex.js +0 -1
  539. package/dist/utils/atomic-write.d.ts +0 -1
  540. package/dist/utils/atomic-write.js +0 -1
  541. package/dist/utils/body-field.d.ts +12 -2
  542. package/dist/utils/body-field.js +17 -1
  543. package/dist/utils/content-serialize.d.ts +37 -0
  544. package/dist/utils/content-serialize.js +429 -0
  545. package/dist/utils/content-write-lock.d.ts +12 -16
  546. package/dist/utils/content-write-lock.js +38 -22
  547. package/dist/utils/debug.d.ts +0 -1
  548. package/dist/utils/debug.js +0 -1
  549. package/dist/utils/entry-url.d.ts +17 -1
  550. package/dist/utils/entry-url.js +21 -3
  551. package/dist/utils/error.d.ts +0 -1
  552. package/dist/utils/error.js +0 -1
  553. package/dist/utils/flatten-group-fields.d.ts +1 -2
  554. package/dist/utils/flatten-group-fields.js +0 -1
  555. package/dist/utils/format.d.ts +1 -2
  556. package/dist/utils/format.js +0 -1
  557. package/dist/utils/fs.d.ts +7 -1
  558. package/dist/utils/fs.js +16 -1
  559. package/dist/utils/git.d.ts +18 -2
  560. package/dist/utils/git.js +61 -1
  561. package/dist/utils/logger.d.ts +0 -1
  562. package/dist/utils/logger.js +0 -1
  563. package/dist/utils/occ-json-write.d.ts +0 -1
  564. package/dist/utils/occ-json-write.js +0 -1
  565. package/dist/utils/provisioning-lock.d.ts +17 -4
  566. package/dist/utils/provisioning-lock.js +94 -14
  567. package/dist/utils/sanitize-href.d.ts +2 -3
  568. package/dist/utils/sanitize-href.js +2 -3
  569. package/dist/utils/title-field.d.ts +1 -2
  570. package/dist/utils/title-field.js +0 -1
  571. package/dist/utils/typed-filename.d.ts +61 -0
  572. package/dist/utils/typed-filename.js +92 -0
  573. package/dist/utils/url-prefix.d.ts +121 -0
  574. package/dist/utils/url-prefix.js +158 -0
  575. package/dist/validation/block-structural-keys.d.ts +42 -0
  576. package/dist/validation/block-structural-keys.js +44 -0
  577. package/dist/validation/deletion-checker.d.ts +4 -5
  578. package/dist/validation/deletion-checker.js +0 -1
  579. package/dist/validation/entry-link-validator.d.ts +2 -3
  580. package/dist/validation/entry-link-validator.js +0 -1
  581. package/dist/validation/entry-type-reference-validator.d.ts +1 -2
  582. package/dist/validation/entry-type-reference-validator.js +0 -1
  583. package/dist/validation/entry-validator.d.ts +23 -2
  584. package/dist/validation/entry-validator.js +34 -2
  585. package/dist/validation/field-traversal.d.ts +28 -4
  586. package/dist/validation/field-traversal.js +24 -7
  587. package/dist/validation/reference-validator.d.ts +2 -3
  588. package/dist/validation/reference-validator.js +0 -1
  589. package/dist/worker/cms-worker.d.ts +31 -2
  590. package/dist/worker/cms-worker.js +321 -13
  591. package/dist/worker/log.d.ts +0 -1
  592. package/dist/worker/log.js +0 -1
  593. package/dist/worker/task-queue-config.d.ts +1 -2
  594. package/dist/worker/task-queue-config.js +0 -1
  595. package/dist/worker/task-queue.d.ts +3 -4
  596. package/dist/worker/task-queue.js +0 -1
  597. package/dist/worker/worker-status.d.ts +1 -2
  598. package/dist/worker/worker-status.js +0 -1
  599. package/package.json +3 -6
  600. package/dist/ai/generate.d.ts.map +0 -1
  601. package/dist/ai/generate.js.map +0 -1
  602. package/dist/ai/handler.d.ts.map +0 -1
  603. package/dist/ai/handler.js.map +0 -1
  604. package/dist/ai/index.d.ts.map +0 -1
  605. package/dist/ai/index.js.map +0 -1
  606. package/dist/ai/json-to-markdown.d.ts.map +0 -1
  607. package/dist/ai/json-to-markdown.js.map +0 -1
  608. package/dist/ai/resolve-branch.d.ts.map +0 -1
  609. package/dist/ai/resolve-branch.js.map +0 -1
  610. package/dist/ai/strip-mdx.d.ts.map +0 -1
  611. package/dist/ai/strip-mdx.js.map +0 -1
  612. package/dist/ai/to-plain-text.d.ts.map +0 -1
  613. package/dist/ai/to-plain-text.js.map +0 -1
  614. package/dist/ai/transform-components.d.ts.map +0 -1
  615. package/dist/ai/transform-components.js.map +0 -1
  616. package/dist/ai/types.d.ts.map +0 -1
  617. package/dist/ai/types.js.map +0 -1
  618. package/dist/api/__test__/mock-client.d.ts +0 -231
  619. package/dist/api/__test__/mock-client.d.ts.map +0 -1
  620. package/dist/api/__test__/mock-client.js +0 -388
  621. package/dist/api/__test__/mock-client.js.map +0 -1
  622. package/dist/api/admin-branch-health.d.ts.map +0 -1
  623. package/dist/api/admin-branch-health.js.map +0 -1
  624. package/dist/api/admin.d.ts.map +0 -1
  625. package/dist/api/admin.js.map +0 -1
  626. package/dist/api/assets.d.ts.map +0 -1
  627. package/dist/api/assets.js.map +0 -1
  628. package/dist/api/branch-merge.d.ts.map +0 -1
  629. package/dist/api/branch-merge.js.map +0 -1
  630. package/dist/api/branch-review.d.ts.map +0 -1
  631. package/dist/api/branch-review.js.map +0 -1
  632. package/dist/api/branch-status.d.ts.map +0 -1
  633. package/dist/api/branch-status.js.map +0 -1
  634. package/dist/api/branch-withdraw.d.ts.map +0 -1
  635. package/dist/api/branch-withdraw.js.map +0 -1
  636. package/dist/api/branch.d.ts.map +0 -1
  637. package/dist/api/branch.js.map +0 -1
  638. package/dist/api/client.d.ts.map +0 -1
  639. package/dist/api/client.js.map +0 -1
  640. package/dist/api/comments.d.ts.map +0 -1
  641. package/dist/api/comments.js.map +0 -1
  642. package/dist/api/content.d.ts.map +0 -1
  643. package/dist/api/content.js.map +0 -1
  644. package/dist/api/entries-constants.d.ts.map +0 -1
  645. package/dist/api/entries-constants.js.map +0 -1
  646. package/dist/api/entries.d.ts.map +0 -1
  647. package/dist/api/entries.js.map +0 -1
  648. package/dist/api/github-sync.d.ts.map +0 -1
  649. package/dist/api/github-sync.js.map +0 -1
  650. package/dist/api/groups.d.ts.map +0 -1
  651. package/dist/api/groups.js.map +0 -1
  652. package/dist/api/guards.d.ts.map +0 -1
  653. package/dist/api/guards.js.map +0 -1
  654. package/dist/api/index.d.ts.map +0 -1
  655. package/dist/api/index.js.map +0 -1
  656. package/dist/api/permissions.d.ts.map +0 -1
  657. package/dist/api/permissions.js.map +0 -1
  658. package/dist/api/reference-options.d.ts.map +0 -1
  659. package/dist/api/reference-options.js.map +0 -1
  660. package/dist/api/request-body-hash.d.ts.map +0 -1
  661. package/dist/api/request-body-hash.js.map +0 -1
  662. package/dist/api/resolve-references.d.ts.map +0 -1
  663. package/dist/api/resolve-references.js.map +0 -1
  664. package/dist/api/route-builder.d.ts.map +0 -1
  665. package/dist/api/route-builder.js.map +0 -1
  666. package/dist/api/schema.d.ts.map +0 -1
  667. package/dist/api/schema.js.map +0 -1
  668. package/dist/api/settings-helpers.d.ts.map +0 -1
  669. package/dist/api/settings-helpers.js.map +0 -1
  670. package/dist/api/types.d.ts.map +0 -1
  671. package/dist/api/types.js.map +0 -1
  672. package/dist/api/user.d.ts.map +0 -1
  673. package/dist/api/user.js.map +0 -1
  674. package/dist/api/validators.d.ts.map +0 -1
  675. package/dist/api/validators.js.map +0 -1
  676. package/dist/assets/asset-prefixes.d.ts.map +0 -1
  677. package/dist/assets/asset-prefixes.js.map +0 -1
  678. package/dist/assets/asset-src.d.ts.map +0 -1
  679. package/dist/assets/asset-src.js.map +0 -1
  680. package/dist/assets/asset-url.d.ts.map +0 -1
  681. package/dist/assets/asset-url.js.map +0 -1
  682. package/dist/assets/factory.d.ts.map +0 -1
  683. package/dist/assets/factory.js.map +0 -1
  684. package/dist/assets/finalize.d.ts.map +0 -1
  685. package/dist/assets/finalize.js.map +0 -1
  686. package/dist/assets/index.d.ts.map +0 -1
  687. package/dist/assets/index.js.map +0 -1
  688. package/dist/assets/keys.d.ts.map +0 -1
  689. package/dist/assets/keys.js.map +0 -1
  690. package/dist/assets/pipeline.d.ts.map +0 -1
  691. package/dist/assets/pipeline.js.map +0 -1
  692. package/dist/assets/store-local.d.ts.map +0 -1
  693. package/dist/assets/store-local.js.map +0 -1
  694. package/dist/assets/store-s3.d.ts.map +0 -1
  695. package/dist/assets/store-s3.js.map +0 -1
  696. package/dist/assets/svg-sanitizer.d.ts.map +0 -1
  697. package/dist/assets/svg-sanitizer.js.map +0 -1
  698. package/dist/assets/transform-directives.d.ts.map +0 -1
  699. package/dist/assets/transform-directives.js.map +0 -1
  700. package/dist/assets/transform.d.ts.map +0 -1
  701. package/dist/assets/transform.js.map +0 -1
  702. package/dist/assets/types.d.ts.map +0 -1
  703. package/dist/assets/types.js.map +0 -1
  704. package/dist/auth/cache.d.ts.map +0 -1
  705. package/dist/auth/cache.js.map +0 -1
  706. package/dist/auth/caching-auth-plugin.d.ts.map +0 -1
  707. package/dist/auth/caching-auth-plugin.js.map +0 -1
  708. package/dist/auth/context-helpers.d.ts.map +0 -1
  709. package/dist/auth/context-helpers.js.map +0 -1
  710. package/dist/auth/file-based-auth-cache.d.ts.map +0 -1
  711. package/dist/auth/file-based-auth-cache.js.map +0 -1
  712. package/dist/auth/index.d.ts.map +0 -1
  713. package/dist/auth/index.js.map +0 -1
  714. package/dist/auth/plugin.d.ts.map +0 -1
  715. package/dist/auth/plugin.js.map +0 -1
  716. package/dist/auth/types.d.ts.map +0 -1
  717. package/dist/auth/types.js.map +0 -1
  718. package/dist/authorization/branch.d.ts.map +0 -1
  719. package/dist/authorization/branch.js.map +0 -1
  720. package/dist/authorization/content.d.ts.map +0 -1
  721. package/dist/authorization/content.js.map +0 -1
  722. package/dist/authorization/groups/index.d.ts.map +0 -1
  723. package/dist/authorization/groups/index.js.map +0 -1
  724. package/dist/authorization/groups/loader.d.ts.map +0 -1
  725. package/dist/authorization/groups/loader.js.map +0 -1
  726. package/dist/authorization/groups/schema.d.ts.map +0 -1
  727. package/dist/authorization/groups/schema.js.map +0 -1
  728. package/dist/authorization/helpers.d.ts.map +0 -1
  729. package/dist/authorization/helpers.js.map +0 -1
  730. package/dist/authorization/index.d.ts.map +0 -1
  731. package/dist/authorization/index.js.map +0 -1
  732. package/dist/authorization/path.d.ts.map +0 -1
  733. package/dist/authorization/path.js.map +0 -1
  734. package/dist/authorization/permissions/index.d.ts.map +0 -1
  735. package/dist/authorization/permissions/index.js.map +0 -1
  736. package/dist/authorization/permissions/loader.d.ts.map +0 -1
  737. package/dist/authorization/permissions/loader.js.map +0 -1
  738. package/dist/authorization/permissions/schema.d.ts.map +0 -1
  739. package/dist/authorization/permissions/schema.js.map +0 -1
  740. package/dist/authorization/protected-branch.d.ts.map +0 -1
  741. package/dist/authorization/protected-branch.js.map +0 -1
  742. package/dist/authorization/settings-file-store.d.ts.map +0 -1
  743. package/dist/authorization/settings-file-store.js.map +0 -1
  744. package/dist/authorization/test-utils.d.ts +0 -26
  745. package/dist/authorization/test-utils.d.ts.map +0 -1
  746. package/dist/authorization/test-utils.js +0 -23
  747. package/dist/authorization/test-utils.js.map +0 -1
  748. package/dist/authorization/types.d.ts.map +0 -1
  749. package/dist/authorization/types.js.map +0 -1
  750. package/dist/authorization/validation.d.ts.map +0 -1
  751. package/dist/authorization/validation.js.map +0 -1
  752. package/dist/branch-health.d.ts.map +0 -1
  753. package/dist/branch-health.js.map +0 -1
  754. package/dist/branch-metadata.d.ts.map +0 -1
  755. package/dist/branch-metadata.js.map +0 -1
  756. package/dist/branch-registry.d.ts.map +0 -1
  757. package/dist/branch-registry.js.map +0 -1
  758. package/dist/branch-schema-cache.d.ts.map +0 -1
  759. package/dist/branch-schema-cache.js.map +0 -1
  760. package/dist/branch-workspace.d.ts.map +0 -1
  761. package/dist/branch-workspace.js.map +0 -1
  762. package/dist/build/generate-ai-content.d.ts.map +0 -1
  763. package/dist/build/generate-ai-content.js.map +0 -1
  764. package/dist/build/index.d.ts.map +0 -1
  765. package/dist/build/index.js.map +0 -1
  766. package/dist/build-canopy.d.ts.map +0 -1
  767. package/dist/build-canopy.js.map +0 -1
  768. package/dist/build-mode.d.ts.map +0 -1
  769. package/dist/build-mode.js.map +0 -1
  770. package/dist/cli/cli.d.ts.map +0 -1
  771. package/dist/cli/cli.js.map +0 -1
  772. package/dist/cli/generate-ai-content.d.ts.map +0 -1
  773. package/dist/cli/generate-ai-content.js.map +0 -1
  774. package/dist/cli/init.d.ts.map +0 -1
  775. package/dist/cli/init.js.map +0 -1
  776. package/dist/cli/migrate.d.ts.map +0 -1
  777. package/dist/cli/migrate.js.map +0 -1
  778. package/dist/cli/project-detect.d.ts.map +0 -1
  779. package/dist/cli/project-detect.js.map +0 -1
  780. package/dist/cli/project-root.d.ts.map +0 -1
  781. package/dist/cli/project-root.js.map +0 -1
  782. package/dist/cli/sync.d.ts.map +0 -1
  783. package/dist/cli/sync.js.map +0 -1
  784. package/dist/cli/templates.d.ts.map +0 -1
  785. package/dist/cli/templates.js.map +0 -1
  786. package/dist/client.d.ts.map +0 -1
  787. package/dist/client.js.map +0 -1
  788. package/dist/comment-store.d.ts.map +0 -1
  789. package/dist/comment-store.js.map +0 -1
  790. package/dist/config/flatten.d.ts.map +0 -1
  791. package/dist/config/flatten.js.map +0 -1
  792. package/dist/config/helpers.d.ts.map +0 -1
  793. package/dist/config/helpers.js.map +0 -1
  794. package/dist/config/index.d.ts.map +0 -1
  795. package/dist/config/index.js.map +0 -1
  796. package/dist/config/schemas/collection.d.ts.map +0 -1
  797. package/dist/config/schemas/collection.js.map +0 -1
  798. package/dist/config/schemas/config.d.ts.map +0 -1
  799. package/dist/config/schemas/config.js.map +0 -1
  800. package/dist/config/schemas/field.d.ts.map +0 -1
  801. package/dist/config/schemas/field.js.map +0 -1
  802. package/dist/config/schemas/media.d.ts.map +0 -1
  803. package/dist/config/schemas/media.js.map +0 -1
  804. package/dist/config/schemas/permissions.d.ts.map +0 -1
  805. package/dist/config/schemas/permissions.js.map +0 -1
  806. package/dist/config/types.d.ts.map +0 -1
  807. package/dist/config/types.js.map +0 -1
  808. package/dist/config/validation.d.ts.map +0 -1
  809. package/dist/config/validation.js.map +0 -1
  810. package/dist/config-test.d.ts +0 -20
  811. package/dist/config-test.d.ts.map +0 -1
  812. package/dist/config-test.js +0 -49
  813. package/dist/config-test.js.map +0 -1
  814. package/dist/config.d.ts.map +0 -1
  815. package/dist/config.js.map +0 -1
  816. package/dist/content-id-index.d.ts.map +0 -1
  817. package/dist/content-id-index.js.map +0 -1
  818. package/dist/content-index-generation.d.ts.map +0 -1
  819. package/dist/content-index-generation.js.map +0 -1
  820. package/dist/content-index-registry.d.ts.map +0 -1
  821. package/dist/content-index-registry.js.map +0 -1
  822. package/dist/content-listing.d.ts.map +0 -1
  823. package/dist/content-listing.js.map +0 -1
  824. package/dist/content-reader.d.ts.map +0 -1
  825. package/dist/content-reader.js.map +0 -1
  826. package/dist/content-store.d.ts.map +0 -1
  827. package/dist/content-store.js.map +0 -1
  828. package/dist/content-tree.d.ts.map +0 -1
  829. package/dist/content-tree.js.map +0 -1
  830. package/dist/context.d.ts.map +0 -1
  831. package/dist/context.js.map +0 -1
  832. package/dist/dev-content-watcher.d.ts.map +0 -1
  833. package/dist/dev-content-watcher.js.map +0 -1
  834. package/dist/editor/BranchManager.d.ts.map +0 -1
  835. package/dist/editor/BranchManager.js.map +0 -1
  836. package/dist/editor/CanopyEditor.d.ts.map +0 -1
  837. package/dist/editor/CanopyEditor.js.map +0 -1
  838. package/dist/editor/CanopyEditorPage.d.ts.map +0 -1
  839. package/dist/editor/CanopyEditorPage.js.map +0 -1
  840. package/dist/editor/CommentsPanel.d.ts.map +0 -1
  841. package/dist/editor/CommentsPanel.js.map +0 -1
  842. package/dist/editor/Editor.d.ts.map +0 -1
  843. package/dist/editor/Editor.js.map +0 -1
  844. package/dist/editor/EditorPanes.d.ts.map +0 -1
  845. package/dist/editor/EditorPanes.js.map +0 -1
  846. package/dist/editor/EntryNavigator.d.ts.map +0 -1
  847. package/dist/editor/EntryNavigator.js.map +0 -1
  848. package/dist/editor/FormRenderer.d.ts.map +0 -1
  849. package/dist/editor/FormRenderer.js.map +0 -1
  850. package/dist/editor/GroupManager.d.ts.map +0 -1
  851. package/dist/editor/GroupManager.js.map +0 -1
  852. package/dist/editor/PermissionManager.d.ts.map +0 -1
  853. package/dist/editor/PermissionManager.js.map +0 -1
  854. package/dist/editor/admin/SystemHealthPanel.d.ts.map +0 -1
  855. package/dist/editor/admin/SystemHealthPanel.js.map +0 -1
  856. package/dist/editor/admin/useSystemHealth.d.ts.map +0 -1
  857. package/dist/editor/admin/useSystemHealth.js.map +0 -1
  858. package/dist/editor/canopy-path.d.ts.map +0 -1
  859. package/dist/editor/canopy-path.js.map +0 -1
  860. package/dist/editor/client-reference-resolver.d.ts.map +0 -1
  861. package/dist/editor/client-reference-resolver.js.map +0 -1
  862. package/dist/editor/comments/BranchComments.d.ts.map +0 -1
  863. package/dist/editor/comments/BranchComments.js.map +0 -1
  864. package/dist/editor/comments/EntryComments.d.ts.map +0 -1
  865. package/dist/editor/comments/EntryComments.js.map +0 -1
  866. package/dist/editor/comments/FieldWrapper.d.ts.map +0 -1
  867. package/dist/editor/comments/FieldWrapper.js.map +0 -1
  868. package/dist/editor/comments/InlineCommentThread.d.ts.map +0 -1
  869. package/dist/editor/comments/InlineCommentThread.js.map +0 -1
  870. package/dist/editor/comments/ThreadCarousel.d.ts.map +0 -1
  871. package/dist/editor/comments/ThreadCarousel.js.map +0 -1
  872. package/dist/editor/components/ConfirmDeleteModal.d.ts.map +0 -1
  873. package/dist/editor/components/ConfirmDeleteModal.js.map +0 -1
  874. package/dist/editor/components/EditorFooter.d.ts.map +0 -1
  875. package/dist/editor/components/EditorFooter.js.map +0 -1
  876. package/dist/editor/components/EditorHeader.d.ts.map +0 -1
  877. package/dist/editor/components/EditorHeader.js.map +0 -1
  878. package/dist/editor/components/EditorSidebar.d.ts.map +0 -1
  879. package/dist/editor/components/EditorSidebar.js.map +0 -1
  880. package/dist/editor/components/EntryCreateModal.d.ts.map +0 -1
  881. package/dist/editor/components/EntryCreateModal.js.map +0 -1
  882. package/dist/editor/components/RenameEntryModal.d.ts.map +0 -1
  883. package/dist/editor/components/RenameEntryModal.js.map +0 -1
  884. package/dist/editor/components/UserBadge.d.ts.map +0 -1
  885. package/dist/editor/components/UserBadge.js.map +0 -1
  886. package/dist/editor/components/index.d.ts.map +0 -1
  887. package/dist/editor/components/index.js.map +0 -1
  888. package/dist/editor/context/ApiClientContext.d.ts.map +0 -1
  889. package/dist/editor/context/ApiClientContext.js.map +0 -1
  890. package/dist/editor/context/AssetContext.d.ts.map +0 -1
  891. package/dist/editor/context/AssetContext.js.map +0 -1
  892. package/dist/editor/context/EditorStateContext.d.ts.map +0 -1
  893. package/dist/editor/context/EditorStateContext.js.map +0 -1
  894. package/dist/editor/context/SWRProvider.d.ts.map +0 -1
  895. package/dist/editor/context/SWRProvider.js.map +0 -1
  896. package/dist/editor/context/index.d.ts.map +0 -1
  897. package/dist/editor/context/index.js.map +0 -1
  898. package/dist/editor/editor-config.d.ts.map +0 -1
  899. package/dist/editor/editor-config.js.map +0 -1
  900. package/dist/editor/editor-utils.d.ts.map +0 -1
  901. package/dist/editor/editor-utils.js.map +0 -1
  902. package/dist/editor/fields/BlockField.d.ts.map +0 -1
  903. package/dist/editor/fields/BlockField.js.map +0 -1
  904. package/dist/editor/fields/CodeField.d.ts.map +0 -1
  905. package/dist/editor/fields/CodeField.js.map +0 -1
  906. package/dist/editor/fields/DateTimeField.d.ts.map +0 -1
  907. package/dist/editor/fields/DateTimeField.js.map +0 -1
  908. package/dist/editor/fields/ImageField.d.ts.map +0 -1
  909. package/dist/editor/fields/ImageField.js.map +0 -1
  910. package/dist/editor/fields/InlineGroupField.d.ts.map +0 -1
  911. package/dist/editor/fields/InlineGroupField.js.map +0 -1
  912. package/dist/editor/fields/MarkdownField.d.ts.map +0 -1
  913. package/dist/editor/fields/MarkdownField.js.map +0 -1
  914. package/dist/editor/fields/MdxImageDialog.d.ts.map +0 -1
  915. package/dist/editor/fields/MdxImageDialog.js.map +0 -1
  916. package/dist/editor/fields/NumberField.d.ts.map +0 -1
  917. package/dist/editor/fields/NumberField.js.map +0 -1
  918. package/dist/editor/fields/NumberListField.d.ts.map +0 -1
  919. package/dist/editor/fields/NumberListField.js.map +0 -1
  920. package/dist/editor/fields/ObjectField.d.ts.map +0 -1
  921. package/dist/editor/fields/ObjectField.js.map +0 -1
  922. package/dist/editor/fields/ReferenceField.d.ts.map +0 -1
  923. package/dist/editor/fields/ReferenceField.js.map +0 -1
  924. package/dist/editor/fields/SelectField.d.ts.map +0 -1
  925. package/dist/editor/fields/SelectField.js.map +0 -1
  926. package/dist/editor/fields/StringListField.d.ts.map +0 -1
  927. package/dist/editor/fields/StringListField.js.map +0 -1
  928. package/dist/editor/fields/TextField.d.ts.map +0 -1
  929. package/dist/editor/fields/TextField.js.map +0 -1
  930. package/dist/editor/fields/ToggleField.d.ts.map +0 -1
  931. package/dist/editor/fields/ToggleField.js.map +0 -1
  932. package/dist/editor/fields/entry-link/EntryLinkContext.d.ts.map +0 -1
  933. package/dist/editor/fields/entry-link/EntryLinkContext.js.map +0 -1
  934. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts.map +0 -1
  935. package/dist/editor/fields/entry-link/InsertEntryLink.js.map +0 -1
  936. package/dist/editor/fields/entry-link/index.d.ts.map +0 -1
  937. package/dist/editor/fields/entry-link/index.js.map +0 -1
  938. package/dist/editor/group-manager/ExternalGroupsTab.d.ts.map +0 -1
  939. package/dist/editor/group-manager/ExternalGroupsTab.js.map +0 -1
  940. package/dist/editor/group-manager/GroupCard.d.ts.map +0 -1
  941. package/dist/editor/group-manager/GroupCard.js.map +0 -1
  942. package/dist/editor/group-manager/GroupForm.d.ts.map +0 -1
  943. package/dist/editor/group-manager/GroupForm.js.map +0 -1
  944. package/dist/editor/group-manager/InternalGroupsTab.d.ts.map +0 -1
  945. package/dist/editor/group-manager/InternalGroupsTab.js.map +0 -1
  946. package/dist/editor/group-manager/MemberList.d.ts.map +0 -1
  947. package/dist/editor/group-manager/MemberList.js.map +0 -1
  948. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts.map +0 -1
  949. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js.map +0 -1
  950. package/dist/editor/group-manager/hooks/useGroupState.d.ts.map +0 -1
  951. package/dist/editor/group-manager/hooks/useGroupState.js.map +0 -1
  952. package/dist/editor/group-manager/hooks/useUserSearch.d.ts.map +0 -1
  953. package/dist/editor/group-manager/hooks/useUserSearch.js.map +0 -1
  954. package/dist/editor/group-manager/index.d.ts.map +0 -1
  955. package/dist/editor/group-manager/index.js.map +0 -1
  956. package/dist/editor/group-manager/types.d.ts.map +0 -1
  957. package/dist/editor/group-manager/types.js.map +0 -1
  958. package/dist/editor/hooks/__test__/test-utils.d.ts +0 -164
  959. package/dist/editor/hooks/__test__/test-utils.d.ts.map +0 -1
  960. package/dist/editor/hooks/__test__/test-utils.js +0 -203
  961. package/dist/editor/hooks/__test__/test-utils.js.map +0 -1
  962. package/dist/editor/hooks/index.d.ts.map +0 -1
  963. package/dist/editor/hooks/index.js.map +0 -1
  964. package/dist/editor/hooks/useBranchActions.d.ts.map +0 -1
  965. package/dist/editor/hooks/useBranchActions.js.map +0 -1
  966. package/dist/editor/hooks/useBranchManager.d.ts.map +0 -1
  967. package/dist/editor/hooks/useBranchManager.js.map +0 -1
  968. package/dist/editor/hooks/useBranchesData.d.ts.map +0 -1
  969. package/dist/editor/hooks/useBranchesData.js.map +0 -1
  970. package/dist/editor/hooks/useCommentSystem.d.ts.map +0 -1
  971. package/dist/editor/hooks/useCommentSystem.js.map +0 -1
  972. package/dist/editor/hooks/useCommentsData.d.ts.map +0 -1
  973. package/dist/editor/hooks/useCommentsData.js.map +0 -1
  974. package/dist/editor/hooks/useDraftManager.d.ts.map +0 -1
  975. package/dist/editor/hooks/useDraftManager.js.map +0 -1
  976. package/dist/editor/hooks/useEditorLayout.d.ts.map +0 -1
  977. package/dist/editor/hooks/useEditorLayout.js.map +0 -1
  978. package/dist/editor/hooks/useEntriesData.d.ts.map +0 -1
  979. package/dist/editor/hooks/useEntriesData.js.map +0 -1
  980. package/dist/editor/hooks/useEntryLinkResolution.d.ts.map +0 -1
  981. package/dist/editor/hooks/useEntryLinkResolution.js.map +0 -1
  982. package/dist/editor/hooks/useEntryManager.d.ts.map +0 -1
  983. package/dist/editor/hooks/useEntryManager.js.map +0 -1
  984. package/dist/editor/hooks/useGroupManager.d.ts.map +0 -1
  985. package/dist/editor/hooks/useGroupManager.js.map +0 -1
  986. package/dist/editor/hooks/usePermissionManager.d.ts.map +0 -1
  987. package/dist/editor/hooks/usePermissionManager.js.map +0 -1
  988. package/dist/editor/hooks/useReferenceResolution.d.ts.map +0 -1
  989. package/dist/editor/hooks/useReferenceResolution.js.map +0 -1
  990. package/dist/editor/hooks/useSchemaManager.d.ts.map +0 -1
  991. package/dist/editor/hooks/useSchemaManager.js.map +0 -1
  992. package/dist/editor/hooks/useUserContext.d.ts.map +0 -1
  993. package/dist/editor/hooks/useUserContext.js.map +0 -1
  994. package/dist/editor/hooks/useUserMetadata.d.ts.map +0 -1
  995. package/dist/editor/hooks/useUserMetadata.js.map +0 -1
  996. package/dist/editor/media/AssetCard.d.ts.map +0 -1
  997. package/dist/editor/media/AssetCard.js.map +0 -1
  998. package/dist/editor/media/CropStep.d.ts.map +0 -1
  999. package/dist/editor/media/CropStep.js.map +0 -1
  1000. package/dist/editor/media/MediaLibrary.d.ts.map +0 -1
  1001. package/dist/editor/media/MediaLibrary.js.map +0 -1
  1002. package/dist/editor/media/MediaLibraryBody.d.ts.map +0 -1
  1003. package/dist/editor/media/MediaLibraryBody.js.map +0 -1
  1004. package/dist/editor/media/crop-math.d.ts.map +0 -1
  1005. package/dist/editor/media/crop-math.js.map +0 -1
  1006. package/dist/editor/media/upload-asset.d.ts.map +0 -1
  1007. package/dist/editor/media/upload-asset.js.map +0 -1
  1008. package/dist/editor/media/upload-constants.d.ts.map +0 -1
  1009. package/dist/editor/media/upload-constants.js.map +0 -1
  1010. package/dist/editor/media/useAssetUpload.d.ts.map +0 -1
  1011. package/dist/editor/media/useAssetUpload.js.map +0 -1
  1012. package/dist/editor/media/xhr-upload.d.ts.map +0 -1
  1013. package/dist/editor/media/xhr-upload.js.map +0 -1
  1014. package/dist/editor/permission-manager/GroupSelector.d.ts.map +0 -1
  1015. package/dist/editor/permission-manager/GroupSelector.js.map +0 -1
  1016. package/dist/editor/permission-manager/PermissionEditor.d.ts.map +0 -1
  1017. package/dist/editor/permission-manager/PermissionEditor.js.map +0 -1
  1018. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts.map +0 -1
  1019. package/dist/editor/permission-manager/PermissionLevelBadge.js.map +0 -1
  1020. package/dist/editor/permission-manager/PermissionTree.d.ts.map +0 -1
  1021. package/dist/editor/permission-manager/PermissionTree.js.map +0 -1
  1022. package/dist/editor/permission-manager/UserSelector.d.ts.map +0 -1
  1023. package/dist/editor/permission-manager/UserSelector.js.map +0 -1
  1024. package/dist/editor/permission-manager/constants.d.ts.map +0 -1
  1025. package/dist/editor/permission-manager/constants.js.map +0 -1
  1026. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts.map +0 -1
  1027. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js.map +0 -1
  1028. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts.map +0 -1
  1029. package/dist/editor/permission-manager/hooks/usePermissionTree.js.map +0 -1
  1030. package/dist/editor/permission-manager/index.d.ts.map +0 -1
  1031. package/dist/editor/permission-manager/index.js.map +0 -1
  1032. package/dist/editor/permission-manager/types.d.ts.map +0 -1
  1033. package/dist/editor/permission-manager/types.js.map +0 -1
  1034. package/dist/editor/permission-manager/utils.d.ts.map +0 -1
  1035. package/dist/editor/permission-manager/utils.js.map +0 -1
  1036. package/dist/editor/preview-bridge.d.ts.map +0 -1
  1037. package/dist/editor/preview-bridge.js.map +0 -1
  1038. package/dist/editor/relative-time.d.ts.map +0 -1
  1039. package/dist/editor/relative-time.js.map +0 -1
  1040. package/dist/editor/schema-editor/CollectionEditor.d.ts.map +0 -1
  1041. package/dist/editor/schema-editor/CollectionEditor.js.map +0 -1
  1042. package/dist/editor/schema-editor/EntryTypeEditor.d.ts.map +0 -1
  1043. package/dist/editor/schema-editor/EntryTypeEditor.js.map +0 -1
  1044. package/dist/editor/schema-editor/index.d.ts.map +0 -1
  1045. package/dist/editor/schema-editor/index.js.map +0 -1
  1046. package/dist/editor/setup-test-dom.d.ts +0 -1
  1047. package/dist/editor/setup-test-dom.d.ts.map +0 -1
  1048. package/dist/editor/setup-test-dom.js +0 -12
  1049. package/dist/editor/setup-test-dom.js.map +0 -1
  1050. package/dist/editor/test-setup.d.ts +0 -6
  1051. package/dist/editor/test-setup.d.ts.map +0 -1
  1052. package/dist/editor/test-setup.js +0 -42
  1053. package/dist/editor/test-setup.js.map +0 -1
  1054. package/dist/editor/theme.d.ts.map +0 -1
  1055. package/dist/editor/theme.js.map +0 -1
  1056. package/dist/editor/utils/env.d.ts.map +0 -1
  1057. package/dist/editor/utils/env.js.map +0 -1
  1058. package/dist/entry-link-resolver.d.ts.map +0 -1
  1059. package/dist/entry-link-resolver.js.map +0 -1
  1060. package/dist/entry-schema-registry.d.ts.map +0 -1
  1061. package/dist/entry-schema-registry.js.map +0 -1
  1062. package/dist/entry-schema.d.ts.map +0 -1
  1063. package/dist/entry-schema.js.map +0 -1
  1064. package/dist/git-manager.d.ts.map +0 -1
  1065. package/dist/git-manager.js.map +0 -1
  1066. package/dist/github-service.d.ts.map +0 -1
  1067. package/dist/github-service.js.map +0 -1
  1068. package/dist/http/handler.d.ts.map +0 -1
  1069. package/dist/http/handler.js.map +0 -1
  1070. package/dist/http/index.d.ts.map +0 -1
  1071. package/dist/http/index.js.map +0 -1
  1072. package/dist/http/router.d.ts.map +0 -1
  1073. package/dist/http/router.js.map +0 -1
  1074. package/dist/http/types.d.ts.map +0 -1
  1075. package/dist/http/types.js.map +0 -1
  1076. package/dist/id.d.ts.map +0 -1
  1077. package/dist/id.js.map +0 -1
  1078. package/dist/index.d.ts.map +0 -1
  1079. package/dist/index.js.map +0 -1
  1080. package/dist/operating-mode/client-safe-strategy.d.ts.map +0 -1
  1081. package/dist/operating-mode/client-safe-strategy.js.map +0 -1
  1082. package/dist/operating-mode/client-unsafe-strategy.d.ts.map +0 -1
  1083. package/dist/operating-mode/client-unsafe-strategy.js.map +0 -1
  1084. package/dist/operating-mode/client.d.ts.map +0 -1
  1085. package/dist/operating-mode/client.js.map +0 -1
  1086. package/dist/operating-mode/deployment-name-fixtures.d.ts.map +0 -1
  1087. package/dist/operating-mode/deployment-name-fixtures.js.map +0 -1
  1088. package/dist/operating-mode/deployment-name.d.ts.map +0 -1
  1089. package/dist/operating-mode/deployment-name.js.map +0 -1
  1090. package/dist/operating-mode/index.d.ts.map +0 -1
  1091. package/dist/operating-mode/index.js.map +0 -1
  1092. package/dist/operating-mode/mode-env.d.ts.map +0 -1
  1093. package/dist/operating-mode/mode-env.js.map +0 -1
  1094. package/dist/operating-mode/types.d.ts.map +0 -1
  1095. package/dist/operating-mode/types.js.map +0 -1
  1096. package/dist/paths/branch-name.d.ts.map +0 -1
  1097. package/dist/paths/branch-name.js.map +0 -1
  1098. package/dist/paths/branch.d.ts.map +0 -1
  1099. package/dist/paths/branch.js.map +0 -1
  1100. package/dist/paths/index.d.ts.map +0 -1
  1101. package/dist/paths/index.js.map +0 -1
  1102. package/dist/paths/normalize-server.d.ts.map +0 -1
  1103. package/dist/paths/normalize-server.js.map +0 -1
  1104. package/dist/paths/normalize.d.ts.map +0 -1
  1105. package/dist/paths/normalize.js.map +0 -1
  1106. package/dist/paths/resolve.d.ts.map +0 -1
  1107. package/dist/paths/resolve.js.map +0 -1
  1108. package/dist/paths/test-utils.d.ts +0 -22
  1109. package/dist/paths/test-utils.d.ts.map +0 -1
  1110. package/dist/paths/test-utils.js +0 -21
  1111. package/dist/paths/test-utils.js.map +0 -1
  1112. package/dist/paths/types.d.ts.map +0 -1
  1113. package/dist/paths/types.js.map +0 -1
  1114. package/dist/paths/validation.d.ts.map +0 -1
  1115. package/dist/paths/validation.js.map +0 -1
  1116. package/dist/reference-resolver.d.ts.map +0 -1
  1117. package/dist/reference-resolver.js.map +0 -1
  1118. package/dist/resolve-canopy-user.d.ts.map +0 -1
  1119. package/dist/resolve-canopy-user.js.map +0 -1
  1120. package/dist/resource-generation.d.ts.map +0 -1
  1121. package/dist/resource-generation.js.map +0 -1
  1122. package/dist/schema/index.d.ts.map +0 -1
  1123. package/dist/schema/index.js.map +0 -1
  1124. package/dist/schema/meta-loader.d.ts.map +0 -1
  1125. package/dist/schema/meta-loader.js.map +0 -1
  1126. package/dist/schema/resolver.d.ts.map +0 -1
  1127. package/dist/schema/resolver.js.map +0 -1
  1128. package/dist/schema/schema-store-types.d.ts.map +0 -1
  1129. package/dist/schema/schema-store-types.js.map +0 -1
  1130. package/dist/schema/schema-store.d.ts.map +0 -1
  1131. package/dist/schema/schema-store.js.map +0 -1
  1132. package/dist/schema/types.d.ts.map +0 -1
  1133. package/dist/schema/types.js.map +0 -1
  1134. package/dist/server.d.ts.map +0 -1
  1135. package/dist/server.js.map +0 -1
  1136. package/dist/services.d.ts.map +0 -1
  1137. package/dist/services.js.map +0 -1
  1138. package/dist/settings-workspace.d.ts.map +0 -1
  1139. package/dist/settings-workspace.js.map +0 -1
  1140. package/dist/static/index.d.ts.map +0 -1
  1141. package/dist/static/index.js.map +0 -1
  1142. package/dist/static/seo.d.ts.map +0 -1
  1143. package/dist/static/seo.js.map +0 -1
  1144. package/dist/sync-core.d.ts.map +0 -1
  1145. package/dist/sync-core.js.map +0 -1
  1146. package/dist/task-queue/index.d.ts.map +0 -1
  1147. package/dist/task-queue/index.js.map +0 -1
  1148. package/dist/task-queue/task-queue.d.ts.map +0 -1
  1149. package/dist/task-queue/task-queue.js.map +0 -1
  1150. package/dist/task-queue/types.d.ts.map +0 -1
  1151. package/dist/task-queue/types.js.map +0 -1
  1152. package/dist/types.d.ts.map +0 -1
  1153. package/dist/types.js.map +0 -1
  1154. package/dist/url-path-resolver.d.ts.map +0 -1
  1155. package/dist/url-path-resolver.js.map +0 -1
  1156. package/dist/user.d.ts.map +0 -1
  1157. package/dist/user.js.map +0 -1
  1158. package/dist/utils/async-mutex.d.ts.map +0 -1
  1159. package/dist/utils/async-mutex.js.map +0 -1
  1160. package/dist/utils/atomic-write.d.ts.map +0 -1
  1161. package/dist/utils/atomic-write.js.map +0 -1
  1162. package/dist/utils/body-field.d.ts.map +0 -1
  1163. package/dist/utils/body-field.js.map +0 -1
  1164. package/dist/utils/content-write-lock.d.ts.map +0 -1
  1165. package/dist/utils/content-write-lock.js.map +0 -1
  1166. package/dist/utils/debug.d.ts.map +0 -1
  1167. package/dist/utils/debug.js.map +0 -1
  1168. package/dist/utils/entry-url.d.ts.map +0 -1
  1169. package/dist/utils/entry-url.js.map +0 -1
  1170. package/dist/utils/error.d.ts.map +0 -1
  1171. package/dist/utils/error.js.map +0 -1
  1172. package/dist/utils/flatten-group-fields.d.ts.map +0 -1
  1173. package/dist/utils/flatten-group-fields.js.map +0 -1
  1174. package/dist/utils/format.d.ts.map +0 -1
  1175. package/dist/utils/format.js.map +0 -1
  1176. package/dist/utils/fs.d.ts.map +0 -1
  1177. package/dist/utils/fs.js.map +0 -1
  1178. package/dist/utils/git.d.ts.map +0 -1
  1179. package/dist/utils/git.js.map +0 -1
  1180. package/dist/utils/logger.d.ts.map +0 -1
  1181. package/dist/utils/logger.js.map +0 -1
  1182. package/dist/utils/occ-json-write.d.ts.map +0 -1
  1183. package/dist/utils/occ-json-write.js.map +0 -1
  1184. package/dist/utils/provisioning-lock.d.ts.map +0 -1
  1185. package/dist/utils/provisioning-lock.js.map +0 -1
  1186. package/dist/utils/sanitize-href.d.ts.map +0 -1
  1187. package/dist/utils/sanitize-href.js.map +0 -1
  1188. package/dist/utils/title-field.d.ts.map +0 -1
  1189. package/dist/utils/title-field.js.map +0 -1
  1190. package/dist/validation/deletion-checker.d.ts.map +0 -1
  1191. package/dist/validation/deletion-checker.js.map +0 -1
  1192. package/dist/validation/entry-link-validator.d.ts.map +0 -1
  1193. package/dist/validation/entry-link-validator.js.map +0 -1
  1194. package/dist/validation/entry-type-reference-validator.d.ts.map +0 -1
  1195. package/dist/validation/entry-type-reference-validator.js.map +0 -1
  1196. package/dist/validation/entry-validator.d.ts.map +0 -1
  1197. package/dist/validation/entry-validator.js.map +0 -1
  1198. package/dist/validation/field-traversal.d.ts.map +0 -1
  1199. package/dist/validation/field-traversal.js.map +0 -1
  1200. package/dist/validation/reference-validator.d.ts.map +0 -1
  1201. package/dist/validation/reference-validator.js.map +0 -1
  1202. package/dist/worker/cms-worker.d.ts.map +0 -1
  1203. package/dist/worker/cms-worker.js.map +0 -1
  1204. package/dist/worker/log.d.ts.map +0 -1
  1205. package/dist/worker/log.js.map +0 -1
  1206. package/dist/worker/task-queue-config.d.ts.map +0 -1
  1207. package/dist/worker/task-queue-config.js.map +0 -1
  1208. package/dist/worker/task-queue.d.ts.map +0 -1
  1209. package/dist/worker/task-queue.js.map +0 -1
  1210. package/dist/worker/worker-status.d.ts.map +0 -1
  1211. package/dist/worker/worker-status.js.map +0 -1
@@ -1,12 +1,12 @@
1
- import type { CanopyConfig } from './config';
2
- import type { EntrySchemaRegistry } from './schema/types';
3
- import type { BranchContext } from './types';
4
- import type { CanopyUser } from './user';
5
- import { createCheckBranchAccess, createCheckContentAccess, type ContentAccessChecker } from './authorization';
6
- import { GitManager } from './git-manager';
7
- import { BranchRegistry } from './branch-registry';
8
- import { type GitHubService } from './github-service';
9
- import { BranchSchemaCache } from './branch-schema-cache';
1
+ import type { CanopyConfig } from './config/index.js';
2
+ import type { EntrySchemaRegistry } from './schema/types.js';
3
+ import type { BranchContext } from './types.js';
4
+ import type { CanopyUser } from './user.js';
5
+ import { createCheckBranchAccess, createCheckContentAccess, type ContentAccessChecker } from './authorization/index.js';
6
+ import { GitManager } from './git-manager.js';
7
+ import { BranchRegistry } from './branch-registry.js';
8
+ import { type GitHubService } from './github-service.js';
9
+ import { BranchSchemaCache } from './branch-schema-cache.js';
10
10
  /**
11
11
  * Parse bootstrap admin IDs from environment variable.
12
12
  * These users are always treated as Admins regardless of group membership.
@@ -23,7 +23,7 @@ export interface CanopyServices {
23
23
  /** Entry schema registry mapping entry schema names to field definitions */
24
24
  entrySchemaRegistry: EntrySchemaRegistry;
25
25
  /** Per-branch schema cache */
26
- branchSchemaCache: import('./branch-schema-cache').BranchSchemaCache;
26
+ branchSchemaCache: import('./branch-schema-cache.js').BranchSchemaCache;
27
27
  checkBranchAccess: (context: BranchContext, user: CanopyUser) => ReturnType<ReturnType<typeof createCheckBranchAccess>>;
28
28
  checkContentAccess: ReturnType<typeof createCheckContentAccess>;
29
29
  /**
@@ -109,4 +109,3 @@ export declare const createCanopyServices: (config: CanopyConfig, options?: Crea
109
109
  * @param options - Optional settings including entry schema registry
110
110
  */
111
111
  export declare const createTestCanopyServices: (config: CanopyConfig, options?: CreateCanopyServicesOptions) => Promise<CanopyServices>;
112
- //# sourceMappingURL=services.d.ts.map
package/dist/services.js CHANGED
@@ -396,4 +396,3 @@ async function _createCanopyServicesInternal(config, options) {
396
396
  };
397
397
  return services;
398
398
  }
399
- //# sourceMappingURL=services.js.map
@@ -1,5 +1,5 @@
1
- import type { CanopyConfig } from './config';
2
- import type { OperatingMode } from './operating-mode';
1
+ import type { CanopyConfig } from './config/index.js';
2
+ import type { OperatingMode } from './operating-mode/index.js';
3
3
  /**
4
4
  * Directory the cross-process init lock is anchored on — a dedicated sibling of
5
5
  * the settings root, and NOT the settings root itself.
@@ -10,18 +10,16 @@ import type { OperatingMode } from './operating-mode';
10
10
  * mkdir's its target, and `GitManager.initializeWorkspace` clones INTO the
11
11
  * settings root — `git clone` refuses a destination that already has content
12
12
  * in it. So the lock lives beside the settings root, never inside it.
13
- * 2. **It must not alias any other proper-lockfile target.** proper-lockfile
14
- * keys its module-level bookkeeping (refresh timer + release function) by the
15
- * TARGET path passed to `lock()`, not by `lockfilePath`, so two live locks in
16
- * one process that share a target clobber each other's registry entry (see
17
- * `.claude/future-tasks/proper-lockfile-hazards.md`). This target is a
18
- * dedicated dot-directory, so it collides with none of the existing targets:
19
- * the content-branches root and the bare remote's parent (provisioning locks
20
- * — note the latter IS `path.dirname(settingsRoot)`, which is precisely why
21
- * this cannot be anchored there: settings init calls into
22
- * `ensureLocalSimulatedRemote` while holding this lock), `<branchRoot>/.canopy-meta`
23
- * (content-write lock), `<workspaceRoot>/.tasks` (worker task lock), and the
24
- * individual JSON file paths used by `withOccFileLock`.
13
+ * 2. **Its marker must not collide with another lock's marker.** Since
14
+ * 2026-08-20 `acquireProvisioningLock` anchors proper-lockfile on the lock
15
+ * MARKER's own path rather than on the directory holding it, so its
16
+ * in-process registry key is the on-disk lock identity and two live locks
17
+ * can no longer clobber each other's bookkeeping (see docs/concurrency.md,
18
+ * "Anchor path matters"). A dedicated dot-directory is still the right home
19
+ * for this marker: `path.dirname(settingsRoot)` is where
20
+ * `ensureLocalSimulatedRemote` puts `.remote-init.lock`, and settings init
21
+ * calls into it while holding this lock, so keeping the two markers in
22
+ * separate directories keeps that nesting obvious rather than incidental.
25
23
  */
26
24
  export declare function settingsInitLockTarget(settingsRoot: string): string;
27
25
  export interface EnsureSettingsWorkspaceOptions {
@@ -51,4 +49,3 @@ export declare class SettingsWorkspaceManager {
51
49
  constructor(config: CanopyConfig);
52
50
  ensureGitWorkspace(options: EnsureSettingsWorkspaceOptions): Promise<void>;
53
51
  }
54
- //# sourceMappingURL=settings-workspace.d.ts.map
@@ -21,18 +21,16 @@ const SETTINGS_INIT_LOCK_NAME = 'lock';
21
21
  * mkdir's its target, and `GitManager.initializeWorkspace` clones INTO the
22
22
  * settings root — `git clone` refuses a destination that already has content
23
23
  * in it. So the lock lives beside the settings root, never inside it.
24
- * 2. **It must not alias any other proper-lockfile target.** proper-lockfile
25
- * keys its module-level bookkeeping (refresh timer + release function) by the
26
- * TARGET path passed to `lock()`, not by `lockfilePath`, so two live locks in
27
- * one process that share a target clobber each other's registry entry (see
28
- * `.claude/future-tasks/proper-lockfile-hazards.md`). This target is a
29
- * dedicated dot-directory, so it collides with none of the existing targets:
30
- * the content-branches root and the bare remote's parent (provisioning locks
31
- * — note the latter IS `path.dirname(settingsRoot)`, which is precisely why
32
- * this cannot be anchored there: settings init calls into
33
- * `ensureLocalSimulatedRemote` while holding this lock), `<branchRoot>/.canopy-meta`
34
- * (content-write lock), `<workspaceRoot>/.tasks` (worker task lock), and the
35
- * individual JSON file paths used by `withOccFileLock`.
24
+ * 2. **Its marker must not collide with another lock's marker.** Since
25
+ * 2026-08-20 `acquireProvisioningLock` anchors proper-lockfile on the lock
26
+ * MARKER's own path rather than on the directory holding it, so its
27
+ * in-process registry key is the on-disk lock identity and two live locks
28
+ * can no longer clobber each other's bookkeeping (see docs/concurrency.md,
29
+ * "Anchor path matters"). A dedicated dot-directory is still the right home
30
+ * for this marker: `path.dirname(settingsRoot)` is where
31
+ * `ensureLocalSimulatedRemote` puts `.remote-init.lock`, and settings init
32
+ * calls into it while holding this lock, so keeping the two markers in
33
+ * separate directories keeps that nesting obvious rather than incidental.
36
34
  */
37
35
  export function settingsInitLockTarget(settingsRoot) {
38
36
  return path.join(path.dirname(path.resolve(settingsRoot)), SETTINGS_INIT_LOCK_DIR);
@@ -220,4 +218,3 @@ export class SettingsWorkspaceManager {
220
218
  });
221
219
  }
222
220
  }
223
- //# sourceMappingURL=settings-workspace.js.map
@@ -1,6 +1,6 @@
1
- import type { CanopyBuildContext } from '../context';
2
- import type { ListEntriesItem } from '../content-listing';
3
- import { type EntryFieldError } from '../validation/entry-validator';
1
+ import type { CanopyBuildContext } from '../context.js';
2
+ import type { ListEntriesItem } from '../content-listing.js';
3
+ import { type EntryFieldError } from '../validation/entry-validator.js';
4
4
  /**
5
5
  * Framework-agnostic helpers for static-site generation. These produce neutral data structures
6
6
  * (no Next.js types) so that any framework adapter — e.g. canopycms-next — can map them to its own
@@ -11,7 +11,7 @@ import { type EntryFieldError } from '../validation/entry-validator';
11
11
  * carried through, for surfaces that must inspect content (sitemap, feeds, search index).
12
12
  * - `./seo` — `extractSeoFields` / `isNoindexEntry` / URL shaping, re-exported below.
13
13
  */
14
- export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUrl, withTrailingSlash, resolveSeoUrl, stripTrailingSlashes, type SeoFields, type SeoFieldNames, type SeoFieldLocation, type SeoOgType, type SeoTwitterCard, type ExtractSeoFieldsOptions, type ResolveSeoUrlOptions, } from './seo';
14
+ export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUrl, withTrailingSlash, resolveSeoUrl, stripTrailingSlashes, type SeoFields, type SeoFieldNames, type SeoFieldLocation, type SeoOgType, type SeoTwitterCard, type ExtractSeoFieldsOptions, type ResolveSeoUrlOptions, } from './seo.js';
15
15
  /** A routable content entry, reduced to what static path generation needs. */
16
16
  export interface StaticPathEntry {
17
17
  /**
@@ -66,13 +66,28 @@ export interface CollectRoutableEntriesOptions<T = Record<string, unknown>> {
66
66
  rootPath?: string;
67
67
  /** Keep only entries matching this predicate. Runs after `data` is attached, so it can read content. */
68
68
  filter?: (entry: RoutableEntry<T>) => boolean;
69
+ /**
70
+ * Resolve `reference` fields in each entry's `data`, the way `read()`/`readByUrlPath()` do.
71
+ * Defaults to `false`; see `ListEntriesOptions.resolveReferences` in content-listing.ts for
72
+ * the full rationale, cost and caveats.
73
+ *
74
+ * Turn this on for a surface that reads INSIDE an entry and must see referenced content —
75
+ * a search index over pages built from shared/referenced blocks is the case this exists
76
+ * for, since those blocks are otherwise indexed as an id string with no text in them.
77
+ * A sitemap needs `urlPath`/`updatedAt`/`noindex` only, so leave it off there.
78
+ *
79
+ * Not offered on `collectStaticPaths`, which discards `data` entirely — resolving
80
+ * references only to throw them away would be pure cost.
81
+ */
82
+ resolveReferences?: boolean;
69
83
  }
70
84
  /**
71
85
  * Enumerate routable content entries WITH their data — the input to any surface that must read
72
86
  * inside an entry to decide what to publish (sitemap, RSS, search index, index grids).
73
87
  *
74
88
  * Identical enumeration to `collectStaticPaths` (same single `listEntries` pass, same build-time
75
- * schema-validity guard); it simply keeps `data` and `updatedAt` instead of discarding them.
89
+ * schema-validity guard); it simply keeps `data` and `updatedAt` instead of discarding them, and
90
+ * can additionally opt into `reference` resolution, which a path-only enumeration has no use for.
76
91
  *
77
92
  * **Enumerates every entry type by default.** There is no allow-list of "publishable" types, and
78
93
  * that is deliberate: a sitemap built from a hand-maintained list of entry types silently omits
@@ -116,6 +131,12 @@ export interface InvalidBuildEntry {
116
131
  */
117
132
  type BuildScanItem = Pick<ListEntriesItem, 'entryPath' | 'schema'> & {
118
133
  data: unknown;
134
+ /**
135
+ * Only the unknown-key scan reads this, to recognise the md/mdx body key that `listEntries`
136
+ * merges into `data`. Optional so a caller assembling items by hand still typechecks; an
137
+ * absent format is treated as markdown-shaped, which errs toward under-reporting.
138
+ */
139
+ format?: ListEntriesItem['format'];
119
140
  };
120
141
  /**
121
142
  * Scan listEntries-shaped items for schema-invalid entries.
@@ -132,6 +153,34 @@ type BuildScanItem = Pick<ListEntriesItem, 'entryPath' | 'schema'> & {
132
153
  * different failure class, handled elsewhere.
133
154
  */
134
155
  export declare function findInvalidEntries(items: readonly BuildScanItem[]): InvalidBuildEntry[];
156
+ /** An entry carrying data keys the schema no longer defines. */
157
+ export interface EntryWithUnknownKeys {
158
+ entryPath: string;
159
+ /** Canonical field paths, e.g. `author.nickname` or `blocks[2].headline`. */
160
+ fieldPaths: string[];
161
+ }
162
+ /**
163
+ * Scan listEntries-shaped items for data keys with no schema counterpart.
164
+ *
165
+ * The inverse of `findInvalidEntries`, and non-fatal by design: an unknown key is stale data,
166
+ * not broken data. A build must not go red for it — the page still renders, it is just quietly
167
+ * missing whatever the renamed field used to supply. `warnUnknownEntryKeys` is the reporting
168
+ * half. Both sit at module scope alongside `findInvalidEntries`/`assertBuildEntriesValid` and
169
+ * are deliberately NOT on `canopycms/server`, matching those two — the build wires them itself.
170
+ *
171
+ * Skips items with no resolved schema, and items whose schema is empty — "no schema" is not
172
+ * "every key is unknown". Same `normalizeDatesDeep` pass as the validity scan, so a hand-authored
173
+ * `date: 2024-01-15` is a plain value here too.
174
+ */
175
+ export declare function findEntriesWithUnknownKeys(items: readonly BuildScanItem[]): EntryWithUnknownKeys[];
176
+ /**
177
+ * Warn — never throw — about entries carrying keys the schema no longer defines.
178
+ *
179
+ * A production build is the one place that sees every entry at once, which makes it the only
180
+ * place a schema reshape's leftovers show up as a list rather than one mysteriously undefined
181
+ * value at a time.
182
+ */
183
+ export declare function warnUnknownEntryKeys(items: readonly BuildScanItem[], phaseLabel: string): void;
135
184
  /**
136
185
  * Throw a single, descriptive Error if any item is schema-invalid.
137
186
  *
@@ -140,4 +189,113 @@ export declare function findInvalidEntries(items: readonly BuildScanItem[]): Inv
140
189
  * offending entry so one build catches every abandoned scaffold, not just the first.
141
190
  */
142
191
  export declare function assertBuildEntriesValid(items: readonly BuildScanItem[], phaseLabel: string): void;
143
- //# sourceMappingURL=index.d.ts.map
192
+ /**
193
+ * One URL claimed by more than one entry.
194
+ */
195
+ export interface DuplicateUrlPath {
196
+ /** The contested URL path, exactly as `listEntries` computed it. */
197
+ urlPath: string;
198
+ /** Logical paths of every entry claiming it, sorted. Always length >= 2. */
199
+ entryPaths: string[];
200
+ }
201
+ /** What the duplicate-URL scan needs off a listing item. */
202
+ type UrlScanItem = Pick<ListEntriesItem, 'entryPath' | 'urlPath'>;
203
+ /**
204
+ * Find every `urlPath` claimed by two or more entries.
205
+ *
206
+ * `listEntries` assigns each entry exactly one `urlPath` and documents it as round-trip safe with
207
+ * `readByUrlPath`. That guarantee is per-entry, not per-URL: nothing stops two DIFFERENT entries
208
+ * computing the same one, and when they do exactly one of them is reachable while the other
209
+ * silently has no route at all. The known ways to get there:
210
+ *
211
+ * - An entry whose slug matches a sibling collection that also has an `index` entry — the index
212
+ * collapses onto the collection's path, which is the entry's path too. The write boundary now
213
+ * refuses to author this too (url-collision.ts), so reaching it means the content arrived some
214
+ * other way — the same merge/PR/retrofit routes as the same-slug case below. (An entry beside a
215
+ * sibling collection with NO index entry is a different, legitimate shape: a landing page plus
216
+ * a folder of children, nothing contested.)
217
+ * - Two entries whose slugs differ only by case, since `urlPath` is lowercased.
218
+ * - Two entries with the same slug in one collection. The write boundary already refuses this
219
+ * (`ContentStore.buildPaths` resolves by slug across entry types, and the create-intent guard
220
+ * turns a hit into a conflict), but content also arrives by merge, by PR, and by adopters
221
+ * retrofitting an existing repo — none of which pass through that boundary.
222
+ *
223
+ * Exported so adopters can assert on it directly instead of hand-rolling a content-integrity
224
+ * test; `assertNoDuplicateUrlPaths` is what the build itself uses.
225
+ *
226
+ * Pure. Results are sorted by `urlPath`, with each `entryPaths` sorted too, so messages are
227
+ * stable across runs (`listEntries` resolves collections in parallel, so its own order is not).
228
+ */
229
+ export declare function findDuplicateUrlPaths(items: readonly UrlScanItem[]): DuplicateUrlPath[];
230
+ /**
231
+ * Throw a single, descriptive Error if any URL is claimed by more than one entry.
232
+ *
233
+ * Fails the build for the same reason its sibling `assertBuildEntriesValid` does: a page that
234
+ * silently disappears from a static build is a worse failure mode than a red build, and that is
235
+ * precisely what a contested URL produces — `generateStaticParams` emits the path once, one entry
236
+ * renders, and the other never appears anywhere with no error to notice.
237
+ *
238
+ * Runs on the RAW listing, before the caller's `filter`, and that will produce the first "why is
239
+ * my build red, that entry isn't even routed?" question — so: a contested `urlPath` is a real
240
+ * collision at RESOLUTION time regardless of routing. `readByUrlPath` picks one of the two
241
+ * whatever any `generateStaticParams` filter says, so the un-routed entry is not innocent; it is
242
+ * shadowing (or being shadowed by) the routed one at the same URL. `rootPath` narrows the scan
243
+ * because it narrows what was loaded at all; `filter` deliberately does not.
244
+ *
245
+ * Related but not redundant: `canopycms-next`'s `dedupeSitemapItems` warns on the same collision
246
+ * at the sitemap. It stays, because it also covers entry-vs-`extraUrls` collisions (adopter-supplied
247
+ * paths this content enumeration never sees) and non-build-mode calls, where this guard is silent.
248
+ */
249
+ export declare function assertNoDuplicateUrlPaths(items: readonly UrlScanItem[], phaseLabel: string): void;
250
+ /** An entry whose slug cannot round-trip through `readByUrlPath`. */
251
+ export interface UnroutableSlugEntry {
252
+ entryPath: string;
253
+ urlPath: string;
254
+ slug: string;
255
+ /** Why `parseSlug` rejected it, e.g. "Slug must start with a letter or number...". */
256
+ error: string;
257
+ }
258
+ /** What the slug-routability scan needs off a listing item. */
259
+ type SlugScanItem = Pick<ListEntriesItem, 'entryPath' | 'urlPath' | 'slug'>;
260
+ /**
261
+ * Find every listed entry whose `slug` cannot pass `parseSlug` — the validation `readByUrlPath`
262
+ * runs on every URL-resolution candidate it tries (`context.ts`).
263
+ *
264
+ * The filename grammar `parseTypedFilename` parses (`{type}.{slug}.{id}.{ext}`) deliberately
265
+ * allows a slug to contain dots, anchoring the split on the type and ID instead (see that
266
+ * function's doc comment) — and it does not run the parsed slug through `parseSlug` before
267
+ * handing it back, by design: recovering `{type, slug, id}` structurally, without validating
268
+ * every part, is its whole contract. `listCollectionEntries` inherits that: it lists the file and
269
+ * computes a `urlPath` for it, same as any other entry.
270
+ *
271
+ * But `parseSlug` requires `^[a-z0-9][a-z0-9-]*$` — no dots — so a listed entry whose slug
272
+ * contains one is unreachable through the one path everything else assumes works:
273
+ * `readByUrlPath` tries the URL's last segment as a candidate slug and skips any candidate that
274
+ * fails `parseSlug` (treating it as a miss, not an error) before it ever calls `read()`. The
275
+ * entry still builds, still gets a `generateStaticParams` entry, still gets a sitemap `<loc>` —
276
+ * and 404s the moment anything actually visits it. That breaks the `Round-trip safe` contract
277
+ * `content-listing.ts` documents on `urlPath` (`readByUrlPath(item.urlPath)` resolves to the same
278
+ * entry) and is exactly the silent-page-loss failure mode this guard's siblings
279
+ * (`assertBuildEntriesValid`, `assertNoDuplicateUrlPaths`) exist to make loud instead.
280
+ *
281
+ * The write boundary refuses to MINT such a slug: `api/content.ts` and `ContentStore.write()`
282
+ * both run `parseSlug` on a create, and `renameEntry()` runs it on the new slug (the [SLUG]
283
+ * guards). That enforcement is deliberately create-only — an entry that already carries a
284
+ * non-conforming slug stays saveable and renameable, because renaming it is the only way to fix
285
+ * this build failure, and refusing reads or edits would turn a red build into unreachable data.
286
+ *
287
+ * So this guard still fires, and is still needed, for every slug the write boundary never saw:
288
+ * hand-authored files, scripted migrations, content merged in over git, a repo being retrofitted
289
+ * onto CanopyCMS (this guard's intended audience, same as its siblings), and entries created
290
+ * before the write-time rule existed.
291
+ */
292
+ export declare function findUnroutableSlugs(items: readonly SlugScanItem[]): UnroutableSlugEntry[];
293
+ /**
294
+ * Throw a single, descriptive Error if any listed entry's slug cannot round-trip through
295
+ * `readByUrlPath`.
296
+ *
297
+ * Fails the build for the same reason its siblings do: an entry that builds and gets advertised
298
+ * (sitemap, `generateStaticParams`) but 404s on every actual visit is a worse failure mode than a
299
+ * red build.
300
+ */
301
+ export declare function assertRoutableSlugs(items: readonly SlugScanItem[], phaseLabel: string): void;
@@ -1,5 +1,8 @@
1
1
  import { isBuildMode } from '../build-mode.js';
2
- import { validateEntryData } from '../validation/entry-validator.js';
2
+ import { findUnknownKeys, validateEntryData, } from '../validation/entry-validator.js';
3
+ import { findBodyFieldName } from '../utils/body-field.js';
4
+ import { isDataOnlyFormat } from '../utils/format.js';
5
+ import { parseSlug } from '../paths/index.js';
3
6
  /**
4
7
  * Framework-agnostic helpers for static-site generation. These produce neutral data structures
5
8
  * (no Next.js types) so that any framework adapter — e.g. canopycms-next — can map them to its own
@@ -17,14 +20,33 @@ export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUr
17
20
  * `phaseLabel` only names the phase in the build-guard error, but it is threaded through rather
18
21
  * than fixed so the message points at the surface that actually failed.
19
22
  */
20
- async function enumerateRoutableEntries(ctx, rootPath, phaseLabel) {
21
- const entries = await ctx.listEntries({ rootPath });
23
+ async function enumerateRoutableEntries(ctx, rootPath, phaseLabel, resolveReferences) {
24
+ const entries = await ctx.listEntries({ rootPath, resolveReferences });
22
25
  // Build-time only: `next dev` runs generateStaticParams against the live working tree, where
23
26
  // fresh create-scaffolds legitimately exist mid-edit. Only fail the actual production build —
24
27
  // an abandoned schema-invalid scaffold shipping into a static build silently drops that page's
25
28
  // route (or worse, renders broken), which is worse than a red build.
26
- if (isBuildMode())
29
+ //
30
+ // The unknown-key warning runs BEFORE all three throwing guards, so a build about to go red
31
+ // still prints everything it found rather than dying on the first problem.
32
+ //
33
+ // All four run on the RAW listing, before the caller's `filter` — a filtered-out entry still
34
+ // occupies its URL as far as every other route is concerned. `rootPath` scoping does narrow
35
+ // them, since that happens inside `listEntries`; that is the intended escape hatch, `filter`
36
+ // is not.
37
+ //
38
+ // Slug routability is asserted first, ahead of schema validity and duplicate URLs: an entry
39
+ // whose slug cannot round-trip through `readByUrlPath` has no URL at all as far as any OTHER
40
+ // guard is concerned, so it is the most fundamental of the three problems a listed entry can
41
+ // have. Schema validity is asserted before duplicate URLs for the same reason one level down:
42
+ // a schema-invalid entry is the more fundamental problem, and an adopter fixing it may remove
43
+ // the duplicate on the way.
44
+ if (isBuildMode()) {
45
+ warnUnknownEntryKeys(entries, phaseLabel);
46
+ assertRoutableSlugs(entries, phaseLabel);
27
47
  assertBuildEntriesValid(entries, phaseLabel);
48
+ assertNoDuplicateUrlPaths(entries, phaseLabel);
49
+ }
28
50
  return entries.map((entry) => ({
29
51
  urlPath: entry.urlPath,
30
52
  segments: entry.urlPath === '/' ? [] : entry.urlPath.replace(/^\//, '').split('/'),
@@ -39,7 +61,8 @@ async function enumerateRoutableEntries(ctx, rootPath, phaseLabel) {
39
61
  * inside an entry to decide what to publish (sitemap, RSS, search index, index grids).
40
62
  *
41
63
  * Identical enumeration to `collectStaticPaths` (same single `listEntries` pass, same build-time
42
- * schema-validity guard); it simply keeps `data` and `updatedAt` instead of discarding them.
64
+ * schema-validity guard); it simply keeps `data` and `updatedAt` instead of discarding them, and
65
+ * can additionally opt into `reference` resolution, which a path-only enumeration has no use for.
43
66
  *
44
67
  * **Enumerates every entry type by default.** There is no allow-list of "publishable" types, and
45
68
  * that is deliberate: a sitemap built from a hand-maintained list of entry types silently omits
@@ -54,7 +77,7 @@ async function enumerateRoutableEntries(ctx, rootPath, phaseLabel) {
54
77
  * const published = entries.filter((e) => !isNoindexEntry(e.data))
55
78
  */
56
79
  export async function collectRoutableEntries(ctx, options = {}) {
57
- const entries = await enumerateRoutableEntries(ctx, options.rootPath, 'routable entry enumeration');
80
+ const entries = await enumerateRoutableEntries(ctx, options.rootPath, 'routable entry enumeration', options.resolveReferences);
58
81
  return options.filter ? entries.filter(options.filter) : entries;
59
82
  }
60
83
  /**
@@ -142,6 +165,70 @@ export function findInvalidEntries(items) {
142
165
  }
143
166
  return invalid;
144
167
  }
168
+ /**
169
+ * How many offending entries `warnUnknownEntryKeys` lists before summarising the rest. Bounds CI
170
+ * output for a schema-wide rename across a large content tree; the reported COUNT is never capped.
171
+ */
172
+ const UNKNOWN_KEY_REPORT_LIMIT = 20;
173
+ /**
174
+ * Scan listEntries-shaped items for data keys with no schema counterpart.
175
+ *
176
+ * The inverse of `findInvalidEntries`, and non-fatal by design: an unknown key is stale data,
177
+ * not broken data. A build must not go red for it — the page still renders, it is just quietly
178
+ * missing whatever the renamed field used to supply. `warnUnknownEntryKeys` is the reporting
179
+ * half. Both sit at module scope alongside `findInvalidEntries`/`assertBuildEntriesValid` and
180
+ * are deliberately NOT on `canopycms/server`, matching those two — the build wires them itself.
181
+ *
182
+ * Skips items with no resolved schema, and items whose schema is empty — "no schema" is not
183
+ * "every key is unknown". Same `normalizeDatesDeep` pass as the validity scan, so a hand-authored
184
+ * `date: 2024-01-15` is a plain value here too.
185
+ */
186
+ export function findEntriesWithUnknownKeys(items) {
187
+ const found = [];
188
+ for (const item of items) {
189
+ if (!item.schema || item.schema.length === 0)
190
+ continue;
191
+ const data = normalizeDatesDeep(item.data);
192
+ // For md/mdx, `listEntries` merges the file's body into `data` under
193
+ // `findBodyFieldName(schema)` (readEntryData in content-listing.ts). When the schema declares
194
+ // an `isBody` field that name IS a schema field and this is a no-op -- but declaring one is
195
+ // optional, and with none the merge key falls back to the literal 'body', which the schema
196
+ // legitimately does not define. Without this the scan told every adopter whose md entry types
197
+ // omit `isBody` that their prose was a stale key to delete.
198
+ const bodyKey = isDataOnlyFormat(item.format ?? 'md')
199
+ ? undefined
200
+ : findBodyFieldName(item.schema);
201
+ const fieldPaths = findUnknownKeys(item.schema, data).filter((path) => path !== bodyKey);
202
+ if (fieldPaths.length > 0) {
203
+ found.push({ entryPath: item.entryPath, fieldPaths });
204
+ }
205
+ }
206
+ return found;
207
+ }
208
+ /**
209
+ * Warn — never throw — about entries carrying keys the schema no longer defines.
210
+ *
211
+ * A production build is the one place that sees every entry at once, which makes it the only
212
+ * place a schema reshape's leftovers show up as a list rather than one mysteriously undefined
213
+ * value at a time.
214
+ */
215
+ export function warnUnknownEntryKeys(items, phaseLabel) {
216
+ const found = findEntriesWithUnknownKeys(items);
217
+ if (found.length === 0)
218
+ return;
219
+ // Capped, unlike the sibling assert. That one throws, so it prints once and the build stops;
220
+ // this one returns, and a Next build runs the enumeration several times (every catch-all route
221
+ // plus the sitemap). A schema-wide rename across a large tree would otherwise bury CI output
222
+ // under the same thousands of lines two or three times over. The count is always exact.
223
+ const shown = found.slice(0, UNKNOWN_KEY_REPORT_LIMIT);
224
+ const lines = shown.map(({ entryPath, fieldPaths }) => ` - ${entryPath} — ${fieldPaths.join(', ')}`);
225
+ if (found.length > shown.length) {
226
+ lines.push(` …and ${found.length - shown.length} more`);
227
+ }
228
+ console.warn(`CanopyCMS static build: ${found.length} ${found.length === 1 ? 'entry has' : 'entries have'} content keys not defined in their schema during ${phaseLabel}:\n${lines.join('\n')}\n` +
229
+ `These are usually left over from a renamed or reshaped field. Nothing reads them, and they are kept in the file on every save. ` +
230
+ `Add them to the schema or remove them from the content.`);
231
+ }
145
232
  /**
146
233
  * Throw a single, descriptive Error if any item is schema-invalid.
147
234
  *
@@ -164,4 +251,152 @@ export function assertBuildEntriesValid(items, phaseLabel) {
164
251
  `These are likely abandoned create-scaffolds (empty entries left behind when a create was started but never finished). ` +
165
252
  `Finish editing the entry (fill in its required fields) or delete the abandoned draft, then rebuild.`);
166
253
  }
167
- //# sourceMappingURL=index.js.map
254
+ /**
255
+ * Find every `urlPath` claimed by two or more entries.
256
+ *
257
+ * `listEntries` assigns each entry exactly one `urlPath` and documents it as round-trip safe with
258
+ * `readByUrlPath`. That guarantee is per-entry, not per-URL: nothing stops two DIFFERENT entries
259
+ * computing the same one, and when they do exactly one of them is reachable while the other
260
+ * silently has no route at all. The known ways to get there:
261
+ *
262
+ * - An entry whose slug matches a sibling collection that also has an `index` entry — the index
263
+ * collapses onto the collection's path, which is the entry's path too. The write boundary now
264
+ * refuses to author this too (url-collision.ts), so reaching it means the content arrived some
265
+ * other way — the same merge/PR/retrofit routes as the same-slug case below. (An entry beside a
266
+ * sibling collection with NO index entry is a different, legitimate shape: a landing page plus
267
+ * a folder of children, nothing contested.)
268
+ * - Two entries whose slugs differ only by case, since `urlPath` is lowercased.
269
+ * - Two entries with the same slug in one collection. The write boundary already refuses this
270
+ * (`ContentStore.buildPaths` resolves by slug across entry types, and the create-intent guard
271
+ * turns a hit into a conflict), but content also arrives by merge, by PR, and by adopters
272
+ * retrofitting an existing repo — none of which pass through that boundary.
273
+ *
274
+ * Exported so adopters can assert on it directly instead of hand-rolling a content-integrity
275
+ * test; `assertNoDuplicateUrlPaths` is what the build itself uses.
276
+ *
277
+ * Pure. Results are sorted by `urlPath`, with each `entryPaths` sorted too, so messages are
278
+ * stable across runs (`listEntries` resolves collections in parallel, so its own order is not).
279
+ */
280
+ export function findDuplicateUrlPaths(items) {
281
+ const byUrl = new Map();
282
+ for (const item of items) {
283
+ const existing = byUrl.get(item.urlPath);
284
+ if (existing)
285
+ existing.push(item.entryPath);
286
+ else
287
+ byUrl.set(item.urlPath, [item.entryPath]);
288
+ }
289
+ const duplicates = [];
290
+ for (const [urlPath, entryPaths] of byUrl) {
291
+ if (entryPaths.length > 1) {
292
+ duplicates.push({ urlPath, entryPaths: [...entryPaths].sort() });
293
+ }
294
+ }
295
+ return duplicates.sort((a, b) => a.urlPath.localeCompare(b.urlPath));
296
+ }
297
+ /**
298
+ * Throw a single, descriptive Error if any URL is claimed by more than one entry.
299
+ *
300
+ * Fails the build for the same reason its sibling `assertBuildEntriesValid` does: a page that
301
+ * silently disappears from a static build is a worse failure mode than a red build, and that is
302
+ * precisely what a contested URL produces — `generateStaticParams` emits the path once, one entry
303
+ * renders, and the other never appears anywhere with no error to notice.
304
+ *
305
+ * Runs on the RAW listing, before the caller's `filter`, and that will produce the first "why is
306
+ * my build red, that entry isn't even routed?" question — so: a contested `urlPath` is a real
307
+ * collision at RESOLUTION time regardless of routing. `readByUrlPath` picks one of the two
308
+ * whatever any `generateStaticParams` filter says, so the un-routed entry is not innocent; it is
309
+ * shadowing (or being shadowed by) the routed one at the same URL. `rootPath` narrows the scan
310
+ * because it narrows what was loaded at all; `filter` deliberately does not.
311
+ *
312
+ * Related but not redundant: `canopycms-next`'s `dedupeSitemapItems` warns on the same collision
313
+ * at the sitemap. It stays, because it also covers entry-vs-`extraUrls` collisions (adopter-supplied
314
+ * paths this content enumeration never sees) and non-build-mode calls, where this guard is silent.
315
+ */
316
+ export function assertNoDuplicateUrlPaths(items, phaseLabel) {
317
+ const duplicates = findDuplicateUrlPaths(items);
318
+ if (duplicates.length === 0)
319
+ return;
320
+ const lines = duplicates.map(({ urlPath, entryPaths }) => {
321
+ // Identical entryPaths means ONE entry was enumerated more than once, not two entries
322
+ // colliding — the remedy below ("rename or remove one of them") is unfollowable, since
323
+ // there is only one file. The known cause is two sibling collections sharing a name: both
324
+ // resolve to the same directory, so its entries are listed once per sibling.
325
+ const selfCollision = entryPaths.every((entryPath) => entryPath === entryPaths[0]);
326
+ return selfCollision
327
+ ? ` - ${urlPath} — ${entryPaths.length}x ${entryPaths[0]} (the same entry, enumerated more than once — usually two sibling collections sharing one name)`
328
+ : ` - ${urlPath} — claimed by ${entryPaths.join(', ')}`;
329
+ });
330
+ throw new Error(`CanopyCMS static build: found ${duplicates.length} ${duplicates.length === 1 ? 'URL' : 'URLs'} claimed by more than one entry during ${phaseLabel}:\n${lines.join('\n')}\n` +
331
+ 'Only one entry can be served at each URL, so the rest have no route at all. This usually means ' +
332
+ "an entry whose slug matches a sibling collection that also has an 'index' entry (the index " +
333
+ "collapses onto the collection's path), or two slugs differing only by case (URL paths are " +
334
+ 'lowercased). Rename or remove one of the colliding entries, then rebuild.');
335
+ }
336
+ /**
337
+ * Find every listed entry whose `slug` cannot pass `parseSlug` — the validation `readByUrlPath`
338
+ * runs on every URL-resolution candidate it tries (`context.ts`).
339
+ *
340
+ * The filename grammar `parseTypedFilename` parses (`{type}.{slug}.{id}.{ext}`) deliberately
341
+ * allows a slug to contain dots, anchoring the split on the type and ID instead (see that
342
+ * function's doc comment) — and it does not run the parsed slug through `parseSlug` before
343
+ * handing it back, by design: recovering `{type, slug, id}` structurally, without validating
344
+ * every part, is its whole contract. `listCollectionEntries` inherits that: it lists the file and
345
+ * computes a `urlPath` for it, same as any other entry.
346
+ *
347
+ * But `parseSlug` requires `^[a-z0-9][a-z0-9-]*$` — no dots — so a listed entry whose slug
348
+ * contains one is unreachable through the one path everything else assumes works:
349
+ * `readByUrlPath` tries the URL's last segment as a candidate slug and skips any candidate that
350
+ * fails `parseSlug` (treating it as a miss, not an error) before it ever calls `read()`. The
351
+ * entry still builds, still gets a `generateStaticParams` entry, still gets a sitemap `<loc>` —
352
+ * and 404s the moment anything actually visits it. That breaks the `Round-trip safe` contract
353
+ * `content-listing.ts` documents on `urlPath` (`readByUrlPath(item.urlPath)` resolves to the same
354
+ * entry) and is exactly the silent-page-loss failure mode this guard's siblings
355
+ * (`assertBuildEntriesValid`, `assertNoDuplicateUrlPaths`) exist to make loud instead.
356
+ *
357
+ * The write boundary refuses to MINT such a slug: `api/content.ts` and `ContentStore.write()`
358
+ * both run `parseSlug` on a create, and `renameEntry()` runs it on the new slug (the [SLUG]
359
+ * guards). That enforcement is deliberately create-only — an entry that already carries a
360
+ * non-conforming slug stays saveable and renameable, because renaming it is the only way to fix
361
+ * this build failure, and refusing reads or edits would turn a red build into unreachable data.
362
+ *
363
+ * So this guard still fires, and is still needed, for every slug the write boundary never saw:
364
+ * hand-authored files, scripted migrations, content merged in over git, a repo being retrofitted
365
+ * onto CanopyCMS (this guard's intended audience, same as its siblings), and entries created
366
+ * before the write-time rule existed.
367
+ */
368
+ export function findUnroutableSlugs(items) {
369
+ const found = [];
370
+ for (const item of items) {
371
+ const result = parseSlug(item.slug);
372
+ if (!result.ok) {
373
+ found.push({
374
+ entryPath: item.entryPath,
375
+ urlPath: item.urlPath,
376
+ slug: item.slug,
377
+ error: result.error,
378
+ });
379
+ }
380
+ }
381
+ return found;
382
+ }
383
+ /**
384
+ * Throw a single, descriptive Error if any listed entry's slug cannot round-trip through
385
+ * `readByUrlPath`.
386
+ *
387
+ * Fails the build for the same reason its siblings do: an entry that builds and gets advertised
388
+ * (sitemap, `generateStaticParams`) but 404s on every actual visit is a worse failure mode than a
389
+ * red build.
390
+ */
391
+ export function assertRoutableSlugs(items, phaseLabel) {
392
+ const unroutable = findUnroutableSlugs(items);
393
+ if (unroutable.length === 0)
394
+ return;
395
+ const lines = unroutable.map(({ entryPath, urlPath, slug }) => ` - ${entryPath} (slug "${slug}", urlPath "${urlPath}")`);
396
+ throw new Error(`CanopyCMS static build: found ${unroutable.length} ${unroutable.length === 1 ? 'entry' : 'entries'} whose slug cannot resolve back through a URL during ${phaseLabel}:\n${lines.join('\n')}\n` +
397
+ 'The filename grammar allows a slug to contain characters readByUrlPath cannot accept back ' +
398
+ "(most commonly a dot, e.g. a slug of 'getting.started.guide') — a valid slug for parseSlug is " +
399
+ 'lowercase letters, numbers and hyphens only, starting with a letter or number. Each entry ' +
400
+ 'above would build, appear in generateStaticParams and any sitemap, and then 404 on every ' +
401
+ 'visit. Rename the slug (the file itself, not just its content), then rebuild.');
402
+ }