UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

92 lines 4.31 kB
import { isNullOrEmptyString } from "./typecheckers"; function _getIllegalCharsRegex(platform) { switch (platform) { case "m365": return /["#%&*:<>?/\\{|}]/; case "sf": case "ns": case "local": case "all": default: return /[<>:"/\\|?*]/; } } function _validateNameExplicit(name, label, platform) { if (isNullOrEmptyString(name === null || name === void 0 ? void 0 : name.trim())) return { valid: false, error_code: "fname_empty", error: `${label} name cannot be empty` }; if (name !== name.trim()) return { valid: false, error_code: "fname_trim", error: `${label} name cannot start or end with spaces` }; if (name === "." || name === "..") return { valid: false, error_code: "fname_dots", error: `${label} name cannot be . or ..` }; if (/[. ]$/.test(name)) return { valid: false, error_code: "fname_ending", error: `${label} name cannot end with a period or space` }; if (/[\u0000-\u001f]/.test(name)) return { valid: false, error_code: "fname_invalid_control", error: `${label} name contains invalid control characters` }; if (_getIllegalCharsRegex(platform).test(name)) return { valid: false, error_code: "fname_invalid", error: `${label} name contains invalid characters` }; return { valid: true }; } function _validateReservedNames(name, label, platform) { const nameToCheck = label === "File" ? name.split(".").slice(0, -1).join(".") || name : name; if (platform === "local" || platform === "m365") { if (/^(CON|PRN|AUX|NUL|COM[0-9]|LPT[0-9])$/i.test(nameToCheck)) { return { valid: false, error_code: "fname_reserved", error: `${label} name uses a reserved name` }; } } if (platform === "m365") { if (/^\.lock$/i.test(nameToCheck) || /^desktop\.ini$/i.test(name)) { return { valid: false, error_code: "fname_reserved", error: `${label} name uses a reserved name` }; } if (/_vti_/i.test(name)) { return { valid: false, error_code: "fname_vti", error: `${label} name cannot contain _vti_` }; } } return { valid: true }; } function _validateFoldernameExplicitByPlatform(folderName, platform) { const baseValidation = _validateNameExplicit(folderName, "Folder", platform); if (!baseValidation.valid) return baseValidation; const reservedValidation = _validateReservedNames(folderName, "Folder", platform); if (!reservedValidation.valid) return reservedValidation; if (platform === "m365" && /^~/.test(folderName)) return { valid: false, error_code: "fldname_tilde", error: "Folder name cannot start with ~" }; return { valid: true }; } function _validateFilenameExplicitByPlatform(fileName, platform) { const baseValidation = _validateNameExplicit(fileName, "File", platform); if (!baseValidation.valid) return baseValidation; const reservedValidation = _validateReservedNames(fileName, "File", platform); if (!reservedValidation.valid) return reservedValidation; if (platform === "m365" && /^~\$/.test(fileName)) return { valid: false, error_code: "flname_tilde", error: "File name cannot start with ~$" }; return { valid: true }; } export function validateFoldernameExplicit(folderName, platform = "all") { if (platform === "all") { const platforms = ["local", "m365", "sf", "ns"]; for (const currentPlatform of platforms) { const result = _validateFoldernameExplicitByPlatform(folderName, currentPlatform); if (!result.valid) return result; } return { valid: true }; } return _validateFoldernameExplicitByPlatform(folderName, platform); } export function validateFilenameExplicit(fileName, platform = "all") { if (platform === "all") { const platforms = ["local", "m365", "sf", "ns"]; for (const currentPlatform of platforms) { const result = _validateFilenameExplicitByPlatform(fileName, currentPlatform); if (!result.valid) return result; } return { valid: true }; } return _validateFilenameExplicitByPlatform(fileName, platform); } //# sourceMappingURL=file.validation.js.map