@tko/utils.parser
Advanced tools
@@ -1,5 +0,7 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import Node from "./Node"; | ||
| import Node from "./Node.js"; | ||
| export default class Arguments { | ||
| parser; | ||
| args; | ||
| constructor(parser, args) { | ||
@@ -6,0 +8,0 @@ this.parser = parser; |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["import Node from './Node'\n\nexport default class Arguments {\n private parser: any\n private args: any\n\n constructor(parser, args) {\n this.parser = parser\n this.args = args\n }\n\n get_value(parent, context, globals, node) {\n const deReffedArgs = new Array()\n for (let i = 0, j = this.args.length; i < j; ++i) {\n deReffedArgs.push(Node.value_of(this.args[i], context, globals, node))\n }\n return deReffedArgs\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n"], | ||
| "mappings": ";;AAAA,OAAO,UAAU;AAEjB,qBAAqB,UAAU;AAAA,EAI7B,YAAY,QAAQ,MAAM;AACxB,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,UAAU,QAAQ,SAAS,SAAS,MAAM;AACxC,UAAM,eAAe,IAAI,MAAM;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,IAAI,GAAG,EAAE,GAAG;AAChD,mBAAa,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC,GAAG,SAAS,SAAS,IAAI,CAAC;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,KAAK,8BAA8B,IAAI;AAC1C,WAAO;AAAA,EACT;AACF;", | ||
| "mappings": ";;AAAA,OAAO,UAAU;AAEjB,qBAAqB,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EAER,YAAY,QAAQ,MAAM;AACxB,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,UAAU,QAAQ,SAAS,SAAS,MAAM;AACxC,UAAM,eAAe,IAAI,MAAM;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,IAAI,GAAG,EAAE,GAAG;AAChD,mBAAa,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC,GAAG,SAAS,SAAS,IAAI,CAAC;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,KAAK,8BAA8B,IAAI;AAC1C,WAAO;AAAA,EACT;AACF;", | ||
| "names": [] | ||
| } |
@@ -1,5 +0,7 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import Node from "./Node"; | ||
| import Node from "./Node.js"; | ||
| export default class Expression { | ||
| nodes; | ||
| root; | ||
| constructor(nodes) { | ||
@@ -6,0 +8,0 @@ this.nodes = nodes; |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["import Node from './Node'\n\nexport default class Expression {\n private nodes: any\n root: any\n\n constructor(nodes) {\n this.nodes = nodes\n this.root = Node.create_root(nodes)\n }\n\n /**\n * Return the value of `this` Expression instance.\n */\n get_value(parent, context, globals, node) {\n if (!this.root) {\n this.root = Node.create_root(this.nodes)\n }\n return this.root.get_value(parent, context, globals, node)\n }\n}\n\nExpression.prototype[Node.isExpressionOrIdentifierSymbol] = true\n"], | ||
| "mappings": ";;AAAA,OAAO,UAAU;AAEjB,qBAAqB,WAAW;AAAA,EAI9B,YAAY,OAAO;AACjB,SAAK,QAAQ;AACb,SAAK,OAAO,KAAK,YAAY,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,QAAQ,SAAS,SAAS,MAAM;AACxC,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAO,KAAK,YAAY,KAAK,KAAK;AAAA,IACzC;AACA,WAAO,KAAK,KAAK,UAAU,QAAQ,SAAS,SAAS,IAAI;AAAA,EAC3D;AACF;AAEA,WAAW,UAAU,KAAK,8BAA8B,IAAI;", | ||
| "mappings": ";;AAAA,OAAO,UAAU;AAEjB,qBAAqB,WAAW;AAAA,EACtB;AAAA,EACR;AAAA,EAEA,YAAY,OAAO;AACjB,SAAK,QAAQ;AACb,SAAK,OAAO,KAAK,YAAY,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,QAAQ,SAAS,SAAS,MAAM;AACxC,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAO,KAAK,YAAY,KAAK,KAAK;AAAA,IACzC;AACA,WAAO,KAAK,KAAK,UAAU,QAAQ,SAAS,SAAS,IAAI;AAAA,EAC3D;AACF;AAEA,WAAW,UAAU,KAAK,8BAA8B,IAAI;", | ||
| "names": [] | ||
| } |
@@ -1,9 +0,12 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import Node from "./Node"; | ||
| import Arguments from "./Arguments"; | ||
| import Node from "./Node.js"; | ||
| import Arguments from "./Arguments.js"; | ||
| import { hasOwnProperty, isObjectLike } from "@tko/utils"; | ||
| import { isWriteableObservable, isObservable } from "@tko/observable"; | ||
| import { IDStart, IDContinue } from "./identifierExpressions"; | ||
| import { IDStart, IDContinue } from "./identifierExpressions.js"; | ||
| export default class Identifier { | ||
| token; | ||
| dereferences; | ||
| parser; | ||
| constructor(parser, token, dereferences) { | ||
@@ -10,0 +13,0 @@ this.token = token; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/Identifier.ts"], | ||
| "sourcesContent": ["import Node from './Node'\nimport Arguments from './Arguments'\nimport Parser from './Parser'\nimport { hasOwnProperty, isObjectLike } from '@tko/utils'\n\nimport { isWriteableObservable, isObservable } from '@tko/observable'\n\nimport { IDStart, IDContinue } from './identifierExpressions'\n\nexport default class Identifier {\n token: string\n dereferences: any\n parser: Parser\n\n constructor(parser: Parser, token: string, dereferences: any[]) {\n this.token = token\n this.dereferences = dereferences\n this.parser = parser\n }\n\n /**\n * Apply all () and [] functions on the identifier to the lhs value e.g.\n * a()[3] has deref functions that are essentially this:\n * [_deref_call, _deref_this where this=3]\n *\n * @param {mixed} value Should be an object.\n * @return {mixed} The dereferenced value.\n *\n * [1] We want to bind any function that is a method of an object, but not\n * corrupt any values (e.g. computed()s). e.g. Running x.bind(obj) where\n * we're given `data-bind='binding: obj.x'` and x is a computed will\n * break the computed's `this` and it will stop working as expected.\n *\n * The test `!last_value.hasOwnProperty(member)`\n * distinguishes between functions on the prototype chain (prototypal\n * members) and value-members added directly to the object. This may\n * not be the canonical test for this relationship, but it succeeds\n * in the known test cases.\n *\n * See: `this` tests of our dereference function.\n */\n dereference(value, $context, globals, node) {\n let member\n const refs = this.dereferences || []\n const $data = $context.$data || {}\n let lastValue // becomes `this` in function calls to object properties.\n let i, n\n\n for (i = 0, n = refs.length; i < n; ++i) {\n member = Node.value_of(refs[i], $context, globals, node)\n\n if (typeof value === 'function' && refs[i] instanceof Arguments) {\n // fn(args)\n value = value.apply(lastValue || $data, member)\n lastValue = value\n } else if (value === null || value === undefined) {\n // This acts like optional chaining ?.\n return value\n } else {\n // obj[x] or obj.x dereference. Note that obj may be a function.\n lastValue = value\n value = Node.value_of(value[member], $context, globals, node)\n }\n }\n\n // [1] See note above.\n if (typeof value === 'function' && n > 0 && lastValue !== value && !hasOwnProperty(lastValue, member)) {\n return value.bind(lastValue)\n }\n\n return value\n }\n\n /**\n * Return the value as one would get it from the top-level i.e.\n * $data.token/$context.token/globals.token; this does not return intermediate\n * values on a chain of members i.e. $data.hello.there -- requesting the\n * Identifier('there').value will return $data/$context/globals.there.\n *\n * This will dereference using () or [arg] member.\n * @param {object | Identifier | Expression} parent\n * @return {mixed} Return the primitive or an accessor.\n */\n get_value(parent, context, globals, node) {\n const intermediate =\n parent && !(parent instanceof Identifier)\n ? Node.value_of(parent, context, globals, node)[this.token]\n : context.lookup(this.token, globals, node)\n return this.dereference(intermediate, context, globals, node)\n }\n\n assign(object, property, value) {\n if (isWriteableObservable(object[property])) {\n object[property](value)\n } else if (!isObservable(object[property])) {\n object[property] = value\n }\n }\n\n /**\n * Set the value of the Identifier.\n *\n * @param {Mixed} new_value The value that Identifier is to be set to.\n */\n set_value(new_value, $context, globals) {\n const $data = $context.$data || {}\n const refs = this.dereferences || []\n let leaf: any = this.token\n let i, n, root\n\n if (isObjectLike($data) && leaf in $data) {\n root = $data\n } else if (leaf in $context) {\n root = $context\n } else if (leaf in globals) {\n root = globals\n } else {\n throw new Error(\n 'Identifier::set_value -- '\n + \"The property '\"\n + leaf\n + \"' does not exist \"\n + 'on the $data, $context, or globals.'\n )\n }\n\n // Degenerate case. {$data|$context|global}[leaf] = something;\n n = refs.length\n if (n === 0) {\n this.assign(root, leaf, new_value)\n return\n }\n\n // First dereference is {$data|$context|global}[token].\n root = root[leaf]\n\n // We cannot use this.dereference because that gives the leaf; to evoke\n // the ES5 setter we have to call `obj[leaf] = new_value`\n for (i = 0; i < n - 1; ++i) {\n leaf = refs[i]\n if (leaf instanceof Arguments) {\n root = root()\n } else {\n root = root[Node.value_of(leaf)]\n }\n }\n\n // We indicate that a dereference is a function when it is `true`.\n if (refs[i] === true) {\n throw new Error('Cannot assign a value to a function.')\n }\n\n // Call the setter for the leaf.\n if (refs[i]) {\n this.assign(root, Node.value_of(refs[i]), new_value)\n }\n }\n\n /**\n * Determine if a character is a valid item in an identifier.\n * Note that we do not check whether the first item is a number, nor do we\n * support unicode identifiers here.\n *\n * From: http://stackoverflow.com/a/9337047\n * @param {String} ch The character\n * @return {Boolean} True if this is a valid identifier\n */\n // function is_identifier_char(ch) {\n // return (ch >= 'A' && ch <= 'Z') ||\n // (ch >= 'a' && ch <= 'z') ||\n // (ch >= '0' && ch <= 9) ||\n // ch === '_' || ch === '$';\n // }\n static is_valid_start_char(ch) {\n return IDStart.test(ch)\n }\n\n static is_valid_continue_char(ch) {\n return IDContinue.test(ch)\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n"], | ||
| "mappings": "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", | ||
| "sourcesContent": ["import Node from './Node'\nimport Arguments from './Arguments'\nimport type Parser from './Parser'\nimport { hasOwnProperty, isObjectLike } from '@tko/utils'\n\nimport { isWriteableObservable, isObservable } from '@tko/observable'\n\nimport { IDStart, IDContinue } from './identifierExpressions'\n\nexport default class Identifier {\n token: string\n dereferences: any\n parser: Parser\n\n constructor(parser: Parser, token: string, dereferences: any[]) {\n this.token = token\n this.dereferences = dereferences\n this.parser = parser\n }\n\n /**\n * Apply all () and [] functions on the identifier to the lhs value e.g.\n * a()[3] has deref functions that are essentially this:\n * [_deref_call, _deref_this where this=3]\n *\n * @param {mixed} value Should be an object.\n * @return {mixed} The dereferenced value.\n *\n * [1] We want to bind any function that is a method of an object, but not\n * corrupt any values (e.g. computed()s). e.g. Running x.bind(obj) where\n * we're given `data-bind='binding: obj.x'` and x is a computed will\n * break the computed's `this` and it will stop working as expected.\n *\n * The test `!last_value.hasOwnProperty(member)`\n * distinguishes between functions on the prototype chain (prototypal\n * members) and value-members added directly to the object. This may\n * not be the canonical test for this relationship, but it succeeds\n * in the known test cases.\n *\n * See: `this` tests of our dereference function.\n */\n dereference(value, $context, globals, node) {\n let member\n const refs = this.dereferences || []\n const $data = $context.$data || {}\n let lastValue // becomes `this` in function calls to object properties.\n let i, n\n\n for (i = 0, n = refs.length; i < n; ++i) {\n member = Node.value_of(refs[i], $context, globals, node)\n\n if (typeof value === 'function' && refs[i] instanceof Arguments) {\n // fn(args)\n value = value.apply(lastValue || $data, member)\n lastValue = value\n } else if (value === null || value === undefined) {\n // This acts like optional chaining ?.\n return value\n } else {\n // obj[x] or obj.x dereference. Note that obj may be a function.\n lastValue = value\n value = Node.value_of(value[member], $context, globals, node)\n }\n }\n\n // [1] See note above.\n if (typeof value === 'function' && n > 0 && lastValue !== value && !hasOwnProperty(lastValue, member)) {\n return value.bind(lastValue)\n }\n\n return value\n }\n\n /**\n * Return the value as one would get it from the top-level i.e.\n * $data.token/$context.token/globals.token; this does not return intermediate\n * values on a chain of members i.e. $data.hello.there -- requesting the\n * Identifier('there').value will return $data/$context/globals.there.\n *\n * This will dereference using () or [arg] member.\n * @param {object | Identifier | Expression} parent\n * @return {mixed} Return the primitive or an accessor.\n */\n get_value(parent, context, globals, node) {\n const intermediate =\n parent && !(parent instanceof Identifier)\n ? Node.value_of(parent, context, globals, node)[this.token]\n : context.lookup(this.token, globals, node)\n return this.dereference(intermediate, context, globals, node)\n }\n\n assign(object, property, value) {\n if (isWriteableObservable(object[property])) {\n object[property](value)\n } else if (!isObservable(object[property])) {\n object[property] = value\n }\n }\n\n /**\n * Set the value of the Identifier.\n *\n * @param {Mixed} new_value The value that Identifier is to be set to.\n */\n set_value(new_value, $context, globals) {\n const $data = $context.$data || {}\n const refs = this.dereferences || []\n let leaf: any = this.token\n let i, n, root\n\n if (isObjectLike($data) && leaf in $data) {\n root = $data\n } else if (leaf in $context) {\n root = $context\n } else if (leaf in globals) {\n root = globals\n } else {\n throw new Error(\n 'Identifier::set_value -- ' +\n \"The property '\" +\n leaf +\n \"' does not exist \" +\n 'on the $data, $context, or globals.'\n )\n }\n\n // Degenerate case. {$data|$context|global}[leaf] = something;\n n = refs.length\n if (n === 0) {\n this.assign(root, leaf, new_value)\n return\n }\n\n // First dereference is {$data|$context|global}[token].\n root = root[leaf]\n\n // We cannot use this.dereference because that gives the leaf; to evoke\n // the ES5 setter we have to call `obj[leaf] = new_value`\n for (i = 0; i < n - 1; ++i) {\n leaf = refs[i]\n if (leaf instanceof Arguments) {\n root = root()\n } else {\n root = root[Node.value_of(leaf)]\n }\n }\n\n // We indicate that a dereference is a function when it is `true`.\n if (refs[i] === true) {\n throw new Error('Cannot assign a value to a function.')\n }\n\n // Call the setter for the leaf.\n if (refs[i]) {\n this.assign(root, Node.value_of(refs[i]), new_value)\n }\n }\n\n /**\n * Determine if a character is a valid item in an identifier.\n * Note that we do not check whether the first item is a number, nor do we\n * support unicode identifiers here.\n *\n * From: http://stackoverflow.com/a/9337047\n * @param {String} ch The character\n * @return {Boolean} True if this is a valid identifier\n */\n // function is_identifier_char(ch) {\n // return (ch >= 'A' && ch <= 'Z') ||\n // (ch >= 'a' && ch <= 'z') ||\n // (ch >= '0' && ch <= 9) ||\n // ch === '_' || ch === '$';\n // }\n static is_valid_start_char(ch) {\n return IDStart.test(ch)\n }\n\n static is_valid_continue_char(ch) {\n return IDContinue.test(ch)\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n"], | ||
| "mappings": ";;AAAA,OAAO,UAAU;AACjB,OAAO,eAAe;AAEtB,SAAS,gBAAgB,oBAAoB;AAE7C,SAAS,uBAAuB,oBAAoB;AAEpD,SAAS,SAAS,kBAAkB;AAEpC,qBAAqB,WAAW;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,QAAgB,OAAe,cAAqB;AAC9D,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,YAAY,OAAO,UAAU,SAAS,MAAM;AAC1C,QAAI;AACJ,UAAM,OAAO,KAAK,gBAAgB,CAAC;AACnC,UAAM,QAAQ,SAAS,SAAS,CAAC;AACjC,QAAI;AACJ,QAAI,GAAG;AAEP,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAG,EAAE,GAAG;AACvC,eAAS,KAAK,SAAS,KAAK,CAAC,GAAG,UAAU,SAAS,IAAI;AAEvD,UAAI,OAAO,UAAU,cAAc,KAAK,CAAC,aAAa,WAAW;AAE/D,gBAAQ,MAAM,MAAM,aAAa,OAAO,MAAM;AAC9C,oBAAY;AAAA,MACd,WAAW,UAAU,QAAQ,UAAU,QAAW;AAEhD,eAAO;AAAA,MACT,OAAO;AAEL,oBAAY;AACZ,gBAAQ,KAAK,SAAS,MAAM,MAAM,GAAG,UAAU,SAAS,IAAI;AAAA,MAC9D;AAAA,IACF;AAGA,QAAI,OAAO,UAAU,cAAc,IAAI,KAAK,cAAc,SAAS,CAAC,eAAe,WAAW,MAAM,GAAG;AACrG,aAAO,MAAM,KAAK,SAAS;AAAA,IAC7B;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UAAU,QAAQ,SAAS,SAAS,MAAM;AACxC,UAAM,eACJ,UAAU,EAAE,kBAAkB,cAC1B,KAAK,SAAS,QAAQ,SAAS,SAAS,IAAI,EAAE,KAAK,KAAK,IACxD,QAAQ,OAAO,KAAK,OAAO,SAAS,IAAI;AAC9C,WAAO,KAAK,YAAY,cAAc,SAAS,SAAS,IAAI;AAAA,EAC9D;AAAA,EAEA,OAAO,QAAQ,UAAU,OAAO;AAC9B,QAAI,sBAAsB,OAAO,QAAQ,CAAC,GAAG;AAC3C,aAAO,QAAQ,EAAE,KAAK;AAAA,IACxB,WAAW,CAAC,aAAa,OAAO,QAAQ,CAAC,GAAG;AAC1C,aAAO,QAAQ,IAAI;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,WAAW,UAAU,SAAS;AACtC,UAAM,QAAQ,SAAS,SAAS,CAAC;AACjC,UAAM,OAAO,KAAK,gBAAgB,CAAC;AACnC,QAAI,OAAY,KAAK;AACrB,QAAI,GAAG,GAAG;AAEV,QAAI,aAAa,KAAK,KAAK,QAAQ,OAAO;AACxC,aAAO;AAAA,IACT,WAAW,QAAQ,UAAU;AAC3B,aAAO;AAAA,IACT,WAAW,QAAQ,SAAS;AAC1B,aAAO;AAAA,IACT,OAAO;AACL,YAAM,IAAI;AAAA,QACR,4CAEE,OACA;AAAA,MAEJ;AAAA,IACF;AAGA,QAAI,KAAK;AACT,QAAI,MAAM,GAAG;AACX,WAAK,OAAO,MAAM,MAAM,SAAS;AACjC;AAAA,IACF;AAGA,WAAO,KAAK,IAAI;AAIhB,SAAK,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG;AAC1B,aAAO,KAAK,CAAC;AACb,UAAI,gBAAgB,WAAW;AAC7B,eAAO,KAAK;AAAA,MACd,OAAO;AACL,eAAO,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MACjC;AAAA,IACF;AAGA,QAAI,KAAK,CAAC,MAAM,MAAM;AACpB,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAGA,QAAI,KAAK,CAAC,GAAG;AACX,WAAK,OAAO,MAAM,KAAK,SAAS,KAAK,CAAC,CAAC,GAAG,SAAS;AAAA,IACrD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,oBAAoB,IAAI;AAC7B,WAAO,QAAQ,KAAK,EAAE;AAAA,EACxB;AAAA,EAEA,OAAO,uBAAuB,IAAI;AAChC,WAAO,WAAW,KAAK,EAAE;AAAA,EAC3B;AAAA,EAEA,KAAK,KAAK,8BAA8B,IAAI;AAC1C,WAAO;AAAA,EACT;AACF;", | ||
| "names": [] | ||
| } |
@@ -1,4 +0,4 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| export const IDStart = /[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/; | ||
| export const IDContinue = /[\$0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/; |
+8
-14
@@ -1,15 +0,9 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import operators from "./operators"; | ||
| export { default as Parser } from "./Parser"; | ||
| export { default as Identifier } from "./Identifier"; | ||
| export { default as Arguments } from "./Arguments"; | ||
| export { default as Ternary } from "./Ternary"; | ||
| export { default as Node } from "./Node"; | ||
| export { default as parseObjectLiteral } from "./preparse"; | ||
| export function overloadOperator(op, fn, precedence) { | ||
| operators[op] = fn; | ||
| if (Number.isInteger(precedence)) { | ||
| operators[op].precedence = precedence; | ||
| } | ||
| } | ||
| export { default as Parser } from "./Parser.js"; | ||
| export { default as Identifier } from "./Identifier.js"; | ||
| export { default as Arguments } from "./Arguments.js"; | ||
| export { default as Ternary } from "./Ternary.js"; | ||
| export { default as Node } from "./Node.js"; | ||
| export { default as parseObjectLiteral } from "./preparse.js"; | ||
| import "./operators"; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["import operators from './operators'\n\nexport { default as Parser } from './Parser'\nexport { default as Identifier } from './Identifier'\nexport { default as Arguments } from './Arguments'\nexport { default as Ternary } from './Ternary'\nexport { default as Node } from './Node'\n\nexport { default as parseObjectLiteral } from './preparse'\n\nexport function overloadOperator(op: string, fn: (a, b) => any, precedence?: number) {\n operators[op] = fn\n if (Number.isInteger(precedence)) {\n operators[op].precedence = precedence\n }\n}\n"], | ||
| "mappings": ";;AAAA,OAAO,eAAe;AAEtB,SAAS,WAAW,cAAc;AAClC,SAAS,WAAW,kBAAkB;AACtC,SAAS,WAAW,iBAAiB;AACrC,SAAS,WAAW,eAAe;AACnC,SAAS,WAAW,YAAY;AAEhC,SAAS,WAAW,0BAA0B;AAEvC,gBAAS,iBAAiB,IAAY,IAAmB,YAAqB;AACnF,YAAU,EAAE,IAAI;AAChB,MAAI,OAAO,UAAU,UAAU,GAAG;AAChC,cAAU,EAAE,EAAE,aAAa;AAAA,EAC7B;AACF;", | ||
| "sourcesContent": ["export { default as Parser } from './Parser'\nexport { default as Identifier } from './Identifier'\nexport { default as Arguments } from './Arguments'\nexport { default as Ternary } from './Ternary'\nexport { default as Node } from './Node'\n\nexport { default as parseObjectLiteral } from './preparse'\n\n// Importing operators registers the strictEquality option on ko.options\nimport './operators'\n"], | ||
| "mappings": ";;AAAA,SAAS,WAAW,cAAc;AAClC,SAAS,WAAW,kBAAkB;AACtC,SAAS,WAAW,iBAAiB;AACrC,SAAS,WAAW,eAAe;AACnC,SAAS,WAAW,YAAY;AAEhC,SAAS,WAAW,0BAA0B;AAG9C,OAAO;", | ||
| "names": [] | ||
| } |
+8
-14
@@ -1,15 +0,9 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 MJS | ||
| // @tko/utils.parser 🥊 4.0.1 MJS | ||
| "use strict"; | ||
| import operators from "./operators"; | ||
| export { default as Parser } from "./Parser"; | ||
| export { default as Identifier } from "./Identifier"; | ||
| export { default as Arguments } from "./Arguments"; | ||
| export { default as Ternary } from "./Ternary"; | ||
| export { default as Node } from "./Node"; | ||
| export { default as parseObjectLiteral } from "./preparse"; | ||
| export function overloadOperator(op, fn, precedence) { | ||
| operators[op] = fn; | ||
| if (Number.isInteger(precedence)) { | ||
| operators[op].precedence = precedence; | ||
| } | ||
| } | ||
| export { default as Parser } from "./Parser.js"; | ||
| export { default as Identifier } from "./Identifier.js"; | ||
| export { default as Arguments } from "./Arguments.js"; | ||
| export { default as Ternary } from "./Ternary.js"; | ||
| export { default as Node } from "./Node.js"; | ||
| export { default as parseObjectLiteral } from "./preparse.js"; | ||
| import "./operators"; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["import operators from './operators'\n\nexport { default as Parser } from './Parser'\nexport { default as Identifier } from './Identifier'\nexport { default as Arguments } from './Arguments'\nexport { default as Ternary } from './Ternary'\nexport { default as Node } from './Node'\n\nexport { default as parseObjectLiteral } from './preparse'\n\nexport function overloadOperator(op: string, fn: (a, b) => any, precedence?: number) {\n operators[op] = fn\n if (Number.isInteger(precedence)) {\n operators[op].precedence = precedence\n }\n}\n"], | ||
| "mappings": ";;AAAA,OAAO,eAAe;AAEtB,SAAS,WAAW,cAAc;AAClC,SAAS,WAAW,kBAAkB;AACtC,SAAS,WAAW,iBAAiB;AACrC,SAAS,WAAW,eAAe;AACnC,SAAS,WAAW,YAAY;AAEhC,SAAS,WAAW,0BAA0B;AAEvC,gBAAS,iBAAiB,IAAY,IAAmB,YAAqB;AACnF,YAAU,EAAE,IAAI;AAChB,MAAI,OAAO,UAAU,UAAU,GAAG;AAChC,cAAU,EAAE,EAAE,aAAa;AAAA,EAC7B;AACF;", | ||
| "sourcesContent": ["export { default as Parser } from './Parser'\nexport { default as Identifier } from './Identifier'\nexport { default as Arguments } from './Arguments'\nexport { default as Ternary } from './Ternary'\nexport { default as Node } from './Node'\n\nexport { default as parseObjectLiteral } from './preparse'\n\n// Importing operators registers the strictEquality option on ko.options\nimport './operators'\n"], | ||
| "mappings": ";;AAAA,SAAS,WAAW,cAAc;AAClC,SAAS,WAAW,kBAAkB;AACtC,SAAS,WAAW,iBAAiB;AACrC,SAAS,WAAW,eAAe;AACnC,SAAS,WAAW,YAAY;AAEhC,SAAS,WAAW,0BAA0B;AAG9C,OAAO;", | ||
| "names": [] | ||
| } |
+13
-11
@@ -1,7 +0,10 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import { unwrap } from "@tko/observable"; | ||
| import { default as operators, LAMBDA } from "./operators"; | ||
| import { default as operators, LAMBDA } from "./operators.js"; | ||
| const IS_EXPR_OR_IDENT = /* @__PURE__ */ Symbol("Node - Is Expression Or Identifier"); | ||
| export default class Node { | ||
| lhs; | ||
| op; | ||
| rhs; | ||
| constructor(lhs, op, rhs) { | ||
@@ -37,19 +40,18 @@ this.lhs = lhs; | ||
| get_value(notused, context, globals, node) { | ||
| var node = this; | ||
| if (node.op === LAMBDA) { | ||
| if (this.op === LAMBDA) { | ||
| return (...args) => { | ||
| let lambdaContext = context; | ||
| if (node.lhs) { | ||
| lambdaContext = node.lhs.extendContext(context, args); | ||
| if (this.lhs) { | ||
| lambdaContext = this.lhs.extendContext(context, args); | ||
| } | ||
| return node.get_leaf_value(node.rhs, lambdaContext, globals, node); | ||
| return this.get_leaf_value(this.rhs, lambdaContext, globals, this); | ||
| }; | ||
| } | ||
| const lhv = node.get_leaf_value(node.lhs, context, globals, node); | ||
| const earlyOut = node.op.earlyOut; | ||
| const lhv = this.get_leaf_value(this.lhs, context, globals, this); | ||
| const earlyOut = this.op.earlyOut; | ||
| if (earlyOut && earlyOut(lhv)) { | ||
| return lhv; | ||
| } | ||
| const rhv = node.get_leaf_value(node.rhs, context, globals, node); | ||
| return node.op(lhv, rhv, context, globals); | ||
| const rhv = this.get_leaf_value(this.rhs, context, globals, this); | ||
| return this.op(lhv, rhv, context, globals); | ||
| } | ||
@@ -56,0 +58,0 @@ // |
+2
-2
| { | ||
| "version": 3, | ||
| "sources": ["../src/Node.ts"], | ||
| "sourcesContent": ["import { unwrap } from '@tko/observable'\n\nimport { default as operators, LAMBDA } from './operators'\n\nconst IS_EXPR_OR_IDENT = Symbol('Node - Is Expression Or Identifier')\n\nexport default class Node {\n lhs: any\n op: any\n rhs: any\n\n constructor(lhs, op, rhs) {\n this.lhs = lhs\n this.op = op\n this.rhs = rhs\n }\n\n static get operators() {\n return operators\n }\n\n get_leaf_value(leaf, context, globals, node) {\n if (typeof leaf === 'function') {\n // Expressions on observables are nonsensical, so we unwrap any\n // function values (e.g. identifiers).\n return unwrap(leaf())\n }\n\n // primitives\n if (typeof leaf !== 'object' || leaf === null) {\n return leaf\n }\n\n // Identifiers and Expressions\n if (leaf[Node.isExpressionOrIdentifierSymbol]) {\n // lhs is passed in as the parent of the leaf. It will be defined in\n // cases like a.b.c as 'a' for 'b' then as 'b' for 'c'.\n return unwrap(leaf.get_value(undefined, context, globals, node))\n }\n\n // Plain object/class.\n return leaf\n }\n\n /**\n * Return a function that calculates and returns an expression's value\n * when called.\n * @param {array} ops The operations to perform\n * @return {function} The function that calculates the expression.\n *\n * Note that for a lambda, we do not evaluate the RHS expression until\n * the lambda is called.\n */\n get_value(notused, context, globals, node: Node) {\n var node: Node = this //eslint-disable-line no-var\n\n if (node.op === LAMBDA) {\n return (...args) => {\n let lambdaContext = context\n if (node.lhs) {\n lambdaContext = node.lhs.extendContext(context, args)\n }\n return node.get_leaf_value(node.rhs, lambdaContext, globals, node)\n }\n }\n\n const lhv = node.get_leaf_value(node.lhs, context, globals, node)\n const earlyOut = node.op.earlyOut\n\n if (earlyOut && earlyOut(lhv)) {\n return lhv\n }\n const rhv = node.get_leaf_value(node.rhs, context, globals, node)\n\n return node.op(lhv, rhv, context, globals)\n }\n\n //\n // Class variables.\n //\n static get isExpressionOrIdentifierSymbol() {\n return IS_EXPR_OR_IDENT\n }\n get [IS_EXPR_OR_IDENT]() {\n return true\n }\n\n static value_of(item, context?, globals?, node?: Node) {\n if (item && item[Node.isExpressionOrIdentifierSymbol]) {\n return item.get_value(item, context, globals, node)\n }\n return item\n }\n\n /**\n * Convert an array of nodes to an executable tree.\n * @return {object} An object with a `lhs`, `rhs` and `op` key, corresponding\n * to the left hand side, right hand side, and\n * operation function.\n */\n static create_root(nodes, debug = false) {\n // shunting yard algorithm with output to an abstact syntax tree of Nodes\n const out = new Array()\n const ops = new Array()\n for (let i = 0; i < nodes.length; i += 2) {\n out.push(nodes[i]) // next value\n const op = nodes[i + 1]\n\n // only left-associative operators are currently defined and handled here\n const prec = op?.precedence || 0 // no op for last value\n while (ops.length && prec <= ops[ops.length - 1].precedence) {\n const rhs = out.pop()\n const lhs = out.pop()\n out.push(new Node(lhs, ops.pop(), rhs))\n }\n ops.push(op)\n }\n if (out.length !== 1) {\n throw new Error(`unexpected nodes remain in shunting yard output stack: ${out}`)\n }\n return out[0]\n }\n}\n\n/**\n * Because of cyclical dependencies on operators <-> Node <-> value_of,\n * we need to patch this in here.\n */\noperators['?'] = function ternary(a, b, context, globals, node) {\n return Node.value_of(a ? b.yes : b.no, context, globals, node)\n}\noperators['?'].precedence = 4\n"], | ||
| "mappings": ";;AAAA,SAAS,cAAc;AAEvB,SAAS,WAAW,WAAW,cAAc;AAE7C,MAAM,mBAAmB,uBAAO,oCAAoC;AAEpE,qBAAqB,KAAK;AAAA,EAKxB,YAAY,KAAK,IAAI,KAAK;AACxB,SAAK,MAAM;AACX,SAAK,KAAK;AACV,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,WAAW,YAAY;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,MAAM,SAAS,SAAS,MAAM;AAC3C,QAAI,OAAO,SAAS,YAAY;AAG9B,aAAO,OAAO,KAAK,CAAC;AAAA,IACtB;AAGA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,aAAO;AAAA,IACT;AAGA,QAAI,KAAK,KAAK,8BAA8B,GAAG;AAG7C,aAAO,OAAO,KAAK,UAAU,QAAW,SAAS,SAAS,IAAI,CAAC;AAAA,IACjE;AAGA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,SAAS,SAAS,SAAS,MAAY;AAC/C,QAAI,OAAa;AAEjB,QAAI,KAAK,OAAO,QAAQ;AACtB,aAAO,IAAI,SAAS;AAClB,YAAI,gBAAgB;AACpB,YAAI,KAAK,KAAK;AACZ,0BAAgB,KAAK,IAAI,cAAc,SAAS,IAAI;AAAA,QACtD;AACA,eAAO,KAAK,eAAe,KAAK,KAAK,eAAe,SAAS,IAAI;AAAA,MACnE;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,eAAe,KAAK,KAAK,SAAS,SAAS,IAAI;AAChE,UAAM,WAAW,KAAK,GAAG;AAEzB,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,aAAO;AAAA,IACT;AACA,UAAM,MAAM,KAAK,eAAe,KAAK,KAAK,SAAS,SAAS,IAAI;AAEhE,WAAO,KAAK,GAAG,KAAK,KAAK,SAAS,OAAO;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,iCAAiC;AAC1C,WAAO;AAAA,EACT;AAAA,EACA,KAAK,gBAAgB,IAAI;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,SAAS,MAAM,SAAU,SAAU,MAAa;AACrD,QAAI,QAAQ,KAAK,KAAK,8BAA8B,GAAG;AACrD,aAAO,KAAK,UAAU,MAAM,SAAS,SAAS,IAAI;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,OAAO,QAAQ,OAAO;AAEvC,UAAM,MAAM,IAAI,MAAM;AACtB,UAAM,MAAM,IAAI,MAAM;AACtB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,UAAI,KAAK,MAAM,CAAC,CAAC;AACjB,YAAM,KAAK,MAAM,IAAI,CAAC;AAGtB,YAAM,OAAO,IAAI,cAAc;AAC/B,aAAO,IAAI,UAAU,QAAQ,IAAI,IAAI,SAAS,CAAC,EAAE,YAAY;AAC3D,cAAM,MAAM,IAAI,IAAI;AACpB,cAAM,MAAM,IAAI,IAAI;AACpB,YAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;AAAA,MACxC;AACA,UAAI,KAAK,EAAE;AAAA,IACb;AACA,QAAI,IAAI,WAAW,GAAG;AACpB,YAAM,IAAI,MAAM,0DAA0D,GAAG,EAAE;AAAA,IACjF;AACA,WAAO,IAAI,CAAC;AAAA,EACd;AACF;AAMA,UAAU,GAAG,IAAI,SAAS,QAAQ,GAAG,GAAG,SAAS,SAAS,MAAM;AAC9D,SAAO,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,SAAS,SAAS,IAAI;AAC/D;AACA,UAAU,GAAG,EAAE,aAAa;", | ||
| "sourcesContent": ["import { unwrap } from '@tko/observable'\n\nimport { default as operators, LAMBDA } from './operators'\n\nconst IS_EXPR_OR_IDENT = Symbol('Node - Is Expression Or Identifier')\n\nexport default class Node {\n lhs: any\n op: any\n rhs: any\n\n constructor(lhs, op, rhs) {\n this.lhs = lhs\n this.op = op\n this.rhs = rhs\n }\n\n static get operators() {\n return operators\n }\n\n get_leaf_value(leaf, context, globals, node) {\n if (typeof leaf === 'function') {\n // Expressions on observables are nonsensical, so we unwrap any\n // function values (e.g. identifiers).\n return unwrap(leaf())\n }\n\n // primitives\n if (typeof leaf !== 'object' || leaf === null) {\n return leaf\n }\n\n // Identifiers and Expressions\n if (leaf[Node.isExpressionOrIdentifierSymbol]) {\n // lhs is passed in as the parent of the leaf. It will be defined in\n // cases like a.b.c as 'a' for 'b' then as 'b' for 'c'.\n return unwrap(leaf.get_value(undefined, context, globals, node))\n }\n\n // Plain object/class.\n return leaf\n }\n\n /**\n * Return a function that calculates and returns an expression's value\n * when called.\n * @param {array} ops The operations to perform\n * @return {function} The function that calculates the expression.\n *\n * Note that for a lambda, we do not evaluate the RHS expression until\n * the lambda is called.\n */\n get_value(notused, context, globals, node: Node) {\n if (this.op === LAMBDA) {\n return (...args) => {\n let lambdaContext = context\n if (this.lhs) {\n lambdaContext = this.lhs.extendContext(context, args)\n }\n return this.get_leaf_value(this.rhs, lambdaContext, globals, this)\n }\n }\n\n const lhv = this.get_leaf_value(this.lhs, context, globals, this)\n const earlyOut = this.op.earlyOut\n\n if (earlyOut && earlyOut(lhv)) {\n return lhv\n }\n const rhv = this.get_leaf_value(this.rhs, context, globals, this)\n\n return this.op(lhv, rhv, context, globals)\n }\n\n //\n // Class variables.\n //\n static get isExpressionOrIdentifierSymbol() {\n return IS_EXPR_OR_IDENT\n }\n get [IS_EXPR_OR_IDENT]() {\n return true\n }\n\n static value_of(item, context?, globals?, node?: Node) {\n if (item && item[Node.isExpressionOrIdentifierSymbol]) {\n return item.get_value(item, context, globals, node)\n }\n return item\n }\n\n /**\n * Convert an array of nodes to an executable tree.\n * @return {object} An object with a `lhs`, `rhs` and `op` key, corresponding\n * to the left hand side, right hand side, and\n * operation function.\n */\n static create_root(nodes, debug = false) {\n // shunting yard algorithm with output to an abstact syntax tree of Nodes\n const out = new Array()\n const ops = new Array()\n for (let i = 0; i < nodes.length; i += 2) {\n out.push(nodes[i]) // next value\n const op = nodes[i + 1]\n\n // only left-associative operators are currently defined and handled here\n const prec = op?.precedence || 0 // no op for last value\n while (ops.length && prec <= ops[ops.length - 1].precedence) {\n const rhs = out.pop()\n const lhs = out.pop()\n out.push(new Node(lhs, ops.pop(), rhs))\n }\n ops.push(op)\n }\n if (out.length !== 1) {\n throw new Error(`unexpected nodes remain in shunting yard output stack: ${out}`)\n }\n return out[0]\n }\n}\n\n/**\n * Because of cyclical dependencies on operators <-> Node <-> value_of,\n * we need to patch this in here.\n */\noperators['?'] = function ternary(a, b, context, globals, node) {\n return Node.value_of(a ? b.yes : b.no, context, globals, node)\n}\noperators['?'].precedence = 4\n"], | ||
| "mappings": ";;AAAA,SAAS,cAAc;AAEvB,SAAS,WAAW,WAAW,cAAc;AAE7C,MAAM,mBAAmB,uBAAO,oCAAoC;AAEpE,qBAAqB,KAAK;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,KAAK,IAAI,KAAK;AACxB,SAAK,MAAM;AACX,SAAK,KAAK;AACV,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,WAAW,YAAY;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,MAAM,SAAS,SAAS,MAAM;AAC3C,QAAI,OAAO,SAAS,YAAY;AAG9B,aAAO,OAAO,KAAK,CAAC;AAAA,IACtB;AAGA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,aAAO;AAAA,IACT;AAGA,QAAI,KAAK,KAAK,8BAA8B,GAAG;AAG7C,aAAO,OAAO,KAAK,UAAU,QAAW,SAAS,SAAS,IAAI,CAAC;AAAA,IACjE;AAGA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,SAAS,SAAS,SAAS,MAAY;AAC/C,QAAI,KAAK,OAAO,QAAQ;AACtB,aAAO,IAAI,SAAS;AAClB,YAAI,gBAAgB;AACpB,YAAI,KAAK,KAAK;AACZ,0BAAgB,KAAK,IAAI,cAAc,SAAS,IAAI;AAAA,QACtD;AACA,eAAO,KAAK,eAAe,KAAK,KAAK,eAAe,SAAS,IAAI;AAAA,MACnE;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,eAAe,KAAK,KAAK,SAAS,SAAS,IAAI;AAChE,UAAM,WAAW,KAAK,GAAG;AAEzB,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,aAAO;AAAA,IACT;AACA,UAAM,MAAM,KAAK,eAAe,KAAK,KAAK,SAAS,SAAS,IAAI;AAEhE,WAAO,KAAK,GAAG,KAAK,KAAK,SAAS,OAAO;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,iCAAiC;AAC1C,WAAO;AAAA,EACT;AAAA,EACA,KAAK,gBAAgB,IAAI;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,SAAS,MAAM,SAAU,SAAU,MAAa;AACrD,QAAI,QAAQ,KAAK,KAAK,8BAA8B,GAAG;AACrD,aAAO,KAAK,UAAU,MAAM,SAAS,SAAS,IAAI;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,OAAO,QAAQ,OAAO;AAEvC,UAAM,MAAM,IAAI,MAAM;AACtB,UAAM,MAAM,IAAI,MAAM;AACtB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,UAAI,KAAK,MAAM,CAAC,CAAC;AACjB,YAAM,KAAK,MAAM,IAAI,CAAC;AAGtB,YAAM,OAAO,IAAI,cAAc;AAC/B,aAAO,IAAI,UAAU,QAAQ,IAAI,IAAI,SAAS,CAAC,EAAE,YAAY;AAC3D,cAAM,MAAM,IAAI,IAAI;AACpB,cAAM,MAAM,IAAI,IAAI;AACpB,YAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;AAAA,MACxC;AACA,UAAI,KAAK,EAAE;AAAA,IACb;AACA,QAAI,IAAI,WAAW,GAAG;AACpB,YAAM,IAAI,MAAM,0DAA0D,GAAG,EAAE;AAAA,IACjF;AACA,WAAO,IAAI,CAAC;AAAA,EACd;AACF;AAMA,UAAU,GAAG,IAAI,SAAS,QAAQ,GAAG,GAAG,SAAS,SAAS,MAAM;AAC9D,SAAO,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,SAAS,SAAS,IAAI;AAC/D;AACA,UAAU,GAAG,EAAE,aAAa;", | ||
| "names": [] | ||
| } |
+30
-14
@@ -1,4 +0,5 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import { unwrap } from "@tko/observable"; | ||
| import { defineOption } from "@tko/utils"; | ||
| export function LAMBDA() { | ||
@@ -12,2 +13,18 @@ } | ||
| } | ||
| function looseEqual(a, b) { | ||
| return a == b; | ||
| } | ||
| looseEqual.precedence = 10; | ||
| function looseNotEqual(a, b) { | ||
| return a != b; | ||
| } | ||
| looseNotEqual.precedence = 10; | ||
| function strictEqual(a, b) { | ||
| return a === b; | ||
| } | ||
| strictEqual.precedence = 10; | ||
| function strictNotEqual(a, b) { | ||
| return a !== b; | ||
| } | ||
| strictNotEqual.precedence = 10; | ||
| const operators = { | ||
@@ -72,15 +89,7 @@ // unary | ||
| // TODO: 'typeof': function (a, b) { return typeof b; }, | ||
| // equality | ||
| "==": function equal(a, b) { | ||
| return a == b; | ||
| }, | ||
| "!=": function ne(a, b) { | ||
| return a != b; | ||
| }, | ||
| "===": function sequal(a, b) { | ||
| return a === b; | ||
| }, | ||
| "!==": function sne(a, b) { | ||
| return a !== b; | ||
| }, | ||
| // equality — default loose; set options.strictEquality = true for === behavior | ||
| "==": looseEqual, | ||
| "!=": looseNotEqual, | ||
| "===": strictEqual, | ||
| "!==": strictNotEqual, | ||
| // bitwise | ||
@@ -162,2 +171,9 @@ "&": function bitAnd(a, b) { | ||
| operators["=>"].precedence = 1; | ||
| defineOption("strictEquality", { | ||
| default: false, | ||
| set(strict) { | ||
| operators["=="] = strict ? strictEqual : looseEqual; | ||
| operators["!="] = strict ? strictNotEqual : looseNotEqual; | ||
| } | ||
| }); | ||
| export { operators as default }; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/operators.ts"], | ||
| "sourcesContent": ["import { unwrap } from '@tko/observable'\n\nexport function LAMBDA() {}\n\n/**\n * @ operator - recursively call the identifier if it's a function\n * @param {operand} a ignored\n * @param {operand} b The variable to be called (if a function) and unwrapped\n * @return {value} The result.\n */\nfunction unwrapOrCall(a, b) {\n while (typeof b === 'function') {\n b = b()\n }\n return b\n}\n\nexport type OperatorFunction = (a: any, b: any, ...args: any[]) => any\n\nexport interface OperatorWithProperties extends OperatorFunction {\n earlyOut?: (a: any) => any\n precedence?: number\n}\n\nexport interface Operators {\n [key: string]: OperatorWithProperties\n}\nconst operators: Operators = {\n // unary\n '@': unwrapOrCall,\n '#': (a, b) => () => unwrap(b), // Convert to read-only.\n '=>': LAMBDA,\n '!': function not(a, b) {\n return !b\n },\n '!!': function notnot(a, b) {\n return !!b\n },\n '++': function preinc(a, b) {\n return ++b\n },\n '--': function preinc(a, b) {\n return --b\n },\n // exponent\n '**': function exp(a, b) {\n return a ** b\n },\n // mul/div\n '*': function mul(a, b) {\n return a * b\n },\n '/': function div(a, b) {\n return a / b\n },\n '%': function mod(a, b) {\n return a % b\n },\n // sub/add\n '+': function add(a, b) {\n return a + b\n },\n '-': function sub(a, b) {\n return (a || 0) - (b || 0)\n },\n '&-': function neg(a, b) {\n return -1 * b\n }, // unary -\n // relational\n '<': function lt(a, b) {\n return a < b\n },\n '<=': function le(a, b) {\n return a <= b\n },\n '>': function gt(a, b) {\n return a > b\n },\n '>=': function ge(a, b) {\n return a >= b\n },\n // TODO: 'in': function (a, b) { return a in b; },\n // TODO: 'instanceof': function (a, b) { return a instanceof b; },\n // TODO: 'typeof': function (a, b) { return typeof b; },\n // equality\n '==': function equal(a, b) {\n return a == b\n },\n '!=': function ne(a, b) {\n return a != b\n },\n '===': function sequal(a, b) {\n return a === b\n },\n '!==': function sne(a, b) {\n return a !== b\n },\n // bitwise\n '&': function bitAnd(a, b) {\n return a & b\n },\n '^': function xor(a, b) {\n return a ^ b\n },\n '|': function bitOr(a, b) {\n return a | b\n },\n // logic\n '&&': function logicAnd(a, b) {\n return a && b\n },\n '||': function logicOr(a, b) {\n return a || b\n },\n '??': function nullishCoalesce(a, b) {\n return a ?? b\n },\n // Access\n '.': function member(a, b) {\n return a?.[b]\n },\n '?.': function omember(a, b) {\n return a?.[b]\n },\n '[': function bmember(a, b) {\n return a?.[b]\n },\n ',': function comma(a, b) {\n return b\n },\n // conditional/ternary\n // '?': ternary See Node.js\n // Function-Call\n call: function callOp(a, b) {\n return a.apply(null, b)\n }\n}\n\n/* Order of precedence from:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table\n*/\n\n// Our operator - unwrap/call\noperators['@'].precedence = 21\noperators['#'].precedence = 21\n\n// Member\noperators['.'].precedence = 19\noperators['['].precedence = 19\noperators['?.'].precedence = 19\n\n// Logical not\noperators['!'].precedence = 16\noperators['!!'].precedence = 16 // explicit double-negative\n\n// Prefix inc/dec\noperators['++'].precedence = 16\noperators['--'].precedence = 16\noperators['&-'].precedence = 16\n\n// exponent\noperators['**'].precedence = 15\n\n// mul/div/remainder\noperators['%'].precedence = 14\noperators['*'].precedence = 14\noperators['/'].precedence = 14\n\n// add/sub\noperators['+'].precedence = 13\noperators['-'].precedence = 13\n\n// bitwise\noperators['|'].precedence = 12\noperators['^'].precedence = 11\noperators['&'].precedence = 10\n\n// comparison\noperators['<'].precedence = 11\noperators['<='].precedence = 11\noperators['>'].precedence = 11\noperators['>='].precedence = 11\n\n// operators['in'].precedence = 8;\n// operators['instanceof'].precedence = 8;\n// equality\noperators['=='].precedence = 10\noperators['!='].precedence = 10\noperators['==='].precedence = 10\noperators['!=='].precedence = 10\n\n// logic\noperators['&&'].precedence = 6\noperators['||'].precedence = 5\noperators['??'].precedence = 5\n\noperators['&&'].earlyOut = a => !a\noperators['||'].earlyOut = a => a\noperators['??'].earlyOut = a => a\n\n// multiple values\noperators[','].precedence = 2\n\n// Call a function\noperators['call'].precedence = 1\n\n// lambda\noperators['=>'].precedence = 1\n\nexport { operators as default }\n"], | ||
| "mappings": "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", | ||
| "sourcesContent": ["import { unwrap } from '@tko/observable'\nimport { defineOption } from '@tko/utils'\n\nexport function LAMBDA() {}\n\n/**\n * @ operator - recursively call the identifier if it's a function\n * @param {operand} a ignored\n * @param {operand} b The variable to be called (if a function) and unwrapped\n * @return {value} The result.\n */\nfunction unwrapOrCall(a, b) {\n while (typeof b === 'function') {\n b = b()\n }\n return b\n}\n\nexport type OperatorFunction = (a: any, b: any, ...args: any[]) => any\n\nexport interface OperatorWithProperties extends OperatorFunction {\n earlyOut?: (a: any) => any\n precedence?: number\n}\n\nexport interface Operators {\n [key: string]: OperatorWithProperties\n}\nfunction looseEqual(a, b) {\n return a == b\n}\nlooseEqual.precedence = 10\n\nfunction looseNotEqual(a, b) {\n return a != b\n}\nlooseNotEqual.precedence = 10\n\nfunction strictEqual(a, b) {\n return a === b\n}\nstrictEqual.precedence = 10\n\nfunction strictNotEqual(a, b) {\n return a !== b\n}\nstrictNotEqual.precedence = 10\n\nconst operators: Operators = {\n // unary\n '@': unwrapOrCall,\n '#': (a, b) => () => unwrap(b), // Convert to read-only.\n '=>': LAMBDA,\n '!': function not(a, b) {\n return !b\n },\n '!!': function notnot(a, b) {\n return !!b\n },\n '++': function preinc(a, b) {\n return ++b\n },\n '--': function preinc(a, b) {\n return --b\n },\n // exponent\n '**': function exp(a, b) {\n return a ** b\n },\n // mul/div\n '*': function mul(a, b) {\n return a * b\n },\n '/': function div(a, b) {\n return a / b\n },\n '%': function mod(a, b) {\n return a % b\n },\n // sub/add\n '+': function add(a, b) {\n return a + b\n },\n '-': function sub(a, b) {\n return (a || 0) - (b || 0)\n },\n '&-': function neg(a, b) {\n return -1 * b\n }, // unary -\n // relational\n '<': function lt(a, b) {\n return a < b\n },\n '<=': function le(a, b) {\n return a <= b\n },\n '>': function gt(a, b) {\n return a > b\n },\n '>=': function ge(a, b) {\n return a >= b\n },\n // TODO: 'in': function (a, b) { return a in b; },\n // TODO: 'instanceof': function (a, b) { return a instanceof b; },\n // TODO: 'typeof': function (a, b) { return typeof b; },\n // equality \u2014 default loose; set options.strictEquality = true for === behavior\n '==': looseEqual,\n '!=': looseNotEqual,\n '===': strictEqual,\n '!==': strictNotEqual,\n // bitwise\n '&': function bitAnd(a, b) {\n return a & b\n },\n '^': function xor(a, b) {\n return a ^ b\n },\n '|': function bitOr(a, b) {\n return a | b\n },\n // logic\n '&&': function logicAnd(a, b) {\n return a && b\n },\n '||': function logicOr(a, b) {\n return a || b\n },\n '??': function nullishCoalesce(a, b) {\n return a ?? b\n },\n // Access\n '.': function member(a, b) {\n return a?.[b]\n },\n '?.': function omember(a, b) {\n return a?.[b]\n },\n '[': function bmember(a, b) {\n return a?.[b]\n },\n ',': function comma(a, b) {\n return b\n },\n // conditional/ternary\n // '?': ternary See Node.js\n // Function-Call\n call: function callOp(a, b) {\n return a.apply(null, b)\n }\n}\n\n/* Order of precedence from:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table\n*/\n\n// Our operator - unwrap/call\noperators['@'].precedence = 21\noperators['#'].precedence = 21\n\n// Member\noperators['.'].precedence = 19\noperators['['].precedence = 19\noperators['?.'].precedence = 19\n\n// Logical not\noperators['!'].precedence = 16\noperators['!!'].precedence = 16 // explicit double-negative\n\n// Prefix inc/dec\noperators['++'].precedence = 16\noperators['--'].precedence = 16\noperators['&-'].precedence = 16\n\n// exponent\noperators['**'].precedence = 15\n\n// mul/div/remainder\noperators['%'].precedence = 14\noperators['*'].precedence = 14\noperators['/'].precedence = 14\n\n// add/sub\noperators['+'].precedence = 13\noperators['-'].precedence = 13\n\n// bitwise\noperators['|'].precedence = 12\noperators['^'].precedence = 11\noperators['&'].precedence = 10\n\n// comparison\noperators['<'].precedence = 11\noperators['<='].precedence = 11\noperators['>'].precedence = 11\noperators['>='].precedence = 11\n\n// operators['in'].precedence = 8;\n// operators['instanceof'].precedence = 8;\n// equality\noperators['=='].precedence = 10\noperators['!='].precedence = 10\noperators['==='].precedence = 10\noperators['!=='].precedence = 10\n\n// logic\noperators['&&'].precedence = 6\noperators['||'].precedence = 5\noperators['??'].precedence = 5\n\noperators['&&'].earlyOut = a => !a\noperators['||'].earlyOut = a => a\noperators['??'].earlyOut = a => a\n\n// multiple values\noperators[','].precedence = 2\n\n// Call a function\noperators['call'].precedence = 1\n\n// lambda\noperators['=>'].precedence = 1\n\n// Extend the Options type so ko.options.strictEquality is strongly typed\ndeclare module '@tko/utils' {\n interface Options {\n strictEquality: boolean\n }\n}\n\n/** Register strictEquality as a configurable option on ko.options */\ndefineOption('strictEquality', {\n default: false,\n set(strict: boolean) {\n operators['=='] = strict ? strictEqual : looseEqual\n operators['!='] = strict ? strictNotEqual : looseNotEqual\n }\n})\n\nexport { operators as default }\n"], | ||
| "mappings": "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", | ||
| "names": ["preinc"] | ||
| } |
@@ -1,7 +0,7 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import operators from "./operators"; | ||
| import Node from "./Node"; | ||
| import Expression from "./Expression"; | ||
| import Identifier from "./Identifier"; | ||
| import operators from "./operators.js"; | ||
| import Node from "./Node.js"; | ||
| import Expression from "./Expression.js"; | ||
| import Identifier from "./Identifier.js"; | ||
| export default class Parameters { | ||
@@ -8,0 +8,0 @@ #names; |
+13
-9
@@ -1,11 +0,11 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import { options, objectForEach, clonePlainObjectDeep, extend, hasOwnProperty } from "@tko/utils"; | ||
| import { default as Expression } from "./Expression"; | ||
| import { default as Identifier } from "./Identifier"; | ||
| import { default as Arguments } from "./Arguments"; | ||
| import { default as Parameters } from "./Parameters"; | ||
| import { default as Ternary } from "./Ternary"; | ||
| import { default as Node } from "./Node"; | ||
| import { default as operators } from "./operators"; | ||
| import { default as Expression } from "./Expression.js"; | ||
| import { default as Identifier } from "./Identifier.js"; | ||
| import { default as Arguments } from "./Arguments.js"; | ||
| import { default as Parameters } from "./Parameters.js"; | ||
| import { default as Ternary } from "./Ternary.js"; | ||
| import { default as Node } from "./Node.js"; | ||
| import { default as operators } from "./operators.js"; | ||
| const escapee = { | ||
@@ -25,2 +25,6 @@ "'": "'", | ||
| export default class Parser { | ||
| ch; | ||
| at; | ||
| text; | ||
| currentContextGlobals; | ||
| white() { | ||
@@ -493,3 +497,3 @@ let ch = this.ch; | ||
| * Use this method to parse expressions that can be followed by additional markup | ||
| * seperated by a comma, such as in bindings strings. | ||
| * separated by a comma, such as in bindings strings. | ||
| * | ||
@@ -496,0 +500,0 @@ * @returns an expression that cannot contain multiple values separated by commas. |
| { | ||
| "version": 3, | ||
| "sources": ["../src/Parser.ts"], | ||
| "sourcesContent": ["/**\n * Originally based on (public domain):\n * https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n */\n\nimport { options, objectForEach, clonePlainObjectDeep, extend, hasOwnProperty } from '@tko/utils'\n\nimport { default as Expression } from './Expression'\nimport { default as Identifier } from './Identifier'\nimport { default as Arguments } from './Arguments'\nimport { default as Parameters } from './Parameters'\nimport { default as Ternary } from './Ternary'\nimport { default as Node } from './Node'\nimport { default as operators } from './operators'\n\nconst escapee = {\n \"'\": \"'\",\n '\"': '\"',\n '`': '`',\n '\\\\': '\\\\',\n '/': '/',\n $: '$',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n}\n\ntype InnerFilterType = (value: any, ignored: any, context: any, globals: any, node: any) => any\n\ntype FilterType = InnerFilterType & { precedence: number }\n\n/**\n * Construct a new Parser instance with new Parser(node, context)\n * @param {Node} node The DOM element from which we parsed the\n * content.\n * @param {object} context The Knockout context.\n * @param {object} globals An object containing any desired globals.\n */\nexport default class Parser {\n ch: any\n at: any\n text: any\n currentContextGlobals: [context: object, globals: object, node: any]\n\n white() {\n let ch = this.ch\n while (ch && ch <= ' ') {\n ch = this.next()\n }\n return this.comment(ch)\n }\n\n /**\n * Slurp any C or C++ style comments\n */\n comment(ch) {\n if (ch !== '/') {\n return ch\n }\n const p = this.at\n const second = this.lookahead()\n if (second === '/') {\n while (ch) {\n ch = this.next()\n if (ch === '\\n' || ch === '\\r') {\n break\n }\n }\n ch = this.next()\n } else if (second === '*') {\n while (ch) {\n ch = this.next()\n if (ch === '*' && this.lookahead() === '/') {\n this.next()\n break\n }\n }\n if (!ch) {\n this.error('Unclosed comment, starting at character ' + p)\n }\n this.next()\n return this.white()\n }\n return ch\n }\n\n next(c?: string) {\n if (c && c !== this.ch) {\n this.error(\"Expected '\" + c + \"' but got '\" + this.ch + \"'\")\n }\n this.ch = this.text.charAt(this.at)\n this.at += 1\n return this.ch\n }\n\n lookahead() {\n return this.text[this.at]\n }\n\n error(m) {\n if (m instanceof Error) {\n throw m\n }\n throw this.createError(m)\n }\n\n createError(m) {\n const [name, msg] = m.name ? [m.name, m.message] : [m, '']\n const message = `\\n${name} ${msg} of ${this.text}\\n` + Array(this.at).join(' ') + '_/ \uD83D\uDD25 \\\\_\\n'\n return new Error(message)\n }\n\n name() {\n // A name of a binding\n let name = ''\n let enclosedBy\n this.white()\n\n let ch = this.ch\n\n if (ch === \"'\" || ch === '\"') {\n enclosedBy = ch\n ch = this.next()\n }\n\n while (ch) {\n if (enclosedBy && ch === enclosedBy) {\n this.white()\n ch = this.next()\n if (ch !== ':' && ch !== ',') {\n this.error('Object name: ' + name + ' missing closing ' + enclosedBy)\n }\n return name\n } else if (ch === ':' || ch <= ' ' || ch === ',' || ch === '|') {\n return name\n }\n name += ch\n ch = this.next()\n }\n\n return name\n }\n\n number() {\n let number\n let string = ''\n let ch = this.ch\n\n if (ch === '-') {\n string = '-'\n ch = this.next('-')\n }\n while (ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n if (ch === '.') {\n string += '.'\n ch = this.next()\n while (ch && ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch\n ch = this.next()\n if (ch === '-' || ch === '+') {\n string += ch\n ch = this.next()\n }\n while (ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n }\n number = +string\n if (!isFinite(number)) {\n options.onError(new Error('Bad number: ' + number + ' in ' + string))\n } else {\n return number\n }\n }\n\n /**\n * Add a property to 'object' that equals the given value.\n * @param {Object} object The object to add the value to.\n * @param {String} key object[key] is set to the given value.\n * @param {mixed} value The value, may be a primitive or a function. If a\n * function it is unwrapped as a property.\n */\n objectAddValue(object, key, value) {\n if (value && value[Node.isExpressionOrIdentifierSymbol]) {\n Object.defineProperty(object, key, {\n get: () => Node.value_of(value, ...this.currentContextGlobals),\n enumerable: true\n })\n } else if (Array.isArray(value)) {\n Object.defineProperty(object, key, {\n get: () => value.map(v => Node.value_of(v, ...this.currentContextGlobals)),\n enumerable: true\n })\n } else {\n // primitives\n object[key] = value\n }\n }\n\n object() {\n let key: string\n const object = {}\n let ch = this.ch\n\n if (ch === '{') {\n this.next('{')\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n while (ch) {\n if (ch === '\"' || ch === \"'\" || ch === '`') {\n key = this.string()\n } else {\n key = this.name()\n }\n if (hasOwnProperty(object, key)) {\n this.error('Duplicate key \"' + key + '\"')\n }\n if (this.white() === ':') {\n ch = this.next(':')\n this.objectAddValue(object, key, this.singleValueExpression())\n } else {\n const objectKeyIsValue = new Identifier(this, key, [])\n this.objectAddValue(object, key, objectKeyIsValue)\n }\n\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n\n this.next(',')\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n }\n }\n throw this.createError('Bad object')\n }\n\n /**\n * Read up to delim and return the string\n * @param {string} delim The delimiter, either ' or \"\n * @return {string} The string read.\n */\n readString(delim) {\n let string = ''\n const nodes = ['']\n const plusOp: any = operators['+']\n let hex\n let i\n let uffff\n const interpolate = delim === '`'\n let ch = this.next()\n\n while (ch) {\n if (ch === delim) {\n ch = this.next()\n if (interpolate) {\n nodes.push(plusOp)\n }\n nodes.push(string)\n return nodes\n }\n if (ch === '\\\\') {\n ch = this.next()\n if (ch === 'u') {\n uffff = 0\n for (i = 0; i < 4; i += 1) {\n hex = parseInt((ch = this.next()), 16)\n if (!isFinite(hex)) {\n break\n }\n uffff = uffff * 16 + hex\n }\n string += String.fromCharCode(uffff)\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch]\n } else {\n break\n }\n } else if (interpolate && ch === '$') {\n ch = this.next()\n if (ch === '{') {\n this.next('{')\n nodes.push(plusOp)\n nodes.push(string)\n nodes.push(plusOp)\n nodes.push(this.expression())\n string = ''\n // this.next('}');\n } else {\n string += '$' + ch\n }\n } else {\n string += ch\n }\n ch = this.next()\n }\n\n throw this.createError('Bad string')\n }\n\n string() {\n const ch = this.ch\n if (ch === '\"') {\n return this.readString('\"')?.join('')\n } else if (ch === \"'\") {\n return this.readString(\"'\")?.join('')\n } else if (ch === '`') {\n return Node.create_root(this.readString('`'))\n }\n\n this.error('Bad string')\n }\n\n array() {\n const array = new Array()\n let ch = this.ch\n\n if (ch === '[') {\n ch = this.next('[')\n this.white()\n if (ch === ']') {\n ch = this.next(']')\n return array\n }\n while (ch) {\n array.push(this.singleValueExpression())\n ch = this.white()\n if (ch === ']') {\n ch = this.next(']')\n return array\n }\n this.next(',')\n ch = this.white()\n }\n }\n throw this.createError('Bad array')\n }\n\n value() {\n this.white()\n const ch = this.ch\n switch (ch) {\n case '{':\n return this.object()\n case '[':\n return this.array()\n case '\"':\n case \"'\":\n case '`':\n return this.string()\n case '-':\n return this.number()\n default:\n return ch >= '0' && ch <= '9' ? this.number() : this.identifier()\n }\n }\n\n /**\n * Get the function for the given operator.\n * A `.precedence` value is added to the function, with increasing\n * precedence having a higher number.\n * @return {function} The function that performs the infix operation\n */\n operator(opts) {\n let op = ''\n let opFn\n let ch = this.white()\n let isIdentifierChar = Identifier.is_valid_start_char\n\n while (ch) {\n if (\n isIdentifierChar(ch)\n || ch <= ' '\n || ch === ''\n || ch === '\"'\n || ch === \"'\"\n || ch === '{'\n || ch === '('\n || ch === '`'\n || ch === ')'\n || (ch <= '9' && ch >= '0')\n ) {\n break\n }\n\n if (!opts.not_an_array && ch === '[') {\n break\n }\n\n op += ch\n ch = this.next()\n\n // An infix followed by the prefix e.g. a + @b\n // TODO: other prefix unary operators\n if (ch === '@') {\n break\n }\n\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n\n if (op !== '') {\n if (opts.prefix && op === '-') {\n op = '&-'\n }\n opFn = operators[op]\n\n if (!opFn) {\n this.error(\"Bad operator: '\" + op + \"'.\")\n }\n }\n\n return opFn\n }\n\n /**\n * Filters\n * Returns what the Node interprets as an \"operator\".\n * e.g.\n * <span data-bind=\"text: name | fit:20 | uppercase\"></span>\n */\n filter(): FilterType {\n let ch = this.next()\n const args = new Array()\n\n let nextFilter: ((any) => any) | InnerFilterType = function (v) {\n return v\n }\n const name = this.name()\n\n if (!options.filters[name]) {\n options.onError(new Error('Cannot find filter by the name of: ' + name))\n }\n\n ch = this.white()\n\n while (ch) {\n if (ch === ':') {\n ch = this.next()\n args.push(this.singleValueExpression('|'))\n }\n\n if (ch === '|') {\n nextFilter = this.filter()\n break\n }\n\n if (ch === ',') {\n break\n }\n\n ch = this.white()\n }\n\n function filter(value, ignored, context, globals, node) {\n const argValues = [value]\n\n for (let i = 0, j = args.length; i < j; ++i) {\n argValues.push(Node.value_of(args[i], context, globals, node))\n }\n\n return nextFilter(options.filters[name].apply(context, argValues), ignored, context, globals, node)\n }\n\n // Lowest precedence.\n filter.precedence = 1\n return filter\n }\n\n /**\n * Parse an expression \u2013 builds an operator tree, in something like\n * Shunting-Yard.\n * See: http://en.wikipedia.org/wiki/Shunting-yard_algorithm\n *\n * @param filterable - Whether the expression can include jinga-style filters.\n * An argument of '|' is used only by the filter() method to parse subsequent\n * filters.\n * @param allowMultipleValues - Whether multiple values separated by commas are\n * allowed in this expression. When true (default), this method consumes\n * subsequent comma-separated values.\n * @see {@link Parser.singleValueExpression}\n *\n * @returns a function that computes the value of the expression\n * when called or a primitive.\n */\n expression(filterable: string | boolean = false, allowMultipleValues: boolean = true) {\n let op\n const nodes = new Array()\n let ch = this.white()\n\n while (ch) {\n // unary prefix operators\n op = this.operator({ prefix: true })\n if (op) {\n nodes.push(undefined) // LHS Tree node.\n nodes.push(op)\n ch = this.white()\n }\n\n if (ch === '(') {\n this.next()\n nodes.push(this.expression())\n this.next(')')\n } else {\n nodes.push(this.value())\n }\n ch = this.white()\n\n if (\n ch === ':'\n || ch === '}'\n || ch === ']'\n || ch === ')'\n || ch === ''\n || ch === '`'\n || (ch === '|' && filterable === '|')\n || (ch === ',' && !allowMultipleValues)\n ) {\n break\n }\n\n // filters\n if (ch === '|' && this.lookahead() !== '|' && filterable) {\n nodes.push(this.filter())\n nodes.push(undefined)\n break\n }\n\n // infix or postfix operators\n op = this.operator({ not_an_array: true })\n\n if (op === operators['?']) {\n this.ternary(nodes)\n break\n } else if (op === operators['.'] || op === operators['?.']) {\n nodes.push(op)\n nodes.push(this.member())\n op = null\n } else if (op === operators['[']) {\n nodes.push(op)\n nodes.push(this.expression())\n ch = this.next(']')\n op = null\n } else if (op === operators['=>']) {\n // convert the last node to Parameters\n nodes[nodes.length - 1] = new Parameters(this, nodes[nodes.length - 1])\n nodes.push(op)\n } else if (op) {\n nodes.push(op)\n }\n\n ch = this.white()\n\n if (ch === ']' || (!op && ch === '(')) {\n break\n }\n }\n\n if (nodes.length === 0) {\n return undefined\n }\n\n const dereferences = this.dereferences()\n\n if (nodes.length === 1 && !dereferences.length) {\n return nodes[0]\n }\n\n for (let i = 0, j = dereferences.length; i < j; ++i) {\n const deref = dereferences[i]\n if (deref.constructor === Arguments) {\n nodes.push(operators.call)\n } else {\n nodes.push(operators['.'])\n }\n nodes.push(deref)\n }\n\n return new Expression(nodes)\n }\n\n /**\n * Use this method to parse expressions that can be followed by additional markup\n * seperated by a comma, such as in bindings strings.\n *\n * @returns an expression that cannot contain multiple values separated by commas.\n * @see {@link Parser.expression}\n */\n singleValueExpression(filterable: boolean | string = false) {\n return this.expression(filterable, false)\n }\n\n ternary(nodes) {\n const ternary = new Ternary()\n ternary.yes = this.singleValueExpression()\n this.next(':')\n ternary.no = this.singleValueExpression()\n nodes.push(operators['?'])\n nodes.push(ternary)\n }\n\n /**\n * Parse the arguments to a function, returning an Array.\n *\n */\n funcArguments() {\n const args = new Array()\n let ch = this.next('(')\n\n while (ch) {\n ch = this.white()\n if (ch === ')') {\n this.next(')')\n return new Arguments(this, args)\n } else {\n args.push(this.singleValueExpression())\n ch = this.white()\n }\n if (ch !== ')') {\n this.next(',')\n }\n }\n\n throw this.createError('Bad arguments to function')\n }\n\n /**\n * The literal string reference `abc` in an `x.abc` expression.\n */\n member() {\n let member = ''\n let ch = this.white()\n let isIdentifierChar = Identifier.is_valid_start_char\n\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break\n }\n member += ch\n ch = this.next()\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n return member\n }\n\n /**\n * A dereference applies to an identifer, being either a function\n * call \"()\" or a membership lookup with square brackets \"[member]\".\n * @return {fn or undefined} Dereference function to be applied to the\n * Identifier\n */\n dereference() {\n let member\n const ch = this.white()\n\n while (ch) {\n if (ch === '(') {\n // a(...) function call\n return this.funcArguments()\n } else if (ch === '[') {\n // a[x] membership\n this.next('[')\n member = this.expression()\n this.white()\n this.next(']')\n\n return member\n } else if (ch === '.') {\n // a.x membership\n this.next('.')\n return this.member()\n } else {\n break\n }\n }\n }\n\n dereferences() {\n const ch = this.white()\n const dereferences = new Array()\n let deref\n\n while (ch) {\n deref = this.dereference()\n if (deref !== undefined) {\n dereferences.push(deref)\n } else {\n break\n }\n }\n return dereferences\n }\n\n identifier() {\n let token = ''\n let isIdentifierChar = Identifier.is_valid_start_char\n let ch = this.white()\n\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break\n }\n token += ch\n ch = this.next()\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n switch (token) {\n case 'true':\n return true\n case 'false':\n return false\n case 'null':\n return null\n case 'undefined':\n return void 0\n case 'function':\n throw new Error('Knockout: Anonymous functions are no longer supported, but `=>` lambdas are. In: ' + this.text)\n // return this.anonymous_fn();\n }\n return new Identifier(this, token, this.dereferences())\n }\n\n readBindings() {\n let key\n const bindings = {}\n let sep\n let expr\n let ch = this.ch\n\n while (ch) {\n key = this.name()\n sep = this.white()\n\n if (!sep || sep === ',') {\n if (sep) {\n ch = this.next(',')\n } else {\n ch = ''\n }\n // A \"bare\" binding e.g. \"text\"; substitute value of 'null'\n // so it becomes \"text: null\".\n bindings[key] = null\n } else {\n if (key.indexOf('.') !== -1) {\n // Namespaced \u2013 i.e.\n // `attr.css: x` becomes `attr: { css: x }`\n // ^^^ - key\n key = key.split('.')\n bindings[key[0]] = bindings[key[0]] || {}\n\n if (key.length !== 2) {\n options.onError(new Error('Binding ' + key + ' should have two parts (a.b).'))\n } else if (bindings[key[0]].constructor !== Object) {\n options.onError(new Error('Binding ' + key[0] + '.' + key[1] + ' paired with a non-object.'))\n }\n\n ch = this.next(':')\n this.objectAddValue(bindings[key[0]], key[1], this.singleValueExpression(true))\n } else {\n ch = this.next(':')\n if (bindings[key] && typeof bindings[key] === 'object' && bindings[key].constructor === Object) {\n // Extend a namespaced bindings e.g. we've previously seen\n // on.x, now we're seeing on: { 'abc' }.\n expr = this.singleValueExpression(true)\n if (typeof expr !== 'object' || expr.constructor !== Object) {\n options.onError(new Error('Expected plain object for ' + key + ' value.'))\n } else {\n extend(bindings[key], expr)\n }\n } else {\n bindings[key] = this.singleValueExpression(true)\n }\n }\n\n this.white()\n if (this.ch) {\n ch = this.next(',')\n } else {\n ch = ''\n }\n }\n }\n return bindings\n }\n\n valueAsAccessor(value, context, globals, node) {\n if (!value) {\n return () => value\n }\n if (typeof value === 'function') {\n return value\n }\n\n if (value[Node.isExpressionOrIdentifierSymbol]) {\n return () => Node.value_of(value, context, globals, node)\n }\n\n if (Array.isArray(value)) {\n return () => value.map(v => Node.value_of(v, context, globals, node))\n }\n\n if (typeof value !== 'function') {\n return () => clonePlainObjectDeep(value)\n }\n\n throw new Error('Value has cannot be converted to accessor: ' + value)\n }\n\n /**\n * Convert result[name] from a value to a function (i.e. `valueAccessor()`)\n * @param {object} result [Map of top-level names to values]\n * @return {object} [Map of top-level names to functions]\n *\n * Accessors may be one of (below) constAccessor, identifierAccessor,\n * expressionAccessor, or nodeAccessor.\n */\n convertToAccessors(result, context, globals, node) {\n objectForEach(result, (name, value) => {\n if (value instanceof Identifier) {\n // Return a function that, with no arguments returns\n // the value of the identifier, otherwise sets the\n // value of the identifier to the first given argument.\n Object.defineProperty(result, name, {\n value: function (optionalValue, options) {\n const currentValue = value.get_value(undefined, context, globals, node)\n if (arguments.length === 0) {\n return currentValue\n }\n const unchanged = optionalValue === currentValue\n if (options && options.onlyIfChanged && unchanged) {\n return\n }\n return value.set_value(optionalValue, context, globals)\n }\n })\n } else {\n result[name] = this.valueAsAccessor(value, context, globals, node)\n }\n })\n return result\n }\n\n preparse(source = '') {\n const preparsers = options.bindingStringPreparsers || []\n return preparsers.reduce((acc, fn) => fn(acc), source.trim())\n }\n\n runParse(source, fn) {\n this.text = this.preparse(source)\n this.at = 0\n this.ch = ' '\n\n try {\n const result = fn()\n this.white()\n if (this.ch) {\n this.error('Syntax Error')\n }\n return result\n } catch (e) {\n options.onError(e)\n }\n }\n\n /**\n * Get the bindings as name: accessor()\n * @param {string} source The binding string to parse.\n * @return {object} Map of name to accessor function.\n */\n parse(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => null\n }\n this.currentContextGlobals = [context, globals, node]\n const parseFn = () => this.readBindings()\n const bindingAccessors = this.runParse(source, parseFn)\n return this.convertToAccessors(bindingAccessors, context, globals, node)\n }\n\n /**\n * Return a function that evaluates and returns the result of the expression.\n */\n parseExpression(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => ''\n }\n this.currentContextGlobals = [context, globals, node]\n const parseFn = () => this.singleValueExpression(true)\n const bindingAccessors = this.runParse(source, parseFn)\n return this.valueAsAccessor(bindingAccessors, context, globals, node)\n }\n}\n"], | ||
| "mappings": "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", | ||
| "sourcesContent": ["/**\n * Originally based on (public domain):\n * https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n */\n\nimport { options, objectForEach, clonePlainObjectDeep, extend, hasOwnProperty } from '@tko/utils'\n\nimport { default as Expression } from './Expression'\nimport { default as Identifier } from './Identifier'\nimport { default as Arguments } from './Arguments'\nimport { default as Parameters } from './Parameters'\nimport { default as Ternary } from './Ternary'\nimport { default as Node } from './Node'\nimport { default as operators } from './operators'\n\nconst escapee = {\n \"'\": \"'\",\n '\"': '\"',\n '`': '`',\n '\\\\': '\\\\',\n '/': '/',\n $: '$',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n}\n\ntype InnerFilterType = (value: any, ignored: any, context: any, globals: any, node: any) => any\n\ntype FilterType = InnerFilterType & { precedence: number }\n\n/**\n * Construct a new Parser instance with new Parser(node, context)\n * @param {Node} node The DOM element from which we parsed the\n * content.\n * @param {object} context The Knockout context.\n * @param {object} globals An object containing any desired globals.\n */\nexport default class Parser {\n ch: any\n at: any\n text: any\n currentContextGlobals: [context: object, globals: object, node: any]\n\n white() {\n let ch = this.ch\n while (ch && ch <= ' ') {\n ch = this.next()\n }\n return this.comment(ch)\n }\n\n /**\n * Slurp any C or C++ style comments\n */\n comment(ch) {\n if (ch !== '/') {\n return ch\n }\n const p = this.at\n const second = this.lookahead()\n if (second === '/') {\n while (ch) {\n ch = this.next()\n if (ch === '\\n' || ch === '\\r') {\n break\n }\n }\n ch = this.next()\n } else if (second === '*') {\n while (ch) {\n ch = this.next()\n if (ch === '*' && this.lookahead() === '/') {\n this.next()\n break\n }\n }\n if (!ch) {\n this.error('Unclosed comment, starting at character ' + p)\n }\n this.next()\n return this.white()\n }\n return ch\n }\n\n next(c?: string) {\n if (c && c !== this.ch) {\n this.error(\"Expected '\" + c + \"' but got '\" + this.ch + \"'\")\n }\n this.ch = this.text.charAt(this.at)\n this.at += 1\n return this.ch\n }\n\n lookahead() {\n return this.text[this.at]\n }\n\n error(m) {\n if (m instanceof Error) {\n throw m\n }\n throw this.createError(m)\n }\n\n createError(m) {\n const [name, msg] = m.name ? [m.name, m.message] : [m, '']\n const message = `\\n${name} ${msg} of ${this.text}\\n` + Array(this.at).join(' ') + '_/ \uD83D\uDD25 \\\\_\\n'\n return new Error(message)\n }\n\n name() {\n // A name of a binding\n let name = ''\n let enclosedBy\n this.white()\n\n let ch = this.ch\n\n if (ch === \"'\" || ch === '\"') {\n enclosedBy = ch\n ch = this.next()\n }\n\n while (ch) {\n if (enclosedBy && ch === enclosedBy) {\n this.white()\n ch = this.next()\n if (ch !== ':' && ch !== ',') {\n this.error('Object name: ' + name + ' missing closing ' + enclosedBy)\n }\n return name\n } else if (ch === ':' || ch <= ' ' || ch === ',' || ch === '|') {\n return name\n }\n name += ch\n ch = this.next()\n }\n\n return name\n }\n\n number() {\n let number\n let string = ''\n let ch = this.ch\n\n if (ch === '-') {\n string = '-'\n ch = this.next('-')\n }\n while (ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n if (ch === '.') {\n string += '.'\n ch = this.next()\n while (ch && ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch\n ch = this.next()\n if (ch === '-' || ch === '+') {\n string += ch\n ch = this.next()\n }\n while (ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n }\n number = +string\n if (!isFinite(number)) {\n options.onError(new Error('Bad number: ' + number + ' in ' + string))\n } else {\n return number\n }\n }\n\n /**\n * Add a property to 'object' that equals the given value.\n * @param {Object} object The object to add the value to.\n * @param {String} key object[key] is set to the given value.\n * @param {mixed} value The value, may be a primitive or a function. If a\n * function it is unwrapped as a property.\n */\n objectAddValue(object, key, value) {\n if (value && value[Node.isExpressionOrIdentifierSymbol]) {\n Object.defineProperty(object, key, {\n get: () => Node.value_of(value, ...this.currentContextGlobals),\n enumerable: true\n })\n } else if (Array.isArray(value)) {\n Object.defineProperty(object, key, {\n get: () => value.map(v => Node.value_of(v, ...this.currentContextGlobals)),\n enumerable: true\n })\n } else {\n // primitives\n object[key] = value\n }\n }\n\n object() {\n let key: string\n const object = {}\n let ch = this.ch\n\n if (ch === '{') {\n this.next('{')\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n while (ch) {\n if (ch === '\"' || ch === \"'\" || ch === '`') {\n key = this.string()\n } else {\n key = this.name()\n }\n if (hasOwnProperty(object, key)) {\n this.error('Duplicate key \"' + key + '\"')\n }\n if (this.white() === ':') {\n ch = this.next(':')\n this.objectAddValue(object, key, this.singleValueExpression())\n } else {\n const objectKeyIsValue = new Identifier(this, key, [])\n this.objectAddValue(object, key, objectKeyIsValue)\n }\n\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n\n this.next(',')\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n }\n }\n throw this.createError('Bad object')\n }\n\n /**\n * Read up to delim and return the string\n * @param {string} delim The delimiter, either ' or \"\n * @return {string} The string read.\n */\n readString(delim) {\n let string = ''\n const nodes = ['']\n const plusOp: any = operators['+']\n let hex\n let i\n let uffff\n const interpolate = delim === '`'\n let ch = this.next()\n\n while (ch) {\n if (ch === delim) {\n ch = this.next()\n if (interpolate) {\n nodes.push(plusOp)\n }\n nodes.push(string)\n return nodes\n }\n if (ch === '\\\\') {\n ch = this.next()\n if (ch === 'u') {\n uffff = 0\n for (i = 0; i < 4; i += 1) {\n hex = parseInt((ch = this.next()), 16)\n if (!isFinite(hex)) {\n break\n }\n uffff = uffff * 16 + hex\n }\n string += String.fromCharCode(uffff)\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch]\n } else {\n break\n }\n } else if (interpolate && ch === '$') {\n ch = this.next()\n if (ch === '{') {\n this.next('{')\n nodes.push(plusOp)\n nodes.push(string)\n nodes.push(plusOp)\n nodes.push(this.expression())\n string = ''\n // this.next('}');\n } else {\n string += '$' + ch\n }\n } else {\n string += ch\n }\n ch = this.next()\n }\n\n throw this.createError('Bad string')\n }\n\n string() {\n const ch = this.ch\n if (ch === '\"') {\n return this.readString('\"')?.join('')\n } else if (ch === \"'\") {\n return this.readString(\"'\")?.join('')\n } else if (ch === '`') {\n return Node.create_root(this.readString('`'))\n }\n\n this.error('Bad string')\n }\n\n array() {\n const array = new Array()\n let ch = this.ch\n\n if (ch === '[') {\n ch = this.next('[')\n this.white()\n if (ch === ']') {\n ch = this.next(']')\n return array\n }\n while (ch) {\n array.push(this.singleValueExpression())\n ch = this.white()\n if (ch === ']') {\n ch = this.next(']')\n return array\n }\n this.next(',')\n ch = this.white()\n }\n }\n throw this.createError('Bad array')\n }\n\n value() {\n this.white()\n const ch = this.ch\n switch (ch) {\n case '{':\n return this.object()\n case '[':\n return this.array()\n case '\"':\n case \"'\":\n case '`':\n return this.string()\n case '-':\n return this.number()\n default:\n return ch >= '0' && ch <= '9' ? this.number() : this.identifier()\n }\n }\n\n /**\n * Get the function for the given operator.\n * A `.precedence` value is added to the function, with increasing\n * precedence having a higher number.\n * @return {function} The function that performs the infix operation\n */\n operator(opts) {\n let op = ''\n let opFn\n let ch = this.white()\n let isIdentifierChar = Identifier.is_valid_start_char\n\n while (ch) {\n if (\n isIdentifierChar(ch) ||\n ch <= ' ' ||\n ch === '' ||\n ch === '\"' ||\n ch === \"'\" ||\n ch === '{' ||\n ch === '(' ||\n ch === '`' ||\n ch === ')' ||\n (ch <= '9' && ch >= '0')\n ) {\n break\n }\n\n if (!opts.not_an_array && ch === '[') {\n break\n }\n\n op += ch\n ch = this.next()\n\n // An infix followed by the prefix e.g. a + @b\n // TODO: other prefix unary operators\n if (ch === '@') {\n break\n }\n\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n\n if (op !== '') {\n if (opts.prefix && op === '-') {\n op = '&-'\n }\n opFn = operators[op]\n\n if (!opFn) {\n this.error(\"Bad operator: '\" + op + \"'.\")\n }\n }\n\n return opFn\n }\n\n /**\n * Filters\n * Returns what the Node interprets as an \"operator\".\n * e.g.\n * <span data-bind=\"text: name | fit:20 | uppercase\"></span>\n */\n filter(): FilterType {\n let ch = this.next()\n const args = new Array()\n\n let nextFilter: ((any) => any) | InnerFilterType = function (v) {\n return v\n }\n const name = this.name()\n\n if (!options.filters[name]) {\n options.onError(new Error('Cannot find filter by the name of: ' + name))\n }\n\n ch = this.white()\n\n while (ch) {\n if (ch === ':') {\n ch = this.next()\n args.push(this.singleValueExpression('|'))\n }\n\n if (ch === '|') {\n nextFilter = this.filter()\n break\n }\n\n if (ch === ',') {\n break\n }\n\n ch = this.white()\n }\n\n function filter(value, ignored, context, globals, node) {\n const argValues = [value]\n\n for (let i = 0, j = args.length; i < j; ++i) {\n argValues.push(Node.value_of(args[i], context, globals, node))\n }\n\n return nextFilter(options.filters[name].apply(context, argValues), ignored, context, globals, node)\n }\n\n // Lowest precedence.\n filter.precedence = 1\n return filter\n }\n\n /**\n * Parse an expression \u2013 builds an operator tree, in something like\n * Shunting-Yard.\n * See: http://en.wikipedia.org/wiki/Shunting-yard_algorithm\n *\n * @param filterable - Whether the expression can include jinga-style filters.\n * An argument of '|' is used only by the filter() method to parse subsequent\n * filters.\n * @param allowMultipleValues - Whether multiple values separated by commas are\n * allowed in this expression. When true (default), this method consumes\n * subsequent comma-separated values.\n * @see {@link Parser.singleValueExpression}\n *\n * @returns a function that computes the value of the expression\n * when called or a primitive.\n */\n expression(filterable: string | boolean = false, allowMultipleValues: boolean = true) {\n let op\n const nodes = new Array()\n let ch = this.white()\n\n while (ch) {\n // unary prefix operators\n op = this.operator({ prefix: true })\n if (op) {\n nodes.push(undefined) // LHS Tree node.\n nodes.push(op)\n ch = this.white()\n }\n\n if (ch === '(') {\n this.next()\n nodes.push(this.expression())\n this.next(')')\n } else {\n nodes.push(this.value())\n }\n ch = this.white()\n\n if (\n ch === ':' ||\n ch === '}' ||\n ch === ']' ||\n ch === ')' ||\n ch === '' ||\n ch === '`' ||\n (ch === '|' && filterable === '|') ||\n (ch === ',' && !allowMultipleValues)\n ) {\n break\n }\n\n // filters\n if (ch === '|' && this.lookahead() !== '|' && filterable) {\n nodes.push(this.filter())\n nodes.push(undefined)\n break\n }\n\n // infix or postfix operators\n op = this.operator({ not_an_array: true })\n\n if (op === operators['?']) {\n this.ternary(nodes)\n break\n } else if (op === operators['.'] || op === operators['?.']) {\n nodes.push(op)\n nodes.push(this.member())\n op = null\n } else if (op === operators['[']) {\n nodes.push(op)\n nodes.push(this.expression())\n ch = this.next(']')\n op = null\n } else if (op === operators['=>']) {\n // convert the last node to Parameters\n nodes[nodes.length - 1] = new Parameters(this, nodes[nodes.length - 1])\n nodes.push(op)\n } else if (op) {\n nodes.push(op)\n }\n\n ch = this.white()\n\n if (ch === ']' || (!op && ch === '(')) {\n break\n }\n }\n\n if (nodes.length === 0) {\n return undefined\n }\n\n const dereferences = this.dereferences()\n\n if (nodes.length === 1 && !dereferences.length) {\n return nodes[0]\n }\n\n for (let i = 0, j = dereferences.length; i < j; ++i) {\n const deref = dereferences[i]\n if (deref.constructor === Arguments) {\n nodes.push(operators.call)\n } else {\n nodes.push(operators['.'])\n }\n nodes.push(deref)\n }\n\n return new Expression(nodes)\n }\n\n /**\n * Use this method to parse expressions that can be followed by additional markup\n * separated by a comma, such as in bindings strings.\n *\n * @returns an expression that cannot contain multiple values separated by commas.\n * @see {@link Parser.expression}\n */\n singleValueExpression(filterable: boolean | string = false) {\n return this.expression(filterable, false)\n }\n\n ternary(nodes) {\n const ternary = new Ternary()\n ternary.yes = this.singleValueExpression()\n this.next(':')\n ternary.no = this.singleValueExpression()\n nodes.push(operators['?'])\n nodes.push(ternary)\n }\n\n /**\n * Parse the arguments to a function, returning an Array.\n *\n */\n funcArguments() {\n const args = new Array()\n let ch = this.next('(')\n\n while (ch) {\n ch = this.white()\n if (ch === ')') {\n this.next(')')\n return new Arguments(this, args)\n } else {\n args.push(this.singleValueExpression())\n ch = this.white()\n }\n if (ch !== ')') {\n this.next(',')\n }\n }\n\n throw this.createError('Bad arguments to function')\n }\n\n /**\n * The literal string reference `abc` in an `x.abc` expression.\n */\n member() {\n let member = ''\n let ch = this.white()\n let isIdentifierChar = Identifier.is_valid_start_char\n\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break\n }\n member += ch\n ch = this.next()\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n return member\n }\n\n /**\n * A dereference applies to an identifer, being either a function\n * call \"()\" or a membership lookup with square brackets \"[member]\".\n * @return {fn or undefined} Dereference function to be applied to the\n * Identifier\n */\n dereference() {\n let member\n const ch = this.white()\n\n while (ch) {\n if (ch === '(') {\n // a(...) function call\n return this.funcArguments()\n } else if (ch === '[') {\n // a[x] membership\n this.next('[')\n member = this.expression()\n this.white()\n this.next(']')\n\n return member\n } else if (ch === '.') {\n // a.x membership\n this.next('.')\n return this.member()\n } else {\n break\n }\n }\n }\n\n dereferences() {\n const ch = this.white()\n const dereferences = new Array()\n let deref\n\n while (ch) {\n deref = this.dereference()\n if (deref !== undefined) {\n dereferences.push(deref)\n } else {\n break\n }\n }\n return dereferences\n }\n\n identifier() {\n let token = ''\n let isIdentifierChar = Identifier.is_valid_start_char\n let ch = this.white()\n\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break\n }\n token += ch\n ch = this.next()\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n switch (token) {\n case 'true':\n return true\n case 'false':\n return false\n case 'null':\n return null\n case 'undefined':\n return void 0\n case 'function':\n throw new Error('Knockout: Anonymous functions are no longer supported, but `=>` lambdas are. In: ' + this.text)\n // return this.anonymous_fn();\n }\n return new Identifier(this, token, this.dereferences())\n }\n\n readBindings() {\n let key\n const bindings = {}\n let sep\n let expr\n let ch = this.ch\n\n while (ch) {\n key = this.name()\n sep = this.white()\n\n if (!sep || sep === ',') {\n if (sep) {\n ch = this.next(',')\n } else {\n ch = ''\n }\n // A \"bare\" binding e.g. \"text\"; substitute value of 'null'\n // so it becomes \"text: null\".\n bindings[key] = null\n } else {\n if (key.indexOf('.') !== -1) {\n // Namespaced \u2013 i.e.\n // `attr.css: x` becomes `attr: { css: x }`\n // ^^^ - key\n key = key.split('.')\n bindings[key[0]] = bindings[key[0]] || {}\n\n if (key.length !== 2) {\n options.onError(new Error('Binding ' + key + ' should have two parts (a.b).'))\n } else if (bindings[key[0]].constructor !== Object) {\n options.onError(new Error('Binding ' + key[0] + '.' + key[1] + ' paired with a non-object.'))\n }\n\n ch = this.next(':')\n this.objectAddValue(bindings[key[0]], key[1], this.singleValueExpression(true))\n } else {\n ch = this.next(':')\n if (bindings[key] && typeof bindings[key] === 'object' && bindings[key].constructor === Object) {\n // Extend a namespaced bindings e.g. we've previously seen\n // on.x, now we're seeing on: { 'abc' }.\n expr = this.singleValueExpression(true)\n if (typeof expr !== 'object' || expr.constructor !== Object) {\n options.onError(new Error('Expected plain object for ' + key + ' value.'))\n } else {\n extend(bindings[key], expr)\n }\n } else {\n bindings[key] = this.singleValueExpression(true)\n }\n }\n\n this.white()\n if (this.ch) {\n ch = this.next(',')\n } else {\n ch = ''\n }\n }\n }\n return bindings\n }\n\n valueAsAccessor(value, context, globals, node) {\n if (!value) {\n return () => value\n }\n if (typeof value === 'function') {\n return value\n }\n\n if (value[Node.isExpressionOrIdentifierSymbol]) {\n return () => Node.value_of(value, context, globals, node)\n }\n\n if (Array.isArray(value)) {\n return () => value.map(v => Node.value_of(v, context, globals, node))\n }\n\n if (typeof value !== 'function') {\n return () => clonePlainObjectDeep(value)\n }\n\n throw new Error('Value has cannot be converted to accessor: ' + value)\n }\n\n /**\n * Convert result[name] from a value to a function (i.e. `valueAccessor()`)\n * @param {object} result [Map of top-level names to values]\n * @return {object} [Map of top-level names to functions]\n *\n * Accessors may be one of (below) constAccessor, identifierAccessor,\n * expressionAccessor, or nodeAccessor.\n */\n convertToAccessors(result, context, globals, node) {\n objectForEach(result, (name, value) => {\n if (value instanceof Identifier) {\n // Return a function that, with no arguments returns\n // the value of the identifier, otherwise sets the\n // value of the identifier to the first given argument.\n Object.defineProperty(result, name, {\n value: function (optionalValue, options) {\n const currentValue = value.get_value(undefined, context, globals, node)\n if (arguments.length === 0) {\n return currentValue\n }\n const unchanged = optionalValue === currentValue\n if (options && options.onlyIfChanged && unchanged) {\n return\n }\n return value.set_value(optionalValue, context, globals)\n }\n })\n } else {\n result[name] = this.valueAsAccessor(value, context, globals, node)\n }\n })\n return result\n }\n\n preparse(source = '') {\n const preparsers = options.bindingStringPreparsers || []\n return preparsers.reduce((acc, fn) => fn(acc), source.trim())\n }\n\n runParse(source, fn) {\n this.text = this.preparse(source)\n this.at = 0\n this.ch = ' '\n\n try {\n const result = fn()\n this.white()\n if (this.ch) {\n this.error('Syntax Error')\n }\n return result\n } catch (e) {\n options.onError(e)\n }\n }\n\n /**\n * Get the bindings as name: accessor()\n * @param {string} source The binding string to parse.\n * @return {object} Map of name to accessor function.\n */\n parse(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => null\n }\n this.currentContextGlobals = [context, globals, node]\n const parseFn = () => this.readBindings()\n const bindingAccessors = this.runParse(source, parseFn)\n return this.convertToAccessors(bindingAccessors, context, globals, node)\n }\n\n /**\n * Return a function that evaluates and returns the result of the expression.\n */\n parseExpression(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => ''\n }\n this.currentContextGlobals = [context, globals, node]\n const parseFn = () => this.singleValueExpression(true)\n const bindingAccessors = this.runParse(source, parseFn)\n return this.valueAsAccessor(bindingAccessors, context, globals, node)\n }\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["options"] | ||
| } |
+1
-1
@@ -1,2 +0,2 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
@@ -3,0 +3,0 @@ import { stringTrim } from "@tko/utils"; |
+4
-2
@@ -1,5 +0,7 @@ | ||
| // @tko/utils.parser 🥊 4.0.0 ESM | ||
| // @tko/utils.parser 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import Node from "./Node"; | ||
| import Node from "./Node.js"; | ||
| export default class Ternary { | ||
| yes; | ||
| no; | ||
| constructor(yes, no) { | ||
@@ -6,0 +8,0 @@ Object.assign(this, { yes, no }); |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["import Node from './Node'\n\nexport default class Ternary {\n yes: any\n no: any\n constructor(yes?, no?) {\n Object.assign(this, { yes, no })\n }\n\n get_value() {\n return this\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n"], | ||
| "mappings": ";;AAAA,OAAO,UAAU;AAEjB,qBAAqB,QAAQ;AAAA,EAG3B,YAAY,KAAM,IAAK;AACrB,WAAO,OAAO,MAAM,EAAE,KAAK,GAAG,CAAC;AAAA,EACjC;AAAA,EAEA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,KAAK,8BAA8B,IAAI;AAC1C,WAAO;AAAA,EACT;AACF;", | ||
| "mappings": ";;AAAA,OAAO,UAAU;AAEjB,qBAAqB,QAAQ;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,YAAY,KAAM,IAAK;AACrB,WAAO,OAAO,MAAM,EAAE,KAAK,GAAG,CAAC;AAAA,EACjC;AAAA,EAEA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,KAAK,8BAA8B,IAAI;AAC1C,WAAO;AAAA,EACT;AACF;", | ||
| "names": [] | ||
| } |
+12
-18
| { | ||
| "version": "4.0.0", | ||
| "version": "4.0.1", | ||
| "name": "@tko/utils.parser", | ||
| "description": "Parse the Javascript-like language used in data-bind and other HTML attributes (CSP-safe)", | ||
| "module": "dist/utils.parser.js", | ||
| "module": "dist/index.js", | ||
| "files": [ | ||
| "dist/", | ||
| "helpers/" | ||
| "dist/" | ||
| ], | ||
| "license": "MIT", | ||
| "dependencies": { | ||
| "@tko/observable": "^4.0.0", | ||
| "@tko/utils": "^4.0.0", | ||
| "@tko/observable": "^4.0.1", | ||
| "@tko/utils": "^4.0.1", | ||
| "tslib": "^2.2.0" | ||
| }, | ||
| "peerDependencies": { | ||
| "@tko/bind": "^4.0.0", | ||
| "@tko/binding.core": "^4.0.0", | ||
| "@tko/provider.databind": "^4.0.0" | ||
| "@tko/bind": "^4.0.1", | ||
| "@tko/binding.core": "^4.0.1", | ||
| "@tko/provider.databind": "^4.0.1" | ||
| }, | ||
| "karma": { | ||
| "frameworks": [ | ||
| "mocha", | ||
| "sinon", | ||
| "chai" | ||
| ] | ||
| }, | ||
| "homepage": "https://tko.io", | ||
@@ -39,4 +31,3 @@ "licenses": [ | ||
| "import": "./dist/index.js" | ||
| }, | ||
| "./helpers/*": "./helpers/*" | ||
| } | ||
| }, | ||
@@ -50,3 +41,6 @@ "bugs": { | ||
| "url": "git+https://github.com/knockout/tko.git" | ||
| }, | ||
| "scripts": { | ||
| "build": "bun ../../tools/build.ts" | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
271570
-30%2864
-28.47%Updated
Updated