@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
@@ -0,0 +1,579 @@
1
+ // @typokit/cli — Inspect Commands
2
+ // Subcommands for querying framework internal state as structured JSON
3
+ // ─── Output Formatting ──────────────────────────────────────
4
+ function isJsonOutput(flags) {
5
+ return flags["json"] === true || flags["format"] === "json";
6
+ }
7
+ function writeOutput(data, json, logger) {
8
+ const g = globalThis;
9
+ const proc = g["process"];
10
+ const stdout = proc?.stdout ?? { write: () => { } };
11
+ if (json) {
12
+ stdout.write(JSON.stringify(data, null, 2) + "\n");
13
+ }
14
+ else {
15
+ formatHumanReadable(data, logger);
16
+ }
17
+ }
18
+ function formatHumanReadable(data, logger) {
19
+ if (Array.isArray(data)) {
20
+ for (const item of data) {
21
+ if (typeof item === "object" && item !== null) {
22
+ const obj = item;
23
+ if ("method" in obj && "path" in obj) {
24
+ // Route info
25
+ logger.info(` ${String(obj["method"])} ${String(obj["path"])}`);
26
+ if (obj["params"])
27
+ logger.info(` params: ${JSON.stringify(obj["params"])}`);
28
+ if (obj["handler"])
29
+ logger.info(` handler: ${String(obj["handler"])}`);
30
+ }
31
+ else if ("name" in obj && "priority" in obj) {
32
+ // Middleware info
33
+ logger.info(` [${String(obj["priority"])}] ${String(obj["name"])} (${String(obj["type"])})`);
34
+ }
35
+ else if ("name" in obj && "dependsOn" in obj) {
36
+ // Dependency node
37
+ const deps = obj["dependsOn"];
38
+ logger.info(` ${String(obj["name"])} → ${deps.length > 0 ? deps.join(", ") : "(none)"}`);
39
+ }
40
+ else if ("name" in obj && "order" in obj) {
41
+ // Build hook
42
+ logger.info(` ${String(obj["order"])}. ${String(obj["name"])}: ${String(obj["description"])}`);
43
+ }
44
+ else if ("timestamp" in obj && "code" in obj) {
45
+ // Error entry
46
+ logger.info(` [${String(obj["timestamp"])}] ${String(obj["code"])}: ${String(obj["message"])}`);
47
+ if (obj["route"])
48
+ logger.info(` route: ${String(obj["route"])}`);
49
+ }
50
+ else {
51
+ logger.info(` ${JSON.stringify(obj)}`);
52
+ }
53
+ }
54
+ else {
55
+ logger.info(` ${String(item)}`);
56
+ }
57
+ }
58
+ }
59
+ else if (typeof data === "object" && data !== null) {
60
+ const obj = data;
61
+ for (const [key, value] of Object.entries(obj)) {
62
+ if (typeof value === "object" && value !== null) {
63
+ logger.info(`${key}:`);
64
+ formatHumanReadable(value, logger);
65
+ }
66
+ else {
67
+ logger.info(` ${key}: ${String(value)}`);
68
+ }
69
+ }
70
+ }
71
+ else {
72
+ logger.info(String(data));
73
+ }
74
+ }
75
+ // ─── Subcommand Implementations ─────────────────────────────
76
+ async function readGeneratedFile(rootDir, config, relativePath) {
77
+ const { join } = (await import(/* @vite-ignore */ "path"));
78
+ const { existsSync, readFileSync } = (await import(
79
+ /* @vite-ignore */ "fs"));
80
+ const filePath = join(rootDir, config.outputDir, relativePath);
81
+ if (!existsSync(filePath)) {
82
+ return null;
83
+ }
84
+ return readFileSync(filePath, "utf-8");
85
+ }
86
+ /** Parse route entries from compiled router TypeScript output */
87
+ function parseRoutesFromCompiled(content) {
88
+ const routes = [];
89
+ // The compiled router contains route definitions as a radix tree structure
90
+ // Parse the route entries from comment blocks or structured data
91
+ const routePattern = /\/\/ Route: (GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS) ([^\n]+)/g;
92
+ let match;
93
+ while ((match = routePattern.exec(content)) !== null) {
94
+ routes.push({
95
+ method: match[1],
96
+ path: match[2].trim(),
97
+ });
98
+ }
99
+ // Also try to extract from the TypeScript type annotations
100
+ // Pattern: "METHOD /path" in route table keys
101
+ const keyPattern = /"(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS) (\/[^"]+)"/g;
102
+ while ((match = keyPattern.exec(content)) !== null) {
103
+ const method = match[1];
104
+ const path = match[2];
105
+ // Avoid duplicates
106
+ if (!routes.some((r) => r.method === method && r.path === path)) {
107
+ const params = [];
108
+ const paramPattern = /:(\w+)/g;
109
+ let paramMatch;
110
+ while ((paramMatch = paramPattern.exec(path)) !== null) {
111
+ params.push(paramMatch[1]);
112
+ }
113
+ routes.push({
114
+ method,
115
+ path,
116
+ params: params.length > 0 ? params : undefined,
117
+ });
118
+ }
119
+ }
120
+ return routes;
121
+ }
122
+ /** Parse schema types from OpenAPI or type metadata files */
123
+ function parseSchemaFromOpenApi(content, typeName) {
124
+ try {
125
+ const spec = JSON.parse(content);
126
+ const schemas = [];
127
+ const componentSchemas = spec.components?.schemas ?? {};
128
+ for (const [name, schema] of Object.entries(componentSchemas)) {
129
+ if (typeName && name !== typeName)
130
+ continue;
131
+ const properties = {};
132
+ const required = schema.required ?? [];
133
+ if (schema.properties) {
134
+ for (const [propName, propDef] of Object.entries(schema.properties)) {
135
+ properties[propName] = {
136
+ type: propDef.type ?? "unknown",
137
+ optional: !required.includes(propName) ? true : undefined,
138
+ };
139
+ }
140
+ }
141
+ // Find where this type is used in paths
142
+ const usedIn = [];
143
+ if (spec.paths) {
144
+ for (const [pathKey, methods] of Object.entries(spec.paths)) {
145
+ for (const [method, operation] of Object.entries(methods)) {
146
+ const refPattern = `#/components/schemas/${name}`;
147
+ const opStr = JSON.stringify(operation);
148
+ if (opStr.includes(refPattern)) {
149
+ usedIn.push(`${method.toUpperCase()} ${pathKey}`);
150
+ }
151
+ }
152
+ }
153
+ }
154
+ schemas.push({ name, properties, usedIn });
155
+ }
156
+ return schemas;
157
+ }
158
+ catch {
159
+ return [];
160
+ }
161
+ }
162
+ export async function inspectRoutes(rootDir, config) {
163
+ const content = await readGeneratedFile(rootDir, config, "routes/compiled-router.ts");
164
+ if (!content) {
165
+ return {
166
+ success: false,
167
+ data: [],
168
+ error: "No compiled routes found. Run 'typokit build' first.",
169
+ };
170
+ }
171
+ const routes = parseRoutesFromCompiled(content);
172
+ // Also try to enrich from OpenAPI spec
173
+ const openApiContent = await readGeneratedFile(rootDir, config, "schemas/openapi.json");
174
+ if (openApiContent) {
175
+ try {
176
+ const spec = JSON.parse(openApiContent);
177
+ if (spec.paths) {
178
+ for (const route of routes) {
179
+ const pathEntry = spec.paths[route.path];
180
+ if (!pathEntry)
181
+ continue;
182
+ const methodEntry = pathEntry[route.method.toLowerCase()];
183
+ if (!methodEntry)
184
+ continue;
185
+ // Extract query params
186
+ if (methodEntry.parameters) {
187
+ const queryParams = {};
188
+ for (const param of methodEntry.parameters) {
189
+ if (param.in === "query") {
190
+ queryParams[param.name] = param.schema?.type ?? "string";
191
+ }
192
+ }
193
+ if (Object.keys(queryParams).length > 0) {
194
+ route.query = queryParams;
195
+ }
196
+ }
197
+ // Extract body ref
198
+ const bodyContent = methodEntry.requestBody?.content;
199
+ if (bodyContent) {
200
+ const jsonBody = bodyContent["application/json"];
201
+ if (jsonBody?.schema) {
202
+ route.body =
203
+ jsonBody.schema["$ref"]?.replace("#/components/schemas/", "") ??
204
+ jsonBody.schema.type;
205
+ }
206
+ }
207
+ // Extract response ref
208
+ const resp200 = methodEntry.responses?.["200"];
209
+ if (resp200?.content) {
210
+ const jsonResp = resp200.content["application/json"];
211
+ if (jsonResp?.schema) {
212
+ route.response =
213
+ jsonResp.schema["$ref"]?.replace("#/components/schemas/", "") ??
214
+ jsonResp.schema.type;
215
+ }
216
+ }
217
+ }
218
+ }
219
+ }
220
+ catch {
221
+ // OpenAPI enrichment failed, continue with basic routes
222
+ }
223
+ }
224
+ return { success: true, data: routes };
225
+ }
226
+ export async function inspectRoute(rootDir, config, routeKey) {
227
+ const result = await inspectRoutes(rootDir, config);
228
+ if (!result.success)
229
+ return result;
230
+ const routes = result.data;
231
+ // Match "GET /users/:id" format
232
+ const parts = routeKey.split(" ", 2);
233
+ const method = parts[0]?.toUpperCase() ?? "";
234
+ const path = parts[1] ?? "";
235
+ const found = routes.find((r) => r.method === method && r.path === path);
236
+ if (!found) {
237
+ return {
238
+ success: false,
239
+ data: null,
240
+ error: `Route not found: ${routeKey}`,
241
+ };
242
+ }
243
+ return { success: true, data: found };
244
+ }
245
+ export async function inspectMiddleware(rootDir, config) {
246
+ // Middleware info is not persisted to disk during build.
247
+ // Return what we can infer from the build output or provide empty result.
248
+ const content = await readGeneratedFile(rootDir, config, "routes/compiled-router.ts");
249
+ const middleware = [];
250
+ if (content) {
251
+ // Check for middleware references in compiled output
252
+ const mwPattern = /middleware:\s*\[([^\]]*)\]/g;
253
+ let match;
254
+ let order = 0;
255
+ while ((match = mwPattern.exec(content)) !== null) {
256
+ const refs = match[1]
257
+ .split(",")
258
+ .map((s) => s.trim().replace(/['"]/g, ""))
259
+ .filter(Boolean);
260
+ for (const ref of refs) {
261
+ if (!middleware.some((m) => m.name === ref)) {
262
+ middleware.push({
263
+ name: ref,
264
+ priority: order++,
265
+ type: "registered",
266
+ });
267
+ }
268
+ }
269
+ }
270
+ }
271
+ // Always include the built-in error middleware
272
+ middleware.push({
273
+ name: "errorMiddleware",
274
+ priority: middleware.length,
275
+ type: "built-in",
276
+ });
277
+ return { success: true, data: middleware };
278
+ }
279
+ export async function inspectDependencies(rootDir, _config) {
280
+ const { join } = (await import(/* @vite-ignore */ "path"));
281
+ const { existsSync, readFileSync } = (await import(
282
+ /* @vite-ignore */ "fs"));
283
+ // Build dependency graph from package.json files in the project
284
+ const nodes = [];
285
+ const pkgPath = join(rootDir, "package.json");
286
+ if (existsSync(pkgPath)) {
287
+ try {
288
+ const pkgContent = readFileSync(pkgPath, "utf-8");
289
+ const pkg = JSON.parse(pkgContent);
290
+ const deps = Object.keys(pkg.dependencies ?? {}).filter((d) => d.startsWith("@typokit/"));
291
+ nodes.push({
292
+ name: pkg.name ?? "root",
293
+ dependsOn: deps,
294
+ });
295
+ }
296
+ catch {
297
+ // Skip unparseable
298
+ }
299
+ }
300
+ // Also check for workspace packages if we're in a monorepo
301
+ const packagesDir = join(rootDir, "packages");
302
+ const { readdirSync } = (await import(/* @vite-ignore */ "fs"));
303
+ if (existsSync(packagesDir)) {
304
+ try {
305
+ const packages = readdirSync(packagesDir);
306
+ for (const pkg of packages) {
307
+ const subPkgPath = join(packagesDir, pkg, "package.json");
308
+ if (existsSync(subPkgPath)) {
309
+ try {
310
+ const content = readFileSync(subPkgPath, "utf-8");
311
+ const subPkg = JSON.parse(content);
312
+ const deps = Object.keys(subPkg.dependencies ?? {}).filter((d) => d.startsWith("@typokit/"));
313
+ nodes.push({
314
+ name: subPkg.name ?? `@typokit/${pkg}`,
315
+ dependsOn: deps,
316
+ });
317
+ }
318
+ catch {
319
+ // Skip
320
+ }
321
+ }
322
+ }
323
+ }
324
+ catch {
325
+ // Not a monorepo root
326
+ }
327
+ }
328
+ return { success: true, data: nodes };
329
+ }
330
+ export async function inspectSchema(rootDir, config, typeName) {
331
+ const openApiContent = await readGeneratedFile(rootDir, config, "schemas/openapi.json");
332
+ if (!openApiContent) {
333
+ return {
334
+ success: false,
335
+ data: null,
336
+ error: "No OpenAPI spec found. Run 'typokit build' first.",
337
+ };
338
+ }
339
+ const schemas = parseSchemaFromOpenApi(openApiContent, typeName);
340
+ if (schemas.length === 0) {
341
+ return {
342
+ success: false,
343
+ data: null,
344
+ error: `Schema not found: ${typeName}`,
345
+ };
346
+ }
347
+ return { success: true, data: schemas[0] };
348
+ }
349
+ export async function inspectErrors(debugPort, lastN) {
350
+ // Errors require a running server with debug sidecar
351
+ // Attempt to fetch from the debug sidecar endpoint
352
+ try {
353
+ const url = `http://localhost:${debugPort}/_debug/errors?last=${lastN}`;
354
+ const response = await fetchDebugEndpoint(url);
355
+ return { success: true, data: response };
356
+ }
357
+ catch {
358
+ return {
359
+ success: false,
360
+ data: [],
361
+ error: `Could not connect to debug sidecar on port ${debugPort}. Is the server running with debug enabled?`,
362
+ };
363
+ }
364
+ }
365
+ export async function inspectPerformance(debugPort, routePath) {
366
+ try {
367
+ const url = `http://localhost:${debugPort}/_debug/performance?route=${encodeURIComponent(routePath)}`;
368
+ const response = await fetchDebugEndpoint(url);
369
+ return { success: true, data: response };
370
+ }
371
+ catch {
372
+ return {
373
+ success: false,
374
+ data: null,
375
+ error: `Could not connect to debug sidecar on port ${debugPort}. Is the server running with debug enabled?`,
376
+ };
377
+ }
378
+ }
379
+ export async function inspectServer(debugPort) {
380
+ try {
381
+ const url = `http://localhost:${debugPort}/_debug/health`;
382
+ const response = await fetchDebugEndpoint(url);
383
+ return { success: true, data: response };
384
+ }
385
+ catch {
386
+ return {
387
+ success: false,
388
+ data: {
389
+ adapter: "unknown",
390
+ platform: "unknown",
391
+ status: "not running",
392
+ },
393
+ error: `Could not connect to debug sidecar on port ${debugPort}. Is the server running with debug enabled?`,
394
+ };
395
+ }
396
+ }
397
+ export async function inspectBuildPipeline(rootDir, config) {
398
+ // Build pipeline hooks are defined in the plugin system
399
+ // Return the standard hook order from the TypoKit build pipeline
400
+ const hooks = [
401
+ {
402
+ name: "beforeTransform",
403
+ order: 1,
404
+ description: "Register additional type sources before parsing",
405
+ },
406
+ {
407
+ name: "afterTypeParse",
408
+ order: 2,
409
+ description: "Inspect or modify the schema type map after parsing",
410
+ },
411
+ {
412
+ name: "afterValidators",
413
+ order: 3,
414
+ description: "Add custom validators after Typia generation",
415
+ },
416
+ {
417
+ name: "afterRouteTable",
418
+ order: 4,
419
+ description: "Post-process the compiled route table",
420
+ },
421
+ { name: "emit", order: 5, description: "Plugins emit their own artifacts" },
422
+ {
423
+ name: "done",
424
+ order: 6,
425
+ description: "Cleanup, reporting, and finalization",
426
+ },
427
+ ];
428
+ // Try to detect registered plugins from config or build output
429
+ const { join } = (await import(/* @vite-ignore */ "path"));
430
+ const { existsSync } = (await import(/* @vite-ignore */ "fs"));
431
+ const cacheHashPath = join(rootDir, config.outputDir, ".cache-hash");
432
+ const lastBuild = existsSync(cacheHashPath) ? "cached" : "no build found";
433
+ // Try to load plugins and show their registered taps
434
+ let registeredTaps = [];
435
+ try {
436
+ const { createBuildPipeline, getPipelineTaps } = (await import(
437
+ /* @vite-ignore */ "@typokit/core"));
438
+ const pipeline = createBuildPipeline();
439
+ registeredTaps = getPipelineTaps(pipeline);
440
+ }
441
+ catch {
442
+ // Core not available — skip tap introspection
443
+ }
444
+ return {
445
+ success: true,
446
+ data: {
447
+ hooks,
448
+ registeredTaps,
449
+ lastBuildStatus: lastBuild,
450
+ outputDir: config.outputDir,
451
+ },
452
+ };
453
+ }
454
+ /** Helper to fetch from the debug sidecar HTTP endpoint */
455
+ async function fetchDebugEndpoint(url) {
456
+ // Use dynamic import for http module (no @types/node)
457
+ const http = (await import(/* @vite-ignore */ "http"));
458
+ return new Promise((resolve, reject) => {
459
+ const req = http.get(url, (res) => {
460
+ let body = "";
461
+ res.setEncoding("utf-8");
462
+ res.on("data", (chunk) => {
463
+ body += String(chunk);
464
+ });
465
+ res.on("end", () => {
466
+ try {
467
+ resolve(JSON.parse(body));
468
+ }
469
+ catch {
470
+ resolve(body);
471
+ }
472
+ });
473
+ });
474
+ req.on("error", (err) => {
475
+ reject(err);
476
+ });
477
+ });
478
+ }
479
+ // ─── Main Dispatcher ────────────────────────────────────────
480
+ export async function executeInspect(options) {
481
+ const { rootDir, config, logger, subcommand, positional, flags } = options;
482
+ const json = isJsonOutput(flags);
483
+ const debugPort = typeof flags["debug-port"] === "string"
484
+ ? parseInt(flags["debug-port"], 10)
485
+ : 9800;
486
+ let result;
487
+ switch (subcommand) {
488
+ case "routes": {
489
+ logger.step("inspect", "Listing all routes...");
490
+ result = await inspectRoutes(rootDir, config);
491
+ break;
492
+ }
493
+ case "route": {
494
+ const routeKey = positional[0];
495
+ if (!routeKey) {
496
+ return {
497
+ success: false,
498
+ data: null,
499
+ error: "Usage: typokit inspect route 'GET /users/:id'",
500
+ };
501
+ }
502
+ logger.step("inspect", `Looking up route: ${routeKey}`);
503
+ result = await inspectRoute(rootDir, config, routeKey);
504
+ break;
505
+ }
506
+ case "middleware": {
507
+ logger.step("inspect", "Listing middleware chain...");
508
+ result = await inspectMiddleware(rootDir, config);
509
+ break;
510
+ }
511
+ case "dependencies":
512
+ case "deps": {
513
+ logger.step("inspect", "Building dependency graph...");
514
+ result = await inspectDependencies(rootDir, config);
515
+ break;
516
+ }
517
+ case "schema": {
518
+ const typeName = positional[0];
519
+ if (!typeName) {
520
+ return {
521
+ success: false,
522
+ data: null,
523
+ error: "Usage: typokit inspect schema <TypeName>",
524
+ };
525
+ }
526
+ logger.step("inspect", `Looking up schema: ${typeName}`);
527
+ result = await inspectSchema(rootDir, config, typeName);
528
+ break;
529
+ }
530
+ case "errors": {
531
+ const lastN = typeof flags["last"] === "string" ? parseInt(flags["last"], 10) : 10;
532
+ logger.step("inspect", `Fetching last ${lastN} errors...`);
533
+ result = await inspectErrors(debugPort, lastN);
534
+ break;
535
+ }
536
+ case "performance": {
537
+ const routePath = typeof flags["route"] === "string" ? flags["route"] : "/";
538
+ logger.step("inspect", `Fetching performance for: ${routePath}`);
539
+ result = await inspectPerformance(debugPort, routePath);
540
+ break;
541
+ }
542
+ case "server": {
543
+ logger.step("inspect", "Querying server info...");
544
+ result = await inspectServer(debugPort);
545
+ break;
546
+ }
547
+ case "build-pipeline": {
548
+ logger.step("inspect", "Listing build pipeline hooks...");
549
+ result = await inspectBuildPipeline(rootDir, config);
550
+ break;
551
+ }
552
+ default: {
553
+ logger.error(`Unknown inspect subcommand: ${subcommand}`);
554
+ logger.info("Available subcommands:");
555
+ logger.info(" routes List all registered routes");
556
+ logger.info(" route <key> Detailed single route info");
557
+ logger.info(" middleware Full middleware chain");
558
+ logger.info(" dependencies Service dependency graph");
559
+ logger.info(" schema <TypeName> Type details and usage");
560
+ logger.info(" errors --last <N> Recent errors (requires running server)");
561
+ logger.info(" performance --route <path> Latency percentiles (requires running server)");
562
+ logger.info(" server Active server adapter info");
563
+ logger.info(" build-pipeline Registered build hooks and order");
564
+ return {
565
+ success: false,
566
+ data: null,
567
+ error: `Unknown inspect subcommand: ${subcommand}`,
568
+ };
569
+ }
570
+ }
571
+ if (result.success) {
572
+ writeOutput(result.data, json, logger);
573
+ }
574
+ else if (result.error) {
575
+ logger.error(result.error);
576
+ }
577
+ return result;
578
+ }
579
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}