@technobuddha/library
Version:
A large library of useful functions
45 lines (44 loc) • 2.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toFilename = void 0;
var escapeRegExp_1 = __importDefault(require("lodash/escapeRegExp"));
var constants_1 = require("../constants");
var collapseWhitespace_1 = __importDefault(require("../collapseWhitespace"));
var clean_1 = __importDefault(require("../clean"));
var badChars = /[/\\:*?<>|.]+/ug;
/**
* Convert a string so that it can be used as a filename
*
* @param input The string to escape
* @param __namedParameters see {@link Options}
* @default maxLength 64
* @default replacement - (dash)
* @default disambiguate 10
* @default separator … (ellipsis)
* @returns the file name
*/
function toFilename(input, _a) {
var _b = _a === void 0 ? {} : _a, _c = _b.maxLength, maxLength = _c === void 0 ? 64 : _c, _d = _b.replacement, replacement = _d === void 0 ? '-' : _d, _e = _b.disambiguate, disambiguate = _e === void 0 ? 10 : _e, _f = _b.separator, separator = _f === void 0 ? '…' : _f;
var suffix = constants_1.empty;
var compress = new RegExp("\\s*" + escapeRegExp_1.default(replacement) + "[\\s" + escapeRegExp_1.default(replacement) + "]*", 'ug');
input = clean_1.default(collapseWhitespace_1.default(input.normalize('NFC').replace('"', "'").replace(badChars, replacement)).replace(compress, replacement), replacement);
if (suffix.length === 0 && input.length > maxLength) {
suffix = input.slice(-disambiguate);
input = input.slice(0, Math.max(0, input.length - suffix.length));
}
if (suffix.length > maxLength)
suffix = suffix.slice(0, Math.max(0, maxLength));
var length = maxLength - suffix.length;
if (input.length > length)
input = input.slice(0, Math.max(0, length));
if (input.length === 0)
input = replacement;
if (suffix.length > 0)
return input + separator + suffix;
return input;
}
exports.toFilename = toFilename;
exports.default = toFilename;