canopycms 0.0.39 → 0.0.40

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 (43) hide show
  1. package/dist/cli/generate-ai-content.js +7 -2
  2. package/dist/cli/init.js +7 -2
  3. package/dist/cli/sync.d.ts.map +1 -1
  4. package/dist/cli/sync.js +13 -103
  5. package/dist/cli/sync.js.map +1 -1
  6. package/dist/cli/template-files/canopy.ts.template +30 -2
  7. package/dist/config/helpers.d.ts.map +1 -1
  8. package/dist/config/helpers.js +5 -0
  9. package/dist/config/helpers.js.map +1 -1
  10. package/dist/config/schemas/config.d.ts +21 -0
  11. package/dist/config/schemas/config.d.ts.map +1 -1
  12. package/dist/config/schemas/config.js +6 -0
  13. package/dist/config/schemas/config.js.map +1 -1
  14. package/dist/config/types.d.ts +19 -0
  15. package/dist/config/types.d.ts.map +1 -1
  16. package/dist/context.d.ts +19 -10
  17. package/dist/context.d.ts.map +1 -1
  18. package/dist/context.js +5 -0
  19. package/dist/context.js.map +1 -1
  20. package/dist/dev-content-watcher.d.ts +37 -0
  21. package/dist/dev-content-watcher.d.ts.map +1 -0
  22. package/dist/dev-content-watcher.js +122 -0
  23. package/dist/dev-content-watcher.js.map +1 -0
  24. package/dist/entry-schema.d.ts +38 -0
  25. package/dist/entry-schema.d.ts.map +1 -1
  26. package/dist/entry-schema.js +33 -0
  27. package/dist/entry-schema.js.map +1 -1
  28. package/dist/schema/meta-loader.d.ts.map +1 -1
  29. package/dist/schema/meta-loader.js +3 -0
  30. package/dist/schema/meta-loader.js.map +1 -1
  31. package/dist/server.d.ts +4 -0
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +2 -0
  34. package/dist/server.js.map +1 -1
  35. package/dist/static/index.d.ts +51 -0
  36. package/dist/static/index.d.ts.map +1 -0
  37. package/dist/static/index.js +24 -0
  38. package/dist/static/index.js.map +1 -0
  39. package/dist/sync-core.d.ts +57 -0
  40. package/dist/sync-core.d.ts.map +1 -0
  41. package/dist/sync-core.js +166 -0
  42. package/dist/sync-core.js.map +1 -0
  43. package/package.json +5 -1
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,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
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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"}
@@ -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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"}
@@ -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
@@ -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":"AAKA,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,CAW9F"}
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":"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"}
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
@@ -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
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/static/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD;;;;;;;;GAQG;AAEH,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,yGAAyG;IACzG,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oGAAoG;IACpG,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAA;CAC7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,EAC5C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC,CAS5B"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Enumerate routable content entries as neutral path descriptors for static generation.
3
+ *
4
+ * Reads filesystem-direct via the build context's `listEntries` (admin, no ACLs — build-time only).
5
+ * The returned entries carry both a collapsed `segments` array (for catch-all routes) and the entry
6
+ * `slug` (for collection-scoped single-segment routes), so a framework adapter can build either shape.
7
+ *
8
+ * @example
9
+ * // Catch-all [...slug] across all content:
10
+ * const paths = await collectStaticPaths(await getCanopyForBuild())
11
+ * // Single [slug] scoped to one collection:
12
+ * const posts = await collectStaticPaths(await getCanopyForBuild(), { rootPath: 'content/posts' })
13
+ */
14
+ export async function collectStaticPaths(ctx, options = {}) {
15
+ const entries = await ctx.listEntries({ rootPath: options.rootPath });
16
+ const mapped = entries.map((entry) => ({
17
+ urlPath: entry.urlPath,
18
+ segments: entry.urlPath === '/' ? [] : entry.urlPath.replace(/^\//, '').split('/'),
19
+ slug: entry.slug,
20
+ entryType: entry.entryType,
21
+ }));
22
+ return options.filter ? mapped.filter(options.filter) : mapped;
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/static/index.ts"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAA4C,EAC5C,UAAqC,EAAE;IAEvC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrE,MAAM,MAAM,GAAsB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAClF,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC,CAAA;IACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAChE,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Prompt-free core of the content sync between the working tree and CMS branch workspaces in
3
+ * `.canopy-dev/content-branches/`. The interactive CLI (cli/sync.ts) wraps these with prompts; the
4
+ * dev content watcher (dev-content-watcher.ts) reuses the diff helpers for divergence detection.
5
+ */
6
+ /** Git tag marking the last known sync point, used as the merge base for `sync both` 3-way merges. */
7
+ export declare const SYNC_BASE_TAG = "canopycms-sync-base";
8
+ /** Validate that a resolved path stays within the expected parent directory. */
9
+ export declare function assertWithinDir(resolved: string, parent: string, label: string): void;
10
+ /**
11
+ * Safely replace a directory by renaming the old one to a backup, renaming
12
+ * the new one into place, then deleting the backup. If interrupted between
13
+ * steps, at least one copy always exists on disk.
14
+ */
15
+ export declare function safeReplaceDir(oldDir: string, newDir: string): Promise<void>;
16
+ /** Recursively list all file paths relative to `dir`. Skips .git and symlinks. */
17
+ export declare function listFilesRecursive(dir: string, prefix?: string): Promise<string[]>;
18
+ /** Recursively copy a directory, creating the destination if needed. Skips .git directories and symlinks. */
19
+ export declare function copyDir(src: string, dest: string): Promise<void>;
20
+ /** Difference between two content directories, by relative file path. */
21
+ export interface ContentTreeDiff {
22
+ /** Files present in the working tree but not the branch clone. */
23
+ added: string[];
24
+ /** Files present in the branch clone but not the working tree. */
25
+ removed: string[];
26
+ /** Files present in both but with differing content. */
27
+ changed: string[];
28
+ }
29
+ /** True when the diff contains no added/removed/changed files. */
30
+ export declare function isContentTreeDiffEmpty(diff: ContentTreeDiff): boolean;
31
+ /**
32
+ * Compare two content directories by file presence and exact content (byte comparison — robust to
33
+ * mtime differences, which `fs.copyFile` does not preserve). Missing directories list as empty.
34
+ */
35
+ export declare function diffContentTrees(workingTreeDir: string, branchDir: string): Promise<ContentTreeDiff>;
36
+ export interface PushContentToWorkspaceOptions {
37
+ /** Working-tree content directory (source). */
38
+ srcContentDir: string;
39
+ /** Branch workspace root (a git repo). */
40
+ branchPath: string;
41
+ /** Content directory name within the workspace (e.g. 'content'). */
42
+ contentRoot: string;
43
+ /** Commit message for the content update. */
44
+ commitMessage?: string;
45
+ /** When set, (re)tag the resulting commit as the sync base (used by `sync both` 3-way merges). */
46
+ baseTag?: string;
47
+ }
48
+ /**
49
+ * Copy working-tree content into a branch workspace and commit it. Prompt-free — the interactive CLI
50
+ * (`canopycms sync push`) calls this for the actual copy + commit + tag step.
51
+ *
52
+ * Returns the number of changed files committed (0 when content was already up to date).
53
+ */
54
+ export declare function pushContentToWorkspace(options: PushContentToWorkspaceOptions): Promise<{
55
+ fileCount: number;
56
+ }>;
57
+ //# sourceMappingURL=sync-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-core.d.ts","sourceRoot":"","sources":["../src/sync-core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,sGAAsG;AACtG,eAAO,MAAM,aAAa,wBAAwB,CAAA;AAElD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASrF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBlF;AAED,kFAAkF;AAClF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBpF;AAED,6GAA6G;AAC7G,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CActE;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,wDAAwD;IACxD,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAErE;AAUD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAwB1B;AAED,MAAM,WAAW,6BAA6B;IAC5C,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAiChC"}