tdpw
Version:
CLI tool for uploading Playwright test reports to TestDino platform with Azure storage support
103 lines • 3.99 kB
JavaScript
;
/**
* Core types and interfaces for TestDino CLI
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.maskToken = exports.stringToBoolean = exports.ExitCode = exports.AuthenticationError = exports.FileSystemError = exports.NetworkError = exports.ValidationError = exports.ConfigurationError = exports.BaseError = exports.ApiTokenSchema = exports.ConfigSchema = exports.CLIOptionsSchema = void 0;
const zod_1 = require("zod");
// CLI Options Schema
exports.CLIOptionsSchema = zod_1.z.object({
reportDirectory: zod_1.z.string().min(1, 'Report directory is required'),
token: zod_1.z.string().min(1, 'API token is required'),
uploadImages: zod_1.z.boolean().optional().default(false),
uploadVideos: zod_1.z.boolean().optional().default(false),
uploadHtml: zod_1.z.boolean().optional().default(false),
uploadTraces: zod_1.z.boolean().optional().default(false),
jsonReport: zod_1.z.string().optional(),
htmlReport: zod_1.z.string().optional(),
traceDir: zod_1.z.string().optional(),
verbose: zod_1.z.boolean().optional().default(false),
dryRun: zod_1.z.boolean().optional().default(false),
});
// Configuration Schema
exports.ConfigSchema = zod_1.z.object({
apiUrl: zod_1.z.string().url(),
token: zod_1.z.string().min(1),
uploadImages: zod_1.z.boolean().default(false),
uploadVideos: zod_1.z.boolean().default(false),
uploadHtml: zod_1.z.boolean().default(false),
uploadTraces: zod_1.z.boolean().default(false),
verbose: zod_1.z.boolean().default(false),
dryRun: zod_1.z.boolean().default(false),
});
// API Token Validation Schema
exports.ApiTokenSchema = zod_1.z.string().regex(/^trx_(development|staging|production)_[a-f0-9]{64}$/, 'Invalid API token format. Expected: trx_{env}_{64-char-hex}');
// Error Types
class BaseError extends Error {
code;
cause;
constructor(message, code, cause) {
super(message);
this.name = this.constructor.name;
this.code = code;
if (cause !== undefined) {
this.cause = cause;
}
Error.captureStackTrace(this, this.constructor);
}
}
exports.BaseError = BaseError;
class ConfigurationError extends BaseError {
constructor(message, cause) {
super(message, 'CONFIG_ERROR', cause);
}
}
exports.ConfigurationError = ConfigurationError;
class ValidationError extends BaseError {
constructor(message, cause) {
super(message, 'VALIDATION_ERROR', cause);
}
}
exports.ValidationError = ValidationError;
class NetworkError extends BaseError {
constructor(message, cause) {
super(message, 'NETWORK_ERROR', cause);
}
}
exports.NetworkError = NetworkError;
class FileSystemError extends BaseError {
constructor(message, cause) {
super(message, 'FILESYSTEM_ERROR', cause);
}
}
exports.FileSystemError = FileSystemError;
class AuthenticationError extends BaseError {
constructor(message, cause) {
super(message, 'AUTH_ERROR', cause);
}
}
exports.AuthenticationError = AuthenticationError;
// Exit Codes
var ExitCode;
(function (ExitCode) {
ExitCode[ExitCode["SUCCESS"] = 0] = "SUCCESS";
ExitCode[ExitCode["GENERAL_ERROR"] = 1] = "GENERAL_ERROR";
ExitCode[ExitCode["AUTHENTICATION_ERROR"] = 2] = "AUTHENTICATION_ERROR";
ExitCode[ExitCode["FILE_NOT_FOUND_ERROR"] = 3] = "FILE_NOT_FOUND_ERROR";
ExitCode[ExitCode["NETWORK_ERROR"] = 4] = "NETWORK_ERROR";
})(ExitCode || (exports.ExitCode = ExitCode = {}));
// Utility function to convert string to boolean
const stringToBoolean = (value) => {
if (!value)
return false;
return ['true', '1', 'yes', 'on'].includes(value.toLowerCase());
};
exports.stringToBoolean = stringToBoolean;
// Utility to mask sensitive data in logs
const maskToken = (token) => {
if (token.length <= 8)
return '***';
return `${token.slice(0, 4)}***${token.slice(-4)}`;
};
exports.maskToken = maskToken;
//# sourceMappingURL=index.js.map