canopycms 0.0.39 → 0.0.41
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/branch-schema-cache.d.ts +10 -0
- package/dist/branch-schema-cache.d.ts.map +1 -1
- package/dist/branch-schema-cache.js +14 -2
- package/dist/branch-schema-cache.js.map +1 -1
- package/dist/cli/generate-ai-content.js +21 -4
- package/dist/cli/init.js +7 -2
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +13 -103
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/template-files/canopy.ts.template +30 -2
- package/dist/config/helpers.d.ts.map +1 -1
- package/dist/config/helpers.js +5 -0
- package/dist/config/helpers.js.map +1 -1
- package/dist/config/schemas/config.d.ts +21 -0
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +6 -0
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/config/types.d.ts +19 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context.d.ts +19 -10
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +5 -0
- package/dist/context.js.map +1 -1
- package/dist/dev-content-watcher.d.ts +37 -0
- package/dist/dev-content-watcher.d.ts.map +1 -0
- package/dist/dev-content-watcher.js +122 -0
- package/dist/dev-content-watcher.js.map +1 -0
- package/dist/entry-schema.d.ts +38 -0
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js +33 -0
- package/dist/entry-schema.js.map +1 -1
- package/dist/schema/meta-loader.d.ts.map +1 -1
- package/dist/schema/meta-loader.js +3 -0
- package/dist/schema/meta-loader.js.map +1 -1
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/static/index.d.ts +51 -0
- package/dist/static/index.d.ts.map +1 -0
- package/dist/static/index.js +24 -0
- package/dist/static/index.js.map +1 -0
- package/dist/sync-core.d.ts +57 -0
- package/dist/sync-core.d.ts.map +1 -0
- package/dist/sync-core.js +166 -0
- package/dist/sync-core.js.map +1 -0
- package/package.json +5 -1
package/dist/config/types.d.ts
CHANGED
|
@@ -203,6 +203,21 @@ export type CanopyOperatingMode = OperatingMode;
|
|
|
203
203
|
export type ContentRoot = string;
|
|
204
204
|
export type SourceRoot = string | undefined;
|
|
205
205
|
export type DeployedAs = 'static' | 'server';
|
|
206
|
+
/**
|
|
207
|
+
* How the dev server surfaces working-tree content edits that diverge from the branch clone it serves.
|
|
208
|
+
* - 'warn' (default): on startup and on content/** changes, log a warning naming files when the
|
|
209
|
+
* working tree diverges from the dev branch clone (so the staleness is visible, not silent).
|
|
210
|
+
* - 'off': no watcher, no warnings.
|
|
211
|
+
*
|
|
212
|
+
* Note: there is no 'auto' (auto-push) mode. Auto-overwriting the branch clone from the working tree
|
|
213
|
+
* would silently clobber uncommitted editor "Save" state with no Canopy-level recovery path for the
|
|
214
|
+
* editor. Reconcile explicitly via `canopycms sync push` (which has interactive conflict handling).
|
|
215
|
+
*/
|
|
216
|
+
export type DevContentSyncMode = 'off' | 'warn';
|
|
217
|
+
/** Dev-mode-only behavior. Ignored when `mode !== 'dev'`. */
|
|
218
|
+
export interface DevConfig {
|
|
219
|
+
contentSync?: DevContentSyncMode;
|
|
220
|
+
}
|
|
206
221
|
/**
|
|
207
222
|
* Validated CanopyConfig - the runtime configuration object.
|
|
208
223
|
*/
|
|
@@ -230,6 +245,8 @@ export interface CanopyConfig {
|
|
|
230
245
|
authPlugin?: AuthPlugin;
|
|
231
246
|
/** Custom URL resolver for entry links. Overrides the default URL computation. */
|
|
232
247
|
entryLinkUrl?: EntryLinkUrlResolver;
|
|
248
|
+
/** Dev-mode-only behavior (content-sync divergence detection). Ignored when mode !== 'dev'. */
|
|
249
|
+
dev?: DevConfig;
|
|
233
250
|
}
|
|
234
251
|
/**
|
|
235
252
|
* Input type for config authoring (allows looser types before validation)
|
|
@@ -258,6 +275,8 @@ export interface CanopyConfigInput {
|
|
|
258
275
|
authPlugin?: AuthPlugin;
|
|
259
276
|
/** Custom URL resolver for entry links. Overrides the default URL computation. */
|
|
260
277
|
entryLinkUrl?: EntryLinkUrlResolver;
|
|
278
|
+
/** Dev-mode-only behavior (content-sync divergence detection). Ignored when mode !== 'dev'. */
|
|
279
|
+
dev?: DevConfig;
|
|
261
280
|
}
|
|
262
281
|
export type CanopyConfigFragment = Partial<CanopyConfigInput>;
|
|
263
282
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -13,20 +13,24 @@ export interface CanopyContextOptions {
|
|
|
13
13
|
extractUser: () => Promise<CanopyUser>;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Build-time context
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* Build-time context.
|
|
17
|
+
*
|
|
18
|
+
* Obtained via getCanopyForBuild(); reads the filesystem directly as a synthetic admin
|
|
19
|
+
* (STATIC_DEPLOY_USER) and bypasses all branch/path ACLs. Safe for static generation
|
|
20
|
+
* (generateStaticParams, sitemap, build-time page rendering); it must NOT be used to serve
|
|
21
|
+
* content at request time on a production `server` deployment. (Framework adapters throw on the
|
|
22
|
+
* read helpers there; `services` remains a raw, unguarded escape hatch.) For request-scoped,
|
|
23
|
+
* ACL-enforced access use getCanopy() (CanopyContext) instead.
|
|
24
|
+
*
|
|
25
|
+
* Includes read/readByUrlPath so build-time code can resolve a single entry by path/URL without
|
|
26
|
+
* scanning the whole collection.
|
|
19
27
|
*/
|
|
20
28
|
export interface CanopyBuildContext {
|
|
21
29
|
/** Build a content tree from the schema and filesystem entries. */
|
|
22
30
|
buildContentTree: <T = unknown>(options?: BuildContentTreeOptions<T>) => Promise<ContentTreeNode<T>[]>;
|
|
23
31
|
/** List all content entries as a flat array. */
|
|
24
32
|
listEntries: <T = Record<string, unknown>>(options?: ListEntriesOptions<T>) => Promise<ListEntriesItem<T>[]>;
|
|
25
|
-
/**
|
|
26
|
-
services: CanopyServices;
|
|
27
|
-
}
|
|
28
|
-
export interface CanopyContext extends CanopyBuildContext {
|
|
29
|
-
/** Content reader with automatic auth context */
|
|
33
|
+
/** Content reader (auth context applied automatically — admin at build time). */
|
|
30
34
|
read: <T = unknown>(input: {
|
|
31
35
|
entryPath: string;
|
|
32
36
|
slug?: string;
|
|
@@ -42,8 +46,9 @@ export interface CanopyContext extends CanopyBuildContext {
|
|
|
42
46
|
* Tries direct entry match first (last segment = slug, rest = collection path),
|
|
43
47
|
* then falls back to index entry (full path = collection, slug = 'index').
|
|
44
48
|
* Root path '/' resolves to the content root's index entry.
|
|
45
|
-
* Returns null if no content matches the path
|
|
46
|
-
*
|
|
49
|
+
* Returns null if no content matches the path — including collection URLs that have no
|
|
50
|
+
* index entry (use buildContentTree for those) and non-entry/invalid paths such as
|
|
51
|
+
* `/favicon.ico` or Next internals (the slug validator rejects them, treated as a miss).
|
|
47
52
|
*
|
|
48
53
|
* @example
|
|
49
54
|
* ```ts
|
|
@@ -63,6 +68,10 @@ export interface CanopyContext extends CanopyBuildContext {
|
|
|
63
68
|
data: T;
|
|
64
69
|
path: string;
|
|
65
70
|
} | null>;
|
|
71
|
+
/** Underlying services */
|
|
72
|
+
services: CanopyServices;
|
|
73
|
+
}
|
|
74
|
+
export interface CanopyContext extends CanopyBuildContext {
|
|
66
75
|
/** Current authenticated user */
|
|
67
76
|
user: CanopyUser;
|
|
68
77
|
}
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAO1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAA;IACxB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;CACvC;AAED
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAO1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAA;IACxB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;CACvC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,gBAAgB,EAAE,CAAC,CAAC,GAAG,OAAO,EAC5B,OAAO,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,KACjC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAElC,gDAAgD;IAChD,WAAW,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAC5B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAElC,iFAAiF;IACjF,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAC5B,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAExC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,aAAa,EAAE,CAAC,CAAC,GAAG,OAAO,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,KACvD,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAE9C,0BAA0B;IAC1B,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,iCAAiC;IACjC,IAAI,EAAE,UAAU,CAAA;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB;sBAsBlC,OAAO,CAAC,aAAa,CAAC;;EA0HpD"}
|
package/dist/context.js
CHANGED
|
@@ -71,6 +71,11 @@ export function createCanopyContext(options) {
|
|
|
71
71
|
return null;
|
|
72
72
|
const { branch, resolveReferences } = options ?? {};
|
|
73
73
|
for (const candidate of candidates) {
|
|
74
|
+
// Skip candidates whose slug isn't a valid slug (e.g. URL paths like /favicon.ico or
|
|
75
|
+
// Next internals that the [...slug] route catches). These can never match an entry, so
|
|
76
|
+
// treat them as a miss rather than letting read() throw an "Invalid slug" error.
|
|
77
|
+
if (!parseSlug(candidate.slug).ok)
|
|
78
|
+
continue;
|
|
74
79
|
try {
|
|
75
80
|
return await read({
|
|
76
81
|
entryPath: candidate.entryPath,
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,EAAa,MAAM,SAAS,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EACL,gBAAgB,IAAI,oBAAoB,GAGzC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,WAAW,IAAI,eAAe,GAG/B,MAAM,mBAAmB,CAAA;AAE1B,6GAA6G;AAC7G,SAAS,eAAe,CAAC,GAAsB;IAC7C,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAA;AAClE,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-mode content divergence detection.
|
|
3
|
+
*
|
|
4
|
+
* In dev, the editor and dev server read content from a branch clone under
|
|
5
|
+
* `.canopy-dev/content-branches/<branch>/`, while the static build reads the working tree directly.
|
|
6
|
+
* When a developer edits working-tree `content/**` outside the editor, the dev server silently serves
|
|
7
|
+
* stale content until `canopycms sync push` runs. This watcher surfaces that divergence:
|
|
8
|
+
*
|
|
9
|
+
* - 'warn' (default): log a warning naming the diverged files (on startup and on content changes).
|
|
10
|
+
* - 'off': do nothing.
|
|
11
|
+
*
|
|
12
|
+
* There is intentionally NO auto-push mode: overwriting the branch clone from the working tree would
|
|
13
|
+
* silently clobber uncommitted editor "Save" state with no Canopy-level recovery for the editor.
|
|
14
|
+
* Reconciliation goes through the interactive `canopycms sync push` (conflict-aware) instead.
|
|
15
|
+
*
|
|
16
|
+
* All logic lives here in the core package; framework adapters just call startDevContentWatcher() once
|
|
17
|
+
* at dev startup. See packages/canopycms-next/src/context-wrapper.ts for the Next wiring.
|
|
18
|
+
*/
|
|
19
|
+
import type { CanopyServices } from './services';
|
|
20
|
+
import type { DevContentSyncMode } from './config/types';
|
|
21
|
+
export interface StartDevContentWatcherOptions {
|
|
22
|
+
/** 'warn' (default) | 'off'. */
|
|
23
|
+
mode?: DevContentSyncMode;
|
|
24
|
+
/** Branch clone to compare against. Defaults to the served active branch, re-resolved each check. */
|
|
25
|
+
branch?: string;
|
|
26
|
+
/** Project root. Defaults to config.sourceRoot ?? process.cwd(). */
|
|
27
|
+
sourceRoot?: string;
|
|
28
|
+
/** Warning sink. Defaults to console.warn. */
|
|
29
|
+
warn?: (message: string) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Start watching the working-tree content directory for divergence from the served dev branch clone.
|
|
33
|
+
* Returns a disposer that stops the watcher. A no-op (returns immediately) when mode is 'off', when
|
|
34
|
+
* not in dev mode, or when the working-tree content directory does not exist.
|
|
35
|
+
*/
|
|
36
|
+
export declare function startDevContentWatcher(services: CanopyServices, options?: StartDevContentWatcherOptions): () => void;
|
|
37
|
+
//# sourceMappingURL=dev-content-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-content-watcher.d.ts","sourceRoot":"","sources":["../src/dev-content-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAKxD,MAAM,WAAW,6BAA6B;IAC5C,gCAAgC;IAChC,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,qGAAqG;IACrG,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC;AA6BD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,6BAAkC,GAC1C,MAAM,IAAI,CA4EZ"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-mode content divergence detection.
|
|
3
|
+
*
|
|
4
|
+
* In dev, the editor and dev server read content from a branch clone under
|
|
5
|
+
* `.canopy-dev/content-branches/<branch>/`, while the static build reads the working tree directly.
|
|
6
|
+
* When a developer edits working-tree `content/**` outside the editor, the dev server silently serves
|
|
7
|
+
* stale content until `canopycms sync push` runs. This watcher surfaces that divergence:
|
|
8
|
+
*
|
|
9
|
+
* - 'warn' (default): log a warning naming the diverged files (on startup and on content changes).
|
|
10
|
+
* - 'off': do nothing.
|
|
11
|
+
*
|
|
12
|
+
* There is intentionally NO auto-push mode: overwriting the branch clone from the working tree would
|
|
13
|
+
* silently clobber uncommitted editor "Save" state with no Canopy-level recovery for the editor.
|
|
14
|
+
* Reconciliation goes through the interactive `canopycms sync push` (conflict-aware) instead.
|
|
15
|
+
*
|
|
16
|
+
* All logic lives here in the core package; framework adapters just call startDevContentWatcher() once
|
|
17
|
+
* at dev startup. See packages/canopycms-next/src/context-wrapper.ts for the Next wiring.
|
|
18
|
+
*/
|
|
19
|
+
import fsSync from 'node:fs';
|
|
20
|
+
import path from 'node:path';
|
|
21
|
+
import chokidar from 'chokidar';
|
|
22
|
+
import { operatingStrategy } from './operating-mode/index.js';
|
|
23
|
+
import { getErrorMessage } from './utils/error.js';
|
|
24
|
+
import { diffContentTrees, isContentTreeDiffEmpty } from './sync-core.js';
|
|
25
|
+
const MAX_LISTED_FILES = 10;
|
|
26
|
+
// Dedupe watchers by working-tree content dir so HMR re-evaluating the adapter module (which discards
|
|
27
|
+
// the disposer) doesn't accumulate watchers. This module lives in canopycms/server, so its state
|
|
28
|
+
// survives app-side HMR. Each new start disposes any prior watcher for the same dir.
|
|
29
|
+
const activeWatchers = new Map();
|
|
30
|
+
function formatList(label, files) {
|
|
31
|
+
if (files.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
const shown = files.slice(0, MAX_LISTED_FILES).join(', ');
|
|
34
|
+
const extra = files.length > MAX_LISTED_FILES ? `, …(+${files.length - MAX_LISTED_FILES} more)` : '';
|
|
35
|
+
return ` ${label}: ${shown}${extra}`;
|
|
36
|
+
}
|
|
37
|
+
function formatDivergenceWarning(branch, diff) {
|
|
38
|
+
const lines = [
|
|
39
|
+
`CanopyCMS: working-tree content has diverged from the dev branch clone "${branch}" — the dev ` +
|
|
40
|
+
'server is serving stale content. Run `npx canopycms sync push` to update it ' +
|
|
41
|
+
"(set dev.contentSync: 'off' to silence this).",
|
|
42
|
+
formatList('changed', diff.changed),
|
|
43
|
+
formatList('only in working tree', diff.added),
|
|
44
|
+
formatList('only in branch clone', diff.removed),
|
|
45
|
+
].filter((line) => line !== null);
|
|
46
|
+
return lines.join('\n');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start watching the working-tree content directory for divergence from the served dev branch clone.
|
|
50
|
+
* Returns a disposer that stops the watcher. A no-op (returns immediately) when mode is 'off', when
|
|
51
|
+
* not in dev mode, or when the working-tree content directory does not exist.
|
|
52
|
+
*/
|
|
53
|
+
export function startDevContentWatcher(services, options = {}) {
|
|
54
|
+
const noop = () => { };
|
|
55
|
+
const mode = options.mode ?? 'warn';
|
|
56
|
+
if (mode === 'off' || services.config.mode !== 'dev')
|
|
57
|
+
return noop;
|
|
58
|
+
const sourceRoot = options.sourceRoot ?? services.config.sourceRoot ?? process.cwd();
|
|
59
|
+
const contentRoot = services.config.contentRoot || 'content';
|
|
60
|
+
const strategy = operatingStrategy('dev');
|
|
61
|
+
const workingTreeContentDir = strategy.getContentRoot(sourceRoot);
|
|
62
|
+
const warn = options.warn ?? ((message) => console.warn(message));
|
|
63
|
+
// Nothing to watch if the working tree has no content directory (e.g. unit-test configs).
|
|
64
|
+
if (!fsSync.existsSync(workingTreeContentDir))
|
|
65
|
+
return noop;
|
|
66
|
+
// Resolve the branch fresh each check: the dev server silently follows git-HEAD switches
|
|
67
|
+
// (services.refreshActiveBranch reassigns config.defaultActiveBranch), so the comparison target
|
|
68
|
+
// must track whatever branch is currently being served. An explicit options.branch pins it.
|
|
69
|
+
const resolveBranch = () => options.branch ??
|
|
70
|
+
services.config.defaultActiveBranch ??
|
|
71
|
+
services.config.defaultBaseBranch ??
|
|
72
|
+
'main';
|
|
73
|
+
let running = false;
|
|
74
|
+
let pending = false;
|
|
75
|
+
const check = async () => {
|
|
76
|
+
if (running) {
|
|
77
|
+
pending = true;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
running = true;
|
|
81
|
+
try {
|
|
82
|
+
const branch = resolveBranch();
|
|
83
|
+
const branchContentDir = path.join(strategy.getContentBranchRoot(branch, sourceRoot), contentRoot);
|
|
84
|
+
// No branch clone yet (e.g. before the first editor/dev request created it) → nothing to compare.
|
|
85
|
+
if (!fsSync.existsSync(branchContentDir))
|
|
86
|
+
return;
|
|
87
|
+
const diff = await diffContentTrees(workingTreeContentDir, branchContentDir);
|
|
88
|
+
if (isContentTreeDiffEmpty(diff))
|
|
89
|
+
return;
|
|
90
|
+
warn(formatDivergenceWarning(branch, diff));
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
warn(`CanopyCMS: dev content-sync check failed: ${getErrorMessage(err)}`);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
running = false;
|
|
97
|
+
if (pending) {
|
|
98
|
+
pending = false;
|
|
99
|
+
void check();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
// Dispose any prior watcher for this dir (HMR re-start) before creating a new one.
|
|
104
|
+
activeWatchers.get(workingTreeContentDir)?.();
|
|
105
|
+
const watcher = chokidar.watch(workingTreeContentDir, { ignoreInitial: true });
|
|
106
|
+
watcher.on('add', () => void check());
|
|
107
|
+
watcher.on('change', () => void check());
|
|
108
|
+
watcher.on('unlink', () => void check());
|
|
109
|
+
// Handle watcher errors (e.g. inotify ENOSPC/EMFILE) so an unhandled 'error' event can't crash dev.
|
|
110
|
+
watcher.on('error', (err) => warn(`CanopyCMS: dev content-sync watcher error: ${getErrorMessage(err)}`));
|
|
111
|
+
// Initial divergence check at startup.
|
|
112
|
+
void check();
|
|
113
|
+
const dispose = () => {
|
|
114
|
+
void watcher.close();
|
|
115
|
+
if (activeWatchers.get(workingTreeContentDir) === dispose) {
|
|
116
|
+
activeWatchers.delete(workingTreeContentDir);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
activeWatchers.set(workingTreeContentDir, dispose);
|
|
120
|
+
return dispose;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=dev-content-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-content-watcher.js","sourceRoot":"","sources":["../src/dev-content-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/entry-schema.d.ts
CHANGED
|
@@ -159,5 +159,43 @@ export declare const defineNestedFieldGroup: <const T extends Omit<InferableFiel
|
|
|
159
159
|
}>(group: T) => T & {
|
|
160
160
|
readonly type: "object";
|
|
161
161
|
};
|
|
162
|
+
/**
|
|
163
|
+
* Define a reusable block template once and embed it in multiple entry schemas' `block` fields.
|
|
164
|
+
*
|
|
165
|
+
* A `block` field holds an ordered, repeatable list of heterogeneous section blocks discriminated by
|
|
166
|
+
* a `template` key (the "flexible content" / "page blocks" pattern). Defining each template inline in
|
|
167
|
+
* every schema's `templates` array duplicates the field definitions; this const-inference identity
|
|
168
|
+
* helper (like defineEntrySchema) lets you define a template once and reuse it across schemas while
|
|
169
|
+
* still deriving the correct discriminated-union type via TypeFromEntrySchema.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* const heroBlock = defineBlockTemplate({
|
|
173
|
+
* name: 'hero',
|
|
174
|
+
* label: 'Hero',
|
|
175
|
+
* fields: [
|
|
176
|
+
* { name: 'heading', type: 'string' },
|
|
177
|
+
* { name: 'subheading', type: 'string', required: false },
|
|
178
|
+
* ],
|
|
179
|
+
* })
|
|
180
|
+
* const ctaBlock = defineBlockTemplate({
|
|
181
|
+
* name: 'cta',
|
|
182
|
+
* fields: [{ name: 'label', type: 'string' }, { name: 'href', type: 'string' }],
|
|
183
|
+
* })
|
|
184
|
+
*
|
|
185
|
+
* // Reuse the same templates across multiple page schemas:
|
|
186
|
+
* const pageSchema = defineEntrySchema([
|
|
187
|
+
* { name: 'title', type: 'string' },
|
|
188
|
+
* { name: 'sections', type: 'block', templates: [heroBlock, ctaBlock] },
|
|
189
|
+
* ])
|
|
190
|
+
* // TypeFromEntrySchema<typeof pageSchema>['sections'] narrows to:
|
|
191
|
+
* // Array<{ template: 'hero'; value: { heading: string; subheading?: string } }
|
|
192
|
+
* // | { template: 'cta'; value: { label: string; href: string } }>
|
|
193
|
+
*/
|
|
194
|
+
export declare const defineBlockTemplate: <const T extends {
|
|
195
|
+
name: string;
|
|
196
|
+
label?: string;
|
|
197
|
+
description?: string;
|
|
198
|
+
fields: readonly InferableField[];
|
|
199
|
+
}>(template: T) => T;
|
|
162
200
|
export {};
|
|
163
201
|
//# sourceMappingURL=entry-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-schema.d.ts","sourceRoot":"","sources":["../src/entry-schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entry-schema.d.ts","sourceRoot":"","sources":["../src/entry-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/entry-schema.js
CHANGED
|
@@ -45,4 +45,37 @@ export const defineInlineFieldGroup = (group) => ({ ...group, type: 'group' });
|
|
|
45
45
|
* // TypeFromEntrySchema: { ..., seo: { metaTitle: string, metaDescription: string } }
|
|
46
46
|
*/
|
|
47
47
|
export const defineNestedFieldGroup = (group) => ({ ...group, type: 'object' });
|
|
48
|
+
/**
|
|
49
|
+
* Define a reusable block template once and embed it in multiple entry schemas' `block` fields.
|
|
50
|
+
*
|
|
51
|
+
* A `block` field holds an ordered, repeatable list of heterogeneous section blocks discriminated by
|
|
52
|
+
* a `template` key (the "flexible content" / "page blocks" pattern). Defining each template inline in
|
|
53
|
+
* every schema's `templates` array duplicates the field definitions; this const-inference identity
|
|
54
|
+
* helper (like defineEntrySchema) lets you define a template once and reuse it across schemas while
|
|
55
|
+
* still deriving the correct discriminated-union type via TypeFromEntrySchema.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* const heroBlock = defineBlockTemplate({
|
|
59
|
+
* name: 'hero',
|
|
60
|
+
* label: 'Hero',
|
|
61
|
+
* fields: [
|
|
62
|
+
* { name: 'heading', type: 'string' },
|
|
63
|
+
* { name: 'subheading', type: 'string', required: false },
|
|
64
|
+
* ],
|
|
65
|
+
* })
|
|
66
|
+
* const ctaBlock = defineBlockTemplate({
|
|
67
|
+
* name: 'cta',
|
|
68
|
+
* fields: [{ name: 'label', type: 'string' }, { name: 'href', type: 'string' }],
|
|
69
|
+
* })
|
|
70
|
+
*
|
|
71
|
+
* // Reuse the same templates across multiple page schemas:
|
|
72
|
+
* const pageSchema = defineEntrySchema([
|
|
73
|
+
* { name: 'title', type: 'string' },
|
|
74
|
+
* { name: 'sections', type: 'block', templates: [heroBlock, ctaBlock] },
|
|
75
|
+
* ])
|
|
76
|
+
* // TypeFromEntrySchema<typeof pageSchema>['sections'] narrows to:
|
|
77
|
+
* // Array<{ template: 'hero'; value: { heading: string; subheading?: string } }
|
|
78
|
+
* // | { template: 'cta'; value: { label: string; href: string } }>
|
|
79
|
+
*/
|
|
80
|
+
export const defineBlockTemplate = (template) => template;
|
|
48
81
|
//# sourceMappingURL=entry-schema.js.map
|
package/dist/entry-schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-schema.js","sourceRoot":"","sources":["../src/entry-schema.ts"],"names":[],"mappings":"AA2GA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA4C,MAAS,EAAK,EAAE,CAAC,MAAM,CAAA;AAOpG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAQpC,KAAQ,EACwB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,CAAA;AAE3E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAGpC,KAAQ,EACyB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"entry-schema.js","sourceRoot":"","sources":["../src/entry-schema.ts"],"names":[],"mappings":"AA2GA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA4C,MAAS,EAAK,EAAE,CAAC,MAAM,CAAA;AAOpG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAQpC,KAAQ,EACwB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,CAAA;AAE3E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAGpC,KAAQ,EACyB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC,CAAA;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAQjC,QAAW,EACR,EAAE,CAAC,QAAQ,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-loader.d.ts","sourceRoot":"","sources":["../../src/schema/meta-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"meta-loader.d.ts","sourceRoot":"","sources":["../../src/schema/meta-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,oBAAoB,EAErB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAoDlD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAyFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1E,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/B,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;CAC7E,CAAC,CAiCD;AA2ED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE;IACT,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/B,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;CAC7E,EACD,mBAAmB,EAAE,mBAAmB,GACvC,oBAAoB,CAiCtB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAe9F"}
|
|
@@ -2,6 +2,7 @@ import { promises as fs } from 'fs';
|
|
|
2
2
|
import { join } from 'pathe';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import chokidar from 'chokidar';
|
|
5
|
+
import { getErrorMessage } from '../utils/error.js';
|
|
5
6
|
import { extractSlugFromFilename, extractIdFromFilename } from '../content-id-index.js';
|
|
6
7
|
/**
|
|
7
8
|
* Zod schema for entry type metadata in .collection.json files.
|
|
@@ -272,6 +273,8 @@ export function watchCollectionMetaFiles(contentRoot, onChange) {
|
|
|
272
273
|
watcher.on('add', onChange);
|
|
273
274
|
watcher.on('change', onChange);
|
|
274
275
|
watcher.on('unlink', onChange);
|
|
276
|
+
// Handle watcher errors (e.g. inotify ENOSPC/EMFILE) so an unhandled 'error' event can't crash dev.
|
|
277
|
+
watcher.on('error', (err) => console.warn(`CanopyCMS: .collection.json watcher error: ${getErrorMessage(err)}`));
|
|
275
278
|
// Return cleanup function
|
|
276
279
|
return () => watcher.close();
|
|
277
280
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-loader.js","sourceRoot":"","sources":["../../src/schema/meta-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,QAAQ,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"meta-loader.js","sourceRoot":"","sources":["../../src/schema/meta-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -17,4 +17,8 @@ export type { ListEntriesItem, ListEntriesOptions } from './content-listing';
|
|
|
17
17
|
export { resolveEntryUrl, resolveEntryLinksInText, resolveEntryLinksInData, extractEntryLinkIds, } from './entry-link-resolver';
|
|
18
18
|
export type { EntryLinkUrlResolver } from './entry-link-resolver';
|
|
19
19
|
export { computeEntryUrl } from './utils/entry-url';
|
|
20
|
+
export { collectStaticPaths } from './static';
|
|
21
|
+
export type { StaticPathEntry, CollectStaticPathsOptions } from './static';
|
|
22
|
+
export { startDevContentWatcher } from './dev-content-watcher';
|
|
23
|
+
export type { StartDevContentWatcherOptions } from './dev-content-watcher';
|
|
20
24
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,YAAY,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/server.js
CHANGED
|
@@ -13,4 +13,6 @@ export { buildContentTree } from './content-tree.js';
|
|
|
13
13
|
export { listEntries } from './content-listing.js';
|
|
14
14
|
export { resolveEntryUrl, resolveEntryLinksInText, resolveEntryLinksInData, extractEntryLinkIds, } from './entry-link-resolver.js';
|
|
15
15
|
export { computeEntryUrl } from './utils/entry-url.js';
|
|
16
|
+
export { collectStaticPaths } from './static/index.js';
|
|
17
|
+
export { startDevContentWatcher } from './dev-content-watcher.js';
|
|
16
18
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAMjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAMjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CanopyBuildContext } from '../context';
|
|
2
|
+
/**
|
|
3
|
+
* Framework-agnostic helpers for static-site generation. These produce neutral data structures
|
|
4
|
+
* (no Next.js types) so that any framework adapter — e.g. canopycms-next — can map them to its own
|
|
5
|
+
* static-generation shapes (generateStaticParams, sitemap, metadata).
|
|
6
|
+
*
|
|
7
|
+
* Sitemap (`collectPublishedEntries`) and SEO metadata (`extractSeoFields`) helpers are tracked as
|
|
8
|
+
* follow-up work; see .claude/future-tasks/static-export-sitemap.md and
|
|
9
|
+
* .claude/future-tasks/static-export-seo-metadata.md.
|
|
10
|
+
*/
|
|
11
|
+
/** A routable content entry, reduced to what static path generation needs. */
|
|
12
|
+
export interface StaticPathEntry {
|
|
13
|
+
/**
|
|
14
|
+
* URL-ready path with index entries collapsed, e.g. '/posts/hello-world', or '/' for a root index.
|
|
15
|
+
* Round-trips with readByUrlPath.
|
|
16
|
+
*/
|
|
17
|
+
urlPath: string;
|
|
18
|
+
/**
|
|
19
|
+
* URL segments with index collapsed, e.g. ['posts', 'hello-world']. Empty for a root index ('/').
|
|
20
|
+
* Use these for a catch-all `[...slug]` route.
|
|
21
|
+
*/
|
|
22
|
+
segments: string[];
|
|
23
|
+
/** Entry slug within its collection — use for a single-segment `[slug]` route scoped to a collection. */
|
|
24
|
+
slug: string;
|
|
25
|
+
/** Entry type name (e.g. 'post', 'doc'). */
|
|
26
|
+
entryType: string;
|
|
27
|
+
}
|
|
28
|
+
export interface CollectStaticPathsOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Scope to a collection logical path (e.g. 'content/posts'). Defaults to the whole content root.
|
|
31
|
+
* Skips loading entries outside this scope.
|
|
32
|
+
*/
|
|
33
|
+
rootPath?: string;
|
|
34
|
+
/** Keep only entries matching this predicate (e.g. drop the root index, or filter by entryType). */
|
|
35
|
+
filter?: (entry: StaticPathEntry) => boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Enumerate routable content entries as neutral path descriptors for static generation.
|
|
39
|
+
*
|
|
40
|
+
* Reads filesystem-direct via the build context's `listEntries` (admin, no ACLs — build-time only).
|
|
41
|
+
* The returned entries carry both a collapsed `segments` array (for catch-all routes) and the entry
|
|
42
|
+
* `slug` (for collection-scoped single-segment routes), so a framework adapter can build either shape.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* // Catch-all [...slug] across all content:
|
|
46
|
+
* const paths = await collectStaticPaths(await getCanopyForBuild())
|
|
47
|
+
* // Single [slug] scoped to one collection:
|
|
48
|
+
* const posts = await collectStaticPaths(await getCanopyForBuild(), { rootPath: 'content/posts' })
|
|
49
|
+
*/
|
|
50
|
+
export declare function collectStaticPaths(ctx: Pick<CanopyBuildContext, 'listEntries'>, options?: CollectStaticPathsOptions): Promise<StaticPathEntry[]>;
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|