canopycms 0.0.59 → 0.0.61-int.74

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 (286) hide show
  1. package/dist/api/__test__/mock-client.d.ts +29 -0
  2. package/dist/api/__test__/mock-client.d.ts.map +1 -1
  3. package/dist/api/__test__/mock-client.js +55 -4
  4. package/dist/api/__test__/mock-client.js.map +1 -1
  5. package/dist/api/admin-branch-health.d.ts +65 -0
  6. package/dist/api/admin-branch-health.d.ts.map +1 -0
  7. package/dist/api/admin-branch-health.js +448 -0
  8. package/dist/api/admin-branch-health.js.map +1 -0
  9. package/dist/api/admin.d.ts +136 -0
  10. package/dist/api/admin.d.ts.map +1 -0
  11. package/dist/api/admin.js +338 -0
  12. package/dist/api/admin.js.map +1 -0
  13. package/dist/api/assets.d.ts.map +1 -1
  14. package/dist/api/assets.js +4 -0
  15. package/dist/api/assets.js.map +1 -1
  16. package/dist/api/branch-merge.d.ts +6 -0
  17. package/dist/api/branch-merge.d.ts.map +1 -1
  18. package/dist/api/branch-merge.js +15 -9
  19. package/dist/api/branch-merge.js.map +1 -1
  20. package/dist/api/branch-status.d.ts.map +1 -1
  21. package/dist/api/branch-status.js +15 -5
  22. package/dist/api/branch-status.js.map +1 -1
  23. package/dist/api/branch-withdraw.d.ts +6 -0
  24. package/dist/api/branch-withdraw.d.ts.map +1 -1
  25. package/dist/api/branch-withdraw.js +34 -7
  26. package/dist/api/branch-withdraw.js.map +1 -1
  27. package/dist/api/branch.d.ts +11 -1
  28. package/dist/api/branch.d.ts.map +1 -1
  29. package/dist/api/branch.js +70 -4
  30. package/dist/api/branch.js.map +1 -1
  31. package/dist/api/client.d.ts +34 -0
  32. package/dist/api/client.d.ts.map +1 -1
  33. package/dist/api/client.js +47 -0
  34. package/dist/api/client.js.map +1 -1
  35. package/dist/api/comments.d.ts.map +1 -1
  36. package/dist/api/comments.js +4 -0
  37. package/dist/api/comments.js.map +1 -1
  38. package/dist/api/content.d.ts.map +1 -1
  39. package/dist/api/content.js +4 -4
  40. package/dist/api/content.js.map +1 -1
  41. package/dist/api/entries.d.ts.map +1 -1
  42. package/dist/api/entries.js +23 -4
  43. package/dist/api/entries.js.map +1 -1
  44. package/dist/api/github-sync.d.ts.map +1 -1
  45. package/dist/api/github-sync.js +14 -3
  46. package/dist/api/github-sync.js.map +1 -1
  47. package/dist/api/groups.d.ts +3 -0
  48. package/dist/api/groups.d.ts.map +1 -1
  49. package/dist/api/groups.js +89 -68
  50. package/dist/api/groups.js.map +1 -1
  51. package/dist/api/guards.d.ts +7 -1
  52. package/dist/api/guards.d.ts.map +1 -1
  53. package/dist/api/guards.js +54 -0
  54. package/dist/api/guards.js.map +1 -1
  55. package/dist/api/index.d.ts +1 -0
  56. package/dist/api/index.d.ts.map +1 -1
  57. package/dist/api/index.js +0 -1
  58. package/dist/api/index.js.map +1 -1
  59. package/dist/api/permissions.d.ts +1 -0
  60. package/dist/api/permissions.d.ts.map +1 -1
  61. package/dist/api/permissions.js +23 -20
  62. package/dist/api/permissions.js.map +1 -1
  63. package/dist/api/schema.d.ts.map +1 -1
  64. package/dist/api/schema.js +36 -22
  65. package/dist/api/schema.js.map +1 -1
  66. package/dist/authorization/branch.d.ts +14 -1
  67. package/dist/authorization/branch.d.ts.map +1 -1
  68. package/dist/authorization/branch.js +5 -3
  69. package/dist/authorization/branch.js.map +1 -1
  70. package/dist/authorization/groups/index.d.ts +1 -1
  71. package/dist/authorization/groups/index.d.ts.map +1 -1
  72. package/dist/authorization/groups/index.js +1 -1
  73. package/dist/authorization/groups/index.js.map +1 -1
  74. package/dist/authorization/groups/loader.d.ts +25 -4
  75. package/dist/authorization/groups/loader.d.ts.map +1 -1
  76. package/dist/authorization/groups/loader.js +39 -20
  77. package/dist/authorization/groups/loader.js.map +1 -1
  78. package/dist/authorization/groups/schema.d.ts +8 -7
  79. package/dist/authorization/groups/schema.d.ts.map +1 -1
  80. package/dist/authorization/groups/schema.js +8 -4
  81. package/dist/authorization/groups/schema.js.map +1 -1
  82. package/dist/authorization/index.d.ts +5 -3
  83. package/dist/authorization/index.d.ts.map +1 -1
  84. package/dist/authorization/index.js +8 -3
  85. package/dist/authorization/index.js.map +1 -1
  86. package/dist/authorization/path.d.ts +8 -0
  87. package/dist/authorization/path.d.ts.map +1 -1
  88. package/dist/authorization/path.js +16 -1
  89. package/dist/authorization/path.js.map +1 -1
  90. package/dist/authorization/permissions/index.d.ts +1 -1
  91. package/dist/authorization/permissions/index.d.ts.map +1 -1
  92. package/dist/authorization/permissions/index.js +1 -1
  93. package/dist/authorization/permissions/index.js.map +1 -1
  94. package/dist/authorization/permissions/loader.d.ts +18 -4
  95. package/dist/authorization/permissions/loader.d.ts.map +1 -1
  96. package/dist/authorization/permissions/loader.js +35 -24
  97. package/dist/authorization/permissions/loader.js.map +1 -1
  98. package/dist/authorization/permissions/schema.d.ts +8 -7
  99. package/dist/authorization/permissions/schema.d.ts.map +1 -1
  100. package/dist/authorization/permissions/schema.js +8 -4
  101. package/dist/authorization/permissions/schema.js.map +1 -1
  102. package/dist/authorization/protected-branch.d.ts +39 -0
  103. package/dist/authorization/protected-branch.d.ts.map +1 -0
  104. package/dist/authorization/protected-branch.js +43 -0
  105. package/dist/authorization/protected-branch.js.map +1 -0
  106. package/dist/authorization/settings-file-store.d.ts +127 -0
  107. package/dist/authorization/settings-file-store.d.ts.map +1 -0
  108. package/dist/authorization/settings-file-store.js +156 -0
  109. package/dist/authorization/settings-file-store.js.map +1 -0
  110. package/dist/branch-health.d.ts +78 -0
  111. package/dist/branch-health.d.ts.map +1 -0
  112. package/dist/branch-health.js +151 -0
  113. package/dist/branch-health.js.map +1 -0
  114. package/dist/branch-metadata.d.ts +31 -0
  115. package/dist/branch-metadata.d.ts.map +1 -1
  116. package/dist/branch-metadata.js +43 -1
  117. package/dist/branch-metadata.js.map +1 -1
  118. package/dist/branch-registry.d.ts.map +1 -1
  119. package/dist/branch-registry.js +13 -1
  120. package/dist/branch-registry.js.map +1 -1
  121. package/dist/cli/cli.js +398 -200
  122. package/dist/cli/generate-ai-content.js +72 -13
  123. package/dist/cli/init.js +84 -2
  124. package/dist/cli/migrate.d.ts.map +1 -1
  125. package/dist/cli/migrate.js +39 -11
  126. package/dist/cli/migrate.js.map +1 -1
  127. package/dist/cli/sync.d.ts.map +1 -1
  128. package/dist/cli/sync.js +4 -1
  129. package/dist/cli/sync.js.map +1 -1
  130. package/dist/config/index.d.ts +1 -1
  131. package/dist/config/index.d.ts.map +1 -1
  132. package/dist/config/index.js.map +1 -1
  133. package/dist/config/schemas/config.d.ts +55 -5
  134. package/dist/config/schemas/config.d.ts.map +1 -1
  135. package/dist/config/schemas/config.js +18 -1
  136. package/dist/config/schemas/config.js.map +1 -1
  137. package/dist/config/types.d.ts +11 -1
  138. package/dist/config/types.d.ts.map +1 -1
  139. package/dist/content-store.d.ts +16 -0
  140. package/dist/content-store.d.ts.map +1 -1
  141. package/dist/content-store.js +22 -6
  142. package/dist/content-store.js.map +1 -1
  143. package/dist/context.d.ts +3 -0
  144. package/dist/context.d.ts.map +1 -1
  145. package/dist/context.js +25 -3
  146. package/dist/context.js.map +1 -1
  147. package/dist/editor/BranchManager.d.ts +11 -0
  148. package/dist/editor/BranchManager.d.ts.map +1 -1
  149. package/dist/editor/BranchManager.js +34 -10
  150. package/dist/editor/BranchManager.js.map +1 -1
  151. package/dist/editor/CommentsPanel.d.ts.map +1 -1
  152. package/dist/editor/CommentsPanel.js +4 -12
  153. package/dist/editor/CommentsPanel.js.map +1 -1
  154. package/dist/editor/Editor.d.ts.map +1 -1
  155. package/dist/editor/Editor.js +46 -10
  156. package/dist/editor/Editor.js.map +1 -1
  157. package/dist/editor/EntryNavigator.d.ts +7 -0
  158. package/dist/editor/EntryNavigator.d.ts.map +1 -1
  159. package/dist/editor/EntryNavigator.js +17 -5
  160. package/dist/editor/EntryNavigator.js.map +1 -1
  161. package/dist/editor/FormRenderer.d.ts.map +1 -1
  162. package/dist/editor/FormRenderer.js +4 -0
  163. package/dist/editor/FormRenderer.js.map +1 -1
  164. package/dist/editor/admin/SystemHealthPanel.d.ts +6 -0
  165. package/dist/editor/admin/SystemHealthPanel.d.ts.map +1 -0
  166. package/dist/editor/admin/SystemHealthPanel.js +234 -0
  167. package/dist/editor/admin/SystemHealthPanel.js.map +1 -0
  168. package/dist/editor/admin/useSystemHealth.d.ts +40 -0
  169. package/dist/editor/admin/useSystemHealth.d.ts.map +1 -0
  170. package/dist/editor/admin/useSystemHealth.js +205 -0
  171. package/dist/editor/admin/useSystemHealth.js.map +1 -0
  172. package/dist/editor/comments/FieldWrapper.d.ts.map +1 -1
  173. package/dist/editor/comments/FieldWrapper.js +1 -1
  174. package/dist/editor/comments/FieldWrapper.js.map +1 -1
  175. package/dist/editor/comments/InlineCommentThread.d.ts.map +1 -1
  176. package/dist/editor/comments/InlineCommentThread.js +2 -21
  177. package/dist/editor/comments/InlineCommentThread.js.map +1 -1
  178. package/dist/editor/comments/ThreadCarousel.d.ts +2 -0
  179. package/dist/editor/comments/ThreadCarousel.d.ts.map +1 -1
  180. package/dist/editor/comments/ThreadCarousel.js +5 -2
  181. package/dist/editor/comments/ThreadCarousel.js.map +1 -1
  182. package/dist/editor/components/EditorHeader.d.ts +11 -0
  183. package/dist/editor/components/EditorHeader.d.ts.map +1 -1
  184. package/dist/editor/components/EditorHeader.js +75 -41
  185. package/dist/editor/components/EditorHeader.js.map +1 -1
  186. package/dist/editor/components/EditorSidebar.d.ts +7 -1
  187. package/dist/editor/components/EditorSidebar.d.ts.map +1 -1
  188. package/dist/editor/components/EditorSidebar.js +3 -3
  189. package/dist/editor/components/EditorSidebar.js.map +1 -1
  190. package/dist/editor/fields/ImageField.d.ts.map +1 -1
  191. package/dist/editor/fields/ImageField.js +4 -1
  192. package/dist/editor/fields/ImageField.js.map +1 -1
  193. package/dist/editor/fields/StringListField.d.ts +20 -0
  194. package/dist/editor/fields/StringListField.d.ts.map +1 -0
  195. package/dist/editor/fields/StringListField.js +25 -0
  196. package/dist/editor/fields/StringListField.js.map +1 -0
  197. package/dist/editor/hooks/useBranchActions.d.ts.map +1 -1
  198. package/dist/editor/hooks/useBranchActions.js +8 -2
  199. package/dist/editor/hooks/useBranchActions.js.map +1 -1
  200. package/dist/editor/hooks/useBranchManager.d.ts +14 -3
  201. package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
  202. package/dist/editor/hooks/useBranchManager.js +18 -1
  203. package/dist/editor/hooks/useBranchManager.js.map +1 -1
  204. package/dist/editor/hooks/useDraftManager.d.ts +7 -0
  205. package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
  206. package/dist/editor/hooks/useDraftManager.js +57 -3
  207. package/dist/editor/hooks/useDraftManager.js.map +1 -1
  208. package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
  209. package/dist/editor/hooks/useEntryManager.js +25 -7
  210. package/dist/editor/hooks/useEntryManager.js.map +1 -1
  211. package/dist/editor/hooks/useGroupManager.d.ts.map +1 -1
  212. package/dist/editor/hooks/useGroupManager.js +13 -2
  213. package/dist/editor/hooks/useGroupManager.js.map +1 -1
  214. package/dist/editor/hooks/usePermissionManager.d.ts.map +1 -1
  215. package/dist/editor/hooks/usePermissionManager.js +13 -2
  216. package/dist/editor/hooks/usePermissionManager.js.map +1 -1
  217. package/dist/editor/media/AssetCard.d.ts.map +1 -1
  218. package/dist/editor/media/AssetCard.js +23 -2
  219. package/dist/editor/media/AssetCard.js.map +1 -1
  220. package/dist/editor/relative-time.d.ts +8 -0
  221. package/dist/editor/relative-time.d.ts.map +1 -0
  222. package/dist/editor/relative-time.js +26 -0
  223. package/dist/editor/relative-time.js.map +1 -0
  224. package/dist/git-manager.d.ts.map +1 -1
  225. package/dist/git-manager.js +16 -2
  226. package/dist/git-manager.js.map +1 -1
  227. package/dist/http/handler.d.ts.map +1 -1
  228. package/dist/http/handler.js +20 -9
  229. package/dist/http/handler.js.map +1 -1
  230. package/dist/http/router.d.ts.map +1 -1
  231. package/dist/http/router.js +2 -0
  232. package/dist/http/router.js.map +1 -1
  233. package/dist/paths/branch-name.d.ts +20 -0
  234. package/dist/paths/branch-name.d.ts.map +1 -0
  235. package/dist/paths/branch-name.js +24 -0
  236. package/dist/paths/branch-name.js.map +1 -0
  237. package/dist/paths/branch.d.ts +2 -8
  238. package/dist/paths/branch.d.ts.map +1 -1
  239. package/dist/paths/branch.js +6 -12
  240. package/dist/paths/branch.js.map +1 -1
  241. package/dist/paths/index.d.ts +2 -1
  242. package/dist/paths/index.d.ts.map +1 -1
  243. package/dist/paths/index.js +4 -1
  244. package/dist/paths/index.js.map +1 -1
  245. package/dist/schema/schema-store.d.ts +98 -0
  246. package/dist/schema/schema-store.d.ts.map +1 -1
  247. package/dist/schema/schema-store.js +187 -29
  248. package/dist/schema/schema-store.js.map +1 -1
  249. package/dist/services.js +9 -1
  250. package/dist/services.js.map +1 -1
  251. package/dist/task-queue/index.d.ts +2 -2
  252. package/dist/task-queue/index.d.ts.map +1 -1
  253. package/dist/task-queue/index.js +1 -1
  254. package/dist/task-queue/index.js.map +1 -1
  255. package/dist/task-queue/task-queue.d.ts +37 -1
  256. package/dist/task-queue/task-queue.d.ts.map +1 -1
  257. package/dist/task-queue/task-queue.js +104 -0
  258. package/dist/task-queue/task-queue.js.map +1 -1
  259. package/dist/task-queue/types.d.ts +11 -0
  260. package/dist/task-queue/types.d.ts.map +1 -1
  261. package/dist/types.d.ts +54 -0
  262. package/dist/types.d.ts.map +1 -1
  263. package/dist/utils/occ-json-write.d.ts.map +1 -1
  264. package/dist/utils/occ-json-write.js +7 -0
  265. package/dist/utils/occ-json-write.js.map +1 -1
  266. package/dist/utils/provisioning-lock.d.ts +19 -0
  267. package/dist/utils/provisioning-lock.d.ts.map +1 -1
  268. package/dist/utils/provisioning-lock.js +26 -0
  269. package/dist/utils/provisioning-lock.js.map +1 -1
  270. package/dist/validation/reference-validator.d.ts +17 -1
  271. package/dist/validation/reference-validator.d.ts.map +1 -1
  272. package/dist/validation/reference-validator.js +33 -10
  273. package/dist/validation/reference-validator.js.map +1 -1
  274. package/dist/worker/cms-worker.d.ts +74 -0
  275. package/dist/worker/cms-worker.d.ts.map +1 -1
  276. package/dist/worker/cms-worker.js +542 -29
  277. package/dist/worker/cms-worker.js.map +1 -1
  278. package/dist/worker/task-queue.d.ts +3 -3
  279. package/dist/worker/task-queue.d.ts.map +1 -1
  280. package/dist/worker/task-queue.js +2 -2
  281. package/dist/worker/task-queue.js.map +1 -1
  282. package/dist/worker/worker-status.d.ts +48 -0
  283. package/dist/worker/worker-status.d.ts.map +1 -0
  284. package/dist/worker/worker-status.js +53 -0
  285. package/dist/worker/worker-status.js.map +1 -0
  286. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"reference-validator.d.ts","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIlE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;gBADN,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,SAAS,WAAW,EAAE;IAGxC;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuFxE;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CA0D/F"}
1
+ {"version":3,"file":"reference-validator.d.ts","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIlE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,kBAAkB;IAU3B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB,CAAC;IAX5B;;;;;;;OAOG;gBAEO,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,iBAAiB,CAAC,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,aAAA;IAGlE;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuFxE;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CA0D/F"}
@@ -18,9 +18,31 @@ import { findFieldsByType } from './field-traversal.js';
18
18
  * }
19
19
  */
20
20
  export class ReferenceValidator {
21
- constructor(idIndex, schema) {
21
+ /**
22
+ * @param resolveCollection - Resolves a schema-declared collection name
23
+ * (the documented unprefixed form, e.g. 'posts') to its canonical logical
24
+ * path (e.g. 'content/posts'), typically `ContentStore.resolveCollectionItem`.
25
+ * Keeps the write boundary consistent with reference-option loading: any
26
+ * entry the dropdown offers must also pass validation. Without a resolver,
27
+ * names are compared as-is against the index's logical collection paths.
28
+ */
29
+ constructor(idIndex, schema, resolveCollection) {
22
30
  this.idIndex = idIndex;
23
31
  this.schema = schema;
32
+ this.resolveCollection = resolveCollection;
33
+ }
34
+ /**
35
+ * Check whether an entry's collection (canonical logical path from the ID
36
+ * index, e.g. 'content/posts') satisfies a field's `collections` constraint
37
+ * (documented unprefixed names, e.g. ['posts']). Subcollections of an
38
+ * allowed collection are allowed.
39
+ */
40
+ collectionAllowed(entryCollection, allowed) {
41
+ return allowed.some((col) => {
42
+ const canonical = this.resolveCollection?.(col) ?? col;
43
+ // Exact match or nested collection match
44
+ return entryCollection === canonical || entryCollection?.startsWith(canonical + '/');
45
+ });
24
46
  }
25
47
  /**
26
48
  * Validate all reference fields in the provided data.
@@ -40,8 +62,11 @@ export class ReferenceValidator {
40
62
  for (const { field, value, path: fieldPath } of refs) {
41
63
  const ids = Array.isArray(value) ? value : [value];
42
64
  for (const id of ids) {
43
- // Skip null/undefined values (they're handled by required validation)
44
- if (id == null)
65
+ // Skip empty values (they're handled by required validation). The
66
+ // editor sends '' when a single-select reference is cleared
67
+ // (ReferenceField coerces Mantine's null to ''), so an empty string
68
+ // means "no reference", not a malformed ID.
69
+ if (id == null || id === '')
45
70
  continue;
46
71
  // Validate ID format
47
72
  if (typeof id !== 'string' || !isValidId(id)) {
@@ -76,10 +101,7 @@ export class ReferenceValidator {
76
101
  }
77
102
  // Validate collection constraint
78
103
  if (field.collections && field.collections.length > 0) {
79
- const allowed = field.collections.some((col) => {
80
- // Exact match or nested collection match
81
- return location.collection === col || location.collection?.startsWith(col + '/');
82
- });
104
+ const allowed = this.collectionAllowed(location.collection, field.collections);
83
105
  if (!allowed) {
84
106
  errors.push({
85
107
  field: field.name,
@@ -111,6 +133,9 @@ export class ReferenceValidator {
111
133
  * Useful for validating user input in real-time.
112
134
  */
113
135
  async validateSingle(id, field) {
136
+ // '' means "no reference" (cleared single-select) — see validate().
137
+ if (id === '')
138
+ return null;
114
139
  if (!isValidId(id)) {
115
140
  return {
116
141
  field: field.name,
@@ -137,9 +162,7 @@ export class ReferenceValidator {
137
162
  };
138
163
  }
139
164
  if (field.collections && field.collections.length > 0) {
140
- const allowed = field.collections.some((col) => {
141
- return location.collection === col || location.collection?.startsWith(col + '/');
142
- });
165
+ const allowed = this.collectionAllowed(location.collection, field.collections);
143
166
  if (!allowed) {
144
167
  return {
145
168
  field: field.name,
@@ -1 +1 @@
1
- {"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"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"}
@@ -92,6 +92,7 @@ export declare class CmsWorker {
92
92
  private remoteGitPath;
93
93
  private contentBranchesPath;
94
94
  private baseBranch;
95
+ private sanitizedBaseBranch;
95
96
  private activeTimeouts;
96
97
  private running;
97
98
  private activeOperations;
@@ -103,7 +104,17 @@ export declare class CmsWorker {
103
104
  private releaseLockFn;
104
105
  private contentRoot;
105
106
  private log;
107
+ private statusReport?;
106
108
  constructor(config: CmsWorkerConfig);
109
+ /**
110
+ * Lazily get (and initialize if necessary) this worker's self-reported
111
+ * status object (PR-W1). Normally set once, up front, at the top of
112
+ * start(). The lazy fallback here covers two cases: (1) something in
113
+ * start() reaching a status-write point before that normal init runs
114
+ * (defensive -- see start()'s catch), and (2) unit tests that exercise
115
+ * syncGit()/processTaskQueue() directly without calling start() first.
116
+ */
117
+ private ensureStatusReport;
107
118
  start(): Promise<void>;
108
119
  stop(): Promise<void>;
109
120
  /**
@@ -208,6 +219,69 @@ export declare class CmsWorker {
208
219
  */
209
220
  private pushSettingsBranches;
210
221
  syncGit(): Promise<void>;
222
+ /**
223
+ * [C1] Remove `.trash-*` branch directories (created by the admin purge
224
+ * action, api/admin-branch-health.ts) whose name-embedded stamp is older
225
+ * than {@link TRASH_RETENTION_MS}. Names that don't match the expected
226
+ * `.trash-{dirName}-{STAMP}` shape, or whose stamp fails to parse, are
227
+ * left alone (logged once per cycle, not per file, to avoid flooding logs
228
+ * if something odd accumulates) -- purge is the only writer of this
229
+ * naming scheme, so an unparseable name is unexpected and worth a human
230
+ * looking rather than a silent skip.
231
+ */
232
+ private cleanupTrashedBranchDirs;
233
+ /**
234
+ * Fast-forward the base branch's own working-tree clone
235
+ * (content-branches/<baseBranch>) to match origin/<baseBranch>.
236
+ *
237
+ * Previously this clone was refreshed only incidentally, by the generic
238
+ * rebase loop below (rebaseActiveBranches): for a branch with status
239
+ * 'editing', rebasing onto origin/<baseBranch> degenerates to a
240
+ * fast-forward when the clone IS the base branch. But that loop's skip
241
+ * paths -- a dirty tree, a missing .git -- are silent, which is the
242
+ * suspected live failure mode: a wedged base clone with no diagnosable
243
+ * signal in the logs. This dedicated step makes the refresh explicit,
244
+ * ff-only, and loud, so a stuck base view (an editor forking a new branch
245
+ * "from base" that's actually a stale snapshot) is diagnosable from logs.
246
+ * This runs every sync cycle so the drift window is bounded by
247
+ * gitSyncInterval.
248
+ *
249
+ * ff-only on purpose: this clone must stay a linear mirror of
250
+ * origin/<baseBranch>, so a merge that isn't a fast-forward (diverged
251
+ * local history) is treated as a should-never-happen condition and left
252
+ * untouched rather than force-resolved.
253
+ */
254
+ private refreshBaseBranchWorkspace;
255
+ /**
256
+ * Poll GitHub for a submitted/approved branch's PR resolution.
257
+ *
258
+ * submitted/approved branches sit outside the rebase loop and get no
259
+ * other signal that their PR resolved on GitHub -- nothing pushes a
260
+ * merge/close webhook back into the branch workspace. merged ->
261
+ * auto-archive via buildMergedBranchUpdate (shared with the manual
262
+ * markAsMerged API so both paths produce identical archived-branch
263
+ * metadata). closed-without-merge -> record pullRequestState only; an
264
+ * admin decides the workflow transition from there. Best-effort: any
265
+ * failure here is logged and swallowed, retried next sync cycle.
266
+ */
267
+ private pollMergeState;
268
+ /**
269
+ * Persist a per-branch rebase failure to branch.json (PR-W2), bounded to
270
+ * roughly one save per failing branch per hour: a branch stuck failing
271
+ * every cycle must not turn into unbounded save-per-cycle x N-failing-
272
+ * branches write amplification -- save() eager-regenerates the branch
273
+ * registry (branch-metadata.ts's invalidateRegistry(), O(branch count) EFS
274
+ * reads), the same concern the `alreadyClean` no-op guard above exists
275
+ * for.
276
+ *
277
+ * Best-effort and non-fatal like every other metadata write in this
278
+ * loop's error paths: a corrupt branch.json, a lock-contention error, or
279
+ * any other save failure here must never abort the per-branch iteration.
280
+ * This matters doubly at the two call sites -- one is inside the outer
281
+ * per-branch catch, with no further catch of its own around this call --
282
+ * so the whole method is wrapped, not just the load.
283
+ */
284
+ private recordRebaseFailure;
211
285
  private rebaseActiveBranches;
212
286
  refreshAuthCache(): Promise<void>;
213
287
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cms-worker.d.ts","sourceRoot":"","sources":["../../src/worker/cms-worker.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;AAEpD,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;IACrC,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kEAAkE;IAClE,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAMD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO5D;AA2DD;;;;;;;;;;GAUG;AACH,qBAAa,SAAS;IAkBR,OAAO,CAAC,MAAM;IAjB1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,GAAG,CAAqB;gBAEZ,MAAM,EAAE,eAAe;IAcrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;YACW,WAAW;YAyBX,WAAW;IAWzB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;;;;;;;;;;;;;OAeG;YACW,sBAAsB;IAUpC;;;;;;;;;;;;;;OAcG;YACW,eAAe;IAiD7B;;;;;OAKG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCvC;;;;;;;;OAQG;YACW,sBAAsB;YAqBtB,WAAW;IAkHzB;;;OAGG;YACW,oBAAoB;IA4BlC;;;OAGG;YACW,6BAA6B;IAsB3C,OAAO,CAAC,cAAc;YAIR,kBAAkB;IAahC;;;OAGG;YACW,oBAAoB;IAqB5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA4BhB,oBAAoB;IAiN5B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAYxC"}
1
+ {"version":3,"file":"cms-worker.d.ts","sourceRoot":"","sources":["../../src/worker/cms-worker.ts"],"names":[],"mappings":"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"}