balena-cli
Version:
The official balena Command Line Interface
112 lines • 3.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateEmail = validateEmail;
exports.validatePassword = validatePassword;
exports.validateApplicationName = validateApplicationName;
exports.validateIPAddress = validateIPAddress;
exports.validateDotLocalUrl = validateDotLocalUrl;
exports.validateLocalHostnameOrIp = validateLocalHostnameOrIp;
exports.validateLongUuid = validateLongUuid;
exports.validateShortUuid = validateShortUuid;
exports.validateUuid = validateUuid;
exports.looksLikeInteger = looksLikeInteger;
exports.parseAsInteger = parseAsInteger;
exports.tryAsInteger = tryAsInteger;
exports.parseAsLocalHostnameOrIp = parseAsLocalHostnameOrIp;
exports.looksLikeFleetSlug = looksLikeFleetSlug;
exports.validateFilePath = validateFilePath;
const fs = require("fs/promises");
const errors_1 = require("../errors");
const isValidEmail = (email) => {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
};
const APPNAME_REGEX = new RegExp(/^[a-zA-Z0-9_-]+$/);
const IP_REGEX = new RegExp(/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/);
const DOTLOCAL_REGEX = new RegExp(/^([a-zA-Z0-9-]+\.)+local$/);
const UUID_REGEX = new RegExp(/^[0-9a-f]+$/);
function validateEmail(input) {
if (!isValidEmail(input)) {
return 'Email is not valid';
}
return true;
}
function validatePassword(input) {
if (input.length < 8) {
return 'Password should be 8 characters long';
}
return true;
}
function validateApplicationName(input) {
if (input.length < 4) {
return 'The fleet name should be at least 4 characters long';
}
return APPNAME_REGEX.test(input);
}
function validateIPAddress(input) {
return IP_REGEX.test(input);
}
function validateDotLocalUrl(input) {
return DOTLOCAL_REGEX.test(input);
}
function validateLocalHostnameOrIp(input) {
return validateIPAddress(input) || validateDotLocalUrl(input);
}
function validateLongUuid(input) {
if (input.length !== 32 && input.length !== 62) {
return false;
}
return UUID_REGEX.test(input);
}
function validateShortUuid(input) {
if (input.length !== 7) {
return false;
}
return UUID_REGEX.test(input);
}
function validateUuid(input) {
return validateLongUuid(input) || validateShortUuid(input);
}
function looksLikeInteger(input) {
return /^(?:0|[1-9][0-9]*)$/.test(input);
}
async function parseAsInteger(input, paramName) {
if (!looksLikeInteger(input)) {
const message = paramName == null
? 'The parameter must be an integer.'
: `The parameter '${paramName}' must be an integer.`;
throw new errors_1.ExpectedError(message);
}
return Number(input);
}
async function tryAsInteger(input) {
try {
return await parseAsInteger(input);
}
catch (_a) {
return input;
}
}
async function parseAsLocalHostnameOrIp(input) {
if (input && !validateLocalHostnameOrIp(input)) {
throw new errors_1.ExpectedError('The parameter must be a local hostname or IP address.');
}
return input;
}
function looksLikeFleetSlug(input) {
return input.includes('/');
}
async function validateFilePath(filePath) {
try {
const stats = await fs.stat(filePath);
if (!stats.isFile() && !stats.isSymbolicLink()) {
throw new errors_1.ExpectedError(`Path is not pointing to a file: ${filePath}`);
}
}
catch (err) {
if (err instanceof Error && 'code' in err && err.code === 'ENOENT') {
throw new errors_1.ExpectedError(`No such file: ${filePath}`);
}
throw err;
}
}
//# sourceMappingURL=validation.js.map