Change integer state IDs to strings

This commit is contained in:
toasted-nutbread 2020-03-15 12:26:38 -04:00
parent a267799cd9
commit 4b699a6b46

View File

@ -89,32 +89,32 @@ class ObjectPropertyAccessor {
static getPathArray(pathString) { static getPathArray(pathString) {
const pathArray = []; const pathArray = [];
let state = 0; let state = 'empty';
let quote = 0; let quote = 0;
let value = ''; let value = '';
let escaped = false; let escaped = false;
for (const c of pathString) { for (const c of pathString) {
const v = c.codePointAt(0); const v = c.codePointAt(0);
switch (state) { switch (state) {
case 0: // Empty case 'empty': // Empty
case 1: // Expecting identifier start case 'id-start': // Expecting identifier start
if (v === 0x5b) { // '[' if (v === 0x5b) { // '['
if (state === 1) { if (state === 'id-start') {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
state = 3; state = 'open-bracket';
} else if ( } else if (
(v >= 0x41 && v <= 0x5a) || // ['A', 'Z'] (v >= 0x41 && v <= 0x5a) || // ['A', 'Z']
(v >= 0x61 && v <= 0x7a) || // ['a', 'z'] (v >= 0x61 && v <= 0x7a) || // ['a', 'z']
v === 0x5f // '_' v === 0x5f // '_'
) { ) {
state = 2; state = 'id';
value += c; value += c;
} else { } else {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
break; break;
case 2: // Identifier case 'id': // Identifier
if ( if (
(v >= 0x41 && v <= 0x5a) || // ['A', 'Z'] (v >= 0x41 && v <= 0x5a) || // ['A', 'Z']
(v >= 0x61 && v <= 0x7a) || // ['a', 'z'] (v >= 0x61 && v <= 0x7a) || // ['a', 'z']
@ -125,27 +125,27 @@ class ObjectPropertyAccessor {
} else if (v === 0x5b) { // '[' } else if (v === 0x5b) { // '['
pathArray.push(value); pathArray.push(value);
value = ''; value = '';
state = 3; state = 'open-bracket';
} else if (v === 0x2e) { // '.' } else if (v === 0x2e) { // '.'
pathArray.push(value); pathArray.push(value);
value = ''; value = '';
state = 1; state = 'id-start';
} else { } else {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
break; break;
case 3: // Open bracket case 'open-bracket': // Open bracket
if (v === 0x22 || v === 0x27) { // '"' or '\'' if (v === 0x22 || v === 0x27) { // '"' or '\''
quote = v; quote = v;
state = 4; state = 'string';
} else if (v >= 0x30 && v <= 0x39) { // ['0', '9'] } else if (v >= 0x30 && v <= 0x39) { // ['0', '9']
state = 5; state = 'number';
value += c; value += c;
} else { } else {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
break; break;
case 4: // Quoted string case 'string': // Quoted string
if (escaped) { if (escaped) {
value += c; value += c;
escaped = false; escaped = false;
@ -154,34 +154,34 @@ class ObjectPropertyAccessor {
} else if (v !== quote) { } else if (v !== quote) {
value += c; value += c;
} else { } else {
state = 6; state = 'close-bracket';
} }
break; break;
case 5: // Number case 'number': // Number
if (v >= 0x30 && v <= 0x39) { // ['0', '9'] if (v >= 0x30 && v <= 0x39) { // ['0', '9']
value += c; value += c;
} else if (v === 0x5d) { // ']' } else if (v === 0x5d) { // ']'
pathArray.push(Number.parseInt(value, 10)); pathArray.push(Number.parseInt(value, 10));
value = ''; value = '';
state = 7; state = 'next';
} else { } else {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
break; break;
case 6: // Expecting closing bracket after quoted string case 'close-bracket': // Expecting closing bracket after quoted string
if (v === 0x5d) { // ']' if (v === 0x5d) { // ']'
pathArray.push(value); pathArray.push(value);
value = ''; value = '';
state = 7; state = 'next';
} else { } else {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
break; break;
case 7: // Expecting . or [ case 'next': // Expecting . or [
if (v === 0x5b) { // '[' if (v === 0x5b) { // '['
state = 3; state = 'open-bracket';
} else if (v === 0x2e) { // '.' } else if (v === 0x2e) { // '.'
state = 1; state = 'id-start';
} else { } else {
throw new Error(`Unexpected character: ${c}`); throw new Error(`Unexpected character: ${c}`);
} }
@ -189,10 +189,10 @@ class ObjectPropertyAccessor {
} }
} }
switch (state) { switch (state) {
case 0: case 'empty':
case 7: case 'next':
break; break;
case 2: case 'id':
pathArray.push(value); pathArray.push(value);
value = ''; value = '';
break; break;