canopycms 0.0.61 → 0.0.63
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/ai/index.d.ts +9 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +9 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/json-to-markdown.js +1 -2
- package/dist/ai/json-to-markdown.js.map +1 -1
- package/dist/ai/to-plain-text.d.ts +57 -0
- package/dist/ai/to-plain-text.d.ts.map +1 -0
- package/dist/ai/to-plain-text.js +255 -0
- package/dist/ai/to-plain-text.js.map +1 -0
- package/dist/ai/transform-components.d.ts.map +1 -1
- package/dist/ai/transform-components.js +70 -5
- package/dist/ai/transform-components.js.map +1 -1
- package/dist/api/__test__/mock-client.d.ts +5 -1
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +9 -2
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/admin-branch-health.d.ts +36 -1
- package/dist/api/admin-branch-health.d.ts.map +1 -1
- package/dist/api/admin-branch-health.js +176 -2
- package/dist/api/admin-branch-health.js.map +1 -1
- package/dist/api/admin.d.ts +8 -1
- package/dist/api/admin.d.ts.map +1 -1
- package/dist/api/admin.js.map +1 -1
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +16 -2
- package/dist/api/branch.js.map +1 -1
- package/dist/api/client.d.ts +5 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +6 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/content.d.ts +11 -5
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +79 -6
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.d.ts +10 -0
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +40 -15
- package/dist/api/entries.js.map +1 -1
- package/dist/api/schema.d.ts +4 -4
- package/dist/api/schema.d.ts.map +1 -1
- package/dist/api/schema.js +13 -13
- package/dist/api/schema.js.map +1 -1
- package/dist/assets/transform.d.ts.map +1 -1
- package/dist/assets/transform.js +19 -6
- package/dist/assets/transform.js.map +1 -1
- package/dist/authorization/branch.d.ts +55 -3
- package/dist/authorization/branch.d.ts.map +1 -1
- package/dist/authorization/branch.js +55 -9
- package/dist/authorization/branch.js.map +1 -1
- package/dist/authorization/types.d.ts +1 -1
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/branch-health.d.ts +13 -0
- package/dist/branch-health.d.ts.map +1 -1
- package/dist/branch-health.js +23 -0
- package/dist/branch-health.js.map +1 -1
- package/dist/build-canopy.d.ts +49 -0
- package/dist/build-canopy.d.ts.map +1 -0
- package/dist/build-canopy.js +51 -0
- package/dist/build-canopy.js.map +1 -0
- package/dist/cli/cli.js +935 -562
- package/dist/cli/generate-ai-content.js +837 -480
- package/dist/cli/init.js +25 -7
- package/dist/cli/template-files/Dockerfile.cms.template +19 -1
- package/dist/cli/template-files/canopycms.config.ts.template +25 -1
- package/dist/cli/template-files/cms-stack.ts.template +7 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config/schemas/field.d.ts +15 -15
- package/dist/config/types.d.ts +2 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validation.d.ts +9 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +14 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/content-id-index.d.ts +97 -5
- package/dist/content-id-index.d.ts.map +1 -1
- package/dist/content-id-index.js +170 -18
- package/dist/content-id-index.js.map +1 -1
- package/dist/content-listing.d.ts +110 -5
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +164 -23
- package/dist/content-listing.js.map +1 -1
- package/dist/content-reader.d.ts +41 -4
- package/dist/content-reader.d.ts.map +1 -1
- package/dist/content-reader.js +17 -4
- package/dist/content-reader.js.map +1 -1
- package/dist/content-store.d.ts +91 -8
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +443 -258
- package/dist/content-store.js.map +1 -1
- package/dist/content-tree.d.ts +31 -2
- package/dist/content-tree.d.ts.map +1 -1
- package/dist/content-tree.js +22 -5
- package/dist/content-tree.js.map +1 -1
- package/dist/context.d.ts +30 -10
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +55 -4
- package/dist/context.js.map +1 -1
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +18 -6
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/editor/CanopyEditor.d.ts.map +1 -1
- package/dist/editor/CanopyEditor.js +2 -2
- package/dist/editor/CanopyEditor.js.map +1 -1
- package/dist/editor/CanopyEditorPage.d.ts +9 -1
- package/dist/editor/CanopyEditorPage.d.ts.map +1 -1
- package/dist/editor/CanopyEditorPage.js +9 -2
- package/dist/editor/CanopyEditorPage.js.map +1 -1
- package/dist/editor/Editor.d.ts +9 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +58 -24
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +12 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.js +6 -2
- package/dist/editor/admin/SystemHealthPanel.js.map +1 -1
- package/dist/editor/components/EntryCreateModal.d.ts +9 -1
- package/dist/editor/components/EntryCreateModal.d.ts.map +1 -1
- package/dist/editor/components/EntryCreateModal.js +4 -1
- package/dist/editor/components/EntryCreateModal.js.map +1 -1
- package/dist/editor/fields/DateTimeField.d.ts +46 -0
- package/dist/editor/fields/DateTimeField.d.ts.map +1 -0
- package/dist/editor/fields/DateTimeField.js +66 -0
- package/dist/editor/fields/DateTimeField.js.map +1 -0
- package/dist/editor/fields/NumberField.d.ts +34 -0
- package/dist/editor/fields/NumberField.d.ts.map +1 -0
- package/dist/editor/fields/NumberField.js +53 -0
- package/dist/editor/fields/NumberField.js.map +1 -0
- package/dist/editor/fields/NumberListField.d.ts +25 -0
- package/dist/editor/fields/NumberListField.d.ts.map +1 -0
- package/dist/editor/fields/NumberListField.js +53 -0
- package/dist/editor/fields/NumberListField.js.map +1 -0
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +115 -26
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/editor/hooks/useDraftManager.d.ts +8 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +261 -21
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useEntryManager.d.ts +21 -0
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
- package/dist/editor/hooks/useEntryManager.js +25 -2
- package/dist/editor/hooks/useEntryManager.js.map +1 -1
- package/dist/editor/theme.d.ts +8 -8
- package/dist/entry-schema.d.ts +228 -8
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js +124 -0
- package/dist/entry-schema.js.map +1 -1
- package/dist/git-manager.d.ts +51 -7
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +105 -14
- package/dist/git-manager.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +70 -27
- package/dist/http/handler.js.map +1 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +40 -3
- package/dist/http/router.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/operating-mode/deployment-name-fixtures.d.ts +29 -0
- package/dist/operating-mode/deployment-name-fixtures.d.ts.map +1 -0
- package/dist/operating-mode/deployment-name-fixtures.js +55 -0
- package/dist/operating-mode/deployment-name-fixtures.js.map +1 -0
- package/dist/operating-mode/deployment-name.d.ts +9 -0
- package/dist/operating-mode/deployment-name.d.ts.map +1 -1
- package/dist/operating-mode/deployment-name.js +9 -1
- package/dist/operating-mode/deployment-name.js.map +1 -1
- package/dist/operating-mode/index.d.ts +2 -1
- package/dist/operating-mode/index.d.ts.map +1 -1
- package/dist/operating-mode/index.js +4 -1
- package/dist/operating-mode/index.js.map +1 -1
- package/dist/operating-mode/mode-env.d.ts +58 -0
- package/dist/operating-mode/mode-env.d.ts.map +1 -0
- package/dist/operating-mode/mode-env.js +97 -0
- package/dist/operating-mode/mode-env.js.map +1 -0
- package/dist/resolve-canopy-user.d.ts +34 -0
- package/dist/resolve-canopy-user.d.ts.map +1 -0
- package/dist/resolve-canopy-user.js +55 -0
- package/dist/resolve-canopy-user.js.map +1 -0
- package/dist/schema/schema-store.d.ts +53 -2
- package/dist/schema/schema-store.d.ts.map +1 -1
- package/dist/schema/schema-store.js +92 -21
- package/dist/schema/schema-store.js.map +1 -1
- package/dist/server.d.ts +60 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +58 -0
- package/dist/server.js.map +1 -1
- package/dist/services.d.ts +1 -2
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +42 -12
- package/dist/services.js.map +1 -1
- package/dist/settings-workspace.d.ts +40 -0
- package/dist/settings-workspace.d.ts.map +1 -1
- package/dist/settings-workspace.js +139 -151
- package/dist/settings-workspace.js.map +1 -1
- package/dist/static/index.d.ts +65 -5
- package/dist/static/index.d.ts.map +1 -1
- package/dist/static/index.js +65 -12
- package/dist/static/index.js.map +1 -1
- package/dist/static/seo.d.ts +150 -0
- package/dist/static/seo.d.ts.map +1 -0
- package/dist/static/seo.js +189 -0
- package/dist/static/seo.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/content-write-lock.d.ts +127 -0
- package/dist/utils/content-write-lock.d.ts.map +1 -0
- package/dist/utils/content-write-lock.js +170 -0
- package/dist/utils/content-write-lock.js.map +1 -0
- package/dist/utils/error.d.ts +1 -1
- package/dist/utils/error.js +1 -1
- package/dist/utils/git.d.ts +16 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +22 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/sanitize-href.d.ts +74 -3
- package/dist/utils/sanitize-href.d.ts.map +1 -1
- package/dist/utils/sanitize-href.js +125 -6
- package/dist/utils/sanitize-href.js.map +1 -1
- package/dist/validation/entry-link-validator.d.ts +1 -1
- package/dist/validation/entry-link-validator.js +3 -3
- package/dist/validation/entry-link-validator.js.map +1 -1
- package/dist/validation/entry-validator.js +1 -1
- package/dist/validation/entry-validator.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +13 -0
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +326 -264
- package/dist/worker/cms-worker.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-health.d.ts","sourceRoot":"","sources":["../src/branch-health.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"branch-health.d.ts","sourceRoot":"","sources":["../src/branch-health.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAI5E;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,kBAAkB,GAAG,QAAQ,CAAA;AAExE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,gBAAgB,CAAA;IACtB,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mBAAmB;IACnB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC1C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yGAAyG;IACzG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gGAAgG;IAChG,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACpD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9E;AAiDD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsG9B"}
|
package/dist/branch-health.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { BranchMetadataFileManager, BranchMetadataCorruptError } from './branch-metadata.js';
|
|
4
|
+
import { ContentIdIndex } from './content-id-index.js';
|
|
4
5
|
import { sanitizeBranchName } from './paths/branch-name.js';
|
|
5
6
|
import { getErrorMessage, isNodeError, isNotFoundError } from './utils/error.js';
|
|
6
7
|
/**
|
|
@@ -45,6 +46,25 @@ async function readMetaMtime(branchRoot) {
|
|
|
45
46
|
return undefined;
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Scan a healthy branch's content tree for duplicate-embedded-ID pairs (see
|
|
51
|
+
* content-id-index.ts's "Duplicate-ID quarantine" section). Never throws --
|
|
52
|
+
* one branch's unreadable/unusual content tree must not take down the whole
|
|
53
|
+
* health scan (same rationale as the corrupt-metadata handling below). Costs
|
|
54
|
+
* a full recursive readdir of the content tree, same class of cost as the
|
|
55
|
+
* lazy warm-up every ContentStore already pays on first access -- acceptable
|
|
56
|
+
* for an admin-triggered scan, not a hot path.
|
|
57
|
+
*/
|
|
58
|
+
async function scanDuplicateContentIds(branchRoot, contentRootName) {
|
|
59
|
+
try {
|
|
60
|
+
const idIndex = new ContentIdIndex(branchRoot);
|
|
61
|
+
await idIndex.buildFromFilenames(contentRootName);
|
|
62
|
+
return idIndex.getDuplicateIds();
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
48
68
|
/**
|
|
49
69
|
* Scan every directory under `baseRoot` and classify it as healthy,
|
|
50
70
|
* corrupt-metadata, or orphan. Never throws for a single bad directory --
|
|
@@ -57,6 +77,7 @@ async function readMetaMtime(branchRoot) {
|
|
|
57
77
|
export async function scanBranchHealth(baseRoot, opts) {
|
|
58
78
|
const resolvedRoot = path.resolve(baseRoot);
|
|
59
79
|
const sanitizedBaseBranchName = sanitizeBranchName(opts.baseBranchName);
|
|
80
|
+
const contentRootName = opts.contentRootName ?? 'content';
|
|
60
81
|
let dirEntries;
|
|
61
82
|
try {
|
|
62
83
|
dirEntries = await fs.readdir(resolvedRoot, { withFileTypes: true });
|
|
@@ -118,11 +139,13 @@ export async function scanBranchHealth(baseRoot, opts) {
|
|
|
118
139
|
continue;
|
|
119
140
|
}
|
|
120
141
|
if (meta) {
|
|
142
|
+
const duplicateContentIds = await scanDuplicateContentIds(branchRoot, contentRootName);
|
|
121
143
|
entries.push({
|
|
122
144
|
dirName,
|
|
123
145
|
kind: 'healthy',
|
|
124
146
|
...(isBaseBranch ? { isBaseBranch } : {}),
|
|
125
147
|
branch: meta.branch,
|
|
148
|
+
...(duplicateContentIds.length ? { duplicateContentIds } : {}),
|
|
126
149
|
});
|
|
127
150
|
continue;
|
|
128
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-health.js","sourceRoot":"","sources":["../src/branch-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAI5B,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"branch-health.js","sourceRoot":"","sources":["../src/branch-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CanopyConfig } from './config';
|
|
2
|
+
import type { EntrySchemaRegistry } from './schema/types';
|
|
3
|
+
import { type CanopyBuildContext } from './context';
|
|
4
|
+
export interface CreateBuildCanopyOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Entry schema registry for resolving `.collection.json` references.
|
|
7
|
+
* Same shape as `createCanopyServices`'s option of the same name.
|
|
8
|
+
*/
|
|
9
|
+
entrySchemaRegistry?: EntrySchemaRegistry;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* One-call factory for a **build/admin** Canopy context — for standalone
|
|
13
|
+
* scripts that run entirely outside a Next.js request or build phase (index
|
|
14
|
+
* builders, content audits, codegen, ad hoc reports).
|
|
15
|
+
*
|
|
16
|
+
* **This is a build/admin context: it reads the filesystem directly as a
|
|
17
|
+
* synthetic admin user (`STATIC_DEPLOY_USER`) and bypasses ALL branch and
|
|
18
|
+
* path ACLs.** There is no per-request auth to enforce because there is no
|
|
19
|
+
* request. Do not reach for this from request-handling code (an API route,
|
|
20
|
+
* a server component rendering for a specific visitor, anything with a real
|
|
21
|
+
* user on the other end) — there, use `createNextCanopyContext(...)`'s
|
|
22
|
+
* `getCanopy()` (or its phase-selecting `read`/`readByUrlPath`), which
|
|
23
|
+
* enforce branch/path permissions per user. This factory mirrors the same
|
|
24
|
+
* `createCanopyServices` + `createCanopyContext` + `STATIC_DEPLOY_USER` boot
|
|
25
|
+
* sequence that `createNextCanopyContext`'s own `getCanopyForBuild()` uses
|
|
26
|
+
* internally, minus the Next.js pieces (no `next/headers`, no React
|
|
27
|
+
* `cache()`, no request-time misuse guard — there is no request phase for
|
|
28
|
+
* it to guard against) — so it works in a plain script run with `tsx`/`node`.
|
|
29
|
+
*
|
|
30
|
+
* Trivially stubbable by design: the boot sequence is one function call
|
|
31
|
+
* taking a plain config object and returning a plain context, so a script
|
|
32
|
+
* that calls it can be imported and exercised from a test with the config
|
|
33
|
+
* (or this function itself) swapped out. Contrast with a hand-rolled
|
|
34
|
+
* top-level-`await` boot block, which can never be imported by a test at
|
|
35
|
+
* all — that's the concrete problem this factory removes.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* // scripts/build-search-index.ts
|
|
40
|
+
* import { createBuildCanopy } from 'canopycms/server'
|
|
41
|
+
* import config from '../canopycms.config'
|
|
42
|
+
* import { entrySchemaRegistry } from '../src/schemas'
|
|
43
|
+
*
|
|
44
|
+
* const canopy = await createBuildCanopy(config.server, { entrySchemaRegistry })
|
|
45
|
+
* const entries = await canopy.listEntries()
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function createBuildCanopy(config: CanopyConfig, options?: CreateBuildCanopyOptions): Promise<CanopyBuildContext>;
|
|
49
|
+
//# sourceMappingURL=build-canopy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-canopy.d.ts","sourceRoot":"","sources":["../src/build-canopy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGxE,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAiB7B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createCanopyServices } from './services.js';
|
|
2
|
+
import { createCanopyContext } from './context.js';
|
|
3
|
+
import { STATIC_DEPLOY_USER } from './build-mode.js';
|
|
4
|
+
/**
|
|
5
|
+
* One-call factory for a **build/admin** Canopy context — for standalone
|
|
6
|
+
* scripts that run entirely outside a Next.js request or build phase (index
|
|
7
|
+
* builders, content audits, codegen, ad hoc reports).
|
|
8
|
+
*
|
|
9
|
+
* **This is a build/admin context: it reads the filesystem directly as a
|
|
10
|
+
* synthetic admin user (`STATIC_DEPLOY_USER`) and bypasses ALL branch and
|
|
11
|
+
* path ACLs.** There is no per-request auth to enforce because there is no
|
|
12
|
+
* request. Do not reach for this from request-handling code (an API route,
|
|
13
|
+
* a server component rendering for a specific visitor, anything with a real
|
|
14
|
+
* user on the other end) — there, use `createNextCanopyContext(...)`'s
|
|
15
|
+
* `getCanopy()` (or its phase-selecting `read`/`readByUrlPath`), which
|
|
16
|
+
* enforce branch/path permissions per user. This factory mirrors the same
|
|
17
|
+
* `createCanopyServices` + `createCanopyContext` + `STATIC_DEPLOY_USER` boot
|
|
18
|
+
* sequence that `createNextCanopyContext`'s own `getCanopyForBuild()` uses
|
|
19
|
+
* internally, minus the Next.js pieces (no `next/headers`, no React
|
|
20
|
+
* `cache()`, no request-time misuse guard — there is no request phase for
|
|
21
|
+
* it to guard against) — so it works in a plain script run with `tsx`/`node`.
|
|
22
|
+
*
|
|
23
|
+
* Trivially stubbable by design: the boot sequence is one function call
|
|
24
|
+
* taking a plain config object and returning a plain context, so a script
|
|
25
|
+
* that calls it can be imported and exercised from a test with the config
|
|
26
|
+
* (or this function itself) swapped out. Contrast with a hand-rolled
|
|
27
|
+
* top-level-`await` boot block, which can never be imported by a test at
|
|
28
|
+
* all — that's the concrete problem this factory removes.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // scripts/build-search-index.ts
|
|
33
|
+
* import { createBuildCanopy } from 'canopycms/server'
|
|
34
|
+
* import config from '../canopycms.config.js'
|
|
35
|
+
* import { entrySchemaRegistry } from '../src/schemas.js'
|
|
36
|
+
*
|
|
37
|
+
* const canopy = await createBuildCanopy(config.server, { entrySchemaRegistry })
|
|
38
|
+
* const entries = await canopy.listEntries()
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function createBuildCanopy(config, options = {}) {
|
|
42
|
+
const services = await createCanopyServices(config, {
|
|
43
|
+
entrySchemaRegistry: options.entrySchemaRegistry,
|
|
44
|
+
});
|
|
45
|
+
const { buildContentTree, listEntries, read, readByUrlPath, services: contextServices, } = await createCanopyContext({
|
|
46
|
+
services,
|
|
47
|
+
extractUser: async () => STATIC_DEPLOY_USER,
|
|
48
|
+
}).getContext();
|
|
49
|
+
return { buildContentTree, listEntries, read, readByUrlPath, services: contextServices };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=build-canopy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-canopy.js","sourceRoot":"","sources":["../src/build-canopy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAA2B,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAUjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAoB,EACpB,UAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE;QAClD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC,CAAA;IAEF,MAAM,EACJ,gBAAgB,EAChB,WAAW,EACX,IAAI,EACJ,aAAa,EACb,QAAQ,EAAE,eAAe,GAC1B,GAAG,MAAM,mBAAmB,CAAC;QAC5B,QAAQ;QACR,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB;KAC5C,CAAC,CAAC,UAAU,EAAE,CAAA;IAEf,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAA;AAC1F,CAAC"}
|