Change integer state IDs to strings
This commit is contained in:
parent
a267799cd9
commit
4b699a6b46
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user