@supernovaio/cli 2.0.40 → 2.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/code-analyzer/analyzers/component-usage.js.map +1 -1
  2. package/dist/code-analyzer/analyzers/helpers.js.map +1 -1
  3. package/dist/code-analyzer/analyzers/index.js.map +1 -1
  4. package/dist/code-analyzer/analyzers/jsdoc.js.map +1 -1
  5. package/dist/code-analyzer/analyzers/static-components.js.map +1 -1
  6. package/dist/code-analyzer/analyzers/storybook-docs.js.map +1 -1
  7. package/dist/code-analyzer/analyzers/storybook-stories.js.map +1 -1
  8. package/dist/code-analyzer/analyzers/types.js.map +1 -1
  9. package/dist/code-analyzer/analyzers/typescript-api.js.map +1 -1
  10. package/dist/code-analyzer/components/analyze.js.map +1 -1
  11. package/dist/code-analyzer/components/mappers/component.js.map +1 -1
  12. package/dist/code-analyzer/components/mappers/property.js.map +1 -1
  13. package/dist/code-analyzer/components/parser/index.js.map +1 -1
  14. package/dist/code-analyzer/components/parser/module-parser.js.map +1 -1
  15. package/dist/code-analyzer/components/parser/parser.js.map +1 -1
  16. package/dist/code-analyzer/components/parser/types.js.map +1 -1
  17. package/dist/code-analyzer/components/parser/utils/build-filter.js.map +1 -1
  18. package/dist/code-analyzer/components/parser/utils/filter-duplicates.js.map +1 -1
  19. package/dist/code-analyzer/components/parser/utils/is-react-component.js.map +1 -1
  20. package/dist/code-analyzer/components/parser/utils/trim-file-name.js.map +1 -1
  21. package/dist/code-analyzer/components/types.js.map +1 -1
  22. package/dist/code-analyzer/components/utils/get-module-exports-path.js.map +1 -1
  23. package/dist/code-analyzer/index.js.map +1 -1
  24. package/dist/code-analyzer/orchestrator/index.js.map +1 -1
  25. package/dist/code-analyzer/orchestrator/run-analysis.js.map +1 -1
  26. package/dist/code-analyzer/snapshot/index.js.map +1 -1
  27. package/dist/code-analyzer/snapshot/write-snapshot.js.map +1 -1
  28. package/dist/commands/analyze/adoption.js.map +1 -1
  29. package/dist/commands/analyze/components.js.map +1 -1
  30. package/dist/commands/analyze/status.js.map +1 -1
  31. package/dist/commands/analyze.d.ts +0 -1
  32. package/dist/commands/analyze.d.ts.map +1 -1
  33. package/dist/commands/analyze.js +25 -5
  34. package/dist/commands/analyze.js.map +1 -1
  35. package/dist/commands/components-import.js.map +1 -1
  36. package/dist/commands/describe-design-system.js.map +1 -1
  37. package/dist/commands/describe-workspaces.js.map +1 -1
  38. package/dist/commands/login.js.map +1 -1
  39. package/dist/commands/logout.js.map +1 -1
  40. package/dist/commands/publish-documentation.js.map +1 -1
  41. package/dist/commands/run-local-exporter.js.map +1 -1
  42. package/dist/commands/storybook-import.js.map +1 -1
  43. package/dist/commands/sync-tokens.js.map +1 -1
  44. package/dist/commands/template-upload.d.ts.map +1 -1
  45. package/dist/commands/template-upload.js +41 -9
  46. package/dist/commands/template-upload.js.map +1 -1
  47. package/dist/commands/whoami.js.map +1 -1
  48. package/dist/docker-scripts/extract-private-packages-tarball.js +282 -0
  49. package/dist/hooks/postrun/save-config.js.map +1 -1
  50. package/dist/hooks/prerun/load-config.js.map +1 -1
  51. package/dist/hooks/prerun/sentry.js.map +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/services/auth.service.js.map +1 -1
  54. package/dist/services/index.js.map +1 -1
  55. package/dist/services/user.service.d.ts.map +1 -1
  56. package/dist/services/user.service.js.map +1 -1
  57. package/dist/services/vault.service.js.map +1 -1
  58. package/dist/types/base-command.js.map +1 -1
  59. package/dist/types/config.js.map +1 -1
  60. package/dist/types/environment.js.map +1 -1
  61. package/dist/types/flags.js.map +1 -1
  62. package/dist/types/index.js.map +1 -1
  63. package/dist/types/login.js.map +1 -1
  64. package/dist/types/not-authorized.error.js.map +1 -1
  65. package/dist/types/sentry-command.js.map +1 -1
  66. package/dist/types/types.js.map +1 -1
  67. package/dist/utils/analyze-command.d.ts.map +1 -1
  68. package/dist/utils/analyze-command.js +29 -2
  69. package/dist/utils/analyze-command.js.map +1 -1
  70. package/dist/utils/analyze-status.js.map +1 -1
  71. package/dist/utils/api-client.js.map +1 -1
  72. package/dist/utils/common.js.map +1 -1
  73. package/dist/utils/config.service.js.map +1 -1
  74. package/dist/utils/discover.d.ts +1 -1
  75. package/dist/utils/discover.d.ts.map +1 -1
  76. package/dist/utils/discover.js +5 -5
  77. package/dist/utils/discover.js.map +1 -1
  78. package/dist/utils/figma-tokens-data-loader.js.map +1 -1
  79. package/dist/utils/http-client.js.map +1 -1
  80. package/dist/utils/index.js.map +1 -1
  81. package/dist/utils/run-exporter/exporter-utils.js.map +1 -1
  82. package/dist/utils/sdk.js.map +1 -1
  83. package/dist/utils/validate-templates.js.map +1 -1
  84. package/oclif.manifest.json +6 -5
  85. package/package.json +11 -11
  86. package/dist/docker-scripts/extract-private-packages.js +0 -74
@@ -1 +1 @@
1
- {"version":3,"file":"figma-tokens-data-loader.js","sources":["../../src/utils/figma-tokens-data-loader.ts"],"sourceRoot":"","sourcesContent":["import sdk from \"@supernovaio/sdk\"\nimport * as fs from \"node:fs\"\n\nexport class FigmaTokensDataLoader {\n loadConfigFromPath(pathToFile: string): {\n mapping: sdk.DTPluginToSupernovaMapPack\n settings: sdk.DTPluginToSupernovaSettings\n } {\n try {\n const parsedDefinition = this.loadConfigFromPathAsIs(pathToFile) as sdk.DTPluginToSupernovaMappingFile\n this.weakValidateMapping(parsedDefinition)\n return this.processFileToMapping(parsedDefinition)\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n loadConfigFromPathAsIs(pathToFile: string): sdk.DTPluginToSupernovaMappingFile {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided configuration file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, \"utf8\")\n const parsedDefinition = this.parseDefinition(definition) as sdk.DTPluginToSupernovaMappingFile\n return parsedDefinition\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n async loadTokensFromDirectory(pathToDirectory: string, settingsPath: string): Promise<object> {\n try {\n const fullStructuredObject: Record<string, unknown> = {}\n\n if (!(fs.existsSync(pathToDirectory) && fs.lstatSync(pathToDirectory).isDirectory())) {\n throw new Error(`Provided data directory ${pathToDirectory} is not a directory or doesn't exist`)\n }\n\n const jsonPaths = this.getAllJSONFiles(pathToDirectory)\n for (const path of jsonPaths) {\n if (path.endsWith(\"json\") && path !== settingsPath && !path.includes(\"$\")) {\n \n const result = await this.loadObjectFile(path)\n if (typeof result === \"object\") {\n // let name = this.getFileNameWithoutExtension(path)\n const name = this.getSetKey(path, pathToDirectory)\n fullStructuredObject[name] = result\n }\n }\n }\n\n // Try to load themes, if any\n // eslint-disable-next-line no-useless-concat\n const themePath = pathToDirectory + \"/\" + \"$themes.json\"\n if (fs.existsSync(themePath)) {\n const themes = await this.loadObjectFile(themePath)\n fullStructuredObject.$themes = themes\n }\n\n // Try to load metadata, if any\n // eslint-disable-next-line no-useless-concat\n const metadataPath = pathToDirectory + \"/\" + \"$metadata.json\"\n if (fs.existsSync(metadataPath)) {\n const metadata = await this.loadObjectFile(metadataPath)\n fullStructuredObject.$metadata = metadata\n }\n\n return fullStructuredObject\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n /** Load token definitions from path */\n async loadTokensFromPath(pathToFile: string): Promise<object> {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, \"utf8\")\n const parsedDefinition = this.parseDefinition(definition)\n return parsedDefinition\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n private getAllJSONFiles(dir: string): string[] {\n const files = fs.readdirSync(dir)\n const jsonFiles = []\n\n for (const file of files) {\n const filePath = `${dir}/${file}`\n const fileStat = fs.statSync(filePath)\n\n if (fileStat.isDirectory()) {\n jsonFiles.push(...this.getAllJSONFiles(filePath))\n } else if (fileStat.isFile() && filePath.endsWith(\".json\")) {\n jsonFiles.push(filePath)\n }\n }\n\n return jsonFiles\n }\n\n private getSetKey(jsonFilePath: string, loadedDirectory: string): string {\n return jsonFilePath.slice(loadedDirectory.length + 1, -5)\n }\n\n private async loadObjectFile(pathToFile: string): Promise<object> {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, \"utf8\")\n const parsedDefinition = this.parseDefinition(definition)\n return parsedDefinition\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n private parseDefinition(definition: string): object {\n try {\n const object = JSON.parse(definition)\n if (typeof object !== \"object\") {\n throw new TypeError(\"Invalid Supernova mapping definition JSON file - root level entity must be object\")\n }\n\n return object\n } catch {\n throw new Error(\"Invalid Supernova mapping definition JSON file - file structure invalid\")\n }\n }\n\n // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n // MARK: - File Parser\n\n private processFileToMapping(mapping: sdk.DTPluginToSupernovaMappingFile): {\n mapping: sdk.DTPluginToSupernovaMapPack\n settings: sdk.DTPluginToSupernovaSettings\n } {\n const result: sdk.DTPluginToSupernovaMap[] = []\n for (const map of mapping.mapping) {\n result.push({\n bindToBrand: map.supernovaBrand,\n bindToTheme: map.supernovaTheme ?? null,\n nodes: null,\n pluginSets: map.tokenSets ?? null,\n pluginTheme: map.tokensTheme ?? null,\n processedGroups: null,\n processedNodes: null,\n type: map.tokenSets ? sdk.DTPluginToSupernovaMapType.set : sdk.DTPluginToSupernovaMapType.theme,\n })\n }\n\n const settings: sdk.DTPluginToSupernovaSettings = {\n ...mapping.settings,\n dryRun: mapping.settings?.dryRun ?? false,\n preciseCopy: sdk.toPreciseCopyStrategy(mapping.settings?.preciseCopy),\n themeOverridesStrategy:\n mapping.settings?.themeOverridesStrategy ?? (\"default\" as sdk.DTPluginThemeOverrideStrategy),\n verbose: mapping.settings?.verbose ?? false,\n }\n\n return {\n mapping: result,\n settings,\n }\n }\n\n private weakValidateMapping(mapping: sdk.DTPluginToSupernovaMappingFile) {\n if (\n !Object.hasOwn(mapping, \"mode\") ||\n typeof mapping.mode !== \"string\" ||\n (mapping.mode !== \"multi-file\" && mapping.mode !== \"single-file\")\n ) {\n throw new Error(\"Unable to load mapping file: `mode` must be provided [single-file or multi-file]`\")\n }\n\n if (!mapping.mapping || !Array.isArray(mapping.mapping)) {\n throw new Error(\"Unable to load mapping file: `mapping` key must be present and array.\")\n }\n\n const mapPack = mapping.mapping\n for (const map of mapPack) {\n if (typeof map !== \"object\") {\n throw new TypeError(\"Unable to load mapping file: `mapping` must contain objects only\")\n }\n\n if (!map.tokenSets && !map.tokensTheme) {\n throw new Error(\"Unable to load mapping file: `mapping` must contain either `tokensTheme` or `tokenSets`\")\n }\n\n if (map.tokenSets && map.tokensTheme) {\n throw new Error(\"Unable to load mapping file: `mapping` must not contain both `tokensTheme` or `tokenSets`\")\n }\n\n if (map.tokenSets && (!Array.isArray(map.tokenSets) || (map.tokenSets as Array<unknown>).length === 0)) {\n throw new Error(\"Unable to load mapping file: `mapping`.`tokenSets` must be an Array with at least one entry\")\n }\n\n if (\n map.tokensTheme &&\n ((typeof map.tokensTheme !== \"string\" && !Array.isArray(map.tokensTheme)) || map.tokensTheme.length === 0)\n ) {\n throw new Error(\n \"Unable to load mapping file: `mapping`.`tokensTheme` must be a non-empty string or non-empty array of strings\",\n )\n }\n\n if (!map.supernovaBrand || typeof map.supernovaBrand !== \"string\" || map.supernovaBrand.length === 0) {\n throw new Error(\"Unable to load mapping file: `supernovaBrand` must be a non-empty string\")\n }\n\n if (map.supernovaTheme && (typeof map.supernovaTheme !== \"string\" || map.supernovaTheme.length === 0)) {\n throw new Error(\n \"Unable to load mapping file: `supernovaTheme` may be empty but must be non-empty string if not\",\n )\n }\n }\n\n if (mapping.settings) {\n if (typeof mapping.settings !== \"object\") {\n throw new TypeError(\"Unable to load mapping file: `settings` must be an object\")\n }\n\n if (Object.hasOwn(mapping.settings, \"dryRun\") && typeof mapping.settings.dryRun !== \"boolean\") {\n throw new Error(\"Unable to load mapping file: `dryRun` must be of boolean type\")\n }\n\n if (Object.hasOwn(mapping.settings, \"verbose\") && typeof mapping.settings.verbose !== \"boolean\") {\n throw new Error(\"Unable to load mapping file: `verbose` must be of boolean type\")\n }\n\n if (\n Object.hasOwn(mapping.settings, \"preciseCopy\") &&\n typeof mapping.settings.preciseCopy !== \"boolean\" &&\n typeof mapping.settings.preciseCopy !== \"string\"\n ) {\n throw new Error(\"Unable to load mapping file: `preciseCopy` must be of boolean or string type\")\n }\n }\n }\n}\n"],"names":[],"mappings":"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","debug_id":"a5ca7936-f853-5cd2-8d62-a5367c6f068f"}
1
+ {"version":3,"file":"figma-tokens-data-loader.js","sources":["../../src/utils/figma-tokens-data-loader.ts"],"sourceRoot":"","sourcesContent":["import sdk from \"@supernovaio/sdk\"\nimport * as fs from \"node:fs\"\n\nexport class FigmaTokensDataLoader {\n loadConfigFromPath(pathToFile: string): {\n mapping: sdk.DTPluginToSupernovaMapPack\n settings: sdk.DTPluginToSupernovaSettings\n } {\n try {\n const parsedDefinition = this.loadConfigFromPathAsIs(pathToFile) as sdk.DTPluginToSupernovaMappingFile\n this.weakValidateMapping(parsedDefinition)\n return this.processFileToMapping(parsedDefinition)\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n loadConfigFromPathAsIs(pathToFile: string): sdk.DTPluginToSupernovaMappingFile {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided configuration file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, \"utf8\")\n const parsedDefinition = this.parseDefinition(definition) as sdk.DTPluginToSupernovaMappingFile\n return parsedDefinition\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n async loadTokensFromDirectory(pathToDirectory: string, settingsPath: string): Promise<object> {\n try {\n const fullStructuredObject: Record<string, unknown> = {}\n\n if (!(fs.existsSync(pathToDirectory) && fs.lstatSync(pathToDirectory).isDirectory())) {\n throw new Error(`Provided data directory ${pathToDirectory} is not a directory or doesn't exist`)\n }\n\n const jsonPaths = this.getAllJSONFiles(pathToDirectory)\n for (const path of jsonPaths) {\n if (path.endsWith(\"json\") && path !== settingsPath && !path.includes(\"$\")) {\n \n const result = await this.loadObjectFile(path)\n if (typeof result === \"object\") {\n // let name = this.getFileNameWithoutExtension(path)\n const name = this.getSetKey(path, pathToDirectory)\n fullStructuredObject[name] = result\n }\n }\n }\n\n // Try to load themes, if any\n // eslint-disable-next-line no-useless-concat\n const themePath = pathToDirectory + \"/\" + \"$themes.json\"\n if (fs.existsSync(themePath)) {\n const themes = await this.loadObjectFile(themePath)\n fullStructuredObject.$themes = themes\n }\n\n // Try to load metadata, if any\n // eslint-disable-next-line no-useless-concat\n const metadataPath = pathToDirectory + \"/\" + \"$metadata.json\"\n if (fs.existsSync(metadataPath)) {\n const metadata = await this.loadObjectFile(metadataPath)\n fullStructuredObject.$metadata = metadata\n }\n\n return fullStructuredObject\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n /** Load token definitions from path */\n async loadTokensFromPath(pathToFile: string): Promise<object> {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, \"utf8\")\n const parsedDefinition = this.parseDefinition(definition)\n return parsedDefinition\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n private getAllJSONFiles(dir: string): string[] {\n const files = fs.readdirSync(dir)\n const jsonFiles = []\n\n for (const file of files) {\n const filePath = `${dir}/${file}`\n const fileStat = fs.statSync(filePath)\n\n if (fileStat.isDirectory()) {\n jsonFiles.push(...this.getAllJSONFiles(filePath))\n } else if (fileStat.isFile() && filePath.endsWith(\".json\")) {\n jsonFiles.push(filePath)\n }\n }\n\n return jsonFiles\n }\n\n private getSetKey(jsonFilePath: string, loadedDirectory: string): string {\n return jsonFilePath.slice(loadedDirectory.length + 1, -5)\n }\n\n private async loadObjectFile(pathToFile: string): Promise<object> {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, \"utf8\")\n const parsedDefinition = this.parseDefinition(definition)\n return parsedDefinition\n } catch (error) {\n throw new Error(\"Unable to load JSON definition file: \" + error)\n }\n }\n\n private parseDefinition(definition: string): object {\n try {\n const object = JSON.parse(definition)\n if (typeof object !== \"object\") {\n throw new TypeError(\"Invalid Supernova mapping definition JSON file - root level entity must be object\")\n }\n\n return object\n } catch {\n throw new Error(\"Invalid Supernova mapping definition JSON file - file structure invalid\")\n }\n }\n\n // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n // MARK: - File Parser\n\n private processFileToMapping(mapping: sdk.DTPluginToSupernovaMappingFile): {\n mapping: sdk.DTPluginToSupernovaMapPack\n settings: sdk.DTPluginToSupernovaSettings\n } {\n const result: sdk.DTPluginToSupernovaMap[] = []\n for (const map of mapping.mapping) {\n result.push({\n bindToBrand: map.supernovaBrand,\n bindToTheme: map.supernovaTheme ?? null,\n nodes: null,\n pluginSets: map.tokenSets ?? null,\n pluginTheme: map.tokensTheme ?? null,\n processedGroups: null,\n processedNodes: null,\n type: map.tokenSets ? sdk.DTPluginToSupernovaMapType.set : sdk.DTPluginToSupernovaMapType.theme,\n })\n }\n\n const settings: sdk.DTPluginToSupernovaSettings = {\n ...mapping.settings,\n dryRun: mapping.settings?.dryRun ?? false,\n preciseCopy: sdk.toPreciseCopyStrategy(mapping.settings?.preciseCopy),\n themeOverridesStrategy:\n mapping.settings?.themeOverridesStrategy ?? (\"default\" as sdk.DTPluginThemeOverrideStrategy),\n verbose: mapping.settings?.verbose ?? false,\n }\n\n return {\n mapping: result,\n settings,\n }\n }\n\n private weakValidateMapping(mapping: sdk.DTPluginToSupernovaMappingFile) {\n if (\n !Object.hasOwn(mapping, \"mode\") ||\n typeof mapping.mode !== \"string\" ||\n (mapping.mode !== \"multi-file\" && mapping.mode !== \"single-file\")\n ) {\n throw new Error(\"Unable to load mapping file: `mode` must be provided [single-file or multi-file]`\")\n }\n\n if (!mapping.mapping || !Array.isArray(mapping.mapping)) {\n throw new Error(\"Unable to load mapping file: `mapping` key must be present and array.\")\n }\n\n const mapPack = mapping.mapping\n for (const map of mapPack) {\n if (typeof map !== \"object\") {\n throw new TypeError(\"Unable to load mapping file: `mapping` must contain objects only\")\n }\n\n if (!map.tokenSets && !map.tokensTheme) {\n throw new Error(\"Unable to load mapping file: `mapping` must contain either `tokensTheme` or `tokenSets`\")\n }\n\n if (map.tokenSets && map.tokensTheme) {\n throw new Error(\"Unable to load mapping file: `mapping` must not contain both `tokensTheme` or `tokenSets`\")\n }\n\n if (map.tokenSets && (!Array.isArray(map.tokenSets) || (map.tokenSets as Array<unknown>).length === 0)) {\n throw new Error(\"Unable to load mapping file: `mapping`.`tokenSets` must be an Array with at least one entry\")\n }\n\n if (\n map.tokensTheme &&\n ((typeof map.tokensTheme !== \"string\" && !Array.isArray(map.tokensTheme)) || map.tokensTheme.length === 0)\n ) {\n throw new Error(\n \"Unable to load mapping file: `mapping`.`tokensTheme` must be a non-empty string or non-empty array of strings\",\n )\n }\n\n if (!map.supernovaBrand || typeof map.supernovaBrand !== \"string\" || map.supernovaBrand.length === 0) {\n throw new Error(\"Unable to load mapping file: `supernovaBrand` must be a non-empty string\")\n }\n\n if (map.supernovaTheme && (typeof map.supernovaTheme !== \"string\" || map.supernovaTheme.length === 0)) {\n throw new Error(\n \"Unable to load mapping file: `supernovaTheme` may be empty but must be non-empty string if not\",\n )\n }\n }\n\n if (mapping.settings) {\n if (typeof mapping.settings !== \"object\") {\n throw new TypeError(\"Unable to load mapping file: `settings` must be an object\")\n }\n\n if (Object.hasOwn(mapping.settings, \"dryRun\") && typeof mapping.settings.dryRun !== \"boolean\") {\n throw new Error(\"Unable to load mapping file: `dryRun` must be of boolean type\")\n }\n\n if (Object.hasOwn(mapping.settings, \"verbose\") && typeof mapping.settings.verbose !== \"boolean\") {\n throw new Error(\"Unable to load mapping file: `verbose` must be of boolean type\")\n }\n\n if (\n Object.hasOwn(mapping.settings, \"preciseCopy\") &&\n typeof mapping.settings.preciseCopy !== \"boolean\" &&\n typeof mapping.settings.preciseCopy !== \"string\"\n ) {\n throw new Error(\"Unable to load mapping file: `preciseCopy` must be of boolean or string type\")\n }\n }\n }\n}\n"],"names":[],"mappings":"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","debugId":"a5ca7936-f853-5cd2-8d62-a5367c6f068f"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.js","sources":["../../src/utils/http-client.ts"],"sourceRoot":"","sourcesContent":["import axios, { AxiosInstance } from \"axios\"\n\nimport { VaultService } from \"../services/vault.service.js\"\nimport { apiUrlForEnvironment, TargetEnv } from \"../types/environment.js\"\n\nexport async function createApiClient(env: TargetEnv): Promise<AxiosInstance> {\n const token = await new VaultService().getTokensFromVault(env)\n\n return axios.create({\n baseURL: apiUrlForEnvironment(env),\n headers: {\n Authorization: `Bearer ${token.accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n timeout: 30_000,\n })\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAa,MAAM,yBAAyB,CAAA;AAEzE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAc;IAClD,MAAM,KAAK,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAE9D,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC;QAClC,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,CAAC,WAAW,EAAE;YAC5C,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,MAAM;KAChB,CAAC,CAAA;AACJ,CAAC","debug_id":"a966c97b-b882-521a-91df-7d00928cf26e"}
1
+ {"version":3,"file":"http-client.js","sources":["../../src/utils/http-client.ts"],"sourceRoot":"","sourcesContent":["import axios, { AxiosInstance } from \"axios\"\n\nimport { VaultService } from \"../services/vault.service.js\"\nimport { apiUrlForEnvironment, TargetEnv } from \"../types/environment.js\"\n\nexport async function createApiClient(env: TargetEnv): Promise<AxiosInstance> {\n const token = await new VaultService().getTokensFromVault(env)\n\n return axios.create({\n baseURL: apiUrlForEnvironment(env),\n headers: {\n Authorization: `Bearer ${token.accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n timeout: 30_000,\n })\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAa,MAAM,yBAAyB,CAAA;AAEzE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAc;IAClD,MAAM,KAAK,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAE9D,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC;QAClC,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,CAAC,WAAW,EAAE;YAC5C,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,MAAM;KAChB,CAAC,CAAA;AACJ,CAAC","debugId":"a966c97b-b882-521a-91df-7d00928cf26e"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/utils/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./api-client.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,iBAAiB,CAAA","debug_id":"13f23c5e-738b-519d-9c69-b830cda985ca"}
1
+ {"version":3,"file":"index.js","sources":["../../src/utils/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./api-client.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,iBAAiB,CAAA","debugId":"13f23c5e-738b-519d-9c69-b830cda985ca"}
@@ -1 +1 @@
1
- {"version":3,"file":"exporter-utils.js","sources":["../../../src/utils/run-exporter/exporter-utils.ts"],"sourceRoot":"","sourcesContent":["//\n// exporter-utils.ts\n// Supernova CLI\n//\n// Created by Jiri Trecak.\n// Copyright © Supernova.io. All rights reserved.\n//\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Imports\n\n \nimport * as pulsar from \"@supernova-studio/pulsar-language\"\n\nimport { apiUrlForEnvironment, ExportConfiguration, TargetEnv } from \"../../types/index.js\"\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Utils\n\nexport function exportConfiguration(setup: {\n apiKey: string\n brandId?: string\n dsId: string\n environment: TargetEnv\n exportPath: string\n logger: pulsar.PLLogger\n proxyUrl?: string\n themeId?: string\n versionId: string\n}): ExportConfiguration {\n return {\n accessToken: setup.apiKey,\n apiUrl: `${apiUrlForEnvironment(setup.environment, undefined)}`,\n apiVersion: \"0.2\",\n brandId: setup.brandId,\n designSystemId: setup.dsId,\n designSystemVersionId: setup.versionId,\n exportPath: setup.exportPath,\n logger: setup.logger,\n proxyUrl: setup.proxyUrl,\n themeId: setup.themeId,\n }\n}\n"],"names":[],"mappings":";;AAcA,OAAO,EAAE,oBAAoB,EAAkC,MAAM,sBAAsB,CAAA;AAK3F,MAAM,UAAU,mBAAmB,CAAC,KAUnC;IACC,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,MAAM,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE;QAC/D,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,cAAc,EAAE,KAAK,CAAC,IAAI;QAC1B,qBAAqB,EAAE,KAAK,CAAC,SAAS;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAA;AACH,CAAC","debug_id":"5fd4a873-80bf-5785-95a6-bf82a8d511af"}
1
+ {"version":3,"file":"exporter-utils.js","sources":["../../../src/utils/run-exporter/exporter-utils.ts"],"sourceRoot":"","sourcesContent":["//\n// exporter-utils.ts\n// Supernova CLI\n//\n// Created by Jiri Trecak.\n// Copyright © Supernova.io. All rights reserved.\n//\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Imports\n\n \nimport * as pulsar from \"@supernova-studio/pulsar-language\"\n\nimport { apiUrlForEnvironment, ExportConfiguration, TargetEnv } from \"../../types/index.js\"\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Utils\n\nexport function exportConfiguration(setup: {\n apiKey: string\n brandId?: string\n dsId: string\n environment: TargetEnv\n exportPath: string\n logger: pulsar.PLLogger\n proxyUrl?: string\n themeId?: string\n versionId: string\n}): ExportConfiguration {\n return {\n accessToken: setup.apiKey,\n apiUrl: `${apiUrlForEnvironment(setup.environment, undefined)}`,\n apiVersion: \"0.2\",\n brandId: setup.brandId,\n designSystemId: setup.dsId,\n designSystemVersionId: setup.versionId,\n exportPath: setup.exportPath,\n logger: setup.logger,\n proxyUrl: setup.proxyUrl,\n themeId: setup.themeId,\n }\n}\n"],"names":[],"mappings":";;AAcA,OAAO,EAAE,oBAAoB,EAAkC,MAAM,sBAAsB,CAAA;AAK3F,MAAM,UAAU,mBAAmB,CAAC,KAUnC;IACC,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,MAAM,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE;QAC/D,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,cAAc,EAAE,KAAK,CAAC,IAAI;QAC1B,qBAAqB,EAAE,KAAK,CAAC,SAAS;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAA;AACH,CAAC","debugId":"5fd4a873-80bf-5785-95a6-bf82a8d511af"}
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sources":["../../src/utils/sdk.ts"],"sourceRoot":"","sourcesContent":["import * as sdkTypes from \"@supernovaio/sdk\"\nimport { createRequire } from \"node:module\"\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\n\nimport { apiUrlForEnvironment, getTargetEnv } from \"../types/environment.js\"\n\nconst require = createRequire(import.meta.url)\nconst sdkProvider = require(\"@supernovaio/sdk\") as typeof sdkTypes\n\nexport interface DefaultDesignSystemFlags {\n apiKey: string\n apiUrl?: string\n brandId?: string\n designSystemId: string\n proxyUrl?: string\n themeId?: string\n}\n\nexport async function getWritableVersion(flags: DefaultDesignSystemFlags): Promise<{\n brand: null | sdkTypes.Brand\n designSystem: sdkTypes.DesignSystem\n id: sdkTypes.RemoteWorkspaceVersionIdentifier\n instance: sdkTypes.Supernova\n theme: null | sdkTypes.TokenTheme\n version: sdkTypes.DesignSystemVersion\n}> {\n if (!flags.apiKey || flags.apiKey.length === 0) {\n throw new Error(`API key must not be empty`)\n }\n\n if (!flags.designSystemId || flags.designSystemId.length === 0) {\n throw new Error(`Design System ID must not be empty`)\n }\n\n // Create instance for prod / dev\n const apiUrl = flags.apiUrl && flags.apiUrl.length > 0 ? flags.apiUrl : apiUrlForEnvironment(getTargetEnv())\n const instance = new sdkProvider.Supernova(flags.apiKey, {\n apiUrl,\n customProxyLib: flags.proxyUrl ? new HttpsProxyAgent(flags.proxyUrl) : null,\n })\n\n const designSystem = await instance.designSystems.designSystem(flags.designSystemId)\n if (!designSystem) {\n throw new Error(`Design system ${flags.designSystemId} not found or not available under provided API key`)\n }\n\n const version = await instance.versions.getActiveVersion(flags.designSystemId)\n if (!version) {\n throw new Error(\n `Design system ${flags.designSystemId} writable version not found or not available under provided API key`,\n )\n }\n\n const id: sdkTypes.RemoteWorkspaceVersionIdentifier = {\n designSystemId: flags.designSystemId,\n versionId: version.id,\n workspaceId: designSystem.workspaceId,\n }\n\n let brand: null | sdkTypes.Brand = null\n if (flags.brandId) {\n const brands = await instance.brands.getBrands(id)\n brand = brands.find(brand => brand.id === flags.brandId || brand.idInVersion === flags.brandId) ?? null\n if (!brand) {\n throw new Error(`Brand ${flags.brandId} not found in specified design system`)\n }\n }\n\n let theme: null | sdkTypes.TokenTheme = null\n if (flags.themeId) {\n const themes = await instance.tokens.getTokenThemes(id)\n theme = themes.find(theme => theme.id === flags.themeId || theme.idInVersion === flags.themeId) ?? null\n if (!theme) {\n throw new Error(`Theme ${flags.themeId} not found in specified brand`)\n }\n }\n\n return { brand, designSystem, id, instance, theme, version }\n}\n"],"names":[],"mappings":"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","debug_id":"2e4ad83e-2d39-52ed-98f7-417ef8624e3b"}
1
+ {"version":3,"file":"sdk.js","sources":["../../src/utils/sdk.ts"],"sourceRoot":"","sourcesContent":["import * as sdkTypes from \"@supernovaio/sdk\"\nimport { createRequire } from \"node:module\"\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\n\nimport { apiUrlForEnvironment, getTargetEnv } from \"../types/environment.js\"\n\nconst require = createRequire(import.meta.url)\nconst sdkProvider = require(\"@supernovaio/sdk\") as typeof sdkTypes\n\nexport interface DefaultDesignSystemFlags {\n apiKey: string\n apiUrl?: string\n brandId?: string\n designSystemId: string\n proxyUrl?: string\n themeId?: string\n}\n\nexport async function getWritableVersion(flags: DefaultDesignSystemFlags): Promise<{\n brand: null | sdkTypes.Brand\n designSystem: sdkTypes.DesignSystem\n id: sdkTypes.RemoteWorkspaceVersionIdentifier\n instance: sdkTypes.Supernova\n theme: null | sdkTypes.TokenTheme\n version: sdkTypes.DesignSystemVersion\n}> {\n if (!flags.apiKey || flags.apiKey.length === 0) {\n throw new Error(`API key must not be empty`)\n }\n\n if (!flags.designSystemId || flags.designSystemId.length === 0) {\n throw new Error(`Design System ID must not be empty`)\n }\n\n // Create instance for prod / dev\n const apiUrl = flags.apiUrl && flags.apiUrl.length > 0 ? flags.apiUrl : apiUrlForEnvironment(getTargetEnv())\n const instance = new sdkProvider.Supernova(flags.apiKey, {\n apiUrl,\n customProxyLib: flags.proxyUrl ? new HttpsProxyAgent(flags.proxyUrl) : null,\n })\n\n const designSystem = await instance.designSystems.designSystem(flags.designSystemId)\n if (!designSystem) {\n throw new Error(`Design system ${flags.designSystemId} not found or not available under provided API key`)\n }\n\n const version = await instance.versions.getActiveVersion(flags.designSystemId)\n if (!version) {\n throw new Error(\n `Design system ${flags.designSystemId} writable version not found or not available under provided API key`,\n )\n }\n\n const id: sdkTypes.RemoteWorkspaceVersionIdentifier = {\n designSystemId: flags.designSystemId,\n versionId: version.id,\n workspaceId: designSystem.workspaceId,\n }\n\n let brand: null | sdkTypes.Brand = null\n if (flags.brandId) {\n const brands = await instance.brands.getBrands(id)\n brand = brands.find(brand => brand.id === flags.brandId || brand.idInVersion === flags.brandId) ?? null\n if (!brand) {\n throw new Error(`Brand ${flags.brandId} not found in specified design system`)\n }\n }\n\n let theme: null | sdkTypes.TokenTheme = null\n if (flags.themeId) {\n const themes = await instance.tokens.getTokenThemes(id)\n theme = themes.find(theme => theme.id === flags.themeId || theme.idInVersion === flags.themeId) ?? null\n if (!theme) {\n throw new Error(`Theme ${flags.themeId} not found in specified brand`)\n }\n }\n\n return { brand, designSystem, id, instance, theme, version }\n}\n"],"names":[],"mappings":"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","debugId":"2e4ad83e-2d39-52ed-98f7-417ef8624e3b"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-templates.js","sources":["../../src/utils/validate-templates.ts"],"sourceRoot":"","sourcesContent":["import { action } from \"@oclif/core/ux\"\nimport { exec as execCallback } from \"node:child_process\"\nimport * as fs from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { promisify } from \"node:util\"\n\nconst exec = promisify(execCallback)\n\nexport type TemplatePreset = { name: string; description: string; thumbnail?: string; files?: string[] }\n\nexport interface Logger {\n error: (msg: string) => never\n log: (msg: string) => void\n warn: (msg: string) => void\n}\n\nexport async function fileExists(p: string) {\n try {\n await fs.access(p)\n return true\n } catch {\n return false\n }\n}\n\nexport async function validateTemplates(\n templates: { [key: string]: TemplatePreset },\n logger: Logger,\n debug?: boolean,\n): Promise<void> {\n action.start(`🔍 Validating ${Object.keys(templates).length} template(s)`)\n\n for (const [templateKey, template] of Object.entries(templates)) {\n action.start(`Validating template '${templateKey}'`)\n\n // Check if template has files\n if (!template.files || template.files.length === 0) {\n action.stop(\"no files specified\")\n logger.error(`Template '${templateKey}': No files specified`)\n }\n\n // Validate main file exists\n const expectedMainFile = `supernova/templates/${templateKey}/${templateKey}.tsx`\n if (!template.files.includes(expectedMainFile)) {\n action.stop(\"main file missing\")\n logger.error(`Template '${templateKey}': Expected main file '${expectedMainFile}' not found in files array`)\n }\n\n // Validate all files exist on disk\n for (const filePath of template.files) {\n if (!(await fileExists(path.resolve(filePath)))) {\n action.stop(\"files missing\")\n logger.error(`Template '${templateKey}': File does not exist: ${filePath}`)\n }\n }\n\n // Actually test the template by copying and building\n try {\n await testTemplateBuild(templateKey, template.files, logger, debug)\n action.stop(\"build successful\")\n } catch (error) {\n action.stop(\"build failed\")\n logger.error(\n `Template '${templateKey}': Build test failed: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n\n action.stop(\"validation complete\")\n}\n\nasync function testTemplateBuild(templateKey: string, files: string[], logger: Logger, debug?: boolean): Promise<void> {\n const appTsxPath = path.resolve(\"src/App.tsx\")\n const componentsDir = path.resolve(\"src/components\")\n const toDestPath = (filePath: string) =>\n path.join(componentsDir, filePath.replace(/^supernova\\/(patterns|templates)\\//, \"\"))\n\n let originalAppContent = \"\"\n let copiedFiles: string[] = []\n let failed = false\n\n try {\n await checkNoDirsExist(files.map(f => path.dirname(toDestPath(f))))\n copiedFiles = await copyFiles(files, toDestPath)\n originalAppContent = await patchAppTsx(appTsxPath, templateKey)\n await runBuild(logger)\n } catch (error) {\n failed = true\n throw error\n } finally {\n const keepFilesForDebugging = debug && failed\n if (!keepFilesForDebugging) {\n await cleanup(copiedFiles, appTsxPath, originalAppContent)\n }\n }\n}\n\nasync function checkNoDirsExist(dirs: string[]): Promise<void> {\n for (const dir of new Set(dirs)) {\n if (await fileExists(dir)) {\n throw new Error(\n `Component directory already exists: ${path.relative(process.cwd(), dir)}. Please remove or rename this directory before testing the template.`,\n )\n }\n }\n}\n\nasync function copyFiles(files: string[], toDestPath: (f: string) => string): Promise<string[]> {\n const copiedFiles: string[] = []\n for (const filePath of files) {\n const destPath = toDestPath(filePath)\n await fs.mkdir(path.dirname(destPath), { recursive: true })\n await fs.copyFile(path.resolve(filePath), destPath)\n copiedFiles.push(destPath)\n if (destPath.endsWith(\".tsx\") || destPath.endsWith(\".ts\")) {\n await updateImportsInFile(destPath)\n }\n }\n\n return copiedFiles\n}\n\nasync function patchAppTsx(appTsxPath: string, templateKey: string): Promise<string> {\n if (!(await fileExists(appTsxPath))) return \"\"\n const originalContent = await fs.readFile(appTsxPath, \"utf8\")\n await fs.writeFile(\n appTsxPath,\n `import { ${templateKey} } from \"./components/${templateKey}/${templateKey}\"\\n\\nexport default function App() {\\n return <${templateKey} />\\n}`,\n )\n return originalContent\n}\n\nasync function runBuild(logger: Logger): Promise<void> {\n try {\n const result = await exec(\"npm run build\", { cwd: process.cwd() })\n if (result.stderr) logger.log(`Build stderr: ${result.stderr}`)\n } catch (buildError: any) {\n logger.log(`Build failed with error: ${buildError.message}`)\n if (buildError.stdout) logger.log(`Build stdout: ${buildError.stdout}`)\n if (buildError.stderr) logger.log(`Build stderr: ${buildError.stderr}`)\n throw buildError\n }\n}\n\nasync function cleanup(copiedFiles: string[], appTsxPath: string, originalAppContent: string): Promise<void> {\n for (const filePath of copiedFiles) {\n if (await fileExists(filePath)) {\n await fs.rm(filePath, { force: true })\n }\n }\n\n const sortedDirs = [...new Set(copiedFiles.map(f => path.dirname(f)))].sort((a, b) => b.length - a.length)\n for (const dir of sortedDirs) {\n try {\n await fs.rm(dir, { recursive: true, force: true })\n } catch {\n // ignore\n }\n }\n\n if (originalAppContent && (await fileExists(appTsxPath))) {\n await fs.writeFile(appTsxPath, originalAppContent)\n }\n}\n\nasync function updateImportsInFile(filePath: string): Promise<void> {\n const content = await fs.readFile(filePath, \"utf8\")\n const updatedContent = content.replaceAll(\n /from\\s+[\"']\\.\\.\\/\\.\\.\\/(patterns|templates)\\/([^/\"']+\\/[^\"']+)[\"']/g,\n 'from \"../$2\"',\n )\n if (content !== updatedContent) {\n await fs.writeFile(filePath, updatedContent)\n }\n}\n"],"names":[],"mappings":"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","debug_id":"ce63cd84-8d0f-5d20-89d4-cc6de4a4ba89"}
1
+ {"version":3,"file":"validate-templates.js","sources":["../../src/utils/validate-templates.ts"],"sourceRoot":"","sourcesContent":["import { action } from \"@oclif/core/ux\"\nimport { exec as execCallback } from \"node:child_process\"\nimport * as fs from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { promisify } from \"node:util\"\n\nconst exec = promisify(execCallback)\n\nexport type TemplatePreset = { name: string; description: string; thumbnail?: string; files?: string[] }\n\nexport interface Logger {\n error: (msg: string) => never\n log: (msg: string) => void\n warn: (msg: string) => void\n}\n\nexport async function fileExists(p: string) {\n try {\n await fs.access(p)\n return true\n } catch {\n return false\n }\n}\n\nexport async function validateTemplates(\n templates: { [key: string]: TemplatePreset },\n logger: Logger,\n debug?: boolean,\n): Promise<void> {\n action.start(`🔍 Validating ${Object.keys(templates).length} template(s)`)\n\n for (const [templateKey, template] of Object.entries(templates)) {\n action.start(`Validating template '${templateKey}'`)\n\n // Check if template has files\n if (!template.files || template.files.length === 0) {\n action.stop(\"no files specified\")\n logger.error(`Template '${templateKey}': No files specified`)\n }\n\n // Validate main file exists\n const expectedMainFile = `supernova/templates/${templateKey}/${templateKey}.tsx`\n if (!template.files.includes(expectedMainFile)) {\n action.stop(\"main file missing\")\n logger.error(`Template '${templateKey}': Expected main file '${expectedMainFile}' not found in files array`)\n }\n\n // Validate all files exist on disk\n for (const filePath of template.files) {\n if (!(await fileExists(path.resolve(filePath)))) {\n action.stop(\"files missing\")\n logger.error(`Template '${templateKey}': File does not exist: ${filePath}`)\n }\n }\n\n // Actually test the template by copying and building\n try {\n await testTemplateBuild(templateKey, template.files, logger, debug)\n action.stop(\"build successful\")\n } catch (error) {\n action.stop(\"build failed\")\n logger.error(\n `Template '${templateKey}': Build test failed: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n\n action.stop(\"validation complete\")\n}\n\nasync function testTemplateBuild(templateKey: string, files: string[], logger: Logger, debug?: boolean): Promise<void> {\n const appTsxPath = path.resolve(\"src/App.tsx\")\n const componentsDir = path.resolve(\"src/components\")\n const toDestPath = (filePath: string) =>\n path.join(componentsDir, filePath.replace(/^supernova\\/(patterns|templates)\\//, \"\"))\n\n let originalAppContent = \"\"\n let copiedFiles: string[] = []\n let failed = false\n\n try {\n await checkNoDirsExist(files.map(f => path.dirname(toDestPath(f))))\n copiedFiles = await copyFiles(files, toDestPath)\n originalAppContent = await patchAppTsx(appTsxPath, templateKey)\n await runBuild(logger)\n } catch (error) {\n failed = true\n throw error\n } finally {\n const keepFilesForDebugging = debug && failed\n if (!keepFilesForDebugging) {\n await cleanup(copiedFiles, appTsxPath, originalAppContent)\n }\n }\n}\n\nasync function checkNoDirsExist(dirs: string[]): Promise<void> {\n for (const dir of new Set(dirs)) {\n if (await fileExists(dir)) {\n throw new Error(\n `Component directory already exists: ${path.relative(process.cwd(), dir)}. Please remove or rename this directory before testing the template.`,\n )\n }\n }\n}\n\nasync function copyFiles(files: string[], toDestPath: (f: string) => string): Promise<string[]> {\n const copiedFiles: string[] = []\n for (const filePath of files) {\n const destPath = toDestPath(filePath)\n await fs.mkdir(path.dirname(destPath), { recursive: true })\n await fs.copyFile(path.resolve(filePath), destPath)\n copiedFiles.push(destPath)\n if (destPath.endsWith(\".tsx\") || destPath.endsWith(\".ts\")) {\n await updateImportsInFile(destPath)\n }\n }\n\n return copiedFiles\n}\n\nasync function patchAppTsx(appTsxPath: string, templateKey: string): Promise<string> {\n if (!(await fileExists(appTsxPath))) return \"\"\n const originalContent = await fs.readFile(appTsxPath, \"utf8\")\n await fs.writeFile(\n appTsxPath,\n `import { ${templateKey} } from \"./components/${templateKey}/${templateKey}\"\\n\\nexport default function App() {\\n return <${templateKey} />\\n}`,\n )\n return originalContent\n}\n\nasync function runBuild(logger: Logger): Promise<void> {\n try {\n const result = await exec(\"npm run build\", { cwd: process.cwd() })\n if (result.stderr) logger.log(`Build stderr: ${result.stderr}`)\n } catch (buildError: any) {\n logger.log(`Build failed with error: ${buildError.message}`)\n if (buildError.stdout) logger.log(`Build stdout: ${buildError.stdout}`)\n if (buildError.stderr) logger.log(`Build stderr: ${buildError.stderr}`)\n throw buildError\n }\n}\n\nasync function cleanup(copiedFiles: string[], appTsxPath: string, originalAppContent: string): Promise<void> {\n for (const filePath of copiedFiles) {\n if (await fileExists(filePath)) {\n await fs.rm(filePath, { force: true })\n }\n }\n\n const sortedDirs = [...new Set(copiedFiles.map(f => path.dirname(f)))].sort((a, b) => b.length - a.length)\n for (const dir of sortedDirs) {\n try {\n await fs.rm(dir, { recursive: true, force: true })\n } catch {\n // ignore\n }\n }\n\n if (originalAppContent && (await fileExists(appTsxPath))) {\n await fs.writeFile(appTsxPath, originalAppContent)\n }\n}\n\nasync function updateImportsInFile(filePath: string): Promise<void> {\n const content = await fs.readFile(filePath, \"utf8\")\n const updatedContent = content.replaceAll(\n /from\\s+[\"']\\.\\.\\/\\.\\.\\/(patterns|templates)\\/([^/\"']+\\/[^\"']+)[\"']/g,\n 'from \"../$2\"',\n )\n if (content !== updatedContent) {\n await fs.writeFile(filePath, updatedContent)\n }\n}\n"],"names":[],"mappings":"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","debugId":"ce63cd84-8d0f-5d20-89d4-cc6de4a4ba89"}
@@ -3,10 +3,12 @@
3
3
  "analyze": {
4
4
  "aliases": [],
5
5
  "args": {},
6
- "description": "Analyze components and adoption, then push all snapshots to Supernova",
6
+ "description": "# Analyze Code And Push Snapshots\n\nUse `supernova analyze` to run the full code snapshot pipeline, or `supernova analyze <components|adoption>` for a targeted scan.\n\nAnalyze scans your design system source code, its components, and package adoption across your codebase. Supernova turns the captured metadata and adoption signals into product knowledge that enhances prototyping and AI-assisted documentation flows.\n\n## Typical Flows\n\n### 1. Full Pipeline\n\nRun both components and adoption analysis.\n\n```bash\nsupernova analyze --package @design-system-package\n```\n\nIf you already have packages configured in `supernova.config.json`, you can omit `--package`.\n\nFor multiple packages, repeat the flag:\n\n```bash\nsupernova analyze --package @design-system-package --package @icons-package\n```\n\n### 2. Components Only\n\nScan only the component package metadata.\n\n```bash\nsupernova analyze components --package @design-system-package\n```\n\n### 3. Adoption Only\n\nScan only package adoption in consumer code.\n\n```bash\nsupernova analyze adoption --package @design-system-package\n```\n\n## Command Overview\n\n```bash\nsupernova analyze [components|adoption] --package <package-name> [--package <package-name>...]\n```\n\n## Related Commands\n\n```bash\nsupernova analyze status [--designSystemId <id>]\n```\n\n## Arguments\n\n| Name | Required | Description |\n| --- | --- | --- |\n| `[components\\|adoption]` | No | Optional targeted analyzer mode. Omit it to run the full pipeline. |\n\n## Flags\n\n| Flag | Short | Required | Description |\n| --- | --- | --- | --- |\n| `--package <value>` | `-p` | Conditionally | Package name. Repeatable. Required only when `analyze.packages` is not already stored in `supernova.config.json`. |\n| `--designSystemId <id>` | `-d` | No | Design system ID. If omitted, the CLI uses the root `designSystemId` from `supernova.config.json` or prompts before upload. |\n| `--exclude <path>` | | No | Exclude paths from analyzers. Repeatable. |\n| `--dryRun` | | No | Write local snapshots only and skip upload. |\n| `--no-wait` | | No | Upload snapshots and start processing, but do not wait for backend processing to finish. Useful for CI. |\n\n## Config File\n\nThe CLI reads and writes `supernova.config.json` in the current working directory. If the file does not exist yet, running the command creates it when analyze settings are persisted.\n\nExample:\n\n```json\n{\n \"designSystemId\": \"123\",\n \"analyze\": {\n \"repoId\": \"7c8e9b6b-4c0a-4dbd-8f78-2d5c3d6a9f10\",\n \"packages\": [\"@design-system-package\"],\n \"excludedPackages\": [\"excluded-package\"]\n }\n}\n```\n\nThis means later runs can be shorter. For example, if `packages` is already stored, you can run:\n\n```bash\nsupernova analyze\n```\n\nThe analyze section currently stores:\n\n- `designSystemId`\n- `analyze.repoId`\n- `analyze.packages`\n- `analyze.excludedPackages`\n\n## What Gets Created\n\nThe analyzer writes snapshot artifacts under:\n\n```text\n<package>/.supernova/snapshots/<snapshotId>/\n```\n\nMain files:\n\n- `raw/*.json` analyzer outputs\n\n## Monorepo Behavior\n\nFor `supernova analyze` and `supernova analyze adoption`, the CLI resolves multiple package targets in monorepos.\n\nRules:\n\n- components scans run once per `analyze.packages`\n- adoption scans run per workspace package, excluding `packages` and `excludedPackages`\n- adoption scans include all configured packages in each snapshot\n- targets with zero adoption are skipped\n\n## Upload And Processing Behavior\n\n1. CLI uploads snapshot archive(s)\n2. CLI finalizes each snapshot upload\n3. CLI starts a processing run for all uploaded snapshots\n4. CLI waits for processing to finish by default\n\nUse `--no-wait` to skip the final polling step, for example in CI.\n\n### `analyze status`\n\nUse `supernova analyze status` to watch the processing state of uploaded snapshots for the current user.\n\nOptional flag:\n\n- `--designSystemId <id>` or `-d`: skip interactive design system selection. If omitted, the command uses the root `designSystemId` from `supernova.config.json` when available.\n\nThe command keeps polling until there are no active processing runs left, or until it times out.\n\n## Dry Run\n\nUse this to verify scan output without uploading anything:\n\n```bash\nsupernova analyze adoption \\\n --package @design-system-package \\\n --dryRun\n```",
7
7
  "examples": [
8
- "<%= config.bin %> <%= command.id %> --designSystemId 123 --package @acme/ds",
9
- "<%= config.bin %> <%= command.id %> --package @acme/ds --package @acme/icons"
8
+ "<%= config.bin %> <%= command.id %> --package @acme/ds --dryRun",
9
+ "<%= config.bin %> <%= command.id %> --designSystemId 1234 --package @acme/ds",
10
+ "<%= config.bin %> <%= command.id %> --package @acme/ds --package @acme/icons",
11
+ "<%= config.bin %> analyze status --designSystemId 1234"
10
12
  ],
11
13
  "flags": {
12
14
  "designSystemId": {
@@ -46,7 +48,6 @@
46
48
  }
47
49
  },
48
50
  "hasDynamicHelp": false,
49
- "hidden": true,
50
51
  "hiddenAliases": [],
51
52
  "id": "analyze",
52
53
  "pluginAlias": "@supernovaio/cli",
@@ -819,5 +820,5 @@
819
820
  ]
820
821
  }
821
822
  },
822
- "version": "2.0.40"
823
+ "version": "2.0.42"
823
824
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@supernovaio/cli",
3
3
  "description": "Supernova.io Command Line Interface",
4
- "version": "2.0.40",
4
+ "version": "2.0.42",
5
5
  "author": "Supernova.io",
6
6
  "bin": {
7
7
  "supernova": "./bin/run"
@@ -12,19 +12,19 @@
12
12
  "@oclif/core": "^4",
13
13
  "@oclif/plugin-help": "^6",
14
14
  "@oclif/plugin-plugins": "^5",
15
- "@sentry/nestjs": "^9.9.0",
16
- "@sentry/node": "^9.9.0",
17
- "@sentry/profiling-node": "^9.9.0",
15
+ "@sentry/nestjs": "10.43.0",
16
+ "@sentry/node": "10.43.0",
17
+ "@sentry/profiling-node": "10.43.0",
18
18
  "@sindresorhus/slugify": "^2.2.1",
19
- "@supernova-studio/client": "1.78.1",
20
- "@supernova-studio/model": "1.66.0",
21
- "@supernova-studio/pulsar-core": "2.7.10",
22
- "@supernova-studio/pulsar-language": "2.7.10",
19
+ "@supernova-studio/client": "1.87.1",
20
+ "@supernova-studio/model": "1.87.1",
21
+ "@supernova-studio/pulsar-core": "2.7.13",
22
+ "@supernova-studio/pulsar-language": "2.7.13",
23
23
  "@supernova-studio/simple-parse-github-url": "1.0.0",
24
24
  "@supernovaio/sdk": "2.2.54",
25
25
  "@types/fs-extra": "^11.0.4",
26
26
  "adm-zip": "^0.5.16",
27
- "axios": "^1.13.4",
27
+ "axios": "^1.13.6",
28
28
  "cli-progress": "^3.12.0",
29
29
  "colors": "^1.4.0",
30
30
  "dotenv": "^16.4.7",
@@ -55,7 +55,7 @@
55
55
  "@mui/material": "^6.4.4",
56
56
  "@oclif/prettier-config": "^0.2.1",
57
57
  "@oclif/test": "^4",
58
- "@sentry/cli": "^2.42.1",
58
+ "@sentry/cli": "3.3.3",
59
59
  "@supernovaio/export-helpers": "^1.0.30",
60
60
  "@supernovaio/sdk-exporters": "^2.0.36",
61
61
  "@types/adm-zip": "^0.5.7",
@@ -155,4 +155,4 @@
155
155
  "publish-package": "npm run build && npm run sentry:sourcemaps && npm run prepack && npm publish --access public && npm run postpack",
156
156
  "sentry:sourcemaps": "sentry-cli sourcemaps inject --org supernova-studio --project cli ./dist && sentry-cli sourcemaps upload --org supernova-studio --project cli ./dist"
157
157
  }
158
- }
158
+ }
@@ -1,74 +0,0 @@
1
- import { execSync } from "node:child_process"
2
- import fs from "node:fs"
3
- import path from "node:path"
4
-
5
- const PRIVATE_DEPS_DIR_NAME = "private-deps"
6
-
7
- ;(() => {
8
- const packageJsonPath = path.join(process.cwd(), "package.json")
9
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString())
10
-
11
- const privateDependencies = packageJson.supernova?.privateDependencies
12
- if (!privateDependencies) return
13
- if (!Array.isArray(privateDependencies)) {
14
- throw new TypeError(
15
- `supernova.privateDependencies must be an array, example: "privateDependencies": ["@example/package"]`,
16
- )
17
- }
18
-
19
- if (privateDependencies.length === 0) return
20
-
21
- // Validate all private dependencies
22
- for (const [i, d] of privateDependencies.entries()) {
23
- if (typeof d !== "string") {
24
- throw new TypeError(`Invalid value at supernova.privateDependencies[${i}]: '${d}'`)
25
- }
26
-
27
- if (!packageJson.dependencies[d]) {
28
- throw new Error(`Private dependency ${d} must be present in package.json dependencies`)
29
- }
30
-
31
- if (!fs.existsSync(getDependencySourceFullPath(d))) {
32
- throw new Error(`Private dependency ${d} must be present in node_modules`)
33
- }
34
- }
35
-
36
- for (const dependency of privateDependencies) {
37
- // Move the dependency
38
- const src = getDependencySourceFullPath(dependency)
39
- const target = getDependencyTargetFullPath(dependency)
40
-
41
- try {
42
- // Make sure the target directory exists
43
- fs.mkdirSync(target, { recursive: true })
44
-
45
- // Copy folder to private-deps
46
- execSync(`cp -R ${src}/ ${path.dirname(target)}`)
47
-
48
- // Remove from source
49
- fs.rmSync(src, { recursive: true })
50
- } catch (error) {
51
- console.error(`Couldn't move dependency ${dependency} from ${src} to ${target}`)
52
- throw error
53
- }
54
-
55
- // Switch dependency from version to file directive
56
- packageJson.dependencies[dependency] = `file:${getDependencyTargetRelativePath(dependency)}`
57
- }
58
-
59
- fs.writeFileSync(packageJsonPath, Buffer.from(JSON.stringify(packageJson, null, 2) + "\n"))
60
- })()
61
-
62
- function getDependencySourceFullPath(name) {
63
- return path.join(process.cwd(), "node_modules", name)
64
- }
65
-
66
- function getDependencyTargetFullPath(name) {
67
- return path.join(process.cwd(), PRIVATE_DEPS_DIR_NAME, name)
68
- }
69
-
70
- function getDependencyTargetRelativePath(name) {
71
- return path.join(".", PRIVATE_DEPS_DIR_NAME, name)
72
- }
73
- !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]="c8431c5b-b015-5d9d-bdef-9202f73e7f49")}catch(e){}}();
74
- //# debugId=c8431c5b-b015-5d9d-bdef-9202f73e7f49