tdpw
Version:
CLI tool for uploading Playwright test reports to TestDino platform with TestDino storage support
116 lines • 4.52 kB
JavaScript
;
/**
* Core types and interfaces for TestDino CLI
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringToBoolean = exports.ExitCode = exports.UsageLimitError = exports.AuthenticationError = exports.FileSystemError = exports.NetworkError = exports.ValidationError = exports.ConfigurationError = exports.BaseError = 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),
uploadFiles: zod_1.z.boolean().optional().default(false),
uploadFullJson: 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),
environment: zod_1.z.string().optional().default('unknown'),
});
// 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),
uploadFiles: zod_1.z.boolean().default(false),
uploadFullJson: zod_1.z.boolean().default(false),
verbose: zod_1.z.boolean().default(false),
// Target environment tag for upload metadata
environment: zod_1.z.string().default('unknown'),
// Performance and upload settings
batchSize: zod_1.z.number().min(1).max(20).default(5),
maxConcurrentUploads: zod_1.z.number().min(1).max(50).default(10),
uploadTimeout: zod_1.z.number().min(5000).max(300000).default(60000),
retryAttempts: zod_1.z.number().min(1).max(10).default(3),
});
// 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;
/**
* Error thrown when monthly test case limit is exceeded
*/
class UsageLimitError extends BaseError {
data;
constructor(message, data, cause) {
super(message, 'USAGE_LIMIT_EXCEEDED', cause);
this.data = data;
}
}
exports.UsageLimitError = UsageLimitError;
// 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[ExitCode["USAGE_LIMIT_ERROR"] = 5] = "USAGE_LIMIT_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;
//# sourceMappingURL=index.js.map