@typokit/cli 0.1.4

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 (64) hide show
  1. package/dist/bin.d.ts +3 -0
  2. package/dist/bin.d.ts.map +1 -0
  3. package/dist/bin.js +13 -0
  4. package/dist/bin.js.map +1 -0
  5. package/dist/commands/build.d.ts +42 -0
  6. package/dist/commands/build.d.ts.map +1 -0
  7. package/dist/commands/build.js +302 -0
  8. package/dist/commands/build.js.map +1 -0
  9. package/dist/commands/dev.d.ts +106 -0
  10. package/dist/commands/dev.d.ts.map +1 -0
  11. package/dist/commands/dev.js +536 -0
  12. package/dist/commands/dev.js.map +1 -0
  13. package/dist/commands/generate.d.ts +65 -0
  14. package/dist/commands/generate.d.ts.map +1 -0
  15. package/dist/commands/generate.js +430 -0
  16. package/dist/commands/generate.js.map +1 -0
  17. package/dist/commands/inspect.d.ts +26 -0
  18. package/dist/commands/inspect.d.ts.map +1 -0
  19. package/dist/commands/inspect.js +579 -0
  20. package/dist/commands/inspect.js.map +1 -0
  21. package/dist/commands/migrate.d.ts +70 -0
  22. package/dist/commands/migrate.d.ts.map +1 -0
  23. package/dist/commands/migrate.js +570 -0
  24. package/dist/commands/migrate.js.map +1 -0
  25. package/dist/commands/scaffold.d.ts +70 -0
  26. package/dist/commands/scaffold.d.ts.map +1 -0
  27. package/dist/commands/scaffold.js +483 -0
  28. package/dist/commands/scaffold.js.map +1 -0
  29. package/dist/commands/test.d.ts +56 -0
  30. package/dist/commands/test.d.ts.map +1 -0
  31. package/dist/commands/test.js +248 -0
  32. package/dist/commands/test.js.map +1 -0
  33. package/dist/config.d.ts +20 -0
  34. package/dist/config.d.ts.map +1 -0
  35. package/dist/config.js +69 -0
  36. package/dist/config.js.map +1 -0
  37. package/dist/index.d.ts +30 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +245 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +12 -0
  42. package/dist/logger.d.ts.map +1 -0
  43. package/dist/logger.js +33 -0
  44. package/dist/logger.js.map +1 -0
  45. package/package.json +33 -0
  46. package/src/bin.ts +22 -0
  47. package/src/commands/build.ts +433 -0
  48. package/src/commands/dev.ts +822 -0
  49. package/src/commands/generate.ts +640 -0
  50. package/src/commands/inspect.ts +885 -0
  51. package/src/commands/migrate.ts +800 -0
  52. package/src/commands/scaffold.ts +627 -0
  53. package/src/commands/test.ts +353 -0
  54. package/src/config.ts +93 -0
  55. package/src/dev.test.ts +285 -0
  56. package/src/env.d.ts +86 -0
  57. package/src/generate.test.ts +304 -0
  58. package/src/index.test.ts +217 -0
  59. package/src/index.ts +397 -0
  60. package/src/inspect.test.ts +411 -0
  61. package/src/logger.ts +49 -0
  62. package/src/migrate.test.ts +205 -0
  63. package/src/scaffold.test.ts +256 -0
  64. package/src/test.test.ts +230 -0
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ // @typokit/cli — CLI binary entry point
3
+ import { run } from "./index.js";
4
+ const g = globalThis;
5
+ const proc = g["process"];
6
+ run(proc.argv).then((code) => proc.exit(code), (err) => {
7
+ const stderr = proc["stderr"];
8
+ if (stderr?.write) {
9
+ stderr.write(`[error] ${err instanceof Error ? err.message : String(err)}\n`);
10
+ }
11
+ proc.exit(1);
12
+ });
13
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,wCAAwC;AAExC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,CAAC,GAAG,UAAqC,CAAC;AAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAiD,CAAC;AAE1E,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACjB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACzB,CAAC,GAAG,EAAE,EAAE;IACN,MAAM,MAAM,GACV,IACD,CAAC,QAAQ,CAAC,CAAC;IACZ,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CACV,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,CAAC,CACF,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { CliLogger } from "../logger.js";
2
+ import type { TypoKitConfig } from "../config.js";
3
+ import type { BuildResult } from "@typokit/types";
4
+ import type { TypoKitPlugin, BuildPipelineInstance } from "@typokit/core";
5
+ export interface BuildCommandOptions {
6
+ /** Project root directory */
7
+ rootDir: string;
8
+ /** Resolved configuration */
9
+ config: Required<TypoKitConfig>;
10
+ /** Logger instance */
11
+ logger: CliLogger;
12
+ /** Whether verbose mode is enabled */
13
+ verbose: boolean;
14
+ /** Plugins to register with the build pipeline */
15
+ plugins?: TypoKitPlugin[];
16
+ }
17
+ /** Structured build error with source context */
18
+ export interface BuildError {
19
+ source: string;
20
+ phase: "transform" | "compile";
21
+ message: string;
22
+ file?: string;
23
+ line?: number;
24
+ errorType?: string;
25
+ }
26
+ /**
27
+ * Execute the build command.
28
+ *
29
+ * 1. Resolve type and route files from config patterns
30
+ * 2. Create build pipeline and let plugins register taps via onBuild()
31
+ * 3. Fire beforeTransform hook
32
+ * 4. Run the Rust native transform pipeline (buildPipeline)
33
+ * 5. Fire afterTypeParse, afterValidators, afterRouteTable hooks
34
+ * 6. Fire emit hook (plugins can add outputs)
35
+ * 7. Run the TypeScript compiler
36
+ * 8. Fire done hook
37
+ * 9. Return structured BuildResult
38
+ */
39
+ export declare function executeBuild(options: BuildCommandOptions): Promise<BuildResult & {
40
+ pipeline?: BuildPipelineInstance;
41
+ }>;
42
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAChC,sBAAsB;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+ND;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CAAE,CAAC,CAkK7D"}
@@ -0,0 +1,302 @@
1
+ // @typokit/cli — Build Command
2
+ /**
3
+ * Resolve glob patterns to actual file paths.
4
+ */
5
+ async function resolveFilePatterns(rootDir, patterns) {
6
+ const { join, resolve } = (await import(/* @vite-ignore */ "path"));
7
+ const { readdirSync, statSync, existsSync } = (await import(
8
+ /* @vite-ignore */ "fs"));
9
+ const files = [];
10
+ for (const pattern of patterns) {
11
+ if (pattern.includes("*")) {
12
+ // Simple glob matching: support **/*.ext and **/name.ts patterns
13
+ const parts = pattern.split("/");
14
+ const hasDoubleGlob = parts.includes("**");
15
+ const lastPart = parts[parts.length - 1];
16
+ // Determine the base directory (everything before the first glob)
17
+ const baseParts = [];
18
+ for (const part of parts) {
19
+ if (part.includes("*"))
20
+ break;
21
+ baseParts.push(part);
22
+ }
23
+ const baseDir = baseParts.length > 0 ? join(rootDir, ...baseParts) : rootDir;
24
+ if (!existsSync(baseDir))
25
+ continue;
26
+ // List files recursively if **
27
+ const entries = hasDoubleGlob
28
+ ? listFilesRecursive(baseDir, existsSync, readdirSync, statSync, join)
29
+ : readdirSync(baseDir).map((f) => join(baseDir, f));
30
+ // Match against the filename pattern
31
+ const filePattern = lastPart.replace(/\*/g, ".*");
32
+ const regex = new RegExp(`^${filePattern}$`);
33
+ for (const entry of entries) {
34
+ const name = entry.split(/[\\/]/).pop() ?? "";
35
+ if (regex.test(name)) {
36
+ files.push(resolve(entry));
37
+ }
38
+ }
39
+ }
40
+ else {
41
+ // Direct path
42
+ const fullPath = resolve(join(rootDir, pattern));
43
+ if (existsSync(fullPath)) {
44
+ files.push(fullPath);
45
+ }
46
+ }
47
+ }
48
+ return [...new Set(files)].sort();
49
+ }
50
+ function listFilesRecursive(dir, existsSync, readdirSync, statSync, join) {
51
+ if (!existsSync(dir))
52
+ return [];
53
+ const results = [];
54
+ const entries = readdirSync(dir);
55
+ for (const entry of entries) {
56
+ const fullPath = join(dir, entry);
57
+ try {
58
+ const stat = statSync(fullPath);
59
+ if (stat.isDirectory()) {
60
+ if (entry !== "node_modules" &&
61
+ entry !== "dist" &&
62
+ entry !== ".typokit") {
63
+ results.push(...listFilesRecursive(fullPath, existsSync, readdirSync, statSync, join));
64
+ }
65
+ }
66
+ else if (stat.isFile()) {
67
+ results.push(fullPath);
68
+ }
69
+ }
70
+ catch {
71
+ // Skip files that can't be stat'd
72
+ }
73
+ }
74
+ return results;
75
+ }
76
+ /**
77
+ * Parse TypeScript compiler errors into structured BuildError objects.
78
+ */
79
+ function parseCompilerErrors(stderr) {
80
+ const errors = [];
81
+ const lines = stderr.split("\n");
82
+ for (const line of lines) {
83
+ // Match tsc error format: file(line,col): error TSxxxx: message
84
+ const match = line.match(/^(.+?)\((\d+),\d+\):\s*error\s+(TS\d+):\s*(.+)/);
85
+ if (match) {
86
+ errors.push({
87
+ source: "tsc",
88
+ phase: "compile",
89
+ message: match[4],
90
+ file: match[1],
91
+ line: parseInt(match[2], 10),
92
+ errorType: match[3],
93
+ });
94
+ }
95
+ }
96
+ // If no structured errors found but there's stderr content, add a generic error
97
+ if (errors.length === 0 && stderr.trim()) {
98
+ errors.push({
99
+ source: "compiler",
100
+ phase: "compile",
101
+ message: stderr.trim().split("\n")[0],
102
+ });
103
+ }
104
+ return errors;
105
+ }
106
+ /**
107
+ * Run the TypeScript compiler step.
108
+ */
109
+ async function runCompiler(options) {
110
+ const { spawnSync } = (await import(/* @vite-ignore */ "child_process"));
111
+ const { config, rootDir, logger } = options;
112
+ const compiler = config.compiler;
113
+ const args = [...config.compilerArgs];
114
+ let command;
115
+ switch (compiler) {
116
+ case "tsc":
117
+ command = "tsc";
118
+ if (args.length === 0) {
119
+ args.push("-p", "tsconfig.json");
120
+ }
121
+ break;
122
+ case "tsup":
123
+ command = "tsup";
124
+ break;
125
+ case "swc":
126
+ command = "swc";
127
+ if (args.length === 0) {
128
+ args.push("src", "-d", config.distDir);
129
+ }
130
+ break;
131
+ default:
132
+ command = "tsc";
133
+ args.push("-p", "tsconfig.json");
134
+ }
135
+ logger.step("compile", `Running ${compiler}: ${command} ${args.join(" ")}`);
136
+ const result = spawnSync(command, args, {
137
+ cwd: rootDir,
138
+ encoding: "utf-8",
139
+ });
140
+ if (result.error) {
141
+ return {
142
+ success: false,
143
+ errors: [
144
+ {
145
+ source: compiler,
146
+ phase: "compile",
147
+ message: result.error.message,
148
+ errorType: "SPAWN_ERROR",
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ if (result.status !== 0) {
154
+ const errors = parseCompilerErrors(result.stderr || result.stdout);
155
+ return { success: false, errors };
156
+ }
157
+ if (options.verbose && result.stdout) {
158
+ logger.verbose(result.stdout.trim());
159
+ }
160
+ return { success: true, errors: [] };
161
+ }
162
+ /**
163
+ * Execute the build command.
164
+ *
165
+ * 1. Resolve type and route files from config patterns
166
+ * 2. Create build pipeline and let plugins register taps via onBuild()
167
+ * 3. Fire beforeTransform hook
168
+ * 4. Run the Rust native transform pipeline (buildPipeline)
169
+ * 5. Fire afterTypeParse, afterValidators, afterRouteTable hooks
170
+ * 6. Fire emit hook (plugins can add outputs)
171
+ * 7. Run the TypeScript compiler
172
+ * 8. Fire done hook
173
+ * 9. Return structured BuildResult
174
+ */
175
+ export async function executeBuild(options) {
176
+ const { createBuildPipeline } = (await import(
177
+ /* @vite-ignore */ "@typokit/core"));
178
+ const startTime = Date.now();
179
+ const { config, rootDir, logger, verbose, plugins = [] } = options;
180
+ const errors = [];
181
+ const outputs = [];
182
+ // Create build pipeline and let plugins register their taps
183
+ const pipeline = createBuildPipeline();
184
+ for (const plugin of plugins) {
185
+ if (plugin.onBuild) {
186
+ plugin.onBuild(pipeline);
187
+ if (verbose) {
188
+ logger.verbose(`Plugin "${plugin.name}" registered build hooks`);
189
+ }
190
+ }
191
+ }
192
+ const buildCtx = {
193
+ rootDir,
194
+ outDir: config.outputDir,
195
+ dev: false,
196
+ outputs,
197
+ };
198
+ // Step 1: Resolve file patterns
199
+ logger.step("build", "Resolving source files...");
200
+ const typeFiles = await resolveFilePatterns(rootDir, config.typeFiles);
201
+ const routeFiles = await resolveFilePatterns(rootDir, config.routeFiles);
202
+ if (verbose) {
203
+ logger.verbose(`Type files: ${typeFiles.length} found`);
204
+ for (const f of typeFiles)
205
+ logger.verbose(` ${f}`);
206
+ logger.verbose(`Route files: ${routeFiles.length} found`);
207
+ for (const f of routeFiles)
208
+ logger.verbose(` ${f}`);
209
+ }
210
+ // Step 2: Fire beforeTransform hook
211
+ await pipeline.hooks.beforeTransform.call(buildCtx);
212
+ // Step 3: Run native transform pipeline
213
+ if (typeFiles.length > 0 || routeFiles.length > 0) {
214
+ logger.step("transform", "Running native transform pipeline...");
215
+ try {
216
+ const { buildPipeline: nativeBuildPipeline } = (await import(
217
+ /* @vite-ignore */ "@typokit/transform-native"));
218
+ const result = await nativeBuildPipeline({
219
+ typeFiles,
220
+ routeFiles,
221
+ outputDir: config.outputDir,
222
+ });
223
+ if (result.regenerated) {
224
+ logger.success(`Transform complete — ${result.filesWritten.length} files written`);
225
+ for (const f of result.filesWritten) {
226
+ outputs.push({ filePath: f, content: "", overwrite: true });
227
+ }
228
+ }
229
+ else {
230
+ logger.success("Transform skipped — cache hit");
231
+ }
232
+ if (verbose) {
233
+ logger.verbose(`Content hash: ${result.contentHash}`);
234
+ for (const f of result.filesWritten)
235
+ logger.verbose(` wrote: ${f}`);
236
+ }
237
+ // Fire afterTypeParse hook (types extracted during transform)
238
+ await pipeline.hooks.afterTypeParse.call({}, buildCtx);
239
+ // Fire afterValidators hook
240
+ await pipeline.hooks.afterValidators.call(outputs, buildCtx);
241
+ // Fire afterRouteTable hook
242
+ await pipeline.hooks.afterRouteTable.call({
243
+ segment: "",
244
+ children: {},
245
+ handlers: {},
246
+ }, buildCtx);
247
+ }
248
+ catch (err) {
249
+ const message = err instanceof Error ? err.message : String(err);
250
+ logger.error(`Transform failed: ${message}`);
251
+ errors.push(`Transform error: ${message}`);
252
+ return {
253
+ success: false,
254
+ outputs,
255
+ duration: Date.now() - startTime,
256
+ errors,
257
+ };
258
+ }
259
+ }
260
+ else {
261
+ logger.info("No type or route files found — skipping transform");
262
+ }
263
+ // Step 4: Fire emit hook — plugins can add their own outputs
264
+ await pipeline.hooks.emit.call(outputs, buildCtx);
265
+ // Step 5: Run TypeScript compiler
266
+ logger.step("compile", "Compiling TypeScript...");
267
+ const compileResult = await runCompiler(options);
268
+ if (!compileResult.success) {
269
+ for (const buildErr of compileResult.errors) {
270
+ const parts = [buildErr.message];
271
+ if (buildErr.file)
272
+ parts.unshift(`${buildErr.file}:${buildErr.line ?? 0}`);
273
+ if (buildErr.errorType)
274
+ parts.push(`(${buildErr.errorType})`);
275
+ const formatted = parts.join(" — ");
276
+ logger.error(formatted);
277
+ errors.push(formatted);
278
+ }
279
+ return {
280
+ success: false,
281
+ outputs,
282
+ duration: Date.now() - startTime,
283
+ errors,
284
+ };
285
+ }
286
+ logger.success("Compilation complete");
287
+ const duration = Date.now() - startTime;
288
+ logger.success(`Build finished in ${duration}ms`);
289
+ const buildResult = {
290
+ success: true,
291
+ outputs,
292
+ duration,
293
+ errors: [],
294
+ };
295
+ // Step 6: Fire done hook
296
+ await pipeline.hooks.done.call(buildResult);
297
+ return {
298
+ ...buildResult,
299
+ pipeline,
300
+ };
301
+ }
302
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import type { CliLogger } from "../logger.js";
2
+ import type { TypoKitConfig } from "../config.js";
3
+ export interface DevCommandOptions {
4
+ /** Project root directory */
5
+ rootDir: string;
6
+ /** Resolved configuration */
7
+ config: Required<TypoKitConfig>;
8
+ /** Logger instance */
9
+ logger: CliLogger;
10
+ /** Whether verbose mode is enabled */
11
+ verbose: boolean;
12
+ /** Debug sidecar port (default: 9800) */
13
+ debugPort: number;
14
+ }
15
+ /** Tracked file with mtime for change detection */
16
+ interface TrackedFile {
17
+ path: string;
18
+ mtime: number;
19
+ }
20
+ /** Dependency graph entry: maps a file to the outputs it affects */
21
+ interface DepGraphEntry {
22
+ /** Files that depend on this source file */
23
+ affectedOutputs: string[];
24
+ /** Category: "type" or "route" */
25
+ category: "type" | "route";
26
+ }
27
+ /** In-memory AST cache entry */
28
+ interface CacheEntry {
29
+ mtime: number;
30
+ hash: string;
31
+ }
32
+ /** Dev server state */
33
+ export interface DevServerState {
34
+ /** Whether the server is running */
35
+ running: boolean;
36
+ /** File watcher cleanup function */
37
+ stopWatcher: (() => void) | null;
38
+ /** Tracked files with mtimes */
39
+ trackedFiles: Map<string, TrackedFile>;
40
+ /** Dependency graph: source → affected outputs */
41
+ depGraph: Map<string, DepGraphEntry>;
42
+ /** AST cache: file path → cache entry */
43
+ astCache: Map<string, CacheEntry>;
44
+ /** Rebuild count */
45
+ rebuildCount: number;
46
+ /** Last rebuild duration in ms */
47
+ lastRebuildMs: number;
48
+ /** Server child process PID */
49
+ serverPid: number | null;
50
+ }
51
+ /**
52
+ * Create initial dev server state.
53
+ */
54
+ export declare function createDevState(): DevServerState;
55
+ /**
56
+ * Detect which files have changed since last check.
57
+ */
58
+ export declare function detectChangedFiles(state: DevServerState, currentFiles: TrackedFile[]): {
59
+ changed: TrackedFile[];
60
+ added: TrackedFile[];
61
+ removed: string[];
62
+ };
63
+ /**
64
+ * Update the tracked files in state.
65
+ */
66
+ export declare function updateTrackedFiles(state: DevServerState, files: TrackedFile[]): void;
67
+ /**
68
+ * Build the dependency graph from type and route files.
69
+ * Maps each source file to the outputs it affects.
70
+ */
71
+ export declare function buildDepGraph(typeFiles: string[], routeFiles: string[]): Map<string, DepGraphEntry>;
72
+ /**
73
+ * Determine which outputs need regeneration based on changed files.
74
+ */
75
+ export declare function getAffectedOutputs(depGraph: Map<string, DepGraphEntry>, changedFiles: string[]): Set<string>;
76
+ /**
77
+ * Check if a file's AST cache is still valid.
78
+ */
79
+ export declare function isCacheValid(cache: Map<string, CacheEntry>, filePath: string, currentMtime: number): boolean;
80
+ /**
81
+ * Update the AST cache for a file.
82
+ */
83
+ export declare function updateCache(cache: Map<string, CacheEntry>, filePath: string, mtime: number): void;
84
+ /**
85
+ * Run an incremental rebuild for changed files only.
86
+ * Returns the files that were actually re-processed.
87
+ */
88
+ export declare function incrementalRebuild(options: DevCommandOptions, state: DevServerState, changedPaths: string[]): Promise<{
89
+ success: boolean;
90
+ duration: number;
91
+ filesProcessed: number;
92
+ }>;
93
+ /**
94
+ * Execute the dev command.
95
+ *
96
+ * 1. Run initial full build
97
+ * 2. Start file watcher for incremental rebuilds
98
+ * 3. Start the development server (delegates to server adapter)
99
+ * 4. Handle graceful shutdown
100
+ */
101
+ export declare function executeDev(options: DevCommandOptions): Promise<{
102
+ state: DevServerState;
103
+ stop: () => void;
104
+ }>;
105
+ export {};
106
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}