UNPKG

custom_string_patterns

Version:

Generate random and incrementing string patterns using regex and custom functions

91 lines (90 loc) 4.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ESCAPED_CLOSE_ANGLE_BRACKET = exports.ESCAPED_OPEN_ANGLE_BRACKET = exports.parseGeneratorOutput = exports.getArgs = exports.formatCounter = exports.processInputPattern = void 0; var randexp_1 = __importDefault(require("randexp")); // Turns input pattern into a randexp object with indexed substitions for // replacers and counters var processInputPattern = function (pattern, randexpOptions) { var _a; var patternRegex = typeof pattern === 'string' ? new RegExp(pattern) : pattern; var source = patternRegex.source, flags = patternRegex.flags; var substitionMap = {}; var randexpPattern = source // Replace escaped "<" and ">" with "magic strings" to so they won't // interfere with subsequent replacements .replace(/\\</g, exports.ESCAPED_OPEN_ANGLE_BRACKET) .replace(/\\>/g, exports.ESCAPED_CLOSE_ANGLE_BRACKET); var matches = Array.from(randexpPattern.matchAll(/<(.+?)>/g)).entries(); for (var _i = 0, _b = Array.from(matches); _i < _b.length; _i++) { var _c = _b[_i], index = _c[0], match = _c[1]; var fullMatchString = match[0]; var captureGroup = match[1]; var operator = captureGroup[0]; if (operator === '+') { substitionMap[index] = { type: 'counter', length: ((_a = captureGroup.match(/d/g)) === null || _a === void 0 ? void 0 : _a.length) || 0 }; } else if (operator === '?') { var _d = captureGroup.match(/([A-z0-9]+)(\(.*\))?/), _ = _d[0], funcName = _d[1], argsString = _d[2]; substitionMap[index] = { type: 'function', funcName: funcName, args: splitArgs(argsString) }; } else { // Remaining will be object properties to extract substitionMap[index] = { type: 'data', property: captureGroup }; } randexpPattern = randexpPattern.replace(fullMatchString, "<".concat(index, ">")); } // Create RandExp object and apply options var randexpObject = new randexp_1.default(randexpPattern, flags); var defaultRangeAdd = randexpOptions.defaultRangeAdd, defaultRangeSubtract = randexpOptions.defaultRangeSubtract, regexMax = randexpOptions.regexMax; if (defaultRangeAdd) randexpObject.defaultRange.add(defaultRangeAdd[0], defaultRangeAdd[1]); if (defaultRangeSubtract) randexpObject.defaultRange.add(defaultRangeSubtract[0], defaultRangeSubtract[1]); if (regexMax) randexpObject.max = regexMax; return { randexpObject: randexpObject, substitionMap: substitionMap, randexpPattern: randexpPattern }; }; exports.processInputPattern = processInputPattern; // Remove brackets and split into array of separate args var splitArgs = function (argsString) { if (!argsString) return []; return argsString .slice(1, -1) .split(',') .map(function (arg) { return Number(arg); }); }; var formatCounter = function (input) { var value = input.value, numberFormat = input.numberFormat, length = input.length; if (numberFormat) return numberFormat.format(Number(value)); var numString = String(value); return '0'.repeat(Math.max(0, length - numString.length)) + numString; }; exports.formatCounter = formatCounter; var getArgs = function (funcName, argIndexes, customArgs, captureGroups, data) { // Prioritise custom arguments over capture group args if (customArgs[funcName]) return [customArgs[funcName]]; var args = argIndexes.map(function (i) { return captureGroups[i - 1]; }); if (data) args.push(data); return args; }; exports.getArgs = getArgs; // Allows a generator to be used as a counter directly, rather than needing to // be wrapped in another function var parseGeneratorOutput = function (counterOutput) { if (typeof counterOutput === 'number' || typeof counterOutput === 'string') return counterOutput; if (counterOutput === null || counterOutput === void 0 ? void 0 : counterOutput.value) return counterOutput.value; throw new Error('Invalid counter function, or Generator has reached limit'); }; exports.parseGeneratorOutput = parseGeneratorOutput; // Magic strings exports.ESCAPED_OPEN_ANGLE_BRACKET = 'L1TERAl_b@CKSL@SH_0pen'; exports.ESCAPED_CLOSE_ANGLE_BRACKET = 'L1TERAl_b@CKSL@SH_cl0se';