@kwiz/common
Version:
KWIZ common utilities and helpers for M365 platform
68 lines • 3.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OfficeFileTypes = exports.VideoFileTypes = exports.DocumentFileTypes = exports.ImageFileTypes = void 0;
exports.validateFilename = validateFilename;
exports.validateFoldername = validateFoldername;
exports.validateAndSetFilename = validateAndSetFilename;
exports.getFileExtension = getFileExtension;
const strings_1 = require("./strings");
const typecheckers_1 = require("./typecheckers");
//https://support.microsoft.com/en-gb/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa
//These names aren't allowed for files or folders: .lock, CON, PRN, AUX, NUL, COM0 - COM9, LPT0 - LPT9, _vti_,
//desktop.ini, any filename starting with ~$. "_vti_" can't appear anywhere in a file name.
exports.ImageFileTypes = ["png", "jpg", "jpeg", "gif", "bmp", "svg", "webp"];
exports.DocumentFileTypes = ["docx", "doc", "pdf", "txt", "rtf", "odt"];
exports.VideoFileTypes = ["mp4", "mov", "wmv", "avi", "mkv", "flv", "webm"];
exports.OfficeFileTypes = ["docx", "doc", "xlsx", "xls", "pptx", "ppt", "csv"];
function _getRegexCollection() {
return {
IllegalCharsRegex: new RegExp("[" + (0, strings_1.escapeRegExp)(`"*:<>?/\\|`) + "]", "gi"),
IllegalCharsExtraRegex: new RegExp("[" + (0, strings_1.escapeRegExp)(`~"#%&*:<>?/\\|`) + "]", "gi"),
IllegalNamesRegex: /^(\.lock|CON|PRN|AUX|NUL|COM\d|LPT\d|.*_VTI_.*|~\$.*)$/gi,
IsDesktopIni: /^desktop\.ini$/gi
};
}
function validateFilename(fileNameWithExtension) {
let filenameWithOutExtension = fileNameWithExtension;
let split = filenameWithOutExtension.split(".");
split.pop();
filenameWithOutExtension = split.join(".");
let regexCollection = _getRegexCollection();
let hasIllegalCharacter = regexCollection.IllegalCharsRegex.test(filenameWithOutExtension);
let hasIllegalName = regexCollection.IllegalNamesRegex.test(filenameWithOutExtension) || regexCollection.IsDesktopIni.test(fileNameWithExtension);
return {
hasIllegalCharacter,
hasIllegalName,
valid: !hasIllegalCharacter && !hasIllegalName
};
}
function validateFoldername(folderName) {
let regexCollection = _getRegexCollection();
let hasIllegalCharacter = regexCollection.IllegalCharsRegex.test(folderName);
let hasIllegalName = regexCollection.IllegalNamesRegex.test(folderName) || regexCollection.IsDesktopIni.test(folderName);
return {
hasIllegalCharacter,
hasIllegalName,
valid: !hasIllegalCharacter && !hasIllegalName
};
}
function validateAndSetFilename(fileNameWithExtension) {
let regexCollection = _getRegexCollection();
let validateFilenameChk = validateFilename(fileNameWithExtension);
if (!validateFilenameChk.valid || regexCollection.IllegalCharsExtraRegex.test(fileNameWithExtension)) {
fileNameWithExtension =
fileNameWithExtension.replace(regexCollection.IllegalCharsRegex, "")
.replace(regexCollection.IllegalCharsExtraRegex, "")
.replace(regexCollection.IllegalNamesRegex, "")
.replace(regexCollection.IsDesktopIni, "");
}
return fileNameWithExtension;
}
function getFileExtension(fileName, options) {
const lastDot = fileName.lastIndexOf('.');
if (lastDot >= 0)
return fileName.slice(lastDot + 1).toLowerCase();
//no dot ? return empty, or fileName?
return !(0, typecheckers_1.isNullOrUndefined)(options) && options.emptyIfMissing === true ? "" : fileName;
}
//# sourceMappingURL=file.js.map