UNPKG

@arkts/sdk-downloader

Version:
1 lines 7.37 kB
{"version":3,"file":"command-line-B4udgTmZ.cjs","names":["message: string","cliOptions: CliOptions","logType: string","logger: P.Logger","unResolveSdkDir: string","options: DownloadCommandLineOptions","SdkVersion","SdkArch","SdkOS"],"sources":["../src/errors/cli.ts","../src/command-line.ts"],"sourcesContent":["export class CliError<CliOptions extends Record<string, any>> extends Error {\n constructor(message: string, public cliOptions: CliOptions) {\n super(message)\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport P from 'pino'\nimport pretty from 'pino-pretty'\nimport { createDownloader } from './download'\nimport { getSdkUrl, SdkArch, SdkOS, SdkVersion } from './enums/sdk'\nimport { CliError } from './errors/cli'\n\ninterface DownloadCommandLineOptions {\n apiVersion: keyof typeof SdkVersion\n arch: keyof typeof SdkArch\n os: keyof typeof SdkOS\n cacheDir: string\n targetDir: string\n logType: 'explicit' | 'full' | 'silent'\n logTimeout: number\n logger?: P.Logger\n}\n\nfunction isLogType(logType: string): logType is 'explicit' | 'full' | 'silent' {\n return ['explicit', 'full', 'silent'].includes(logType)\n}\n\nexport interface RunCommandLineDownloadResult {\n logger: P.Logger\n}\n\nexport async function logSdkDirStructure(logger: P.Logger, unResolveSdkDir: string): Promise<void> {\n // Log the sdk directory structure\n const sdkDir = path.resolve(unResolveSdkDir)\n const sdkDirContents = fs.readdirSync(sdkDir)\n logger.info({ sdkDirContents }, `SDK directory structure:`)\n sdkDirContents.forEach((item) => {\n const ohUniPackageJson = path.resolve(sdkDir, item, 'oh-uni-package.json')\n logger.info({\n msg: `|- ${path.resolve(sdkDir, item)}`,\n ohUniPackageJson: fs.existsSync(ohUniPackageJson) ? JSON.parse(fs.readFileSync(ohUniPackageJson, 'utf-8')) : null,\n })\n })\n}\n\nexport async function runCommandLineDownload(options: DownloadCommandLineOptions): Promise<RunCommandLineDownloadResult> {\n if (!options.apiVersion || !options.arch || !options.os) {\n throw new CliError('Please provide --api-version, --arch, and --os options.', options)\n }\n if (!isLogType(options.logType))\n throw new CliError(`Invalid log type: ${options.logType}. Valid options are 'explicit', 'full', or 'silent'.`, options)\n const url = getSdkUrl(SdkVersion[options.apiVersion], SdkArch[options.arch], SdkOS[options.os])\n if (!url) {\n throw new CliError(`No SDK found for version ${options.apiVersion}, architecture ${options.arch}, and OS ${options.os}.`, options)\n }\n\n const logger = options.logger ?? P(pretty({ colorize: true, colorizeObjects: true, singleLine: true }))\n logger.info(options, `CLI Options:`)\n const abortController = new AbortController()\n process.on('exit', () => abortController.abort())\n const downloader = await createDownloader({\n url,\n cacheDir: options.cacheDir,\n targetDir: options.targetDir,\n resumeDownload: true,\n signal: abortController.signal,\n })\n\n downloader.on('*', (ev, data) => {\n if (options.logType === 'silent')\n return\n if (options.logType === 'full')\n return logger.info({ event: ev, data }, `Event: ${ev}`)\n })\n\n if (options.logType === 'explicit') {\n // 每隔 5 秒打印一次下载进度\n let lastLogTime = 0\n downloader.on('download-progress', (progress) => {\n const now = Date.now()\n if (now - lastLogTime >= options.logTimeout) { // 5000ms = 5秒\n logger.info({\n ...progress,\n msg: `Percentage: ${progress.percentage.toFixed(2)}%, current speed: ${progress.network}${progress.unit}/s`,\n })\n lastLogTime = now\n }\n })\n downloader.on('zip-extracted', (entry) => {\n // 每隔 5 秒打印一次解压进度\n const now = Date.now()\n if (now - lastLogTime >= options.logTimeout) {\n logger.info(entry, `Extracted file in zip: ${entry.path}...`)\n lastLogTime = now\n }\n })\n downloader.on('tar-extracted', (entry) => {\n // 每隔 5 秒打印一次解压进度\n const now = Date.now()\n if (now - lastLogTime >= options.logTimeout) { // 5000ms = 5秒\n logger.info(entry, `Extracted file in tar.gz: ${entry.path}...`)\n lastLogTime = now\n }\n })\n }\n\n logger.info(`Starting download from ${url}`)\n await downloader.startDownload()\n logger.info(`Download completed and saved to ${options.targetDir}, starting SHA256 check...`)\n await downloader.checkSha256()\n logger.info(`SHA256 check passed, SDK is ready in ${options.targetDir}, starting extract tar...`)\n await downloader.extractTar()\n logger.info(`SDK extracted successfully, starting extract zip...`)\n await downloader.extractZip()\n logger.info(`SDK extracted successfully, cleanup...`)\n await downloader.clean()\n logger.info(`Cleanup completed, SDK is ready in ${options.targetDir}.`)\n\n // Log the sdk directory structure\n await logSdkDirStructure(logger, options.targetDir)\n\n return {\n logger,\n }\n}\n"],"mappings":"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"}