UNPKG

@technobuddha/library

Version:
45 lines (44 loc) 2.1 kB
"use strict"; 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;