@flashcatcloud/flashcat-cli
Advanced tools
| "use strict"; | ||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
| function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
| return new (P || (P = Promise))(function (resolve, reject) { | ||
| function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
| function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
| function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
| step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
| }); | ||
| }; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const os_1 = __importDefault(require("os")); | ||
| const path_1 = __importDefault(require("path")); | ||
| const advanced_1 = require("clipanion/lib/advanced"); | ||
| const upload_1 = require("../../../helpers/upload"); | ||
| const version_1 = require("../../../helpers/version"); | ||
| const react_native_1 = require("../react-native"); | ||
| jest.mock('../../../helpers/upload', () => { | ||
| const actual = jest.requireActual('../../../helpers/upload'); | ||
| return Object.assign(Object.assign({}, actual), { upload: jest.fn() }); | ||
| }); | ||
| describe('UploadReactNativeCommand', () => { | ||
| const mockedUpload = upload_1.upload; | ||
| beforeEach(() => { | ||
| mockedUpload.mockReset(); | ||
| process.env = { FLASHCAT_API_KEY: 'PLACEHOLDER' }; | ||
| }); | ||
| test('uploads multipart event metadata with bundle and sourcemap files', () => __awaiter(void 0, void 0, void 0, function* () { | ||
| const { bundlePath, sourcemapPath } = createBundleFixtures(); | ||
| const uploadImplementation = jest.fn().mockResolvedValue(upload_1.UploadStatus.Success); | ||
| mockedUpload.mockReturnValue(uploadImplementation); | ||
| const { code } = yield runCLI([ | ||
| 'sourcemaps', | ||
| 'upload-react-native', | ||
| '--platform', | ||
| 'ios', | ||
| '--service', | ||
| 'my-app', | ||
| '--release-version', | ||
| '1.2.3', | ||
| '--bundle', | ||
| bundlePath, | ||
| '--sourcemap', | ||
| sourcemapPath, | ||
| ]); | ||
| expect(code).toBe(0); | ||
| expect(uploadImplementation).toHaveBeenCalledTimes(1); | ||
| const [payload, options] = uploadImplementation.mock.calls[0]; | ||
| const event = payload.content.get('event'); | ||
| const bundle = payload.content.get('bundle'); | ||
| const sourceMap = payload.content.get('source_map'); | ||
| if ((event === null || event === void 0 ? void 0 : event.type) !== 'string') { | ||
| throw new Error('event should be a string multipart value'); | ||
| } | ||
| expect(event.options).toEqual({ contentType: 'application/json' }); | ||
| expect(JSON.parse(event.value)).toEqual({ | ||
| type: 'react_native_sourcemap', | ||
| service: 'my-app', | ||
| version: '1.2.3', | ||
| platform: 'ios', | ||
| cli_version: version_1.version, | ||
| }); | ||
| expect(bundle).toEqual({ | ||
| type: 'file', | ||
| path: path_1.default.resolve(bundlePath), | ||
| options: { filename: path_1.default.basename(bundlePath) }, | ||
| }); | ||
| expect(sourceMap).toEqual({ | ||
| type: 'file', | ||
| path: path_1.default.resolve(sourcemapPath), | ||
| options: { filename: path_1.default.basename(sourcemapPath) }, | ||
| }); | ||
| expect(options).toMatchObject({ | ||
| retries: 5, | ||
| useGzip: true, | ||
| }); | ||
| })); | ||
| test('supports the android platform', () => __awaiter(void 0, void 0, void 0, function* () { | ||
| const { bundlePath, sourcemapPath } = createBundleFixtures(); | ||
| const uploadImplementation = jest.fn().mockResolvedValue(upload_1.UploadStatus.Success); | ||
| mockedUpload.mockReturnValue(uploadImplementation); | ||
| const { code } = yield runCLI([ | ||
| 'sourcemaps', | ||
| 'upload-react-native', | ||
| '--platform', | ||
| 'android', | ||
| '--service', | ||
| 'my-app', | ||
| '--release-version', | ||
| '1.2.3', | ||
| '--bundle', | ||
| bundlePath, | ||
| '--sourcemap', | ||
| sourcemapPath, | ||
| ]); | ||
| expect(code).toBe(0); | ||
| const [payload] = uploadImplementation.mock.calls[0]; | ||
| const event = payload.content.get('event'); | ||
| if ((event === null || event === void 0 ? void 0 : event.type) !== 'string') { | ||
| throw new Error('event should be a string multipart value'); | ||
| } | ||
| expect(JSON.parse(event.value)).toMatchObject({ platform: 'android' }); | ||
| })); | ||
| test('rejects an invalid platform', () => __awaiter(void 0, void 0, void 0, function* () { | ||
| const { bundlePath, sourcemapPath } = createBundleFixtures(); | ||
| const { code, context } = yield runCLI([ | ||
| 'sourcemaps', | ||
| 'upload-react-native', | ||
| '--platform', | ||
| 'web', | ||
| '--service', | ||
| 'my-app', | ||
| '--release-version', | ||
| '1.2.3', | ||
| '--bundle', | ||
| bundlePath, | ||
| '--sourcemap', | ||
| sourcemapPath, | ||
| ]); | ||
| expect(code).toBe(1); | ||
| expect(context.stderr.toString()).toContain('Invalid --platform: web'); | ||
| expect(mockedUpload).not.toHaveBeenCalled(); | ||
| })); | ||
| test('returns non-zero when bundle path does not exist', () => __awaiter(void 0, void 0, void 0, function* () { | ||
| const { sourcemapPath } = createBundleFixtures(); | ||
| const missingBundlePath = path_1.default.join(os_1.default.tmpdir(), `missing-bundle-${Date.now()}.jsbundle`); | ||
| const { code, context } = yield runCLI([ | ||
| 'sourcemaps', | ||
| 'upload-react-native', | ||
| '--platform', | ||
| 'ios', | ||
| '--service', | ||
| 'my-app', | ||
| '--release-version', | ||
| '1.2.3', | ||
| '--bundle', | ||
| missingBundlePath, | ||
| '--sourcemap', | ||
| sourcemapPath, | ||
| ]); | ||
| expect(code).toBe(1); | ||
| expect(context.stderr.toString()).toContain(`File not found: ${path_1.default.resolve(missingBundlePath)}`); | ||
| expect(mockedUpload).not.toHaveBeenCalled(); | ||
| })); | ||
| test('returns non-zero when sourcemap path does not exist', () => __awaiter(void 0, void 0, void 0, function* () { | ||
| const { bundlePath } = createBundleFixtures(); | ||
| const missingSourcemapPath = path_1.default.join(os_1.default.tmpdir(), `missing-sourcemap-${Date.now()}.map`); | ||
| const { code, context } = yield runCLI([ | ||
| 'sourcemaps', | ||
| 'upload-react-native', | ||
| '--platform', | ||
| 'ios', | ||
| '--service', | ||
| 'my-app', | ||
| '--release-version', | ||
| '1.2.3', | ||
| '--bundle', | ||
| bundlePath, | ||
| '--sourcemap', | ||
| missingSourcemapPath, | ||
| ]); | ||
| expect(code).toBe(1); | ||
| expect(context.stderr.toString()).toContain(`File not found: ${path_1.default.resolve(missingSourcemapPath)}`); | ||
| expect(mockedUpload).not.toHaveBeenCalled(); | ||
| })); | ||
| test('dry run does not upload', () => __awaiter(void 0, void 0, void 0, function* () { | ||
| const { bundlePath, sourcemapPath } = createBundleFixtures(); | ||
| const { code, context } = yield runCLI([ | ||
| 'sourcemaps', | ||
| 'upload-react-native', | ||
| '--platform', | ||
| 'ios', | ||
| '--service', | ||
| 'my-app', | ||
| '--release-version', | ||
| '1.2.3', | ||
| '--bundle', | ||
| bundlePath, | ||
| '--sourcemap', | ||
| sourcemapPath, | ||
| '--dry-run', | ||
| ]); | ||
| expect(code).toBe(0); | ||
| expect(context.stdout.toString()).toContain('[DRYRUN]'); | ||
| expect(context.stdout.toString()).toContain('platform=ios'); | ||
| expect(mockedUpload).not.toHaveBeenCalled(); | ||
| })); | ||
| }); | ||
| const runCLI = (args) => __awaiter(void 0, void 0, void 0, function* () { | ||
| const cli = new advanced_1.Cli(); | ||
| cli.register(react_native_1.UploadReactNativeCommand); | ||
| const context = createMockContext(); | ||
| const code = yield cli.run(args, context); | ||
| return { code, context }; | ||
| }); | ||
| const createMockContext = () => { | ||
| let stdout = ''; | ||
| let stderr = ''; | ||
| return { | ||
| stderr: { | ||
| toString: () => stderr, | ||
| write: (input) => { | ||
| stderr += input; | ||
| }, | ||
| }, | ||
| stdout: { | ||
| toString: () => stdout, | ||
| write: (input) => { | ||
| stdout += input; | ||
| }, | ||
| }, | ||
| }; | ||
| }; | ||
| const createBundleFixtures = () => { | ||
| const directory = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'flashcat-react-native-test-')); | ||
| const bundlePath = path_1.default.join(directory, 'index.bundle'); | ||
| const sourcemapPath = path_1.default.join(directory, 'index.bundle.map'); | ||
| fs_1.default.writeFileSync(bundlePath, 'bundle-content'); | ||
| fs_1.default.writeFileSync(sourcemapPath, 'sourcemap-content'); | ||
| return { bundlePath, sourcemapPath }; | ||
| }; | ||
| //# sourceMappingURL=react-native.test.js.map |
| {"version":3,"file":"react-native.test.js","sourceRoot":"","sources":["../../../../src/commands/sourcemaps/__tests__/react-native.test.ts"],"names":[],"mappings":"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"} |
| import { Command } from 'clipanion'; | ||
| export declare class UploadReactNativeCommand extends Command { | ||
| static paths: string[][]; | ||
| static usage: import("clipanion").Usage; | ||
| private platform; | ||
| private service; | ||
| private releaseVersion; | ||
| private buildVersion; | ||
| private bundle; | ||
| private sourcemap; | ||
| private dryRun; | ||
| private quiet; | ||
| private cliVersion; | ||
| private config; | ||
| execute(): Promise<0 | 1>; | ||
| private asMultipartPayload; | ||
| private getRequestBuilder; | ||
| private uploadReactNativeBundle; | ||
| } |
| "use strict"; | ||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
| function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
| return new (P || (P = Promise))(function (resolve, reject) { | ||
| function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
| function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
| function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
| step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
| }); | ||
| }; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.UploadReactNativeCommand = void 0; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const path_1 = __importDefault(require("path")); | ||
| const chalk_1 = __importDefault(require("chalk")); | ||
| const clipanion_1 = require("clipanion"); | ||
| const apikey_1 = require("../../helpers/apikey"); | ||
| const base_intake_url_1 = require("../../helpers/base-intake-url"); | ||
| const errors_1 = require("../../helpers/errors"); | ||
| const upload_1 = require("../../helpers/upload"); | ||
| const utils_1 = require("../../helpers/utils"); | ||
| const version_1 = require("../../helpers/version"); | ||
| const REACT_NATIVE_PLATFORMS = ['ios', 'android']; | ||
| class UploadReactNativeCommand extends clipanion_1.Command { | ||
| constructor() { | ||
| super(...arguments); | ||
| this.platform = clipanion_1.Option.String('--platform'); | ||
| this.service = clipanion_1.Option.String('--service'); | ||
| this.releaseVersion = clipanion_1.Option.String('--release-version'); | ||
| this.buildVersion = clipanion_1.Option.String('--build-version'); | ||
| this.bundle = clipanion_1.Option.String('--bundle'); | ||
| this.sourcemap = clipanion_1.Option.String('--sourcemap'); | ||
| this.dryRun = clipanion_1.Option.Boolean('--dry-run', false); | ||
| this.quiet = clipanion_1.Option.Boolean('--quiet', false); | ||
| this.cliVersion = version_1.version; | ||
| this.config = { | ||
| apiKey: process.env.FLASHCAT_API_KEY, | ||
| flashcatSite: process.env.FLASHCAT_SITE || 'flashcat.cloud', | ||
| }; | ||
| } | ||
| execute() { | ||
| return __awaiter(this, void 0, void 0, function* () { | ||
| if (!this.platform) { | ||
| this.context.stderr.write('Missing --platform\n'); | ||
| return 1; | ||
| } | ||
| if (!REACT_NATIVE_PLATFORMS.includes(this.platform)) { | ||
| this.context.stderr.write(`Invalid --platform: ${this.platform} (expected one of ${REACT_NATIVE_PLATFORMS.join(', ')})\n`); | ||
| return 1; | ||
| } | ||
| if (!this.service) { | ||
| this.context.stderr.write('Missing --service\n'); | ||
| return 1; | ||
| } | ||
| if (!this.releaseVersion) { | ||
| this.context.stderr.write('Missing --release-version\n'); | ||
| return 1; | ||
| } | ||
| if (!this.bundle) { | ||
| this.context.stderr.write('Missing --bundle\n'); | ||
| return 1; | ||
| } | ||
| if (!this.sourcemap) { | ||
| this.context.stderr.write('Missing --sourcemap\n'); | ||
| return 1; | ||
| } | ||
| const bundlePath = path_1.default.resolve(this.bundle); | ||
| if (!fs_1.default.existsSync(bundlePath)) { | ||
| this.context.stderr.write(`File not found: ${bundlePath}\n`); | ||
| return 1; | ||
| } | ||
| const sourcemapPath = path_1.default.resolve(this.sourcemap); | ||
| if (!fs_1.default.existsSync(sourcemapPath)) { | ||
| this.context.stderr.write(`File not found: ${sourcemapPath}\n`); | ||
| return 1; | ||
| } | ||
| const apiKeyValidator = (0, apikey_1.newApiKeyValidator)({ | ||
| apiKey: this.config.apiKey, | ||
| flashcatSite: this.config.flashcatSite, | ||
| }); | ||
| const requestBuilder = this.getRequestBuilder(); | ||
| const payload = this.asMultipartPayload(bundlePath, sourcemapPath); | ||
| if (this.dryRun) { | ||
| this.context.stdout.write(`[DRYRUN] would upload ${bundlePath} and ${sourcemapPath} (service=${this.service}, version=${this.releaseVersion}, platform=${this.platform})\n`); | ||
| return 0; | ||
| } | ||
| try { | ||
| const result = yield this.uploadReactNativeBundle(requestBuilder, apiKeyValidator)(payload, bundlePath, sourcemapPath); | ||
| if (result === upload_1.UploadStatus.Success) { | ||
| if (!this.quiet) { | ||
| this.context.stdout.write('Upload succeeded.\n'); | ||
| } | ||
| return 0; | ||
| } | ||
| return 1; | ||
| } | ||
| catch (error) { | ||
| if (error instanceof errors_1.InvalidConfigurationError) { | ||
| this.context.stderr.write(`${error.message}\n`); | ||
| return 1; | ||
| } | ||
| throw error; | ||
| } | ||
| }); | ||
| } | ||
| asMultipartPayload(bundlePath, sourcemapPath) { | ||
| const eventMeta = { | ||
| type: 'react_native_sourcemap', | ||
| service: this.service, | ||
| version: this.releaseVersion, | ||
| platform: this.platform, | ||
| cli_version: this.cliVersion, | ||
| }; | ||
| if (this.buildVersion) { | ||
| eventMeta.build_version = this.buildVersion; | ||
| } | ||
| const content = new Map([ | ||
| [ | ||
| 'event', | ||
| { | ||
| type: 'string', | ||
| options: { contentType: 'application/json' }, | ||
| value: JSON.stringify(eventMeta), | ||
| }, | ||
| ], | ||
| [ | ||
| 'bundle', | ||
| { | ||
| type: 'file', | ||
| path: bundlePath, | ||
| options: { filename: path_1.default.basename(bundlePath) }, | ||
| }, | ||
| ], | ||
| [ | ||
| 'source_map', | ||
| { | ||
| type: 'file', | ||
| path: sourcemapPath, | ||
| options: { filename: path_1.default.basename(sourcemapPath) }, | ||
| }, | ||
| ], | ||
| ]); | ||
| return { content }; | ||
| } | ||
| getRequestBuilder() { | ||
| if (!this.config.apiKey) { | ||
| throw new errors_1.InvalidConfigurationError(`Missing ${chalk_1.default.bold('FLASHCAT_API_KEY')} in your environment.`); | ||
| } | ||
| return (0, utils_1.getRequestBuilder)({ | ||
| apiKey: this.config.apiKey, | ||
| baseUrl: (0, base_intake_url_1.getBaseSourcemapIntakeUrl)(this.config.flashcatSite), | ||
| headers: new Map([ | ||
| ['DD-EVP-ORIGIN', 'flashcat-cli_react-native'], | ||
| ['DD-EVP-ORIGIN-VERSION', this.cliVersion], | ||
| ]), | ||
| overrideUrl: '/sourcemap/upload', | ||
| }); | ||
| } | ||
| uploadReactNativeBundle(requestBuilder, apiKeyValidator) { | ||
| return (payload, bundlePath, sourcemapPath) => __awaiter(this, void 0, void 0, function* () { | ||
| return (0, upload_1.upload)(requestBuilder)(payload, { | ||
| apiKeyValidator, | ||
| onError: (e) => { | ||
| this.context.stderr.write(`Upload failed: ${e.message}\n`); | ||
| }, | ||
| onRetry: (e, attempts) => { | ||
| if (!this.quiet) { | ||
| this.context.stdout.write(`Retry ${attempts}: ${e.message}\n`); | ||
| } | ||
| }, | ||
| onUpload: () => { | ||
| if (!this.quiet) { | ||
| this.context.stdout.write(`Uploading ${path_1.default.basename(bundlePath)} and ${path_1.default.basename(sourcemapPath)}...\n`); | ||
| } | ||
| }, | ||
| retries: 5, | ||
| useGzip: true, | ||
| }); | ||
| }); | ||
| } | ||
| } | ||
| exports.UploadReactNativeCommand = UploadReactNativeCommand; | ||
| UploadReactNativeCommand.paths = [['sourcemaps', 'upload-react-native']]; | ||
| UploadReactNativeCommand.usage = clipanion_1.Command.Usage({ | ||
| category: 'RUM', | ||
| description: 'Upload a React Native JavaScript bundle and its sourcemap to Flashcat.', | ||
| details: ` | ||
| Provide the JS bundle and the sourcemap produced by the React Native bundler (Metro). | ||
| Both files are sent in one multipart request; the server indexes them by service + version + platform. | ||
| `, | ||
| examples: [ | ||
| [ | ||
| 'Upload an iOS React Native sourcemap', | ||
| 'flashcat-cli sourcemaps upload-react-native --platform ios --service my-app --release-version 1.2.3 --bundle ./main.jsbundle --sourcemap ./main.jsbundle.map', | ||
| ], | ||
| [ | ||
| 'Upload an Android React Native sourcemap', | ||
| 'flashcat-cli sourcemaps upload-react-native --platform android --service my-app --release-version 1.2.3 --bundle ./index.android.bundle --sourcemap ./index.android.bundle.map', | ||
| ], | ||
| ], | ||
| }); | ||
| //# sourceMappingURL=react-native.js.map |
| {"version":3,"file":"react-native.js","sourceRoot":"","sources":["../../../src/commands/sourcemaps/react-native.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AAEvB,kDAAyB;AACzB,yCAAyC;AAEzC,iDAAwE;AACxE,mEAAuE;AACvE,iDAA8D;AAE9D,iDAA2F;AAC3F,+CAAqD;AACrD,mDAA6C;AAE7C,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AAEjD,MAAa,wBAAyB,SAAQ,mBAAO;IAArD;;QAsBU,aAAQ,GAAG,kBAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACtC,YAAO,GAAG,kBAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACpC,mBAAc,GAAG,kBAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;QACnD,iBAAY,GAAG,kBAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC/C,WAAM,GAAG,kBAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAClC,cAAS,GAAG,kBAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACxC,WAAM,GAAG,kBAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAC3C,UAAK,GAAG,kBAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAExC,eAAU,GAAG,iBAAO,CAAA;QAEpB,WAAM,GAAG;YACf,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YACpC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB;SAC5D,CAAA;IAuKH,CAAC;IArKc,OAAO;;YAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBAEjD,OAAO,CAAC,CAAA;YACV,CAAC;YACD,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,QAAQ,qBAAqB,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAE1H,OAAO,CAAC,CAAA;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;gBAEhD,OAAO,CAAC,CAAA;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;gBAExD,OAAO,CAAC,CAAA;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;gBAE/C,OAAO,CAAC,CAAA;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;gBAElD,OAAO,CAAC,CAAA;YACV,CAAC;YAED,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC5C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,IAAI,CAAC,CAAA;gBAE5D,OAAO,CAAC,CAAA;YACV,CAAC;YACD,MAAM,aAAa,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAClD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,aAAa,IAAI,CAAC,CAAA;gBAE/D,OAAO,CAAC,CAAA;YACV,CAAC;YAED,MAAM,eAAe,GAAG,IAAA,2BAAkB,EAAC;gBACzC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACvC,CAAC,CAAA;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YAElE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,yBAAyB,UAAU,QAAQ,aAAa,aAAa,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,cAAc,cAAc,IAAI,CAAC,QAAQ,KAAK,CAClJ,CAAA;gBAED,OAAO,CAAC,CAAA;YACV,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;gBAEtH,IAAI,MAAM,KAAK,qBAAY,CAAC,OAAO,EAAE,CAAC;oBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;oBAClD,CAAC;oBAED,OAAO,CAAC,CAAA;gBACV,CAAC;gBAED,OAAO,CAAC,CAAA;YACV,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,kCAAyB,EAAE,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;oBAE/C,OAAO,CAAC,CAAA;gBACV,CAAC;gBAED,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;KAAA;IAEO,kBAAkB,CAAC,UAAkB,EAAE,aAAqB;QAClE,MAAM,SAAS,GAA2B;YACxC,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAQ;YACtB,OAAO,EAAE,IAAI,CAAC,cAAe;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAS;YACxB,WAAW,EAAE,IAAI,CAAC,UAAU;SAC7B,CAAA;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAA;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAyB;YAC9C;gBACE,OAAO;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAC,WAAW,EAAE,kBAAkB,EAAC;oBAC1C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;iBACjC;aACF;YACD;gBACE,QAAQ;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,EAAC,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAC;iBAC/C;aACF;YACD;gBACE,YAAY;gBACZ;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,EAAC,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAC;iBAClD;aACF;SACF,CAAC,CAAA;QAEF,OAAO,EAAC,OAAO,EAAC,CAAA;IAClB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,kCAAyB,CAAC,WAAW,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAA;QACvG,CAAC;QAED,OAAO,IAAA,yBAAiB,EAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,OAAO,EAAE,IAAA,2CAAyB,EAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5D,OAAO,EAAE,IAAI,GAAG,CAAC;gBACf,CAAC,eAAe,EAAE,2BAA2B,CAAC;gBAC9C,CAAC,uBAAuB,EAAE,IAAI,CAAC,UAAU,CAAC;aAC3C,CAAC;YACF,WAAW,EAAE,mBAAmB;SACjC,CAAC,CAAA;IACJ,CAAC;IAEO,uBAAuB,CAC7B,cAA8B,EAC9B,eAAgC;QAEhC,OAAO,CAAO,OAAyB,EAAE,UAAkB,EAAE,aAAqB,EAAE,EAAE;YACpF,OAAA,IAAA,eAAM,EAAC,cAAc,CAAC,CAAC,OAAO,EAAE;gBAC9B,eAAe;gBACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;gBAC5D,CAAC;gBACD,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;oBACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;oBAChE,CAAC;gBACH,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,cAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;oBAC9G,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;UAAA,CAAA;IACN,CAAC;;AA1MH,4DA2MC;AA1Me,8BAAK,GAAG,CAAC,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC,AAA1C,CAA0C;AAE/C,8BAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAClC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,wEAAwE;IACrF,OAAO,EAAE;;;KAGR;IACD,QAAQ,EAAE;QACR;YACE,sCAAsC;YACtC,8JAA8J;SAC/J;QACD;YACE,0CAA0C;YAC1C,gLAAgL;SACjL;KACF;CACF,CAAC,AAjBiB,CAiBjB"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const miniprogram_1 = require("./miniprogram"); | ||
| const react_native_1 = require("./react-native"); | ||
| const upload_1 = require("./upload"); | ||
| const miniprogram_1 = require("./miniprogram"); | ||
| module.exports = [upload_1.UploadCommand, miniprogram_1.UploadMiniprogramCommand]; | ||
| module.exports = [upload_1.UploadCommand, miniprogram_1.UploadMiniprogramCommand, react_native_1.UploadReactNativeCommand]; | ||
| //# sourceMappingURL=cli.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/commands/sourcemaps/cli.ts"],"names":[],"mappings":";;AAAA,qCAAsC;AACtC,+CAAsD;AAEtD,MAAM,CAAC,OAAO,GAAG,CAAC,sBAAa,EAAE,sCAAwB,CAAC,CAAA"} | ||
| {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/commands/sourcemaps/cli.ts"],"names":[],"mappings":";;AAAA,+CAAsD;AACtD,iDAAuD;AACvD,qCAAsC;AAEtC,MAAM,CAAC,OAAO,GAAG,CAAC,sBAAa,EAAE,sCAAwB,EAAE,uCAAwB,CAAC,CAAA"} |
+1
-1
| { | ||
| "name": "@flashcatcloud/flashcat-cli", | ||
| "version": "0.3.0", | ||
| "version": "0.4.0", | ||
| "description": "CLI tool for Flashcat Cloud", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
694470
4.77%219
2.82%9338
5.06%94
5.62%