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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAIH,OAAO,QAAQ,MAAM,UAAU,CAAA;AAI/B,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;;;;EAS1C;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAGpC"}
|
package/dist/cli/cli.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
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 { realpathSync } from 'node:fs';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
13
|
+
import minimist from 'minimist';
|
|
14
|
+
import * as p from '@clack/prompts';
|
|
15
|
+
/** Parse raw CLI args into structured flags and positional command. Exported for testing. */
|
|
16
|
+
export function parseArgs(rawArgs) {
|
|
17
|
+
const argv = minimist(rawArgs, {
|
|
18
|
+
boolean: ['force', 'non-interactive', 'push', 'pull', 'abort'],
|
|
19
|
+
string: ['app-dir', 'branch', 'content-root', 'output', 'config'],
|
|
20
|
+
alias: { f: 'force' },
|
|
21
|
+
});
|
|
22
|
+
const flags = argv;
|
|
23
|
+
const command = argv._[0];
|
|
24
|
+
return { argv, flags, command };
|
|
25
|
+
}
|
|
26
|
+
/** Resolve sync direction from --push/--pull/--abort flags. Exported for testing. */
|
|
27
|
+
export function resolveSyncDirection(push, pull, abort) {
|
|
28
|
+
if (abort)
|
|
29
|
+
return 'abort';
|
|
30
|
+
return push && !pull ? 'push' : pull && !push ? 'pull' : 'both';
|
|
31
|
+
}
|
|
32
|
+
// CLI entrypoint
|
|
33
|
+
async function main() {
|
|
34
|
+
const { argv, flags, command } = parseArgs(process.argv.slice(2));
|
|
35
|
+
if (command === 'init') {
|
|
36
|
+
const { init } = await import('./init');
|
|
37
|
+
const nonInteractive = flags['non-interactive'] === true;
|
|
38
|
+
const force = flags['force'] === true;
|
|
39
|
+
const mode = 'dev';
|
|
40
|
+
let appDir;
|
|
41
|
+
if (typeof flags['app-dir'] === 'string') {
|
|
42
|
+
appDir = flags['app-dir'];
|
|
43
|
+
}
|
|
44
|
+
else if (nonInteractive) {
|
|
45
|
+
appDir = 'app';
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const result = await p.text({
|
|
49
|
+
message: 'App directory?',
|
|
50
|
+
placeholder: 'app',
|
|
51
|
+
defaultValue: 'app',
|
|
52
|
+
});
|
|
53
|
+
if (p.isCancel(result)) {
|
|
54
|
+
p.cancel('Init cancelled.');
|
|
55
|
+
process.exit(0);
|
|
56
|
+
}
|
|
57
|
+
appDir = result;
|
|
58
|
+
}
|
|
59
|
+
let ai;
|
|
60
|
+
if (flags['ai'] === false) {
|
|
61
|
+
ai = false;
|
|
62
|
+
}
|
|
63
|
+
else if (nonInteractive) {
|
|
64
|
+
ai = true;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const result = await p.confirm({
|
|
68
|
+
message: 'Include AI content endpoint?',
|
|
69
|
+
initialValue: true,
|
|
70
|
+
});
|
|
71
|
+
if (p.isCancel(result)) {
|
|
72
|
+
p.cancel('Init cancelled.');
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
ai = result;
|
|
76
|
+
}
|
|
77
|
+
await init({
|
|
78
|
+
mode,
|
|
79
|
+
appDir,
|
|
80
|
+
ai,
|
|
81
|
+
projectDir: process.cwd(),
|
|
82
|
+
force,
|
|
83
|
+
nonInteractive,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (command === 'init-deploy') {
|
|
87
|
+
const { initDeployAws } = await import('./init');
|
|
88
|
+
const cloud = argv._[1];
|
|
89
|
+
if (cloud !== 'aws') {
|
|
90
|
+
console.error('Usage: canopycms init-deploy aws');
|
|
91
|
+
console.error('Only "aws" is currently supported.');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
await initDeployAws({
|
|
95
|
+
cloud: 'aws',
|
|
96
|
+
projectDir: process.cwd(),
|
|
97
|
+
force: flags['force'] === true,
|
|
98
|
+
nonInteractive: flags['non-interactive'] === true,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else if (command === 'worker') {
|
|
102
|
+
const { workerRunOnce } = await import('./init');
|
|
103
|
+
const subcommand = argv._[1];
|
|
104
|
+
if (subcommand !== 'run-once') {
|
|
105
|
+
console.error('Usage: canopycms worker run-once');
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
// Resolve auth plugin from the adopter's installed packages.
|
|
109
|
+
// Uses variable-based import() so TypeScript doesn't resolve against canopycms's own deps.
|
|
110
|
+
const authMode = process.env.CANOPY_AUTH_MODE || 'dev';
|
|
111
|
+
let authPlugin;
|
|
112
|
+
try {
|
|
113
|
+
if (authMode === 'clerk') {
|
|
114
|
+
const pkg = 'canopycms-auth-clerk';
|
|
115
|
+
const { createClerkAuthPlugin } = await import(pkg);
|
|
116
|
+
authPlugin = createClerkAuthPlugin({});
|
|
117
|
+
}
|
|
118
|
+
else if (authMode === 'dev') {
|
|
119
|
+
const pkg = 'canopycms-auth-dev';
|
|
120
|
+
const { createDevAuthPlugin } = await import(pkg);
|
|
121
|
+
authPlugin = createDevAuthPlugin();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
console.warn(`Could not load auth plugin for mode "${authMode}" — skipping cache refresh`);
|
|
126
|
+
}
|
|
127
|
+
await workerRunOnce({ projectDir: process.cwd(), authPlugin });
|
|
128
|
+
}
|
|
129
|
+
else if (command === 'generate-ai-content') {
|
|
130
|
+
const { generateAIContentCLI } = await import('./generate-ai-content');
|
|
131
|
+
await generateAIContentCLI({
|
|
132
|
+
projectDir: process.cwd(),
|
|
133
|
+
outputDir: typeof flags['output'] === 'string' ? flags['output'] : undefined,
|
|
134
|
+
configPath: typeof flags['config'] === 'string' ? flags['config'] : undefined,
|
|
135
|
+
appDir: typeof flags['app-dir'] === 'string' ? flags['app-dir'] : undefined,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else if (command === 'sync') {
|
|
139
|
+
const { sync } = await import('./sync');
|
|
140
|
+
const direction = resolveSyncDirection(flags['push'] === true, flags['pull'] === true, flags['abort'] === true);
|
|
141
|
+
await sync({
|
|
142
|
+
projectDir: process.cwd(),
|
|
143
|
+
direction,
|
|
144
|
+
branch: typeof flags['branch'] === 'string' ? flags['branch'] : undefined,
|
|
145
|
+
contentRoot: typeof flags['content-root'] === 'string' ? flags['content-root'] : undefined,
|
|
146
|
+
force: flags['force'] === true,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
console.log('CanopyCMS CLI');
|
|
151
|
+
console.log('');
|
|
152
|
+
console.log('Commands:');
|
|
153
|
+
console.log(' init Add CanopyCMS to a Next.js app');
|
|
154
|
+
console.log(' --app-dir <path> App directory (default: app)');
|
|
155
|
+
console.log(' --no-ai Skip AI content endpoint generation');
|
|
156
|
+
console.log(' --force Overwrite existing files without asking');
|
|
157
|
+
console.log(' --non-interactive Use defaults, no prompts');
|
|
158
|
+
console.log('');
|
|
159
|
+
console.log(' init-deploy aws Generate AWS deployment artifacts');
|
|
160
|
+
console.log(' --force Overwrite existing files without asking');
|
|
161
|
+
console.log(' --non-interactive Use defaults, no prompts');
|
|
162
|
+
console.log('');
|
|
163
|
+
console.log(' worker run-once Process tasks, sync git, refresh auth cache');
|
|
164
|
+
console.log(' generate-ai-content Generate static AI-ready content files');
|
|
165
|
+
console.log(' --output <dir> Output directory (default: public/ai)');
|
|
166
|
+
console.log(' --config <path> Path to AI content config file');
|
|
167
|
+
console.log(' --app-dir <path> App directory (default: app)');
|
|
168
|
+
console.log('');
|
|
169
|
+
console.log(' sync Sync content between working tree and CMS');
|
|
170
|
+
console.log(' --push Push working-tree content to a branch workspace');
|
|
171
|
+
console.log(' --pull Pull content from a branch workspace');
|
|
172
|
+
console.log(' --abort Abort a failed merge in a branch workspace');
|
|
173
|
+
console.log(' --branch <name> Target branch workspace');
|
|
174
|
+
console.log(' --content-root <path> Content directory (default: content)');
|
|
175
|
+
console.log(' --force Skip confirmation prompts');
|
|
176
|
+
process.exit(0);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Only run when executed directly as a CLI, not when imported in tests.
|
|
180
|
+
// Use realpathSync to resolve symlinks — npx creates a symlink in node_modules/.bin/
|
|
181
|
+
// that won't match import.meta.url's resolved real path.
|
|
182
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
183
|
+
let isDirectRun = false;
|
|
184
|
+
try {
|
|
185
|
+
isDirectRun = realpathSync(process.argv[1]) === realpathSync(__filename);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// process.argv[1] may be undefined or point to a non-existent file
|
|
189
|
+
}
|
|
190
|
+
if (isDirectRun) {
|
|
191
|
+
main().catch((err) => {
|
|
192
|
+
console.error('Error:', err instanceof Error ? err.message : String(err));
|
|
193
|
+
process.exit(1);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
|