@supernovaio/cli 2.0.38 → 2.0.40

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 (172) hide show
  1. package/README.md +1 -0
  2. package/dist/code-analyzer/analyzers/component-usage.d.ts +6 -0
  3. package/dist/code-analyzer/analyzers/component-usage.d.ts.map +1 -0
  4. package/dist/code-analyzer/analyzers/component-usage.js +344 -0
  5. package/dist/code-analyzer/analyzers/component-usage.js.map +1 -0
  6. package/dist/code-analyzer/analyzers/helpers.d.ts +11 -0
  7. package/dist/code-analyzer/analyzers/helpers.d.ts.map +1 -0
  8. package/dist/code-analyzer/analyzers/helpers.js +59 -0
  9. package/dist/code-analyzer/analyzers/helpers.js.map +1 -0
  10. package/dist/code-analyzer/analyzers/index.d.ts +8 -0
  11. package/dist/code-analyzer/analyzers/index.d.ts.map +1 -0
  12. package/dist/code-analyzer/analyzers/index.js +11 -0
  13. package/dist/code-analyzer/analyzers/index.js.map +1 -0
  14. package/dist/code-analyzer/analyzers/jsdoc.d.ts +3 -0
  15. package/dist/code-analyzer/analyzers/jsdoc.d.ts.map +1 -0
  16. package/dist/code-analyzer/analyzers/jsdoc.js +7 -0
  17. package/dist/code-analyzer/analyzers/jsdoc.js.map +1 -0
  18. package/dist/code-analyzer/analyzers/static-components.d.ts +3 -0
  19. package/dist/code-analyzer/analyzers/static-components.d.ts.map +1 -0
  20. package/dist/code-analyzer/analyzers/static-components.js +399 -0
  21. package/dist/code-analyzer/analyzers/static-components.js.map +1 -0
  22. package/dist/code-analyzer/analyzers/storybook-docs.d.ts +3 -0
  23. package/dist/code-analyzer/analyzers/storybook-docs.d.ts.map +1 -0
  24. package/dist/code-analyzer/analyzers/storybook-docs.js +163 -0
  25. package/dist/code-analyzer/analyzers/storybook-docs.js.map +1 -0
  26. package/dist/code-analyzer/analyzers/storybook-stories.d.ts +3 -0
  27. package/dist/code-analyzer/analyzers/storybook-stories.d.ts.map +1 -0
  28. package/dist/code-analyzer/analyzers/storybook-stories.js +91 -0
  29. package/dist/code-analyzer/analyzers/storybook-stories.js.map +1 -0
  30. package/dist/code-analyzer/analyzers/types.d.ts +88 -0
  31. package/dist/code-analyzer/analyzers/types.d.ts.map +1 -0
  32. package/dist/code-analyzer/analyzers/types.js +12 -0
  33. package/dist/code-analyzer/analyzers/types.js.map +1 -0
  34. package/dist/code-analyzer/analyzers/typescript-api.d.ts +3 -0
  35. package/dist/code-analyzer/analyzers/typescript-api.d.ts.map +1 -0
  36. package/dist/code-analyzer/analyzers/typescript-api.js +7 -0
  37. package/dist/code-analyzer/analyzers/typescript-api.js.map +1 -0
  38. package/dist/code-analyzer/components/analyze.d.ts +8 -0
  39. package/dist/code-analyzer/components/analyze.d.ts.map +1 -0
  40. package/dist/code-analyzer/components/analyze.js +38 -0
  41. package/dist/code-analyzer/components/analyze.js.map +1 -0
  42. package/dist/code-analyzer/components/mappers/component.d.ts +4 -0
  43. package/dist/code-analyzer/components/mappers/component.d.ts.map +1 -0
  44. package/dist/code-analyzer/components/mappers/component.js +20 -0
  45. package/dist/code-analyzer/components/mappers/component.js.map +1 -0
  46. package/dist/code-analyzer/components/mappers/property.d.ts +4 -0
  47. package/dist/code-analyzer/components/mappers/property.d.ts.map +1 -0
  48. package/dist/code-analyzer/components/mappers/property.js +19 -0
  49. package/dist/code-analyzer/components/mappers/property.js.map +1 -0
  50. package/dist/code-analyzer/components/parser/index.d.ts +6 -0
  51. package/dist/code-analyzer/components/parser/index.d.ts.map +1 -0
  52. package/dist/code-analyzer/components/parser/index.js +9 -0
  53. package/dist/code-analyzer/components/parser/index.js.map +1 -0
  54. package/dist/code-analyzer/components/parser/module-parser.d.ts +12 -0
  55. package/dist/code-analyzer/components/parser/module-parser.d.ts.map +1 -0
  56. package/dist/code-analyzer/components/parser/module-parser.js +116 -0
  57. package/dist/code-analyzer/components/parser/module-parser.js.map +1 -0
  58. package/dist/code-analyzer/components/parser/parser.d.ts +46 -0
  59. package/dist/code-analyzer/components/parser/parser.d.ts.map +1 -0
  60. package/dist/code-analyzer/components/parser/parser.js +904 -0
  61. package/dist/code-analyzer/components/parser/parser.js.map +1 -0
  62. package/dist/code-analyzer/components/parser/types.d.ts +123 -0
  63. package/dist/code-analyzer/components/parser/types.d.ts.map +1 -0
  64. package/dist/code-analyzer/components/parser/types.js +21 -0
  65. package/dist/code-analyzer/components/parser/types.js.map +1 -0
  66. package/dist/code-analyzer/components/parser/utils/build-filter.d.ts +3 -0
  67. package/dist/code-analyzer/components/parser/utils/build-filter.d.ts.map +1 -0
  68. package/dist/code-analyzer/components/parser/utils/build-filter.js +31 -0
  69. package/dist/code-analyzer/components/parser/utils/build-filter.js.map +1 -0
  70. package/dist/code-analyzer/components/parser/utils/filter-duplicates.d.ts +3 -0
  71. package/dist/code-analyzer/components/parser/utils/filter-duplicates.d.ts.map +1 -0
  72. package/dist/code-analyzer/components/parser/utils/filter-duplicates.js +17 -0
  73. package/dist/code-analyzer/components/parser/utils/filter-duplicates.js.map +1 -0
  74. package/dist/code-analyzer/components/parser/utils/is-react-component.d.ts +4 -0
  75. package/dist/code-analyzer/components/parser/utils/is-react-component.d.ts.map +1 -0
  76. package/dist/code-analyzer/components/parser/utils/is-react-component.js +43 -0
  77. package/dist/code-analyzer/components/parser/utils/is-react-component.js.map +1 -0
  78. package/dist/code-analyzer/components/parser/utils/trim-file-name.d.ts +2 -0
  79. package/dist/code-analyzer/components/parser/utils/trim-file-name.d.ts.map +1 -0
  80. package/dist/code-analyzer/components/parser/utils/trim-file-name.js +22 -0
  81. package/dist/code-analyzer/components/parser/utils/trim-file-name.js.map +1 -0
  82. package/dist/code-analyzer/components/types.d.ts +18 -0
  83. package/dist/code-analyzer/components/types.d.ts.map +1 -0
  84. package/dist/code-analyzer/components/types.js +5 -0
  85. package/dist/code-analyzer/components/types.js.map +1 -0
  86. package/dist/code-analyzer/components/utils/get-module-exports-path.d.ts +2 -0
  87. package/dist/code-analyzer/components/utils/get-module-exports-path.d.ts.map +1 -0
  88. package/dist/code-analyzer/components/utils/get-module-exports-path.js +60 -0
  89. package/dist/code-analyzer/components/utils/get-module-exports-path.js.map +1 -0
  90. package/dist/code-analyzer/index.d.ts +5 -0
  91. package/dist/code-analyzer/index.d.ts.map +1 -0
  92. package/dist/code-analyzer/index.js +8 -0
  93. package/dist/code-analyzer/index.js.map +1 -0
  94. package/dist/code-analyzer/orchestrator/index.d.ts +2 -0
  95. package/dist/code-analyzer/orchestrator/index.d.ts.map +1 -0
  96. package/dist/code-analyzer/orchestrator/index.js +5 -0
  97. package/dist/code-analyzer/orchestrator/index.js.map +1 -0
  98. package/dist/code-analyzer/orchestrator/run-analysis.d.ts +19 -0
  99. package/dist/code-analyzer/orchestrator/run-analysis.d.ts.map +1 -0
  100. package/dist/code-analyzer/orchestrator/run-analysis.js +109 -0
  101. package/dist/code-analyzer/orchestrator/run-analysis.js.map +1 -0
  102. package/dist/code-analyzer/snapshot/index.d.ts +2 -0
  103. package/dist/code-analyzer/snapshot/index.d.ts.map +1 -0
  104. package/dist/code-analyzer/snapshot/index.js +5 -0
  105. package/dist/code-analyzer/snapshot/index.js.map +1 -0
  106. package/dist/code-analyzer/snapshot/write-snapshot.d.ts +17 -0
  107. package/dist/code-analyzer/snapshot/write-snapshot.d.ts.map +1 -0
  108. package/dist/code-analyzer/snapshot/write-snapshot.js +60 -0
  109. package/dist/code-analyzer/snapshot/write-snapshot.js.map +1 -0
  110. package/dist/commands/analyze/adoption.d.ts +15 -0
  111. package/dist/commands/analyze/adoption.d.ts.map +1 -0
  112. package/dist/commands/analyze/adoption.js +34 -0
  113. package/dist/commands/analyze/adoption.js.map +1 -0
  114. package/dist/commands/analyze/components.d.ts +15 -0
  115. package/dist/commands/analyze/components.d.ts.map +1 -0
  116. package/dist/commands/analyze/components.js +34 -0
  117. package/dist/commands/analyze/components.js.map +1 -0
  118. package/dist/commands/analyze/status.d.ts +24 -0
  119. package/dist/commands/analyze/status.d.ts.map +1 -0
  120. package/dist/commands/analyze/status.js +54 -0
  121. package/dist/commands/analyze/status.js.map +1 -0
  122. package/dist/commands/analyze.d.ts +15 -0
  123. package/dist/commands/analyze.d.ts.map +1 -0
  124. package/dist/commands/analyze.js +34 -0
  125. package/dist/commands/analyze.js.map +1 -0
  126. package/dist/commands/components-import.d.ts +3 -3
  127. package/dist/commands/components-import.d.ts.map +1 -1
  128. package/dist/commands/components-import.js +9 -3
  129. package/dist/commands/components-import.js.map +1 -1
  130. package/dist/commands/publish-documentation.d.ts +2 -2
  131. package/dist/commands/run-local-exporter.js +2 -2
  132. package/dist/commands/run-local-exporter.js.map +1 -1
  133. package/dist/commands/storybook-import.d.ts +2 -2
  134. package/dist/commands/template-upload.d.ts.map +1 -1
  135. package/dist/commands/template-upload.js +10 -12
  136. package/dist/commands/template-upload.js.map +1 -1
  137. package/dist/types/config.d.ts +41 -5
  138. package/dist/types/config.d.ts.map +1 -1
  139. package/dist/types/config.js +9 -2
  140. package/dist/types/config.js.map +1 -1
  141. package/dist/types/types.js +2 -2
  142. package/dist/types/types.js.map +1 -1
  143. package/dist/utils/analyze-command.d.ts +42 -0
  144. package/dist/utils/analyze-command.d.ts.map +1 -0
  145. package/dist/utils/analyze-command.js +606 -0
  146. package/dist/utils/analyze-command.js.map +1 -0
  147. package/dist/utils/analyze-status.d.ts +7 -0
  148. package/dist/utils/analyze-status.d.ts.map +1 -0
  149. package/dist/utils/analyze-status.js +94 -0
  150. package/dist/utils/analyze-status.js.map +1 -0
  151. package/dist/utils/config.service.d.ts +1 -2
  152. package/dist/utils/config.service.d.ts.map +1 -1
  153. package/dist/utils/config.service.js +5 -7
  154. package/dist/utils/config.service.js.map +1 -1
  155. package/dist/utils/discover.d.ts +2 -2
  156. package/dist/utils/discover.d.ts.map +1 -1
  157. package/dist/utils/discover.js +25 -23
  158. package/dist/utils/discover.js.map +1 -1
  159. package/dist/utils/figma-tokens-data-loader.js +2 -2
  160. package/dist/utils/figma-tokens-data-loader.js.map +1 -1
  161. package/dist/utils/http-client.d.ts +4 -0
  162. package/dist/utils/http-client.d.ts.map +1 -0
  163. package/dist/utils/http-client.js +18 -0
  164. package/dist/utils/http-client.js.map +1 -0
  165. package/dist/utils/run-exporter/exporter-utils.js +2 -2
  166. package/dist/utils/run-exporter/exporter-utils.js.map +1 -1
  167. package/dist/utils/validate-templates.d.ts +1 -1
  168. package/dist/utils/validate-templates.d.ts.map +1 -1
  169. package/dist/utils/validate-templates.js +4 -4
  170. package/dist/utils/validate-templates.js.map +1 -1
  171. package/oclif.manifest.json +216 -1
  172. package/package.json +12 -4
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import { createApiClient } from "./http-client.js";
2
+ export declare function watchAnalyzeStatus(input: {
3
+ apiClient: Awaited<ReturnType<typeof createApiClient>>;
4
+ designSystemId: string;
5
+ error(message: string): never;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=analyze-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-status.d.ts","sourceRoot":"","sources":["../../src/utils/analyze-status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAuBlD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAA;IACtD,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAA;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB"}
@@ -0,0 +1,94 @@
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]="7d5388d6-d783-5ba8-a8ae-467aeaff909e")}catch(e){}}();
3
+ import { action } from "@oclif/core/ux";
4
+ import { isAxiosError } from "axios";
5
+ import { sleep } from "./common.js";
6
+ const WATCH_INTERVAL_SECONDS = 3;
7
+ const WATCH_TIMEOUT_SECONDS = 900;
8
+ export async function watchAnalyzeStatus(input) {
9
+ const spinner = new AnalyzeStatusSpinner();
10
+ const startedAt = Date.now();
11
+ const timeoutMs = WATCH_TIMEOUT_SECONDS * 1000;
12
+ spinner.start("Watching processing runs");
13
+ try {
14
+ while (true) {
15
+ const { runs } = await fetchAnalyzeRuns(input);
16
+ const activeRuns = runs.filter(run => run.status === "Processing");
17
+ const elapsed = Math.floor((Date.now() - startedAt) / 1000);
18
+ spinner.update(`Processing snapshots activeRuns=${activeRuns.length} elapsed=${formatElapsed(elapsed)}`);
19
+ if (activeRuns.length === 0) {
20
+ spinner.stop(`DONE processing activeRuns=0 elapsed=${formatElapsed(elapsed)}`);
21
+ return;
22
+ }
23
+ if (Date.now() - startedAt >= timeoutMs) {
24
+ spinner.stop();
25
+ input.error(`Timed out waiting for processing runs after ${WATCH_TIMEOUT_SECONDS}s.`);
26
+ }
27
+ await sleep(WATCH_INTERVAL_SECONDS * 1000);
28
+ }
29
+ }
30
+ finally {
31
+ spinner.stop();
32
+ }
33
+ }
34
+ async function fetchAnalyzeRuns(input) {
35
+ const endpoint = `/code-snapshots/process-status/${encodeURIComponent(input.designSystemId)}`;
36
+ try {
37
+ const response = await input.apiClient.get(endpoint);
38
+ return response.data.result;
39
+ }
40
+ catch (error) {
41
+ if (isAxiosError(error) && error.response?.status === 404) {
42
+ input.error("Status endpoint is not deployed on this backend yet. Deploy backend and try again.");
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ function formatElapsed(totalSeconds) {
48
+ const minutes = Math.floor(totalSeconds / 60);
49
+ const seconds = totalSeconds % 60;
50
+ return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
51
+ }
52
+ class AnalyzeStatusSpinner {
53
+ spinnerFrames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
54
+ spinnerIndex = 0;
55
+ spinnerInterval = null;
56
+ spinnerMessage = "";
57
+ start(initialMessage) {
58
+ this.spinnerMessage = initialMessage;
59
+ if (!process.stdout.isTTY) {
60
+ action.start(initialMessage);
61
+ return;
62
+ }
63
+ this.spinnerInterval = setInterval(() => {
64
+ const frame = this.spinnerFrames[this.spinnerIndex++ % this.spinnerFrames.length];
65
+ process.stdout.write(`\r${frame} ${this.spinnerMessage}\u001B[K`);
66
+ }, 80);
67
+ }
68
+ update(message) {
69
+ this.spinnerMessage = message;
70
+ }
71
+ stop(finalMessage) {
72
+ if (!process.stdout.isTTY) {
73
+ if (finalMessage) {
74
+ action.stop(finalMessage);
75
+ }
76
+ else {
77
+ action.stop();
78
+ }
79
+ return;
80
+ }
81
+ if (this.spinnerInterval) {
82
+ clearInterval(this.spinnerInterval);
83
+ this.spinnerInterval = null;
84
+ }
85
+ if (finalMessage) {
86
+ process.stdout.write(`\r${finalMessage}\u001B[K\n`);
87
+ }
88
+ else {
89
+ process.stdout.write("\r\u001B[K");
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=analyze-status.js.map
94
+ //# debugId=7d5388d6-d783-5ba8-a8ae-467aeaff909e
@@ -0,0 +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":";;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAqBnC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAChC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEjC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAIxC;IACC,MAAM,OAAO,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,SAAS,GAAG,qBAAqB,GAAG,IAAI,CAAA;IAE9C,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAEzC,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,CAAA;YAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;YAC3D,OAAO,CAAC,MAAM,CAAC,oCAAoC,UAAU,CAAC,MAAM,aAAa,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAE1G,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,+CAA+C,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBACrF,OAAM;YACR,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,EAAE,CAAA;gBACd,KAAK,CAAC,KAAK,CAAC,+CAA+C,qBAAqB,IAAI,CAAC,CAAA;YACvF,CAAC;YAED,MAAM,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAI/B;IACC,MAAM,QAAQ,GAAG,kCAAkC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAA;IAC7F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,CAAmC,QAAQ,CAAC,CAAA;QACtF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1D,KAAK,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAA;QACnG,CAAC;QAED,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,YAAoB;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;IACjC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAClF,CAAC;AAED,MAAM,oBAAoB;IAChB,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAClE,YAAY,GAAG,CAAC,CAAA;IAChB,eAAe,GAA0B,IAAI,CAAA;IAC7C,cAAc,GAAG,EAAE,CAAA;IAE3B,KAAK,CAAC,cAAsB;QAC1B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YAC5B,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,UAAU,CAAC,CAAA;QACnE,CAAC,EAAE,EAAE,CAAC,CAAA;IACR,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;IAC/B,CAAC;IAED,IAAI,CAAC,YAAqB;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC3B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,EAAE,CAAA;YACf,CAAC;YAED,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC7B,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,YAAY,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;CACF","debug_id":"7d5388d6-d783-5ba8-a8ae-467aeaff909e"}
@@ -2,11 +2,10 @@ import { SupernovaConfig } from "../types/config.js";
2
2
  export declare class SupernovaConfigService {
3
3
  private static instance;
4
4
  private configCache;
5
- private readonly configPath;
6
- private constructor();
7
5
  static getInstance(): SupernovaConfigService;
8
6
  get(): SupernovaConfig | null;
9
7
  update(configUpdate: Partial<SupernovaConfig>): void;
10
8
  private write;
9
+ private get configPath();
11
10
  }
12
11
  //# sourceMappingURL=config.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../src/utils/config.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIpD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAC/C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC,OAAO;WAIO,WAAW,IAAI,sBAAsB;IAQ5C,GAAG,IAAI,eAAe,GAAG,IAAI;IAmB7B,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAS3D,OAAO,CAAC,KAAK;CAId"}
1
+ {"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../src/utils/config.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIpD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAC/C,OAAO,CAAC,WAAW,CAA+B;WAEpC,WAAW,IAAI,sBAAsB;IAQ5C,GAAG,IAAI,eAAe,GAAG,IAAI;IAmB7B,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAS3D,OAAO,CAAC,KAAK;IAKb,OAAO,KAAK,UAAU,GAErB;CACF"}
@@ -1,16 +1,11 @@
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]="cd788b92-726e-5983-b2da-c5fe24b4acd1")}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]="efbafcda-4ef1-5d66-945d-590f1730640c")}catch(e){}}();
3
3
  import * as fs from "node:fs";
4
- import { join } from "node:path";
5
4
  import { SupernovaConfig } from "../types/config.js";
6
5
  const configFileName = "supernova.config.json";
7
6
  export class SupernovaConfigService {
8
7
  static instance;
9
8
  configCache = null;
10
- configPath;
11
- constructor() {
12
- this.configPath = join(process.cwd(), configFileName);
13
- }
14
9
  static getInstance() {
15
10
  if (!SupernovaConfigService.instance) {
16
11
  SupernovaConfigService.instance = new SupernovaConfigService();
@@ -46,6 +41,9 @@ export class SupernovaConfigService {
46
41
  fs.writeFileSync(this.configPath, `${JSON.stringify(config, null, 2)}\n`);
47
42
  this.configCache = config;
48
43
  }
44
+ get configPath() {
45
+ return configFileName;
46
+ }
49
47
  }
50
48
  //# sourceMappingURL=config.service.js.map
51
- //# debugId=cd788b92-726e-5983-b2da-c5fe24b4acd1
49
+ //# debugId=efbafcda-4ef1-5d66-945d-590f1730640c
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.js","sources":["../../src/utils/config.service.ts"],"sourceRoot":"","sourcesContent":["import * as fs from \"node:fs\"\nimport { join } from \"node:path\"\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 private readonly configPath: string\n\n private constructor() {\n this.configPath = join(process.cwd(), configFileName)\n }\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"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,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;IACjC,UAAU,CAAQ;IAEnC;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAA;IACvD,CAAC;IAEM,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;CACF","debug_id":"cd788b92-726e-5983-b2da-c5fe24b4acd1"}
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,8 +1,8 @@
1
1
  interface TemplateInfo {
2
- name: string;
3
2
  description: string;
4
- thumbnail?: string;
5
3
  files: string[];
4
+ name: string;
5
+ thumbnail?: string;
6
6
  }
7
7
  interface ItemsObject {
8
8
  [itemKey: string]: TemplateInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/utils/discover.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,UAAU,WAAW;IACnB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAA;CAChC;AAMD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAOlE;AAscD,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,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,14 +1,14 @@
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]="7d906731-5fc8-5c9e-b336-a051b5efcb88")}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]="8d01cf90-bafa-5c36-82b4-70b7a809ff77")}catch(e){}}();
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  export function folderNameToDisplayName(folderName) {
6
6
  return folderName
7
- .replace(/[-_]/g, " ")
8
- .replace(/([A-Z])/g, " $1")
7
+ .replaceAll(/[-_]/g, " ")
8
+ .replaceAll(/([A-Z])/g, " $1")
9
9
  .trim()
10
- .replace(/\s+/g, " ")
11
- .replace(/\b\w/g, c => c.toUpperCase());
10
+ .replaceAll(/\s+/g, " ")
11
+ .replaceAll(/\b\w/g, c => c.toUpperCase());
12
12
  }
13
13
  function getAllFilesInDirectory(dirPath, relativeTo) {
14
14
  return fs
@@ -31,14 +31,14 @@ function parseDescriptionFromReadme(readmeFilePath) {
31
31
  if (!match)
32
32
  return "";
33
33
  let description = match[1].trim();
34
- description = description.replace(/\*\*/g, "").replace(/\*/g, "");
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 += ".";
38
38
  }
39
39
  return description;
40
40
  }
41
- catch (error) {
41
+ catch {
42
42
  return "";
43
43
  }
44
44
  }
@@ -66,19 +66,19 @@ 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).replace(/\\/g, "/");
69
+ const relativePath = path.relative(containerRoot, actualPath).replaceAll('\\', "/");
70
70
  if (relativePath.startsWith("supernova/")) {
71
71
  dependencies.push(relativePath);
72
72
  }
73
73
  }
74
74
  }
75
- catch (error) {
75
+ catch {
76
76
  }
77
77
  }
78
78
  }
79
79
  return dependencies;
80
80
  }
81
- catch (error) {
81
+ catch {
82
82
  return [];
83
83
  }
84
84
  }
@@ -92,14 +92,15 @@ function parseImportsFromDirectory(itemDir) {
92
92
  if (ext === ".ts" || ext === ".tsx") {
93
93
  const fullPath = path.join(entry.parentPath || itemDir, entry.name);
94
94
  const fileDeps = parseImportsFromTSFile(fullPath, itemDir);
95
- fileDeps.forEach(dep => dependencies.add(dep));
95
+ for (const dep of fileDeps)
96
+ dependencies.add(dep);
96
97
  }
97
98
  }
98
99
  }
99
100
  }
100
- catch (error) {
101
+ catch {
101
102
  }
102
- return Array.from(dependencies).sort();
103
+ return [...dependencies].sort();
103
104
  }
104
105
  function parseMainReadmeTable(mainReadmePath, itemKey) {
105
106
  if (!fs.existsSync(mainReadmePath))
@@ -112,7 +113,7 @@ function parseMainReadmeTable(mainReadmePath, itemKey) {
112
113
  const headerCells = tableMatch[1]
113
114
  .split("|")
114
115
  .map(cell => cell.trim())
115
- .filter(cell => cell);
116
+ .filter(Boolean);
116
117
  const nameIndex = headerCells.findIndex(cell => /^(Pattern|Template)$/i.test(cell));
117
118
  const descIndex = headerCells.findIndex(cell => /^Description$/i.test(cell));
118
119
  if (nameIndex === -1 || descIndex === -1)
@@ -122,7 +123,7 @@ function parseMainReadmeTable(mainReadmePath, itemKey) {
122
123
  const cells = row
123
124
  .split("|")
124
125
  .map(cell => cell.trim())
125
- .filter(cell => cell);
126
+ .filter(Boolean);
126
127
  if (cells.length > Math.max(nameIndex, descIndex)) {
127
128
  const name = cells[nameIndex]?.replace(/\[([^\]]+)\].*/, "$1");
128
129
  const description = cells[descIndex];
@@ -132,7 +133,7 @@ function parseMainReadmeTable(mainReadmePath, itemKey) {
132
133
  }
133
134
  }
134
135
  }
135
- catch (error) {
136
+ catch {
136
137
  }
137
138
  return null;
138
139
  }
@@ -182,10 +183,10 @@ function discoverItems(basePath, subdirectory) {
182
183
  const thumbnail = findThumbnail(itemDir);
183
184
  const files = getAllFilesInDirectory(itemDir, itemDir);
184
185
  const containerRoot = path.resolve(itemDir, "../../..");
185
- const itemRelativePath = path.relative(containerRoot, itemDir).replace(/\\/g, "/");
186
+ const itemRelativePath = path.relative(containerRoot, itemDir).replaceAll('\\', "/");
186
187
  const fullPathFiles = files.map(file => `${itemRelativePath}/${file}`);
187
188
  const importDependencies = parseImportsFromDirectory(itemDir);
188
- const allDependencies = [...new Set([...importDependencies])];
189
+ const allDependencies = [...new Set(importDependencies)];
189
190
  const itemBasePath = itemRelativePath;
190
191
  const externalDependencies = allDependencies.filter(dep => !dep.startsWith(itemBasePath + "/"));
191
192
  const validExternalDependencies = externalDependencies.filter(dep => {
@@ -197,7 +198,7 @@ function discoverItems(basePath, subdirectory) {
197
198
  return exists;
198
199
  });
199
200
  const allFiles = new Set([...fullPathFiles, ...validExternalDependencies]);
200
- const filteredFiles = Array.from(allFiles).filter(file => !file.endsWith("README.md") &&
201
+ const filteredFiles = [...allFiles].filter(file => !file.endsWith("README.md") &&
201
202
  !["/thumbnail.png", "/thumbnail.svg", "/thumbnail.jpg", "/thumbnail.jpeg"].some(ext => file.endsWith(ext)));
202
203
  const existingFiles = filteredFiles
203
204
  .filter(file => {
@@ -232,7 +233,7 @@ function discoverPatterns(basePath) {
232
233
  function resolveTransitiveDependencies(items, patterns, basePath) {
233
234
  const resolvedItems = {};
234
235
  for (const [itemKey, itemInfo] of Object.entries(items)) {
235
- const resolvedFiles = new Set([...itemInfo.files]);
236
+ const resolvedFiles = new Set(itemInfo.files);
236
237
  const dependentPatterns = new Set();
237
238
  for (const file of itemInfo.files) {
238
239
  const pathMatch = file.match(/^supernova\/patterns\/([^\/]+)\//);
@@ -249,7 +250,8 @@ function resolveTransitiveDependencies(items, patterns, basePath) {
249
250
  if (!pattern) {
250
251
  return;
251
252
  }
252
- pattern.files.forEach(file => resolvedFiles.add(file));
253
+ for (const file of pattern.files)
254
+ resolvedFiles.add(file);
253
255
  for (const file of pattern.files) {
254
256
  const pathMatch = file.match(/^supernova\/patterns\/([^\/]+)\//);
255
257
  if (pathMatch && pathMatch[1] !== patternKey) {
@@ -261,7 +263,7 @@ function resolveTransitiveDependencies(items, patterns, basePath) {
261
263
  addTransitiveDependencies(patternKey);
262
264
  }
263
265
  const containerRoot = path.resolve(basePath);
264
- const validFiles = Array.from(resolvedFiles)
266
+ const validFiles = [...resolvedFiles]
265
267
  .filter(file => {
266
268
  const fullPath = path.join(containerRoot, file);
267
269
  const exists = fs.existsSync(fullPath);
@@ -302,4 +304,4 @@ export async function discoverAndUpdatePackageJson(basePath) {
302
304
  return result;
303
305
  }
304
306
  //# sourceMappingURL=discover.js.map
305
- //# debugId=7d906731-5fc8-5c9e-b336-a051b5efcb88
307
+ //# debugId=8d01cf90-bafa-5c36-82b4-70b7a809ff77