canopycms 0.0.67-int.90 → 0.0.67

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 (539) hide show
  1. package/README.md +30 -3
  2. package/dist/ai/generate.js +1 -27
  3. package/dist/ai/handler.d.ts +0 -4
  4. package/dist/ai/handler.js +0 -11
  5. package/dist/ai/index.d.ts +1 -8
  6. package/dist/ai/index.js +1 -8
  7. package/dist/ai/json-to-markdown.js +15 -58
  8. package/dist/ai/resolve-branch.d.ts +2 -7
  9. package/dist/ai/resolve-branch.js +2 -8
  10. package/dist/ai/strip-mdx.d.ts +5 -13
  11. package/dist/ai/strip-mdx.js +5 -17
  12. package/dist/ai/to-plain-text.d.ts +10 -28
  13. package/dist/ai/to-plain-text.js +10 -28
  14. package/dist/ai/transform-components.d.ts +2 -4
  15. package/dist/ai/transform-components.js +8 -19
  16. package/dist/ai/types.d.ts +5 -10
  17. package/dist/api/admin-branch-health.d.ts +4 -12
  18. package/dist/api/admin-branch-health.js +26 -66
  19. package/dist/api/admin.d.ts +4 -12
  20. package/dist/api/admin.js +10 -26
  21. package/dist/api/assets.d.ts +0 -25
  22. package/dist/api/assets.js +50 -91
  23. package/dist/api/branch-merge.d.ts +1 -1
  24. package/dist/api/branch-merge.js +0 -2
  25. package/dist/api/branch-review.d.ts +0 -8
  26. package/dist/api/branch-review.js +0 -13
  27. package/dist/api/branch-status.d.ts +0 -3
  28. package/dist/api/branch-status.js +8 -33
  29. package/dist/api/branch-withdraw.d.ts +0 -1
  30. package/dist/api/branch-withdraw.js +6 -9
  31. package/dist/api/branch.d.ts +7 -12
  32. package/dist/api/branch.js +7 -44
  33. package/dist/api/client.d.ts +71 -224
  34. package/dist/api/client.js +82 -233
  35. package/dist/api/comments.d.ts +2 -4
  36. package/dist/api/comments.js +0 -17
  37. package/dist/api/content.d.ts +0 -6
  38. package/dist/api/content.js +66 -142
  39. package/dist/api/entries-constants.d.ts +5 -9
  40. package/dist/api/entries-constants.js +5 -9
  41. package/dist/api/entries.d.ts +8 -13
  42. package/dist/api/entries.js +20 -51
  43. package/dist/api/github-sync.d.ts +2 -4
  44. package/dist/api/github-sync.js +4 -8
  45. package/dist/api/groups.d.ts +3 -0
  46. package/dist/api/groups.js +8 -21
  47. package/dist/api/guards.d.ts +4 -16
  48. package/dist/api/guards.js +3 -22
  49. package/dist/api/index.d.ts +4 -4
  50. package/dist/api/permissions.d.ts +2 -0
  51. package/dist/api/permissions.js +18 -40
  52. package/dist/api/reference-options.d.ts +0 -1
  53. package/dist/api/reference-options.js +3 -11
  54. package/dist/api/request-body-hash.d.ts +12 -23
  55. package/dist/api/request-body-hash.js +12 -23
  56. package/dist/api/resolve-references.d.ts +0 -1
  57. package/dist/api/resolve-references.js +13 -28
  58. package/dist/api/route-builder.d.ts +3 -7
  59. package/dist/api/route-builder.js +1 -1
  60. package/dist/api/routes.d.ts +12 -0
  61. package/dist/api/routes.js +47 -0
  62. package/dist/api/schema.d.ts +23 -33
  63. package/dist/api/schema.js +20 -74
  64. package/dist/api/settings-helpers.js +4 -5
  65. package/dist/api/types.d.ts +0 -5
  66. package/dist/api/user.js +0 -5
  67. package/dist/api/validators.d.ts +14 -52
  68. package/dist/api/validators.js +14 -52
  69. package/dist/assets/asset-prefixes.d.ts +4 -8
  70. package/dist/assets/asset-prefixes.js +4 -8
  71. package/dist/assets/asset-src.d.ts +5 -22
  72. package/dist/assets/asset-src.js +5 -21
  73. package/dist/assets/factory.d.ts +1 -2
  74. package/dist/assets/factory.js +1 -2
  75. package/dist/assets/finalize.d.ts +3 -1
  76. package/dist/assets/finalize.js +3 -1
  77. package/dist/assets/index.d.ts +3 -3
  78. package/dist/assets/index.js +1 -1
  79. package/dist/assets/keys.d.ts +5 -3
  80. package/dist/assets/keys.js +6 -3
  81. package/dist/assets/pipeline.d.ts +3 -2
  82. package/dist/assets/pipeline.js +22 -56
  83. package/dist/assets/sharp-loader.d.ts +2 -10
  84. package/dist/assets/sharp-loader.js +2 -10
  85. package/dist/assets/store-local.d.ts +1 -2
  86. package/dist/assets/store-local.js +1 -2
  87. package/dist/assets/store-s3.d.ts +3 -4
  88. package/dist/assets/svg-sanitizer.d.ts +6 -14
  89. package/dist/assets/svg-sanitizer.js +6 -14
  90. package/dist/assets/transform-directives.d.ts +3 -4
  91. package/dist/assets/transform-directives.js +1 -1
  92. package/dist/assets/transform.d.ts +19 -30
  93. package/dist/assets/transform.js +18 -31
  94. package/dist/auth/cache.d.ts +2 -3
  95. package/dist/auth/cache.js +2 -3
  96. package/dist/auth/caching-auth-plugin.d.ts +11 -22
  97. package/dist/auth/caching-auth-plugin.js +12 -14
  98. package/dist/auth/context-helpers.d.ts +6 -20
  99. package/dist/auth/context-helpers.js +5 -17
  100. package/dist/auth/file-based-auth-cache.d.ts +10 -21
  101. package/dist/auth/file-based-auth-cache.js +23 -51
  102. package/dist/auth/plugin.d.ts +29 -61
  103. package/dist/auth/plugin.js +9 -13
  104. package/dist/auth/types.d.ts +11 -20
  105. package/dist/authorization/branch.d.ts +30 -49
  106. package/dist/authorization/branch.js +16 -42
  107. package/dist/authorization/content.d.ts +11 -40
  108. package/dist/authorization/content.js +13 -45
  109. package/dist/authorization/groups/index.d.ts +0 -3
  110. package/dist/authorization/groups/index.js +0 -3
  111. package/dist/authorization/groups/loader.d.ts +14 -28
  112. package/dist/authorization/groups/loader.js +14 -38
  113. package/dist/authorization/groups/schema.d.ts +0 -6
  114. package/dist/authorization/groups/schema.js +4 -7
  115. package/dist/authorization/helpers.d.ts +9 -28
  116. package/dist/authorization/helpers.js +9 -28
  117. package/dist/authorization/index.d.ts +3 -25
  118. package/dist/authorization/index.js +3 -35
  119. package/dist/authorization/path.d.ts +6 -13
  120. package/dist/authorization/path.js +8 -25
  121. package/dist/authorization/permissions/index.d.ts +0 -3
  122. package/dist/authorization/permissions/index.js +0 -3
  123. package/dist/authorization/permissions/loader.d.ts +14 -27
  124. package/dist/authorization/permissions/loader.js +14 -32
  125. package/dist/authorization/permissions/schema.d.ts +1 -6
  126. package/dist/authorization/permissions/schema.js +6 -13
  127. package/dist/authorization/protected-branch.d.ts +36 -65
  128. package/dist/authorization/protected-branch.js +29 -41
  129. package/dist/authorization/settings-file-store.d.ts +38 -81
  130. package/dist/authorization/settings-file-store.js +38 -79
  131. package/dist/authorization/types.d.ts +4 -26
  132. package/dist/authorization/types.js +0 -6
  133. package/dist/authorization/validation.d.ts +1 -23
  134. package/dist/authorization/validation.js +1 -24
  135. package/dist/branch-health.d.ts +39 -67
  136. package/dist/branch-health.js +27 -43
  137. package/dist/branch-metadata-file.d.ts +16 -32
  138. package/dist/branch-metadata-file.js +13 -26
  139. package/dist/branch-metadata.d.ts +49 -80
  140. package/dist/branch-metadata.js +57 -87
  141. package/dist/branch-registry.d.ts +26 -64
  142. package/dist/branch-registry.js +44 -93
  143. package/dist/branch-schema-cache.d.ts +34 -124
  144. package/dist/branch-schema-cache.js +49 -155
  145. package/dist/branch-workspace.d.ts +4 -4
  146. package/dist/branch-workspace.js +15 -19
  147. package/dist/build/generate-ai-content.d.ts +1 -0
  148. package/dist/build/generate-ai-content.js +12 -25
  149. package/dist/build-canopy.d.ts +17 -27
  150. package/dist/build-canopy.js +16 -23
  151. package/dist/build-mode.d.ts +25 -27
  152. package/dist/build-mode.js +25 -29
  153. package/dist/cli/cli.d.ts +15 -26
  154. package/dist/cli/cli.js +601 -978
  155. package/dist/cli/generate-ai-content.js +351 -628
  156. package/dist/cli/github-app-manifest.d.ts +84 -0
  157. package/dist/cli/github-app-manifest.js +161 -0
  158. package/dist/cli/init-github-app.d.ts +110 -444
  159. package/dist/cli/init-github-app.js +236 -773
  160. package/dist/cli/init.js +39 -80
  161. package/dist/cli/migrate.d.ts +13 -10
  162. package/dist/cli/migrate.js +22 -30
  163. package/dist/cli/project-detect.d.ts +17 -31
  164. package/dist/cli/project-detect.js +31 -42
  165. package/dist/cli/project-root.d.ts +4 -11
  166. package/dist/cli/project-root.js +4 -11
  167. package/dist/cli/prompt.d.ts +10 -0
  168. package/dist/cli/prompt.js +67 -0
  169. package/dist/cli/sync.d.ts +0 -8
  170. package/dist/cli/sync.js +8 -28
  171. package/dist/cli/template-files/middleware.ts.template +15 -29
  172. package/dist/cli/templates.d.ts +2 -12
  173. package/dist/cli/templates.js +4 -4
  174. package/dist/client.d.ts +1 -1
  175. package/dist/comment-store.d.ts +32 -53
  176. package/dist/comment-store.js +32 -52
  177. package/dist/config/flatten.d.ts +0 -3
  178. package/dist/config/flatten.js +2 -12
  179. package/dist/config/helpers.js +2 -2
  180. package/dist/config/index.d.ts +2 -2
  181. package/dist/config/index.js +1 -4
  182. package/dist/config/schemas/collection.d.ts +0 -8
  183. package/dist/config/schemas/collection.js +0 -10
  184. package/dist/config/schemas/config.d.ts +6 -78
  185. package/dist/config/schemas/config.js +38 -54
  186. package/dist/config/schemas/field.d.ts +2 -242
  187. package/dist/config/schemas/field.js +9 -20
  188. package/dist/config/schemas/media.js +1 -1
  189. package/dist/config/schemas/permissions.js +0 -2
  190. package/dist/config/schemas/url.d.ts +5 -6
  191. package/dist/config/schemas/url.js +5 -6
  192. package/dist/config/types.d.ts +45 -33
  193. package/dist/config/types.js +0 -1
  194. package/dist/config.d.ts +1 -8
  195. package/dist/config.js +1 -9
  196. package/dist/content-id-index.d.ts +76 -188
  197. package/dist/content-id-index.js +79 -230
  198. package/dist/content-index-generation.d.ts +27 -48
  199. package/dist/content-index-generation.js +35 -84
  200. package/dist/content-index-registry.d.ts +15 -24
  201. package/dist/content-index-registry.js +5 -9
  202. package/dist/content-listing.d.ts +64 -107
  203. package/dist/content-listing.js +68 -118
  204. package/dist/content-reader.d.ts +20 -29
  205. package/dist/content-reader.js +10 -18
  206. package/dist/content-store.d.ts +210 -336
  207. package/dist/content-store.js +413 -657
  208. package/dist/content-tree.d.ts +44 -86
  209. package/dist/content-tree.js +26 -54
  210. package/dist/context.d.ts +67 -94
  211. package/dist/context.js +53 -72
  212. package/dist/dev-content-watcher.d.ts +18 -18
  213. package/dist/dev-content-watcher.js +41 -44
  214. package/dist/editor/BranchManager.d.ts +3 -6
  215. package/dist/editor/BranchManager.js +24 -44
  216. package/dist/editor/CanopyEditor.js +5 -2
  217. package/dist/editor/CommentsPanel.js +0 -2
  218. package/dist/editor/Editor.js +19 -76
  219. package/dist/editor/EditorAuthGate.d.ts +27 -0
  220. package/dist/editor/EditorAuthGate.js +140 -0
  221. package/dist/editor/EntryNavigator.js +0 -20
  222. package/dist/editor/FormRenderer.d.ts +1 -2
  223. package/dist/editor/FormRenderer.js +8 -23
  224. package/dist/editor/admin/SystemHealthPanel.js +20 -37
  225. package/dist/editor/admin/useSystemHealth.d.ts +2 -3
  226. package/dist/editor/admin/useSystemHealth.js +10 -12
  227. package/dist/editor/client-reference-resolver.d.ts +2 -5
  228. package/dist/editor/client-reference-resolver.js +2 -19
  229. package/dist/editor/comments/BranchComments.js +0 -4
  230. package/dist/editor/comments/EntryComments.js +0 -4
  231. package/dist/editor/comments/FieldWrapper.js +0 -4
  232. package/dist/editor/comments/InlineCommentThread.js +0 -2
  233. package/dist/editor/comments/ThreadCarousel.d.ts +0 -58
  234. package/dist/editor/comments/ThreadCarousel.js +0 -12
  235. package/dist/editor/components/EditorFooter.d.ts +0 -8
  236. package/dist/editor/components/EditorFooter.js +0 -5
  237. package/dist/editor/components/EditorHeader.d.ts +0 -31
  238. package/dist/editor/components/EditorHeader.js +21 -71
  239. package/dist/editor/components/EditorSidebar.d.ts +0 -19
  240. package/dist/editor/components/EditorSidebar.js +0 -16
  241. package/dist/editor/components/EntryCreateModal.d.ts +4 -4
  242. package/dist/editor/components/EntryCreateModal.js +7 -22
  243. package/dist/editor/components/RenameEntryModal.js +0 -4
  244. package/dist/editor/components/UserBadge.js +0 -10
  245. package/dist/editor/components/index.js +0 -2
  246. package/dist/editor/context/ApiClientContext.d.ts +8 -7
  247. package/dist/editor/context/ApiClientContext.js +39 -11
  248. package/dist/editor/context/AssetContext.d.ts +7 -17
  249. package/dist/editor/context/AssetContext.js +7 -17
  250. package/dist/editor/context/EditorIdentityContext.d.ts +13 -0
  251. package/dist/editor/context/EditorIdentityContext.js +7 -0
  252. package/dist/editor/context/EditorStateContext.d.ts +10 -41
  253. package/dist/editor/context/EditorStateContext.js +7 -23
  254. package/dist/editor/context/SWRProvider.d.ts +3 -6
  255. package/dist/editor/context/index.d.ts +1 -20
  256. package/dist/editor/context/index.js +1 -20
  257. package/dist/editor/editor-utils.d.ts +8 -47
  258. package/dist/editor/editor-utils.js +19 -72
  259. package/dist/editor/fields/BlockField.d.ts +2 -2
  260. package/dist/editor/fields/BlockField.js +1 -2
  261. package/dist/editor/fields/CodeField.d.ts +0 -1
  262. package/dist/editor/fields/CodeField.js +0 -1
  263. package/dist/editor/fields/DateTimeField.d.ts +15 -22
  264. package/dist/editor/fields/DateTimeField.js +17 -26
  265. package/dist/editor/fields/ImageField.d.ts +2 -2
  266. package/dist/editor/fields/ImageField.js +8 -14
  267. package/dist/editor/fields/InlineGroupField.d.ts +0 -1
  268. package/dist/editor/fields/InlineGroupField.js +0 -1
  269. package/dist/editor/fields/MarkdownField.d.ts +0 -1
  270. package/dist/editor/fields/MarkdownField.js +6 -11
  271. package/dist/editor/fields/MdxImageDialog.d.ts +1 -1
  272. package/dist/editor/fields/MdxImageDialog.js +0 -1
  273. package/dist/editor/fields/NumberField.d.ts +9 -19
  274. package/dist/editor/fields/NumberField.js +11 -22
  275. package/dist/editor/fields/NumberListField.d.ts +7 -10
  276. package/dist/editor/fields/NumberListField.js +7 -10
  277. package/dist/editor/fields/ObjectField.d.ts +5 -8
  278. package/dist/editor/fields/ObjectField.js +0 -1
  279. package/dist/editor/fields/ReferenceField.d.ts +1 -1
  280. package/dist/editor/fields/ReferenceField.js +11 -16
  281. package/dist/editor/fields/SelectField.d.ts +2 -2
  282. package/dist/editor/fields/SelectField.js +0 -1
  283. package/dist/editor/fields/StringListField.d.ts +0 -4
  284. package/dist/editor/fields/StringListField.js +4 -9
  285. package/dist/editor/fields/TextField.d.ts +0 -1
  286. package/dist/editor/fields/TextField.js +0 -1
  287. package/dist/editor/fields/ToggleField.d.ts +0 -1
  288. package/dist/editor/fields/ToggleField.js +0 -1
  289. package/dist/editor/fields/entry-link/EntryLinkContext.js +2 -4
  290. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -3
  291. package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -4
  292. package/dist/editor/group-manager/ExternalGroupsTab.d.ts +0 -3
  293. package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
  294. package/dist/editor/group-manager/GroupCard.d.ts +0 -3
  295. package/dist/editor/group-manager/GroupForm.d.ts +0 -3
  296. package/dist/editor/group-manager/InternalGroupsTab.d.ts +0 -3
  297. package/dist/editor/group-manager/InternalGroupsTab.js +0 -2
  298. package/dist/editor/group-manager/MemberList.d.ts +0 -3
  299. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +0 -3
  300. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -3
  301. package/dist/editor/group-manager/hooks/useGroupState.d.ts +0 -3
  302. package/dist/editor/group-manager/hooks/useGroupState.js +0 -5
  303. package/dist/editor/group-manager/hooks/useUserSearch.d.ts +0 -3
  304. package/dist/editor/group-manager/hooks/useUserSearch.js +0 -3
  305. package/dist/editor/group-manager/index.d.ts +0 -6
  306. package/dist/editor/group-manager/index.js +0 -10
  307. package/dist/editor/group-manager/types.d.ts +2 -5
  308. package/dist/editor/group-manager/types.js +0 -3
  309. package/dist/editor/hooks/index.d.ts +6 -11
  310. package/dist/editor/hooks/index.js +6 -12
  311. package/dist/editor/hooks/useBranchActions.d.ts +0 -14
  312. package/dist/editor/hooks/useBranchActions.js +0 -22
  313. package/dist/editor/hooks/useBranchManager.d.ts +2 -48
  314. package/dist/editor/hooks/useBranchManager.js +4 -64
  315. package/dist/editor/hooks/useBranchesData.d.ts +7 -6
  316. package/dist/editor/hooks/useBranchesData.js +7 -6
  317. package/dist/editor/hooks/useCommentSystem.d.ts +0 -49
  318. package/dist/editor/hooks/useCommentSystem.js +1 -36
  319. package/dist/editor/hooks/useDraftManager.d.ts +2 -35
  320. package/dist/editor/hooks/useDraftManager.js +23 -64
  321. package/dist/editor/hooks/useEditorLayout.d.ts +0 -20
  322. package/dist/editor/hooks/useEditorLayout.js +0 -23
  323. package/dist/editor/hooks/useEntriesData.d.ts +1 -0
  324. package/dist/editor/hooks/useEntriesData.js +2 -3
  325. package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -2
  326. package/dist/editor/hooks/useEntryLinkResolution.js +2 -2
  327. package/dist/editor/hooks/useEntryManager.d.ts +2 -27
  328. package/dist/editor/hooks/useEntryManager.js +29 -78
  329. package/dist/editor/hooks/useGroupManager.d.ts +0 -21
  330. package/dist/editor/hooks/useGroupManager.js +0 -21
  331. package/dist/editor/hooks/usePermissionManager.d.ts +0 -20
  332. package/dist/editor/hooks/usePermissionManager.js +0 -20
  333. package/dist/editor/hooks/useReferenceResolution.d.ts +2 -33
  334. package/dist/editor/hooks/useReferenceResolution.js +1 -48
  335. package/dist/editor/hooks/useSchemaManager.d.ts +8 -27
  336. package/dist/editor/hooks/useSchemaManager.js +0 -19
  337. package/dist/editor/hooks/useUserContext.d.ts +2 -9
  338. package/dist/editor/hooks/useUserContext.js +10 -10
  339. package/dist/editor/hooks/useUserMetadata.d.ts +0 -2
  340. package/dist/editor/hooks/useUserMetadata.js +0 -3
  341. package/dist/editor/media/AssetCard.d.ts +0 -1
  342. package/dist/editor/media/AssetCard.js +1 -2
  343. package/dist/editor/media/CropStep.d.ts +0 -1
  344. package/dist/editor/media/CropStep.js +0 -1
  345. package/dist/editor/media/MediaLibrary.d.ts +1 -2
  346. package/dist/editor/media/MediaLibrary.js +1 -2
  347. package/dist/editor/media/MediaLibraryBody.d.ts +0 -1
  348. package/dist/editor/media/MediaLibraryBody.js +0 -1
  349. package/dist/editor/media/crop-math.d.ts +1 -1
  350. package/dist/editor/media/crop-math.js +1 -1
  351. package/dist/editor/permission-manager/GroupSelector.d.ts +0 -3
  352. package/dist/editor/permission-manager/PermissionEditor.d.ts +0 -4
  353. package/dist/editor/permission-manager/PermissionEditor.js +0 -1
  354. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +0 -7
  355. package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -4
  356. package/dist/editor/permission-manager/PermissionTree.d.ts +0 -4
  357. package/dist/editor/permission-manager/UserSelector.d.ts +0 -3
  358. package/dist/editor/permission-manager/constants.d.ts +0 -3
  359. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +0 -3
  360. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -10
  361. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +0 -14
  362. package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -11
  363. package/dist/editor/permission-manager/index.d.ts +0 -7
  364. package/dist/editor/permission-manager/index.js +0 -16
  365. package/dist/editor/permission-manager/types.d.ts +2 -12
  366. package/dist/editor/permission-manager/types.js +0 -3
  367. package/dist/editor/permission-manager/utils.d.ts +0 -28
  368. package/dist/editor/permission-manager/utils.js +9 -23
  369. package/dist/editor/preview-bridge.d.ts +5 -1
  370. package/dist/editor/preview-bridge.js +4 -4
  371. package/dist/editor/schema-editor/CollectionEditor.d.ts +0 -5
  372. package/dist/editor/schema-editor/CollectionEditor.js +9 -31
  373. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +0 -6
  374. package/dist/editor/schema-editor/EntryTypeEditor.js +3 -24
  375. package/dist/editor/schema-editor/index.d.ts +0 -7
  376. package/dist/editor/schema-editor/index.js +0 -7
  377. package/dist/editor/utils/env.d.ts +3 -18
  378. package/dist/editor/utils/env.js +6 -25
  379. package/dist/entry-link-resolver.d.ts +13 -35
  380. package/dist/entry-link-resolver.js +20 -53
  381. package/dist/entry-schema-registry.d.ts +20 -60
  382. package/dist/entry-schema-registry.js +20 -69
  383. package/dist/entry-schema.d.ts +118 -223
  384. package/dist/entry-schema.js +46 -91
  385. package/dist/git-manager.d.ts +101 -200
  386. package/dist/git-manager.js +211 -384
  387. package/dist/github-service.d.ts +34 -75
  388. package/dist/github-service.js +37 -91
  389. package/dist/http/handler.d.ts +6 -37
  390. package/dist/http/handler.js +65 -120
  391. package/dist/http/router.d.ts +15 -32
  392. package/dist/http/router.js +34 -99
  393. package/dist/http/types.d.ts +15 -40
  394. package/dist/http/types.js +3 -7
  395. package/dist/id.d.ts +4 -10
  396. package/dist/id.js +4 -10
  397. package/dist/index.js +6 -9
  398. package/dist/operating-mode/client-safe-strategy.d.ts +7 -14
  399. package/dist/operating-mode/client-safe-strategy.js +8 -28
  400. package/dist/operating-mode/client-unsafe-strategy.d.ts +6 -16
  401. package/dist/operating-mode/client-unsafe-strategy.js +9 -34
  402. package/dist/operating-mode/client.d.ts +3 -10
  403. package/dist/operating-mode/client.js +3 -8
  404. package/dist/operating-mode/deployment-name-fixtures.d.ts +14 -18
  405. package/dist/operating-mode/deployment-name-fixtures.js +14 -18
  406. package/dist/operating-mode/deployment-name.d.ts +19 -29
  407. package/dist/operating-mode/deployment-name.js +29 -47
  408. package/dist/operating-mode/index.d.ts +4 -25
  409. package/dist/operating-mode/index.js +9 -31
  410. package/dist/operating-mode/mode-env.d.ts +32 -54
  411. package/dist/operating-mode/mode-env.js +36 -58
  412. package/dist/operating-mode/types.d.ts +24 -72
  413. package/dist/operating-mode/types.js +1 -7
  414. package/dist/paths/branch-name.d.ts +30 -40
  415. package/dist/paths/branch-name.js +30 -40
  416. package/dist/paths/branch.d.ts +4 -18
  417. package/dist/paths/branch.js +6 -22
  418. package/dist/paths/index.d.ts +2 -13
  419. package/dist/paths/index.js +3 -23
  420. package/dist/paths/normalize-server.d.ts +3 -15
  421. package/dist/paths/normalize-server.js +3 -15
  422. package/dist/paths/normalize.d.ts +13 -33
  423. package/dist/paths/normalize.js +13 -33
  424. package/dist/paths/resolve.d.ts +4 -17
  425. package/dist/paths/resolve.js +4 -22
  426. package/dist/paths/types.d.ts +12 -34
  427. package/dist/paths/types.js +5 -7
  428. package/dist/paths/validation.d.ts +22 -119
  429. package/dist/paths/validation.js +30 -148
  430. package/dist/reference-resolver.d.ts +0 -13
  431. package/dist/reference-resolver.js +0 -18
  432. package/dist/resolve-canopy-user.d.ts +16 -18
  433. package/dist/resolve-canopy-user.js +17 -26
  434. package/dist/resource-generation.d.ts +16 -25
  435. package/dist/resource-generation.js +34 -97
  436. package/dist/schema/meta-loader.d.ts +2 -14
  437. package/dist/schema/meta-loader.js +15 -64
  438. package/dist/schema/resolver.d.ts +1 -4
  439. package/dist/schema/resolver.js +1 -6
  440. package/dist/schema/schema-store-types.d.ts +0 -12
  441. package/dist/schema/schema-store.d.ts +61 -138
  442. package/dist/schema/schema-store.js +85 -282
  443. package/dist/schema/types.d.ts +0 -4
  444. package/dist/server.d.ts +62 -93
  445. package/dist/server.js +63 -94
  446. package/dist/services.d.ts +23 -47
  447. package/dist/services.js +55 -98
  448. package/dist/settings-workspace.d.ts +17 -30
  449. package/dist/settings-workspace.js +51 -81
  450. package/dist/static/index.d.ts +26 -52
  451. package/dist/static/index.js +33 -67
  452. package/dist/{worker/task-queue.d.ts → task-queue/cms-task-queue.d.ts} +7 -9
  453. package/dist/task-queue/cms-task-queue.js +13 -0
  454. package/dist/task-queue/task-queue-config.d.ts +3 -0
  455. package/dist/{worker → task-queue}/task-queue-config.js +1 -6
  456. package/dist/task-queue/task-queue.d.ts +16 -22
  457. package/dist/task-queue/task-queue.js +20 -44
  458. package/dist/task-queue/types.d.ts +0 -1
  459. package/dist/task-queue/worker-status.d.ts +35 -0
  460. package/dist/task-queue/worker-status.js +40 -0
  461. package/dist/types.d.ts +40 -51
  462. package/dist/url-collision.d.ts +26 -40
  463. package/dist/url-collision.js +47 -63
  464. package/dist/url-exclusivity-fixtures.d.ts +15 -20
  465. package/dist/url-exclusivity-fixtures.js +14 -19
  466. package/dist/url-path-resolver.d.ts +8 -16
  467. package/dist/url-path-resolver.js +19 -29
  468. package/dist/user.d.ts +8 -21
  469. package/dist/user.js +10 -19
  470. package/dist/utils/async-mutex.js +4 -6
  471. package/dist/utils/atomic-write.d.ts +2 -11
  472. package/dist/utils/atomic-write.js +2 -11
  473. package/dist/utils/body-field.d.ts +8 -15
  474. package/dist/utils/body-field.js +8 -15
  475. package/dist/utils/content-serialize.d.ts +18 -24
  476. package/dist/utils/content-serialize.js +109 -160
  477. package/dist/utils/content-write-lock.d.ts +51 -106
  478. package/dist/utils/content-write-lock.js +66 -111
  479. package/dist/utils/debug.d.ts +7 -23
  480. package/dist/utils/debug.js +7 -23
  481. package/dist/utils/entry-url.d.ts +11 -23
  482. package/dist/utils/entry-url.js +11 -26
  483. package/dist/utils/error.d.ts +25 -90
  484. package/dist/utils/error.js +60 -147
  485. package/dist/utils/flatten-group-fields.d.ts +5 -7
  486. package/dist/utils/flatten-group-fields.js +5 -7
  487. package/dist/utils/format.d.ts +1 -5
  488. package/dist/utils/format.js +1 -5
  489. package/dist/utils/fs.d.ts +3 -4
  490. package/dist/utils/fs.js +3 -4
  491. package/dist/utils/git.d.ts +52 -83
  492. package/dist/utils/git.js +79 -125
  493. package/dist/utils/logger.d.ts +35 -50
  494. package/dist/utils/logger.js +35 -52
  495. package/dist/utils/provisioning-lock.d.ts +23 -35
  496. package/dist/utils/provisioning-lock.js +49 -69
  497. package/dist/utils/sanitize-href.d.ts +5 -10
  498. package/dist/utils/sanitize-href.js +8 -18
  499. package/dist/utils/title-field.d.ts +17 -20
  500. package/dist/utils/title-field.js +18 -27
  501. package/dist/utils/typed-filename.d.ts +20 -48
  502. package/dist/utils/typed-filename.js +25 -61
  503. package/dist/utils/url-prefix.d.ts +3 -3
  504. package/dist/utils/url-prefix.js +3 -3
  505. package/dist/validation/block-structural-keys.d.ts +16 -31
  506. package/dist/validation/block-structural-keys.js +19 -29
  507. package/dist/validation/deletion-checker.d.ts +0 -34
  508. package/dist/validation/deletion-checker.js +1 -43
  509. package/dist/validation/entry-link-validator.d.ts +6 -13
  510. package/dist/validation/entry-link-validator.js +4 -13
  511. package/dist/validation/entry-type-reference-validator.d.ts +13 -18
  512. package/dist/validation/entry-type-reference-validator.js +13 -18
  513. package/dist/validation/entry-validator.d.ts +13 -25
  514. package/dist/validation/entry-validator.js +15 -32
  515. package/dist/validation/field-traversal.d.ts +3 -30
  516. package/dist/validation/field-traversal.js +1 -32
  517. package/dist/validation/reference-validator.d.ts +5 -24
  518. package/dist/validation/reference-validator.js +5 -30
  519. package/dist/worker/cms-worker.d.ts +172 -232
  520. package/dist/worker/cms-worker.js +241 -333
  521. package/dist/worker/git-sync.d.ts +32 -133
  522. package/dist/worker/git-sync.js +129 -191
  523. package/dist/worker/github-auth.d.ts +13 -19
  524. package/dist/worker/github-auth.js +13 -19
  525. package/dist/worker/history-rewrite.d.ts +53 -66
  526. package/dist/worker/history-rewrite.js +54 -60
  527. package/dist/worker/log.d.ts +24 -41
  528. package/dist/worker/log.js +25 -42
  529. package/dist/worker/rebase.d.ts +20 -110
  530. package/dist/worker/rebase.js +279 -354
  531. package/dist/worker/task-runner.d.ts +32 -66
  532. package/dist/worker/task-runner.js +126 -162
  533. package/dist/worker/worker-context.d.ts +41 -81
  534. package/package.json +4 -4
  535. package/dist/cli/template-files/middleware-clerk.ts.template +0 -37
  536. package/dist/worker/task-queue-config.d.ts +0 -8
  537. package/dist/worker/task-queue.js +0 -19
  538. package/dist/worker/worker-status.d.ts +0 -47
  539. package/dist/worker/worker-status.js +0 -52
@@ -13,14 +13,10 @@ export type EntrySchemaRegistry = Record<string, EntrySchema>;
13
13
  export interface SchemaSourceInfo {
14
14
  /** File path relative to content root */
15
15
  path: string;
16
- /** Type of schema source */
17
16
  type: 'root' | 'collection';
18
17
  /** Collection names defined in this source */
19
18
  collections: string[];
20
19
  }
21
- /**
22
- * Result of schema resolution.
23
- */
24
20
  export interface SchemaResolutionResult {
25
21
  /** Resolved schema ready for use */
26
22
  schema: RootCollectionConfig;
package/dist/server.d.ts CHANGED
@@ -5,22 +5,17 @@ export * from './context.js';
5
5
  export { operatingStrategy } from './operating-mode/index.js';
6
6
  export * from './authorization/groups/index.js';
7
7
  /**
8
- * One-call factory for a **build/admin** Canopy context — for standalone
9
- * scripts that run entirely outside a Next.js request or build phase (index
10
- * builders, content audits, codegen, ad hoc reports). Reads the filesystem
11
- * directly as a synthetic admin user and bypasses ALL branch/path ACLs —
12
- * never use it in request-handling code. See the source JSDoc for the full
13
- * security note and the `createNextCanopyContext().getCanopyForBuild()`
14
- * comparison this mirrors.
8
+ * One-call factory for a **build/admin** Canopy context, for standalone scripts outside a
9
+ * Next.js request or build phase. Reads the filesystem as a synthetic admin user and bypasses
10
+ * ALL branch/path ACLs — never use it in request-handling code. Full security note in the
11
+ * source JSDoc.
15
12
  */
16
13
  export { createBuildCanopy, type CreateBuildCanopyOptions } from './build-canopy.js';
17
14
  /**
18
- * Resolve a CanopyUser for a request: loads internal groups from the
19
- * settings workspace (the single source of truth — never a content branch
20
- * clone) and merges them into an auth-plugin result via
21
- * `authResultToCanopyUser`. Shared by the core HTTP handler and the Next.js
22
- * SSR wrapper so the "authenticate -> load groups -> merge" pipeline can't
23
- * drift between the two again.
15
+ * Resolve a CanopyUser for a request: loads internal groups from the settings workspace (the
16
+ * single source of truth — never a content branch clone) and merges them into an auth-plugin
17
+ * result via `authResultToCanopyUser`. Shared by the core HTTP handler and the Next.js SSR
18
+ * wrapper so the "authenticate -> load groups -> merge" pipeline cannot drift between them.
24
19
  */
25
20
  export { resolveCanopyUser, type ResolveCanopyUserDeps } from './resolve-canopy-user.js';
26
21
  export * from './branch-workspace.js';
@@ -28,44 +23,31 @@ export * from './content-store.js';
28
23
  export { loadCollectionMetaFiles, resolveCollectionReferences, watchCollectionMetaFiles, resolveSchema, } from './schema/index.js';
29
24
  export type { CollectionMeta, RootCollectionMeta } from './schema/index.js';
30
25
  /**
31
- * Create a type-safe entry schema registry with runtime validation.
32
- *
33
- * Maps each entry-type's name to its `EntrySchema`. Keys are referenced by
34
- * `.collection.json` files via the `entry.schema` property. Recommended
35
- * convention is to key by entry-type name (filename token, also the value of
36
- * `meta.entryType` in tree-builder callbacks) — that way
37
- * `EntryTypesFromRegistry<typeof yourRegistry>` derives the
38
- * discriminated-union map for `buildContentTree`'s `TEntryTypes` parameter
39
- * automatically. See `createEntrySchemaRegistry`'s source-file JSDoc for the
40
- * full example.
26
+ * Create a type-safe entry schema registry with runtime validation. Keys are the strings
27
+ * `.collection.json` files reference via `entry.schema`; key them by entry-type name so
28
+ * `EntryTypesFromRegistry<typeof yourRegistry>` derives `buildContentTree`'s `TEntryTypes` map.
29
+ * Source JSDoc has the example and the full validation list.
41
30
  */
42
31
  export { createEntrySchemaRegistry } from './entry-schema-registry.js';
43
32
  /**
44
- * Validate that entry-schema references in `.collection.json` files exist in
45
- * the registry. Useful at build time to fail fast on stale references rather
46
- * than at request time.
33
+ * Validate that entry-schema references in `.collection.json` files exist in the registry —
34
+ * at build time, so a stale reference fails there rather than at request time.
47
35
  */
48
36
  export { validateEntrySchemaRegistry } from './entry-schema-registry.js';
49
37
  /**
50
- * Derive a discriminated-union entry-type map from a registry value. Pass
51
- * `typeof entrySchemaRegistry` as the type argument. The registry must be
52
- * keyed by entry-type name for the result to plug straight into
53
- * `buildContentTree`'s `TEntryTypes` generic.
38
+ * Derive a discriminated-union entry-type map from a registry value: pass
39
+ * `typeof entrySchemaRegistry`. The registry must be keyed by entry-type name for the result
40
+ * to plug straight into `buildContentTree`'s `TEntryTypes` generic.
54
41
  */
55
42
  export type { EntryTypesFromRegistry } from './entry-schema.js';
56
43
  /**
57
- * Resolve a display title for an entry using the full fallback chain: a
58
- * schema-marked `isTitle` field, then `data.title`/`data.name`, then an
59
- * entry-type label, then a humanized slug, then `"Untitled"`. Useful
60
- * anywhere an entry needs a display title without re-deriving this chain —
61
- * search-document/index builders in particular, since a search UI needs a
62
- * title for every result regardless of which field the schema uses.
44
+ * Resolve an entry's display title through the full fallback chain: a schema-marked `isTitle`
45
+ * field, then `data.title`/`data.name`, then an entry-type label, then a humanized slug, then
46
+ * `"Untitled"`. Search-document and index builders in particular need a title for every result
47
+ * regardless of which field the schema uses.
63
48
  *
64
- * Client-safe (no dependencies beyond `FieldConfig`/`InlineGroupFieldConfig`
65
- * type imports, which are erased at compile time) — also re-exported from
66
- * the root `canopycms` entry for that reason. Exported here too because
67
- * build/admin scripts (the primary reason this was unreachable before) are
68
- * more likely to `import` from `canopycms/server` than the root entry.
49
+ * Client-safe (its only imports are types, erased at compile time), so it is exported from the
50
+ * root `canopycms` entry as well as here, where build/admin scripts look for it.
69
51
  */
70
52
  export { resolveEntryTitle } from './utils/title-field.js';
71
53
  /** Generate a Canopy-format 12-character Base58 content ID. */
@@ -73,47 +55,41 @@ export { generateId } from './id.js';
73
55
  /** Returns true if a string is a valid 12-character Base58 Canopy ID. */
74
56
  export { isValidId } from './id.js';
75
57
  /**
76
- * Build a hierarchical tree of content nodes from the schema and filesystem.
77
- *
78
- * Pass `TEntryTypes` (typically `EntryTypesFromRegistry<typeof entrySchemaRegistry>`)
79
- * to get narrowed access to `meta.indexEntry.data` after switching on
80
- * `meta.entryType` in your `extract` callback.
81
- *
82
- * Adopters using `canopycms-next` typically call `canopy.buildContentTree(...)`
83
- * via `getCanopyForBuild()` rather than the bare function.
58
+ * Build a hierarchical tree of content nodes from the schema and filesystem. Pass `TEntryTypes`
59
+ * (typically `EntryTypesFromRegistry<typeof entrySchemaRegistry>`) for narrowed access to
60
+ * `meta.indexEntry.data` after switching on `meta.entryType` in an `extract` callback.
61
+ * `canopycms-next` adopters usually call `canopy.buildContentTree(...)` via
62
+ * `getCanopyForBuild()` instead of the bare function.
84
63
  */
85
64
  export { buildContentTree } from './content-tree.js';
86
65
  export type { ContentTreeNode, BuildContentTreeOptions, ContentTreeExtractMeta, EntryTypeMap, DefaultEntryTypes, } from './content-tree.js';
87
66
  /**
88
- * `buildContentTree`'s default URL path builder: strips the `{contentRootName}/`
89
- * prefix, collapses an entry's `index` slug to its parent collection's path, and
90
- * lowercases the result. Call it from inside a custom `buildPath` to extend the
91
- * default rather than reimplement it — `buildContentTree`'s `buildPath` option
92
- * replaces the default outright, it does not compose with it.
67
+ * `buildContentTree`'s default URL path builder: strips the `{contentRootName}/` prefix,
68
+ * collapses an entry's `index` slug to its parent collection's path, and lowercases the result.
69
+ * Call it from inside a custom `buildPath` rather than reimplementing it — the `buildPath`
70
+ * option REPLACES the default outright, it does not compose with it.
93
71
  */
94
72
  export { defaultBuildPath } from './content-tree.js';
95
73
  /** List all content entries as a flat array. */
96
74
  export { listEntries } from './content-listing.js';
97
75
  export type { ListEntriesItem, ListEntriesOptions } from './content-listing.js';
98
76
  /**
99
- * Parse a content filename of the form `{type}.{slug}.{id}.{ext}` into its
100
- * `{ type, slug, id }` parts. `id` must be a valid 12-character Base58 content ID
101
- * (excludes the ambiguous characters `0`, `O`, `I`, `l`) or the parse fails.
102
- * Pass `entryTypes` to also require `type` to match a known entry-type name;
103
- * omit it to parse the filename shape without that check. See the source JSDoc
104
- * for the full filename grammar.
77
+ * Parse a content filename `{type}.{slug}.{id}.{ext}` into `{ type, slug, id }`. `id` must be a
78
+ * valid 12-character Base58 content ID (no ambiguous `0`, `O`, `I`, `l`) or the parse fails.
79
+ * Pass `entryTypes` to also require `type` to match a known entry-type name. Full grammar in
80
+ * the source JSDoc.
105
81
  */
106
82
  export { parseTypedFilename } from './content-listing.js';
107
83
  /**
108
84
  * Resolve a canopy entry-link to its URL. Pair with the field-walker variants
109
- * (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX
110
- * bodies or arbitrary frontmatter that may contain link tokens.
85
+ * (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX bodies or
86
+ * frontmatter that may contain link tokens.
111
87
  */
112
88
  export { resolveEntryUrl, resolveEntryLinksInText, resolveEntryLinksInData, extractEntryLinkIds, } from './entry-link-resolver.js';
113
89
  export type { EntryLinkUrlResolver } from './entry-link-resolver.js';
114
90
  /**
115
- * Compute the canonical URL for an entry given its logical path + slug, and the shared
116
- * "is this the collection-index slug?" predicate that decides whether it collapses.
91
+ * The canonical URL for an entry from its logical path + slug, plus the shared "is this the
92
+ * collection-index slug?" predicate that decides whether it collapses.
117
93
  */
118
94
  export { computeEntryUrl, isIndexSlug } from './utils/entry-url.js';
119
95
  /** Collect static paths for `generateStaticParams` / sitemap emission. */
@@ -124,65 +100,58 @@ export { collectRoutableEntries } from './static/index.js';
124
100
  export type { RoutableEntry, CollectRoutableEntriesOptions } from './static/index.js';
125
101
  /**
126
102
  * Find every URL claimed by more than one entry — the check a production build already runs
127
- * (and fails on). Exported so a content-integrity test can assert it directly rather than
103
+ * and fails on. Exported so a content-integrity test can assert it directly instead of
128
104
  * hand-rolling the same scan over `listEntries`.
129
105
  */
130
106
  export { findDuplicateUrlPaths } from './static/index.js';
131
107
  export type { DuplicateUrlPath } from './static/index.js';
132
108
  /**
133
- * SEO field extraction and URL shaping (framework-agnostic). `isNoindexEntry` is the single
109
+ * SEO field extraction and URL shaping, framework-agnostic. `isNoindexEntry` is the single
134
110
  * predicate behind both `robots: noindex` and sitemap exclusion.
135
111
  */
136
112
  export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUrl, withTrailingSlash, resolveSeoUrl, stripTrailingSlashes, } from './static/index.js';
137
113
  export type { SeoFields, SeoFieldNames, SeoFieldLocation, SeoOgType, SeoTwitterCard, ExtractSeoFieldsOptions, ResolveSeoUrlOptions, } from './static/index.js';
138
114
  /**
139
- * Start a chokidar-backed watcher that detects divergence between the dev
140
- * working tree and the resolved branch clone. Dev mode only.
115
+ * Start a chokidar-backed watcher for divergence between the dev working tree and the resolved
116
+ * branch clone. Dev mode only.
141
117
  */
142
118
  export { startDevContentWatcher } from './dev-content-watcher.js';
143
119
  export type { StartDevContentWatcherOptions } from './dev-content-watcher.js';
144
120
  /**
145
- * Instantiate the AssetStore configured by a site's `media` config
146
- * (`config.media`). Returns undefined when no store applies: `media` is
147
- * unset and no `devAssetsDir` fallback was given, `adapter: 'local'` omits
148
- * `directory` with no fallback, or `adapter: 'lfs'` (config literal kept,
149
- * not yet implemented).
121
+ * Instantiate the AssetStore configured by a site's `config.media`. Returns undefined when no
122
+ * store applies: `media` unset with no `devAssetsDir` fallback, `adapter: 'local'` without
123
+ * `directory` and no fallback, or `adapter: 'lfs'` (config literal kept, not yet implemented).
150
124
  */
151
125
  export { createAssetStore } from './assets/factory.js';
152
126
  /**
153
- * The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`,
154
- * `asset-meta/`, `assets/`, `assets/t/`). Re-exported so server-only consumers
155
- * outside this package - notably the prod transform Lambda
156
- * (`packages/canopycms-cdk/lambda/asset-transform`) - can build/parse asset
157
- * keys through the same constants `S3AssetStore` uses, rather than
158
- * duplicating the literal prefix strings.
127
+ * The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`, `asset-meta/`,
128
+ * `assets/`, `assets/t/`). Exported so server-only consumers outside this package — notably the
129
+ * prod transform Lambda (`packages/canopycms-cdk/lambda/asset-transform`) — build and parse
130
+ * asset keys through the same constants `S3AssetStore` uses rather than duplicating the strings.
159
131
  */
160
132
  export { ASSET_PREFIXES, type AssetPrefixes } from './assets/keys.js';
161
133
  /** Asset metadata sidecar shape (`asset-meta/{hash32}.json`), written by the finalize pipeline and read by the transform layer (dev-mode emulation and the prod transform Lambda). */
162
134
  export type { AssetMeta } from './assets/types.js';
163
135
  /**
164
- * Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`)
165
- * into a validated `TransformDirectives` set, or a structured parse error.
166
- * Reused unchanged by the dev-mode lazy `/assets/t/*` emulation (`api/assets.ts`)
167
- * and the prod transform Lambda (`packages/canopycms-cdk/lambda/asset-transform`)
168
- * so the URL grammar is defined in exactly one place.
136
+ * Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`) into a
137
+ * validated `TransformDirectives` set, or a structured parse error. Reused unchanged by the
138
+ * dev-mode lazy `/assets/t/*` emulation (`api/assets.ts`) and the prod transform Lambda, so the
139
+ * URL grammar is defined in exactly one place.
169
140
  */
170
141
  export { parseTransformPath } from './assets/transform-directives.js';
171
142
  export type { ParsedTransformPath, ParseTransformPathResult } from './assets/transform-directives.js';
172
143
  /**
173
- * Canonical string form of a `TransformDirectives` set - the cache key every
174
- * transform output is stored under (`assets/t/{formatDirectives(...)}/{hash32}/{slug}.{ext}`).
175
- * Equivalent directive sets (different key order/float formatting) always
176
- * format to the same string. Reused by the prod transform Lambda so its
177
- * canonical writes agree with the dev-mode emulation and `assetUrl()`.
144
+ * Canonical string form of a `TransformDirectives` set — the cache key every transform output is
145
+ * stored under (`assets/t/{formatDirectives(...)}/{hash32}/{slug}.{ext}`). Equivalent directive
146
+ * sets (different key order or float formatting) always format to the same string. Reused by the
147
+ * prod transform Lambda so its writes agree with the dev-mode emulation and `assetUrl()`.
178
148
  */
179
149
  export { formatDirectives } from './assets/transform-directives.js';
180
150
  /**
181
151
  * Apply a parsed `TransformDirectives` set to source image bytes with sharp:
182
- * resize/format/quality/crop, with EXIF stripped on every re-encode (even
183
- * identity). Server-only (sharp) - reused unchanged by the dev-mode lazy
184
- * `/assets/t/*` emulation and the prod transform Lambda
185
- * (`packages/canopycms-cdk/lambda/asset-transform`).
152
+ * resize/format/quality/crop, EXIF stripped on every re-encode, identity included. Server-only
153
+ * (sharp); reused unchanged by the dev-mode lazy `/assets/t/*` emulation and the prod transform
154
+ * Lambda.
186
155
  */
187
156
  export { applyTransform } from './assets/transform.js';
188
157
  export type { ApplyTransformInput, TransformResult } from './assets/transform.js';
package/dist/server.js CHANGED
@@ -1,8 +1,7 @@
1
- // Public server-side API for adopters. JSDoc is duplicated at each named
2
- // re-export so it shows on hover in adopter editors — TypeScript propagation
3
- // through `export { X } from './module.js'` is inconsistent across LSP versions
4
- // and module-resolution modes. New top-level public re-exports should follow
5
- // the same pattern (see DEVELOPING.md).
1
+ // Public server-side API for adopters. Every named re-export carries its own JSDoc, because
2
+ // TypeScript's propagation through `export { X } from './module.js'` is inconsistent across LSP
3
+ // versions and module-resolution modes and adopters would otherwise get no hover text. Follow the
4
+ // pattern for new top-level public re-exports (see DEVELOPING.md).
6
5
  export * from './content-reader.js';
7
6
  export * from './services.js';
8
7
  export * from './build-mode.js';
@@ -10,59 +9,42 @@ export * from './context.js';
10
9
  export { operatingStrategy } from './operating-mode/index.js';
11
10
  export * from './authorization/groups/index.js';
12
11
  /**
13
- * One-call factory for a **build/admin** Canopy context — for standalone
14
- * scripts that run entirely outside a Next.js request or build phase (index
15
- * builders, content audits, codegen, ad hoc reports). Reads the filesystem
16
- * directly as a synthetic admin user and bypasses ALL branch/path ACLs —
17
- * never use it in request-handling code. See the source JSDoc for the full
18
- * security note and the `createNextCanopyContext().getCanopyForBuild()`
19
- * comparison this mirrors.
12
+ * One-call factory for a **build/admin** Canopy context, for standalone scripts outside a
13
+ * Next.js request or build phase. Reads the filesystem as a synthetic admin user and bypasses
14
+ * ALL branch/path ACLs — never use it in request-handling code. Full security note in the
15
+ * source JSDoc.
20
16
  */
21
17
  export { createBuildCanopy } from './build-canopy.js';
22
18
  /**
23
- * Resolve a CanopyUser for a request: loads internal groups from the
24
- * settings workspace (the single source of truth — never a content branch
25
- * clone) and merges them into an auth-plugin result via
26
- * `authResultToCanopyUser`. Shared by the core HTTP handler and the Next.js
27
- * SSR wrapper so the "authenticate -> load groups -> merge" pipeline can't
28
- * drift between the two again.
19
+ * Resolve a CanopyUser for a request: loads internal groups from the settings workspace (the
20
+ * single source of truth — never a content branch clone) and merges them into an auth-plugin
21
+ * result via `authResultToCanopyUser`. Shared by the core HTTP handler and the Next.js SSR
22
+ * wrapper so the "authenticate -> load groups -> merge" pipeline cannot drift between them.
29
23
  */
30
24
  export { resolveCanopyUser } from './resolve-canopy-user.js';
31
25
  export * from './branch-workspace.js';
32
26
  export * from './content-store.js';
33
27
  export { loadCollectionMetaFiles, resolveCollectionReferences, watchCollectionMetaFiles, resolveSchema, } from './schema/index.js';
34
28
  /**
35
- * Create a type-safe entry schema registry with runtime validation.
36
- *
37
- * Maps each entry-type's name to its `EntrySchema`. Keys are referenced by
38
- * `.collection.json` files via the `entry.schema` property. Recommended
39
- * convention is to key by entry-type name (filename token, also the value of
40
- * `meta.entryType` in tree-builder callbacks) — that way
41
- * `EntryTypesFromRegistry<typeof yourRegistry>` derives the
42
- * discriminated-union map for `buildContentTree`'s `TEntryTypes` parameter
43
- * automatically. See `createEntrySchemaRegistry`'s source-file JSDoc for the
44
- * full example.
29
+ * Create a type-safe entry schema registry with runtime validation. Keys are the strings
30
+ * `.collection.json` files reference via `entry.schema`; key them by entry-type name so
31
+ * `EntryTypesFromRegistry<typeof yourRegistry>` derives `buildContentTree`'s `TEntryTypes` map.
32
+ * Source JSDoc has the example and the full validation list.
45
33
  */
46
34
  export { createEntrySchemaRegistry } from './entry-schema-registry.js';
47
35
  /**
48
- * Validate that entry-schema references in `.collection.json` files exist in
49
- * the registry. Useful at build time to fail fast on stale references rather
50
- * than at request time.
36
+ * Validate that entry-schema references in `.collection.json` files exist in the registry —
37
+ * at build time, so a stale reference fails there rather than at request time.
51
38
  */
52
39
  export { validateEntrySchemaRegistry } from './entry-schema-registry.js';
53
40
  /**
54
- * Resolve a display title for an entry using the full fallback chain: a
55
- * schema-marked `isTitle` field, then `data.title`/`data.name`, then an
56
- * entry-type label, then a humanized slug, then `"Untitled"`. Useful
57
- * anywhere an entry needs a display title without re-deriving this chain —
58
- * search-document/index builders in particular, since a search UI needs a
59
- * title for every result regardless of which field the schema uses.
41
+ * Resolve an entry's display title through the full fallback chain: a schema-marked `isTitle`
42
+ * field, then `data.title`/`data.name`, then an entry-type label, then a humanized slug, then
43
+ * `"Untitled"`. Search-document and index builders in particular need a title for every result
44
+ * regardless of which field the schema uses.
60
45
  *
61
- * Client-safe (no dependencies beyond `FieldConfig`/`InlineGroupFieldConfig`
62
- * type imports, which are erased at compile time) — also re-exported from
63
- * the root `canopycms` entry for that reason. Exported here too because
64
- * build/admin scripts (the primary reason this was unreachable before) are
65
- * more likely to `import` from `canopycms/server` than the root entry.
46
+ * Client-safe (its only imports are types, erased at compile time), so it is exported from the
47
+ * root `canopycms` entry as well as here, where build/admin scripts look for it.
66
48
  */
67
49
  export { resolveEntryTitle } from './utils/title-field.js';
68
50
  /** Generate a Canopy-format 12-character Base58 content ID. */
@@ -70,44 +52,38 @@ export { generateId } from './id.js';
70
52
  /** Returns true if a string is a valid 12-character Base58 Canopy ID. */
71
53
  export { isValidId } from './id.js';
72
54
  /**
73
- * Build a hierarchical tree of content nodes from the schema and filesystem.
74
- *
75
- * Pass `TEntryTypes` (typically `EntryTypesFromRegistry<typeof entrySchemaRegistry>`)
76
- * to get narrowed access to `meta.indexEntry.data` after switching on
77
- * `meta.entryType` in your `extract` callback.
78
- *
79
- * Adopters using `canopycms-next` typically call `canopy.buildContentTree(...)`
80
- * via `getCanopyForBuild()` rather than the bare function.
55
+ * Build a hierarchical tree of content nodes from the schema and filesystem. Pass `TEntryTypes`
56
+ * (typically `EntryTypesFromRegistry<typeof entrySchemaRegistry>`) for narrowed access to
57
+ * `meta.indexEntry.data` after switching on `meta.entryType` in an `extract` callback.
58
+ * `canopycms-next` adopters usually call `canopy.buildContentTree(...)` via
59
+ * `getCanopyForBuild()` instead of the bare function.
81
60
  */
82
61
  export { buildContentTree } from './content-tree.js';
83
62
  /**
84
- * `buildContentTree`'s default URL path builder: strips the `{contentRootName}/`
85
- * prefix, collapses an entry's `index` slug to its parent collection's path, and
86
- * lowercases the result. Call it from inside a custom `buildPath` to extend the
87
- * default rather than reimplement it — `buildContentTree`'s `buildPath` option
88
- * replaces the default outright, it does not compose with it.
63
+ * `buildContentTree`'s default URL path builder: strips the `{contentRootName}/` prefix,
64
+ * collapses an entry's `index` slug to its parent collection's path, and lowercases the result.
65
+ * Call it from inside a custom `buildPath` rather than reimplementing it — the `buildPath`
66
+ * option REPLACES the default outright, it does not compose with it.
89
67
  */
90
68
  export { defaultBuildPath } from './content-tree.js';
91
69
  /** List all content entries as a flat array. */
92
70
  export { listEntries } from './content-listing.js';
93
71
  /**
94
- * Parse a content filename of the form `{type}.{slug}.{id}.{ext}` into its
95
- * `{ type, slug, id }` parts. `id` must be a valid 12-character Base58 content ID
96
- * (excludes the ambiguous characters `0`, `O`, `I`, `l`) or the parse fails.
97
- * Pass `entryTypes` to also require `type` to match a known entry-type name;
98
- * omit it to parse the filename shape without that check. See the source JSDoc
99
- * for the full filename grammar.
72
+ * Parse a content filename `{type}.{slug}.{id}.{ext}` into `{ type, slug, id }`. `id` must be a
73
+ * valid 12-character Base58 content ID (no ambiguous `0`, `O`, `I`, `l`) or the parse fails.
74
+ * Pass `entryTypes` to also require `type` to match a known entry-type name. Full grammar in
75
+ * the source JSDoc.
100
76
  */
101
77
  export { parseTypedFilename } from './content-listing.js';
102
78
  /**
103
79
  * Resolve a canopy entry-link to its URL. Pair with the field-walker variants
104
- * (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX
105
- * bodies or arbitrary frontmatter that may contain link tokens.
80
+ * (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX bodies or
81
+ * frontmatter that may contain link tokens.
106
82
  */
107
83
  export { resolveEntryUrl, resolveEntryLinksInText, resolveEntryLinksInData, extractEntryLinkIds, } from './entry-link-resolver.js';
108
84
  /**
109
- * Compute the canonical URL for an entry given its logical path + slug, and the shared
110
- * "is this the collection-index slug?" predicate that decides whether it collapses.
85
+ * The canonical URL for an entry from its logical path + slug, plus the shared "is this the
86
+ * collection-index slug?" predicate that decides whether it collapses.
111
87
  */
112
88
  export { computeEntryUrl, isIndexSlug } from './utils/entry-url.js';
113
89
  /** Collect static paths for `generateStaticParams` / sitemap emission. */
@@ -116,58 +92,51 @@ export { collectStaticPaths } from './static/index.js';
116
92
  export { collectRoutableEntries } from './static/index.js';
117
93
  /**
118
94
  * Find every URL claimed by more than one entry — the check a production build already runs
119
- * (and fails on). Exported so a content-integrity test can assert it directly rather than
95
+ * and fails on. Exported so a content-integrity test can assert it directly instead of
120
96
  * hand-rolling the same scan over `listEntries`.
121
97
  */
122
98
  export { findDuplicateUrlPaths } from './static/index.js';
123
99
  /**
124
- * SEO field extraction and URL shaping (framework-agnostic). `isNoindexEntry` is the single
100
+ * SEO field extraction and URL shaping, framework-agnostic. `isNoindexEntry` is the single
125
101
  * predicate behind both `robots: noindex` and sitemap exclusion.
126
102
  */
127
103
  export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUrl, withTrailingSlash, resolveSeoUrl, stripTrailingSlashes, } from './static/index.js';
128
104
  /**
129
- * Start a chokidar-backed watcher that detects divergence between the dev
130
- * working tree and the resolved branch clone. Dev mode only.
105
+ * Start a chokidar-backed watcher for divergence between the dev working tree and the resolved
106
+ * branch clone. Dev mode only.
131
107
  */
132
108
  export { startDevContentWatcher } from './dev-content-watcher.js';
133
109
  /**
134
- * Instantiate the AssetStore configured by a site's `media` config
135
- * (`config.media`). Returns undefined when no store applies: `media` is
136
- * unset and no `devAssetsDir` fallback was given, `adapter: 'local'` omits
137
- * `directory` with no fallback, or `adapter: 'lfs'` (config literal kept,
138
- * not yet implemented).
110
+ * Instantiate the AssetStore configured by a site's `config.media`. Returns undefined when no
111
+ * store applies: `media` unset with no `devAssetsDir` fallback, `adapter: 'local'` without
112
+ * `directory` and no fallback, or `adapter: 'lfs'` (config literal kept, not yet implemented).
139
113
  */
140
114
  export { createAssetStore } from './assets/factory.js';
141
115
  /**
142
- * The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`,
143
- * `asset-meta/`, `assets/`, `assets/t/`). Re-exported so server-only consumers
144
- * outside this package - notably the prod transform Lambda
145
- * (`packages/canopycms-cdk/lambda/asset-transform`) - can build/parse asset
146
- * keys through the same constants `S3AssetStore` uses, rather than
147
- * duplicating the literal prefix strings.
116
+ * The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`, `asset-meta/`,
117
+ * `assets/`, `assets/t/`). Exported so server-only consumers outside this package — notably the
118
+ * prod transform Lambda (`packages/canopycms-cdk/lambda/asset-transform`) — build and parse
119
+ * asset keys through the same constants `S3AssetStore` uses rather than duplicating the strings.
148
120
  */
149
121
  export { ASSET_PREFIXES } from './assets/keys.js';
150
122
  /**
151
- * Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`)
152
- * into a validated `TransformDirectives` set, or a structured parse error.
153
- * Reused unchanged by the dev-mode lazy `/assets/t/*` emulation (`api/assets.ts`)
154
- * and the prod transform Lambda (`packages/canopycms-cdk/lambda/asset-transform`)
155
- * so the URL grammar is defined in exactly one place.
123
+ * Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`) into a
124
+ * validated `TransformDirectives` set, or a structured parse error. Reused unchanged by the
125
+ * dev-mode lazy `/assets/t/*` emulation (`api/assets.ts`) and the prod transform Lambda, so the
126
+ * URL grammar is defined in exactly one place.
156
127
  */
157
128
  export { parseTransformPath } from './assets/transform-directives.js';
158
129
  /**
159
- * Canonical string form of a `TransformDirectives` set - the cache key every
160
- * transform output is stored under (`assets/t/{formatDirectives(...)}/{hash32}/{slug}.{ext}`).
161
- * Equivalent directive sets (different key order/float formatting) always
162
- * format to the same string. Reused by the prod transform Lambda so its
163
- * canonical writes agree with the dev-mode emulation and `assetUrl()`.
130
+ * Canonical string form of a `TransformDirectives` set — the cache key every transform output is
131
+ * stored under (`assets/t/{formatDirectives(...)}/{hash32}/{slug}.{ext}`). Equivalent directive
132
+ * sets (different key order or float formatting) always format to the same string. Reused by the
133
+ * prod transform Lambda so its writes agree with the dev-mode emulation and `assetUrl()`.
164
134
  */
165
135
  export { formatDirectives } from './assets/transform-directives.js';
166
136
  /**
167
137
  * Apply a parsed `TransformDirectives` set to source image bytes with sharp:
168
- * resize/format/quality/crop, with EXIF stripped on every re-encode (even
169
- * identity). Server-only (sharp) - reused unchanged by the dev-mode lazy
170
- * `/assets/t/*` emulation and the prod transform Lambda
171
- * (`packages/canopycms-cdk/lambda/asset-transform`).
138
+ * resize/format/quality/crop, EXIF stripped on every re-encode, identity included. Server-only
139
+ * (sharp); reused unchanged by the dev-mode lazy `/assets/t/*` emulation and the prod transform
140
+ * Lambda.
172
141
  */
173
142
  export { applyTransform } from './assets/transform.js';
@@ -1,22 +1,17 @@
1
1
  /**
2
- * `CanopyServices` — the long-lived, per-deployment service container.
2
+ * `CanopyServices` — the long-lived, per-deployment service container, built
3
+ * once by `createCanopyServices` and threaded through `ApiContext.services` to
4
+ * every API handler. Holds config, the schema registry and cache, the ACL
5
+ * checkers, the git-manager factory, the branch registry, the GitHub service,
6
+ * and four branch-workflow operations. Not `context.ts`, which is the
7
+ * per-REQUEST facade built on top of this.
3
8
  *
4
- * Built once by `createCanopyServices` and threaded through `ApiContext.services`
5
- * to every API handler. Holds config, the schema registry and cache, the ACL
6
- * checkers, the git-manager factory, the branch registry, the GitHub service, and
7
- * four branch-workflow operations (`commitFiles`, `submitBranch`,
8
- * `commitToSettingsBranch`, `getSettingsBranchRoot`).
9
+ * SCOPE WARNING: a service locator every api module reaches, so adding a field
10
+ * is free and therefore constant, and no handler's signature reveals what it
11
+ * touches. Give a new capability its own narrow interface instead.
9
12
  *
10
- * SCOPE WARNING: this is a service locator with 15 members, reached by every one of
11
- * the 26 api modules, so adding a field is free and therefore constant — and no handler's
12
- * signature reveals what it actually touches. Prefer giving a new capability its
13
- * own narrow interface over a 23rd field here.
14
- *
15
- * Not to be confused with `context.ts`, which is the per-REQUEST facade built on
16
- * top of this.
17
- *
18
- * `createTestCanopyServices` is test-only despite living in a production module;
19
- * it reaches the published surface through a wildcard re-export.
13
+ * `createTestCanopyServices` is test-only despite living in a production
14
+ * module; it reaches the published surface through a wildcard re-export.
20
15
  *
21
16
  * Module map: ./AGENTS.md.
22
17
  */
@@ -30,8 +25,8 @@ import { BranchRegistry } from './branch-registry.js';
30
25
  import { type GitHubService } from './github-service.js';
31
26
  import { BranchSchemaCache } from './branch-schema-cache.js';
32
27
  /**
33
- * Parse bootstrap admin IDs from environment variable.
34
- * These users are always treated as Admins regardless of group membership.
28
+ * Bootstrap admin IDs from the environment. These users are treated as Admins
29
+ * whatever their group membership.
35
30
  */
36
31
  export declare const getBootstrapAdminIds: () => Set<string>;
37
32
  export interface CanopyServices {
@@ -49,9 +44,9 @@ export interface CanopyServices {
49
44
  checkBranchAccess: (context: BranchContext, user: CanopyUser) => ReturnType<ReturnType<typeof createCheckBranchAccess>>;
50
45
  checkContentAccess: ReturnType<typeof createCheckContentAccess>;
51
46
  /**
52
- * Build a batch content-access checker that loads permissions once and returns
53
- * a synchronous per-path checker. Use this when checking many paths in a single
54
- * request (e.g. listing entries) to avoid re-loading permissions per path.
47
+ * A batch content-access checker: loads permissions once, returns a
48
+ * synchronous per-path check. Use it whenever one request checks many paths,
49
+ * so permissions are not re-loaded per path.
55
50
  */
56
51
  createContentAccessChecker: (context: BranchContext, branchRoot: string, user: CanopyUser) => Promise<ContentAccessChecker>;
57
52
  createGitManagerFor: (repoPath: string, opts?: {
@@ -90,44 +85,25 @@ export interface CanopyServices {
90
85
  /** Get the root path for settings storage (ensures workspace exists) */
91
86
  getSettingsBranchRoot: () => Promise<string>;
92
87
  }
93
- /**
94
- * Options for createCanopyServices and createTestCanopyServices.
95
- */
96
88
  export interface CreateCanopyServicesOptions {
97
- /**
98
- * Entry schema registry for resolving .collection.json references.
99
- * Maps entry schema names to field definitions.
100
- */
89
+ /** Entry schema names → field definitions, for resolving .collection.json references. */
101
90
  entrySchemaRegistry?: EntrySchemaRegistry;
102
91
  /**
103
- * Test-only: Custom branch schema cache.
104
- * When provided, bypasses the default BranchSchemaCache creation.
92
+ * Test-only: bypasses the default BranchSchemaCache creation.
105
93
  * @internal
106
94
  */
107
95
  branchSchemaCache?: BranchSchemaCache;
108
96
  /**
109
- * Test-only: Override for getSettingsBranchRoot.
110
- * When provided, bypasses the real git workspace setup for settings.
97
+ * Test-only: bypasses the real git workspace setup for settings.
111
98
  * @internal
112
99
  */
113
100
  getSettingsBranchRoot?: () => Promise<string>;
114
101
  }
115
102
  /**
116
- * Create reusable helpers from a validated CanopyConfig.
117
- * Intended to be called once at startup and injected where needed
118
- * (e.g., request handlers, loaders).
119
- *
120
- * Schema is now loaded per-branch via BranchSchemaCache, not at startup.
121
- *
122
- * @param config - Validated Canopy configuration
123
- * @param options - Optional settings including entry schema registry
103
+ * Build the reusable helpers from a validated CanopyConfig — once at startup,
104
+ * then injected into request handlers and loaders. Schema is not loaded here;
105
+ * BranchSchemaCache loads it per branch.
124
106
  */
125
107
  export declare const createCanopyServices: (config: CanopyConfig, options?: CreateCanopyServicesOptions) => Promise<CanopyServices>;
126
- /**
127
- * Create services for testing.
128
- * Schema is loaded per-branch via BranchSchemaCache.
129
- *
130
- * @param config - Validated Canopy configuration
131
- * @param options - Optional settings including entry schema registry
132
- */
108
+ /** {@link createCanopyServices} for tests, with branch identity pinned. */
133
109
  export declare const createTestCanopyServices: (config: CanopyConfig, options?: CreateCanopyServicesOptions) => Promise<CanopyServices>;