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
JavaScript
"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