canopycms 0.0.60 → 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.
- package/dist/api/__test__/mock-client.d.ts +29 -0
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +51 -0
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/admin-branch-health.d.ts +65 -0
- package/dist/api/admin-branch-health.d.ts.map +1 -0
- package/dist/api/admin-branch-health.js +448 -0
- package/dist/api/admin-branch-health.js.map +1 -0
- package/dist/api/admin.d.ts +136 -0
- package/dist/api/admin.d.ts.map +1 -0
- package/dist/api/admin.js +338 -0
- package/dist/api/admin.js.map +1 -0
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/assets.js +4 -0
- package/dist/api/assets.js.map +1 -1
- package/dist/api/branch-merge.d.ts +6 -0
- package/dist/api/branch-merge.d.ts.map +1 -1
- package/dist/api/branch-merge.js +13 -3
- package/dist/api/branch-merge.js.map +1 -1
- package/dist/api/branch-status.d.ts.map +1 -1
- package/dist/api/branch-status.js +15 -5
- package/dist/api/branch-status.js.map +1 -1
- package/dist/api/branch-withdraw.d.ts +6 -0
- package/dist/api/branch-withdraw.d.ts.map +1 -1
- package/dist/api/branch-withdraw.js +15 -3
- package/dist/api/branch-withdraw.js.map +1 -1
- package/dist/api/branch.d.ts +11 -1
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +70 -4
- package/dist/api/branch.js.map +1 -1
- package/dist/api/client.d.ts +34 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +47 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/comments.d.ts.map +1 -1
- package/dist/api/comments.js +4 -0
- package/dist/api/comments.js.map +1 -1
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +4 -4
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.js +1 -1
- package/dist/api/entries.js.map +1 -1
- package/dist/api/github-sync.d.ts.map +1 -1
- package/dist/api/github-sync.js +14 -3
- package/dist/api/github-sync.js.map +1 -1
- package/dist/api/guards.d.ts +7 -1
- package/dist/api/guards.d.ts.map +1 -1
- package/dist/api/guards.js +54 -0
- package/dist/api/guards.js.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +0 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.js +7 -7
- package/dist/api/schema.js.map +1 -1
- package/dist/authorization/branch.d.ts +14 -1
- package/dist/authorization/branch.d.ts.map +1 -1
- package/dist/authorization/branch.js +5 -3
- package/dist/authorization/branch.js.map +1 -1
- package/dist/authorization/index.d.ts +1 -0
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +2 -0
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/protected-branch.d.ts +39 -0
- package/dist/authorization/protected-branch.d.ts.map +1 -0
- package/dist/authorization/protected-branch.js +43 -0
- package/dist/authorization/protected-branch.js.map +1 -0
- package/dist/branch-health.d.ts +78 -0
- package/dist/branch-health.d.ts.map +1 -0
- package/dist/branch-health.js +151 -0
- package/dist/branch-health.js.map +1 -0
- package/dist/branch-metadata.d.ts +20 -0
- package/dist/branch-metadata.d.ts.map +1 -1
- package/dist/branch-metadata.js +21 -1
- package/dist/branch-metadata.js.map +1 -1
- package/dist/branch-registry.d.ts.map +1 -1
- package/dist/branch-registry.js +13 -1
- package/dist/branch-registry.js.map +1 -1
- package/dist/cli/cli.js +154 -13
- package/dist/cli/generate-ai-content.js +54 -10
- package/dist/cli/init.js +72 -0
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -1
- package/dist/cli/sync.js.map +1 -1
- package/dist/content-store.d.ts +16 -0
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +22 -6
- package/dist/content-store.js.map +1 -1
- package/dist/editor/BranchManager.d.ts +9 -1
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +20 -9
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/editor/CommentsPanel.d.ts.map +1 -1
- package/dist/editor/CommentsPanel.js +4 -12
- package/dist/editor/CommentsPanel.js.map +1 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +46 -10
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/EntryNavigator.d.ts +7 -0
- package/dist/editor/EntryNavigator.d.ts.map +1 -1
- package/dist/editor/EntryNavigator.js +17 -5
- package/dist/editor/EntryNavigator.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +4 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.d.ts +6 -0
- package/dist/editor/admin/SystemHealthPanel.d.ts.map +1 -0
- package/dist/editor/admin/SystemHealthPanel.js +234 -0
- package/dist/editor/admin/SystemHealthPanel.js.map +1 -0
- package/dist/editor/admin/useSystemHealth.d.ts +40 -0
- package/dist/editor/admin/useSystemHealth.d.ts.map +1 -0
- package/dist/editor/admin/useSystemHealth.js +205 -0
- package/dist/editor/admin/useSystemHealth.js.map +1 -0
- package/dist/editor/comments/FieldWrapper.d.ts.map +1 -1
- package/dist/editor/comments/FieldWrapper.js +1 -1
- package/dist/editor/comments/FieldWrapper.js.map +1 -1
- package/dist/editor/comments/InlineCommentThread.d.ts.map +1 -1
- package/dist/editor/comments/InlineCommentThread.js +2 -21
- package/dist/editor/comments/InlineCommentThread.js.map +1 -1
- package/dist/editor/comments/ThreadCarousel.d.ts +2 -0
- package/dist/editor/comments/ThreadCarousel.d.ts.map +1 -1
- package/dist/editor/comments/ThreadCarousel.js +5 -2
- package/dist/editor/comments/ThreadCarousel.js.map +1 -1
- package/dist/editor/components/EditorHeader.d.ts +11 -0
- package/dist/editor/components/EditorHeader.d.ts.map +1 -1
- package/dist/editor/components/EditorHeader.js +75 -41
- package/dist/editor/components/EditorHeader.js.map +1 -1
- package/dist/editor/components/EditorSidebar.d.ts +7 -1
- package/dist/editor/components/EditorSidebar.d.ts.map +1 -1
- package/dist/editor/components/EditorSidebar.js +3 -3
- package/dist/editor/components/EditorSidebar.js.map +1 -1
- package/dist/editor/fields/ImageField.d.ts.map +1 -1
- package/dist/editor/fields/ImageField.js +4 -1
- package/dist/editor/fields/ImageField.js.map +1 -1
- package/dist/editor/fields/StringListField.d.ts +20 -0
- package/dist/editor/fields/StringListField.d.ts.map +1 -0
- package/dist/editor/fields/StringListField.js +25 -0
- package/dist/editor/fields/StringListField.js.map +1 -0
- package/dist/editor/hooks/useBranchActions.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchActions.js +8 -2
- package/dist/editor/hooks/useBranchActions.js.map +1 -1
- package/dist/editor/hooks/useBranchManager.d.ts +12 -3
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +16 -1
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/editor/hooks/useDraftManager.d.ts +7 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +57 -3
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
- package/dist/editor/hooks/useEntryManager.js +25 -7
- package/dist/editor/hooks/useEntryManager.js.map +1 -1
- package/dist/editor/media/AssetCard.d.ts.map +1 -1
- package/dist/editor/media/AssetCard.js +23 -2
- package/dist/editor/media/AssetCard.js.map +1 -1
- package/dist/editor/relative-time.d.ts +8 -0
- package/dist/editor/relative-time.d.ts.map +1 -0
- package/dist/editor/relative-time.js +26 -0
- package/dist/editor/relative-time.js.map +1 -0
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +10 -2
- package/dist/git-manager.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +20 -9
- package/dist/http/handler.js.map +1 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +2 -0
- package/dist/http/router.js.map +1 -1
- package/dist/paths/branch-name.d.ts +20 -0
- package/dist/paths/branch-name.d.ts.map +1 -0
- package/dist/paths/branch-name.js +24 -0
- package/dist/paths/branch-name.js.map +1 -0
- package/dist/paths/branch.d.ts +2 -8
- package/dist/paths/branch.d.ts.map +1 -1
- package/dist/paths/branch.js +6 -12
- package/dist/paths/branch.js.map +1 -1
- package/dist/paths/index.d.ts +2 -1
- package/dist/paths/index.d.ts.map +1 -1
- package/dist/paths/index.js +4 -1
- package/dist/paths/index.js.map +1 -1
- package/dist/services.js +9 -1
- package/dist/services.js.map +1 -1
- package/dist/task-queue/index.d.ts +2 -2
- package/dist/task-queue/index.d.ts.map +1 -1
- package/dist/task-queue/index.js +1 -1
- package/dist/task-queue/index.js.map +1 -1
- package/dist/task-queue/task-queue.d.ts +37 -1
- package/dist/task-queue/task-queue.d.ts.map +1 -1
- package/dist/task-queue/task-queue.js +104 -0
- package/dist/task-queue/task-queue.js.map +1 -1
- package/dist/task-queue/types.d.ts +11 -0
- package/dist/task-queue/types.d.ts.map +1 -1
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/occ-json-write.d.ts.map +1 -1
- package/dist/utils/occ-json-write.js +7 -0
- package/dist/utils/occ-json-write.js.map +1 -1
- package/dist/utils/provisioning-lock.d.ts +19 -0
- package/dist/utils/provisioning-lock.d.ts.map +1 -1
- package/dist/utils/provisioning-lock.js +26 -0
- package/dist/utils/provisioning-lock.js.map +1 -1
- package/dist/validation/reference-validator.d.ts +17 -1
- package/dist/validation/reference-validator.d.ts.map +1 -1
- package/dist/validation/reference-validator.js +33 -10
- package/dist/validation/reference-validator.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +38 -0
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +328 -25
- package/dist/worker/cms-worker.js.map +1 -1
- package/dist/worker/task-queue.d.ts +3 -3
- package/dist/worker/task-queue.d.ts.map +1 -1
- package/dist/worker/task-queue.js +2 -2
- package/dist/worker/task-queue.js.map +1 -1
- package/dist/worker/worker-status.d.ts +48 -0
- package/dist/worker/worker-status.d.ts.map +1 -0
- package/dist/worker/worker-status.js +53 -0
- package/dist/worker/worker-status.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioning-lock.d.ts","sourceRoot":"","sources":["../../src/utils/provisioning-lock.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAc9B"}
|
|
1
|
+
{"version":3,"file":"provisioning-lock.d.ts","sourceRoot":"","sources":["../../src/utils/provisioning-lock.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAc9B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAQ9B"}
|
|
@@ -31,4 +31,30 @@ export async function acquireProvisioningLock(lockTargetDir, lockName) {
|
|
|
31
31
|
stale: 30_000,
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Zero-retry variant of {@link acquireProvisioningLock}, for admin actions
|
|
36
|
+
* running inside a synchronous request/response cycle (e.g. a Lambda-backed
|
|
37
|
+
* API handler). `acquireProvisioningLock`'s ~600-retry budget is sized for a
|
|
38
|
+
* build worker that can afford to wait several minutes for a live
|
|
39
|
+
* provisioner to finish; an admin request must fail fast on contention
|
|
40
|
+
* instead (409 immediately) rather than hang the request for that long.
|
|
41
|
+
*
|
|
42
|
+
* `stale: 30_000` is unchanged from the patient variant: a genuinely stale
|
|
43
|
+
* lock (holder crashed more than 30s ago) is still taken over normally --
|
|
44
|
+
* this only removes the RETRY loop for live contention, not the staleness
|
|
45
|
+
* recovery a caller depends on (see branch-health.ts's [H1] freshness rail,
|
|
46
|
+
* which reads this same lock's mtime to decide whether it is fresh or
|
|
47
|
+
* stale before an admin purge/repair proceeds).
|
|
48
|
+
*
|
|
49
|
+
* Throws with `err.code === 'ELOCKED'` on contention (a live, non-stale
|
|
50
|
+
* holder) -- callers should translate that into a 409.
|
|
51
|
+
*/
|
|
52
|
+
export async function tryAcquireProvisioningLock(lockTargetDir, lockName) {
|
|
53
|
+
await fs.mkdir(lockTargetDir, { recursive: true });
|
|
54
|
+
return lockfile.lock(lockTargetDir, {
|
|
55
|
+
lockfilePath: path.join(lockTargetDir, lockName),
|
|
56
|
+
retries: 0,
|
|
57
|
+
stale: 30_000,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
34
60
|
//# sourceMappingURL=provisioning-lock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioning-lock.js","sourceRoot":"","sources":["../../src/utils/provisioning-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AAEtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,aAAqB,EACrB,QAAgB;IAEhB,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAElD,+EAA+E;IAC/E,2EAA2E;IAC3E,gFAAgF;IAChF,+EAA+E;IAC/E,0EAA0E;IAC1E,yBAAyB;IACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;QAClC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;QAChD,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;QACvF,KAAK,EAAE,MAAM;KACd,CAAC,CAAA;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"provisioning-lock.js","sourceRoot":"","sources":["../../src/utils/provisioning-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AAEtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,aAAqB,EACrB,QAAgB;IAEhB,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAElD,+EAA+E;IAC/E,2EAA2E;IAC3E,gFAAgF;IAChF,+EAA+E;IAC/E,0EAA0E;IAC1E,yBAAyB;IACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;QAClC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;QAChD,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;QACvF,KAAK,EAAE,MAAM;KACd,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAAqB,EACrB,QAAgB;IAEhB,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAElD,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;QAClC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;QAChD,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,MAAM;KACd,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -28,7 +28,23 @@ export interface ValidationResult {
|
|
|
28
28
|
export declare class ReferenceValidator {
|
|
29
29
|
private idIndex;
|
|
30
30
|
private schema;
|
|
31
|
-
|
|
31
|
+
private resolveCollection?;
|
|
32
|
+
/**
|
|
33
|
+
* @param resolveCollection - Resolves a schema-declared collection name
|
|
34
|
+
* (the documented unprefixed form, e.g. 'posts') to its canonical logical
|
|
35
|
+
* path (e.g. 'content/posts'), typically `ContentStore.resolveCollectionItem`.
|
|
36
|
+
* Keeps the write boundary consistent with reference-option loading: any
|
|
37
|
+
* entry the dropdown offers must also pass validation. Without a resolver,
|
|
38
|
+
* names are compared as-is against the index's logical collection paths.
|
|
39
|
+
*/
|
|
40
|
+
constructor(idIndex: ContentIdIndex, schema: readonly FieldConfig[], resolveCollection?: ((name: string) => string | undefined) | undefined);
|
|
41
|
+
/**
|
|
42
|
+
* Check whether an entry's collection (canonical logical path from the ID
|
|
43
|
+
* index, e.g. 'content/posts') satisfies a field's `collections` constraint
|
|
44
|
+
* (documented unprefixed names, e.g. ['posts']). Subcollections of an
|
|
45
|
+
* allowed collection are allowed.
|
|
46
|
+
*/
|
|
47
|
+
private collectionAllowed;
|
|
32
48
|
/**
|
|
33
49
|
* Validate all reference fields in the provided data.
|
|
34
50
|
*
|
|
@@ -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;
|
|
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
|
-
|
|
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
|
|
44
|
-
|
|
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
|
|
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
|
|
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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAcpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,kBAAkB;IAC7B,YACU,OAAuB,EACvB,MAA8B;
|
|
1
|
+
{"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,7 +104,17 @@ export declare class CmsWorker {
|
|
|
104
104
|
private releaseLockFn;
|
|
105
105
|
private contentRoot;
|
|
106
106
|
private log;
|
|
107
|
+
private statusReport?;
|
|
107
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;
|
|
108
118
|
start(): Promise<void>;
|
|
109
119
|
stop(): Promise<void>;
|
|
110
120
|
/**
|
|
@@ -209,6 +219,17 @@ export declare class CmsWorker {
|
|
|
209
219
|
*/
|
|
210
220
|
private pushSettingsBranches;
|
|
211
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;
|
|
212
233
|
/**
|
|
213
234
|
* Fast-forward the base branch's own working-tree clone
|
|
214
235
|
* (content-branches/<baseBranch>) to match origin/<baseBranch>.
|
|
@@ -244,6 +265,23 @@ export declare class CmsWorker {
|
|
|
244
265
|
* failure here is logged and swallowed, retried next sync cycle.
|
|
245
266
|
*/
|
|
246
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;
|
|
247
285
|
private rebaseActiveBranches;
|
|
248
286
|
refreshAuthCache(): Promise<void>;
|
|
249
287
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-worker.d.ts","sourceRoot":"","sources":["../../src/worker/cms-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cms-worker.d.ts","sourceRoot":"","sources":["../../src/worker/cms-worker.ts"],"names":[],"mappings":"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"}
|