@supernovaio/cli 2.0.39 → 2.0.41
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.
- package/dist/code-analyzer/analyzers/component-usage.d.ts +6 -0
- package/dist/code-analyzer/analyzers/component-usage.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/component-usage.js +344 -0
- package/dist/code-analyzer/analyzers/component-usage.js.map +1 -0
- package/dist/code-analyzer/analyzers/helpers.d.ts +11 -0
- package/dist/code-analyzer/analyzers/helpers.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/helpers.js +59 -0
- package/dist/code-analyzer/analyzers/helpers.js.map +1 -0
- package/dist/code-analyzer/analyzers/index.d.ts +8 -0
- package/dist/code-analyzer/analyzers/index.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/index.js +11 -0
- package/dist/code-analyzer/analyzers/index.js.map +1 -0
- package/dist/code-analyzer/analyzers/jsdoc.d.ts +3 -0
- package/dist/code-analyzer/analyzers/jsdoc.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/jsdoc.js +7 -0
- package/dist/code-analyzer/analyzers/jsdoc.js.map +1 -0
- package/dist/code-analyzer/analyzers/static-components.d.ts +3 -0
- package/dist/code-analyzer/analyzers/static-components.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/static-components.js +399 -0
- package/dist/code-analyzer/analyzers/static-components.js.map +1 -0
- package/dist/code-analyzer/analyzers/storybook-docs.d.ts +3 -0
- package/dist/code-analyzer/analyzers/storybook-docs.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/storybook-docs.js +163 -0
- package/dist/code-analyzer/analyzers/storybook-docs.js.map +1 -0
- package/dist/code-analyzer/analyzers/storybook-stories.d.ts +3 -0
- package/dist/code-analyzer/analyzers/storybook-stories.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/storybook-stories.js +91 -0
- package/dist/code-analyzer/analyzers/storybook-stories.js.map +1 -0
- package/dist/code-analyzer/analyzers/types.d.ts +88 -0
- package/dist/code-analyzer/analyzers/types.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/types.js +12 -0
- package/dist/code-analyzer/analyzers/types.js.map +1 -0
- package/dist/code-analyzer/analyzers/typescript-api.d.ts +3 -0
- package/dist/code-analyzer/analyzers/typescript-api.d.ts.map +1 -0
- package/dist/code-analyzer/analyzers/typescript-api.js +7 -0
- package/dist/code-analyzer/analyzers/typescript-api.js.map +1 -0
- package/dist/code-analyzer/components/analyze.d.ts +8 -0
- package/dist/code-analyzer/components/analyze.d.ts.map +1 -0
- package/dist/code-analyzer/components/analyze.js +38 -0
- package/dist/code-analyzer/components/analyze.js.map +1 -0
- package/dist/code-analyzer/components/mappers/component.d.ts +4 -0
- package/dist/code-analyzer/components/mappers/component.d.ts.map +1 -0
- package/dist/code-analyzer/components/mappers/component.js +20 -0
- package/dist/code-analyzer/components/mappers/component.js.map +1 -0
- package/dist/code-analyzer/components/mappers/property.d.ts +4 -0
- package/dist/code-analyzer/components/mappers/property.d.ts.map +1 -0
- package/dist/code-analyzer/components/mappers/property.js +19 -0
- package/dist/code-analyzer/components/mappers/property.js.map +1 -0
- package/dist/code-analyzer/components/parser/index.d.ts +6 -0
- package/dist/code-analyzer/components/parser/index.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/index.js +9 -0
- package/dist/code-analyzer/components/parser/index.js.map +1 -0
- package/dist/code-analyzer/components/parser/module-parser.d.ts +12 -0
- package/dist/code-analyzer/components/parser/module-parser.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/module-parser.js +116 -0
- package/dist/code-analyzer/components/parser/module-parser.js.map +1 -0
- package/dist/code-analyzer/components/parser/parser.d.ts +46 -0
- package/dist/code-analyzer/components/parser/parser.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/parser.js +904 -0
- package/dist/code-analyzer/components/parser/parser.js.map +1 -0
- package/dist/code-analyzer/components/parser/types.d.ts +123 -0
- package/dist/code-analyzer/components/parser/types.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/types.js +21 -0
- package/dist/code-analyzer/components/parser/types.js.map +1 -0
- package/dist/code-analyzer/components/parser/utils/build-filter.d.ts +3 -0
- package/dist/code-analyzer/components/parser/utils/build-filter.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/utils/build-filter.js +31 -0
- package/dist/code-analyzer/components/parser/utils/build-filter.js.map +1 -0
- package/dist/code-analyzer/components/parser/utils/filter-duplicates.d.ts +3 -0
- package/dist/code-analyzer/components/parser/utils/filter-duplicates.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/utils/filter-duplicates.js +17 -0
- package/dist/code-analyzer/components/parser/utils/filter-duplicates.js.map +1 -0
- package/dist/code-analyzer/components/parser/utils/is-react-component.d.ts +4 -0
- package/dist/code-analyzer/components/parser/utils/is-react-component.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/utils/is-react-component.js +43 -0
- package/dist/code-analyzer/components/parser/utils/is-react-component.js.map +1 -0
- package/dist/code-analyzer/components/parser/utils/trim-file-name.d.ts +2 -0
- package/dist/code-analyzer/components/parser/utils/trim-file-name.d.ts.map +1 -0
- package/dist/code-analyzer/components/parser/utils/trim-file-name.js +22 -0
- package/dist/code-analyzer/components/parser/utils/trim-file-name.js.map +1 -0
- package/dist/code-analyzer/components/types.d.ts +18 -0
- package/dist/code-analyzer/components/types.d.ts.map +1 -0
- package/dist/code-analyzer/components/types.js +5 -0
- package/dist/code-analyzer/components/types.js.map +1 -0
- package/dist/code-analyzer/components/utils/get-module-exports-path.d.ts +2 -0
- package/dist/code-analyzer/components/utils/get-module-exports-path.d.ts.map +1 -0
- package/dist/code-analyzer/components/utils/get-module-exports-path.js +60 -0
- package/dist/code-analyzer/components/utils/get-module-exports-path.js.map +1 -0
- package/dist/code-analyzer/index.d.ts +5 -0
- package/dist/code-analyzer/index.d.ts.map +1 -0
- package/dist/code-analyzer/index.js +8 -0
- package/dist/code-analyzer/index.js.map +1 -0
- package/dist/code-analyzer/orchestrator/index.d.ts +2 -0
- package/dist/code-analyzer/orchestrator/index.d.ts.map +1 -0
- package/dist/code-analyzer/orchestrator/index.js +5 -0
- package/dist/code-analyzer/orchestrator/index.js.map +1 -0
- package/dist/code-analyzer/orchestrator/run-analysis.d.ts +19 -0
- package/dist/code-analyzer/orchestrator/run-analysis.d.ts.map +1 -0
- package/dist/code-analyzer/orchestrator/run-analysis.js +109 -0
- package/dist/code-analyzer/orchestrator/run-analysis.js.map +1 -0
- package/dist/code-analyzer/snapshot/index.d.ts +2 -0
- package/dist/code-analyzer/snapshot/index.d.ts.map +1 -0
- package/dist/code-analyzer/snapshot/index.js +5 -0
- package/dist/code-analyzer/snapshot/index.js.map +1 -0
- package/dist/code-analyzer/snapshot/write-snapshot.d.ts +17 -0
- package/dist/code-analyzer/snapshot/write-snapshot.d.ts.map +1 -0
- package/dist/code-analyzer/snapshot/write-snapshot.js +60 -0
- package/dist/code-analyzer/snapshot/write-snapshot.js.map +1 -0
- package/dist/commands/analyze.d.ts +0 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +25 -5
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/components-import.js +3 -3
- package/dist/commands/components-import.js.map +1 -1
- package/dist/commands/publish-documentation.d.ts +2 -2
- package/dist/commands/run-local-exporter.js +2 -2
- package/dist/commands/run-local-exporter.js.map +1 -1
- package/dist/commands/storybook-import.d.ts +2 -2
- package/dist/commands/template-upload.d.ts +1 -0
- package/dist/commands/template-upload.d.ts.map +1 -1
- package/dist/commands/template-upload.js +57 -18
- package/dist/commands/template-upload.js.map +1 -1
- package/dist/docker-scripts/extract-private-packages-tarball.js +282 -0
- package/dist/types/config.d.ts +5 -5
- package/dist/types/types.js +2 -2
- package/dist/types/types.js.map +1 -1
- package/dist/utils/analyze-command.d.ts.map +1 -1
- package/dist/utils/analyze-command.js +30 -3
- package/dist/utils/analyze-command.js.map +1 -1
- package/dist/utils/discover.d.ts +2 -2
- package/dist/utils/discover.d.ts.map +1 -1
- package/dist/utils/discover.js +25 -23
- package/dist/utils/discover.js.map +1 -1
- package/dist/utils/figma-tokens-data-loader.js +2 -2
- package/dist/utils/figma-tokens-data-loader.js.map +1 -1
- package/dist/utils/run-exporter/exporter-utils.js +2 -2
- package/dist/utils/run-exporter/exporter-utils.js.map +1 -1
- package/dist/utils/validate-templates.d.ts +1 -1
- package/dist/utils/validate-templates.d.ts.map +1 -1
- package/dist/utils/validate-templates.js +4 -4
- package/dist/utils/validate-templates.js.map +1 -1
- package/oclif.manifest.json +13 -5
- package/package.json +8 -3
|
@@ -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 \"@supernovaio/code-analyzer\"\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":"345317ea-ff37-50af-af0e-75411b0b7f57"}
|
|
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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","debug_id":"b1b0f3f1-2050-5c37-9714-32da972b95c4"}
|
package/dist/utils/discover.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/utils/discover.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,
|
|
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"}
|
package/dist/utils/discover.js
CHANGED
|
@@ -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]="
|
|
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
|
-
.
|
|
8
|
-
.
|
|
7
|
+
.replaceAll(/[-_]/g, " ")
|
|
8
|
+
.replaceAll(/([A-Z])/g, " $1")
|
|
9
9
|
.trim()
|
|
10
|
-
.
|
|
11
|
-
.
|
|
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.
|
|
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
|
|
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).
|
|
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
|
|
75
|
+
catch {
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
return dependencies;
|
|
80
80
|
}
|
|
81
|
-
catch
|
|
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
|
-
|
|
95
|
+
for (const dep of fileDeps)
|
|
96
|
+
dependencies.add(dep);
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
|
-
catch
|
|
101
|
+
catch {
|
|
101
102
|
}
|
|
102
|
-
return
|
|
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(
|
|
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(
|
|
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
|
|
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).
|
|
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(
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
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=
|
|
307
|
+
//# debugId=8d01cf90-bafa-5c36-82b4-70b7a809ff77
|
|
@@ -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 name: string\n description: string\n thumbnail?: string\n files: 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 .replace(/[-_]/g, \" \") // kebab-case and snake_case → spaces\n .replace(/([A-Z])/g, \" $1\") // PascalCase/camelCase → spaces before uppercase\n .trim()\n .replace(/\\s+/g, \" \") // normalize multiple spaces\n .replace(/\\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.replace(/\\*\\*/g, \"\").replace(/\\*/g, \"\") // 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 (error) {\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).replace(/\\\\/g, \"/\")\n\n // Only include files within the supernova directory\n if (relativePath.startsWith(\"supernova/\")) {\n dependencies.push(relativePath)\n }\n }\n } catch (error) {\n // Skip invalid import paths\n }\n }\n }\n\n return dependencies\n } catch (error) {\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 fileDeps.forEach(dep => dependencies.add(dep))\n }\n }\n }\n } catch (error) {\n // Skip directories that can't be read\n }\n\n return Array.from(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(cell => cell)\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(cell => cell)\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 (error) {\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).replace(/\\\\/g, \"/\")\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 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 = Array.from(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 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 visited.add(patternKey)\n\n const pattern = patterns[patternKey]\n if (!pattern) {\n return\n }\n\n // Add all files from this pattern\n pattern.files.forEach(file => 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 = Array.from(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 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":"7d906731-5fc8-5c9e-b336-a051b5efcb88"}
|
|
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,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]="
|
|
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]="a5ca7936-f853-5cd2-8d62-a5367c6f068f")}catch(e){}}();
|
|
3
3
|
import sdk from "@supernovaio/sdk";
|
|
4
4
|
import * as fs from "node:fs";
|
|
5
5
|
export class FigmaTokensDataLoader {
|
|
@@ -193,4 +193,4 @@ export class FigmaTokensDataLoader {
|
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
//# sourceMappingURL=figma-tokens-data-loader.js.map
|
|
196
|
-
//# debugId=
|
|
196
|
+
//# debugId=a5ca7936-f853-5cd2-8d62-a5367c6f068f
|