canopycms 0.0.63 → 0.0.64

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 (1209) 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 +0 -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 +0 -1
  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 +2 -3
  147. package/dist/branch-health.js +0 -1
  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 +1 -2
  165. package/dist/cli/cli.js +1131 -486
  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 +12 -2
  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/deploy-cms.yml.template +8 -6
  179. package/dist/cli/templates.d.ts +0 -1
  180. package/dist/cli/templates.js +0 -1
  181. package/dist/client.d.ts +13 -14
  182. package/dist/client.js +0 -1
  183. package/dist/comment-store.d.ts +0 -1
  184. package/dist/comment-store.js +0 -1
  185. package/dist/config/flatten.d.ts +1 -2
  186. package/dist/config/flatten.js +0 -1
  187. package/dist/config/helpers.d.ts +3 -4
  188. package/dist/config/helpers.js +2 -2
  189. package/dist/config/index.d.ts +10 -11
  190. package/dist/config/index.js +0 -1
  191. package/dist/config/schemas/collection.d.ts +0 -1
  192. package/dist/config/schemas/collection.js +0 -1
  193. package/dist/config/schemas/config.d.ts +7 -4
  194. package/dist/config/schemas/config.js +12 -1
  195. package/dist/config/schemas/field.d.ts +3 -1
  196. package/dist/config/schemas/field.js +5 -1
  197. package/dist/config/schemas/media.d.ts +0 -1
  198. package/dist/config/schemas/media.js +0 -1
  199. package/dist/config/schemas/permissions.d.ts +0 -1
  200. package/dist/config/schemas/permissions.js +0 -1
  201. package/dist/config/types.d.ts +55 -9
  202. package/dist/config/types.js +0 -1
  203. package/dist/config/validation.d.ts +1 -2
  204. package/dist/config/validation.js +0 -1
  205. package/dist/config.d.ts +2 -3
  206. package/dist/config.js +0 -1
  207. package/dist/content-id-index.d.ts +1 -2
  208. package/dist/content-id-index.js +0 -1
  209. package/dist/content-index-generation.d.ts +0 -1
  210. package/dist/content-index-generation.js +0 -1
  211. package/dist/content-index-registry.d.ts +0 -1
  212. package/dist/content-index-registry.js +0 -1
  213. package/dist/content-listing.d.ts +75 -59
  214. package/dist/content-listing.js +76 -83
  215. package/dist/content-reader.d.ts +4 -5
  216. package/dist/content-reader.js +22 -3
  217. package/dist/content-store.d.ts +137 -6
  218. package/dist/content-store.js +294 -22
  219. package/dist/content-tree.d.ts +15 -5
  220. package/dist/content-tree.js +27 -8
  221. package/dist/context.d.ts +9 -6
  222. package/dist/context.js +0 -1
  223. package/dist/dev-content-watcher.d.ts +2 -3
  224. package/dist/dev-content-watcher.js +0 -1
  225. package/dist/editor/BranchManager.d.ts +4 -5
  226. package/dist/editor/BranchManager.js +0 -1
  227. package/dist/editor/CanopyEditor.d.ts +2 -3
  228. package/dist/editor/CanopyEditor.js +1 -2
  229. package/dist/editor/CanopyEditorPage.d.ts +2 -3
  230. package/dist/editor/CanopyEditorPage.js +0 -1
  231. package/dist/editor/CommentsPanel.d.ts +2 -3
  232. package/dist/editor/CommentsPanel.js +0 -1
  233. package/dist/editor/Editor.d.ts +13 -8
  234. package/dist/editor/Editor.js +4 -5
  235. package/dist/editor/EditorPanes.d.ts +0 -1
  236. package/dist/editor/EditorPanes.js +0 -1
  237. package/dist/editor/EntryNavigator.d.ts +1 -2
  238. package/dist/editor/EntryNavigator.js +0 -1
  239. package/dist/editor/FormRenderer.d.ts +2 -3
  240. package/dist/editor/FormRenderer.js +22 -3
  241. package/dist/editor/GroupManager.d.ts +2 -3
  242. package/dist/editor/GroupManager.js +0 -1
  243. package/dist/editor/PermissionManager.d.ts +2 -3
  244. package/dist/editor/PermissionManager.js +0 -1
  245. package/dist/editor/admin/SystemHealthPanel.d.ts +0 -1
  246. package/dist/editor/admin/SystemHealthPanel.js +0 -1
  247. package/dist/editor/admin/useSystemHealth.d.ts +2 -3
  248. package/dist/editor/admin/useSystemHealth.js +0 -1
  249. package/dist/editor/canopy-path.d.ts +0 -1
  250. package/dist/editor/canopy-path.js +0 -1
  251. package/dist/editor/client-reference-resolver.d.ts +13 -4
  252. package/dist/editor/client-reference-resolver.js +18 -8
  253. package/dist/editor/comments/BranchComments.d.ts +2 -3
  254. package/dist/editor/comments/BranchComments.js +0 -1
  255. package/dist/editor/comments/EntryComments.d.ts +1 -2
  256. package/dist/editor/comments/EntryComments.js +0 -1
  257. package/dist/editor/comments/FieldWrapper.d.ts +1 -2
  258. package/dist/editor/comments/FieldWrapper.js +0 -1
  259. package/dist/editor/comments/InlineCommentThread.d.ts +2 -3
  260. package/dist/editor/comments/InlineCommentThread.js +0 -1
  261. package/dist/editor/comments/ThreadCarousel.d.ts +2 -3
  262. package/dist/editor/comments/ThreadCarousel.js +0 -1
  263. package/dist/editor/components/ConfirmDeleteModal.d.ts +0 -1
  264. package/dist/editor/components/ConfirmDeleteModal.js +0 -1
  265. package/dist/editor/components/EditorFooter.d.ts +0 -1
  266. package/dist/editor/components/EditorFooter.js +0 -1
  267. package/dist/editor/components/EditorHeader.d.ts +4 -5
  268. package/dist/editor/components/EditorHeader.js +0 -1
  269. package/dist/editor/components/EditorSidebar.d.ts +1 -2
  270. package/dist/editor/components/EditorSidebar.js +0 -1
  271. package/dist/editor/components/EntryCreateModal.d.ts +0 -1
  272. package/dist/editor/components/EntryCreateModal.js +21 -10
  273. package/dist/editor/components/RenameEntryModal.d.ts +0 -1
  274. package/dist/editor/components/RenameEntryModal.js +0 -1
  275. package/dist/editor/components/UserBadge.d.ts +2 -3
  276. package/dist/editor/components/UserBadge.js +0 -1
  277. package/dist/editor/components/index.d.ts +3 -4
  278. package/dist/editor/components/index.js +0 -1
  279. package/dist/editor/context/ApiClientContext.d.ts +9 -3
  280. package/dist/editor/context/ApiClientContext.js +8 -4
  281. package/dist/editor/context/AssetContext.d.ts +26 -2
  282. package/dist/editor/context/AssetContext.js +23 -3
  283. package/dist/editor/context/EditorStateContext.d.ts +1 -2
  284. package/dist/editor/context/EditorStateContext.js +0 -1
  285. package/dist/editor/context/SWRProvider.d.ts +0 -1
  286. package/dist/editor/context/SWRProvider.js +0 -1
  287. package/dist/editor/context/index.d.ts +4 -5
  288. package/dist/editor/context/index.js +0 -1
  289. package/dist/editor/editor-config.d.ts +2 -3
  290. package/dist/editor/editor-config.js +0 -1
  291. package/dist/editor/editor-utils.d.ts +22 -10
  292. package/dist/editor/editor-utils.js +41 -10
  293. package/dist/editor/fields/BlockField.d.ts +1 -2
  294. package/dist/editor/fields/BlockField.js +0 -1
  295. package/dist/editor/fields/CodeField.d.ts +0 -1
  296. package/dist/editor/fields/CodeField.js +0 -1
  297. package/dist/editor/fields/DateTimeField.d.ts +0 -1
  298. package/dist/editor/fields/DateTimeField.js +0 -1
  299. package/dist/editor/fields/ImageField.d.ts +1 -2
  300. package/dist/editor/fields/ImageField.js +0 -1
  301. package/dist/editor/fields/InlineGroupField.d.ts +2 -3
  302. package/dist/editor/fields/InlineGroupField.js +0 -1
  303. package/dist/editor/fields/MarkdownField.d.ts +0 -1
  304. package/dist/editor/fields/MarkdownField.js +0 -1
  305. package/dist/editor/fields/MdxImageDialog.d.ts +0 -1
  306. package/dist/editor/fields/MdxImageDialog.js +0 -1
  307. package/dist/editor/fields/NumberField.d.ts +0 -1
  308. package/dist/editor/fields/NumberField.js +0 -1
  309. package/dist/editor/fields/NumberListField.d.ts +0 -1
  310. package/dist/editor/fields/NumberListField.js +0 -1
  311. package/dist/editor/fields/ObjectField.d.ts +11 -2
  312. package/dist/editor/fields/ObjectField.js +3 -4
  313. package/dist/editor/fields/ReferenceField.d.ts +0 -1
  314. package/dist/editor/fields/ReferenceField.js +8 -3
  315. package/dist/editor/fields/SelectField.d.ts +0 -1
  316. package/dist/editor/fields/SelectField.js +0 -1
  317. package/dist/editor/fields/StringListField.d.ts +0 -1
  318. package/dist/editor/fields/StringListField.js +0 -1
  319. package/dist/editor/fields/TextField.d.ts +0 -1
  320. package/dist/editor/fields/TextField.js +0 -1
  321. package/dist/editor/fields/ToggleField.d.ts +0 -1
  322. package/dist/editor/fields/ToggleField.js +0 -1
  323. package/dist/editor/fields/entry-link/EntryLinkContext.d.ts +1 -2
  324. package/dist/editor/fields/entry-link/EntryLinkContext.js +0 -1
  325. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -1
  326. package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -1
  327. package/dist/editor/fields/entry-link/index.d.ts +2 -3
  328. package/dist/editor/fields/entry-link/index.js +0 -1
  329. package/dist/editor/group-manager/ExternalGroupsTab.d.ts +1 -2
  330. package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
  331. package/dist/editor/group-manager/GroupCard.d.ts +1 -2
  332. package/dist/editor/group-manager/GroupCard.js +0 -1
  333. package/dist/editor/group-manager/GroupForm.d.ts +1 -2
  334. package/dist/editor/group-manager/GroupForm.js +0 -1
  335. package/dist/editor/group-manager/InternalGroupsTab.d.ts +1 -2
  336. package/dist/editor/group-manager/InternalGroupsTab.js +0 -1
  337. package/dist/editor/group-manager/MemberList.d.ts +1 -2
  338. package/dist/editor/group-manager/MemberList.js +0 -1
  339. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +1 -2
  340. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -1
  341. package/dist/editor/group-manager/hooks/useGroupState.d.ts +1 -2
  342. package/dist/editor/group-manager/hooks/useGroupState.js +0 -1
  343. package/dist/editor/group-manager/hooks/useUserSearch.d.ts +1 -2
  344. package/dist/editor/group-manager/hooks/useUserSearch.js +0 -1
  345. package/dist/editor/group-manager/index.d.ts +5 -6
  346. package/dist/editor/group-manager/index.js +0 -1
  347. package/dist/editor/group-manager/types.d.ts +4 -5
  348. package/dist/editor/group-manager/types.js +0 -1
  349. package/dist/editor/hooks/index.d.ts +14 -15
  350. package/dist/editor/hooks/index.js +0 -1
  351. package/dist/editor/hooks/useBranchActions.d.ts +0 -1
  352. package/dist/editor/hooks/useBranchActions.js +0 -1
  353. package/dist/editor/hooks/useBranchManager.d.ts +4 -5
  354. package/dist/editor/hooks/useBranchManager.js +0 -1
  355. package/dist/editor/hooks/useBranchesData.d.ts +2 -3
  356. package/dist/editor/hooks/useBranchesData.js +0 -1
  357. package/dist/editor/hooks/useCommentSystem.d.ts +2 -3
  358. package/dist/editor/hooks/useCommentSystem.js +0 -1
  359. package/dist/editor/hooks/useCommentsData.d.ts +2 -3
  360. package/dist/editor/hooks/useCommentsData.js +0 -1
  361. package/dist/editor/hooks/useDraftManager.d.ts +3 -4
  362. package/dist/editor/hooks/useDraftManager.js +0 -1
  363. package/dist/editor/hooks/useEditorLayout.d.ts +1 -2
  364. package/dist/editor/hooks/useEditorLayout.js +0 -1
  365. package/dist/editor/hooks/useEntriesData.d.ts +3 -5
  366. package/dist/editor/hooks/useEntriesData.js +0 -3
  367. package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -3
  368. package/dist/editor/hooks/useEntryLinkResolution.js +0 -1
  369. package/dist/editor/hooks/useEntryManager.d.ts +5 -7
  370. package/dist/editor/hooks/useEntryManager.js +8 -3
  371. package/dist/editor/hooks/useGroupManager.d.ts +2 -3
  372. package/dist/editor/hooks/useGroupManager.js +0 -1
  373. package/dist/editor/hooks/usePermissionManager.d.ts +2 -3
  374. package/dist/editor/hooks/usePermissionManager.js +0 -1
  375. package/dist/editor/hooks/useReferenceResolution.d.ts +1 -2
  376. package/dist/editor/hooks/useReferenceResolution.js +8 -3
  377. package/dist/editor/hooks/useSchemaManager.d.ts +2 -3
  378. package/dist/editor/hooks/useSchemaManager.js +0 -1
  379. package/dist/editor/hooks/useUserContext.d.ts +1 -2
  380. package/dist/editor/hooks/useUserContext.js +8 -3
  381. package/dist/editor/hooks/useUserMetadata.d.ts +2 -3
  382. package/dist/editor/hooks/useUserMetadata.js +0 -1
  383. package/dist/editor/media/AssetCard.d.ts +1 -2
  384. package/dist/editor/media/AssetCard.js +0 -1
  385. package/dist/editor/media/CropStep.d.ts +1 -2
  386. package/dist/editor/media/CropStep.js +0 -1
  387. package/dist/editor/media/MediaLibrary.d.ts +1 -2
  388. package/dist/editor/media/MediaLibrary.js +0 -1
  389. package/dist/editor/media/MediaLibraryBody.d.ts +1 -2
  390. package/dist/editor/media/MediaLibraryBody.js +0 -1
  391. package/dist/editor/media/crop-math.d.ts +1 -2
  392. package/dist/editor/media/crop-math.js +0 -1
  393. package/dist/editor/media/upload-asset.d.ts +2 -3
  394. package/dist/editor/media/upload-asset.js +0 -1
  395. package/dist/editor/media/upload-constants.d.ts +0 -1
  396. package/dist/editor/media/upload-constants.js +0 -1
  397. package/dist/editor/media/useAssetUpload.d.ts +1 -2
  398. package/dist/editor/media/useAssetUpload.js +0 -1
  399. package/dist/editor/media/xhr-upload.d.ts +0 -1
  400. package/dist/editor/media/xhr-upload.js +0 -1
  401. package/dist/editor/permission-manager/GroupSelector.d.ts +1 -2
  402. package/dist/editor/permission-manager/GroupSelector.js +0 -1
  403. package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -2
  404. package/dist/editor/permission-manager/PermissionEditor.js +0 -1
  405. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +1 -2
  406. package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -1
  407. package/dist/editor/permission-manager/PermissionTree.d.ts +1 -2
  408. package/dist/editor/permission-manager/PermissionTree.js +0 -1
  409. package/dist/editor/permission-manager/UserSelector.d.ts +1 -2
  410. package/dist/editor/permission-manager/UserSelector.js +0 -1
  411. package/dist/editor/permission-manager/constants.d.ts +1 -2
  412. package/dist/editor/permission-manager/constants.js +0 -1
  413. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +1 -2
  414. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -1
  415. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +2 -3
  416. package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -1
  417. package/dist/editor/permission-manager/index.d.ts +4 -5
  418. package/dist/editor/permission-manager/index.js +0 -1
  419. package/dist/editor/permission-manager/types.d.ts +3 -4
  420. package/dist/editor/permission-manager/types.js +0 -1
  421. package/dist/editor/permission-manager/utils.d.ts +2 -3
  422. package/dist/editor/permission-manager/utils.js +0 -1
  423. package/dist/editor/preview-bridge.d.ts +1 -2
  424. package/dist/editor/preview-bridge.js +0 -1
  425. package/dist/editor/relative-time.d.ts +0 -1
  426. package/dist/editor/relative-time.js +0 -1
  427. package/dist/editor/schema-editor/CollectionEditor.d.ts +4 -5
  428. package/dist/editor/schema-editor/CollectionEditor.js +0 -1
  429. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +2 -3
  430. package/dist/editor/schema-editor/EntryTypeEditor.js +0 -1
  431. package/dist/editor/schema-editor/index.d.ts +2 -3
  432. package/dist/editor/schema-editor/index.js +0 -1
  433. package/dist/editor/theme.d.ts +0 -1
  434. package/dist/editor/theme.js +0 -1
  435. package/dist/editor/utils/env.d.ts +0 -1
  436. package/dist/editor/utils/env.js +0 -1
  437. package/dist/entry-link-resolver.d.ts +1 -2
  438. package/dist/entry-link-resolver.js +0 -1
  439. package/dist/entry-schema-registry.d.ts +3 -4
  440. package/dist/entry-schema-registry.js +6 -2
  441. package/dist/entry-schema.d.ts +114 -3
  442. package/dist/entry-schema.js +46 -1
  443. package/dist/git-manager.d.ts +1 -2
  444. package/dist/git-manager.js +0 -1
  445. package/dist/github-service.d.ts +1 -2
  446. package/dist/github-service.js +0 -1
  447. package/dist/http/handler.d.ts +6 -7
  448. package/dist/http/handler.js +0 -1
  449. package/dist/http/index.d.ts +6 -7
  450. package/dist/http/index.js +0 -1
  451. package/dist/http/router.d.ts +2 -3
  452. package/dist/http/router.js +0 -1
  453. package/dist/http/types.d.ts +0 -1
  454. package/dist/http/types.js +0 -1
  455. package/dist/id.d.ts +2 -3
  456. package/dist/id.js +0 -1
  457. package/dist/index.d.ts +17 -18
  458. package/dist/index.js +0 -1
  459. package/dist/operating-mode/client-safe-strategy.d.ts +1 -2
  460. package/dist/operating-mode/client-safe-strategy.js +0 -1
  461. package/dist/operating-mode/client-unsafe-strategy.d.ts +1 -2
  462. package/dist/operating-mode/client-unsafe-strategy.js +0 -1
  463. package/dist/operating-mode/client.d.ts +3 -4
  464. package/dist/operating-mode/client.js +0 -1
  465. package/dist/operating-mode/deployment-name-fixtures.d.ts +0 -1
  466. package/dist/operating-mode/deployment-name-fixtures.js +0 -1
  467. package/dist/operating-mode/deployment-name.d.ts +0 -1
  468. package/dist/operating-mode/deployment-name.js +0 -1
  469. package/dist/operating-mode/index.d.ts +5 -6
  470. package/dist/operating-mode/index.js +0 -1
  471. package/dist/operating-mode/mode-env.d.ts +1 -2
  472. package/dist/operating-mode/mode-env.js +0 -1
  473. package/dist/operating-mode/types.d.ts +2 -3
  474. package/dist/operating-mode/types.js +0 -1
  475. package/dist/paths/branch-name.d.ts +1 -2
  476. package/dist/paths/branch-name.js +0 -1
  477. package/dist/paths/branch.d.ts +3 -4
  478. package/dist/paths/branch.js +0 -1
  479. package/dist/paths/index.d.ts +8 -9
  480. package/dist/paths/index.js +0 -1
  481. package/dist/paths/normalize-server.d.ts +1 -2
  482. package/dist/paths/normalize-server.js +0 -1
  483. package/dist/paths/normalize.d.ts +1 -2
  484. package/dist/paths/normalize.js +0 -1
  485. package/dist/paths/resolve.d.ts +2 -3
  486. package/dist/paths/resolve.js +0 -1
  487. package/dist/paths/types.d.ts +0 -1
  488. package/dist/paths/types.js +0 -1
  489. package/dist/paths/validation.d.ts +1 -2
  490. package/dist/paths/validation.js +0 -1
  491. package/dist/reference-resolver.d.ts +3 -4
  492. package/dist/reference-resolver.js +0 -1
  493. package/dist/resolve-canopy-user.d.ts +3 -4
  494. package/dist/resolve-canopy-user.js +0 -1
  495. package/dist/resource-generation.d.ts +0 -1
  496. package/dist/resource-generation.js +0 -1
  497. package/dist/schema/index.d.ts +3 -4
  498. package/dist/schema/index.js +0 -1
  499. package/dist/schema/meta-loader.d.ts +3 -4
  500. package/dist/schema/meta-loader.js +3 -3
  501. package/dist/schema/resolver.d.ts +2 -3
  502. package/dist/schema/resolver.js +0 -1
  503. package/dist/schema/schema-store-types.d.ts +2 -3
  504. package/dist/schema/schema-store-types.js +0 -1
  505. package/dist/schema/schema-store.d.ts +6 -7
  506. package/dist/schema/schema-store.js +33 -1
  507. package/dist/schema/types.d.ts +1 -2
  508. package/dist/schema/types.js +0 -1
  509. package/dist/server.d.ts +54 -45
  510. package/dist/server.js +11 -3
  511. package/dist/services.d.ts +10 -11
  512. package/dist/services.js +0 -1
  513. package/dist/settings-workspace.d.ts +12 -15
  514. package/dist/settings-workspace.js +10 -13
  515. package/dist/static/index.d.ts +164 -6
  516. package/dist/static/index.js +242 -7
  517. package/dist/static/seo.d.ts +8 -30
  518. package/dist/static/seo.js +19 -46
  519. package/dist/sync-core.d.ts +0 -1
  520. package/dist/sync-core.js +0 -1
  521. package/dist/task-queue/index.d.ts +2 -3
  522. package/dist/task-queue/index.js +0 -1
  523. package/dist/task-queue/task-queue.d.ts +1 -2
  524. package/dist/task-queue/task-queue.js +0 -1
  525. package/dist/task-queue/types.d.ts +0 -1
  526. package/dist/task-queue/types.js +0 -1
  527. package/dist/types.d.ts +3 -4
  528. package/dist/types.js +0 -1
  529. package/dist/url-collision.d.ts +86 -0
  530. package/dist/url-collision.js +186 -0
  531. package/dist/url-path-resolver.d.ts +11 -2
  532. package/dist/url-path-resolver.js +37 -5
  533. package/dist/user.d.ts +3 -4
  534. package/dist/user.js +0 -1
  535. package/dist/utils/async-mutex.d.ts +0 -1
  536. package/dist/utils/async-mutex.js +0 -1
  537. package/dist/utils/atomic-write.d.ts +0 -1
  538. package/dist/utils/atomic-write.js +0 -1
  539. package/dist/utils/body-field.d.ts +12 -2
  540. package/dist/utils/body-field.js +17 -1
  541. package/dist/utils/content-serialize.d.ts +37 -0
  542. package/dist/utils/content-serialize.js +429 -0
  543. package/dist/utils/content-write-lock.d.ts +12 -16
  544. package/dist/utils/content-write-lock.js +38 -22
  545. package/dist/utils/debug.d.ts +0 -1
  546. package/dist/utils/debug.js +0 -1
  547. package/dist/utils/entry-url.d.ts +17 -1
  548. package/dist/utils/entry-url.js +21 -3
  549. package/dist/utils/error.d.ts +0 -1
  550. package/dist/utils/error.js +0 -1
  551. package/dist/utils/flatten-group-fields.d.ts +1 -2
  552. package/dist/utils/flatten-group-fields.js +0 -1
  553. package/dist/utils/format.d.ts +1 -2
  554. package/dist/utils/format.js +0 -1
  555. package/dist/utils/fs.d.ts +7 -1
  556. package/dist/utils/fs.js +16 -1
  557. package/dist/utils/git.d.ts +1 -2
  558. package/dist/utils/git.js +0 -1
  559. package/dist/utils/logger.d.ts +0 -1
  560. package/dist/utils/logger.js +0 -1
  561. package/dist/utils/occ-json-write.d.ts +0 -1
  562. package/dist/utils/occ-json-write.js +0 -1
  563. package/dist/utils/provisioning-lock.d.ts +17 -4
  564. package/dist/utils/provisioning-lock.js +94 -14
  565. package/dist/utils/sanitize-href.d.ts +2 -3
  566. package/dist/utils/sanitize-href.js +2 -3
  567. package/dist/utils/title-field.d.ts +1 -2
  568. package/dist/utils/title-field.js +0 -1
  569. package/dist/utils/typed-filename.d.ts +61 -0
  570. package/dist/utils/typed-filename.js +92 -0
  571. package/dist/utils/url-prefix.d.ts +121 -0
  572. package/dist/utils/url-prefix.js +158 -0
  573. package/dist/validation/block-structural-keys.d.ts +42 -0
  574. package/dist/validation/block-structural-keys.js +44 -0
  575. package/dist/validation/deletion-checker.d.ts +4 -5
  576. package/dist/validation/deletion-checker.js +0 -1
  577. package/dist/validation/entry-link-validator.d.ts +2 -3
  578. package/dist/validation/entry-link-validator.js +0 -1
  579. package/dist/validation/entry-type-reference-validator.d.ts +1 -2
  580. package/dist/validation/entry-type-reference-validator.js +0 -1
  581. package/dist/validation/entry-validator.d.ts +23 -2
  582. package/dist/validation/entry-validator.js +34 -2
  583. package/dist/validation/field-traversal.d.ts +28 -4
  584. package/dist/validation/field-traversal.js +24 -7
  585. package/dist/validation/reference-validator.d.ts +2 -3
  586. package/dist/validation/reference-validator.js +0 -1
  587. package/dist/worker/cms-worker.d.ts +9 -2
  588. package/dist/worker/cms-worker.js +59 -2
  589. package/dist/worker/log.d.ts +0 -1
  590. package/dist/worker/log.js +0 -1
  591. package/dist/worker/task-queue-config.d.ts +1 -2
  592. package/dist/worker/task-queue-config.js +0 -1
  593. package/dist/worker/task-queue.d.ts +3 -4
  594. package/dist/worker/task-queue.js +0 -1
  595. package/dist/worker/worker-status.d.ts +1 -2
  596. package/dist/worker/worker-status.js +0 -1
  597. package/package.json +2 -6
  598. package/dist/ai/generate.d.ts.map +0 -1
  599. package/dist/ai/generate.js.map +0 -1
  600. package/dist/ai/handler.d.ts.map +0 -1
  601. package/dist/ai/handler.js.map +0 -1
  602. package/dist/ai/index.d.ts.map +0 -1
  603. package/dist/ai/index.js.map +0 -1
  604. package/dist/ai/json-to-markdown.d.ts.map +0 -1
  605. package/dist/ai/json-to-markdown.js.map +0 -1
  606. package/dist/ai/resolve-branch.d.ts.map +0 -1
  607. package/dist/ai/resolve-branch.js.map +0 -1
  608. package/dist/ai/strip-mdx.d.ts.map +0 -1
  609. package/dist/ai/strip-mdx.js.map +0 -1
  610. package/dist/ai/to-plain-text.d.ts.map +0 -1
  611. package/dist/ai/to-plain-text.js.map +0 -1
  612. package/dist/ai/transform-components.d.ts.map +0 -1
  613. package/dist/ai/transform-components.js.map +0 -1
  614. package/dist/ai/types.d.ts.map +0 -1
  615. package/dist/ai/types.js.map +0 -1
  616. package/dist/api/__test__/mock-client.d.ts +0 -231
  617. package/dist/api/__test__/mock-client.d.ts.map +0 -1
  618. package/dist/api/__test__/mock-client.js +0 -388
  619. package/dist/api/__test__/mock-client.js.map +0 -1
  620. package/dist/api/admin-branch-health.d.ts.map +0 -1
  621. package/dist/api/admin-branch-health.js.map +0 -1
  622. package/dist/api/admin.d.ts.map +0 -1
  623. package/dist/api/admin.js.map +0 -1
  624. package/dist/api/assets.d.ts.map +0 -1
  625. package/dist/api/assets.js.map +0 -1
  626. package/dist/api/branch-merge.d.ts.map +0 -1
  627. package/dist/api/branch-merge.js.map +0 -1
  628. package/dist/api/branch-review.d.ts.map +0 -1
  629. package/dist/api/branch-review.js.map +0 -1
  630. package/dist/api/branch-status.d.ts.map +0 -1
  631. package/dist/api/branch-status.js.map +0 -1
  632. package/dist/api/branch-withdraw.d.ts.map +0 -1
  633. package/dist/api/branch-withdraw.js.map +0 -1
  634. package/dist/api/branch.d.ts.map +0 -1
  635. package/dist/api/branch.js.map +0 -1
  636. package/dist/api/client.d.ts.map +0 -1
  637. package/dist/api/client.js.map +0 -1
  638. package/dist/api/comments.d.ts.map +0 -1
  639. package/dist/api/comments.js.map +0 -1
  640. package/dist/api/content.d.ts.map +0 -1
  641. package/dist/api/content.js.map +0 -1
  642. package/dist/api/entries-constants.d.ts.map +0 -1
  643. package/dist/api/entries-constants.js.map +0 -1
  644. package/dist/api/entries.d.ts.map +0 -1
  645. package/dist/api/entries.js.map +0 -1
  646. package/dist/api/github-sync.d.ts.map +0 -1
  647. package/dist/api/github-sync.js.map +0 -1
  648. package/dist/api/groups.d.ts.map +0 -1
  649. package/dist/api/groups.js.map +0 -1
  650. package/dist/api/guards.d.ts.map +0 -1
  651. package/dist/api/guards.js.map +0 -1
  652. package/dist/api/index.d.ts.map +0 -1
  653. package/dist/api/index.js.map +0 -1
  654. package/dist/api/permissions.d.ts.map +0 -1
  655. package/dist/api/permissions.js.map +0 -1
  656. package/dist/api/reference-options.d.ts.map +0 -1
  657. package/dist/api/reference-options.js.map +0 -1
  658. package/dist/api/request-body-hash.d.ts.map +0 -1
  659. package/dist/api/request-body-hash.js.map +0 -1
  660. package/dist/api/resolve-references.d.ts.map +0 -1
  661. package/dist/api/resolve-references.js.map +0 -1
  662. package/dist/api/route-builder.d.ts.map +0 -1
  663. package/dist/api/route-builder.js.map +0 -1
  664. package/dist/api/schema.d.ts.map +0 -1
  665. package/dist/api/schema.js.map +0 -1
  666. package/dist/api/settings-helpers.d.ts.map +0 -1
  667. package/dist/api/settings-helpers.js.map +0 -1
  668. package/dist/api/types.d.ts.map +0 -1
  669. package/dist/api/types.js.map +0 -1
  670. package/dist/api/user.d.ts.map +0 -1
  671. package/dist/api/user.js.map +0 -1
  672. package/dist/api/validators.d.ts.map +0 -1
  673. package/dist/api/validators.js.map +0 -1
  674. package/dist/assets/asset-prefixes.d.ts.map +0 -1
  675. package/dist/assets/asset-prefixes.js.map +0 -1
  676. package/dist/assets/asset-src.d.ts.map +0 -1
  677. package/dist/assets/asset-src.js.map +0 -1
  678. package/dist/assets/asset-url.d.ts.map +0 -1
  679. package/dist/assets/asset-url.js.map +0 -1
  680. package/dist/assets/factory.d.ts.map +0 -1
  681. package/dist/assets/factory.js.map +0 -1
  682. package/dist/assets/finalize.d.ts.map +0 -1
  683. package/dist/assets/finalize.js.map +0 -1
  684. package/dist/assets/index.d.ts.map +0 -1
  685. package/dist/assets/index.js.map +0 -1
  686. package/dist/assets/keys.d.ts.map +0 -1
  687. package/dist/assets/keys.js.map +0 -1
  688. package/dist/assets/pipeline.d.ts.map +0 -1
  689. package/dist/assets/pipeline.js.map +0 -1
  690. package/dist/assets/store-local.d.ts.map +0 -1
  691. package/dist/assets/store-local.js.map +0 -1
  692. package/dist/assets/store-s3.d.ts.map +0 -1
  693. package/dist/assets/store-s3.js.map +0 -1
  694. package/dist/assets/svg-sanitizer.d.ts.map +0 -1
  695. package/dist/assets/svg-sanitizer.js.map +0 -1
  696. package/dist/assets/transform-directives.d.ts.map +0 -1
  697. package/dist/assets/transform-directives.js.map +0 -1
  698. package/dist/assets/transform.d.ts.map +0 -1
  699. package/dist/assets/transform.js.map +0 -1
  700. package/dist/assets/types.d.ts.map +0 -1
  701. package/dist/assets/types.js.map +0 -1
  702. package/dist/auth/cache.d.ts.map +0 -1
  703. package/dist/auth/cache.js.map +0 -1
  704. package/dist/auth/caching-auth-plugin.d.ts.map +0 -1
  705. package/dist/auth/caching-auth-plugin.js.map +0 -1
  706. package/dist/auth/context-helpers.d.ts.map +0 -1
  707. package/dist/auth/context-helpers.js.map +0 -1
  708. package/dist/auth/file-based-auth-cache.d.ts.map +0 -1
  709. package/dist/auth/file-based-auth-cache.js.map +0 -1
  710. package/dist/auth/index.d.ts.map +0 -1
  711. package/dist/auth/index.js.map +0 -1
  712. package/dist/auth/plugin.d.ts.map +0 -1
  713. package/dist/auth/plugin.js.map +0 -1
  714. package/dist/auth/types.d.ts.map +0 -1
  715. package/dist/auth/types.js.map +0 -1
  716. package/dist/authorization/branch.d.ts.map +0 -1
  717. package/dist/authorization/branch.js.map +0 -1
  718. package/dist/authorization/content.d.ts.map +0 -1
  719. package/dist/authorization/content.js.map +0 -1
  720. package/dist/authorization/groups/index.d.ts.map +0 -1
  721. package/dist/authorization/groups/index.js.map +0 -1
  722. package/dist/authorization/groups/loader.d.ts.map +0 -1
  723. package/dist/authorization/groups/loader.js.map +0 -1
  724. package/dist/authorization/groups/schema.d.ts.map +0 -1
  725. package/dist/authorization/groups/schema.js.map +0 -1
  726. package/dist/authorization/helpers.d.ts.map +0 -1
  727. package/dist/authorization/helpers.js.map +0 -1
  728. package/dist/authorization/index.d.ts.map +0 -1
  729. package/dist/authorization/index.js.map +0 -1
  730. package/dist/authorization/path.d.ts.map +0 -1
  731. package/dist/authorization/path.js.map +0 -1
  732. package/dist/authorization/permissions/index.d.ts.map +0 -1
  733. package/dist/authorization/permissions/index.js.map +0 -1
  734. package/dist/authorization/permissions/loader.d.ts.map +0 -1
  735. package/dist/authorization/permissions/loader.js.map +0 -1
  736. package/dist/authorization/permissions/schema.d.ts.map +0 -1
  737. package/dist/authorization/permissions/schema.js.map +0 -1
  738. package/dist/authorization/protected-branch.d.ts.map +0 -1
  739. package/dist/authorization/protected-branch.js.map +0 -1
  740. package/dist/authorization/settings-file-store.d.ts.map +0 -1
  741. package/dist/authorization/settings-file-store.js.map +0 -1
  742. package/dist/authorization/test-utils.d.ts +0 -26
  743. package/dist/authorization/test-utils.d.ts.map +0 -1
  744. package/dist/authorization/test-utils.js +0 -23
  745. package/dist/authorization/test-utils.js.map +0 -1
  746. package/dist/authorization/types.d.ts.map +0 -1
  747. package/dist/authorization/types.js.map +0 -1
  748. package/dist/authorization/validation.d.ts.map +0 -1
  749. package/dist/authorization/validation.js.map +0 -1
  750. package/dist/branch-health.d.ts.map +0 -1
  751. package/dist/branch-health.js.map +0 -1
  752. package/dist/branch-metadata.d.ts.map +0 -1
  753. package/dist/branch-metadata.js.map +0 -1
  754. package/dist/branch-registry.d.ts.map +0 -1
  755. package/dist/branch-registry.js.map +0 -1
  756. package/dist/branch-schema-cache.d.ts.map +0 -1
  757. package/dist/branch-schema-cache.js.map +0 -1
  758. package/dist/branch-workspace.d.ts.map +0 -1
  759. package/dist/branch-workspace.js.map +0 -1
  760. package/dist/build/generate-ai-content.d.ts.map +0 -1
  761. package/dist/build/generate-ai-content.js.map +0 -1
  762. package/dist/build/index.d.ts.map +0 -1
  763. package/dist/build/index.js.map +0 -1
  764. package/dist/build-canopy.d.ts.map +0 -1
  765. package/dist/build-canopy.js.map +0 -1
  766. package/dist/build-mode.d.ts.map +0 -1
  767. package/dist/build-mode.js.map +0 -1
  768. package/dist/cli/cli.d.ts.map +0 -1
  769. package/dist/cli/cli.js.map +0 -1
  770. package/dist/cli/generate-ai-content.d.ts.map +0 -1
  771. package/dist/cli/generate-ai-content.js.map +0 -1
  772. package/dist/cli/init.d.ts.map +0 -1
  773. package/dist/cli/init.js.map +0 -1
  774. package/dist/cli/migrate.d.ts.map +0 -1
  775. package/dist/cli/migrate.js.map +0 -1
  776. package/dist/cli/project-detect.d.ts.map +0 -1
  777. package/dist/cli/project-detect.js.map +0 -1
  778. package/dist/cli/project-root.d.ts.map +0 -1
  779. package/dist/cli/project-root.js.map +0 -1
  780. package/dist/cli/sync.d.ts.map +0 -1
  781. package/dist/cli/sync.js.map +0 -1
  782. package/dist/cli/templates.d.ts.map +0 -1
  783. package/dist/cli/templates.js.map +0 -1
  784. package/dist/client.d.ts.map +0 -1
  785. package/dist/client.js.map +0 -1
  786. package/dist/comment-store.d.ts.map +0 -1
  787. package/dist/comment-store.js.map +0 -1
  788. package/dist/config/flatten.d.ts.map +0 -1
  789. package/dist/config/flatten.js.map +0 -1
  790. package/dist/config/helpers.d.ts.map +0 -1
  791. package/dist/config/helpers.js.map +0 -1
  792. package/dist/config/index.d.ts.map +0 -1
  793. package/dist/config/index.js.map +0 -1
  794. package/dist/config/schemas/collection.d.ts.map +0 -1
  795. package/dist/config/schemas/collection.js.map +0 -1
  796. package/dist/config/schemas/config.d.ts.map +0 -1
  797. package/dist/config/schemas/config.js.map +0 -1
  798. package/dist/config/schemas/field.d.ts.map +0 -1
  799. package/dist/config/schemas/field.js.map +0 -1
  800. package/dist/config/schemas/media.d.ts.map +0 -1
  801. package/dist/config/schemas/media.js.map +0 -1
  802. package/dist/config/schemas/permissions.d.ts.map +0 -1
  803. package/dist/config/schemas/permissions.js.map +0 -1
  804. package/dist/config/types.d.ts.map +0 -1
  805. package/dist/config/types.js.map +0 -1
  806. package/dist/config/validation.d.ts.map +0 -1
  807. package/dist/config/validation.js.map +0 -1
  808. package/dist/config-test.d.ts +0 -20
  809. package/dist/config-test.d.ts.map +0 -1
  810. package/dist/config-test.js +0 -49
  811. package/dist/config-test.js.map +0 -1
  812. package/dist/config.d.ts.map +0 -1
  813. package/dist/config.js.map +0 -1
  814. package/dist/content-id-index.d.ts.map +0 -1
  815. package/dist/content-id-index.js.map +0 -1
  816. package/dist/content-index-generation.d.ts.map +0 -1
  817. package/dist/content-index-generation.js.map +0 -1
  818. package/dist/content-index-registry.d.ts.map +0 -1
  819. package/dist/content-index-registry.js.map +0 -1
  820. package/dist/content-listing.d.ts.map +0 -1
  821. package/dist/content-listing.js.map +0 -1
  822. package/dist/content-reader.d.ts.map +0 -1
  823. package/dist/content-reader.js.map +0 -1
  824. package/dist/content-store.d.ts.map +0 -1
  825. package/dist/content-store.js.map +0 -1
  826. package/dist/content-tree.d.ts.map +0 -1
  827. package/dist/content-tree.js.map +0 -1
  828. package/dist/context.d.ts.map +0 -1
  829. package/dist/context.js.map +0 -1
  830. package/dist/dev-content-watcher.d.ts.map +0 -1
  831. package/dist/dev-content-watcher.js.map +0 -1
  832. package/dist/editor/BranchManager.d.ts.map +0 -1
  833. package/dist/editor/BranchManager.js.map +0 -1
  834. package/dist/editor/CanopyEditor.d.ts.map +0 -1
  835. package/dist/editor/CanopyEditor.js.map +0 -1
  836. package/dist/editor/CanopyEditorPage.d.ts.map +0 -1
  837. package/dist/editor/CanopyEditorPage.js.map +0 -1
  838. package/dist/editor/CommentsPanel.d.ts.map +0 -1
  839. package/dist/editor/CommentsPanel.js.map +0 -1
  840. package/dist/editor/Editor.d.ts.map +0 -1
  841. package/dist/editor/Editor.js.map +0 -1
  842. package/dist/editor/EditorPanes.d.ts.map +0 -1
  843. package/dist/editor/EditorPanes.js.map +0 -1
  844. package/dist/editor/EntryNavigator.d.ts.map +0 -1
  845. package/dist/editor/EntryNavigator.js.map +0 -1
  846. package/dist/editor/FormRenderer.d.ts.map +0 -1
  847. package/dist/editor/FormRenderer.js.map +0 -1
  848. package/dist/editor/GroupManager.d.ts.map +0 -1
  849. package/dist/editor/GroupManager.js.map +0 -1
  850. package/dist/editor/PermissionManager.d.ts.map +0 -1
  851. package/dist/editor/PermissionManager.js.map +0 -1
  852. package/dist/editor/admin/SystemHealthPanel.d.ts.map +0 -1
  853. package/dist/editor/admin/SystemHealthPanel.js.map +0 -1
  854. package/dist/editor/admin/useSystemHealth.d.ts.map +0 -1
  855. package/dist/editor/admin/useSystemHealth.js.map +0 -1
  856. package/dist/editor/canopy-path.d.ts.map +0 -1
  857. package/dist/editor/canopy-path.js.map +0 -1
  858. package/dist/editor/client-reference-resolver.d.ts.map +0 -1
  859. package/dist/editor/client-reference-resolver.js.map +0 -1
  860. package/dist/editor/comments/BranchComments.d.ts.map +0 -1
  861. package/dist/editor/comments/BranchComments.js.map +0 -1
  862. package/dist/editor/comments/EntryComments.d.ts.map +0 -1
  863. package/dist/editor/comments/EntryComments.js.map +0 -1
  864. package/dist/editor/comments/FieldWrapper.d.ts.map +0 -1
  865. package/dist/editor/comments/FieldWrapper.js.map +0 -1
  866. package/dist/editor/comments/InlineCommentThread.d.ts.map +0 -1
  867. package/dist/editor/comments/InlineCommentThread.js.map +0 -1
  868. package/dist/editor/comments/ThreadCarousel.d.ts.map +0 -1
  869. package/dist/editor/comments/ThreadCarousel.js.map +0 -1
  870. package/dist/editor/components/ConfirmDeleteModal.d.ts.map +0 -1
  871. package/dist/editor/components/ConfirmDeleteModal.js.map +0 -1
  872. package/dist/editor/components/EditorFooter.d.ts.map +0 -1
  873. package/dist/editor/components/EditorFooter.js.map +0 -1
  874. package/dist/editor/components/EditorHeader.d.ts.map +0 -1
  875. package/dist/editor/components/EditorHeader.js.map +0 -1
  876. package/dist/editor/components/EditorSidebar.d.ts.map +0 -1
  877. package/dist/editor/components/EditorSidebar.js.map +0 -1
  878. package/dist/editor/components/EntryCreateModal.d.ts.map +0 -1
  879. package/dist/editor/components/EntryCreateModal.js.map +0 -1
  880. package/dist/editor/components/RenameEntryModal.d.ts.map +0 -1
  881. package/dist/editor/components/RenameEntryModal.js.map +0 -1
  882. package/dist/editor/components/UserBadge.d.ts.map +0 -1
  883. package/dist/editor/components/UserBadge.js.map +0 -1
  884. package/dist/editor/components/index.d.ts.map +0 -1
  885. package/dist/editor/components/index.js.map +0 -1
  886. package/dist/editor/context/ApiClientContext.d.ts.map +0 -1
  887. package/dist/editor/context/ApiClientContext.js.map +0 -1
  888. package/dist/editor/context/AssetContext.d.ts.map +0 -1
  889. package/dist/editor/context/AssetContext.js.map +0 -1
  890. package/dist/editor/context/EditorStateContext.d.ts.map +0 -1
  891. package/dist/editor/context/EditorStateContext.js.map +0 -1
  892. package/dist/editor/context/SWRProvider.d.ts.map +0 -1
  893. package/dist/editor/context/SWRProvider.js.map +0 -1
  894. package/dist/editor/context/index.d.ts.map +0 -1
  895. package/dist/editor/context/index.js.map +0 -1
  896. package/dist/editor/editor-config.d.ts.map +0 -1
  897. package/dist/editor/editor-config.js.map +0 -1
  898. package/dist/editor/editor-utils.d.ts.map +0 -1
  899. package/dist/editor/editor-utils.js.map +0 -1
  900. package/dist/editor/fields/BlockField.d.ts.map +0 -1
  901. package/dist/editor/fields/BlockField.js.map +0 -1
  902. package/dist/editor/fields/CodeField.d.ts.map +0 -1
  903. package/dist/editor/fields/CodeField.js.map +0 -1
  904. package/dist/editor/fields/DateTimeField.d.ts.map +0 -1
  905. package/dist/editor/fields/DateTimeField.js.map +0 -1
  906. package/dist/editor/fields/ImageField.d.ts.map +0 -1
  907. package/dist/editor/fields/ImageField.js.map +0 -1
  908. package/dist/editor/fields/InlineGroupField.d.ts.map +0 -1
  909. package/dist/editor/fields/InlineGroupField.js.map +0 -1
  910. package/dist/editor/fields/MarkdownField.d.ts.map +0 -1
  911. package/dist/editor/fields/MarkdownField.js.map +0 -1
  912. package/dist/editor/fields/MdxImageDialog.d.ts.map +0 -1
  913. package/dist/editor/fields/MdxImageDialog.js.map +0 -1
  914. package/dist/editor/fields/NumberField.d.ts.map +0 -1
  915. package/dist/editor/fields/NumberField.js.map +0 -1
  916. package/dist/editor/fields/NumberListField.d.ts.map +0 -1
  917. package/dist/editor/fields/NumberListField.js.map +0 -1
  918. package/dist/editor/fields/ObjectField.d.ts.map +0 -1
  919. package/dist/editor/fields/ObjectField.js.map +0 -1
  920. package/dist/editor/fields/ReferenceField.d.ts.map +0 -1
  921. package/dist/editor/fields/ReferenceField.js.map +0 -1
  922. package/dist/editor/fields/SelectField.d.ts.map +0 -1
  923. package/dist/editor/fields/SelectField.js.map +0 -1
  924. package/dist/editor/fields/StringListField.d.ts.map +0 -1
  925. package/dist/editor/fields/StringListField.js.map +0 -1
  926. package/dist/editor/fields/TextField.d.ts.map +0 -1
  927. package/dist/editor/fields/TextField.js.map +0 -1
  928. package/dist/editor/fields/ToggleField.d.ts.map +0 -1
  929. package/dist/editor/fields/ToggleField.js.map +0 -1
  930. package/dist/editor/fields/entry-link/EntryLinkContext.d.ts.map +0 -1
  931. package/dist/editor/fields/entry-link/EntryLinkContext.js.map +0 -1
  932. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts.map +0 -1
  933. package/dist/editor/fields/entry-link/InsertEntryLink.js.map +0 -1
  934. package/dist/editor/fields/entry-link/index.d.ts.map +0 -1
  935. package/dist/editor/fields/entry-link/index.js.map +0 -1
  936. package/dist/editor/group-manager/ExternalGroupsTab.d.ts.map +0 -1
  937. package/dist/editor/group-manager/ExternalGroupsTab.js.map +0 -1
  938. package/dist/editor/group-manager/GroupCard.d.ts.map +0 -1
  939. package/dist/editor/group-manager/GroupCard.js.map +0 -1
  940. package/dist/editor/group-manager/GroupForm.d.ts.map +0 -1
  941. package/dist/editor/group-manager/GroupForm.js.map +0 -1
  942. package/dist/editor/group-manager/InternalGroupsTab.d.ts.map +0 -1
  943. package/dist/editor/group-manager/InternalGroupsTab.js.map +0 -1
  944. package/dist/editor/group-manager/MemberList.d.ts.map +0 -1
  945. package/dist/editor/group-manager/MemberList.js.map +0 -1
  946. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts.map +0 -1
  947. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js.map +0 -1
  948. package/dist/editor/group-manager/hooks/useGroupState.d.ts.map +0 -1
  949. package/dist/editor/group-manager/hooks/useGroupState.js.map +0 -1
  950. package/dist/editor/group-manager/hooks/useUserSearch.d.ts.map +0 -1
  951. package/dist/editor/group-manager/hooks/useUserSearch.js.map +0 -1
  952. package/dist/editor/group-manager/index.d.ts.map +0 -1
  953. package/dist/editor/group-manager/index.js.map +0 -1
  954. package/dist/editor/group-manager/types.d.ts.map +0 -1
  955. package/dist/editor/group-manager/types.js.map +0 -1
  956. package/dist/editor/hooks/__test__/test-utils.d.ts +0 -164
  957. package/dist/editor/hooks/__test__/test-utils.d.ts.map +0 -1
  958. package/dist/editor/hooks/__test__/test-utils.js +0 -203
  959. package/dist/editor/hooks/__test__/test-utils.js.map +0 -1
  960. package/dist/editor/hooks/index.d.ts.map +0 -1
  961. package/dist/editor/hooks/index.js.map +0 -1
  962. package/dist/editor/hooks/useBranchActions.d.ts.map +0 -1
  963. package/dist/editor/hooks/useBranchActions.js.map +0 -1
  964. package/dist/editor/hooks/useBranchManager.d.ts.map +0 -1
  965. package/dist/editor/hooks/useBranchManager.js.map +0 -1
  966. package/dist/editor/hooks/useBranchesData.d.ts.map +0 -1
  967. package/dist/editor/hooks/useBranchesData.js.map +0 -1
  968. package/dist/editor/hooks/useCommentSystem.d.ts.map +0 -1
  969. package/dist/editor/hooks/useCommentSystem.js.map +0 -1
  970. package/dist/editor/hooks/useCommentsData.d.ts.map +0 -1
  971. package/dist/editor/hooks/useCommentsData.js.map +0 -1
  972. package/dist/editor/hooks/useDraftManager.d.ts.map +0 -1
  973. package/dist/editor/hooks/useDraftManager.js.map +0 -1
  974. package/dist/editor/hooks/useEditorLayout.d.ts.map +0 -1
  975. package/dist/editor/hooks/useEditorLayout.js.map +0 -1
  976. package/dist/editor/hooks/useEntriesData.d.ts.map +0 -1
  977. package/dist/editor/hooks/useEntriesData.js.map +0 -1
  978. package/dist/editor/hooks/useEntryLinkResolution.d.ts.map +0 -1
  979. package/dist/editor/hooks/useEntryLinkResolution.js.map +0 -1
  980. package/dist/editor/hooks/useEntryManager.d.ts.map +0 -1
  981. package/dist/editor/hooks/useEntryManager.js.map +0 -1
  982. package/dist/editor/hooks/useGroupManager.d.ts.map +0 -1
  983. package/dist/editor/hooks/useGroupManager.js.map +0 -1
  984. package/dist/editor/hooks/usePermissionManager.d.ts.map +0 -1
  985. package/dist/editor/hooks/usePermissionManager.js.map +0 -1
  986. package/dist/editor/hooks/useReferenceResolution.d.ts.map +0 -1
  987. package/dist/editor/hooks/useReferenceResolution.js.map +0 -1
  988. package/dist/editor/hooks/useSchemaManager.d.ts.map +0 -1
  989. package/dist/editor/hooks/useSchemaManager.js.map +0 -1
  990. package/dist/editor/hooks/useUserContext.d.ts.map +0 -1
  991. package/dist/editor/hooks/useUserContext.js.map +0 -1
  992. package/dist/editor/hooks/useUserMetadata.d.ts.map +0 -1
  993. package/dist/editor/hooks/useUserMetadata.js.map +0 -1
  994. package/dist/editor/media/AssetCard.d.ts.map +0 -1
  995. package/dist/editor/media/AssetCard.js.map +0 -1
  996. package/dist/editor/media/CropStep.d.ts.map +0 -1
  997. package/dist/editor/media/CropStep.js.map +0 -1
  998. package/dist/editor/media/MediaLibrary.d.ts.map +0 -1
  999. package/dist/editor/media/MediaLibrary.js.map +0 -1
  1000. package/dist/editor/media/MediaLibraryBody.d.ts.map +0 -1
  1001. package/dist/editor/media/MediaLibraryBody.js.map +0 -1
  1002. package/dist/editor/media/crop-math.d.ts.map +0 -1
  1003. package/dist/editor/media/crop-math.js.map +0 -1
  1004. package/dist/editor/media/upload-asset.d.ts.map +0 -1
  1005. package/dist/editor/media/upload-asset.js.map +0 -1
  1006. package/dist/editor/media/upload-constants.d.ts.map +0 -1
  1007. package/dist/editor/media/upload-constants.js.map +0 -1
  1008. package/dist/editor/media/useAssetUpload.d.ts.map +0 -1
  1009. package/dist/editor/media/useAssetUpload.js.map +0 -1
  1010. package/dist/editor/media/xhr-upload.d.ts.map +0 -1
  1011. package/dist/editor/media/xhr-upload.js.map +0 -1
  1012. package/dist/editor/permission-manager/GroupSelector.d.ts.map +0 -1
  1013. package/dist/editor/permission-manager/GroupSelector.js.map +0 -1
  1014. package/dist/editor/permission-manager/PermissionEditor.d.ts.map +0 -1
  1015. package/dist/editor/permission-manager/PermissionEditor.js.map +0 -1
  1016. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts.map +0 -1
  1017. package/dist/editor/permission-manager/PermissionLevelBadge.js.map +0 -1
  1018. package/dist/editor/permission-manager/PermissionTree.d.ts.map +0 -1
  1019. package/dist/editor/permission-manager/PermissionTree.js.map +0 -1
  1020. package/dist/editor/permission-manager/UserSelector.d.ts.map +0 -1
  1021. package/dist/editor/permission-manager/UserSelector.js.map +0 -1
  1022. package/dist/editor/permission-manager/constants.d.ts.map +0 -1
  1023. package/dist/editor/permission-manager/constants.js.map +0 -1
  1024. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts.map +0 -1
  1025. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js.map +0 -1
  1026. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts.map +0 -1
  1027. package/dist/editor/permission-manager/hooks/usePermissionTree.js.map +0 -1
  1028. package/dist/editor/permission-manager/index.d.ts.map +0 -1
  1029. package/dist/editor/permission-manager/index.js.map +0 -1
  1030. package/dist/editor/permission-manager/types.d.ts.map +0 -1
  1031. package/dist/editor/permission-manager/types.js.map +0 -1
  1032. package/dist/editor/permission-manager/utils.d.ts.map +0 -1
  1033. package/dist/editor/permission-manager/utils.js.map +0 -1
  1034. package/dist/editor/preview-bridge.d.ts.map +0 -1
  1035. package/dist/editor/preview-bridge.js.map +0 -1
  1036. package/dist/editor/relative-time.d.ts.map +0 -1
  1037. package/dist/editor/relative-time.js.map +0 -1
  1038. package/dist/editor/schema-editor/CollectionEditor.d.ts.map +0 -1
  1039. package/dist/editor/schema-editor/CollectionEditor.js.map +0 -1
  1040. package/dist/editor/schema-editor/EntryTypeEditor.d.ts.map +0 -1
  1041. package/dist/editor/schema-editor/EntryTypeEditor.js.map +0 -1
  1042. package/dist/editor/schema-editor/index.d.ts.map +0 -1
  1043. package/dist/editor/schema-editor/index.js.map +0 -1
  1044. package/dist/editor/setup-test-dom.d.ts +0 -1
  1045. package/dist/editor/setup-test-dom.d.ts.map +0 -1
  1046. package/dist/editor/setup-test-dom.js +0 -12
  1047. package/dist/editor/setup-test-dom.js.map +0 -1
  1048. package/dist/editor/test-setup.d.ts +0 -6
  1049. package/dist/editor/test-setup.d.ts.map +0 -1
  1050. package/dist/editor/test-setup.js +0 -42
  1051. package/dist/editor/test-setup.js.map +0 -1
  1052. package/dist/editor/theme.d.ts.map +0 -1
  1053. package/dist/editor/theme.js.map +0 -1
  1054. package/dist/editor/utils/env.d.ts.map +0 -1
  1055. package/dist/editor/utils/env.js.map +0 -1
  1056. package/dist/entry-link-resolver.d.ts.map +0 -1
  1057. package/dist/entry-link-resolver.js.map +0 -1
  1058. package/dist/entry-schema-registry.d.ts.map +0 -1
  1059. package/dist/entry-schema-registry.js.map +0 -1
  1060. package/dist/entry-schema.d.ts.map +0 -1
  1061. package/dist/entry-schema.js.map +0 -1
  1062. package/dist/git-manager.d.ts.map +0 -1
  1063. package/dist/git-manager.js.map +0 -1
  1064. package/dist/github-service.d.ts.map +0 -1
  1065. package/dist/github-service.js.map +0 -1
  1066. package/dist/http/handler.d.ts.map +0 -1
  1067. package/dist/http/handler.js.map +0 -1
  1068. package/dist/http/index.d.ts.map +0 -1
  1069. package/dist/http/index.js.map +0 -1
  1070. package/dist/http/router.d.ts.map +0 -1
  1071. package/dist/http/router.js.map +0 -1
  1072. package/dist/http/types.d.ts.map +0 -1
  1073. package/dist/http/types.js.map +0 -1
  1074. package/dist/id.d.ts.map +0 -1
  1075. package/dist/id.js.map +0 -1
  1076. package/dist/index.d.ts.map +0 -1
  1077. package/dist/index.js.map +0 -1
  1078. package/dist/operating-mode/client-safe-strategy.d.ts.map +0 -1
  1079. package/dist/operating-mode/client-safe-strategy.js.map +0 -1
  1080. package/dist/operating-mode/client-unsafe-strategy.d.ts.map +0 -1
  1081. package/dist/operating-mode/client-unsafe-strategy.js.map +0 -1
  1082. package/dist/operating-mode/client.d.ts.map +0 -1
  1083. package/dist/operating-mode/client.js.map +0 -1
  1084. package/dist/operating-mode/deployment-name-fixtures.d.ts.map +0 -1
  1085. package/dist/operating-mode/deployment-name-fixtures.js.map +0 -1
  1086. package/dist/operating-mode/deployment-name.d.ts.map +0 -1
  1087. package/dist/operating-mode/deployment-name.js.map +0 -1
  1088. package/dist/operating-mode/index.d.ts.map +0 -1
  1089. package/dist/operating-mode/index.js.map +0 -1
  1090. package/dist/operating-mode/mode-env.d.ts.map +0 -1
  1091. package/dist/operating-mode/mode-env.js.map +0 -1
  1092. package/dist/operating-mode/types.d.ts.map +0 -1
  1093. package/dist/operating-mode/types.js.map +0 -1
  1094. package/dist/paths/branch-name.d.ts.map +0 -1
  1095. package/dist/paths/branch-name.js.map +0 -1
  1096. package/dist/paths/branch.d.ts.map +0 -1
  1097. package/dist/paths/branch.js.map +0 -1
  1098. package/dist/paths/index.d.ts.map +0 -1
  1099. package/dist/paths/index.js.map +0 -1
  1100. package/dist/paths/normalize-server.d.ts.map +0 -1
  1101. package/dist/paths/normalize-server.js.map +0 -1
  1102. package/dist/paths/normalize.d.ts.map +0 -1
  1103. package/dist/paths/normalize.js.map +0 -1
  1104. package/dist/paths/resolve.d.ts.map +0 -1
  1105. package/dist/paths/resolve.js.map +0 -1
  1106. package/dist/paths/test-utils.d.ts +0 -22
  1107. package/dist/paths/test-utils.d.ts.map +0 -1
  1108. package/dist/paths/test-utils.js +0 -21
  1109. package/dist/paths/test-utils.js.map +0 -1
  1110. package/dist/paths/types.d.ts.map +0 -1
  1111. package/dist/paths/types.js.map +0 -1
  1112. package/dist/paths/validation.d.ts.map +0 -1
  1113. package/dist/paths/validation.js.map +0 -1
  1114. package/dist/reference-resolver.d.ts.map +0 -1
  1115. package/dist/reference-resolver.js.map +0 -1
  1116. package/dist/resolve-canopy-user.d.ts.map +0 -1
  1117. package/dist/resolve-canopy-user.js.map +0 -1
  1118. package/dist/resource-generation.d.ts.map +0 -1
  1119. package/dist/resource-generation.js.map +0 -1
  1120. package/dist/schema/index.d.ts.map +0 -1
  1121. package/dist/schema/index.js.map +0 -1
  1122. package/dist/schema/meta-loader.d.ts.map +0 -1
  1123. package/dist/schema/meta-loader.js.map +0 -1
  1124. package/dist/schema/resolver.d.ts.map +0 -1
  1125. package/dist/schema/resolver.js.map +0 -1
  1126. package/dist/schema/schema-store-types.d.ts.map +0 -1
  1127. package/dist/schema/schema-store-types.js.map +0 -1
  1128. package/dist/schema/schema-store.d.ts.map +0 -1
  1129. package/dist/schema/schema-store.js.map +0 -1
  1130. package/dist/schema/types.d.ts.map +0 -1
  1131. package/dist/schema/types.js.map +0 -1
  1132. package/dist/server.d.ts.map +0 -1
  1133. package/dist/server.js.map +0 -1
  1134. package/dist/services.d.ts.map +0 -1
  1135. package/dist/services.js.map +0 -1
  1136. package/dist/settings-workspace.d.ts.map +0 -1
  1137. package/dist/settings-workspace.js.map +0 -1
  1138. package/dist/static/index.d.ts.map +0 -1
  1139. package/dist/static/index.js.map +0 -1
  1140. package/dist/static/seo.d.ts.map +0 -1
  1141. package/dist/static/seo.js.map +0 -1
  1142. package/dist/sync-core.d.ts.map +0 -1
  1143. package/dist/sync-core.js.map +0 -1
  1144. package/dist/task-queue/index.d.ts.map +0 -1
  1145. package/dist/task-queue/index.js.map +0 -1
  1146. package/dist/task-queue/task-queue.d.ts.map +0 -1
  1147. package/dist/task-queue/task-queue.js.map +0 -1
  1148. package/dist/task-queue/types.d.ts.map +0 -1
  1149. package/dist/task-queue/types.js.map +0 -1
  1150. package/dist/types.d.ts.map +0 -1
  1151. package/dist/types.js.map +0 -1
  1152. package/dist/url-path-resolver.d.ts.map +0 -1
  1153. package/dist/url-path-resolver.js.map +0 -1
  1154. package/dist/user.d.ts.map +0 -1
  1155. package/dist/user.js.map +0 -1
  1156. package/dist/utils/async-mutex.d.ts.map +0 -1
  1157. package/dist/utils/async-mutex.js.map +0 -1
  1158. package/dist/utils/atomic-write.d.ts.map +0 -1
  1159. package/dist/utils/atomic-write.js.map +0 -1
  1160. package/dist/utils/body-field.d.ts.map +0 -1
  1161. package/dist/utils/body-field.js.map +0 -1
  1162. package/dist/utils/content-write-lock.d.ts.map +0 -1
  1163. package/dist/utils/content-write-lock.js.map +0 -1
  1164. package/dist/utils/debug.d.ts.map +0 -1
  1165. package/dist/utils/debug.js.map +0 -1
  1166. package/dist/utils/entry-url.d.ts.map +0 -1
  1167. package/dist/utils/entry-url.js.map +0 -1
  1168. package/dist/utils/error.d.ts.map +0 -1
  1169. package/dist/utils/error.js.map +0 -1
  1170. package/dist/utils/flatten-group-fields.d.ts.map +0 -1
  1171. package/dist/utils/flatten-group-fields.js.map +0 -1
  1172. package/dist/utils/format.d.ts.map +0 -1
  1173. package/dist/utils/format.js.map +0 -1
  1174. package/dist/utils/fs.d.ts.map +0 -1
  1175. package/dist/utils/fs.js.map +0 -1
  1176. package/dist/utils/git.d.ts.map +0 -1
  1177. package/dist/utils/git.js.map +0 -1
  1178. package/dist/utils/logger.d.ts.map +0 -1
  1179. package/dist/utils/logger.js.map +0 -1
  1180. package/dist/utils/occ-json-write.d.ts.map +0 -1
  1181. package/dist/utils/occ-json-write.js.map +0 -1
  1182. package/dist/utils/provisioning-lock.d.ts.map +0 -1
  1183. package/dist/utils/provisioning-lock.js.map +0 -1
  1184. package/dist/utils/sanitize-href.d.ts.map +0 -1
  1185. package/dist/utils/sanitize-href.js.map +0 -1
  1186. package/dist/utils/title-field.d.ts.map +0 -1
  1187. package/dist/utils/title-field.js.map +0 -1
  1188. package/dist/validation/deletion-checker.d.ts.map +0 -1
  1189. package/dist/validation/deletion-checker.js.map +0 -1
  1190. package/dist/validation/entry-link-validator.d.ts.map +0 -1
  1191. package/dist/validation/entry-link-validator.js.map +0 -1
  1192. package/dist/validation/entry-type-reference-validator.d.ts.map +0 -1
  1193. package/dist/validation/entry-type-reference-validator.js.map +0 -1
  1194. package/dist/validation/entry-validator.d.ts.map +0 -1
  1195. package/dist/validation/entry-validator.js.map +0 -1
  1196. package/dist/validation/field-traversal.d.ts.map +0 -1
  1197. package/dist/validation/field-traversal.js.map +0 -1
  1198. package/dist/validation/reference-validator.d.ts.map +0 -1
  1199. package/dist/validation/reference-validator.js.map +0 -1
  1200. package/dist/worker/cms-worker.d.ts.map +0 -1
  1201. package/dist/worker/cms-worker.js.map +0 -1
  1202. package/dist/worker/log.d.ts.map +0 -1
  1203. package/dist/worker/log.js.map +0 -1
  1204. package/dist/worker/task-queue-config.d.ts.map +0 -1
  1205. package/dist/worker/task-queue-config.js.map +0 -1
  1206. package/dist/worker/task-queue.d.ts.map +0 -1
  1207. package/dist/worker/task-queue.js.map +0 -1
  1208. package/dist/worker/worker-status.d.ts.map +0 -1
  1209. package/dist/worker/worker-status.js.map +0 -1
@@ -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
+ }
@@ -9,6 +9,14 @@
9
9
  * entry-schema.ts, which builds a schema group from these same names so the schema side and
10
10
  * the read side cannot drift.
11
11
  */
12
+ import { isAbsoluteUrl, stripTrailingSlashes } from '../utils/url-prefix.js';
13
+ /**
14
+ * Re-exported so this module's public surface (and `canopycms/server`'s, via `static/index.ts`)
15
+ * is unchanged by their move to `utils/url-prefix.ts` — where they now sit beside
16
+ * `joinUrlPrefix`, the shared join that `assets/asset-url.ts` also needs and that must not
17
+ * import anything under `static/`.
18
+ */
19
+ export { isAbsoluteUrl, stripTrailingSlashes };
12
20
  /** og:type values covered by the recommended group. */
13
21
  export type SeoOgType = 'website' | 'article' | 'profile';
14
22
  /** twitter:card values covered by the recommended group. */
@@ -79,35 +87,6 @@ export declare function extractSeoFields(entryData: unknown, opts?: ExtractSeoFi
79
87
  * resolves for anyone holding the link.
80
88
  */
81
89
  export declare function isNoindexEntry(entryData: unknown, opts?: SeoFieldLocation): boolean;
82
- /**
83
- * An off-site URL: either scheme-qualified (`https://…`) or LITERAL protocol-relative
84
- * (`//cdn…`). Both name a host we don't control, so neither may be rewritten against the site
85
- * origin — `resolveSeoUrl` passes a `true` result through verbatim.
86
- *
87
- * Deliberately narrower than "resolves off-origin": a WHATWG-backslash-equivalent spelling
88
- * (`/\evil.com`, `\\evil.com`, `\/evil.com` — see `utils/sanitize-href.ts`'s
89
- * `isImplicitlyOffOrigin`) also resolves off-origin in a browser, but is NOT recognized here as
90
- * an intentional off-site pointer the way a literal `//cdn…` is. `resolveSeoUrl` handles that
91
- * case separately, by neutralizing (`neutralizeImplicitOffOrigin`) rather than passing through: a
92
- * `false` result here isn't a guarantee the value is a safe site-relative path on its own, only
93
- * that it isn't a *declared* off-site one.
94
- */
95
- export declare function isAbsoluteUrl(url: string): boolean;
96
- /**
97
- * Strip trailing slashes without a regex.
98
- *
99
- * The obvious `replace(/\/+$/, '')` is a polynomial-ReDoS shape (CodeQL
100
- * `js/polynomial-redos`, flagged high): on a value that is mostly slashes but does not end in
101
- * one, the engine retries `\/+` from every position and the match cost is quadratic in the
102
- * input length. `siteUrl` is adopter-supplied and can reach here from config or an env var, so
103
- * it counts as uncontrolled. A character scan is linear and needs no reasoning about
104
- * backtracking.
105
- *
106
- * Exported (from `canopycms/server`) so adopter code normalizing its own site-origin env var —
107
- * e.g. a `SITE_URL` constant built from `NEXT_PUBLIC_SITE_URL` — has a package-provided linear
108
- * way to do it instead of reaching for the same regex this function replaced.
109
- */
110
- export declare function stripTrailingSlashes(value: string): string;
111
90
  /**
112
91
  * Append a trailing slash to a site-relative path, matching a site that serves `/contact/`.
113
92
  *
@@ -147,4 +126,3 @@ export interface ResolveSeoUrlOptions {
147
126
  * "absolute" (see its doc) can't still be read by a browser as protocol-relative once emitted.
148
127
  */
149
128
  export declare function resolveSeoUrl(pathOrUrl: string, opts?: ResolveSeoUrlOptions): string;
150
- //# sourceMappingURL=seo.d.ts.map
@@ -9,7 +9,14 @@
9
9
  * entry-schema.ts, which builds a schema group from these same names so the schema side and
10
10
  * the read side cannot drift.
11
11
  */
12
- import { neutralizeImplicitOffOrigin } from '../utils/sanitize-href.js';
12
+ import { isAbsoluteUrl, joinUrlPrefix, stripTrailingSlashes, toSameOriginPath, } from '../utils/url-prefix.js';
13
+ /**
14
+ * Re-exported so this module's public surface (and `canopycms/server`'s, via `static/index.ts`)
15
+ * is unchanged by their move to `utils/url-prefix.ts` — where they now sit beside
16
+ * `joinUrlPrefix`, the shared join that `assets/asset-url.ts` also needs and that must not
17
+ * import anything under `static/`.
18
+ */
19
+ export { isAbsoluteUrl, stripTrailingSlashes };
13
20
  /**
14
21
  * The recommended SEO field names. `defineSeoFieldGroup()` emits a schema group using exactly
15
22
  * these names, so an adopter who uses both ends needs no configuration at all.
@@ -99,42 +106,6 @@ export function extractSeoFields(entryData, opts = {}) {
99
106
  export function isNoindexEntry(entryData, opts = {}) {
100
107
  return extractSeoFields(entryData, opts).noindex === true;
101
108
  }
102
- /**
103
- * An off-site URL: either scheme-qualified (`https://…`) or LITERAL protocol-relative
104
- * (`//cdn…`). Both name a host we don't control, so neither may be rewritten against the site
105
- * origin — `resolveSeoUrl` passes a `true` result through verbatim.
106
- *
107
- * Deliberately narrower than "resolves off-origin": a WHATWG-backslash-equivalent spelling
108
- * (`/\evil.com`, `\\evil.com`, `\/evil.com` — see `utils/sanitize-href.ts`'s
109
- * `isImplicitlyOffOrigin`) also resolves off-origin in a browser, but is NOT recognized here as
110
- * an intentional off-site pointer the way a literal `//cdn…` is. `resolveSeoUrl` handles that
111
- * case separately, by neutralizing (`neutralizeImplicitOffOrigin`) rather than passing through: a
112
- * `false` result here isn't a guarantee the value is a safe site-relative path on its own, only
113
- * that it isn't a *declared* off-site one.
114
- */
115
- export function isAbsoluteUrl(url) {
116
- return /^[a-z][a-z0-9+.-]*:\/\//i.test(url) || url.startsWith('//');
117
- }
118
- /**
119
- * Strip trailing slashes without a regex.
120
- *
121
- * The obvious `replace(/\/+$/, '')` is a polynomial-ReDoS shape (CodeQL
122
- * `js/polynomial-redos`, flagged high): on a value that is mostly slashes but does not end in
123
- * one, the engine retries `\/+` from every position and the match cost is quadratic in the
124
- * input length. `siteUrl` is adopter-supplied and can reach here from config or an env var, so
125
- * it counts as uncontrolled. A character scan is linear and needs no reasoning about
126
- * backtracking.
127
- *
128
- * Exported (from `canopycms/server`) so adopter code normalizing its own site-origin env var —
129
- * e.g. a `SITE_URL` constant built from `NEXT_PUBLIC_SITE_URL` — has a package-provided linear
130
- * way to do it instead of reaching for the same regex this function replaced.
131
- */
132
- export function stripTrailingSlashes(value) {
133
- let end = value.length;
134
- while (end > 0 && value.charCodeAt(end - 1) === 47 /* '/' */)
135
- end--;
136
- return value.slice(0, end);
137
- }
138
109
  /**
139
110
  * Append a trailing slash to a site-relative path, matching a site that serves `/contact/`.
140
111
  *
@@ -177,13 +148,15 @@ export function withTrailingSlash(path) {
177
148
  export function resolveSeoUrl(pathOrUrl, opts = {}) {
178
149
  if (isAbsoluteUrl(pathOrUrl))
179
150
  return pathOrUrl;
180
- const safePathOrUrl = neutralizeImplicitOffOrigin(pathOrUrl);
181
- const normalized = opts.trailingSlash
182
- ? withTrailingSlash(safePathOrUrl)
183
- : safePathOrUrl.startsWith('/')
184
- ? safePathOrUrl
185
- : `/${safePathOrUrl}`;
186
- const origin = opts.siteUrl === undefined ? undefined : stripTrailingSlashes(opts.siteUrl);
187
- return origin ? origin + normalized : normalized;
151
+ // Neutralize BEFORE the trailing-slash step, which is the order this has always run in:
152
+ // `withTrailingSlash` inspects the last path segment, and a backslash-equivalent spelling
153
+ // changes what that segment is.
154
+ //
155
+ // `toSameOriginPath`, not a bare `neutralizeImplicitOffOrigin`: neutralizing `/\evil.com//a`
156
+ // yields `//a`, and handing THAT to `joinUrlPrefix` means its absolute-URL check reads it as a
157
+ // protocol-relative pointer and returns it verbatim — dropping `siteUrl` and emitting an
158
+ // off-origin canonical. See `toSameOriginPath`'s doc.
159
+ const safePathOrUrl = toSameOriginPath(pathOrUrl);
160
+ const normalized = opts.trailingSlash ? withTrailingSlash(safePathOrUrl) : safePathOrUrl;
161
+ return joinUrlPrefix(opts.siteUrl, normalized);
188
162
  }
189
- //# sourceMappingURL=seo.js.map
@@ -54,4 +54,3 @@ export interface PushContentToWorkspaceOptions {
54
54
  export declare function pushContentToWorkspace(options: PushContentToWorkspaceOptions): Promise<{
55
55
  fileCount: number;
56
56
  }>;
57
- //# sourceMappingURL=sync-core.d.ts.map
package/dist/sync-core.js CHANGED
@@ -176,4 +176,3 @@ export async function pushContentToWorkspace(options) {
176
176
  await invalidateBranchContentCaches(branchPath);
177
177
  }
178
178
  }
179
- //# sourceMappingURL=sync-core.js.map