UNPKG

react-native-advanced-input-mask

Version:

Text input mask for React Native on iOS, Android and web. Synchronous and easy formatting without hustle

118 lines (116 loc) 4.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _constants = require("../model/constants"); var _EOLState = _interopRequireDefault(require("../model/state/EOLState")); var _FixedState = _interopRequireDefault(require("../model/state/FixedState")); var _FreeState = _interopRequireDefault(require("../model/state/FreeState")); var _OptionalValueState = _interopRequireDefault(require("../model/state/OptionalValueState")); var _ValueState = _interopRequireDefault(require("../model/state/ValueState")); var _FormatError = _interopRequireDefault(require("./FormatError")); var _FormatSanitizer = _interopRequireDefault(require("./FormatSanitizer")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class Compiler { constructor(customNotations) { this.customNotations = customNotations; } compile(formatString) { const sanitizedString = _FormatSanitizer.default.sanitize(formatString); return this.compileInternal(sanitizedString, false, false, null); } compileInternal(formatString, valuable, fixed, lastCharacter) { if (!formatString) { return new _EOLState.default(null); } const char = formatString.charAt(0); switch (char) { case "[": if (lastCharacter !== "\\") { return this.compileInternal(formatString.slice(1), true, false, char); } break; case "{": if (lastCharacter !== "\\") { return this.compileInternal(formatString.slice(1), false, true, char); } break; case "]": case "}": if (lastCharacter !== "\\") { return this.compileInternal(formatString.slice(1), false, false, char); } break; case "\\": if (lastCharacter !== "\\") { return this.compileInternal(formatString.slice(1), valuable, fixed, char); } break; } if (valuable) { switch (char) { case "0": return new _ValueState.default(this.compileInternal(formatString.substring(1), true, false, char), _constants.FIXED_STATE_TYPES.numeric); case "A": return new _ValueState.default(this.compileInternal(formatString.substring(1), true, false, char), _constants.FIXED_STATE_TYPES.literal); case "_": return new _ValueState.default(this.compileInternal(formatString.substring(1), true, false, char), _constants.FIXED_STATE_TYPES.alphaNumeric); case "…": // Ellipses remain elliptical: re-construct inherited type from lastCharacter return new _ValueState.default(null, this.determineInheritedType(lastCharacter)); case "9": return new _OptionalValueState.default(this.compileInternal(formatString.substring(1), true, false, char), _constants.OPTIONAL_STATE_TYPES.numeric); case "a": return new _OptionalValueState.default(this.compileInternal(formatString.substring(1), true, false, char), _constants.OPTIONAL_STATE_TYPES.literal); case "-": return new _OptionalValueState.default(this.compileInternal(formatString.substring(1), true, false, char), _constants.OPTIONAL_STATE_TYPES.alphaNumeric); default: return this.compileWithCustomNotations(char, formatString.substring(1)); } } if (fixed) { return new _FixedState.default(this.compileInternal(formatString.slice(1), false, true, char), char); } // Not in valuable or fixed => treat as FreeState return new _FreeState.default(this.compileInternal(formatString.slice(1), false, false, char), char); } determineInheritedType(lastCharacter) { switch (lastCharacter) { case "0": case "9": return _constants.FIXED_STATE_TYPES.numeric; case "A": case "a": return _constants.FIXED_STATE_TYPES.literal; case "_": case "-": case "…": case "[": return _constants.FIXED_STATE_TYPES.alphaNumeric; default: return this.determineTypeWithCustomNotations(lastCharacter); } } compileWithCustomNotations(char, remaining) { for (const customNotation of this.customNotations) { if (customNotation.character === char) { return customNotation.isOptional ? new _OptionalValueState.default(this.compileInternal(remaining, true, false, char), customNotation) : new _ValueState.default(this.compileInternal(remaining, true, false, char), customNotation); } } throw new _FormatError.default(); } determineTypeWithCustomNotations(lastCharacter) { if (lastCharacter === null || lastCharacter === undefined) { throw new _FormatError.default(); } for (const notation of this.customNotations) { if (notation.character === lastCharacter) { return notation; } } throw new _FormatError.default(); } } exports.default = Compiler; //# sourceMappingURL=Compiler.js.map