canopycms 0.0.11 → 0.0.13
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/README.md +24 -27
- package/dist/ai/handler.d.ts +3 -3
- package/dist/ai/handler.d.ts.map +1 -1
- package/dist/ai/handler.js +6 -9
- package/dist/ai/handler.js.map +1 -1
- package/dist/ai/resolve-branch.d.ts +1 -2
- package/dist/ai/resolve-branch.d.ts.map +1 -1
- package/dist/ai/resolve-branch.js +8 -9
- package/dist/ai/resolve-branch.js.map +1 -1
- package/dist/api/branch.js +2 -2
- package/dist/api/branch.js.map +1 -1
- package/dist/api/comments.d.ts +2 -2
- package/dist/api/content.d.ts +4 -4
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +2 -2
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.d.ts +2 -2
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +2 -2
- package/dist/api/entries.js.map +1 -1
- package/dist/api/github-sync.js +0 -2
- package/dist/api/github-sync.js.map +1 -1
- package/dist/api/settings-helpers.d.ts +3 -5
- package/dist/api/settings-helpers.d.ts.map +1 -1
- package/dist/api/settings-helpers.js +6 -19
- package/dist/api/settings-helpers.js.map +1 -1
- package/dist/api/validators.d.ts +3 -13
- package/dist/api/validators.d.ts.map +1 -1
- package/dist/api/validators.js +3 -26
- package/dist/api/validators.js.map +1 -1
- package/dist/auth/caching-auth-plugin.d.ts +7 -1
- package/dist/auth/caching-auth-plugin.d.ts.map +1 -1
- package/dist/auth/caching-auth-plugin.js +31 -3
- package/dist/auth/caching-auth-plugin.js.map +1 -1
- package/dist/auth/plugin.d.ts +1 -1
- package/dist/authorization/types.d.ts +1 -1
- package/dist/branch-registry.js +1 -1
- package/dist/branch-registry.js.map +1 -1
- package/dist/branch-schema-cache.d.ts +8 -13
- package/dist/branch-schema-cache.d.ts.map +1 -1
- package/dist/branch-schema-cache.js +55 -44
- package/dist/branch-schema-cache.js.map +1 -1
- package/dist/cli/cli.d.ts +20 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +196 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/generate-ai-content.js +1508 -733
- package/dist/cli/init.d.ts +2 -3
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +258 -2861
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/sync.d.ts +33 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +510 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/config/schemas/config.d.ts +5 -5
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +1 -1
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/config-test.d.ts.map +1 -1
- package/dist/config-test.js +0 -1
- package/dist/config-test.js.map +1 -1
- package/dist/content-id-index.d.ts +3 -3
- package/dist/content-id-index.d.ts.map +1 -1
- package/dist/content-id-index.js +7 -7
- package/dist/content-id-index.js.map +1 -1
- package/dist/content-listing.d.ts +3 -3
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +1 -1
- package/dist/content-listing.js.map +1 -1
- package/dist/content-reader.d.ts +2 -2
- package/dist/content-reader.d.ts.map +1 -1
- package/dist/content-reader.js +1 -1
- package/dist/content-reader.js.map +1 -1
- package/dist/content-store.d.ts +8 -8
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +6 -9
- package/dist/content-store.js.map +1 -1
- package/dist/content-tree.d.ts +2 -2
- package/dist/content-tree.d.ts.map +1 -1
- package/dist/context.js +1 -1
- package/dist/context.js.map +1 -1
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +1 -3
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/git-manager.d.ts +2 -3
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +12 -4
- package/dist/git-manager.js.map +1 -1
- package/dist/operating-mode/client-safe-strategy.d.ts +1 -12
- package/dist/operating-mode/client-safe-strategy.d.ts.map +1 -1
- package/dist/operating-mode/client-safe-strategy.js +5 -42
- package/dist/operating-mode/client-safe-strategy.js.map +1 -1
- package/dist/operating-mode/client-unsafe-strategy.d.ts.map +1 -1
- package/dist/operating-mode/client-unsafe-strategy.js +10 -68
- package/dist/operating-mode/client-unsafe-strategy.js.map +1 -1
- package/dist/operating-mode/index.d.ts +3 -3
- package/dist/operating-mode/index.d.ts.map +1 -1
- package/dist/operating-mode/index.js +2 -2
- package/dist/operating-mode/types.d.ts +2 -6
- package/dist/operating-mode/types.d.ts.map +1 -1
- package/dist/paths/index.d.ts +1 -1
- package/dist/paths/index.d.ts.map +1 -1
- package/dist/paths/index.js.map +1 -1
- package/dist/paths/test-utils.d.ts +4 -6
- package/dist/paths/test-utils.d.ts.map +1 -1
- package/dist/paths/test-utils.js +3 -5
- package/dist/paths/test-utils.js.map +1 -1
- package/dist/paths/types.d.ts +4 -11
- package/dist/paths/types.d.ts.map +1 -1
- package/dist/paths/validation.d.ts +5 -6
- package/dist/paths/validation.d.ts.map +1 -1
- package/dist/paths/validation.js +9 -10
- package/dist/paths/validation.js.map +1 -1
- package/dist/reference-resolver.d.ts +2 -2
- package/dist/reference-resolver.d.ts.map +1 -1
- package/dist/reference-resolver.js.map +1 -1
- package/dist/services.d.ts +6 -0
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +52 -40
- package/dist/services.js.map +1 -1
- package/dist/settings-branch-utils.d.ts +2 -2
- package/dist/settings-branch-utils.js +3 -3
- package/dist/settings-branch-utils.js.map +1 -1
- package/dist/settings-workspace.d.ts +1 -2
- package/dist/settings-workspace.d.ts.map +1 -1
- package/dist/settings-workspace.js +1 -2
- package/dist/settings-workspace.js.map +1 -1
- package/dist/utils/fs.d.ts +3 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +15 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/git.d.ts +7 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +17 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/validation/deletion-checker.d.ts +2 -2
- package/dist/validation/deletion-checker.d.ts.map +1 -1
- package/dist/worker/task-queue-config.d.ts +2 -4
- package/dist/worker/task-queue-config.d.ts.map +1 -1
- package/dist/worker/task-queue-config.js +3 -7
- package/dist/worker/task-queue-config.js.map +1 -1
- package/package.json +4 -2
package/dist/api/github-sync.js
CHANGED
|
@@ -102,8 +102,6 @@ export async function syncConvertToDraft(ctx, context) {
|
|
|
102
102
|
*/
|
|
103
103
|
async function enqueueGitHubTask(ctx, context, task) {
|
|
104
104
|
const taskDir = getTaskQueueDir(ctx.services.config);
|
|
105
|
-
if (!taskDir)
|
|
106
|
-
return {};
|
|
107
105
|
try {
|
|
108
106
|
await enqueueTask(taskDir, task);
|
|
109
107
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,7 @@ import type { ApiContext } from './types';
|
|
|
2
2
|
import type { OperatingMode } from '../operating-mode';
|
|
3
3
|
/**
|
|
4
4
|
* Get the appropriate root path for settings (permissions/groups).
|
|
5
|
-
*
|
|
6
|
-
* In prod/prod-sim modes, returns the settings root (settings/).
|
|
5
|
+
* Returns the settings root managed by the settings workspace.
|
|
7
6
|
*/
|
|
8
7
|
export declare function getSettingsBranchContext(ctx: ApiContext): Promise<{
|
|
9
8
|
context: {
|
|
@@ -17,9 +16,8 @@ export declare function getSettingsBranchContext(ctx: ApiContext): Promise<{
|
|
|
17
16
|
}>;
|
|
18
17
|
/**
|
|
19
18
|
* Commit and push settings changes based on the mode.
|
|
20
|
-
*
|
|
21
|
-
* In
|
|
22
|
-
* In prod-sim mode, uses regular commitFiles.
|
|
19
|
+
* Both prod and dev use commitToSettingsBranch.
|
|
20
|
+
* In dev mode, commits to the settings branch but does not create a PR.
|
|
23
21
|
*/
|
|
24
22
|
export declare function commitSettings(ctx: ApiContext, options: {
|
|
25
23
|
context: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-helpers.d.ts","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD
|
|
1
|
+
{"version":3,"file":"settings-helpers.d.ts","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,UAAU,GACd,OAAO,CACN;IAAE,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CACpC,CAiBA;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,aAAa,CAAA;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { operatingStrategy } from '../operating-mode';
|
|
2
2
|
/**
|
|
3
3
|
* Get the appropriate root path for settings (permissions/groups).
|
|
4
|
-
*
|
|
5
|
-
* In prod/prod-sim modes, returns the settings root (settings/).
|
|
4
|
+
* Returns the settings root managed by the settings workspace.
|
|
6
5
|
*/
|
|
7
6
|
export async function getSettingsBranchContext(ctx) {
|
|
8
7
|
const mode = ctx.services.config.mode;
|
|
@@ -12,30 +11,18 @@ export async function getSettingsBranchContext(ctx) {
|
|
|
12
11
|
settingsBranch: ctx.services.config.settingsBranch,
|
|
13
12
|
defaultBaseBranch: ctx.services.config.defaultBaseBranch,
|
|
14
13
|
});
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
// Get settings root and ensure workspace exists
|
|
18
|
-
const settingsRoot = await ctx.services.getSettingsBranchRoot();
|
|
19
|
-
return {
|
|
20
|
-
context: { branchRoot: settingsRoot },
|
|
21
|
-
mode,
|
|
22
|
-
branchName,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
// For dev mode, settings are stored in .canopy-dev/settings/
|
|
26
|
-
// We need to pass the workspace root, not a branch root
|
|
27
|
-
const workspaceRoot = ctx.services.config.sourceRoot ?? process.cwd();
|
|
14
|
+
// Both prod and dev use a separate settings branch
|
|
15
|
+
const settingsRoot = await ctx.services.getSettingsBranchRoot();
|
|
28
16
|
return {
|
|
29
|
-
context: { branchRoot:
|
|
17
|
+
context: { branchRoot: settingsRoot },
|
|
30
18
|
mode,
|
|
31
19
|
branchName,
|
|
32
20
|
};
|
|
33
21
|
}
|
|
34
22
|
/**
|
|
35
23
|
* Commit and push settings changes based on the mode.
|
|
36
|
-
*
|
|
37
|
-
* In
|
|
38
|
-
* In prod-sim mode, uses regular commitFiles.
|
|
24
|
+
* Both prod and dev use commitToSettingsBranch.
|
|
25
|
+
* In dev mode, commits to the settings branch but does not create a PR.
|
|
39
26
|
*/
|
|
40
27
|
export async function commitSettings(ctx, options) {
|
|
41
28
|
const strategy = operatingStrategy(options.mode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-helpers.js","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD
|
|
1
|
+
{"version":3,"file":"settings-helpers.js","sourceRoot":"","sources":["../../src/api/settings-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAe;IAKf,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAA;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAExC,0DAA0D;IAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAChD,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc;QAClD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB;KACzD,CAAC,CAAA;IAEF,mDAAmD;IACnD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA;IAC/D,OAAO;QACL,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;QACrC,IAAI;QACJ,UAAU;KACX,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAe,EACf,OAMC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD,oDAAoD;IACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC7B,OAAM;IACR,CAAC;IAED,yEAAyE;IACzE,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACvD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,QAAQ;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC;gBACxC,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB;aAC/D,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/api/validators.d.ts
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
import { z } from 'zod';
|
|
23
|
-
import { type BranchName, type LogicalPath, type ContentId, type
|
|
23
|
+
import { type BranchName, type LogicalPath, type ContentId, type Slug } from '../paths';
|
|
24
24
|
import { type PermissionPath } from '../authorization';
|
|
25
25
|
/**
|
|
26
26
|
* Zod schema for BranchName - validates git branch naming rules and brands.
|
|
@@ -52,7 +52,7 @@ export declare const logicalPathSchema: z.ZodType<LogicalPath>;
|
|
|
52
52
|
*/
|
|
53
53
|
export declare const contentIdSchema: z.ZodType<ContentId>;
|
|
54
54
|
/**
|
|
55
|
-
* Zod schema for
|
|
55
|
+
* Zod schema for Slug - validates entry and collection slugs.
|
|
56
56
|
*
|
|
57
57
|
* Validates:
|
|
58
58
|
* - No path separators (/ or \)
|
|
@@ -60,17 +60,7 @@ export declare const contentIdSchema: z.ZodType<ContentId>;
|
|
|
60
60
|
* - Only lowercase letters, numbers, and hyphens
|
|
61
61
|
* - Max 64 characters
|
|
62
62
|
*/
|
|
63
|
-
export declare const
|
|
64
|
-
/**
|
|
65
|
-
* Zod schema for CollectionSlug - validates collection slugs.
|
|
66
|
-
*
|
|
67
|
-
* Validates:
|
|
68
|
-
* - No path separators (/ or \)
|
|
69
|
-
* - Starts with lowercase letter or number
|
|
70
|
-
* - Only lowercase letters, numbers, and hyphens
|
|
71
|
-
* - Max 64 characters
|
|
72
|
-
*/
|
|
73
|
-
export declare const collectionSlugSchema: z.ZodType<CollectionSlug>;
|
|
63
|
+
export declare const slugSchema: z.ZodType<Slug>;
|
|
74
64
|
/**
|
|
75
65
|
* Zod schema for PermissionPath - validates permission rule paths.
|
|
76
66
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,UAAU,CAAA;AACjB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE3E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAaV,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAaX,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAUX,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAaJ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAElC;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAad,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA"}
|
package/dist/api/validators.js
CHANGED
|
@@ -88,7 +88,7 @@ export const contentIdSchema = z.string().transform((val, ctx) => {
|
|
|
88
88
|
return result.id;
|
|
89
89
|
});
|
|
90
90
|
/**
|
|
91
|
-
* Zod schema for
|
|
91
|
+
* Zod schema for Slug - validates entry and collection slugs.
|
|
92
92
|
*
|
|
93
93
|
* Validates:
|
|
94
94
|
* - No path separators (/ or \)
|
|
@@ -96,34 +96,11 @@ export const contentIdSchema = z.string().transform((val, ctx) => {
|
|
|
96
96
|
* - Only lowercase letters, numbers, and hyphens
|
|
97
97
|
* - Max 64 characters
|
|
98
98
|
*/
|
|
99
|
-
export const
|
|
99
|
+
export const slugSchema = z
|
|
100
100
|
.string()
|
|
101
101
|
.min(1)
|
|
102
102
|
.transform((val, ctx) => {
|
|
103
|
-
const result = parseSlug(val
|
|
104
|
-
if (!result.ok) {
|
|
105
|
-
ctx.addIssue({
|
|
106
|
-
code: z.ZodIssueCode.custom,
|
|
107
|
-
message: result.error,
|
|
108
|
-
});
|
|
109
|
-
return z.NEVER;
|
|
110
|
-
}
|
|
111
|
-
return result.slug;
|
|
112
|
-
});
|
|
113
|
-
/**
|
|
114
|
-
* Zod schema for CollectionSlug - validates collection slugs.
|
|
115
|
-
*
|
|
116
|
-
* Validates:
|
|
117
|
-
* - No path separators (/ or \)
|
|
118
|
-
* - Starts with lowercase letter or number
|
|
119
|
-
* - Only lowercase letters, numbers, and hyphens
|
|
120
|
-
* - Max 64 characters
|
|
121
|
-
*/
|
|
122
|
-
export const collectionSlugSchema = z
|
|
123
|
-
.string()
|
|
124
|
-
.min(1)
|
|
125
|
-
.transform((val, ctx) => {
|
|
126
|
-
const result = parseSlug(val, 'collection');
|
|
103
|
+
const result = parseSlug(val);
|
|
127
104
|
if (!result.ok) {
|
|
128
105
|
ctx.addIssue({
|
|
129
106
|
code: z.ZodIssueCode.custom,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,SAAS,
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,11 +28,17 @@ export type TokenVerifier = (context: unknown) => Promise<{
|
|
|
28
28
|
* (e.g., Lambda with no internet). JWT verification is done locally,
|
|
29
29
|
* and user/group metadata comes from a cache populated externally
|
|
30
30
|
* (e.g., by an EC2 worker).
|
|
31
|
+
*
|
|
32
|
+
* In dev mode, an optional `lazyRefresher` can be provided to auto-populate
|
|
33
|
+
* the cache on first request, eliminating the need to run `worker run-once` manually.
|
|
31
34
|
*/
|
|
32
35
|
export declare class CachingAuthPlugin implements AuthPlugin {
|
|
33
36
|
private readonly verifyToken;
|
|
34
37
|
private readonly cache;
|
|
35
|
-
|
|
38
|
+
private readonly lazyRefresher?;
|
|
39
|
+
private refreshPromise;
|
|
40
|
+
constructor(verifyToken: TokenVerifier, cache: AuthCacheProvider, lazyRefresher?: (() => Promise<unknown>) | undefined);
|
|
41
|
+
private ensureCachePopulated;
|
|
36
42
|
authenticate(context: unknown): Promise<AuthenticationResult>;
|
|
37
43
|
searchUsers(query: string, limit?: number): Promise<UserSearchResult[]>;
|
|
38
44
|
getUserMetadata(userId: CanopyUserId): Promise<UserSearchResult | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caching-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/D,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1F
|
|
1
|
+
{"version":3,"file":"caching-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/D,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1F;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAIhD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IALjC,OAAO,CAAC,cAAc,CAA6B;gBAGhC,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,iBAAiB,EACxB,aAAa,CAAC,GAAE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAA;YAG3C,oBAAoB;IAY5B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsC7D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAenE,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQvE,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAQvE,UAAU,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAQvD"}
|
|
@@ -7,17 +7,35 @@ const log = createDebugLogger({ prefix: 'CachingAuthPlugin' });
|
|
|
7
7
|
* (e.g., Lambda with no internet). JWT verification is done locally,
|
|
8
8
|
* and user/group metadata comes from a cache populated externally
|
|
9
9
|
* (e.g., by an EC2 worker).
|
|
10
|
+
*
|
|
11
|
+
* In dev mode, an optional `lazyRefresher` can be provided to auto-populate
|
|
12
|
+
* the cache on first request, eliminating the need to run `worker run-once` manually.
|
|
10
13
|
*/
|
|
11
14
|
export class CachingAuthPlugin {
|
|
12
|
-
constructor(verifyToken, cache) {
|
|
15
|
+
constructor(verifyToken, cache, lazyRefresher) {
|
|
13
16
|
this.verifyToken = verifyToken;
|
|
14
17
|
this.cache = cache;
|
|
18
|
+
this.lazyRefresher = lazyRefresher;
|
|
19
|
+
this.refreshPromise = null;
|
|
20
|
+
}
|
|
21
|
+
async ensureCachePopulated() {
|
|
22
|
+
if (!this.lazyRefresher)
|
|
23
|
+
return;
|
|
24
|
+
// Use a shared promise so concurrent callers coalesce into a single refresh
|
|
25
|
+
this.refreshPromise ??= this.lazyRefresher()
|
|
26
|
+
.then(() => log.debug('auth', 'Lazy cache refresh completed'))
|
|
27
|
+
.catch((err) => {
|
|
28
|
+
log.debug('auth', 'Lazy cache refresh failed', { error: String(err) });
|
|
29
|
+
this.refreshPromise = null; // allow retry on next call
|
|
30
|
+
});
|
|
31
|
+
await this.refreshPromise;
|
|
15
32
|
}
|
|
16
33
|
async authenticate(context) {
|
|
17
34
|
const identity = await this.verifyToken(context);
|
|
18
35
|
if (!identity) {
|
|
19
36
|
return { success: false, error: 'No valid authentication token' };
|
|
20
37
|
}
|
|
38
|
+
await this.ensureCachePopulated();
|
|
21
39
|
try {
|
|
22
40
|
const user = await this.cache.getUser(identity.userId);
|
|
23
41
|
const externalGroups = await this.cache.getUserExternalGroups(identity.userId);
|
|
@@ -60,10 +78,20 @@ export class CachingAuthPlugin {
|
|
|
60
78
|
}
|
|
61
79
|
}
|
|
62
80
|
async getUserMetadata(userId) {
|
|
63
|
-
|
|
81
|
+
try {
|
|
82
|
+
return await this.cache.getUser(userId);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
64
87
|
}
|
|
65
88
|
async getGroupMetadata(groupId) {
|
|
66
|
-
|
|
89
|
+
try {
|
|
90
|
+
return await this.cache.getGroup(groupId);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
67
95
|
}
|
|
68
96
|
async listGroups(limit = 50) {
|
|
69
97
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caching-auth-plugin.js","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAA;AAsB9D
|
|
1
|
+
{"version":3,"file":"caching-auth-plugin.js","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/plugin.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ export interface AuthPlugin {
|
|
|
43
43
|
/**
|
|
44
44
|
* Optional: lightweight token-only verification (no user metadata lookup, no network).
|
|
45
45
|
* When present, createNextCanopyContext automatically wraps this plugin with
|
|
46
|
-
* CachingAuthPlugin in prod/
|
|
46
|
+
* CachingAuthPlugin in prod/dev modes. The cache is populated by the worker daemon.
|
|
47
47
|
*/
|
|
48
48
|
verifyTokenOnly?(context: unknown): Promise<{
|
|
49
49
|
userId: CanopyUserId;
|
|
@@ -47,7 +47,7 @@ export interface ContentAccessDeps {
|
|
|
47
47
|
mode: import('../operating-mode').OperatingMode;
|
|
48
48
|
/**
|
|
49
49
|
* Get the settings branch root path for loading centralized permissions.
|
|
50
|
-
*
|
|
50
|
+
* Used in modes with a separate settings branch.
|
|
51
51
|
* Must throw if settings branch cannot be loaded.
|
|
52
52
|
*/
|
|
53
53
|
getSettingsBranchRoot?: () => Promise<string>;
|
package/dist/branch-registry.js
CHANGED
|
@@ -101,7 +101,7 @@ export class BranchRegistry {
|
|
|
101
101
|
try {
|
|
102
102
|
const entries = await fs.readdir(this.root, { withFileTypes: true });
|
|
103
103
|
for (const entry of entries) {
|
|
104
|
-
// Skip non-directories and hidden directories (like .canopy-meta
|
|
104
|
+
// Skip non-directories and hidden directories (like .canopy-meta)
|
|
105
105
|
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
106
106
|
continue;
|
|
107
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-registry.js","sourceRoot":"","sources":["../src/branch-registry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"branch-registry.js","sourceRoot":"","sources":["../src/branch-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RootCollectionConfig } from './config';
|
|
2
2
|
import type { FlatSchemaItem } from './config/types';
|
|
3
|
-
import type { EntrySchemaRegistry } from './schema/types';
|
|
4
3
|
import type { OperatingMode } from './operating-mode';
|
|
4
|
+
import type { EntrySchemaRegistry } from './schema/types';
|
|
5
5
|
/**
|
|
6
6
|
* Schema cache structure stored in {branchRoot}/.canopy-meta/schema-cache.json
|
|
7
7
|
*/
|
|
@@ -15,8 +15,8 @@ export interface BranchSchemaCacheEntry {
|
|
|
15
15
|
* Manages per-branch schema caching with lazy loading and automatic invalidation.
|
|
16
16
|
*
|
|
17
17
|
* Caching Strategy:
|
|
18
|
-
* -
|
|
19
|
-
*
|
|
18
|
+
* - File-based cache at {branchRoot}/.canopy-meta/schema-cache.json (no in-memory layer
|
|
19
|
+
* — intentional: matches prod behavior and keeps cache coherent across Lambda invocations)
|
|
20
20
|
* - Invalidation: Writers create .stale marker, causing cache regeneration on next access
|
|
21
21
|
*
|
|
22
22
|
* Multi-User Support:
|
|
@@ -25,13 +25,14 @@ export interface BranchSchemaCacheEntry {
|
|
|
25
25
|
* - Atomic file operations prevent corruption during concurrent access
|
|
26
26
|
*/
|
|
27
27
|
export declare class BranchSchemaCache {
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
28
|
+
/** Tracks when we last checked mtimes per contentRoot, to debounce rapid requests */
|
|
29
|
+
private lastMtimeCheck;
|
|
30
|
+
private readonly devMode;
|
|
31
|
+
constructor(mode?: OperatingMode);
|
|
31
32
|
/**
|
|
32
33
|
* Get schema for a branch (loads from cache or resolves fresh).
|
|
33
34
|
*
|
|
34
|
-
* @param branchRoot - Root directory of the branch (e.g., .canopy-
|
|
35
|
+
* @param branchRoot - Root directory of the branch (e.g., .canopy-dev/content-branches/main)
|
|
35
36
|
* @param entrySchemaRegistry - Map of schema names to field definitions
|
|
36
37
|
* @param contentRootName - Name of content directory (e.g., "content") from config
|
|
37
38
|
* @returns Resolved schema tree and flattened schema
|
|
@@ -50,11 +51,5 @@ export declare class BranchSchemaCache {
|
|
|
50
51
|
* @param branchRoot - Root directory of the branch
|
|
51
52
|
*/
|
|
52
53
|
invalidate(branchRoot: string): Promise<void>;
|
|
53
|
-
/**
|
|
54
|
-
* Clear all caches (for testing).
|
|
55
|
-
* In dev mode, clears in-memory cache.
|
|
56
|
-
* In prod/prod-sim modes, this would need to traverse all branch directories.
|
|
57
|
-
*/
|
|
58
|
-
clearAll(): Promise<void>;
|
|
59
54
|
}
|
|
60
55
|
//# sourceMappingURL=branch-schema-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-schema-cache.d.ts","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"branch-schema-cache.d.ts","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAUzD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB;AA8BD;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,IAAI,GAAE,aAAsB;IAIxC;;;;;;;OAOG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,GAAE,MAAkB,GAClC,OAAO,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,UAAU,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IAI1E;;OAEG;YACW,sBAAsB;IAkFpC;;;;OAIG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOpD"}
|
|
@@ -4,12 +4,45 @@ import { resolveSchema, isValidSchema } from './schema/resolver';
|
|
|
4
4
|
import { flattenSchema } from './config/flatten';
|
|
5
5
|
/** Bump when BranchSchemaCacheEntry shape changes to auto-invalidate stale caches */
|
|
6
6
|
const SCHEMA_CACHE_VERSION = 2;
|
|
7
|
+
/** Minimum interval between mtime staleness checks (ms) */
|
|
8
|
+
const MTIME_CHECK_DEBOUNCE_MS = 1000;
|
|
9
|
+
/**
|
|
10
|
+
* In dev mode, check whether any .collection.json file under dir has been
|
|
11
|
+
* modified more recently than cachedAt. Returns true if stale.
|
|
12
|
+
*
|
|
13
|
+
* Uses a single recursive readdir to find all .collection.json files,
|
|
14
|
+
* then stats only those files.
|
|
15
|
+
*/
|
|
16
|
+
async function isStaleByMtime(dir, cachedAt) {
|
|
17
|
+
let entries;
|
|
18
|
+
try {
|
|
19
|
+
entries = await fs.readdir(dir, { recursive: true, encoding: 'utf-8' });
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
for (const entry of entries) {
|
|
25
|
+
if (!entry.endsWith('.collection.json'))
|
|
26
|
+
continue;
|
|
27
|
+
const full = path.join(dir, entry);
|
|
28
|
+
try {
|
|
29
|
+
const stat = await fs.stat(full);
|
|
30
|
+
if (stat.mtimeMs > cachedAt.getTime())
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// File may have been deleted between readdir and stat
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
7
40
|
/**
|
|
8
41
|
* Manages per-branch schema caching with lazy loading and automatic invalidation.
|
|
9
42
|
*
|
|
10
43
|
* Caching Strategy:
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
44
|
+
* - File-based cache at {branchRoot}/.canopy-meta/schema-cache.json (no in-memory layer
|
|
45
|
+
* — intentional: matches prod behavior and keeps cache coherent across Lambda invocations)
|
|
13
46
|
* - Invalidation: Writers create .stale marker, causing cache regeneration on next access
|
|
14
47
|
*
|
|
15
48
|
* Multi-User Support:
|
|
@@ -18,38 +51,20 @@ const SCHEMA_CACHE_VERSION = 2;
|
|
|
18
51
|
* - Atomic file operations prevent corruption during concurrent access
|
|
19
52
|
*/
|
|
20
53
|
export class BranchSchemaCache {
|
|
21
|
-
constructor(mode) {
|
|
22
|
-
|
|
54
|
+
constructor(mode = 'prod') {
|
|
55
|
+
/** Tracks when we last checked mtimes per contentRoot, to debounce rapid requests */
|
|
56
|
+
this.lastMtimeCheck = new Map();
|
|
57
|
+
this.devMode = mode === 'dev';
|
|
23
58
|
}
|
|
24
59
|
/**
|
|
25
60
|
* Get schema for a branch (loads from cache or resolves fresh).
|
|
26
61
|
*
|
|
27
|
-
* @param branchRoot - Root directory of the branch (e.g., .canopy-
|
|
62
|
+
* @param branchRoot - Root directory of the branch (e.g., .canopy-dev/content-branches/main)
|
|
28
63
|
* @param entrySchemaRegistry - Map of schema names to field definitions
|
|
29
64
|
* @param contentRootName - Name of content directory (e.g., "content") from config
|
|
30
65
|
* @returns Resolved schema tree and flattened schema
|
|
31
66
|
*/
|
|
32
67
|
async getSchema(branchRoot, entrySchemaRegistry, contentRootName = 'content') {
|
|
33
|
-
// Dev mode: use in-memory singleton
|
|
34
|
-
if (this.mode === 'dev') {
|
|
35
|
-
if (!this.devModeCache) {
|
|
36
|
-
const contentRoot = path.join(branchRoot, contentRootName);
|
|
37
|
-
const result = await resolveSchema(contentRoot, entrySchemaRegistry);
|
|
38
|
-
// Validate schema has content
|
|
39
|
-
if (!isValidSchema(result.schema)) {
|
|
40
|
-
throw new Error(`No schema found in ${contentRoot}. Create .collection.json files ` +
|
|
41
|
-
'with references to field schemas defined in your entry schema registry.');
|
|
42
|
-
}
|
|
43
|
-
// Use configured contentRoot name as base path for logical paths
|
|
44
|
-
const flatSchema = flattenSchema(result.schema, contentRootName);
|
|
45
|
-
this.devModeCache = {
|
|
46
|
-
schema: result.schema,
|
|
47
|
-
flatSchema,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
return this.devModeCache;
|
|
51
|
-
}
|
|
52
|
-
// Prod/prod-sim: use file-based cache with stale marker invalidation
|
|
53
68
|
return this.loadFromCacheOrResolve(branchRoot, entrySchemaRegistry, contentRootName);
|
|
54
69
|
}
|
|
55
70
|
/**
|
|
@@ -77,7 +92,21 @@ export class BranchSchemaCache {
|
|
|
77
92
|
cacheData = null;
|
|
78
93
|
}
|
|
79
94
|
if (cacheData && cacheData.version === SCHEMA_CACHE_VERSION) {
|
|
80
|
-
|
|
95
|
+
// In dev mode, also check file mtimes so direct schema edits (outside the CMS) are picked up.
|
|
96
|
+
// Debounce: skip the walk if we checked this contentRoot within the last second.
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
const lastCheck = this.lastMtimeCheck.get(contentRoot) ?? 0;
|
|
99
|
+
if (this.devMode &&
|
|
100
|
+
now - lastCheck >= MTIME_CHECK_DEBOUNCE_MS &&
|
|
101
|
+
(await isStaleByMtime(contentRoot, new Date(cacheData.cachedAt)))) {
|
|
102
|
+
this.lastMtimeCheck.set(contentRoot, now);
|
|
103
|
+
cacheData = null;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
if (this.devMode)
|
|
107
|
+
this.lastMtimeCheck.set(contentRoot, now);
|
|
108
|
+
return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
|
|
109
|
+
}
|
|
81
110
|
}
|
|
82
111
|
// Cache miss or stale - regenerate
|
|
83
112
|
const result = await resolveSchema(contentRoot, entrySchemaRegistry);
|
|
@@ -115,28 +144,10 @@ export class BranchSchemaCache {
|
|
|
115
144
|
* @param branchRoot - Root directory of the branch
|
|
116
145
|
*/
|
|
117
146
|
async invalidate(branchRoot) {
|
|
118
|
-
if (this.mode === 'dev') {
|
|
119
|
-
// Clear in-memory cache
|
|
120
|
-
this.devModeCache = undefined;
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
// Prod/prod-sim: create stale marker (empty file)
|
|
124
147
|
const cacheDir = path.join(branchRoot, '.canopy-meta');
|
|
125
148
|
const stalePath = path.join(cacheDir, 'schema-cache.stale');
|
|
126
149
|
await fs.mkdir(cacheDir, { recursive: true });
|
|
127
150
|
await fs.writeFile(stalePath, '', 'utf-8');
|
|
128
151
|
}
|
|
129
|
-
/**
|
|
130
|
-
* Clear all caches (for testing).
|
|
131
|
-
* In dev mode, clears in-memory cache.
|
|
132
|
-
* In prod/prod-sim modes, this would need to traverse all branch directories.
|
|
133
|
-
*/
|
|
134
|
-
async clearAll() {
|
|
135
|
-
if (this.mode === 'dev') {
|
|
136
|
-
this.devModeCache = undefined;
|
|
137
|
-
}
|
|
138
|
-
// For prod/prod-sim, clearing all caches would require knowing all branch roots
|
|
139
|
-
// For now, just clear dev mode cache. Tests can invalidate specific branches.
|
|
140
|
-
}
|
|
141
152
|
}
|
|
142
153
|
//# sourceMappingURL=branch-schema-cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-schema-cache.js","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAM5B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,qFAAqF;AACrF,MAAM,oBAAoB,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"branch-schema-cache.js","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* CanopyCMS CLI entrypoint.
|
|
4
|
+
*
|
|
5
|
+
* Routes commands to their implementations:
|
|
6
|
+
* init, init-deploy, worker, generate-ai-content, sync
|
|
7
|
+
*
|
|
8
|
+
* Command implementations live in separate files (init.ts, sync.ts, etc.)
|
|
9
|
+
* and are dynamically imported to keep startup fast.
|
|
10
|
+
*/
|
|
11
|
+
import minimist from 'minimist';
|
|
12
|
+
/** Parse raw CLI args into structured flags and positional command. Exported for testing. */
|
|
13
|
+
export declare function parseArgs(rawArgs: string[]): {
|
|
14
|
+
argv: minimist.ParsedArgs;
|
|
15
|
+
flags: Record<string, string | boolean>;
|
|
16
|
+
command: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
/** Resolve sync direction from --push/--pull/--abort flags. Exported for testing. */
|
|
19
|
+
export declare function resolveSyncDirection(push: boolean, pull: boolean, abort: boolean): 'push' | 'pull' | 'both' | 'abort';
|
|
20
|
+
//# sourceMappingURL=cli.d.ts.map
|