@millstone/synapse-cli 0.1.0

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 (103) hide show
  1. package/README.md +135 -0
  2. package/bin/synapse.js +3 -0
  3. package/dist/commands/eject.d.ts +19 -0
  4. package/dist/commands/eject.d.ts.map +1 -0
  5. package/dist/commands/eject.js +146 -0
  6. package/dist/commands/eject.js.map +1 -0
  7. package/dist/commands/fetch-reference.d.ts +19 -0
  8. package/dist/commands/fetch-reference.d.ts.map +1 -0
  9. package/dist/commands/fetch-reference.js +93 -0
  10. package/dist/commands/fetch-reference.js.map +1 -0
  11. package/dist/commands/format.d.ts +26 -0
  12. package/dist/commands/format.d.ts.map +1 -0
  13. package/dist/commands/format.js +126 -0
  14. package/dist/commands/format.js.map +1 -0
  15. package/dist/commands/generate-pdf.d.ts +19 -0
  16. package/dist/commands/generate-pdf.d.ts.map +1 -0
  17. package/dist/commands/generate-pdf.js +140 -0
  18. package/dist/commands/generate-pdf.js.map +1 -0
  19. package/dist/commands/index.d.ts +17 -0
  20. package/dist/commands/index.d.ts.map +1 -0
  21. package/dist/commands/index.js +26 -0
  22. package/dist/commands/index.js.map +1 -0
  23. package/dist/commands/init.d.ts +58 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +234 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/migrate.d.ts +29 -0
  28. package/dist/commands/migrate.d.ts.map +1 -0
  29. package/dist/commands/migrate.js +297 -0
  30. package/dist/commands/migrate.js.map +1 -0
  31. package/dist/commands/scaffold.d.ts +24 -0
  32. package/dist/commands/scaffold.d.ts.map +1 -0
  33. package/dist/commands/scaffold.js +244 -0
  34. package/dist/commands/scaffold.js.map +1 -0
  35. package/dist/commands/update.d.ts +25 -0
  36. package/dist/commands/update.d.ts.map +1 -0
  37. package/dist/commands/update.js +253 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/commands/validate.d.ts +37 -0
  40. package/dist/commands/validate.d.ts.map +1 -0
  41. package/dist/commands/validate.js +526 -0
  42. package/dist/commands/validate.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +277 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/bodyRules.d.ts +70 -0
  48. package/dist/lib/bodyRules.d.ts.map +1 -0
  49. package/dist/lib/bodyRules.js +711 -0
  50. package/dist/lib/bodyRules.js.map +1 -0
  51. package/dist/lib/config.d.ts +49 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +91 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/git.d.ts +99 -0
  56. package/dist/lib/git.d.ts.map +1 -0
  57. package/dist/lib/git.js +266 -0
  58. package/dist/lib/git.js.map +1 -0
  59. package/dist/lib/graph.d.ts +6 -0
  60. package/dist/lib/graph.d.ts.map +1 -0
  61. package/dist/lib/graph.js +6 -0
  62. package/dist/lib/graph.js.map +1 -0
  63. package/dist/lib/homepage.d.ts +10 -0
  64. package/dist/lib/homepage.d.ts.map +1 -0
  65. package/dist/lib/homepage.js +172 -0
  66. package/dist/lib/homepage.js.map +1 -0
  67. package/dist/lib/markdown.d.ts +107 -0
  68. package/dist/lib/markdown.d.ts.map +1 -0
  69. package/dist/lib/markdown.js +318 -0
  70. package/dist/lib/markdown.js.map +1 -0
  71. package/dist/lib/mode-detection.d.ts +10 -0
  72. package/dist/lib/mode-detection.d.ts.map +1 -0
  73. package/dist/lib/mode-detection.js +29 -0
  74. package/dist/lib/mode-detection.js.map +1 -0
  75. package/dist/lib/naming.d.ts +47 -0
  76. package/dist/lib/naming.d.ts.map +1 -0
  77. package/dist/lib/naming.js +403 -0
  78. package/dist/lib/naming.js.map +1 -0
  79. package/dist/lib/schemas.d.ts +38 -0
  80. package/dist/lib/schemas.d.ts.map +1 -0
  81. package/dist/lib/schemas.js +248 -0
  82. package/dist/lib/schemas.js.map +1 -0
  83. package/dist/lib/templateLint.d.ts +21 -0
  84. package/dist/lib/templateLint.d.ts.map +1 -0
  85. package/dist/lib/templateLint.js +243 -0
  86. package/dist/lib/templateLint.js.map +1 -0
  87. package/dist/lib/templates.d.ts +53 -0
  88. package/dist/lib/templates.d.ts.map +1 -0
  89. package/dist/lib/templates.js +128 -0
  90. package/dist/lib/templates.js.map +1 -0
  91. package/dist/lib/tracking.d.ts +52 -0
  92. package/dist/lib/tracking.d.ts.map +1 -0
  93. package/dist/lib/tracking.js +135 -0
  94. package/dist/lib/tracking.js.map +1 -0
  95. package/dist/lib/types.generated.d.ts +54 -0
  96. package/dist/lib/types.generated.d.ts.map +1 -0
  97. package/dist/lib/types.generated.js +144 -0
  98. package/dist/lib/types.generated.js.map +1 -0
  99. package/dist/lib/validate-plugins.d.ts +22 -0
  100. package/dist/lib/validate-plugins.d.ts.map +1 -0
  101. package/dist/lib/validate-plugins.js +851 -0
  102. package/dist/lib/validate-plugins.js.map +1 -0
  103. package/package.json +85 -0
@@ -0,0 +1,297 @@
1
+ import * as path from 'path';
2
+ import fsExtra from 'fs-extra';
3
+ const fs = fsExtra;
4
+ import { trackingExists } from '../lib/tracking.js';
5
+ import { DOC_TYPES, TEMPLATE_REGISTRY } from '../lib/types.generated.js';
6
+ let chalk;
7
+ async function getChalk() {
8
+ if (!chalk) {
9
+ try {
10
+ chalk = (await import('chalk')).default;
11
+ }
12
+ catch {
13
+ chalk = {
14
+ green: (str) => str,
15
+ red: (str) => str,
16
+ yellow: (str) => str,
17
+ blue: (str) => str,
18
+ gray: (str) => str,
19
+ bold: (str) => str,
20
+ cyan: (str) => str,
21
+ };
22
+ }
23
+ }
24
+ return chalk;
25
+ }
26
+ /** Files associated with fork mode that should be archived */
27
+ const FORK_MODE_FILES = [
28
+ '.synapse-upstream',
29
+ ];
30
+ /** Directories that may contain custom user schemas */
31
+ const CUSTOM_SCHEMA_DIRS = [
32
+ 'schemas/frontmatter/custom',
33
+ 'schemas/body-grammars/custom',
34
+ ];
35
+ /**
36
+ * Detect the current state of the repository for migration planning
37
+ */
38
+ export async function detectMigrationState(cwd) {
39
+ const plan = {
40
+ isForkMode: false,
41
+ hasCustomSchemas: false,
42
+ hasCustomPlugins: false,
43
+ hasSynapseConfig: false,
44
+ customSchemas: [],
45
+ customPlugins: [],
46
+ forkFiles: [],
47
+ contentDirs: [],
48
+ actions: [],
49
+ };
50
+ // 1. Detect fork mode via .synapse-upstream
51
+ if (await trackingExists(cwd)) {
52
+ plan.isForkMode = true;
53
+ plan.forkFiles.push('.synapse-upstream');
54
+ }
55
+ // 2. Detect synapse.config.json
56
+ if (await fs.pathExists(path.join(cwd, 'synapse.config.json'))) {
57
+ plan.hasSynapseConfig = true;
58
+ }
59
+ // 3. Detect custom schemas
60
+ for (const schemaDir of CUSTOM_SCHEMA_DIRS) {
61
+ const fullDir = path.join(cwd, schemaDir);
62
+ if (await fs.pathExists(fullDir)) {
63
+ const files = await fs.readdir(fullDir);
64
+ const schemaFiles = files.filter(f => f.endsWith('.json') || f.endsWith('.schema.json'));
65
+ for (const f of schemaFiles) {
66
+ plan.customSchemas.push(path.join(schemaDir, f));
67
+ }
68
+ }
69
+ }
70
+ plan.hasCustomSchemas = plan.customSchemas.length > 0;
71
+ // 4. Detect custom plugins
72
+ const pluginsDir = path.join(cwd, 'plugins');
73
+ if (await fs.pathExists(pluginsDir)) {
74
+ const pluginFolders = await fs.readdir(pluginsDir);
75
+ for (const folder of pluginFolders) {
76
+ const customDir = path.join(pluginsDir, folder, 'custom');
77
+ if (await fs.pathExists(customDir)) {
78
+ const files = await fs.readdir(customDir);
79
+ const customFiles = files.filter(f => f !== '.gitkeep');
80
+ for (const f of customFiles) {
81
+ plan.customPlugins.push(path.join('plugins', folder, 'custom', f));
82
+ }
83
+ }
84
+ }
85
+ }
86
+ plan.hasCustomPlugins = plan.customPlugins.length > 0;
87
+ // 5. Detect content directories
88
+ const contentDir = path.join(cwd, 'content');
89
+ if (await fs.pathExists(contentDir)) {
90
+ const entries = await fs.readdir(contentDir, { withFileTypes: true });
91
+ for (const entry of entries) {
92
+ if (entry.isDirectory() && /^\d+_/.test(entry.name)) {
93
+ plan.contentDirs.push(path.join('content', entry.name));
94
+ }
95
+ }
96
+ }
97
+ // 6. Build action plan
98
+ if (plan.isForkMode) {
99
+ plan.actions.push('Archive fork-mode files to .archive-fork/');
100
+ }
101
+ if (plan.hasCustomSchemas) {
102
+ plan.actions.push(`Preserve ${plan.customSchemas.length} custom schema(s) in schemas/frontmatter/custom/`);
103
+ }
104
+ if (plan.hasCustomPlugins) {
105
+ plan.actions.push(`Preserve ${plan.customPlugins.length} custom plugin file(s)`);
106
+ }
107
+ plan.actions.push('Generate package.json with @synapse/* npm dependencies');
108
+ if (!plan.hasSynapseConfig) {
109
+ plan.actions.push('Create synapse.config.json with defaults');
110
+ }
111
+ plan.actions.push('Create .gitkeep stubs for content directories');
112
+ return plan;
113
+ }
114
+ /**
115
+ * Generate a package.json for npm mode
116
+ */
117
+ function generatePackageJson(existingPkg) {
118
+ const name = existingPkg?.name || 'my-synapse-docs';
119
+ const version = existingPkg?.version || '1.0.0';
120
+ const description = existingPkg?.description || 'Documentation site powered by Synapse';
121
+ return {
122
+ name,
123
+ version,
124
+ description,
125
+ private: true,
126
+ type: 'module',
127
+ scripts: {
128
+ validate: 'synapse validate',
129
+ format: 'synapse format --write',
130
+ scaffold: 'synapse scaffold',
131
+ build: 'synapse index && quartz build',
132
+ dev: 'quartz dev',
133
+ },
134
+ dependencies: {
135
+ '@synapse/cli': '^0.1.0',
136
+ },
137
+ devDependencies: existingPkg?.devDependencies || {},
138
+ engines: {
139
+ node: '>=20.0.0',
140
+ },
141
+ };
142
+ }
143
+ /**
144
+ * Generate a default synapse.config.json
145
+ */
146
+ function generateSynapseConfig() {
147
+ return {
148
+ branding: {
149
+ siteName: 'My Documentation',
150
+ displayName: 'My Documentation',
151
+ baseUrl: 'https://docs.example.com',
152
+ },
153
+ schemas: {
154
+ customDir: 'schemas/custom',
155
+ loadBase: true,
156
+ },
157
+ };
158
+ }
159
+ /**
160
+ * Execute the migration from fork mode to npm mode
161
+ */
162
+ export async function migrate(options = {}) {
163
+ const c = await getChalk();
164
+ const cwd = options.cwd || process.cwd();
165
+ console.log(c.bold('\nSynapse Fork-to-NPM Migration\n'));
166
+ // 1. Detect current state
167
+ const plan = await detectMigrationState(cwd);
168
+ if (!plan.isForkMode && !options.yes) {
169
+ console.log(c.yellow('No fork-mode markers detected (.synapse-upstream not found).'));
170
+ console.log(c.gray('This command migrates a fork-based repo to npm-based dependency mode.'));
171
+ console.log(c.gray('If this is already an npm-based repo, no migration is needed.\n'));
172
+ }
173
+ // 2. Show migration plan
174
+ console.log(c.blue('Migration Plan:'));
175
+ for (const action of plan.actions) {
176
+ console.log(c.gray(` - ${action}`));
177
+ }
178
+ console.log('');
179
+ if (plan.hasCustomSchemas) {
180
+ console.log(c.cyan('Custom schemas detected:'));
181
+ for (const schema of plan.customSchemas) {
182
+ console.log(c.gray(` - ${schema}`));
183
+ }
184
+ console.log('');
185
+ }
186
+ if (plan.hasCustomPlugins) {
187
+ console.log(c.cyan('Custom plugins detected:'));
188
+ for (const plugin of plan.customPlugins) {
189
+ console.log(c.gray(` - ${plugin}`));
190
+ }
191
+ console.log('');
192
+ }
193
+ // 3. Dry-run mode stops here
194
+ if (options.dryRun) {
195
+ console.log(c.yellow('Dry run complete. No changes were made.\n'));
196
+ return plan;
197
+ }
198
+ // 4. Archive fork files
199
+ if (plan.isForkMode) {
200
+ console.log(c.blue('Archiving fork-mode files...'));
201
+ const archiveDir = path.join(cwd, '.archive-fork');
202
+ await fs.ensureDir(archiveDir);
203
+ for (const file of plan.forkFiles) {
204
+ const src = path.join(cwd, file);
205
+ const dest = path.join(archiveDir, file);
206
+ if (await fs.pathExists(src)) {
207
+ await fs.ensureDir(path.dirname(dest));
208
+ await fs.copy(src, dest);
209
+ await fs.remove(src);
210
+ console.log(c.gray(` Archived: ${file}`));
211
+ }
212
+ }
213
+ console.log(c.green(' Done.\n'));
214
+ }
215
+ // 5. Ensure custom schema directories exist
216
+ if (plan.hasCustomSchemas) {
217
+ console.log(c.blue('Preserving custom schemas...'));
218
+ const customSchemaDir = path.join(cwd, 'schemas', 'frontmatter', 'custom');
219
+ await fs.ensureDir(customSchemaDir);
220
+ console.log(c.green(` Custom schemas preserved in schemas/frontmatter/custom/\n`));
221
+ }
222
+ // 6. Generate package.json
223
+ console.log(c.blue('Generating package.json for npm mode...'));
224
+ const pkgPath = path.join(cwd, 'package.json');
225
+ let existingPkg = null;
226
+ if (await fs.pathExists(pkgPath)) {
227
+ try {
228
+ existingPkg = JSON.parse(await fs.readFile(pkgPath, 'utf-8'));
229
+ }
230
+ catch {
231
+ // ignore parse errors
232
+ }
233
+ // Back up existing package.json
234
+ const archiveDir = path.join(cwd, '.archive-fork');
235
+ await fs.ensureDir(archiveDir);
236
+ await fs.copy(pkgPath, path.join(archiveDir, 'package.json'));
237
+ console.log(c.gray(' Backed up existing package.json to .archive-fork/'));
238
+ }
239
+ const newPkg = generatePackageJson(existingPkg);
240
+ await fs.writeFile(pkgPath, JSON.stringify(newPkg, null, 2) + '\n', 'utf-8');
241
+ console.log(c.green(' Generated package.json with @synapse/* dependencies.\n'));
242
+ // 7. Create synapse.config.json if missing
243
+ if (!plan.hasSynapseConfig) {
244
+ console.log(c.blue('Creating synapse.config.json...'));
245
+ const configPath = path.join(cwd, 'synapse.config.json');
246
+ const config = generateSynapseConfig();
247
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
248
+ console.log(c.green(' Created synapse.config.json.\n'));
249
+ }
250
+ // 8. Create .gitkeep stubs for content directories
251
+ console.log(c.blue('Ensuring content directory structure...'));
252
+ for (const type of DOC_TYPES) {
253
+ const folder = TEMPLATE_REGISTRY[type].folder;
254
+ const dirPath = path.join(cwd, 'content', folder);
255
+ await fs.ensureDir(dirPath);
256
+ const gitkeepPath = path.join(dirPath, '.gitkeep');
257
+ if (!(await fs.pathExists(gitkeepPath))) {
258
+ // Only create .gitkeep if directory is empty
259
+ const files = await fs.readdir(dirPath);
260
+ if (files.length === 0) {
261
+ await fs.writeFile(gitkeepPath, '', 'utf-8');
262
+ }
263
+ }
264
+ }
265
+ console.log(c.green(' Content directories ready.\n'));
266
+ // 9. Print success and next steps
267
+ console.log(c.bold(c.green('Migration complete!\n')));
268
+ console.log(c.gray('Next steps:'));
269
+ console.log(c.gray(' 1. Run "npm install" to install @synapse/cli from npm'));
270
+ console.log(c.gray(' 2. Edit synapse.config.json to customize your site'));
271
+ console.log(c.gray(' 3. Run "synapse validate" to verify your documents'));
272
+ console.log(c.gray(' 4. Remove the fork-specific git remote if desired:'));
273
+ console.log(c.gray(' git remote remove upstream'));
274
+ console.log(c.gray(' 5. Commit the migration changes'));
275
+ if (plan.isForkMode) {
276
+ console.log(c.gray(' 6. Review .archive-fork/ for any files you want to keep'));
277
+ }
278
+ console.log('');
279
+ return plan;
280
+ }
281
+ /**
282
+ * CLI command handler for migrate
283
+ */
284
+ export async function migrateCommand(args) {
285
+ const c = await getChalk();
286
+ try {
287
+ await migrate({
288
+ dryRun: args.dryRun,
289
+ yes: args.yes,
290
+ });
291
+ }
292
+ catch (error) {
293
+ console.error(c.red('\nError:'), error instanceof Error ? error.message : error);
294
+ process.exit(1);
295
+ }
296
+ }
297
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { DocType } from '../lib/types.generated.js';
2
+ export interface ScaffoldOptions {
3
+ type: string;
4
+ title: string;
5
+ owner?: string;
6
+ id?: string;
7
+ targetDir?: string;
8
+ force?: boolean;
9
+ cwd?: string;
10
+ }
11
+ /**
12
+ * Scaffold a new document from an example file
13
+ */
14
+ export declare function scaffold(options: ScaffoldOptions): Promise<string>;
15
+ export declare function scaffoldCommand(args: Record<string, any>): Promise<void>;
16
+ /**
17
+ * Generate a filename from type, id, and title
18
+ */
19
+ export declare function generateFilename(type: DocType, id: string, title: string): string;
20
+ /**
21
+ * Parse template variables from a "key=val,key2=val2" string
22
+ */
23
+ export declare function parseTemplateVars(varsString?: string): Record<string, string>;
24
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAA8D,MAAM,2BAA2B,CAAC;AAuBhH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAqHD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAmGxE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU7E"}
@@ -0,0 +1,244 @@
1
+ import * as path from 'path';
2
+ import fsExtra from 'fs-extra';
3
+ const fs = fsExtra;
4
+ import * as yaml from 'js-yaml';
5
+ import { DOC_TYPES, isDocType, TEMPLATE_REGISTRY, getExpectedFolder } from '../lib/types.generated.js';
6
+ let chalk;
7
+ async function getChalk() {
8
+ if (!chalk) {
9
+ try {
10
+ chalk = (await import('chalk')).default;
11
+ }
12
+ catch {
13
+ chalk = {
14
+ green: (str) => str,
15
+ red: (str) => str,
16
+ yellow: (str) => str,
17
+ blue: (str) => str,
18
+ gray: (str) => str,
19
+ bold: (str) => str,
20
+ cyan: (str) => str
21
+ };
22
+ }
23
+ }
24
+ return chalk;
25
+ }
26
+ /**
27
+ * Convert a title to kebab-case for use in filenames
28
+ */
29
+ function toKebabCase(str) {
30
+ return str
31
+ .toLowerCase()
32
+ .replace(/[^a-z0-9]+/g, '-')
33
+ .replace(/^-+|-+$/g, '');
34
+ }
35
+ /**
36
+ * Find the example file for a given document type
37
+ */
38
+ async function findExampleFile(type, cwd) {
39
+ const folder = TEMPLATE_REGISTRY[type].folder;
40
+ const examplesDir = path.join(cwd, 'content', folder, 'examples');
41
+ if (!await fs.pathExists(examplesDir)) {
42
+ return null;
43
+ }
44
+ const files = await fs.readdir(examplesDir);
45
+ const mdFiles = files.filter(f => f.endsWith('.md'));
46
+ if (mdFiles.length === 0) {
47
+ return null;
48
+ }
49
+ return path.join(examplesDir, mdFiles[0]);
50
+ }
51
+ /**
52
+ * Parse frontmatter and body from markdown content
53
+ */
54
+ function parseFrontmatterAndBody(content) {
55
+ const lines = content.split('\n');
56
+ let startLine = -1;
57
+ let endLine = -1;
58
+ for (let i = 0; i < lines.length; i++) {
59
+ if (lines[i].trim() === '---') {
60
+ if (startLine === -1) {
61
+ startLine = i;
62
+ }
63
+ else {
64
+ endLine = i;
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ if (startLine === -1 || endLine === -1) {
70
+ return { frontmatter: {}, body: content };
71
+ }
72
+ const fmString = lines.slice(startLine + 1, endLine).join('\n');
73
+ const body = lines.slice(endLine + 1).join('\n');
74
+ const frontmatter = yaml.load(fmString) || {};
75
+ return { frontmatter, body };
76
+ }
77
+ /**
78
+ * Generate the next sequential ID for a document type by scanning existing files
79
+ */
80
+ async function generateNextId(type, cwd) {
81
+ const label = TEMPLATE_REGISTRY[type].displayLabel;
82
+ const prefix = label.toUpperCase().replace(/\s+/g, '-');
83
+ const folder = getExpectedFolder(type);
84
+ const typeDir = path.join(cwd, folder);
85
+ let maxNum = 0;
86
+ if (await fs.pathExists(typeDir)) {
87
+ const files = await fs.readdir(typeDir);
88
+ const pattern = new RegExp(`^${prefix}-(\\d+)`, 'i');
89
+ for (const file of files) {
90
+ const match = file.match(pattern);
91
+ if (match) {
92
+ const num = parseInt(match[1], 10);
93
+ if (num > maxNum) {
94
+ maxNum = num;
95
+ }
96
+ }
97
+ }
98
+ // Also check frontmatter id fields for the pattern
99
+ for (const file of files) {
100
+ if (!file.endsWith('.md'))
101
+ continue;
102
+ const filePath = path.join(typeDir, file);
103
+ const stat = await fs.stat(filePath);
104
+ if (!stat.isFile())
105
+ continue;
106
+ try {
107
+ const content = await fs.readFile(filePath, 'utf-8');
108
+ const { frontmatter } = parseFrontmatterAndBody(content);
109
+ if (frontmatter.id && typeof frontmatter.id === 'string') {
110
+ const match = frontmatter.id.match(new RegExp(`^${prefix}-(\\d+)$`, 'i'));
111
+ if (match) {
112
+ const num = parseInt(match[1], 10);
113
+ if (num > maxNum) {
114
+ maxNum = num;
115
+ }
116
+ }
117
+ }
118
+ }
119
+ catch {
120
+ // skip files that can't be read
121
+ }
122
+ }
123
+ }
124
+ const nextNum = String(maxNum + 1).padStart(3, '0');
125
+ return `${prefix}-${nextNum}`;
126
+ }
127
+ /**
128
+ * Scaffold a new document from an example file
129
+ */
130
+ export async function scaffold(options) {
131
+ const c = await getChalk();
132
+ const cwd = options.cwd || process.cwd();
133
+ // 1. Validate document type
134
+ const type = options.type?.toLowerCase();
135
+ if (!type) {
136
+ throw new Error('Missing required option: --type. Available types: ' + DOC_TYPES.join(', '));
137
+ }
138
+ if (!isDocType(type)) {
139
+ throw new Error(`Invalid document type: "${type}". Available types: ${DOC_TYPES.join(', ')}`);
140
+ }
141
+ // 2. Validate title
142
+ if (!options.title) {
143
+ throw new Error('Missing required option: --title');
144
+ }
145
+ // 3. Find the example file
146
+ const examplePath = await findExampleFile(type, cwd);
147
+ if (!examplePath) {
148
+ throw new Error(`No example file found for type "${type}". Expected examples in: content/${TEMPLATE_REGISTRY[type].folder}/examples/`);
149
+ }
150
+ // 4. Read and parse example
151
+ const exampleContent = await fs.readFile(examplePath, 'utf-8');
152
+ const { frontmatter, body } = parseFrontmatterAndBody(exampleContent);
153
+ // 5. Generate or use provided ID
154
+ const id = options.id || await generateNextId(type, cwd);
155
+ // 6. Update frontmatter fields
156
+ const now = new Date().toISOString();
157
+ frontmatter.id = id;
158
+ frontmatter.title = options.title;
159
+ frontmatter.status = 'draft';
160
+ frontmatter.created = now;
161
+ frontmatter.updated = now;
162
+ if (options.owner) {
163
+ frontmatter.owner = options.owner;
164
+ }
165
+ // Remove example flag
166
+ delete frontmatter.example;
167
+ // Remove tags that are just the type name (auto-populated from example)
168
+ if (Array.isArray(frontmatter.tags)) {
169
+ frontmatter.tags = frontmatter.tags.filter((t) => t !== type);
170
+ if (frontmatter.tags.length === 0) {
171
+ delete frontmatter.tags;
172
+ }
173
+ }
174
+ // 7. Generate output filename
175
+ const kebabTitle = toKebabCase(options.title);
176
+ const filename = `${id}-${kebabTitle}.md`;
177
+ // 8. Determine output directory
178
+ const outputDir = options.targetDir || path.join(cwd, getExpectedFolder(type));
179
+ // 9. Build output path and check existence
180
+ const outputPath = path.join(outputDir, filename);
181
+ if (await fs.pathExists(outputPath)) {
182
+ if (!options.force) {
183
+ throw new Error(`File already exists: ${outputPath}\nUse --force to overwrite.`);
184
+ }
185
+ }
186
+ // 10. Build output content
187
+ const fmYaml = yaml.dump(frontmatter, {
188
+ lineWidth: -1,
189
+ quotingType: '"',
190
+ forceQuotes: false
191
+ }).trim();
192
+ const outputContent = `---\n${fmYaml}\n---\n${body}`;
193
+ // 11. Write file
194
+ await fs.ensureDir(outputDir);
195
+ await fs.writeFile(outputPath, outputContent, 'utf-8');
196
+ // 12. Print success
197
+ const relPath = path.relative(cwd, outputPath);
198
+ console.log(c.green(`\nCreated ${TEMPLATE_REGISTRY[type].displayLabel} document:`));
199
+ console.log(c.cyan(` ${relPath}`));
200
+ console.log(c.gray(` Type: ${type}`));
201
+ console.log(c.gray(` ID: ${id}`));
202
+ console.log(c.gray(` Title: ${options.title}`));
203
+ if (options.owner) {
204
+ console.log(c.gray(` Owner: ${options.owner}`));
205
+ }
206
+ console.log('');
207
+ return outputPath;
208
+ }
209
+ export async function scaffoldCommand(args) {
210
+ // Support both --type and --template for backward compatibility
211
+ const type = args.type || args.template;
212
+ const title = args.title;
213
+ await scaffold({
214
+ type,
215
+ title,
216
+ owner: args.owner,
217
+ id: args.id,
218
+ targetDir: args.targetDir || args.outdir,
219
+ force: args.force,
220
+ });
221
+ }
222
+ /**
223
+ * Generate a filename from type, id, and title
224
+ */
225
+ export function generateFilename(type, id, title) {
226
+ const kebabTitle = toKebabCase(title);
227
+ return `${id}-${kebabTitle}.md`;
228
+ }
229
+ /**
230
+ * Parse template variables from a "key=val,key2=val2" string
231
+ */
232
+ export function parseTemplateVars(varsString) {
233
+ if (!varsString)
234
+ return {};
235
+ const vars = {};
236
+ for (const pair of varsString.split(',')) {
237
+ const [key, ...rest] = pair.split('=');
238
+ if (key && rest.length > 0) {
239
+ vars[key.trim()] = rest.join('=').trim();
240
+ }
241
+ }
242
+ return vars;
243
+ }
244
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,MAAM,EAAE,GAAG,OAAO,CAAC;AACnB,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAW,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEhH,IAAI,KAAU,CAAC;AAEf,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC;YACH,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,GAAG;gBACN,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;gBAC3B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;gBACzB,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;gBAC5B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;gBAC1B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;gBAC1B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;gBAC1B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;aAC3B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAYD;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG;SACP,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,IAAa,EAAE,GAAW;IACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAElE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAErD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,CAAC;gBACZ,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAyB,IAAI,EAAE,CAAC;IAEvE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,IAAa,EAAE,GAAW;IACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IACnD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEvC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC;QAErD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;oBACjB,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAS;YAE7B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,EAAE,WAAW,EAAE,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACzD,IAAI,WAAW,CAAC,EAAE,IAAI,OAAO,WAAW,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;oBACzD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC1E,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACnC,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;4BACjB,MAAM,GAAG,GAAG,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,CAAC,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,4BAA4B;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,oDAAoD,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,uBAAuB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,oCAAoC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,YAAY,CACtH,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;IAEtE,iCAAiC;IACjC,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEzD,+BAA+B;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;IACpB,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAClC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC;IAC7B,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC;IAC1B,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC;IAE1B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,sBAAsB;IACtB,OAAO,WAAW,CAAC,OAAO,CAAC;IAE3B,wEAAwE;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACtE,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,WAAW,CAAC,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,GAAG,EAAE,IAAI,UAAU,KAAK,CAAC;IAE1C,gCAAgC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/E,2CAA2C;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,wBAAwB,UAAU,6BAA6B,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC;QACb,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC,IAAI,EAAE,CAAC;IACV,MAAM,aAAa,GAAG,QAAQ,MAAM,UAAU,IAAI,EAAE,CAAC;IAErD,iBAAiB;IACjB,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAEvD,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,iBAAiB,CAAC,IAAI,CAAC,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,gEAAgE;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,MAAM,QAAQ,CAAC;QACb,IAAI;QACJ,KAAK;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM;QACxC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa,EAAE,EAAU,EAAE,KAAa;IACvE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,GAAG,EAAE,IAAI,UAAU,KAAK,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface UpdateOptions {
2
+ continue?: boolean;
3
+ acceptUpstream?: boolean;
4
+ acceptOurs?: boolean;
5
+ abort?: boolean;
6
+ remoteName?: string;
7
+ remoteBranch?: string;
8
+ cwd?: string;
9
+ }
10
+ /**
11
+ * Fetch and merge upstream changes
12
+ */
13
+ export declare function update(options?: UpdateOptions): Promise<void>;
14
+ /**
15
+ * CLI command handler for update
16
+ */
17
+ export declare function updateCommand(args: {
18
+ continue?: boolean;
19
+ acceptUpstream?: boolean;
20
+ acceptOurs?: boolean;
21
+ abort?: boolean;
22
+ remote?: string;
23
+ branch?: string;
24
+ }): Promise<void>;
25
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AA6CA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA6FD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKvE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB"}