Sign In

@flashcatcloud/flashcat-cli

Package Overview
Dependencies
Maintainers
3
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@flashcatcloud/flashcat-cli - npm Package Compare versions

Comparing version
0.3.0
to
0.4.0
+1
dist/commands/sourcemaps/__tests__/react-native.test.d.ts
export {};
"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":"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"}
+3
-2
"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

@@ -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"}
{
"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",