@supernovaio/cli-next 2.0.19 → 2.0.20

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.
@@ -103,7 +103,7 @@ export default class ImportStorybook extends SentryCommand {
103
103
  const { signedUrl, storybookUploadId } = await storybookHosting.getSignedUploadUrl(designSystemId, { name });
104
104
  try {
105
105
  await this.uploadArchiveToSignedUrl({ designSystemId, name, signedUrl, storybookUploadId, zipPath });
106
- this.log("✅ Upload complete.".green);
106
+ this.log("✅ Upload complete.");
107
107
  this.log("Processing Storybook files...");
108
108
  let status;
109
109
  action.start("Deploying Storybook to private Supernova hosting service...");
@@ -122,16 +122,16 @@ export default class ImportStorybook extends SentryCommand {
122
122
  unknownStatusCount = 0;
123
123
  }
124
124
  if (unknownStatusCount >= 5) {
125
- this.error("Failed to deploy Storybook: Internal server error".red);
125
+ this.error("Failed to deploy Storybook: Internal server error");
126
126
  }
127
127
  } while (status.status !== "Completed" || (status.timestamp && status.timestamp < startTime));
128
128
  if (status.status === "Failed") {
129
- action.stop("\nFailed to deploy Storybook: Internal server error".red);
129
+ action.stop("\nFailed to deploy Storybook: Internal server error");
130
130
  }
131
131
  else {
132
132
  const { accessToken } = await storybookHosting.getAccessToken(designSystemId, name);
133
133
  const storybookUrl = storybookEndpoint(env, designSystemId, name, accessToken);
134
- action.stop("\n✅ Private Storybook deployed successfully!".green);
134
+ action.stop("\n✅ Private Storybook deployed successfully!");
135
135
  try {
136
136
  this.log(`Connecting Storybook as a data source in Supernova...`);
137
137
  let storiesCount = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"import-storybook.js","sourceRoot":"","sources":["../../src/commands/import-storybook.ts"],"names":[],"mappings":"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","sourcesContent":["import { Flags } from \"@oclif/core\"\nimport { action } from \"@oclif/core/ux\"\nimport { SentryTraced } from \"@sentry/nestjs\"\nimport slugify from \"@sindresorhus/slugify\"\nimport { DTODataSourceStorybook } from \"@supernova-studio/client\"\nimport AdmZip from \"adm-zip\"\nimport axios from \"axios\"\nimport cliProgress from \"cli-progress\"\nimport inquirer from \"inquirer\"\nimport * as fs from \"node:fs\"\nimport path from \"node:path\"\nimport { z, ZodType } from \"zod\"\n\nimport { commonFlags, getTargetEnv, SentryCommand, storybookUrlForEnvironment, TargetEnv } from \"../types/index.js\"\nimport { sleep } from \"../utils/common.js\"\nimport { getApiClient } from \"../utils/index.js\"\n\n// Maximum allowed size for storybook zip file (500MB)\nconst MAX_ZIP_SIZE_BYTES = 500 * 1024 * 1024\n\nconst bytesToKB = (bytes: number) => (bytes / 1024).toFixed(2)\nconst bytesToMB = (bytes: number) => (bytes / (1024 * 1024)).toFixed(2)\n\nconst ImportStorybookConfigSchema = z\n .object({\n brandId: z.string().optional(),\n designSystemId: z.string().optional(),\n dir: z.string().optional(),\n name: z.string().optional(),\n sourceId: z.string().optional(),\n versionId: z.string().optional(),\n })\n .transform(data => ({\n ...data,\n }))\n\ntype ImportStorybookConfig = z.infer<typeof ImportStorybookConfigSchema>\n\nconst storybookEndpoint = (\n environment: TargetEnv,\n designSystemId: string,\n name: string,\n accessToken: string,\n): string => {\n const host = storybookUrlForEnvironment(environment)\n const encodedAccessToken = encodeURIComponent(accessToken)\n return `${host}/design-systems/${designSystemId}/alias/${name}/index.html?storybook_jwt=${encodedAccessToken}`\n}\n\nexport default class ImportStorybook extends SentryCommand<ImportStorybookConfig> {\n static override args = {}\n static override description = \"Import storybook static export to Supernova\"\n static override examples = [\n \"<%= config.bin %> <%= command.id %> import-storybook --designSystemId=123 --dir ./storybook-static.zip\",\n ]\n static override flags = {\n ...commonFlags,\n brandId: Flags.string({ char: \"b\", description: \"Import storybooks to brand of\" }),\n designSystemId: Flags.string({ char: \"D\", description: \"Import storybooks to design system of\" }),\n dir: Flags.string({\n char: \"d\",\n default: \"./storybook-static\",\n description: \"Directory with storybook static export to import.\",\n }),\n name: Flags.string({ char: \"a\", description: \"Import storybooks with name of\" }),\n sourceId: Flags.string({ char: \"s\", description: \"Import storybooks to source of\" }),\n }\n\n get commandId(): string {\n return ImportStorybook.id\n }\n\n get configSchema(): ZodType<ImportStorybookConfig> {\n return ImportStorybookConfigSchema\n }\n\n @SentryTraced()\n // eslint-disable-next-line complexity\n public async run(): Promise<void> {\n const startTime = Date.now()\n const { flags } = await this.parse(ImportStorybook)\n\n const env = getTargetEnv()\n const { brandId: bId, designSystemId: dsId, dir, name: nameInput, sourceId } = flags\n const name = slugify(await this.askName(nameInput), { lowercase: true })\n let designSystemId = dsId\n let brandId = bId\n\n const apiClient = await getApiClient(env)\n const { designSystems } = apiClient\n const { sources, storybookHosting } = designSystems\n\n if (!designSystemId) {\n designSystemId = await this.getDesignSystemId(env, designSystemId)\n\n if (!designSystemId) {\n this.error(\"Design system ID is required\")\n }\n\n this.saveConfig({ designSystemId })\n }\n\n if (!brandId) {\n brandId = await this.getBrandId(env, designSystemId, \"head\")\n\n if (!brandId) {\n this.error(\"Brand ID is required\")\n }\n\n this.saveConfig({ brandId })\n }\n\n const directoryValidation = this.validateStorybookDirectory(dir)\n if (!directoryValidation.isValid) {\n this.error(directoryValidation.error!)\n }\n\n this.log(`Preparing Storybook files from ${dir}...`)\n const { sizeBytes, zipPath } = this.createZipFromDirectory(dir)\n\n const sizeValidation = this.validateZipSize(zipPath, sizeBytes)\n if (!sizeValidation.isValid) {\n this.error(sizeValidation.error!)\n }\n\n const { signedUrl, storybookUploadId } = await storybookHosting.getSignedUploadUrl(designSystemId, { name })\n\n try {\n await this.uploadArchiveToSignedUrl({ designSystemId, name, signedUrl, storybookUploadId, zipPath })\n this.log(\"✅ Upload complete.\".green)\n this.log(\"Processing Storybook files...\")\n\n let status\n action.start(\"Deploying Storybook to private Supernova hosting service...\")\n\n let unknownStatusCount = 0\n try {\n do {\n // eslint-disable-next-line no-await-in-loop\n await sleep(1000)\n\n // eslint-disable-next-line no-await-in-loop\n status = await storybookHosting.getUploadStatus(designSystemId, storybookUploadId)\n\n if (status.status === \"Failed\") {\n break\n }\n\n if (status.status === \"Unknown\") {\n unknownStatusCount++\n } else {\n unknownStatusCount = 0\n }\n\n if (unknownStatusCount >= 5) {\n this.error(\"Failed to deploy Storybook: Internal server error\".red)\n }\n } while (status.status !== \"Completed\" || (status.timestamp && status.timestamp < startTime))\n\n if (status.status === \"Failed\") {\n action.stop(\"\\nFailed to deploy Storybook: Internal server error\".red)\n } else {\n const { accessToken } = await storybookHosting.getAccessToken(designSystemId, name)\n const storybookUrl = storybookEndpoint(env, designSystemId, name, accessToken)\n\n action.stop(\"\\n✅ Private Storybook deployed successfully!\".green)\n\n try {\n this.log(`Connecting Storybook as a data source in Supernova...`)\n let storiesCount = 0\n // eslint-disable-next-line max-depth\n if (sourceId) {\n const { storiesCount: updatedStoriesCount } = await sources.updateStorybookImport(\n designSystemId,\n \"head\",\n {\n payload: this.getIndexJson(dir),\n sourceId,\n },\n )\n storiesCount = updatedStoriesCount\n } else {\n const { source } = await sources.create(designSystemId, {\n brandPersistentId: brandId,\n description: \"CLI\",\n indexUrl: storybookUrl,\n payload: this.getIndexJson(dir),\n type: \"Storybook\",\n userUrl: storybookUrl,\n })\n storiesCount = (source as unknown as DTODataSourceStorybook).storybook.storiesCount\n this.saveConfig({ sourceId: source.id })\n }\n\n this.log(`✅ Imported ${storiesCount} component stories into Supernova!`.green)\n this.log(`🔒 Access your Storybook at: ${storybookUrl}`.green)\n } catch (error) {\n this.error(\n `Failed to connect Storybook as data source: ${error instanceof Error ? error.message : String(error)}`\n .red,\n )\n }\n }\n } catch (error) {\n action.stop(`\\nFailed to deploy Storybook: ${error instanceof Error ? error.message : String(error)}`.red)\n }\n } catch (error) {\n this.error(`Failed to upload Storybook files: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n private async askName(inputedName?: string) {\n if (inputedName) return inputedName\n const choice = await inquirer.prompt([\n {\n message: \"What's storybook name\",\n name: \"name\",\n type: \"input\",\n },\n ])\n if (choice.name === \"exit\") {\n this.log(\"Exiting...\")\n this.exit(0)\n }\n\n const name = choice.name as string\n this.saveConfig({ name })\n return name\n }\n\n /**\n * Creates a zip archive from a directory\n * @param directoryPath Path to the directory to zip\n * @returns Path to the created zip file and its size\n */\n private createZipFromDirectory(directoryPath: string): { sizeBytes: number; zipPath: string } {\n const zip = new AdmZip()\n\n let totalFiles = 0\n let processedFiles = 0\n\n const countFiles = (currentPath: string) => {\n const files = fs.readdirSync(currentPath)\n\n for (const file of files) {\n const filePath = path.join(currentPath, file)\n const stat = fs.statSync(filePath)\n\n if (stat.isDirectory()) {\n countFiles(filePath)\n } else {\n totalFiles++\n }\n }\n }\n\n countFiles(directoryPath)\n\n const progressBar = new cliProgress.SingleBar(\n {\n barCompleteChar: \"\\u2588\",\n barIncompleteChar: \"\\u2591\",\n format: \"Creating zip [{bar}] {percentage}% | {value}/{total} files | Current: {filename}\",\n hideCursor: true,\n },\n cliProgress.Presets.shades_classic,\n )\n\n progressBar.start(totalFiles, 0, {\n filename: \"Initializing...\",\n })\n\n const addFilesToZip = (currentPath: string, relativePath = \"\") => {\n const files = fs.readdirSync(currentPath)\n\n for (const file of files) {\n const filePath = path.join(currentPath, file)\n const stat = fs.statSync(filePath)\n const displayPath = path.join(relativePath, file)\n\n if (stat.isDirectory()) {\n addFilesToZip(filePath, displayPath)\n } else {\n // Update the progress bar with the current file\n processedFiles++\n progressBar.update(processedFiles, {\n filename:\n displayPath.length > 40 ? \"...\" + displayPath.slice(Math.max(0, displayPath.length - 37)) : displayPath,\n })\n\n zip.addLocalFile(filePath, relativePath)\n }\n }\n }\n\n try {\n addFilesToZip(directoryPath)\n } finally {\n progressBar.stop()\n }\n\n const zipPath = `${directoryPath}.zip`\n zip.writeZip(zipPath)\n\n const sizeBytes = fs.statSync(zipPath).size\n\n return { sizeBytes, zipPath }\n }\n\n private getIndexJson(directoryPath: string) {\n const indexJsonPath = path.join(directoryPath, \"index.json\")\n if (!fs.existsSync(indexJsonPath)) {\n return \"{}\"\n }\n\n return JSON.parse(fs.readFileSync(indexJsonPath, \"utf8\"))\n }\n\n /**\n * Uploads the zip archive to the provided signed URL\n */\n private async uploadArchiveToSignedUrl(input: {\n designSystemId: string\n name?: string\n signedUrl: string\n storybookUploadId: string\n zipPath: string\n }): Promise<void> {\n const { designSystemId, name, signedUrl, storybookUploadId, zipPath } = input\n this.log(`Securely uploading ${zipPath} to Supernova...`)\n\n // Create a new progress bar\n const progressBar = new cliProgress.SingleBar(\n {\n barCompleteChar: \"\\u2588\",\n barIncompleteChar: \"\\u2591\",\n format: \"Uploading |{bar}| {percentage}% || {value}/{total} kB\",\n hideCursor: true,\n },\n cliProgress.Presets.shades_classic,\n )\n\n const fileStream = fs.createReadStream(zipPath)\n const stats = fs.statSync(zipPath)\n const fileSize = stats.size\n const fileSizeKB = Number.parseFloat(bytesToKB(fileSize))\n\n // Start the progress bar\n progressBar.start(fileSizeKB, 0)\n\n try {\n await axios.put(signedUrl, fileStream, {\n headers: {\n \"Content-Length\": fileSize,\n \"Content-Type\": \"application/zip\",\n designSystemId,\n storybookUploadId,\n ...(name && { name }),\n },\n onUploadProgress(progressEvent) {\n const loaded = progressEvent.loaded || 0\n const loadedKB = Number.parseFloat(bytesToKB(loaded))\n progressBar.update(loadedKB)\n },\n })\n\n // Complete the progress bar\n progressBar.update(fileSizeKB)\n progressBar.stop()\n } catch (error) {\n // Make sure to stop the progress bar if there's an error\n progressBar.stop()\n throw error\n }\n }\n\n /**\n * Validates if a directory is a valid storybook static export\n * @param directoryPath Path to the storybook directory\n * @returns An object indicating if the directory is valid and an error message if not\n */\n private validateStorybookDirectory(directoryPath: string): { error?: string; isValid: boolean } {\n if (!fs.existsSync(directoryPath)) {\n return { error: `Directory not found: ${directoryPath}`, isValid: false }\n }\n\n if (!fs.statSync(directoryPath).isDirectory()) {\n return { error: `Not a directory: ${directoryPath}`, isValid: false }\n }\n\n // Check for essential storybook files\n const requiredFiles = [\"index.html\", \"iframe.html\"]\n const missingFiles = requiredFiles.filter(file => !fs.existsSync(path.join(directoryPath, file)))\n\n if (missingFiles.length > 0) {\n return {\n error: `Directory does not appear to be a valid Storybook export. Missing files: ${missingFiles.join(\", \")}`,\n isValid: false,\n }\n }\n\n return { isValid: true }\n }\n\n /**\n * Validates if a zip file size is within the allowed limits\n * @param zipPath Path to the zip file\n * @param sizeBytes Size of the zip file in bytes\n * @returns An object indicating if the zip is valid and an error message if not\n */\n private validateZipSize(zipPath: string, sizeBytes: number): { error?: string; isValid: boolean } {\n if (sizeBytes > MAX_ZIP_SIZE_BYTES) {\n // Delete the zip file if it's too large\n try {\n fs.unlinkSync(zipPath)\n } catch {\n // Ignore errors during cleanup\n }\n\n return {\n error: `Zip file is too large: ${bytesToMB(sizeBytes)}MB. Maximum allowed size is ${bytesToMB(MAX_ZIP_SIZE_BYTES)}MB`,\n isValid: false,\n }\n }\n\n return { isValid: true }\n }\n}\n"]}
1
+ {"version":3,"file":"import-storybook.js","sourceRoot":"","sources":["../../src/commands/import-storybook.ts"],"names":[],"mappings":"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","sourcesContent":["import { Flags } from \"@oclif/core\"\nimport { action } from \"@oclif/core/ux\"\nimport { SentryTraced } from \"@sentry/nestjs\"\nimport slugify from \"@sindresorhus/slugify\"\nimport { DTODataSourceStorybook } from \"@supernova-studio/client\"\nimport AdmZip from \"adm-zip\"\nimport axios from \"axios\"\nimport cliProgress from \"cli-progress\"\nimport inquirer from \"inquirer\"\nimport * as fs from \"node:fs\"\nimport path from \"node:path\"\nimport { z, ZodType } from \"zod\"\n\nimport { commonFlags, getTargetEnv, SentryCommand, storybookUrlForEnvironment, TargetEnv } from \"../types/index.js\"\nimport { sleep } from \"../utils/common.js\"\nimport { getApiClient } from \"../utils/index.js\"\n\n// Maximum allowed size for storybook zip file (500MB)\nconst MAX_ZIP_SIZE_BYTES = 500 * 1024 * 1024\n\nconst bytesToKB = (bytes: number) => (bytes / 1024).toFixed(2)\nconst bytesToMB = (bytes: number) => (bytes / (1024 * 1024)).toFixed(2)\n\nconst ImportStorybookConfigSchema = z\n .object({\n brandId: z.string().optional(),\n designSystemId: z.string().optional(),\n dir: z.string().optional(),\n name: z.string().optional(),\n sourceId: z.string().optional(),\n versionId: z.string().optional(),\n })\n .transform(data => ({\n ...data,\n }))\n\ntype ImportStorybookConfig = z.infer<typeof ImportStorybookConfigSchema>\n\nconst storybookEndpoint = (\n environment: TargetEnv,\n designSystemId: string,\n name: string,\n accessToken: string,\n): string => {\n const host = storybookUrlForEnvironment(environment)\n const encodedAccessToken = encodeURIComponent(accessToken)\n return `${host}/design-systems/${designSystemId}/alias/${name}/index.html?storybook_jwt=${encodedAccessToken}`\n}\n\nexport default class ImportStorybook extends SentryCommand<ImportStorybookConfig> {\n static override args = {}\n static override description = \"Import storybook static export to Supernova\"\n static override examples = [\n \"<%= config.bin %> <%= command.id %> import-storybook --designSystemId=123 --dir ./storybook-static.zip\",\n ]\n static override flags = {\n ...commonFlags,\n brandId: Flags.string({ char: \"b\", description: \"Import storybooks to brand of\" }),\n designSystemId: Flags.string({ char: \"D\", description: \"Import storybooks to design system of\" }),\n dir: Flags.string({\n char: \"d\",\n default: \"./storybook-static\",\n description: \"Directory with storybook static export to import.\",\n }),\n name: Flags.string({ char: \"a\", description: \"Import storybooks with name of\" }),\n sourceId: Flags.string({ char: \"s\", description: \"Import storybooks to source of\" }),\n }\n\n get commandId(): string {\n return ImportStorybook.id\n }\n\n get configSchema(): ZodType<ImportStorybookConfig> {\n return ImportStorybookConfigSchema\n }\n\n @SentryTraced()\n // eslint-disable-next-line complexity\n public async run(): Promise<void> {\n const startTime = Date.now()\n const { flags } = await this.parse(ImportStorybook)\n\n const env = getTargetEnv()\n const { brandId: bId, designSystemId: dsId, dir, name: nameInput, sourceId } = flags\n const name = slugify(await this.askName(nameInput), { lowercase: true })\n let designSystemId = dsId\n let brandId = bId\n\n const apiClient = await getApiClient(env)\n const { designSystems } = apiClient\n const { sources, storybookHosting } = designSystems\n\n if (!designSystemId) {\n designSystemId = await this.getDesignSystemId(env, designSystemId)\n\n if (!designSystemId) {\n this.error(\"Design system ID is required\")\n }\n\n this.saveConfig({ designSystemId })\n }\n\n if (!brandId) {\n brandId = await this.getBrandId(env, designSystemId, \"head\")\n\n if (!brandId) {\n this.error(\"Brand ID is required\")\n }\n\n this.saveConfig({ brandId })\n }\n\n const directoryValidation = this.validateStorybookDirectory(dir)\n if (!directoryValidation.isValid) {\n this.error(directoryValidation.error!)\n }\n\n this.log(`Preparing Storybook files from ${dir}...`)\n const { sizeBytes, zipPath } = this.createZipFromDirectory(dir)\n\n const sizeValidation = this.validateZipSize(zipPath, sizeBytes)\n if (!sizeValidation.isValid) {\n this.error(sizeValidation.error!)\n }\n\n const { signedUrl, storybookUploadId } = await storybookHosting.getSignedUploadUrl(designSystemId, { name })\n\n try {\n await this.uploadArchiveToSignedUrl({ designSystemId, name, signedUrl, storybookUploadId, zipPath })\n this.log(\"✅ Upload complete.\")\n this.log(\"Processing Storybook files...\")\n\n let status\n action.start(\"Deploying Storybook to private Supernova hosting service...\")\n\n let unknownStatusCount = 0\n try {\n do {\n // eslint-disable-next-line no-await-in-loop\n await sleep(1000)\n\n // eslint-disable-next-line no-await-in-loop\n status = await storybookHosting.getUploadStatus(designSystemId, storybookUploadId)\n\n if (status.status === \"Failed\") {\n break\n }\n\n if (status.status === \"Unknown\") {\n unknownStatusCount++\n } else {\n unknownStatusCount = 0\n }\n\n if (unknownStatusCount >= 5) {\n this.error(\"Failed to deploy Storybook: Internal server error\")\n }\n } while (status.status !== \"Completed\" || (status.timestamp && status.timestamp < startTime))\n\n if (status.status === \"Failed\") {\n action.stop(\"\\nFailed to deploy Storybook: Internal server error\")\n } else {\n const { accessToken } = await storybookHosting.getAccessToken(designSystemId, name)\n const storybookUrl = storybookEndpoint(env, designSystemId, name, accessToken)\n\n action.stop(\"\\n✅ Private Storybook deployed successfully!\")\n\n try {\n this.log(`Connecting Storybook as a data source in Supernova...`)\n let storiesCount = 0\n // eslint-disable-next-line max-depth\n if (sourceId) {\n const { storiesCount: updatedStoriesCount } = await sources.updateStorybookImport(\n designSystemId,\n \"head\",\n {\n payload: this.getIndexJson(dir),\n sourceId,\n },\n )\n storiesCount = updatedStoriesCount\n } else {\n const { source } = await sources.create(designSystemId, {\n brandPersistentId: brandId,\n description: \"CLI\",\n indexUrl: storybookUrl,\n payload: this.getIndexJson(dir),\n type: \"Storybook\",\n userUrl: storybookUrl,\n })\n storiesCount = (source as unknown as DTODataSourceStorybook).storybook.storiesCount\n this.saveConfig({ sourceId: source.id })\n }\n\n this.log(`✅ Imported ${storiesCount} component stories into Supernova!`.green)\n this.log(`🔒 Access your Storybook at: ${storybookUrl}`.green)\n } catch (error) {\n this.error(\n `Failed to connect Storybook as data source: ${error instanceof Error ? error.message : String(error)}`\n .red,\n )\n }\n }\n } catch (error) {\n action.stop(`\\nFailed to deploy Storybook: ${error instanceof Error ? error.message : String(error)}`.red)\n }\n } catch (error) {\n this.error(`Failed to upload Storybook files: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n private async askName(inputedName?: string) {\n if (inputedName) return inputedName\n const choice = await inquirer.prompt([\n {\n message: \"What's storybook name\",\n name: \"name\",\n type: \"input\",\n },\n ])\n if (choice.name === \"exit\") {\n this.log(\"Exiting...\")\n this.exit(0)\n }\n\n const name = choice.name as string\n this.saveConfig({ name })\n return name\n }\n\n /**\n * Creates a zip archive from a directory\n * @param directoryPath Path to the directory to zip\n * @returns Path to the created zip file and its size\n */\n private createZipFromDirectory(directoryPath: string): { sizeBytes: number; zipPath: string } {\n const zip = new AdmZip()\n\n let totalFiles = 0\n let processedFiles = 0\n\n const countFiles = (currentPath: string) => {\n const files = fs.readdirSync(currentPath)\n\n for (const file of files) {\n const filePath = path.join(currentPath, file)\n const stat = fs.statSync(filePath)\n\n if (stat.isDirectory()) {\n countFiles(filePath)\n } else {\n totalFiles++\n }\n }\n }\n\n countFiles(directoryPath)\n\n const progressBar = new cliProgress.SingleBar(\n {\n barCompleteChar: \"\\u2588\",\n barIncompleteChar: \"\\u2591\",\n format: \"Creating zip [{bar}] {percentage}% | {value}/{total} files | Current: {filename}\",\n hideCursor: true,\n },\n cliProgress.Presets.shades_classic,\n )\n\n progressBar.start(totalFiles, 0, {\n filename: \"Initializing...\",\n })\n\n const addFilesToZip = (currentPath: string, relativePath = \"\") => {\n const files = fs.readdirSync(currentPath)\n\n for (const file of files) {\n const filePath = path.join(currentPath, file)\n const stat = fs.statSync(filePath)\n const displayPath = path.join(relativePath, file)\n\n if (stat.isDirectory()) {\n addFilesToZip(filePath, displayPath)\n } else {\n // Update the progress bar with the current file\n processedFiles++\n progressBar.update(processedFiles, {\n filename:\n displayPath.length > 40 ? \"...\" + displayPath.slice(Math.max(0, displayPath.length - 37)) : displayPath,\n })\n\n zip.addLocalFile(filePath, relativePath)\n }\n }\n }\n\n try {\n addFilesToZip(directoryPath)\n } finally {\n progressBar.stop()\n }\n\n const zipPath = `${directoryPath}.zip`\n zip.writeZip(zipPath)\n\n const sizeBytes = fs.statSync(zipPath).size\n\n return { sizeBytes, zipPath }\n }\n\n private getIndexJson(directoryPath: string) {\n const indexJsonPath = path.join(directoryPath, \"index.json\")\n if (!fs.existsSync(indexJsonPath)) {\n return \"{}\"\n }\n\n return JSON.parse(fs.readFileSync(indexJsonPath, \"utf8\"))\n }\n\n /**\n * Uploads the zip archive to the provided signed URL\n */\n private async uploadArchiveToSignedUrl(input: {\n designSystemId: string\n name?: string\n signedUrl: string\n storybookUploadId: string\n zipPath: string\n }): Promise<void> {\n const { designSystemId, name, signedUrl, storybookUploadId, zipPath } = input\n this.log(`Securely uploading ${zipPath} to Supernova...`)\n\n // Create a new progress bar\n const progressBar = new cliProgress.SingleBar(\n {\n barCompleteChar: \"\\u2588\",\n barIncompleteChar: \"\\u2591\",\n format: \"Uploading |{bar}| {percentage}% || {value}/{total} kB\",\n hideCursor: true,\n },\n cliProgress.Presets.shades_classic,\n )\n\n const fileStream = fs.createReadStream(zipPath)\n const stats = fs.statSync(zipPath)\n const fileSize = stats.size\n const fileSizeKB = Number.parseFloat(bytesToKB(fileSize))\n\n // Start the progress bar\n progressBar.start(fileSizeKB, 0)\n\n try {\n await axios.put(signedUrl, fileStream, {\n headers: {\n \"Content-Length\": fileSize,\n \"Content-Type\": \"application/zip\",\n designSystemId,\n storybookUploadId,\n ...(name && { name }),\n },\n onUploadProgress(progressEvent) {\n const loaded = progressEvent.loaded || 0\n const loadedKB = Number.parseFloat(bytesToKB(loaded))\n progressBar.update(loadedKB)\n },\n })\n\n // Complete the progress bar\n progressBar.update(fileSizeKB)\n progressBar.stop()\n } catch (error) {\n // Make sure to stop the progress bar if there's an error\n progressBar.stop()\n throw error\n }\n }\n\n /**\n * Validates if a directory is a valid storybook static export\n * @param directoryPath Path to the storybook directory\n * @returns An object indicating if the directory is valid and an error message if not\n */\n private validateStorybookDirectory(directoryPath: string): { error?: string; isValid: boolean } {\n if (!fs.existsSync(directoryPath)) {\n return { error: `Directory not found: ${directoryPath}`, isValid: false }\n }\n\n if (!fs.statSync(directoryPath).isDirectory()) {\n return { error: `Not a directory: ${directoryPath}`, isValid: false }\n }\n\n // Check for essential storybook files\n const requiredFiles = [\"index.html\", \"iframe.html\"]\n const missingFiles = requiredFiles.filter(file => !fs.existsSync(path.join(directoryPath, file)))\n\n if (missingFiles.length > 0) {\n return {\n error: `Directory does not appear to be a valid Storybook export. Missing files: ${missingFiles.join(\", \")}`,\n isValid: false,\n }\n }\n\n return { isValid: true }\n }\n\n /**\n * Validates if a zip file size is within the allowed limits\n * @param zipPath Path to the zip file\n * @param sizeBytes Size of the zip file in bytes\n * @returns An object indicating if the zip is valid and an error message if not\n */\n private validateZipSize(zipPath: string, sizeBytes: number): { error?: string; isValid: boolean } {\n if (sizeBytes > MAX_ZIP_SIZE_BYTES) {\n // Delete the zip file if it's too large\n try {\n fs.unlinkSync(zipPath)\n } catch {\n // Ignore errors during cleanup\n }\n\n return {\n error: `Zip file is too large: ${bytesToMB(sizeBytes)}MB. Maximum allowed size is ${bytesToMB(MAX_ZIP_SIZE_BYTES)}MB`,\n isValid: false,\n }\n }\n\n return { isValid: true }\n }\n}\n"]}
@@ -427,5 +427,5 @@
427
427
  ]
428
428
  }
429
429
  },
430
- "version": "2.0.19"
430
+ "version": "2.0.20"
431
431
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@supernovaio/cli-next",
3
3
  "description": "Supernova.io Command Line Interface",
4
- "version": "2.0.19",
4
+ "version": "2.0.20",
5
5
  "author": "Supernova.io",
6
6
  "bin": {
7
7
  "supernova-next": "./bin/run"