@supernovaio/cli 2.0.40 → 2.0.42

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 (86) hide show
  1. package/dist/code-analyzer/analyzers/component-usage.js.map +1 -1
  2. package/dist/code-analyzer/analyzers/helpers.js.map +1 -1
  3. package/dist/code-analyzer/analyzers/index.js.map +1 -1
  4. package/dist/code-analyzer/analyzers/jsdoc.js.map +1 -1
  5. package/dist/code-analyzer/analyzers/static-components.js.map +1 -1
  6. package/dist/code-analyzer/analyzers/storybook-docs.js.map +1 -1
  7. package/dist/code-analyzer/analyzers/storybook-stories.js.map +1 -1
  8. package/dist/code-analyzer/analyzers/types.js.map +1 -1
  9. package/dist/code-analyzer/analyzers/typescript-api.js.map +1 -1
  10. package/dist/code-analyzer/components/analyze.js.map +1 -1
  11. package/dist/code-analyzer/components/mappers/component.js.map +1 -1
  12. package/dist/code-analyzer/components/mappers/property.js.map +1 -1
  13. package/dist/code-analyzer/components/parser/index.js.map +1 -1
  14. package/dist/code-analyzer/components/parser/module-parser.js.map +1 -1
  15. package/dist/code-analyzer/components/parser/parser.js.map +1 -1
  16. package/dist/code-analyzer/components/parser/types.js.map +1 -1
  17. package/dist/code-analyzer/components/parser/utils/build-filter.js.map +1 -1
  18. package/dist/code-analyzer/components/parser/utils/filter-duplicates.js.map +1 -1
  19. package/dist/code-analyzer/components/parser/utils/is-react-component.js.map +1 -1
  20. package/dist/code-analyzer/components/parser/utils/trim-file-name.js.map +1 -1
  21. package/dist/code-analyzer/components/types.js.map +1 -1
  22. package/dist/code-analyzer/components/utils/get-module-exports-path.js.map +1 -1
  23. package/dist/code-analyzer/index.js.map +1 -1
  24. package/dist/code-analyzer/orchestrator/index.js.map +1 -1
  25. package/dist/code-analyzer/orchestrator/run-analysis.js.map +1 -1
  26. package/dist/code-analyzer/snapshot/index.js.map +1 -1
  27. package/dist/code-analyzer/snapshot/write-snapshot.js.map +1 -1
  28. package/dist/commands/analyze/adoption.js.map +1 -1
  29. package/dist/commands/analyze/components.js.map +1 -1
  30. package/dist/commands/analyze/status.js.map +1 -1
  31. package/dist/commands/analyze.d.ts +0 -1
  32. package/dist/commands/analyze.d.ts.map +1 -1
  33. package/dist/commands/analyze.js +25 -5
  34. package/dist/commands/analyze.js.map +1 -1
  35. package/dist/commands/components-import.js.map +1 -1
  36. package/dist/commands/describe-design-system.js.map +1 -1
  37. package/dist/commands/describe-workspaces.js.map +1 -1
  38. package/dist/commands/login.js.map +1 -1
  39. package/dist/commands/logout.js.map +1 -1
  40. package/dist/commands/publish-documentation.js.map +1 -1
  41. package/dist/commands/run-local-exporter.js.map +1 -1
  42. package/dist/commands/storybook-import.js.map +1 -1
  43. package/dist/commands/sync-tokens.js.map +1 -1
  44. package/dist/commands/template-upload.d.ts.map +1 -1
  45. package/dist/commands/template-upload.js +41 -9
  46. package/dist/commands/template-upload.js.map +1 -1
  47. package/dist/commands/whoami.js.map +1 -1
  48. package/dist/docker-scripts/extract-private-packages-tarball.js +282 -0
  49. package/dist/hooks/postrun/save-config.js.map +1 -1
  50. package/dist/hooks/prerun/load-config.js.map +1 -1
  51. package/dist/hooks/prerun/sentry.js.map +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/services/auth.service.js.map +1 -1
  54. package/dist/services/index.js.map +1 -1
  55. package/dist/services/user.service.d.ts.map +1 -1
  56. package/dist/services/user.service.js.map +1 -1
  57. package/dist/services/vault.service.js.map +1 -1
  58. package/dist/types/base-command.js.map +1 -1
  59. package/dist/types/config.js.map +1 -1
  60. package/dist/types/environment.js.map +1 -1
  61. package/dist/types/flags.js.map +1 -1
  62. package/dist/types/index.js.map +1 -1
  63. package/dist/types/login.js.map +1 -1
  64. package/dist/types/not-authorized.error.js.map +1 -1
  65. package/dist/types/sentry-command.js.map +1 -1
  66. package/dist/types/types.js.map +1 -1
  67. package/dist/utils/analyze-command.d.ts.map +1 -1
  68. package/dist/utils/analyze-command.js +29 -2
  69. package/dist/utils/analyze-command.js.map +1 -1
  70. package/dist/utils/analyze-status.js.map +1 -1
  71. package/dist/utils/api-client.js.map +1 -1
  72. package/dist/utils/common.js.map +1 -1
  73. package/dist/utils/config.service.js.map +1 -1
  74. package/dist/utils/discover.d.ts +1 -1
  75. package/dist/utils/discover.d.ts.map +1 -1
  76. package/dist/utils/discover.js +5 -5
  77. package/dist/utils/discover.js.map +1 -1
  78. package/dist/utils/figma-tokens-data-loader.js.map +1 -1
  79. package/dist/utils/http-client.js.map +1 -1
  80. package/dist/utils/index.js.map +1 -1
  81. package/dist/utils/run-exporter/exporter-utils.js.map +1 -1
  82. package/dist/utils/sdk.js.map +1 -1
  83. package/dist/utils/validate-templates.js.map +1 -1
  84. package/oclif.manifest.json +6 -5
  85. package/package.json +11 -11
  86. package/dist/docker-scripts/extract-private-packages.js +0 -74
@@ -1,9 +1,10 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="48ae5534-bfe7-5b1e-a760-916b78e71f6d")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b1b0f3f1-2050-5c37-9714-32da972b95c4")}catch(e){}}();
3
3
  import { Flags } from "@oclif/core";
4
4
  import { runCodeAnalysis } from "../code-analyzer/orchestrator/run-analysis.js";
5
5
  import AdmZip from "adm-zip";
6
6
  import axios, { isAxiosError } from "axios";
7
+ import { globSync } from "glob";
7
8
  import crypto from "node:crypto";
8
9
  import fs from "node:fs";
9
10
  import path from "node:path";
@@ -390,6 +391,13 @@ function resolveCandidatePackageDirs(rootDir) {
390
391
  if (workspacePackageDirs.length > 0) {
391
392
  return workspacePackageDirs;
392
393
  }
394
+ const rootPackageJsonPath = path.join(rootDir, "package.json");
395
+ if (!fs.existsSync(rootPackageJsonPath)) {
396
+ const recursivePackageDirs = resolveRecursivePackageDirs(rootDir);
397
+ if (recursivePackageDirs.length > 0) {
398
+ return recursivePackageDirs;
399
+ }
400
+ }
393
401
  return resolveDirectChildPackageDirs(rootDir);
394
402
  }
395
403
  function resolveWorkspacePackageDirs(rootDir) {
@@ -446,6 +454,25 @@ function resolveDirectChildPackageDirs(rootDir) {
446
454
  }
447
455
  return result;
448
456
  }
457
+ function resolveRecursivePackageDirs(rootDir) {
458
+ const packageJsonPaths = globSync("**/package.json", {
459
+ absolute: true,
460
+ cwd: rootDir,
461
+ dot: false,
462
+ ignore: [
463
+ "**/.git/**",
464
+ "**/.next/**",
465
+ "**/.supernova/**",
466
+ "**/build/**",
467
+ "**/coverage/**",
468
+ "**/dist/**",
469
+ "**/node_modules/**",
470
+ "**/out/**",
471
+ ],
472
+ nodir: true,
473
+ });
474
+ return [...new Set(packageJsonPaths.map(packageJsonPath => path.dirname(packageJsonPath)))].sort((a, b) => a.localeCompare(b));
475
+ }
449
476
  function resolveComponentPackageNames(rootDir, candidatePackageDirs, componentPackages) {
450
477
  const byName = new Map(candidatePackageDirs.map(packageDir => [readPackageName(packageDir), packageDir]));
451
478
  const names = new Set();
@@ -603,4 +630,4 @@ function formatStatus(status) {
603
630
  return `${colors[status]}${labels[status]}\u001B[0m`;
604
631
  }
605
632
  //# sourceMappingURL=analyze-command.js.map
606
- //# debugId=48ae5534-bfe7-5b1e-a760-916b78e71f6d
633
+ //# debugId=b1b0f3f1-2050-5c37-9714-32da972b95c4
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-command.js","sources":["../../src/utils/analyze-command.ts"],"sourceRoot":"","sourcesContent":["import { Flags } from \"@oclif/core\"\nimport { runCodeAnalysis } from \"../code-analyzer/orchestrator/run-analysis.js\"\nimport AdmZip from \"adm-zip\"\nimport axios, { isAxiosError } from \"axios\"\nimport crypto from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { z, ZodType } from \"zod\"\n\nimport { SentryCommand } from \"../types/index.js\"\nimport { SupernovaConfigAnalyze } from \"../types/config.js\"\nimport { watchAnalyzeStatus } from \"./analyze-status.js\"\nimport { createApiClient } from \"./http-client.js\"\n\nexport const AnalyzeCommandConfigSchema = z.object({\n exclude: z.array(z.string()).optional(),\n designSystemId: z.string().optional(),\n package: z.union([z.string(), z.array(z.string())]).optional(),\n dryRun: z.boolean().optional(),\n noWait: z.boolean().optional(),\n})\n\nexport type AnalyzeCommandConfig = z.infer<typeof AnalyzeCommandConfigSchema>\nexport type ScannerType = \"all\" | \"components\" | \"usage\"\ntype UploadScannerType = Exclude<ScannerType, \"all\">\n\ntype SnapshotUploadInitResponse = {\n fileId: string\n snapshotId: string\n uploadUrl: string\n}\n\ntype StartProcessingRunResponse = {\n processingRunId: string\n snapshotIds: string[]\n}\n\ntype ApiResultEnvelope<T> = {\n result: T\n}\n\ntype AnalyzeTarget = {\n importFrom: string | string[]\n rootDir: string\n}\n\ntype ExecutionTarget = {\n discovery: boolean\n importFrom: string | string[]\n rootDir: string\n scanType: UploadScannerType\n}\n\ntype PreparedSnapshotUpload = {\n localSnapshotId: string\n packageLabel: string\n pathLabel: string\n repoId: string\n repoPackageName: string\n scannerType: UploadScannerType\n snapshotRoot: string\n targetId: string\n}\n\ntype PlannedExecutionTarget = {\n analyzeTarget: AnalyzeTarget | null\n executionTarget: ExecutionTarget\n packageLabel: string\n pathLabel: string\n targetId: string\n}\n\ntype ComponentUsageSnapshot = {\n meta?: {\n importFromPackages?: string[]\n }\n records?: Record<string, { count?: number }>\n}\n\nexport const analyzeFlags = {\n designSystemId: Flags.string({ char: \"d\", description: \"Design system ID\" }),\n package: Flags.string({\n char: \"p\",\n description: \"Package name eg. @design-system-package. Can be repeated.\",\n multiple: true,\n }),\n exclude: Flags.string({\n description: \"Path to exclude from stories/docs/adoption scan. Can be repeated.\",\n multiple: true,\n }),\n dryRun: Flags.boolean({\n description: \"Run and write local snapshot only. Never uploads.\",\n default: false,\n }),\n noWait: Flags.boolean({\n description: \"Start processing and exit without waiting for completion.\",\n default: false,\n }),\n}\n\nexport abstract class AnalyzeCommandBase extends SentryCommand<AnalyzeCommandConfig> {\n get commandId(): string {\n return this.id ?? this.constructor.name\n }\n\n get configSchema(): ZodType<AnalyzeCommandConfig> {\n return AnalyzeCommandConfigSchema\n }\n\n protected async executeAnalyze(flags: AnalyzeCommandConfig, scannerType: ScannerType): Promise<void> {\n const rootDir = process.cwd()\n const config = this.configService.get()\n const analyzeConfig = config?.analyze ?? {}\n const configuredDesignSystemId = config?.designSystemId\n\n const packageFlags = normalizeStringList(flags.package)\n const configuredPackages = normalizeStringList(analyzeConfig.packages)\n const componentPackages = packageFlags.length > 0 ? packageFlags : configuredPackages\n if (componentPackages.length === 0) {\n this.error(\"Parameter --package is required.\")\n }\n\n const excludedPackages = normalizeStringList(analyzeConfig.excludedPackages)\n const repoId = analyzeConfig.repoId ?? crypto.randomUUID()\n const dryRun = flags.dryRun ?? false\n const noWait = flags.noWait ?? false\n const analyzeDesignSystemId = flags.designSystemId ?? configuredDesignSystemId\n const uploadContext = dryRun\n ? null\n : {\n apiClient: await createApiClient(this.env),\n designSystemId: analyzeDesignSystemId ?? (await this.promptDesignSystemId()),\n }\n\n const executionTargets = resolveExecutionTargets({\n componentPackages,\n excludedPackages,\n rootDir,\n scannerType,\n })\n\n const plannedTargets = executionTargets.map((executionTarget, index) =>\n createPlannedExecutionTarget({\n executionTarget,\n index,\n rootDir,\n total: executionTargets.length,\n }),\n )\n\n this.logPhase(\"Analyze started\")\n this.log(`Root: ${path.basename(rootDir) || rootDir}`)\n this.log(`Targets: ${plannedTargets.length}`)\n this.log(`Scan types: ${summarizeScanTypes(executionTargets)}`)\n\n this.logPhase(\"Plan\")\n for (const plannedTarget of plannedTargets) {\n const discoverySuffix = plannedTarget.executionTarget.discovery ? \" discovery\" : \"\"\n this.log(\n `${plannedTarget.targetId} ${padScanType(plannedTarget.executionTarget.scanType)} pkg=${plannedTarget.packageLabel} path=${plannedTarget.pathLabel}${discoverySuffix}`,\n )\n }\n\n const preparedUploads: PreparedSnapshotUpload[] = []\n let skippedTargets = 0\n let skippedNoAdoption = 0\n let skippedNoComponents = 0\n\n this.logPhase(\"Analyze phase\")\n for (const plannedTarget of plannedTargets) {\n const { analyzeTarget, executionTarget, packageLabel, pathLabel, targetId } = plannedTarget\n\n this.log(\n `${targetId} ${formatStatus(\"start\")} ${padScanType(executionTarget.scanType)} path=${pathLabel} pkg=${packageLabel}`,\n )\n\n if (executionTarget.scanType === \"components\" && !analyzeTarget) {\n const nodeModulesMessage = createMissingComponentsSourceMessage(executionTarget.importFrom)\n if (scannerType === \"components\") {\n this.error(nodeModulesMessage)\n }\n\n skippedTargets += 1\n this.log(`${targetId} ${formatStatus(\"skip\")} ${padScanType(executionTarget.scanType)} ${nodeModulesMessage}`)\n continue\n }\n\n if (!analyzeTarget) {\n this.error(`Analyze target could not be resolved for ${stringifyImportFrom(executionTarget.importFrom)}.`)\n }\n\n const analysisResult = await runCodeAnalysis({\n designSystemId: analyzeDesignSystemId,\n excludePaths: flags.exclude,\n importFrom: analyzeTarget.importFrom,\n mode: executionTarget.scanType,\n projectRoot: analyzeTarget.rootDir,\n snapshotBaseRoot: shouldWriteSnapshotsToExecutionRoot(analyzeTarget.rootDir) ? rootDir : undefined,\n })\n\n const hasUsage = executionTarget.scanType === \"usage\" && hasUsageInSnapshot(analysisResult.snapshotRoot)\n if (executionTarget.scanType === \"usage\" && !hasUsage) {\n skippedTargets += 1\n skippedNoAdoption += 1\n this.log(`${targetId} ${formatStatus(\"skip\")} ${padScanType(executionTarget.scanType)} no adoption detected`)\n continue\n }\n\n if (executionTarget.scanType === \"components\" && analysisResult.components.length === 0) {\n skippedTargets += 1\n skippedNoComponents += 1\n this.log(`${targetId} ${formatStatus(\"skip\")} ${padScanType(executionTarget.scanType)} no components detected`)\n continue\n }\n\n if (executionTarget.scanType === \"components\") {\n this.log(\n `${targetId} ${formatStatus(\"done\")} ${padScanType(executionTarget.scanType)} snapshot=${analysisResult.snapshotId} count=${analysisResult.components.length}`,\n )\n } else {\n this.log(\n `${targetId} ${formatStatus(\"done\")} ${padScanType(executionTarget.scanType)} snapshot=${analysisResult.snapshotId} count=${countUsageRecordsInSnapshot(analysisResult.snapshotRoot)}`,\n )\n }\n\n preparedUploads.push({\n localSnapshotId: analysisResult.snapshotId,\n packageLabel,\n pathLabel,\n repoId,\n repoPackageName: readPackageName(analyzeTarget.rootDir),\n scannerType: executionTarget.scanType,\n snapshotRoot: analysisResult.snapshotRoot,\n targetId,\n })\n }\n\n this.logPhase(\"Analyze summary\")\n this.log(`Local snapshots: ${preparedUploads.length}`)\n this.log(`Skipped: ${skippedTargets}`)\n if (skippedNoAdoption > 0) {\n this.log(`- no adoption: ${skippedNoAdoption}`)\n }\n\n if (skippedNoComponents > 0) {\n this.log(`- no components: ${skippedNoComponents}`)\n }\n\n if (preparedUploads.length === 0) {\n this.log(\"No analyzable results found. You are likely running the command from the wrong directory.\")\n return\n }\n\n this.log(`Ready to upload: ${preparedUploads.length}`)\n\n if (dryRun) {\n this.persistAnalyzeConfig({\n analyzeConfig,\n designSystemId: analyzeDesignSystemId,\n excludedPackages,\n packages: componentPackages,\n repoId,\n })\n this.log(\"Upload skipped (dry-run enabled).\")\n return\n }\n\n if (!uploadContext) {\n this.error(\"Upload context is missing.\")\n }\n\n const { apiClient, designSystemId } = uploadContext\n this.logPhase(\"Upload phase\")\n const uploadResults = await Promise.allSettled(\n preparedUploads.map((upload, index) =>\n this.uploadSnapshot({\n apiClient,\n designSystemId,\n uploadId: formatSequenceId(\"U\", index + 1, preparedUploads.length),\n repoId: upload.repoId,\n repoPackageName: upload.repoPackageName,\n scannerType: upload.scannerType,\n snapshotRoot: upload.snapshotRoot,\n localSnapshotId: upload.localSnapshotId,\n packageLabel: upload.packageLabel,\n pathLabel: upload.pathLabel,\n targetId: upload.targetId,\n }),\n ),\n )\n const failedUploads = uploadResults.filter(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n )\n\n if (failedUploads.length > 0) {\n throw new AggregateError(\n failedUploads.map(failure => failure.reason),\n `${failedUploads.length} snapshot upload(s) failed.`,\n )\n }\n\n this.logPhase(\"Upload summary\")\n this.log(`Uploaded snapshots: ${preparedUploads.length}/${preparedUploads.length}`)\n this.log(`- components: ${preparedUploads.filter(upload => upload.scannerType === \"components\").length}`)\n this.log(`- usage: ${preparedUploads.filter(upload => upload.scannerType === \"usage\").length}`)\n\n const processingRun = await this.startProcessingRun({\n apiClient,\n designSystemId,\n })\n\n this.persistAnalyzeConfig({\n analyzeConfig,\n designSystemId,\n excludedPackages,\n packages: componentPackages,\n repoId,\n })\n\n if (noWait) {\n this.log(\"Processing continues in the background. Use `supernova analyze status` to check progress.\")\n return\n }\n\n this.logPhase(\"Watch phase\")\n await watchAnalyzeStatus({\n apiClient,\n designSystemId,\n error: message => this.error(message),\n })\n\n this.logPhase(\"Analyze complete\")\n this.log(`Processing run: ${processingRun.processingRunId}`)\n this.log(`Uploaded: ${preparedUploads.length}/${preparedUploads.length}`)\n }\n\n private logPhase(title: string): void {\n this.log(\"\")\n this.log(title)\n }\n\n private persistAnalyzeConfig(input: {\n analyzeConfig: SupernovaConfigAnalyze | Record<string, never>\n designSystemId?: string\n excludedPackages: string[]\n packages: string[]\n repoId: string\n }): void {\n const { analyzeConfig, designSystemId, excludedPackages, packages, repoId } = input\n\n this.configService.update({\n analyze: {\n ...analyzeConfig,\n repoId,\n packages,\n excludedPackages,\n },\n ...(designSystemId ? { designSystemId } : {}),\n })\n }\n\n private async uploadSnapshot(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n localSnapshotId: string\n packageLabel: string\n pathLabel: string\n repoId: string\n repoPackageName: string\n scannerType: UploadScannerType\n snapshotRoot: string\n targetId: string\n uploadId: string\n }): Promise<void> {\n const {\n apiClient,\n designSystemId,\n localSnapshotId,\n packageLabel,\n pathLabel,\n repoId,\n repoPackageName,\n scannerType,\n snapshotRoot,\n targetId,\n uploadId,\n } = input\n const initPath = `/code-snapshots/upload`\n const local = await this.createArchiveFromSnapshotRoot(snapshotRoot)\n\n const initPayload = {\n archiveChecksum: local.checksum,\n archiveName: local.archiveName,\n archiveSize: local.sizeBytes,\n designSystemId,\n repoId,\n repoPackageName,\n scannerType: toApiScannerType(scannerType),\n }\n\n this.log(\n `${uploadId} ${formatStatus(\"start\")} ${padScanType(scannerType)} source=${targetId} path=${pathLabel} pkg=${packageLabel} snapshot=${localSnapshotId}`,\n )\n let initResponse: SnapshotUploadInitResponse\n try {\n const response = await apiClient.post<ApiResultEnvelope<SnapshotUploadInitResponse>>(initPath, initPayload)\n initResponse = response.data.result\n this.log(`${uploadId} INIT ${formatStatus(\"done\")}`)\n } catch (error) {\n this.log(`${uploadId} INIT ${formatStatus(\"fail\")}`)\n this.logHttpError(\"upload init\", error)\n this.error(`Snapshot upload initialization failed (${scannerType}).`)\n }\n\n if (!initResponse.uploadUrl) {\n this.error(`Snapshot upload init response does not contain uploadUrl (${scannerType}).`)\n }\n\n try {\n await axios.put(initResponse.uploadUrl, local.archive, {\n headers: {\n \"Content-Length\": local.archive.length,\n \"Content-Type\": \"application/zip\",\n },\n })\n this.log(`${uploadId} PUT ${formatStatus(\"done\")}`)\n } catch (error) {\n this.log(`${uploadId} PUT ${formatStatus(\"fail\")}`)\n this.logHttpError(\"signed upload PUT\", error)\n this.error(`Snapshot archive upload failed (${scannerType}).`)\n }\n\n const finalizePath = `/code-snapshots/${initResponse.snapshotId}/finalize`\n try {\n await apiClient.post(finalizePath, {})\n this.log(`${uploadId} FINAL ${formatStatus(\"done\")} remoteSnapshotId=${initResponse.snapshotId}`)\n } catch (error) {\n this.log(`${uploadId} FINAL ${formatStatus(\"fail\")}`)\n this.logHttpError(\"finalize\", error)\n this.error(`Snapshot finalize failed (${scannerType}).`)\n }\n }\n\n private async startProcessingRun(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n }): Promise<StartProcessingRunResponse> {\n const { apiClient, designSystemId } = input\n const processingPath = `/code-snapshots/process-run`\n this.logPhase(\"Processing phase\")\n this.log(`${formatStatus(\"start\")} processing run`)\n try {\n const response = await apiClient.post<ApiResultEnvelope<StartProcessingRunResponse>>(processingPath, {\n designSystemId,\n })\n this.log(\n `${formatStatus(\"done\")} processing run id=${response.data.result.processingRunId} snapshots=${response.data.result.snapshotIds.length}`,\n )\n return response.data.result\n } catch (error) {\n this.log(`${formatStatus(\"fail\")} processing run`)\n this.logHttpError(\"process-run\", error)\n this.error(\"Failed to start batch processing run.\")\n }\n }\n\n private async createArchiveFromSnapshotRoot(\n snapshotRoot: string,\n ): Promise<{ archive: Buffer; archiveName: string; checksum: string; sizeBytes: number }> {\n const zip = new AdmZip()\n zip.addLocalFolder(snapshotRoot)\n const archive = zip.toBuffer()\n const checksum = crypto.createHash(\"sha256\").update(archive).digest(\"hex\")\n\n return {\n archive,\n archiveName: `${path.basename(snapshotRoot)}.zip`,\n checksum,\n sizeBytes: archive.byteLength,\n }\n }\n\n private logHttpError(step: string, error: unknown): void {\n if (isAxiosError(error)) {\n const status = error.response?.status\n const data =\n typeof error.response?.data === \"string\" ? error.response.data : JSON.stringify(error.response?.data, null, 2)\n this.log(`${step}, http error${status ? ` ${status}` : \"\"}: ${data ?? error.message}`)\n return\n }\n\n this.log(`${step}, error: ${error instanceof Error ? error.message : String(error)}`)\n }\n}\n\nfunction toApiScannerType(scannerType: UploadScannerType): \"Components\" | \"Usage\" {\n return scannerType === \"components\" ? \"Components\" : \"Usage\"\n}\n\nfunction readPackageName(rootDir: string): string {\n const packageJsonPath = path.join(rootDir, \"package.json\")\n if (!fs.existsSync(packageJsonPath)) {\n return path.basename(rootDir)\n }\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { name?: string }\n return packageJson.name ?? path.basename(rootDir)\n}\n\nfunction resolveExecutionTargets(input: {\n componentPackages: string[]\n excludedPackages: string[]\n rootDir: string\n scannerType: ScannerType\n}): ExecutionTarget[] {\n const result: ExecutionTarget[] = []\n\n if (input.scannerType === \"components\" || input.scannerType === \"all\") {\n result.push(\n ...input.componentPackages.map<ExecutionTarget>(importFrom => ({\n discovery: false,\n importFrom,\n rootDir: input.rootDir,\n scanType: \"components\",\n })),\n )\n }\n\n if (input.scannerType === \"usage\" || input.scannerType === \"all\") {\n result.push(\n ...resolveUsageExecutionTargets({\n componentPackages: input.componentPackages,\n excludedPackages: input.excludedPackages,\n rootDir: input.rootDir,\n }),\n )\n }\n\n return result\n}\n\nfunction resolveUsageExecutionTargets(input: {\n componentPackages: string[]\n excludedPackages: string[]\n rootDir: string\n}): ExecutionTarget[] {\n const { componentPackages, excludedPackages, rootDir } = input\n const candidatePackageDirs = resolveCandidatePackageDirs(rootDir)\n const excludedNames = new Set(excludedPackages)\n const componentPackageNames = resolveComponentPackageNames(rootDir, candidatePackageDirs, componentPackages)\n\n if (candidatePackageDirs.length <= 1) {\n const rootPackageName = readPackageName(rootDir)\n if (excludedNames.has(rootPackageName)) {\n return []\n }\n\n return [{ discovery: false, importFrom: componentPackages, rootDir, scanType: \"usage\" }]\n }\n\n return candidatePackageDirs\n .filter(packageDir => {\n const packageName = readPackageName(packageDir)\n return !excludedNames.has(packageName) && !componentPackageNames.has(packageName)\n })\n .map(packageDir => ({\n discovery: true,\n importFrom: componentPackages,\n rootDir: packageDir,\n scanType: \"usage\" as const,\n }))\n}\n\ntype WorkspacePackageJson = {\n workspaces?: string[] | { packages?: string[] }\n}\n\nfunction resolveCandidatePackageDirs(rootDir: string): string[] {\n const workspacePackageDirs = resolveWorkspacePackageDirs(rootDir)\n if (workspacePackageDirs.length > 0) {\n return workspacePackageDirs\n }\n\n return resolveDirectChildPackageDirs(rootDir)\n}\n\nfunction resolveWorkspacePackageDirs(rootDir: string): string[] {\n const rootPackageJsonPath = path.join(rootDir, \"package.json\")\n if (!fs.existsSync(rootPackageJsonPath)) {\n return []\n }\n\n const rootPackageJson = JSON.parse(fs.readFileSync(rootPackageJsonPath, \"utf8\")) as WorkspacePackageJson\n const workspacePatterns = Array.isArray(rootPackageJson.workspaces)\n ? rootPackageJson.workspaces\n : (rootPackageJson.workspaces?.packages ?? [])\n\n const packageDirs: string[] = []\n for (const pattern of workspacePatterns) {\n const normalized = pattern.replaceAll(\"\\\\\", \"/\")\n if (!normalized.includes(\"*\")) {\n const workspaceDir = path.resolve(rootDir, normalized)\n if (fs.existsSync(path.join(workspaceDir, \"package.json\"))) {\n packageDirs.push(workspaceDir)\n }\n\n continue\n }\n\n if (!normalized.endsWith(\"/*\")) {\n continue\n }\n\n const baseDir = path.resolve(rootDir, normalized.slice(0, -2))\n if (!fs.existsSync(baseDir) || !fs.statSync(baseDir).isDirectory()) {\n continue\n }\n\n for (const entry of fs.readdirSync(baseDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n const candidate = path.join(baseDir, entry.name)\n if (fs.existsSync(path.join(candidate, \"package.json\"))) {\n packageDirs.push(candidate)\n }\n }\n }\n\n return [...new Set(packageDirs)]\n}\n\nfunction resolveDirectChildPackageDirs(rootDir: string): string[] {\n if (!fs.existsSync(rootDir) || !fs.statSync(rootDir).isDirectory()) {\n return []\n }\n\n const result: string[] = []\n for (const entry of fs.readdirSync(rootDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n const packageDir = path.join(rootDir, entry.name)\n if (fs.existsSync(path.join(packageDir, \"package.json\"))) {\n result.push(packageDir)\n }\n }\n\n return result\n}\n\nfunction resolveComponentPackageNames(\n rootDir: string,\n candidatePackageDirs: string[],\n componentPackages: string[],\n): Set<string> {\n const byName = new Map(candidatePackageDirs.map(packageDir => [readPackageName(packageDir), packageDir]))\n const names = new Set<string>()\n\n for (const componentPackage of componentPackages) {\n if (byName.has(componentPackage)) {\n names.add(componentPackage)\n continue\n }\n\n const explicitPath = path.resolve(rootDir, componentPackage)\n if (!fs.existsSync(explicitPath) || !fs.statSync(explicitPath).isDirectory()) {\n continue\n }\n\n names.add(readPackageName(explicitPath))\n }\n\n return names\n}\n\nfunction hasUsageInSnapshot(snapshotRoot: string): boolean {\n return countUsageRecordsInSnapshot(snapshotRoot) > 0\n}\n\nfunction countUsageRecordsInSnapshot(snapshotRoot: string): number {\n const usageFilePath = path.join(snapshotRoot, \"raw\", \"component-usage.json\")\n if (!fs.existsSync(usageFilePath)) {\n return 0\n }\n\n try {\n const usageJson = JSON.parse(fs.readFileSync(usageFilePath, \"utf8\")) as ComponentUsageSnapshot\n const usageRecords = usageJson.records ?? {}\n return Object.values(usageRecords).filter(item => (item.count ?? 0) > 0).length\n } catch {\n return 0\n }\n}\n\nfunction shouldWriteSnapshotsToExecutionRoot(projectRoot: string): boolean {\n return projectRoot.split(path.sep).includes(\"node_modules\")\n}\n\nfunction resolveAnalyzeTarget(input: {\n importFrom: string | string[]\n rootDir: string\n scannerType: UploadScannerType\n}): AnalyzeTarget | null {\n if (input.scannerType === \"usage\") {\n return { importFrom: input.importFrom, rootDir: input.rootDir }\n }\n\n const importFrom = Array.isArray(input.importFrom) ? input.importFrom[0] : input.importFrom\n if (!importFrom) {\n return { importFrom: \".\", rootDir: input.rootDir }\n }\n\n if (readPackageName(input.rootDir) === importFrom) {\n if (hasSourceEntry(input.rootDir)) {\n return { importFrom: \"src\", rootDir: input.rootDir }\n }\n\n return { importFrom: \".\", rootDir: input.rootDir }\n }\n\n const workspacePackageDir = findPackageDirByName(resolveCandidatePackageDirs(input.rootDir), importFrom)\n if (workspacePackageDir) {\n if (hasSourceEntry(workspacePackageDir)) {\n return { importFrom: \"src\", rootDir: workspacePackageDir }\n }\n\n return { importFrom: \".\", rootDir: workspacePackageDir }\n }\n\n const explicitPath = path.resolve(input.rootDir, importFrom)\n if (fs.existsSync(explicitPath) && fs.statSync(explicitPath).isDirectory()) {\n if (hasSourceEntry(explicitPath)) {\n return { importFrom: \"src\", rootDir: explicitPath }\n }\n\n return { importFrom: \".\", rootDir: explicitPath }\n }\n\n return null\n}\n\nfunction normalizeStringList(value?: string | string[]): string[] {\n if (!value) {\n return []\n }\n\n const list = Array.isArray(value) ? value : [value]\n return [...new Set(list.map(item => item.trim()).filter(Boolean))]\n}\n\nfunction stringifyImportFrom(importFrom: string | string[]): string {\n return Array.isArray(importFrom) ? importFrom.join(\",\") : importFrom\n}\n\nfunction findPackageDirByName(packageDirs: string[], packageName: string): string | null {\n for (const packageDir of packageDirs) {\n const packageJsonPath = path.join(packageDir, \"package.json\")\n if (!fs.existsSync(packageJsonPath)) {\n continue\n }\n\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { name?: string }\n if (packageJson.name === packageName) {\n return packageDir\n }\n } catch {\n continue\n }\n }\n\n return null\n}\n\nfunction hasSourceEntry(packageDir: string): boolean {\n return (\n fs.existsSync(path.join(packageDir, \"src\", \"index.ts\")) || fs.existsSync(path.join(packageDir, \"src\", \"index.tsx\"))\n )\n}\n\nfunction createMissingComponentsSourceMessage(importFrom: string | string[]): string {\n return `Package ${stringifyImportFrom(importFrom)} could not be resolved from local source. Component analysis must run against source code, so the components scan was skipped. Run the command from the package source instead.`\n}\n\nfunction createPlannedExecutionTarget(input: {\n executionTarget: ExecutionTarget\n index: number\n rootDir: string\n total: number\n}): PlannedExecutionTarget {\n const { executionTarget, index, rootDir, total } = input\n const analyzeTarget = resolveAnalyzeTarget({\n importFrom: executionTarget.importFrom,\n rootDir: executionTarget.rootDir,\n scannerType: executionTarget.scanType,\n })\n\n return {\n analyzeTarget,\n executionTarget,\n packageLabel: stringifyImportFrom(executionTarget.importFrom),\n pathLabel: formatPathLabel(rootDir, analyzeTarget?.rootDir ?? executionTarget.rootDir),\n targetId: formatSequenceId(\"\", index + 1, total),\n }\n}\n\nfunction summarizeScanTypes(executionTargets: ExecutionTarget[]): string {\n const components = executionTargets.filter(target => target.scanType === \"components\").length\n const usage = executionTargets.filter(target => target.scanType === \"usage\").length\n return `${components} components, ${usage} usage`\n}\n\nfunction padScanType(scanType: UploadScannerType): string {\n return scanType.padEnd(\"components\".length, \" \")\n}\n\nfunction formatSequenceId(prefix: string, index: number, total: number): string {\n const width = String(total).length\n const left = String(index).padStart(width, \"0\")\n const right = String(total).padStart(width, \"0\")\n return `[${prefix}${left}/${right}]`\n}\n\nfunction formatPathLabel(rootDir: string, targetPath: string): string {\n const relativePath = path.relative(rootDir, targetPath) || \".\"\n if (relativePath.length <= 48) {\n return relativePath\n }\n\n const segments = relativePath.split(path.sep)\n return segments.length > 2 ? `.../${segments.slice(-2).join(\"/\")}` : relativePath\n}\n\nfunction formatStatus(status: \"done\" | \"fail\" | \"skip\" | \"start\"): string {\n const labels = {\n done: \"DONE \",\n fail: \"FAIL \",\n skip: \"SKIP \",\n start: \"START\",\n } as const\n\n const colorEnabled = process.stdout.isTTY && !process.env.NO_COLOR\n if (!colorEnabled) {\n return labels[status]\n }\n\n const colors = {\n done: \"\\u001B[32m\",\n fail: \"\\u001B[31m\",\n skip: \"\\u001B[33m\",\n start: \"\\u001B[36m\",\n } as const\n\n return `${colors[status]}${labels[status]}\\u001B[0m`\n}\n"],"names":[],"mappings":"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","debug_id":"48ae5534-bfe7-5b1e-a760-916b78e71f6d"}
1
+ {"version":3,"file":"analyze-command.js","sources":["../../src/utils/analyze-command.ts"],"sourceRoot":"","sourcesContent":["import { Flags } from \"@oclif/core\"\nimport { runCodeAnalysis } from \"../code-analyzer/orchestrator/run-analysis.js\"\nimport AdmZip from \"adm-zip\"\nimport axios, { isAxiosError } from \"axios\"\nimport { globSync } from \"glob\"\nimport crypto from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { z, ZodType } from \"zod\"\n\nimport { SentryCommand } from \"../types/index.js\"\nimport { SupernovaConfigAnalyze } from \"../types/config.js\"\nimport { watchAnalyzeStatus } from \"./analyze-status.js\"\nimport { createApiClient } from \"./http-client.js\"\n\nexport const AnalyzeCommandConfigSchema = z.object({\n exclude: z.array(z.string()).optional(),\n designSystemId: z.string().optional(),\n package: z.union([z.string(), z.array(z.string())]).optional(),\n dryRun: z.boolean().optional(),\n noWait: z.boolean().optional(),\n})\n\nexport type AnalyzeCommandConfig = z.infer<typeof AnalyzeCommandConfigSchema>\nexport type ScannerType = \"all\" | \"components\" | \"usage\"\ntype UploadScannerType = Exclude<ScannerType, \"all\">\n\ntype SnapshotUploadInitResponse = {\n fileId: string\n snapshotId: string\n uploadUrl: string\n}\n\ntype StartProcessingRunResponse = {\n processingRunId: string\n snapshotIds: string[]\n}\n\ntype ApiResultEnvelope<T> = {\n result: T\n}\n\ntype AnalyzeTarget = {\n importFrom: string | string[]\n rootDir: string\n}\n\ntype ExecutionTarget = {\n discovery: boolean\n importFrom: string | string[]\n rootDir: string\n scanType: UploadScannerType\n}\n\ntype PreparedSnapshotUpload = {\n localSnapshotId: string\n packageLabel: string\n pathLabel: string\n repoId: string\n repoPackageName: string\n scannerType: UploadScannerType\n snapshotRoot: string\n targetId: string\n}\n\ntype PlannedExecutionTarget = {\n analyzeTarget: AnalyzeTarget | null\n executionTarget: ExecutionTarget\n packageLabel: string\n pathLabel: string\n targetId: string\n}\n\ntype ComponentUsageSnapshot = {\n meta?: {\n importFromPackages?: string[]\n }\n records?: Record<string, { count?: number }>\n}\n\nexport const analyzeFlags = {\n designSystemId: Flags.string({ char: \"d\", description: \"Design system ID\" }),\n package: Flags.string({\n char: \"p\",\n description: \"Package name eg. @design-system-package. Can be repeated.\",\n multiple: true,\n }),\n exclude: Flags.string({\n description: \"Path to exclude from stories/docs/adoption scan. Can be repeated.\",\n multiple: true,\n }),\n dryRun: Flags.boolean({\n description: \"Run and write local snapshot only. Never uploads.\",\n default: false,\n }),\n noWait: Flags.boolean({\n description: \"Start processing and exit without waiting for completion.\",\n default: false,\n }),\n}\n\nexport abstract class AnalyzeCommandBase extends SentryCommand<AnalyzeCommandConfig> {\n get commandId(): string {\n return this.id ?? this.constructor.name\n }\n\n get configSchema(): ZodType<AnalyzeCommandConfig> {\n return AnalyzeCommandConfigSchema\n }\n\n protected async executeAnalyze(flags: AnalyzeCommandConfig, scannerType: ScannerType): Promise<void> {\n const rootDir = process.cwd()\n const config = this.configService.get()\n const analyzeConfig = config?.analyze ?? {}\n const configuredDesignSystemId = config?.designSystemId\n\n const packageFlags = normalizeStringList(flags.package)\n const configuredPackages = normalizeStringList(analyzeConfig.packages)\n const componentPackages = packageFlags.length > 0 ? packageFlags : configuredPackages\n if (componentPackages.length === 0) {\n this.error(\"Parameter --package is required.\")\n }\n\n const excludedPackages = normalizeStringList(analyzeConfig.excludedPackages)\n const repoId = analyzeConfig.repoId ?? crypto.randomUUID()\n const dryRun = flags.dryRun ?? false\n const noWait = flags.noWait ?? false\n const analyzeDesignSystemId = flags.designSystemId ?? configuredDesignSystemId\n const uploadContext = dryRun\n ? null\n : {\n apiClient: await createApiClient(this.env),\n designSystemId: analyzeDesignSystemId ?? (await this.promptDesignSystemId()),\n }\n\n const executionTargets = resolveExecutionTargets({\n componentPackages,\n excludedPackages,\n rootDir,\n scannerType,\n })\n\n const plannedTargets = executionTargets.map((executionTarget, index) =>\n createPlannedExecutionTarget({\n executionTarget,\n index,\n rootDir,\n total: executionTargets.length,\n }),\n )\n\n this.logPhase(\"Analyze started\")\n this.log(`Root: ${path.basename(rootDir) || rootDir}`)\n this.log(`Targets: ${plannedTargets.length}`)\n this.log(`Scan types: ${summarizeScanTypes(executionTargets)}`)\n\n this.logPhase(\"Plan\")\n for (const plannedTarget of plannedTargets) {\n const discoverySuffix = plannedTarget.executionTarget.discovery ? \" discovery\" : \"\"\n this.log(\n `${plannedTarget.targetId} ${padScanType(plannedTarget.executionTarget.scanType)} pkg=${plannedTarget.packageLabel} path=${plannedTarget.pathLabel}${discoverySuffix}`,\n )\n }\n\n const preparedUploads: PreparedSnapshotUpload[] = []\n let skippedTargets = 0\n let skippedNoAdoption = 0\n let skippedNoComponents = 0\n\n this.logPhase(\"Analyze phase\")\n for (const plannedTarget of plannedTargets) {\n const { analyzeTarget, executionTarget, packageLabel, pathLabel, targetId } = plannedTarget\n\n this.log(\n `${targetId} ${formatStatus(\"start\")} ${padScanType(executionTarget.scanType)} path=${pathLabel} pkg=${packageLabel}`,\n )\n\n if (executionTarget.scanType === \"components\" && !analyzeTarget) {\n const nodeModulesMessage = createMissingComponentsSourceMessage(executionTarget.importFrom)\n if (scannerType === \"components\") {\n this.error(nodeModulesMessage)\n }\n\n skippedTargets += 1\n this.log(`${targetId} ${formatStatus(\"skip\")} ${padScanType(executionTarget.scanType)} ${nodeModulesMessage}`)\n continue\n }\n\n if (!analyzeTarget) {\n this.error(`Analyze target could not be resolved for ${stringifyImportFrom(executionTarget.importFrom)}.`)\n }\n\n const analysisResult = await runCodeAnalysis({\n designSystemId: analyzeDesignSystemId,\n excludePaths: flags.exclude,\n importFrom: analyzeTarget.importFrom,\n mode: executionTarget.scanType,\n projectRoot: analyzeTarget.rootDir,\n snapshotBaseRoot: shouldWriteSnapshotsToExecutionRoot(analyzeTarget.rootDir) ? rootDir : undefined,\n })\n\n const hasUsage = executionTarget.scanType === \"usage\" && hasUsageInSnapshot(analysisResult.snapshotRoot)\n if (executionTarget.scanType === \"usage\" && !hasUsage) {\n skippedTargets += 1\n skippedNoAdoption += 1\n this.log(`${targetId} ${formatStatus(\"skip\")} ${padScanType(executionTarget.scanType)} no adoption detected`)\n continue\n }\n\n if (executionTarget.scanType === \"components\" && analysisResult.components.length === 0) {\n skippedTargets += 1\n skippedNoComponents += 1\n this.log(`${targetId} ${formatStatus(\"skip\")} ${padScanType(executionTarget.scanType)} no components detected`)\n continue\n }\n\n if (executionTarget.scanType === \"components\") {\n this.log(\n `${targetId} ${formatStatus(\"done\")} ${padScanType(executionTarget.scanType)} snapshot=${analysisResult.snapshotId} count=${analysisResult.components.length}`,\n )\n } else {\n this.log(\n `${targetId} ${formatStatus(\"done\")} ${padScanType(executionTarget.scanType)} snapshot=${analysisResult.snapshotId} count=${countUsageRecordsInSnapshot(analysisResult.snapshotRoot)}`,\n )\n }\n\n preparedUploads.push({\n localSnapshotId: analysisResult.snapshotId,\n packageLabel,\n pathLabel,\n repoId,\n repoPackageName: readPackageName(analyzeTarget.rootDir),\n scannerType: executionTarget.scanType,\n snapshotRoot: analysisResult.snapshotRoot,\n targetId,\n })\n }\n\n this.logPhase(\"Analyze summary\")\n this.log(`Local snapshots: ${preparedUploads.length}`)\n this.log(`Skipped: ${skippedTargets}`)\n if (skippedNoAdoption > 0) {\n this.log(`- no adoption: ${skippedNoAdoption}`)\n }\n\n if (skippedNoComponents > 0) {\n this.log(`- no components: ${skippedNoComponents}`)\n }\n\n if (preparedUploads.length === 0) {\n this.log(\"No analyzable results found. You are likely running the command from the wrong directory.\")\n return\n }\n\n this.log(`Ready to upload: ${preparedUploads.length}`)\n\n if (dryRun) {\n this.persistAnalyzeConfig({\n analyzeConfig,\n designSystemId: analyzeDesignSystemId,\n excludedPackages,\n packages: componentPackages,\n repoId,\n })\n this.log(\"Upload skipped (dry-run enabled).\")\n return\n }\n\n if (!uploadContext) {\n this.error(\"Upload context is missing.\")\n }\n\n const { apiClient, designSystemId } = uploadContext\n this.logPhase(\"Upload phase\")\n const uploadResults = await Promise.allSettled(\n preparedUploads.map((upload, index) =>\n this.uploadSnapshot({\n apiClient,\n designSystemId,\n uploadId: formatSequenceId(\"U\", index + 1, preparedUploads.length),\n repoId: upload.repoId,\n repoPackageName: upload.repoPackageName,\n scannerType: upload.scannerType,\n snapshotRoot: upload.snapshotRoot,\n localSnapshotId: upload.localSnapshotId,\n packageLabel: upload.packageLabel,\n pathLabel: upload.pathLabel,\n targetId: upload.targetId,\n }),\n ),\n )\n const failedUploads = uploadResults.filter(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n )\n\n if (failedUploads.length > 0) {\n throw new AggregateError(\n failedUploads.map(failure => failure.reason),\n `${failedUploads.length} snapshot upload(s) failed.`,\n )\n }\n\n this.logPhase(\"Upload summary\")\n this.log(`Uploaded snapshots: ${preparedUploads.length}/${preparedUploads.length}`)\n this.log(`- components: ${preparedUploads.filter(upload => upload.scannerType === \"components\").length}`)\n this.log(`- usage: ${preparedUploads.filter(upload => upload.scannerType === \"usage\").length}`)\n\n const processingRun = await this.startProcessingRun({\n apiClient,\n designSystemId,\n })\n\n this.persistAnalyzeConfig({\n analyzeConfig,\n designSystemId,\n excludedPackages,\n packages: componentPackages,\n repoId,\n })\n\n if (noWait) {\n this.log(\"Processing continues in the background. Use `supernova analyze status` to check progress.\")\n return\n }\n\n this.logPhase(\"Watch phase\")\n await watchAnalyzeStatus({\n apiClient,\n designSystemId,\n error: message => this.error(message),\n })\n\n this.logPhase(\"Analyze complete\")\n this.log(`Processing run: ${processingRun.processingRunId}`)\n this.log(`Uploaded: ${preparedUploads.length}/${preparedUploads.length}`)\n }\n\n private logPhase(title: string): void {\n this.log(\"\")\n this.log(title)\n }\n\n private persistAnalyzeConfig(input: {\n analyzeConfig: SupernovaConfigAnalyze | Record<string, never>\n designSystemId?: string\n excludedPackages: string[]\n packages: string[]\n repoId: string\n }): void {\n const { analyzeConfig, designSystemId, excludedPackages, packages, repoId } = input\n\n this.configService.update({\n analyze: {\n ...analyzeConfig,\n repoId,\n packages,\n excludedPackages,\n },\n ...(designSystemId ? { designSystemId } : {}),\n })\n }\n\n private async uploadSnapshot(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n localSnapshotId: string\n packageLabel: string\n pathLabel: string\n repoId: string\n repoPackageName: string\n scannerType: UploadScannerType\n snapshotRoot: string\n targetId: string\n uploadId: string\n }): Promise<void> {\n const {\n apiClient,\n designSystemId,\n localSnapshotId,\n packageLabel,\n pathLabel,\n repoId,\n repoPackageName,\n scannerType,\n snapshotRoot,\n targetId,\n uploadId,\n } = input\n const initPath = `/code-snapshots/upload`\n const local = await this.createArchiveFromSnapshotRoot(snapshotRoot)\n\n const initPayload = {\n archiveChecksum: local.checksum,\n archiveName: local.archiveName,\n archiveSize: local.sizeBytes,\n designSystemId,\n repoId,\n repoPackageName,\n scannerType: toApiScannerType(scannerType),\n }\n\n this.log(\n `${uploadId} ${formatStatus(\"start\")} ${padScanType(scannerType)} source=${targetId} path=${pathLabel} pkg=${packageLabel} snapshot=${localSnapshotId}`,\n )\n let initResponse: SnapshotUploadInitResponse\n try {\n const response = await apiClient.post<ApiResultEnvelope<SnapshotUploadInitResponse>>(initPath, initPayload)\n initResponse = response.data.result\n this.log(`${uploadId} INIT ${formatStatus(\"done\")}`)\n } catch (error) {\n this.log(`${uploadId} INIT ${formatStatus(\"fail\")}`)\n this.logHttpError(\"upload init\", error)\n this.error(`Snapshot upload initialization failed (${scannerType}).`)\n }\n\n if (!initResponse.uploadUrl) {\n this.error(`Snapshot upload init response does not contain uploadUrl (${scannerType}).`)\n }\n\n try {\n await axios.put(initResponse.uploadUrl, local.archive, {\n headers: {\n \"Content-Length\": local.archive.length,\n \"Content-Type\": \"application/zip\",\n },\n })\n this.log(`${uploadId} PUT ${formatStatus(\"done\")}`)\n } catch (error) {\n this.log(`${uploadId} PUT ${formatStatus(\"fail\")}`)\n this.logHttpError(\"signed upload PUT\", error)\n this.error(`Snapshot archive upload failed (${scannerType}).`)\n }\n\n const finalizePath = `/code-snapshots/${initResponse.snapshotId}/finalize`\n try {\n await apiClient.post(finalizePath, {})\n this.log(`${uploadId} FINAL ${formatStatus(\"done\")} remoteSnapshotId=${initResponse.snapshotId}`)\n } catch (error) {\n this.log(`${uploadId} FINAL ${formatStatus(\"fail\")}`)\n this.logHttpError(\"finalize\", error)\n this.error(`Snapshot finalize failed (${scannerType}).`)\n }\n }\n\n private async startProcessingRun(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n }): Promise<StartProcessingRunResponse> {\n const { apiClient, designSystemId } = input\n const processingPath = `/code-snapshots/process-run`\n this.logPhase(\"Processing phase\")\n this.log(`${formatStatus(\"start\")} processing run`)\n try {\n const response = await apiClient.post<ApiResultEnvelope<StartProcessingRunResponse>>(processingPath, {\n designSystemId,\n })\n this.log(\n `${formatStatus(\"done\")} processing run id=${response.data.result.processingRunId} snapshots=${response.data.result.snapshotIds.length}`,\n )\n return response.data.result\n } catch (error) {\n this.log(`${formatStatus(\"fail\")} processing run`)\n this.logHttpError(\"process-run\", error)\n this.error(\"Failed to start batch processing run.\")\n }\n }\n\n private async createArchiveFromSnapshotRoot(\n snapshotRoot: string,\n ): Promise<{ archive: Buffer; archiveName: string; checksum: string; sizeBytes: number }> {\n const zip = new AdmZip()\n zip.addLocalFolder(snapshotRoot)\n const archive = zip.toBuffer()\n const checksum = crypto.createHash(\"sha256\").update(archive).digest(\"hex\")\n\n return {\n archive,\n archiveName: `${path.basename(snapshotRoot)}.zip`,\n checksum,\n sizeBytes: archive.byteLength,\n }\n }\n\n private logHttpError(step: string, error: unknown): void {\n if (isAxiosError(error)) {\n const status = error.response?.status\n const data =\n typeof error.response?.data === \"string\" ? error.response.data : JSON.stringify(error.response?.data, null, 2)\n this.log(`${step}, http error${status ? ` ${status}` : \"\"}: ${data ?? error.message}`)\n return\n }\n\n this.log(`${step}, error: ${error instanceof Error ? error.message : String(error)}`)\n }\n}\n\nfunction toApiScannerType(scannerType: UploadScannerType): \"Components\" | \"Usage\" {\n return scannerType === \"components\" ? \"Components\" : \"Usage\"\n}\n\nfunction readPackageName(rootDir: string): string {\n const packageJsonPath = path.join(rootDir, \"package.json\")\n if (!fs.existsSync(packageJsonPath)) {\n return path.basename(rootDir)\n }\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { name?: string }\n return packageJson.name ?? path.basename(rootDir)\n}\n\nfunction resolveExecutionTargets(input: {\n componentPackages: string[]\n excludedPackages: string[]\n rootDir: string\n scannerType: ScannerType\n}): ExecutionTarget[] {\n const result: ExecutionTarget[] = []\n\n if (input.scannerType === \"components\" || input.scannerType === \"all\") {\n result.push(\n ...input.componentPackages.map<ExecutionTarget>(importFrom => ({\n discovery: false,\n importFrom,\n rootDir: input.rootDir,\n scanType: \"components\",\n })),\n )\n }\n\n if (input.scannerType === \"usage\" || input.scannerType === \"all\") {\n result.push(\n ...resolveUsageExecutionTargets({\n componentPackages: input.componentPackages,\n excludedPackages: input.excludedPackages,\n rootDir: input.rootDir,\n }),\n )\n }\n\n return result\n}\n\nfunction resolveUsageExecutionTargets(input: {\n componentPackages: string[]\n excludedPackages: string[]\n rootDir: string\n}): ExecutionTarget[] {\n const { componentPackages, excludedPackages, rootDir } = input\n const candidatePackageDirs = resolveCandidatePackageDirs(rootDir)\n const excludedNames = new Set(excludedPackages)\n const componentPackageNames = resolveComponentPackageNames(rootDir, candidatePackageDirs, componentPackages)\n\n if (candidatePackageDirs.length <= 1) {\n const rootPackageName = readPackageName(rootDir)\n if (excludedNames.has(rootPackageName)) {\n return []\n }\n\n return [{ discovery: false, importFrom: componentPackages, rootDir, scanType: \"usage\" }]\n }\n\n return candidatePackageDirs\n .filter(packageDir => {\n const packageName = readPackageName(packageDir)\n return !excludedNames.has(packageName) && !componentPackageNames.has(packageName)\n })\n .map(packageDir => ({\n discovery: true,\n importFrom: componentPackages,\n rootDir: packageDir,\n scanType: \"usage\" as const,\n }))\n}\n\ntype WorkspacePackageJson = {\n workspaces?: string[] | { packages?: string[] }\n}\n\nfunction resolveCandidatePackageDirs(rootDir: string): string[] {\n const workspacePackageDirs = resolveWorkspacePackageDirs(rootDir)\n if (workspacePackageDirs.length > 0) {\n return workspacePackageDirs\n }\n\n const rootPackageJsonPath = path.join(rootDir, \"package.json\")\n if (!fs.existsSync(rootPackageJsonPath)) {\n const recursivePackageDirs = resolveRecursivePackageDirs(rootDir)\n if (recursivePackageDirs.length > 0) {\n return recursivePackageDirs\n }\n }\n\n return resolveDirectChildPackageDirs(rootDir)\n}\n\nfunction resolveWorkspacePackageDirs(rootDir: string): string[] {\n const rootPackageJsonPath = path.join(rootDir, \"package.json\")\n if (!fs.existsSync(rootPackageJsonPath)) {\n return []\n }\n\n const rootPackageJson = JSON.parse(fs.readFileSync(rootPackageJsonPath, \"utf8\")) as WorkspacePackageJson\n const workspacePatterns = Array.isArray(rootPackageJson.workspaces)\n ? rootPackageJson.workspaces\n : (rootPackageJson.workspaces?.packages ?? [])\n\n const packageDirs: string[] = []\n for (const pattern of workspacePatterns) {\n const normalized = pattern.replaceAll(\"\\\\\", \"/\")\n if (!normalized.includes(\"*\")) {\n const workspaceDir = path.resolve(rootDir, normalized)\n if (fs.existsSync(path.join(workspaceDir, \"package.json\"))) {\n packageDirs.push(workspaceDir)\n }\n\n continue\n }\n\n if (!normalized.endsWith(\"/*\")) {\n continue\n }\n\n const baseDir = path.resolve(rootDir, normalized.slice(0, -2))\n if (!fs.existsSync(baseDir) || !fs.statSync(baseDir).isDirectory()) {\n continue\n }\n\n for (const entry of fs.readdirSync(baseDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n const candidate = path.join(baseDir, entry.name)\n if (fs.existsSync(path.join(candidate, \"package.json\"))) {\n packageDirs.push(candidate)\n }\n }\n }\n\n return [...new Set(packageDirs)]\n}\n\nfunction resolveDirectChildPackageDirs(rootDir: string): string[] {\n if (!fs.existsSync(rootDir) || !fs.statSync(rootDir).isDirectory()) {\n return []\n }\n\n const result: string[] = []\n for (const entry of fs.readdirSync(rootDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n const packageDir = path.join(rootDir, entry.name)\n if (fs.existsSync(path.join(packageDir, \"package.json\"))) {\n result.push(packageDir)\n }\n }\n\n return result\n}\n\nfunction resolveRecursivePackageDirs(rootDir: string): string[] {\n const packageJsonPaths = globSync(\"**/package.json\", {\n absolute: true,\n cwd: rootDir,\n dot: false,\n ignore: [\n \"**/.git/**\",\n \"**/.next/**\",\n \"**/.supernova/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/dist/**\",\n \"**/node_modules/**\",\n \"**/out/**\",\n ],\n nodir: true,\n })\n\n return [...new Set(packageJsonPaths.map(packageJsonPath => path.dirname(packageJsonPath)))].sort((a, b) =>\n a.localeCompare(b),\n )\n}\n\nfunction resolveComponentPackageNames(\n rootDir: string,\n candidatePackageDirs: string[],\n componentPackages: string[],\n): Set<string> {\n const byName = new Map(candidatePackageDirs.map(packageDir => [readPackageName(packageDir), packageDir]))\n const names = new Set<string>()\n\n for (const componentPackage of componentPackages) {\n if (byName.has(componentPackage)) {\n names.add(componentPackage)\n continue\n }\n\n const explicitPath = path.resolve(rootDir, componentPackage)\n if (!fs.existsSync(explicitPath) || !fs.statSync(explicitPath).isDirectory()) {\n continue\n }\n\n names.add(readPackageName(explicitPath))\n }\n\n return names\n}\n\nfunction hasUsageInSnapshot(snapshotRoot: string): boolean {\n return countUsageRecordsInSnapshot(snapshotRoot) > 0\n}\n\nfunction countUsageRecordsInSnapshot(snapshotRoot: string): number {\n const usageFilePath = path.join(snapshotRoot, \"raw\", \"component-usage.json\")\n if (!fs.existsSync(usageFilePath)) {\n return 0\n }\n\n try {\n const usageJson = JSON.parse(fs.readFileSync(usageFilePath, \"utf8\")) as ComponentUsageSnapshot\n const usageRecords = usageJson.records ?? {}\n return Object.values(usageRecords).filter(item => (item.count ?? 0) > 0).length\n } catch {\n return 0\n }\n}\n\nfunction shouldWriteSnapshotsToExecutionRoot(projectRoot: string): boolean {\n return projectRoot.split(path.sep).includes(\"node_modules\")\n}\n\nfunction resolveAnalyzeTarget(input: {\n importFrom: string | string[]\n rootDir: string\n scannerType: UploadScannerType\n}): AnalyzeTarget | null {\n if (input.scannerType === \"usage\") {\n return { importFrom: input.importFrom, rootDir: input.rootDir }\n }\n\n const importFrom = Array.isArray(input.importFrom) ? input.importFrom[0] : input.importFrom\n if (!importFrom) {\n return { importFrom: \".\", rootDir: input.rootDir }\n }\n\n if (readPackageName(input.rootDir) === importFrom) {\n if (hasSourceEntry(input.rootDir)) {\n return { importFrom: \"src\", rootDir: input.rootDir }\n }\n\n return { importFrom: \".\", rootDir: input.rootDir }\n }\n\n const workspacePackageDir = findPackageDirByName(resolveCandidatePackageDirs(input.rootDir), importFrom)\n if (workspacePackageDir) {\n if (hasSourceEntry(workspacePackageDir)) {\n return { importFrom: \"src\", rootDir: workspacePackageDir }\n }\n\n return { importFrom: \".\", rootDir: workspacePackageDir }\n }\n\n const explicitPath = path.resolve(input.rootDir, importFrom)\n if (fs.existsSync(explicitPath) && fs.statSync(explicitPath).isDirectory()) {\n if (hasSourceEntry(explicitPath)) {\n return { importFrom: \"src\", rootDir: explicitPath }\n }\n\n return { importFrom: \".\", rootDir: explicitPath }\n }\n\n return null\n}\n\nfunction normalizeStringList(value?: string | string[]): string[] {\n if (!value) {\n return []\n }\n\n const list = Array.isArray(value) ? value : [value]\n return [...new Set(list.map(item => item.trim()).filter(Boolean))]\n}\n\nfunction stringifyImportFrom(importFrom: string | string[]): string {\n return Array.isArray(importFrom) ? importFrom.join(\",\") : importFrom\n}\n\nfunction findPackageDirByName(packageDirs: string[], packageName: string): string | null {\n for (const packageDir of packageDirs) {\n const packageJsonPath = path.join(packageDir, \"package.json\")\n if (!fs.existsSync(packageJsonPath)) {\n continue\n }\n\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { name?: string }\n if (packageJson.name === packageName) {\n return packageDir\n }\n } catch {\n continue\n }\n }\n\n return null\n}\n\nfunction hasSourceEntry(packageDir: string): boolean {\n return (\n fs.existsSync(path.join(packageDir, \"src\", \"index.ts\")) || fs.existsSync(path.join(packageDir, \"src\", \"index.tsx\"))\n )\n}\n\nfunction createMissingComponentsSourceMessage(importFrom: string | string[]): string {\n return `Package ${stringifyImportFrom(importFrom)} could not be resolved from local source. Component analysis must run against source code, so the components scan was skipped. Run the command from the package source instead.`\n}\n\nfunction createPlannedExecutionTarget(input: {\n executionTarget: ExecutionTarget\n index: number\n rootDir: string\n total: number\n}): PlannedExecutionTarget {\n const { executionTarget, index, rootDir, total } = input\n const analyzeTarget = resolveAnalyzeTarget({\n importFrom: executionTarget.importFrom,\n rootDir: executionTarget.rootDir,\n scannerType: executionTarget.scanType,\n })\n\n return {\n analyzeTarget,\n executionTarget,\n packageLabel: stringifyImportFrom(executionTarget.importFrom),\n pathLabel: formatPathLabel(rootDir, analyzeTarget?.rootDir ?? executionTarget.rootDir),\n targetId: formatSequenceId(\"\", index + 1, total),\n }\n}\n\nfunction summarizeScanTypes(executionTargets: ExecutionTarget[]): string {\n const components = executionTargets.filter(target => target.scanType === \"components\").length\n const usage = executionTargets.filter(target => target.scanType === \"usage\").length\n return `${components} components, ${usage} usage`\n}\n\nfunction padScanType(scanType: UploadScannerType): string {\n return scanType.padEnd(\"components\".length, \" \")\n}\n\nfunction formatSequenceId(prefix: string, index: number, total: number): string {\n const width = String(total).length\n const left = String(index).padStart(width, \"0\")\n const right = String(total).padStart(width, \"0\")\n return `[${prefix}${left}/${right}]`\n}\n\nfunction formatPathLabel(rootDir: string, targetPath: string): string {\n const relativePath = path.relative(rootDir, targetPath) || \".\"\n if (relativePath.length <= 48) {\n return relativePath\n }\n\n const segments = relativePath.split(path.sep)\n return segments.length > 2 ? `.../${segments.slice(-2).join(\"/\")}` : relativePath\n}\n\nfunction formatStatus(status: \"done\" | \"fail\" | \"skip\" | \"start\"): string {\n const labels = {\n done: \"DONE \",\n fail: \"FAIL \",\n skip: \"SKIP \",\n start: \"START\",\n } as const\n\n const colorEnabled = process.stdout.isTTY && !process.env.NO_COLOR\n if (!colorEnabled) {\n return labels[status]\n }\n\n const colors = {\n done: \"\\u001B[32m\",\n fail: \"\\u001B[31m\",\n skip: \"\\u001B[33m\",\n start: \"\\u001B[36m\",\n } as const\n\n return `${colors[status]}${labels[status]}\\u001B[0m`\n}\n"],"names":[],"mappings":"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","debugId":"b1b0f3f1-2050-5c37-9714-32da972b95c4"}
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-status.js","sources":["../../src/utils/analyze-status.ts"],"sourceRoot":"","sourcesContent":["import { action } from \"@oclif/core/ux\"\nimport { isAxiosError } from \"axios\"\n\nimport { sleep } from \"./common.js\"\nimport { createApiClient } from \"./http-client.js\"\n\ntype ProcessingRunStatus = \"Processing\" | \"Processed\" | \"Failed\"\n\ntype ProcessRunsResponse = {\n runs: Array<{\n createdAt: string\n errorSummary: string | null\n failedComponentsCount: number\n finishedAt: string | null\n processingRunId: string\n snapshotIds: string[]\n startedAt: string\n status: ProcessingRunStatus\n updatedAt: string\n }>\n}\n\ntype ApiEnvelope<T> = { result: T }\n\nconst WATCH_INTERVAL_SECONDS = 3\nconst WATCH_TIMEOUT_SECONDS = 900\n\nexport async function watchAnalyzeStatus(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n error(message: string): never\n}): Promise<void> {\n const spinner = new AnalyzeStatusSpinner()\n const startedAt = Date.now()\n const timeoutMs = WATCH_TIMEOUT_SECONDS * 1000\n\n spinner.start(\"Watching processing runs\")\n\n try {\n while (true) {\n const { runs } = await fetchAnalyzeRuns(input)\n const activeRuns = runs.filter(run => run.status === \"Processing\")\n const elapsed = Math.floor((Date.now() - startedAt) / 1000)\n spinner.update(`Processing snapshots activeRuns=${activeRuns.length} elapsed=${formatElapsed(elapsed)}`)\n\n if (activeRuns.length === 0) {\n spinner.stop(`DONE processing activeRuns=0 elapsed=${formatElapsed(elapsed)}`)\n return\n }\n\n if (Date.now() - startedAt >= timeoutMs) {\n spinner.stop()\n input.error(`Timed out waiting for processing runs after ${WATCH_TIMEOUT_SECONDS}s.`)\n }\n\n await sleep(WATCH_INTERVAL_SECONDS * 1000)\n }\n } finally {\n spinner.stop()\n }\n}\n\nasync function fetchAnalyzeRuns(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n error(message: string): never\n}): Promise<ProcessRunsResponse> {\n const endpoint = `/code-snapshots/process-status/${encodeURIComponent(input.designSystemId)}`\n try {\n const response = await input.apiClient.get<ApiEnvelope<ProcessRunsResponse>>(endpoint)\n return response.data.result\n } catch (error) {\n if (isAxiosError(error) && error.response?.status === 404) {\n input.error(\"Status endpoint is not deployed on this backend yet. Deploy backend and try again.\")\n }\n\n throw error\n }\n}\n\nfunction formatElapsed(totalSeconds: number): string {\n const minutes = Math.floor(totalSeconds / 60)\n const seconds = totalSeconds % 60\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`\n}\n\nclass AnalyzeStatusSpinner {\n private spinnerFrames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"]\n private spinnerIndex = 0\n private spinnerInterval: NodeJS.Timeout | null = null\n private spinnerMessage = \"\"\n\n start(initialMessage: string): void {\n this.spinnerMessage = initialMessage\n if (!process.stdout.isTTY) {\n action.start(initialMessage)\n return\n }\n\n this.spinnerInterval = setInterval(() => {\n const frame = this.spinnerFrames[this.spinnerIndex++ % this.spinnerFrames.length]\n process.stdout.write(`\\r${frame} ${this.spinnerMessage}\\u001B[K`)\n }, 80)\n }\n\n update(message: string): void {\n this.spinnerMessage = message\n }\n\n stop(finalMessage?: string): void {\n if (!process.stdout.isTTY) {\n if (finalMessage) {\n action.stop(finalMessage)\n } else {\n action.stop()\n }\n\n return\n }\n\n if (this.spinnerInterval) {\n clearInterval(this.spinnerInterval)\n this.spinnerInterval = null\n }\n\n if (finalMessage) {\n process.stdout.write(`\\r${finalMessage}\\u001B[K\\n`)\n } else {\n process.stdout.write(\"\\r\\u001B[K\")\n }\n }\n}\n"],"names":[],"mappings":"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","debug_id":"7d5388d6-d783-5ba8-a8ae-467aeaff909e"}
1
+ {"version":3,"file":"analyze-status.js","sources":["../../src/utils/analyze-status.ts"],"sourceRoot":"","sourcesContent":["import { action } from \"@oclif/core/ux\"\nimport { isAxiosError } from \"axios\"\n\nimport { sleep } from \"./common.js\"\nimport { createApiClient } from \"./http-client.js\"\n\ntype ProcessingRunStatus = \"Processing\" | \"Processed\" | \"Failed\"\n\ntype ProcessRunsResponse = {\n runs: Array<{\n createdAt: string\n errorSummary: string | null\n failedComponentsCount: number\n finishedAt: string | null\n processingRunId: string\n snapshotIds: string[]\n startedAt: string\n status: ProcessingRunStatus\n updatedAt: string\n }>\n}\n\ntype ApiEnvelope<T> = { result: T }\n\nconst WATCH_INTERVAL_SECONDS = 3\nconst WATCH_TIMEOUT_SECONDS = 900\n\nexport async function watchAnalyzeStatus(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n error(message: string): never\n}): Promise<void> {\n const spinner = new AnalyzeStatusSpinner()\n const startedAt = Date.now()\n const timeoutMs = WATCH_TIMEOUT_SECONDS * 1000\n\n spinner.start(\"Watching processing runs\")\n\n try {\n while (true) {\n const { runs } = await fetchAnalyzeRuns(input)\n const activeRuns = runs.filter(run => run.status === \"Processing\")\n const elapsed = Math.floor((Date.now() - startedAt) / 1000)\n spinner.update(`Processing snapshots activeRuns=${activeRuns.length} elapsed=${formatElapsed(elapsed)}`)\n\n if (activeRuns.length === 0) {\n spinner.stop(`DONE processing activeRuns=0 elapsed=${formatElapsed(elapsed)}`)\n return\n }\n\n if (Date.now() - startedAt >= timeoutMs) {\n spinner.stop()\n input.error(`Timed out waiting for processing runs after ${WATCH_TIMEOUT_SECONDS}s.`)\n }\n\n await sleep(WATCH_INTERVAL_SECONDS * 1000)\n }\n } finally {\n spinner.stop()\n }\n}\n\nasync function fetchAnalyzeRuns(input: {\n apiClient: Awaited<ReturnType<typeof createApiClient>>\n designSystemId: string\n error(message: string): never\n}): Promise<ProcessRunsResponse> {\n const endpoint = `/code-snapshots/process-status/${encodeURIComponent(input.designSystemId)}`\n try {\n const response = await input.apiClient.get<ApiEnvelope<ProcessRunsResponse>>(endpoint)\n return response.data.result\n } catch (error) {\n if (isAxiosError(error) && error.response?.status === 404) {\n input.error(\"Status endpoint is not deployed on this backend yet. Deploy backend and try again.\")\n }\n\n throw error\n }\n}\n\nfunction formatElapsed(totalSeconds: number): string {\n const minutes = Math.floor(totalSeconds / 60)\n const seconds = totalSeconds % 60\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`\n}\n\nclass AnalyzeStatusSpinner {\n private spinnerFrames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"]\n private spinnerIndex = 0\n private spinnerInterval: NodeJS.Timeout | null = null\n private spinnerMessage = \"\"\n\n start(initialMessage: string): void {\n this.spinnerMessage = initialMessage\n if (!process.stdout.isTTY) {\n action.start(initialMessage)\n return\n }\n\n this.spinnerInterval = setInterval(() => {\n const frame = this.spinnerFrames[this.spinnerIndex++ % this.spinnerFrames.length]\n process.stdout.write(`\\r${frame} ${this.spinnerMessage}\\u001B[K`)\n }, 80)\n }\n\n update(message: string): void {\n this.spinnerMessage = message\n }\n\n stop(finalMessage?: string): void {\n if (!process.stdout.isTTY) {\n if (finalMessage) {\n action.stop(finalMessage)\n } else {\n action.stop()\n }\n\n return\n }\n\n if (this.spinnerInterval) {\n clearInterval(this.spinnerInterval)\n this.spinnerInterval = null\n }\n\n if (finalMessage) {\n process.stdout.write(`\\r${finalMessage}\\u001B[K\\n`)\n } else {\n process.stdout.write(\"\\r\\u001B[K\")\n }\n }\n}\n"],"names":[],"mappings":"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","debugId":"7d5388d6-d783-5ba8-a8ae-467aeaff909e"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sources":["../../src/utils/api-client.ts"],"sourceRoot":"","sourcesContent":["import { SupernovaApiClient } from \"@supernova-studio/client\"\n\nimport { VaultService } from \"../services/vault.service.js\"\nimport { apiHostForEnvironment, TargetEnv } from \"../types/environment.js\"\n\nconst vaultService = new VaultService()\n\nexport const getApiClient = async (env: TargetEnv): Promise<SupernovaApiClient> => {\n const { accessToken } = await vaultService.getTokensFromVault(env)\n return new SupernovaApiClient({ accessToken, host: apiHostForEnvironment(env) })\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAa,MAAM,yBAAyB,CAAA;AAE1E,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAc,EAA+B,EAAE;IAChF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAClE,OAAO,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAClF,CAAC,CAAA","debug_id":"be31c3bd-5572-5d4b-b7ef-54f87120cb9f"}
1
+ {"version":3,"file":"api-client.js","sources":["../../src/utils/api-client.ts"],"sourceRoot":"","sourcesContent":["import { SupernovaApiClient } from \"@supernova-studio/client\"\n\nimport { VaultService } from \"../services/vault.service.js\"\nimport { apiHostForEnvironment, TargetEnv } from \"../types/environment.js\"\n\nconst vaultService = new VaultService()\n\nexport const getApiClient = async (env: TargetEnv): Promise<SupernovaApiClient> => {\n const { accessToken } = await vaultService.getTokensFromVault(env)\n return new SupernovaApiClient({ accessToken, host: apiHostForEnvironment(env) })\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAa,MAAM,yBAAyB,CAAA;AAE1E,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAc,EAA+B,EAAE;IAChF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAClE,OAAO,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAClF,CAAC,CAAA","debugId":"be31c3bd-5572-5d4b-b7ef-54f87120cb9f"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sources":["../../src/utils/common.ts"],"sourceRoot":"","sourcesContent":["export async function sleep(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms)\n })\n}\n"],"names":[],"mappings":";;AAAA,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC","debug_id":"8afc96d7-d78f-5cda-aeee-65f2828b68de"}
1
+ {"version":3,"file":"common.js","sources":["../../src/utils/common.ts"],"sourceRoot":"","sourcesContent":["export async function sleep(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms)\n })\n}\n"],"names":[],"mappings":";;AAAA,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC","debugId":"8afc96d7-d78f-5cda-aeee-65f2828b68de"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.js","sources":["../../src/utils/config.service.ts"],"sourceRoot":"","sourcesContent":["import * as fs from \"node:fs\"\n\nimport { SupernovaConfig } from \"../types/config.js\"\n\nconst configFileName = \"supernova.config.json\"\n\nexport class SupernovaConfigService {\n private static instance: SupernovaConfigService\n private configCache: SupernovaConfig | null = null\n\n public static getInstance(): SupernovaConfigService {\n if (!SupernovaConfigService.instance) {\n SupernovaConfigService.instance = new SupernovaConfigService()\n }\n\n return SupernovaConfigService.instance\n }\n\n public get(): SupernovaConfig | null {\n if (this.configCache) return this.configCache\n if (!fs.existsSync(this.configPath)) return null\n\n try {\n const configString = fs.readFileSync(this.configPath, \"utf8\")\n const configJson = JSON.parse(configString)\n const configParseResult = SupernovaConfig.safeParse(configJson)\n\n if (configParseResult.success) {\n this.configCache = configParseResult.data\n }\n\n return this.configCache\n } catch (error) {\n throw new Error(`Could not read ${configFileName} file: ${(error as { message: string }).message}`)\n }\n }\n\n public update(configUpdate: Partial<SupernovaConfig>): void {\n const fullConfig = {\n ...this.get(),\n ...configUpdate,\n }\n\n this.write(fullConfig)\n }\n\n private write(config: SupernovaConfig): void {\n fs.writeFileSync(this.configPath, `${JSON.stringify(config, null, 2)}\\n`)\n this.configCache = config\n }\n\n private get configPath(): string {\n return configFileName\n }\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,cAAc,GAAG,uBAAuB,CAAA;AAE9C,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAC,QAAQ,CAAwB;IACvC,WAAW,GAA2B,IAAI,CAAA;IAE3C,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YACrC,sBAAsB,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAA;QAChE,CAAC;QAED,OAAO,sBAAsB,CAAC,QAAQ,CAAA;IACxC,CAAC;IAEM,GAAG;QACR,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAA;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAA;QAEhD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAC3C,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAE/D,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAA;YAC3C,CAAC;YAED,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,cAAc,UAAW,KAA6B,CAAC,OAAO,EAAE,CAAC,CAAA;QACrG,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,YAAsC;QAClD,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,GAAG,EAAE;YACb,GAAG,YAAY;SAChB,CAAA;QAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,MAAuB;QACnC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QACzE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;IAC3B,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,cAAc,CAAA;IACvB,CAAC;CACF","debug_id":"efbafcda-4ef1-5d66-945d-590f1730640c"}
1
+ {"version":3,"file":"config.service.js","sources":["../../src/utils/config.service.ts"],"sourceRoot":"","sourcesContent":["import * as fs from \"node:fs\"\n\nimport { SupernovaConfig } from \"../types/config.js\"\n\nconst configFileName = \"supernova.config.json\"\n\nexport class SupernovaConfigService {\n private static instance: SupernovaConfigService\n private configCache: SupernovaConfig | null = null\n\n public static getInstance(): SupernovaConfigService {\n if (!SupernovaConfigService.instance) {\n SupernovaConfigService.instance = new SupernovaConfigService()\n }\n\n return SupernovaConfigService.instance\n }\n\n public get(): SupernovaConfig | null {\n if (this.configCache) return this.configCache\n if (!fs.existsSync(this.configPath)) return null\n\n try {\n const configString = fs.readFileSync(this.configPath, \"utf8\")\n const configJson = JSON.parse(configString)\n const configParseResult = SupernovaConfig.safeParse(configJson)\n\n if (configParseResult.success) {\n this.configCache = configParseResult.data\n }\n\n return this.configCache\n } catch (error) {\n throw new Error(`Could not read ${configFileName} file: ${(error as { message: string }).message}`)\n }\n }\n\n public update(configUpdate: Partial<SupernovaConfig>): void {\n const fullConfig = {\n ...this.get(),\n ...configUpdate,\n }\n\n this.write(fullConfig)\n }\n\n private write(config: SupernovaConfig): void {\n fs.writeFileSync(this.configPath, `${JSON.stringify(config, null, 2)}\\n`)\n this.configCache = config\n }\n\n private get configPath(): string {\n return configFileName\n }\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,cAAc,GAAG,uBAAuB,CAAA;AAE9C,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAC,QAAQ,CAAwB;IACvC,WAAW,GAA2B,IAAI,CAAA;IAE3C,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YACrC,sBAAsB,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAA;QAChE,CAAC;QAED,OAAO,sBAAsB,CAAC,QAAQ,CAAA;IACxC,CAAC;IAEM,GAAG;QACR,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAA;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAA;QAEhD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAC3C,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAE/D,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAA;YAC3C,CAAC;YAED,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,cAAc,UAAW,KAA6B,CAAC,OAAO,EAAE,CAAC,CAAA;QACrG,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,YAAsC;QAClD,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,GAAG,EAAE;YACb,GAAG,YAAY;SAChB,CAAA;QAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,MAAuB;QACnC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QACzE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;IAC3B,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,cAAc,CAAA;IACvB,CAAC;CACF","debugId":"efbafcda-4ef1-5d66-945d-590f1730640c"}
@@ -1,4 +1,4 @@
1
- interface TemplateInfo {
1
+ export interface TemplateInfo {
2
2
  description: string;
3
3
  files: string[];
4
4
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/utils/discover.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,WAAW;IACnB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAA;CAChC;AAMD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAOlE;AA0cD,wBAAsB,4BAA4B,CAChD,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,CAc5D;AAED,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EACxE,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,CAqB5D"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/utils/discover.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,WAAW;IACnB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAA;CAChC;AAMD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAOlE;AA0cD,wBAAsB,4BAA4B,CAChD,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,CAc5D;AAED,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EACxE,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,CAqB5D"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8d01cf90-bafa-5c36-82b4-70b7a809ff77")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3641e013-6aae-5262-897b-e2c830289d87")}catch(e){}}();
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  export function folderNameToDisplayName(folderName) {
@@ -31,7 +31,7 @@ function parseDescriptionFromReadme(readmeFilePath) {
31
31
  if (!match)
32
32
  return "";
33
33
  let description = match[1].trim();
34
- description = description.replaceAll('**', "").replaceAll('*', "");
34
+ description = description.replaceAll("**", "").replaceAll("*", "");
35
35
  description = description.charAt(0).toUpperCase() + description.slice(1);
36
36
  if (!description.endsWith(".") && !description.endsWith("!") && !description.endsWith("?")) {
37
37
  description += ".";
@@ -66,7 +66,7 @@ function parseImportsFromTSFile(filePath, baseDir) {
66
66
  const actualPath = possiblePaths.find(p => fs.existsSync(p));
67
67
  if (actualPath) {
68
68
  const containerRoot = path.resolve(baseDir, "../../..");
69
- const relativePath = path.relative(containerRoot, actualPath).replaceAll('\\', "/");
69
+ const relativePath = path.relative(containerRoot, actualPath).replaceAll("\\", "/");
70
70
  if (relativePath.startsWith("supernova/")) {
71
71
  dependencies.push(relativePath);
72
72
  }
@@ -183,7 +183,7 @@ function discoverItems(basePath, subdirectory) {
183
183
  const thumbnail = findThumbnail(itemDir);
184
184
  const files = getAllFilesInDirectory(itemDir, itemDir);
185
185
  const containerRoot = path.resolve(itemDir, "../../..");
186
- const itemRelativePath = path.relative(containerRoot, itemDir).replaceAll('\\', "/");
186
+ const itemRelativePath = path.relative(containerRoot, itemDir).replaceAll("\\", "/");
187
187
  const fullPathFiles = files.map(file => `${itemRelativePath}/${file}`);
188
188
  const importDependencies = parseImportsFromDirectory(itemDir);
189
189
  const allDependencies = [...new Set(importDependencies)];
@@ -304,4 +304,4 @@ export async function discoverAndUpdatePackageJson(basePath) {
304
304
  return result;
305
305
  }
306
306
  //# sourceMappingURL=discover.js.map
307
- //# debugId=8d01cf90-bafa-5c36-82b4-70b7a809ff77
307
+ //# debugId=3641e013-6aae-5262-897b-e2c830289d87
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sources":["../../src/utils/discover.ts"],"sourceRoot":"","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\n\ninterface TemplateInfo {\n description: string\n files: string[]\n name: string\n thumbnail?: string\n}\n\ninterface ItemsObject {\n [itemKey: string]: TemplateInfo\n}\n\n/**\n * Converts folder name to spaced title case\n * e.g., \"AppShell\" -> \"App Shell\", \"PortalFeatureDetail\" -> \"Portal Feature Detail\"\n */\nexport function folderNameToDisplayName(folderName: string): string {\n return folderName\n .replaceAll(/[-_]/g, \" \") // kebab-case and snake_case → spaces\n .replaceAll(/([A-Z])/g, \" $1\") // PascalCase/camelCase → spaces before uppercase\n .trim()\n .replaceAll(/\\s+/g, \" \") // normalize multiple spaces\n .replaceAll(/\\b\\w/g, c => c.toUpperCase()) // capitalize each word\n}\n\n/**\n * Recursively get all files in a directory relative to that directory\n */\nfunction getAllFilesInDirectory(dirPath: string, relativeTo: string): string[] {\n return fs\n .readdirSync(dirPath, { recursive: true, withFileTypes: true })\n .filter(entry => entry.isFile() && entry.name !== \"README.md\")\n .map(entry => path.relative(relativeTo, path.join(entry.parentPath || dirPath, entry.name)))\n .sort()\n}\n\n/**\n * Check for thumbnail files in a directory\n */\nfunction findThumbnail(templateDir: string): string | undefined {\n return [\".png\", \".svg\", \".jpg\", \".jpeg\"]\n .map(ext => `thumbnail${ext}`)\n .find(filename => fs.existsSync(path.join(templateDir, filename)))\n}\n\n/**\n * Parse description from a README.md file in any directory\n * Takes the first sentence after the first # heading\n *\n * @param readmeFilePath - Full path to README.md file\n * @returns string - The description or empty string if not found\n */\nfunction parseDescriptionFromReadme(readmeFilePath: string): string {\n if (!fs.existsSync(readmeFilePath)) return \"\"\n\n try {\n const content = fs.readFileSync(readmeFilePath, \"utf8\")\n\n // Find first paragraph after first # heading\n const match = content.match(/^#[^\\n]*\\n+([^\\n#]+)/m)\n if (!match) return \"\"\n\n let description = match[1].trim()\n\n // Clean up the description\n description = description.replaceAll('**', \"\").replaceAll('*', \"\") // Remove markdown formatting\n description = description.charAt(0).toUpperCase() + description.slice(1) // Ensure capital letter\n\n // Ensure it ends with period if it doesn't already\n if (!description.endsWith(\".\") && !description.endsWith(\"!\") && !description.endsWith(\"?\")) {\n description += \".\"\n }\n\n return description\n } catch {\n return \"\"\n }\n}\n\n/**\n * Parse TypeScript/TSX files for import statements and extract file dependencies\n * @param filePath - Path to .ts/.tsx file\n * @param baseDir - Base directory for resolving relative imports\n * @returns string[] - Array of imported file paths (resolved to project root)\n */\nfunction parseImportsFromTSFile(filePath: string, baseDir: string): string[] {\n if (!fs.existsSync(filePath)) return []\n\n try {\n const content = fs.readFileSync(filePath, \"utf8\")\n const dependencies: string[] = []\n\n // Regex to match import statements\n const importRegex = /import\\s+(?:[\\w*{}\\s,]+\\s+from\\s+)?['\"`]([^'\"`]+)['\"`]/g\n\n let match\n while ((match = importRegex.exec(content)) !== null) {\n const importPath = match[1]\n\n // Only process relative imports (starting with ./ or ../)\n if (importPath.startsWith(\"./\") || importPath.startsWith(\"../\")) {\n try {\n // Resolve relative to the file's directory\n const fileDir = path.dirname(filePath)\n const resolvedPath = path.resolve(fileDir, importPath)\n\n // Try common extensions if no extension provided\n const possiblePaths = [\n resolvedPath,\n resolvedPath + \".tsx\",\n resolvedPath + \".ts\",\n resolvedPath + \".json\",\n resolvedPath + \".js\",\n ]\n\n const actualPath = possiblePaths.find(p => fs.existsSync(p))\n\n if (actualPath) {\n // Convert to path relative to container root\n const containerRoot = path.resolve(baseDir, \"../../..\")\n const relativePath = path.relative(containerRoot, actualPath).replaceAll('\\\\', \"/\")\n\n // Only include files within the supernova directory\n if (relativePath.startsWith(\"supernova/\")) {\n dependencies.push(relativePath)\n }\n }\n } catch {\n // Skip invalid import paths\n }\n }\n }\n\n return dependencies\n } catch {\n return []\n }\n}\n\n/**\n * Parse all TypeScript/TSX files in a directory for import dependencies\n * @param itemDir - Directory containing the template/pattern\n * @returns string[] - Array of all imported file paths from all TS/TSX files\n */\nfunction parseImportsFromDirectory(itemDir: string): string[] {\n const dependencies = new Set<string>()\n\n try {\n const entries = fs.readdirSync(itemDir, { recursive: true, withFileTypes: true })\n\n for (const entry of entries) {\n if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase()\n if (ext === \".ts\" || ext === \".tsx\") {\n const fullPath = path.join(entry.parentPath || itemDir, entry.name)\n const fileDeps = parseImportsFromTSFile(fullPath, itemDir)\n for (const dep of fileDeps) dependencies.add(dep)\n }\n }\n }\n } catch {\n // Skip directories that can't be read\n }\n\n return [...dependencies].sort()\n}\n\n/**\n * Parse main directory README.md for table-based descriptions\n * Extracts description from markdown table like:\n * | Pattern | Description |\n * | PromptEditor | Tiptap rich text editor |\n */\nfunction parseMainReadmeTable(mainReadmePath: string, itemKey: string): string | null {\n if (!fs.existsSync(mainReadmePath)) return null\n\n try {\n const content = fs.readFileSync(mainReadmePath, \"utf8\")\n\n // Find table that contains Pattern or Template header\n const tableMatch = content.match(/(\\|\\s*(?:Pattern|Template)\\s*\\|[^\\n]*)\\n\\|[-\\s|]*\\n((?:\\|[^\\n]*\\n)*)/i)\n if (!tableMatch) return null\n\n // Parse header to get column indices\n const headerCells = tableMatch[1]\n .split(\"|\")\n .map(cell => cell.trim())\n .filter(Boolean)\n const nameIndex = headerCells.findIndex(cell => /^(Pattern|Template)$/i.test(cell))\n const descIndex = headerCells.findIndex(cell => /^Description$/i.test(cell))\n\n if (nameIndex === -1 || descIndex === -1) return null\n\n // Parse table rows\n const rows = tableMatch[2].split(\"\\n\").filter(row => row.trim())\n\n for (const row of rows) {\n const cells = row\n .split(\"|\")\n .map(cell => cell.trim())\n .filter(Boolean)\n\n if (cells.length > Math.max(nameIndex, descIndex)) {\n const name = cells[nameIndex]?.replace(/\\[([^\\]]+)\\].*/, \"$1\") // Remove markdown link syntax\n const description = cells[descIndex]\n\n if (name === itemKey) {\n return description.endsWith(\".\") ? description : description + \".\"\n }\n }\n }\n } catch {\n // If error reading file, return null\n }\n\n return null\n}\n\n/**\n * Extract description from README.md file\n * Priority: 1) Individual README, 2) Main directory table, 3) Fallback\n */\nfunction extractDescriptionFromReadme(\n itemDir: string,\n fallbackName: string,\n itemKey: string,\n subdirectory: \"templates\" | \"patterns\",\n): string {\n // Try individual README first (highest priority)\n const itemReadmePath = path.join(itemDir, \"README.md\")\n const individualDescription = parseDescriptionFromReadme(itemReadmePath)\n if (individualDescription) {\n return individualDescription\n }\n\n // Try main directory table second\n const containerRoot = path.resolve(itemDir, \"../../..\")\n const mainReadmePath = path.join(containerRoot, \"supernova\", subdirectory, \"README.md\")\n const tableDescription = parseMainReadmeTable(mainReadmePath, itemKey)\n if (tableDescription) {\n return tableDescription\n }\n\n // Fall back to default\n return `Use this to prototype similar to ${fallbackName}`\n}\n\n/**\n * Read package.json and return parsed content\n */\nfunction readPackageJson(basePath: string): any {\n const packageJsonPath = path.join(basePath, \"package.json\")\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(`package.json not found at ${packageJsonPath}`)\n }\n\n const content = fs.readFileSync(packageJsonPath, \"utf8\")\n return JSON.parse(content)\n}\n\n/**\n * Write package.json with proper formatting\n */\nfunction writePackageJson(basePath: string, packageData: any): void {\n const packageJsonPath = path.join(basePath, \"package.json\")\n const content = JSON.stringify(packageData, null, 2) + \"\\n\"\n fs.writeFileSync(packageJsonPath, content, \"utf8\")\n}\n\n/**\n * Discovers items in a supernova subdirectory and returns metadata object\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @param subdirectory - Subdirectory name ('templates' or 'patterns')\n * @returns ItemsObject - Object with item metadata\n */\nfunction discoverItems(basePath: string, subdirectory: \"templates\" | \"patterns\"): ItemsObject {\n const resolvedBasePath = basePath || process.cwd()\n const itemsDir = path.join(resolvedBasePath, \"supernova\", subdirectory)\n\n // Check if directory exists\n if (!fs.existsSync(itemsDir)) {\n throw new Error(`${subdirectory} directory not found at ${itemsDir}`)\n }\n\n const items: ItemsObject = {}\n\n // Read all entries in directory\n const entries = fs.readdirSync(itemsDir, { withFileTypes: true })\n\n for (const entry of entries) {\n // Skip non-directories and README files\n if (!entry.isDirectory() || entry.name === \"README.md\") {\n continue\n }\n\n const itemKey = entry.name\n const itemDir = path.join(itemsDir, itemKey)\n\n // Generate display name\n const displayName = folderNameToDisplayName(itemKey)\n\n // Extract description from README.md\n const description = extractDescriptionFromReadme(itemDir, displayName, itemKey, subdirectory)\n\n // Find thumbnail\n const thumbnail = findThumbnail(itemDir)\n\n // Get all files in item directory with full paths\n const files = getAllFilesInDirectory(itemDir, itemDir)\n const containerRoot = path.resolve(itemDir, \"../../..\") // This goes from supernova/templates/X to container root\n const itemRelativePath = path.relative(containerRoot, itemDir).replaceAll('\\\\', \"/\")\n const fullPathFiles = files.map(file => `${itemRelativePath}/${file}`)\n\n // Parse dependencies from TypeScript/TSX import statements\n const importDependencies = parseImportsFromDirectory(itemDir)\n\n // Combine both sources of dependencies\n const allDependencies = [...new Set(importDependencies)]\n\n // Filter out dependencies that are within the same item directory\n const itemBasePath = itemRelativePath\n const externalDependencies = allDependencies.filter(dep => !dep.startsWith(itemBasePath + \"/\"))\n\n // Validate that external dependencies exist in the filesystem\n const validExternalDependencies = externalDependencies.filter(dep => {\n const fullPath = path.join(containerRoot, dep)\n const exists = fs.existsSync(fullPath)\n if (!exists) {\n console.warn(`Warning: Dependency not found: ${dep} (expected at ${fullPath})`)\n }\n\n return exists\n })\n\n // Combine files and valid dependencies, remove duplicates\n const allFiles = new Set([...fullPathFiles, ...validExternalDependencies])\n // Remove README.md files and thumbnail files from the combined list\n const filteredFiles = [...allFiles].filter(\n file =>\n !file.endsWith(\"README.md\") &&\n ![\"/thumbnail.png\", \"/thumbnail.svg\", \"/thumbnail.jpg\", \"/thumbnail.jpeg\"].some(ext => file.endsWith(ext)),\n )\n\n // Validate that all files exist in the filesystem\n const existingFiles = filteredFiles\n .filter(file => {\n const fullPath = path.join(containerRoot, file)\n const exists = fs.existsSync(fullPath)\n if (!exists) {\n console.warn(`Warning: File not found: ${file} (expected at ${fullPath})`)\n }\n\n return exists\n })\n .sort()\n\n // Build item info object\n const itemInfo: TemplateInfo = {\n name: displayName,\n description,\n files: existingFiles,\n }\n\n // Only add thumbnail property if it exists (with full path)\n if (thumbnail) {\n itemInfo.thumbnail = `${itemRelativePath}/${thumbnail}`\n }\n\n items[itemKey] = itemInfo\n }\n\n return items\n}\n\n/**\n * Discovers templates in supernova/templates directory and returns metadata object\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @returns ItemsObject - Object with template metadata\n */\nfunction discoverTemplates(basePath?: string): ItemsObject {\n const resolvedBasePath = basePath || process.cwd()\n return discoverItems(resolvedBasePath, \"templates\")\n}\n\n/**\n * Discovers patterns in supernova/patterns directory and returns metadata object\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @returns ItemsObject - Object with pattern metadata\n */\nfunction discoverPatterns(basePath?: string): ItemsObject {\n const resolvedBasePath = basePath || process.cwd()\n return discoverItems(resolvedBasePath, \"patterns\")\n}\n\n/**\n * Resolve transitive dependencies for templates/patterns\n * If Template A imports Pattern B, and Pattern B imports Pattern C,\n * then Template A should include files from both Pattern B and Pattern C\n */\nfunction resolveTransitiveDependencies(items: ItemsObject, patterns: ItemsObject, basePath: string): ItemsObject {\n const resolvedItems: ItemsObject = {}\n\n for (const [itemKey, itemInfo] of Object.entries(items)) {\n const resolvedFiles = new Set(itemInfo.files)\n\n // Find which patterns this item depends on\n const dependentPatterns = new Set<string>()\n\n // Check direct dependencies by looking at file paths\n for (const file of itemInfo.files) {\n const pathMatch = file.match(/^supernova\\/patterns\\/([^\\/]+)\\//)\n if (pathMatch) {\n dependentPatterns.add(pathMatch[1])\n }\n }\n\n // Recursively resolve transitive dependencies\n function addTransitiveDependencies(patternKey: string, visited = new Set<string>()) {\n if (visited.has(patternKey)) {\n return // Avoid circular dependencies\n }\n\n visited.add(patternKey)\n\n const pattern = patterns[patternKey]\n if (!pattern) {\n return\n }\n\n // Add all files from this pattern\n for (const file of pattern.files) resolvedFiles.add(file)\n\n // Find what patterns this pattern depends on\n for (const file of pattern.files) {\n const pathMatch = file.match(/^supernova\\/patterns\\/([^\\/]+)\\//)\n if (pathMatch && pathMatch[1] !== patternKey) {\n // Recursively add transitive dependencies\n addTransitiveDependencies(pathMatch[1], new Set(visited))\n }\n }\n }\n\n // Resolve transitive dependencies for each direct dependency\n for (const patternKey of dependentPatterns) {\n addTransitiveDependencies(patternKey)\n }\n\n // Validate all resolved files exist\n const containerRoot = path.resolve(basePath)\n const validFiles = [...resolvedFiles]\n .filter(file => {\n const fullPath = path.join(containerRoot, file)\n const exists = fs.existsSync(fullPath)\n if (!exists) {\n console.warn(`Warning: Transitive dependency not found: ${file} (expected at ${fullPath})`)\n }\n\n return exists\n })\n .sort()\n\n resolvedItems[itemKey] = {\n ...itemInfo,\n files: validFiles,\n }\n }\n\n return resolvedItems\n}\n\n/**\n * Discovers templates and patterns, then updates package.json with the results\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @returns Promise<{templates: ItemsObject, patterns: ItemsObject}> - Object with template and pattern metadata\n */\n\nexport async function discoverTemplatesAndPatterns(\n basePath?: string,\n): Promise<{ templates: ItemsObject; patterns: ItemsObject }> {\n const resolvedBasePath = basePath || process.cwd()\n\n // First discover templates and patterns independently\n const rawTemplates = discoverTemplates(resolvedBasePath)\n const rawPatterns = discoverPatterns(resolvedBasePath)\n\n // Resolve transitive dependencies for templates\n const templates = resolveTransitiveDependencies(rawTemplates, rawPatterns, resolvedBasePath)\n\n // Resolve transitive dependencies for patterns (in case patterns depend on other patterns)\n const patterns = resolveTransitiveDependencies(rawPatterns, rawPatterns, resolvedBasePath)\n\n return { templates, patterns }\n}\n\nexport async function discoverFilesForTemplates(\n pkgTemplates: Record<string, Pick<TemplateInfo, \"name\" | \"description\">>,\n basePath?: string,\n): Promise<ItemsObject> {\n const { templates } = await discoverTemplatesAndPatterns(basePath)\n return Object.fromEntries(\n Object.entries(pkgTemplates).map(([key, pkgTemplate]) => [key, { ...templates[key], ...pkgTemplate }]),\n )\n}\n\nexport async function discoverAndUpdatePackageJson(\n basePath?: string,\n): Promise<{ templates: ItemsObject; patterns: ItemsObject }> {\n const result = await discoverTemplatesAndPatterns(basePath)\n const resolvedBasePath = basePath || process.cwd()\n\n // Read current package.json\n const packageData = readPackageJson(resolvedBasePath)\n\n // Ensure supernova object exists\n if (!packageData.supernova) {\n packageData.supernova = {}\n }\n\n // Only persist name and description — files and thumbnail are always re-discovered at upload time\n packageData.supernova.templates = Object.fromEntries(\n Object.entries(result.templates).map(([key, { name, description }]) => [key, { name, description }]),\n )\n\n // Write back to package.json\n writePackageJson(resolvedBasePath, packageData)\n\n return result\n}\n"],"names":[],"mappings":"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","debug_id":"8d01cf90-bafa-5c36-82b4-70b7a809ff77"}
1
+ {"version":3,"file":"discover.js","sources":["../../src/utils/discover.ts"],"sourceRoot":"","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\n\nexport interface TemplateInfo {\n description: string\n files: string[]\n name: string\n thumbnail?: string\n}\n\ninterface ItemsObject {\n [itemKey: string]: TemplateInfo\n}\n\n/**\n * Converts folder name to spaced title case\n * e.g., \"AppShell\" -> \"App Shell\", \"PortalFeatureDetail\" -> \"Portal Feature Detail\"\n */\nexport function folderNameToDisplayName(folderName: string): string {\n return folderName\n .replaceAll(/[-_]/g, \" \") // kebab-case and snake_case → spaces\n .replaceAll(/([A-Z])/g, \" $1\") // PascalCase/camelCase → spaces before uppercase\n .trim()\n .replaceAll(/\\s+/g, \" \") // normalize multiple spaces\n .replaceAll(/\\b\\w/g, c => c.toUpperCase()) // capitalize each word\n}\n\n/**\n * Recursively get all files in a directory relative to that directory\n */\nfunction getAllFilesInDirectory(dirPath: string, relativeTo: string): string[] {\n return fs\n .readdirSync(dirPath, { recursive: true, withFileTypes: true })\n .filter(entry => entry.isFile() && entry.name !== \"README.md\")\n .map(entry => path.relative(relativeTo, path.join(entry.parentPath || dirPath, entry.name)))\n .sort()\n}\n\n/**\n * Check for thumbnail files in a directory\n */\nfunction findThumbnail(templateDir: string): string | undefined {\n return [\".png\", \".svg\", \".jpg\", \".jpeg\"]\n .map(ext => `thumbnail${ext}`)\n .find(filename => fs.existsSync(path.join(templateDir, filename)))\n}\n\n/**\n * Parse description from a README.md file in any directory\n * Takes the first sentence after the first # heading\n *\n * @param readmeFilePath - Full path to README.md file\n * @returns string - The description or empty string if not found\n */\nfunction parseDescriptionFromReadme(readmeFilePath: string): string {\n if (!fs.existsSync(readmeFilePath)) return \"\"\n\n try {\n const content = fs.readFileSync(readmeFilePath, \"utf8\")\n\n // Find first paragraph after first # heading\n const match = content.match(/^#[^\\n]*\\n+([^\\n#]+)/m)\n if (!match) return \"\"\n\n let description = match[1].trim()\n\n // Clean up the description\n description = description.replaceAll(\"**\", \"\").replaceAll(\"*\", \"\") // Remove markdown formatting\n description = description.charAt(0).toUpperCase() + description.slice(1) // Ensure capital letter\n\n // Ensure it ends with period if it doesn't already\n if (!description.endsWith(\".\") && !description.endsWith(\"!\") && !description.endsWith(\"?\")) {\n description += \".\"\n }\n\n return description\n } catch {\n return \"\"\n }\n}\n\n/**\n * Parse TypeScript/TSX files for import statements and extract file dependencies\n * @param filePath - Path to .ts/.tsx file\n * @param baseDir - Base directory for resolving relative imports\n * @returns string[] - Array of imported file paths (resolved to project root)\n */\nfunction parseImportsFromTSFile(filePath: string, baseDir: string): string[] {\n if (!fs.existsSync(filePath)) return []\n\n try {\n const content = fs.readFileSync(filePath, \"utf8\")\n const dependencies: string[] = []\n\n // Regex to match import statements\n const importRegex = /import\\s+(?:[\\w*{}\\s,]+\\s+from\\s+)?['\"`]([^'\"`]+)['\"`]/g\n\n let match\n while ((match = importRegex.exec(content)) !== null) {\n const importPath = match[1]\n\n // Only process relative imports (starting with ./ or ../)\n if (importPath.startsWith(\"./\") || importPath.startsWith(\"../\")) {\n try {\n // Resolve relative to the file's directory\n const fileDir = path.dirname(filePath)\n const resolvedPath = path.resolve(fileDir, importPath)\n\n // Try common extensions if no extension provided\n const possiblePaths = [\n resolvedPath,\n resolvedPath + \".tsx\",\n resolvedPath + \".ts\",\n resolvedPath + \".json\",\n resolvedPath + \".js\",\n ]\n\n const actualPath = possiblePaths.find(p => fs.existsSync(p))\n\n if (actualPath) {\n // Convert to path relative to container root\n const containerRoot = path.resolve(baseDir, \"../../..\")\n const relativePath = path.relative(containerRoot, actualPath).replaceAll(\"\\\\\", \"/\")\n\n // Only include files within the supernova directory\n if (relativePath.startsWith(\"supernova/\")) {\n dependencies.push(relativePath)\n }\n }\n } catch {\n // Skip invalid import paths\n }\n }\n }\n\n return dependencies\n } catch {\n return []\n }\n}\n\n/**\n * Parse all TypeScript/TSX files in a directory for import dependencies\n * @param itemDir - Directory containing the template/pattern\n * @returns string[] - Array of all imported file paths from all TS/TSX files\n */\nfunction parseImportsFromDirectory(itemDir: string): string[] {\n const dependencies = new Set<string>()\n\n try {\n const entries = fs.readdirSync(itemDir, { recursive: true, withFileTypes: true })\n\n for (const entry of entries) {\n if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase()\n if (ext === \".ts\" || ext === \".tsx\") {\n const fullPath = path.join(entry.parentPath || itemDir, entry.name)\n const fileDeps = parseImportsFromTSFile(fullPath, itemDir)\n for (const dep of fileDeps) dependencies.add(dep)\n }\n }\n }\n } catch {\n // Skip directories that can't be read\n }\n\n return [...dependencies].sort()\n}\n\n/**\n * Parse main directory README.md for table-based descriptions\n * Extracts description from markdown table like:\n * | Pattern | Description |\n * | PromptEditor | Tiptap rich text editor |\n */\nfunction parseMainReadmeTable(mainReadmePath: string, itemKey: string): string | null {\n if (!fs.existsSync(mainReadmePath)) return null\n\n try {\n const content = fs.readFileSync(mainReadmePath, \"utf8\")\n\n // Find table that contains Pattern or Template header\n const tableMatch = content.match(/(\\|\\s*(?:Pattern|Template)\\s*\\|[^\\n]*)\\n\\|[-\\s|]*\\n((?:\\|[^\\n]*\\n)*)/i)\n if (!tableMatch) return null\n\n // Parse header to get column indices\n const headerCells = tableMatch[1]\n .split(\"|\")\n .map(cell => cell.trim())\n .filter(Boolean)\n const nameIndex = headerCells.findIndex(cell => /^(Pattern|Template)$/i.test(cell))\n const descIndex = headerCells.findIndex(cell => /^Description$/i.test(cell))\n\n if (nameIndex === -1 || descIndex === -1) return null\n\n // Parse table rows\n const rows = tableMatch[2].split(\"\\n\").filter(row => row.trim())\n\n for (const row of rows) {\n const cells = row\n .split(\"|\")\n .map(cell => cell.trim())\n .filter(Boolean)\n\n if (cells.length > Math.max(nameIndex, descIndex)) {\n const name = cells[nameIndex]?.replace(/\\[([^\\]]+)\\].*/, \"$1\") // Remove markdown link syntax\n const description = cells[descIndex]\n\n if (name === itemKey) {\n return description.endsWith(\".\") ? description : description + \".\"\n }\n }\n }\n } catch {\n // If error reading file, return null\n }\n\n return null\n}\n\n/**\n * Extract description from README.md file\n * Priority: 1) Individual README, 2) Main directory table, 3) Fallback\n */\nfunction extractDescriptionFromReadme(\n itemDir: string,\n fallbackName: string,\n itemKey: string,\n subdirectory: \"templates\" | \"patterns\",\n): string {\n // Try individual README first (highest priority)\n const itemReadmePath = path.join(itemDir, \"README.md\")\n const individualDescription = parseDescriptionFromReadme(itemReadmePath)\n if (individualDescription) {\n return individualDescription\n }\n\n // Try main directory table second\n const containerRoot = path.resolve(itemDir, \"../../..\")\n const mainReadmePath = path.join(containerRoot, \"supernova\", subdirectory, \"README.md\")\n const tableDescription = parseMainReadmeTable(mainReadmePath, itemKey)\n if (tableDescription) {\n return tableDescription\n }\n\n // Fall back to default\n return `Use this to prototype similar to ${fallbackName}`\n}\n\n/**\n * Read package.json and return parsed content\n */\nfunction readPackageJson(basePath: string): any {\n const packageJsonPath = path.join(basePath, \"package.json\")\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(`package.json not found at ${packageJsonPath}`)\n }\n\n const content = fs.readFileSync(packageJsonPath, \"utf8\")\n return JSON.parse(content)\n}\n\n/**\n * Write package.json with proper formatting\n */\nfunction writePackageJson(basePath: string, packageData: any): void {\n const packageJsonPath = path.join(basePath, \"package.json\")\n const content = JSON.stringify(packageData, null, 2) + \"\\n\"\n fs.writeFileSync(packageJsonPath, content, \"utf8\")\n}\n\n/**\n * Discovers items in a supernova subdirectory and returns metadata object\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @param subdirectory - Subdirectory name ('templates' or 'patterns')\n * @returns ItemsObject - Object with item metadata\n */\nfunction discoverItems(basePath: string, subdirectory: \"templates\" | \"patterns\"): ItemsObject {\n const resolvedBasePath = basePath || process.cwd()\n const itemsDir = path.join(resolvedBasePath, \"supernova\", subdirectory)\n\n // Check if directory exists\n if (!fs.existsSync(itemsDir)) {\n throw new Error(`${subdirectory} directory not found at ${itemsDir}`)\n }\n\n const items: ItemsObject = {}\n\n // Read all entries in directory\n const entries = fs.readdirSync(itemsDir, { withFileTypes: true })\n\n for (const entry of entries) {\n // Skip non-directories and README files\n if (!entry.isDirectory() || entry.name === \"README.md\") {\n continue\n }\n\n const itemKey = entry.name\n const itemDir = path.join(itemsDir, itemKey)\n\n // Generate display name\n const displayName = folderNameToDisplayName(itemKey)\n\n // Extract description from README.md\n const description = extractDescriptionFromReadme(itemDir, displayName, itemKey, subdirectory)\n\n // Find thumbnail\n const thumbnail = findThumbnail(itemDir)\n\n // Get all files in item directory with full paths\n const files = getAllFilesInDirectory(itemDir, itemDir)\n const containerRoot = path.resolve(itemDir, \"../../..\") // This goes from supernova/templates/X to container root\n const itemRelativePath = path.relative(containerRoot, itemDir).replaceAll(\"\\\\\", \"/\")\n const fullPathFiles = files.map(file => `${itemRelativePath}/${file}`)\n\n // Parse dependencies from TypeScript/TSX import statements\n const importDependencies = parseImportsFromDirectory(itemDir)\n\n // Combine both sources of dependencies\n const allDependencies = [...new Set(importDependencies)]\n\n // Filter out dependencies that are within the same item directory\n const itemBasePath = itemRelativePath\n const externalDependencies = allDependencies.filter(dep => !dep.startsWith(itemBasePath + \"/\"))\n\n // Validate that external dependencies exist in the filesystem\n const validExternalDependencies = externalDependencies.filter(dep => {\n const fullPath = path.join(containerRoot, dep)\n const exists = fs.existsSync(fullPath)\n if (!exists) {\n console.warn(`Warning: Dependency not found: ${dep} (expected at ${fullPath})`)\n }\n\n return exists\n })\n\n // Combine files and valid dependencies, remove duplicates\n const allFiles = new Set([...fullPathFiles, ...validExternalDependencies])\n // Remove README.md files and thumbnail files from the combined list\n const filteredFiles = [...allFiles].filter(\n file =>\n !file.endsWith(\"README.md\") &&\n ![\"/thumbnail.png\", \"/thumbnail.svg\", \"/thumbnail.jpg\", \"/thumbnail.jpeg\"].some(ext => file.endsWith(ext)),\n )\n\n // Validate that all files exist in the filesystem\n const existingFiles = filteredFiles\n .filter(file => {\n const fullPath = path.join(containerRoot, file)\n const exists = fs.existsSync(fullPath)\n if (!exists) {\n console.warn(`Warning: File not found: ${file} (expected at ${fullPath})`)\n }\n\n return exists\n })\n .sort()\n\n // Build item info object\n const itemInfo: TemplateInfo = {\n name: displayName,\n description,\n files: existingFiles,\n }\n\n // Only add thumbnail property if it exists (with full path)\n if (thumbnail) {\n itemInfo.thumbnail = `${itemRelativePath}/${thumbnail}`\n }\n\n items[itemKey] = itemInfo\n }\n\n return items\n}\n\n/**\n * Discovers templates in supernova/templates directory and returns metadata object\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @returns ItemsObject - Object with template metadata\n */\nfunction discoverTemplates(basePath?: string): ItemsObject {\n const resolvedBasePath = basePath || process.cwd()\n return discoverItems(resolvedBasePath, \"templates\")\n}\n\n/**\n * Discovers patterns in supernova/patterns directory and returns metadata object\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @returns ItemsObject - Object with pattern metadata\n */\nfunction discoverPatterns(basePath?: string): ItemsObject {\n const resolvedBasePath = basePath || process.cwd()\n return discoverItems(resolvedBasePath, \"patterns\")\n}\n\n/**\n * Resolve transitive dependencies for templates/patterns\n * If Template A imports Pattern B, and Pattern B imports Pattern C,\n * then Template A should include files from both Pattern B and Pattern C\n */\nfunction resolveTransitiveDependencies(items: ItemsObject, patterns: ItemsObject, basePath: string): ItemsObject {\n const resolvedItems: ItemsObject = {}\n\n for (const [itemKey, itemInfo] of Object.entries(items)) {\n const resolvedFiles = new Set(itemInfo.files)\n\n // Find which patterns this item depends on\n const dependentPatterns = new Set<string>()\n\n // Check direct dependencies by looking at file paths\n for (const file of itemInfo.files) {\n const pathMatch = file.match(/^supernova\\/patterns\\/([^\\/]+)\\//)\n if (pathMatch) {\n dependentPatterns.add(pathMatch[1])\n }\n }\n\n // Recursively resolve transitive dependencies\n function addTransitiveDependencies(patternKey: string, visited = new Set<string>()) {\n if (visited.has(patternKey)) {\n return // Avoid circular dependencies\n }\n\n visited.add(patternKey)\n\n const pattern = patterns[patternKey]\n if (!pattern) {\n return\n }\n\n // Add all files from this pattern\n for (const file of pattern.files) resolvedFiles.add(file)\n\n // Find what patterns this pattern depends on\n for (const file of pattern.files) {\n const pathMatch = file.match(/^supernova\\/patterns\\/([^\\/]+)\\//)\n if (pathMatch && pathMatch[1] !== patternKey) {\n // Recursively add transitive dependencies\n addTransitiveDependencies(pathMatch[1], new Set(visited))\n }\n }\n }\n\n // Resolve transitive dependencies for each direct dependency\n for (const patternKey of dependentPatterns) {\n addTransitiveDependencies(patternKey)\n }\n\n // Validate all resolved files exist\n const containerRoot = path.resolve(basePath)\n const validFiles = [...resolvedFiles]\n .filter(file => {\n const fullPath = path.join(containerRoot, file)\n const exists = fs.existsSync(fullPath)\n if (!exists) {\n console.warn(`Warning: Transitive dependency not found: ${file} (expected at ${fullPath})`)\n }\n\n return exists\n })\n .sort()\n\n resolvedItems[itemKey] = {\n ...itemInfo,\n files: validFiles,\n }\n }\n\n return resolvedItems\n}\n\n/**\n * Discovers templates and patterns, then updates package.json with the results\n *\n * @param basePath - Base directory path (defaults to current working directory)\n * @returns Promise<{templates: ItemsObject, patterns: ItemsObject}> - Object with template and pattern metadata\n */\n\nexport async function discoverTemplatesAndPatterns(\n basePath?: string,\n): Promise<{ templates: ItemsObject; patterns: ItemsObject }> {\n const resolvedBasePath = basePath || process.cwd()\n\n // First discover templates and patterns independently\n const rawTemplates = discoverTemplates(resolvedBasePath)\n const rawPatterns = discoverPatterns(resolvedBasePath)\n\n // Resolve transitive dependencies for templates\n const templates = resolveTransitiveDependencies(rawTemplates, rawPatterns, resolvedBasePath)\n\n // Resolve transitive dependencies for patterns (in case patterns depend on other patterns)\n const patterns = resolveTransitiveDependencies(rawPatterns, rawPatterns, resolvedBasePath)\n\n return { templates, patterns }\n}\n\nexport async function discoverFilesForTemplates(\n pkgTemplates: Record<string, Pick<TemplateInfo, \"name\" | \"description\">>,\n basePath?: string,\n): Promise<ItemsObject> {\n const { templates } = await discoverTemplatesAndPatterns(basePath)\n return Object.fromEntries(\n Object.entries(pkgTemplates).map(([key, pkgTemplate]) => [key, { ...templates[key], ...pkgTemplate }]),\n )\n}\n\nexport async function discoverAndUpdatePackageJson(\n basePath?: string,\n): Promise<{ templates: ItemsObject; patterns: ItemsObject }> {\n const result = await discoverTemplatesAndPatterns(basePath)\n const resolvedBasePath = basePath || process.cwd()\n\n // Read current package.json\n const packageData = readPackageJson(resolvedBasePath)\n\n // Ensure supernova object exists\n if (!packageData.supernova) {\n packageData.supernova = {}\n }\n\n // Only persist name and description — files and thumbnail are always re-discovered at upload time\n packageData.supernova.templates = Object.fromEntries(\n Object.entries(result.templates).map(([key, { name, description }]) => [key, { name, description }]),\n )\n\n // Write back to package.json\n writePackageJson(resolvedBasePath, packageData)\n\n return result\n}\n"],"names":[],"mappings":"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","debugId":"3641e013-6aae-5262-897b-e2c830289d87"}