subscript 10.0.4 → 10.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -7
- package/feature/destruct.js +9 -0
- package/feature/literal.js +6 -2
- package/feature/regex.js +18 -4
- package/jessie.min.js +6 -6
- package/justin.min.js +7 -7
- package/package.json +3 -3
- package/parse.js +2 -1
- package/subscript.min.js +1 -1
- package/util/stringify.js +8 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<p align="center">Tiny expression parser & evaluator.</p>
|
|
4
4
|
<div align="center">
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
[](https://github.com/dy/subscript/actions/workflows/node.js.yml) [](http://npmjs.org/subscript) [](https://bundlephobia.com/package/subscript) [](http://microjs.com/#subscript) <!--[](https://dy.github.io/subscript/)-->
|
|
7
7
|
|
|
8
8
|
</div>
|
|
@@ -15,16 +15,16 @@ let fn = subscript('a + b * 2')
|
|
|
15
15
|
fn({ a: 1, b: 3 }) // 7
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
* **Safe** — sandboxed, blocks `__proto__`, `constructor`, no global access
|
|
19
18
|
* **Fast** — Pratt parser engine, see [benchmarks](#performance)
|
|
20
19
|
* **Portable** — universal expression format, see [spec](./spec.md)
|
|
21
|
-
* **Extensible** — pluggable syntax, see [
|
|
20
|
+
* **Extensible** — pluggable syntax, see [playground](https://dy.github.io/subscript/)
|
|
22
21
|
* **Metacircular** — can parse and compile itself
|
|
22
|
+
* **Safe** — sandboxed, blocks `__proto__`, `constructor`, no global access
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
## Presets
|
|
26
26
|
|
|
27
|
-
**Subscript
|
|
27
|
+
**Subscript** – common expressions:
|
|
28
28
|
|
|
29
29
|
```js
|
|
30
30
|
import subscript from 'subscript'
|
|
@@ -32,7 +32,7 @@ import subscript from 'subscript'
|
|
|
32
32
|
subscript('a.b + c * 2')({ a: { b: 1 }, c: 3 }) // 7
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
**Justin
|
|
35
|
+
**Justin** – JSON + expressions + templates + arrows:
|
|
36
36
|
|
|
37
37
|
```js
|
|
38
38
|
import justin from 'subscript/justin.js'
|
|
@@ -41,7 +41,7 @@ justin('{ x: a?.b ?? 0, y: [1, ...rest] }')({ a: null, rest: [2, 3] })
|
|
|
41
41
|
// { x: 0, y: [1, 2, 3] }
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
**Jessie
|
|
44
|
+
**Jessie** – JSON + expressions + statements, functions (JS subset):
|
|
45
45
|
|
|
46
46
|
```js
|
|
47
47
|
import jessie from 'subscript/jessie.js'
|
|
@@ -60,6 +60,8 @@ See [docs](./docs.md#presets) for full description.
|
|
|
60
60
|
|
|
61
61
|
## Extension
|
|
62
62
|
|
|
63
|
+
Add operators, literals or custom syntax:
|
|
64
|
+
|
|
63
65
|
```js
|
|
64
66
|
import { binary, operator, compile } from 'subscript/justin.js'
|
|
65
67
|
|
|
@@ -159,7 +161,7 @@ console.log(await bundle('main.js', {
|
|
|
159
161
|
<!-- * [glsl-transpiler](https://github.com/stackgl/glsl-transpiler) -->
|
|
160
162
|
<!-- * [piezo](https://github.com/dy/piezo) -->
|
|
161
163
|
|
|
162
|
-
<!--
|
|
164
|
+
<!--
|
|
163
165
|
## Refs
|
|
164
166
|
|
|
165
167
|
[jsep](https://github.com/EricSmekens/jsep), [jexl](https://github.com/TomFrost/Jexl), [expr-eval](https://github.com/silentmatt/expr-eval), [math.js](https://mathjs.org/).
|
package/feature/destruct.js
CHANGED
|
@@ -14,7 +14,15 @@ export const destructure = (pattern, value, ctx) => {
|
|
|
14
14
|
const [op, ...raw] = pattern;
|
|
15
15
|
const items = flatten(raw);
|
|
16
16
|
if (op === '{}') {
|
|
17
|
+
const used = [];
|
|
17
18
|
for (const item of items) {
|
|
19
|
+
// Rest: {...rest}
|
|
20
|
+
if (Array.isArray(item) && item[0] === '...') {
|
|
21
|
+
const rest = {};
|
|
22
|
+
for (const k in value) if (!used.includes(k)) rest[k] = value[k];
|
|
23
|
+
ctx[item[1]] = rest;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
18
26
|
let key, binding, def;
|
|
19
27
|
// Shorthand: {x} → item is 'x'
|
|
20
28
|
// With default: {x = 1} → ['=', 'x', default]
|
|
@@ -22,6 +30,7 @@ export const destructure = (pattern, value, ctx) => {
|
|
|
22
30
|
if (typeof item === 'string') { key = binding = item }
|
|
23
31
|
else if (item[0] === '=') { typeof item[1] === 'string' ? (key = binding = item[1]) : ([, key, binding] = item[1]); def = item[2] }
|
|
24
32
|
else { [, key, binding] = item }
|
|
33
|
+
used.push(key);
|
|
25
34
|
let val = value[key];
|
|
26
35
|
if (val === undefined && def) val = compile(def)(ctx);
|
|
27
36
|
destructure(binding, val, ctx);
|
package/feature/literal.js
CHANGED
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
* Literal values
|
|
3
3
|
*
|
|
4
4
|
* true, false, null, undefined, NaN, Infinity
|
|
5
|
+
*
|
|
6
|
+
* Note: undefined uses [] (empty array) for JSON round-trip compatibility.
|
|
7
|
+
* [, undefined] serializes to [null, null] which would compile to null.
|
|
8
|
+
* [] serializes to [] and compiles back to undefined.
|
|
5
9
|
*/
|
|
6
|
-
import { literal } from '../parse.js';
|
|
10
|
+
import { literal, token } from '../parse.js';
|
|
7
11
|
|
|
8
12
|
literal('true', true);
|
|
9
13
|
literal('false', false);
|
|
10
14
|
literal('null', null);
|
|
11
|
-
|
|
15
|
+
token('undefined', 200, a => !a && []); // [] for JSON compatibility
|
|
12
16
|
literal('NaN', NaN);
|
|
13
17
|
literal('Infinity', Infinity);
|
package/feature/regex.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Regex literals: /pattern/flags
|
|
3
3
|
*
|
|
4
|
-
* AST:
|
|
5
|
-
* /abc/gi → [,
|
|
4
|
+
* AST (constructor form, JSON-serializable):
|
|
5
|
+
* /abc/gi → ['//', 'abc', 'gi']
|
|
6
|
+
* /abc/ → ['//', 'abc']
|
|
6
7
|
*
|
|
7
8
|
* Note: Disambiguates from division by context:
|
|
8
9
|
* - `/` after value = division (falls through to prev)
|
|
9
10
|
* - `/` at start or after operator = regex
|
|
11
|
+
*
|
|
12
|
+
* Compile:
|
|
13
|
+
* ['//', 'abc', 'gi'] → new RegExp('abc', 'gi')
|
|
10
14
|
*/
|
|
11
|
-
import { token, skip, err, next, idx, cur } from '../parse.js';
|
|
15
|
+
import { token, skip, err, next, idx, cur, operator } from '../parse.js';
|
|
12
16
|
|
|
13
17
|
const PREFIX = 140, SLASH = 47, BSLASH = 92;
|
|
14
18
|
|
|
@@ -26,6 +30,16 @@ token('/', PREFIX, a => {
|
|
|
26
30
|
cur.charCodeAt(idx) === SLASH || err('Unterminated regex');
|
|
27
31
|
skip(); // consume closing /
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
const flags = next(regexFlag);
|
|
34
|
+
// Validate regex syntax
|
|
35
|
+
try { new RegExp(pattern, flags); }
|
|
30
36
|
catch (e) { err('Invalid regex: ' + e.message); }
|
|
37
|
+
|
|
38
|
+
return flags ? ['//', pattern, flags] : ['//', pattern];
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Compile: ['//', pattern, flags?] → RegExp
|
|
42
|
+
operator('//', (a, b) => {
|
|
43
|
+
const re = new RegExp(a, b || '');
|
|
44
|
+
return () => re;
|
|
31
45
|
});
|
package/jessie.min.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var u,c,m=r=>(u=0,c=r,m.newline=!1,r=d(),c[u]?k():r||""),k=(r="Unexpected token",e=u,t=c.slice(0,e).split(`
|
|
2
|
-
`),o=t.pop(),
|
|
2
|
+
`),o=t.pop(),n=c.slice(Math.max(0,e-40),e),s="\u032D",l=(c[e]||" ")+s,f=c.slice(e+1,e+20))=>{throw SyntaxError(`${r} at ${t.length+1}:${o.length+1}
|
|
3
3
|
${c[e-41]!==`
|
|
4
|
-
`,""+
|
|
5
|
-
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},Nr=r=>(e,t,o="")=>{if(!(e||!m.string?.[String.fromCharCode(r)]))return y(),
|
|
6
|
-
`,"/*":"*/"};var Ar;m.space=()=>{Ar||(Ar=Object.entries(m.comment).map(([
|
|
7
|
-
`)for(;c.charCodeAt(o)>=Me;)o++;else{for(;c[o]&&c.substr(o,t[1].length)!==t[1];)o++;c[o]&&(o+=t[1].length)}O(o),r=0;break}if(r)return r}return r};var Kr=80;h("===",Kr);h("!==",Kr);p("===",(r,e)=>(r=
|
|
8
|
-
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},Vr=()=>{let r=[];for(let e="",t;(t=c.charCodeAt(u))!==nr;)t?t===Ye?(y(),e+=Ze[c[u]]||c[u],y()):t===Je&&c.charCodeAt(u+1)===Ve?(e&&r.push([,e]),e="",y(2),r.push(d(0,125))):(e+=c[u],y(),t=c.charCodeAt(u),t===nr&&e&&r.push([,e])):k("Unterminated template");return y(),r},qe=C[nr];C[nr]=(r,e)=>r&&e<ze?m.asi&&m.newline?void 0:(y(),["``",r,...Vr()]):r?qe?.(r,e):(y(),(t=>t.length<2&&t[0]?.[0]===void 0?t[0]||[,""]:["`",...t])(Vr()));p("`",(...r)=>(r=r.map(
|
|
4
|
+
`,""+n}${l}${f}`)},Y=(r,e=u)=>(Array.isArray(r)&&(r.loc=e),r),T=(r,e=u,t)=>{for(;t=r(c.charCodeAt(u));)u+=t;return c.slice(e,u)},y=(r=1)=>c[u+=r],O=r=>u=r,d=(r=0,e)=>{let t,o,n,s,l=m.reserved,f;for(e&&m.asi&&(m.newline=!1),m.reserved=0;(t=m.space())&&(f=m.newline,1)&&t!==e&&(n=((s=C[t])&&s(o,r))??(m.asi&&o&&f&&(n=m.asi(o,r,d)))??(!o&&!m.reserved&&T(m.id)));)o=n,m.reserved=0;return m.reserved=l,e&&(t==e?u++:k("Unclosed "+String.fromCharCode(e-(e>42?2:1)))),o},A=m.space=(r,e=u)=>{for(;(r=c.charCodeAt(u))<=32;)m.asi&&r===10&&(m.newline=!0),u++;return r},wt=m.id=r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||r==36||r==95||r>=192&&r!=215&&r!=247,I=(r,e=r.length)=>c.substr(u,e)===r&&!m.id(c.charCodeAt(u+e)),_=()=>(y(),d(0,41)),C=[],E=(r,e=32,t,o=r.charCodeAt(0),n=r.length,s=C[o],l=r.toUpperCase()!==r,f,a)=>C[o]=(g,S,P,v=u)=>(f=P,(P?r==P:(n<2||r.charCodeAt(1)===c.charCodeAt(u+1)&&(n<3||c.substr(u,n)==r))&&(!l||!m.id(c.charCodeAt(u+n)))&&(f=P=r))&&S<e&&(u+=n,(a=t(g))?Y(a,v):(u=v,f=0,l&&a!==!1&&(m.reserved=1),!l&&!s&&k()),a)||s?.(g,S,f)),h=(r,e,t=!1)=>E(r,e,(o,n)=>o&&(n=d(e-(t?.5:0)))&&[r,o,n]),R=(r,e,t)=>E(r,e,o=>t?o&&[r,o]:!o&&(o=d(e-.5))&&[r,o]),B=(r,e)=>E(r,200,t=>!t&&[,e]),pr=(r,e,t)=>{E(r,e,(o,n)=>(n=d(e-(t?.5:0)),o?.[0]!==r&&(o=[r,o||null]),n?.[0]===r?o.push(...n.slice(1)):o.push(n||null),o))},H=(r,e)=>E(r[0],e,t=>!t&&[r,d(0,r.charCodeAt(1))||null]),lr=(r,e)=>E(r[0],e,t=>t&&[r,t,d(0,r.charCodeAt(1))||null]),sr={},p=(r,e,t=sr[r])=>sr[r]=(...o)=>e(...o)||t?.(...o),i=r=>Array.isArray(r)?r[0]==null?(e=>()=>e)(r[1]):sr[r[0]]?.(...r.slice(1))??k(`Unknown operator: ${r[0]}`,r?.loc):r===void 0?()=>{}:e=>e?.[r];var q=46,j=48,x=57,pe=69,le=101,fe=43,ue=45,Z=95,me=110,ce=97,de=102,Ae=65,he=70,Tr=r=>r.indexOf("_")<0?r:r.replaceAll("_",""),fr=r=>{let e=Tr(T(t=>t===q&&c.charCodeAt(u+1)!==q||t>=j&&t<=x||t===Z||((t===pe||t===le)&&((t=c.charCodeAt(u+1))>=j&&t<=x||t===fe||t===ue)?2:0)));return c.charCodeAt(u)===me?(y(),[,BigInt(e)]):(r=+e)!=r?k():[,r]},ye={2:r=>r===48||r===49||r===Z,8:r=>r>=48&&r<=55||r===Z,16:r=>r>=j&&r<=x||r>=ce&&r<=de||r>=Ae&&r<=he||r===Z};m.number=null;C[q]=r=>!r&&c.charCodeAt(u+1)!==q&&fr();for(let r=j;r<=x;r++)C[r]=e=>e?void 0:fr();C[j]=r=>{if(r)return;let e=m.number;if(e){for(let[t,o]of Object.entries(e))if(t[0]==="0"&&c[u+1]?.toLowerCase()===t[1])return y(2),[,parseInt(Tr(T(ye[o])),o)]}return fr()};var ae=92,Ir=34,Rr=39,ge={n:`
|
|
5
|
+
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},Nr=r=>(e,t,o="")=>{if(!(e||!m.string?.[String.fromCharCode(r)]))return y(),T(n=>n-r&&(n===ae?(o+=ge[c[u+1]]||c[u+1],2):(o+=c[u],1))),c[u]===String.fromCharCode(r)?y():k("Bad string"),[,o]};C[Ir]=Nr(Ir);C[Rr]=Nr(Rr);m.string={'"':!0};var Ee=20;"= += -= *= /= %= |= &= ^= >>= <<=".split(" ").map(r=>h(r,Ee,!0));var Or=(r,e,t,o)=>typeof r=="string"?n=>e(n,r,n):r[0]==="."?(t=i(r[1]),o=r[2],n=>e(t(n),o,n)):r[0]==="[]"&&r.length===3?(t=i(r[1]),o=i(r[2]),n=>e(t(n),o(n),n)):r[0]==="()"&&r.length===2?Or(r[1],e):(()=>{throw Error("Invalid assignment target")})(),_r={"=":(r,e,t)=>r[e]=t,"+=":(r,e,t)=>r[e]+=t,"-=":(r,e,t)=>r[e]-=t,"*=":(r,e,t)=>r[e]*=t,"/=":(r,e,t)=>r[e]/=t,"%=":(r,e,t)=>r[e]%=t,"|=":(r,e,t)=>r[e]|=t,"&=":(r,e,t)=>r[e]&=t,"^=":(r,e,t)=>r[e]^=t,">>=":(r,e,t)=>r[e]>>=t,"<<=":(r,e,t)=>r[e]<<=t};for(let r in _r)p(r,(e,t)=>(t=i(t),Or(e,(o,n,s)=>_r[r](o,n,t(s)))));var we=30,Ce=40,Pr=140;h("!",Pr);R("!",Pr);h("||",we);h("&&",Ce);p("!",r=>(r=i(r),e=>!r(e)));p("||",(r,e)=>(r=i(r),e=i(e),t=>r(t)||e(t)));p("&&",(r,e)=>(r=i(r),e=i(e),t=>r(t)&&e(t)));var Se=50,ke=60,ve=70,Mr=100,Te=140;h("|",Se);h("&",ve);h("^",ke);h(">>",Mr);h("<<",Mr);R("~",Te);p("~",r=>(r=i(r),e=>~r(e)));p("|",(r,e)=>(r=i(r),e=i(e),t=>r(t)|e(t)));p("&",(r,e)=>(r=i(r),e=i(e),t=>r(t)&e(t)));p("^",(r,e)=>(r=i(r),e=i(e),t=>r(t)^e(t)));p(">>",(r,e)=>(r=i(r),e=i(e),t=>r(t)>>e(t)));p("<<",(r,e)=>(r=i(r),e=i(e),t=>r(t)<<e(t)));var b=90;h("<",b);h(">",b);h("<=",b);h(">=",b);p(">",(r,e)=>(r=i(r),e=i(e),t=>r(t)>e(t)));p("<",(r,e)=>(r=i(r),e=i(e),t=>r(t)<e(t)));p(">=",(r,e)=>(r=i(r),e=i(e),t=>r(t)>=e(t)));p("<=",(r,e)=>(r=i(r),e=i(e),t=>r(t)<=e(t)));var Ur=80;h("==",Ur);h("!=",Ur);p("==",(r,e)=>(r=i(r),e=i(e),t=>r(t)==e(t)));p("!=",(r,e)=>(r=i(r),e=i(e),t=>r(t)!=e(t)));var Lr=110,ur=120,Fr=140;h("+",Lr);h("-",Lr);h("*",ur);h("/",ur);h("%",ur);R("+",Fr);R("-",Fr);p("+",(r,e)=>e!==void 0?(r=i(r),e=i(e),t=>r(t)+e(t)):(r=i(r),t=>+r(t)));p("-",(r,e)=>e!==void 0?(r=i(r),e=i(e),t=>r(t)-e(t)):(r=i(r),t=>-r(t)));p("*",(r,e)=>(r=i(r),e=i(e),t=>r(t)*e(t)));p("/",(r,e)=>(r=i(r),e=i(e),t=>r(t)/e(t)));p("%",(r,e)=>(r=i(r),e=i(e),t=>r(t)%e(t)));var rr=150;E("++",rr,r=>r?["++",r,null]:["++",d(rr-1)]);E("--",rr,r=>r?["--",r,null]:["--",d(rr-1)]);var mr=(r,e,t,o)=>typeof r=="string"?n=>e(n,r):r[0]==="."?(t=i(r[1]),o=r[2],n=>e(t(n),o)):r[0]==="[]"&&r.length===3?(t=i(r[1]),o=i(r[2]),n=>e(t(n),o(n))):r[0]==="()"&&r.length===2?mr(r[1],e):(()=>{throw Error("Invalid increment target")})();p("++",(r,e)=>mr(r,e===null?(t,o)=>t[o]++:(t,o)=>++t[o]));p("--",(r,e)=>mr(r,e===null?(t,o)=>t[o]--:(t,o)=>--t[o]));var Ie=5,Re=10,Ne=170;H("()",Ne);pr(",",Re);pr(";",Ie,!0);var Gr=(...r)=>(r=r.map(i),e=>{let t;for(let o of r)t=o(e);return t});p(",",Gr);p(";",Gr);var L=r=>r?.[0]==="_"&&r[1]==="_"||r==="constructor"||r==="prototype",cr=170;lr("[]",cr);h(".",cr);lr("()",cr);var er=r=>{throw Error(r)};p("[]",(r,e)=>e===void 0?(r=r?r[0]===","?r.slice(1):[r]:[],r=r.map(t=>t==null?(()=>{}):t[0]==="..."?(t=i(t[1]),o=>t(o)):(t=i(t),o=>[t(o)])),t=>r.flatMap(o=>o(t))):(e==null&&er("Missing index"),r=i(r),e=i(e),t=>{let o=e(t);return L(o)?void 0:r(t)[o]}));p(".",(r,e)=>(r=i(r),e=e[0]?e:e[1],L(e)?()=>{}:t=>r(t)[e]));p("()",(r,e)=>{if(e===void 0)return r==null?er("Empty ()"):i(r);let t=n=>n?.[0]===","&&n.slice(1).some(s=>s==null||t(s));t(e)&&er("Empty argument");let o=e?e[0]===","?(e=e.slice(1).map(i),n=>e.map(s=>s(n))):(e=i(e),n=>[e(n)]):()=>[];return dr(r,(n,s,l)=>n[s](...o(l)))});var M=r=>typeof r=="string"||Array.isArray(r)&&(r[0]==="."||r[0]==="?."||r[0]==="[]"&&r.length===3||r[0]==="?.[]"||r[0]==="()"&&r.length===2&&M(r[1])||r[0]==="{}"),dr=(r,e,t,o)=>r==null?er("Empty ()"):r[0]==="()"&&r.length==2?dr(r[1],e):typeof r=="string"?n=>e(n,r,n):r[0]==="."?(t=i(r[1]),o=r[2],n=>e(t(n),o,n)):r[0]==="?."?(t=i(r[1]),o=r[2],n=>{let s=t(n);return s==null?void 0:e(s,o,n)}):r[0]==="[]"&&r.length===3?(t=i(r[1]),o=i(r[2]),n=>e(t(n),o(n),n)):r[0]==="?.[]"?(t=i(r[1]),o=i(r[2]),n=>{let s=t(n);return s==null?void 0:e(s,o(n),n)}):(r=i(r),n=>e([r(n)],0,n)),F=dr;var Br=new WeakMap,_e=(r,...e)=>typeof r=="string"?i(m(r)):Br.get(r)||Br.set(r,Oe(r,e)).get(r),Xr=57344,Oe=(r,e)=>{let t=r.reduce((s,l,f)=>s+(f?String.fromCharCode(Xr+f-1):"")+l,""),o=m(t),n=s=>{if(typeof s=="string"&&s.length===1){let l=s.charCodeAt(0)-Xr,f;if(l>=0&&l<e.length)return f=e[l],Pe(f)?f:[,f]}return Array.isArray(s)?s.map(n):s};return i(n(o))},Pe=r=>typeof r=="string"||Array.isArray(r)&&(typeof r[0]=="string"||r[0]===void 0),Dr=_e;var Me=32,Ue=m.space;m.comment??={"//":`
|
|
6
|
+
`,"/*":"*/"};var Ar;m.space=()=>{Ar||(Ar=Object.entries(m.comment).map(([n,s])=>[n,s,n.charCodeAt(0)]));for(var r;r=Ue();){for(var e=0,t;t=Ar[e++];)if(r===t[2]&&c.substr(u,t[0].length)===t[0]){var o=u+t[0].length;if(t[1]===`
|
|
7
|
+
`)for(;c.charCodeAt(o)>=Me;)o++;else{for(;c[o]&&c.substr(o,t[1].length)!==t[1];)o++;c[o]&&(o+=t[1].length)}O(o),r=0;break}if(r)return r}return r};var Kr=80;h("===",Kr);h("!==",Kr);p("===",(r,e)=>(r=i(r),e=i(e),t=>r(t)===e(t)));p("!==",(r,e)=>(r=i(r),e=i(e),t=>r(t)!==e(t)));var Le=30;h("??",Le);p("??",(r,e)=>(r=i(r),e=i(e),t=>r(t)??e(t)));var Fe=130,Ge=20;h("**",Fe,!0);h("**=",Ge,!0);p("**",(r,e)=>(r=i(r),e=i(e),t=>r(t)**e(t)));var Be=r=>{throw Error(r)};p("**=",(r,e)=>(M(r)||Be("Invalid assignment target"),e=i(e),F(r,(t,o,n)=>t[o]**=e(n))));var Qr=90;h("in",Qr);h("of",Qr);p("in",(r,e)=>(r=i(r),e=i(e),t=>r(t)in e(t)));var Xe=20,De=100,Ke=r=>{throw Error(r)};h(">>>",De);h(">>>=",Xe,!0);p(">>>",(r,e)=>(r=i(r),e=i(e),t=>r(t)>>>e(t)));p(">>>=",(r,e)=>(M(r)||Ke("Invalid assignment target"),e=i(e),F(r,(t,o,n)=>t[o]>>>=e(n))));var Qe=r=>r[0]?.[0]===","?r[0].slice(1):r,G=(r,e,t)=>{if(typeof r=="string"){t[r]=e;return}let[o,...n]=r,s=Qe(n);if(o==="{}"){let l=[];for(let f of s){if(Array.isArray(f)&&f[0]==="..."){let v={};for(let N in e)l.includes(N)||(v[N]=e[N]);t[f[1]]=v;break}let a,g,S;typeof f=="string"?a=g=f:f[0]==="="?(typeof f[1]=="string"?a=g=f[1]:[,a,g]=f[1],S=f[2]):[,a,g]=f,l.push(a);let P=e[a];P===void 0&&S&&(P=i(S)(t)),G(g,P,t)}}else if(o==="[]"){let l=0;for(let f of s){if(f===null){l++;continue}if(Array.isArray(f)&&f[0]==="..."){t[f[1]]=e.slice(l);break}let a=f,g;Array.isArray(f)&&f[0]==="="&&([,a,g]=f);let S=e[l++];S===void 0&&g&&(S=i(g)(t)),G(a,S,t)}}};var hr=20,tr=r=>{throw Error(r)};h("||=",hr,!0);h("&&=",hr,!0);h("??=",hr,!0);p("=",(r,e)=>{if(Array.isArray(r)&&(r[0]==="let"||r[0]==="const"||r[0]==="var")){let t=r[1];return e=i(e),typeof t=="string"?o=>{o[t]=e(o)}:o=>G(t,e(o),o)}return M(r)||tr("Invalid assignment target"),e=i(e),F(r,(t,o,n)=>t[o]=e(n))});p("||=",(r,e)=>(M(r)||tr("Invalid assignment target"),e=i(e),F(r,(t,o,n)=>t[o]||=e(n))));p("&&=",(r,e)=>(M(r)||tr("Invalid assignment target"),e=i(e),F(r,(t,o,n)=>t[o]&&=e(n))));p("??=",(r,e)=>(M(r)||tr("Invalid assignment target"),e=i(e),F(r,(t,o,n)=>t[o]??=e(n))));B("true",!0);B("false",!1);B("null",null);E("undefined",200,r=>!r&&[]);B("NaN",NaN);B("Infinity",1/0);var yr=20;E("?",yr,(r,e,t)=>r&&(e=d(yr-1))&&T(o=>o===58)&&(t=d(yr-1),["?",r,e,t]));p("?",(r,e,t)=>(r=i(r),e=i(e),t=i(t),o=>r(o)?e(o):t(o)));var $e=20;h("=>",$e,!0);p("=>",(r,e)=>{r=r[0]==="()"?r[1]:r,r=r?r[0]===","?r.slice(1):[r]:[];let t=-1,o=null;return r.length&&Array.isArray(r[r.length-1])&&r[r.length-1][0]==="..."&&(t=r.length-1,o=r[t][1],r=r.slice(0,-1)),e=i(e[0]==="{}"?e[1]:e),(n=null)=>(n=Object.create(n),(...s)=>(r.forEach((l,f)=>n[l]=s[f]),o&&(n[o]=s.slice(t)),e(n)))});var He=140;R("...",He);p("...",r=>(r=i(r),e=>Object.entries(r(e))));var $r=170;E("?.",$r,(r,e)=>{if(!r)return;let t=A();return t===40?(y(),["?.()",r,d(0,41)||null]):t===91?(y(),["?.[]",r,d(0,93)]):(e=d($r),e?["?.",r,e]:void 0)});p("?.",(r,e)=>(r=i(r),L(e)?()=>{}:t=>r(t)?.[e]));p("?.[]",(r,e)=>(r=i(r),e=i(e),t=>{let o=e(t);return L(o)?void 0:r(t)?.[o]}));p("?.()",(r,e)=>{let t=e?e[0]===","?(e=e.slice(1).map(i),n=>e.map(s=>s(n))):(e=i(e),n=>[e(n)]):()=>[];if(r[0]==="?."){let n=i(r[1]),s=r[2];return L(s)?()=>{}:l=>n(l)?.[s]?.(...t(l))}if(r[0]==="?.[]"){let n=i(r[1]),s=i(r[2]);return l=>{let f=n(l),a=s(l);return L(a)?void 0:f?.[a]?.(...t(l))}}if(r[0]==="."){let n=i(r[1]),s=r[2];return L(s)?()=>{}:l=>n(l)?.[s]?.(...t(l))}if(r[0]==="[]"&&r.length===3){let n=i(r[1]),s=i(r[2]);return l=>{let f=n(l),a=s(l);return L(a)?void 0:f?.[a]?.(...t(l))}}let o=i(r);return n=>o(n)?.(...t(n))});var W=140;R("typeof",W);R("void",W);R("delete",W);E("new",W,r=>!r&&(I(".target")?(y(7),["new.target"]):["new",d(W)]));p("typeof",r=>(r=i(r),e=>typeof r(e)));p("void",r=>(r=i(r),e=>(r(e),void 0)));p("delete",r=>{if(r[0]==="."){let e=i(r[1]),t=r[2];return o=>delete e(o)[t]}if(r[0]==="[]"){let e=i(r[1]),t=i(r[2]);return o=>delete e(o)[t(o)]}return()=>!0});p("new",r=>{let e=i(r?.[0]==="()"?r[1]:r),t=r?.[0]==="()"?r[2]:null,o=t?t[0]===","?(n=>s=>n.map(l=>l(s)))(t.slice(1).map(i)):(n=>s=>[n(s)])(i(t)):()=>[];return n=>new(e(n))(...o(n))});var or=Symbol("accessor"),ar=20,je=40,Hr=41,jr=123,Wr=125,zr=r=>e=>{if(e)return;A();let t=T(m.id);if(!t||(A(),c.charCodeAt(u)!==je))return!1;y();let o=d(0,Hr);return A(),c.charCodeAt(u)!==jr?!1:(y(),[r,t,o,d(0,Wr)])};E("get",ar-1,zr("get"));E("set",ar-1,zr("set"));E("(",ar-1,r=>{if(!r||typeof r!="string")return;let e=d(0,Hr)||null;if(A(),c.charCodeAt(u)===jr)return y(),[":",r,["=>",["()",e],d(0,Wr)||null]]});p("get",(r,e)=>(e=e?i(e):()=>{},t=>[[or,r,{get:function(){let o=Object.create(t||{});return o.this=this,e(o)}}]]));p("set",(r,e,t)=>(t=t?i(t):()=>{},o=>[[or,r,{set:function(n){let s=Object.create(o||{});s.this=this,s[e]=n,t(s)}}]]));var We=20,Jr=200;H("[]",Jr);H("{}",Jr);h(":",We-1,!0);p("{}",(r,e)=>{if(e!==void 0)return;r=r?r[0]!==","?[r]:r.slice(1):[];let t=r.map(o=>i(typeof o=="string"?[":",o,o]:o));return o=>{let n={},s={};for(let l of t.flatMap(f=>f(o)))if(l[0]===or){let[,f,a]=l;s[f]={...s[f],...a,configurable:!0,enumerable:!0}}else n[l[0]]=l[1];for(let l in s)Object.defineProperty(n,l,s[l]);return n}});p(":",(r,e)=>(e=i(e),Array.isArray(r)?(r=i(r),t=>[[r(t),e(t)]]):t=>[[r,e(t)]]));var ze=170,nr=96,Je=36,Ve=123,Ye=92,Ze={n:`
|
|
8
|
+
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},Vr=()=>{let r=[];for(let e="",t;(t=c.charCodeAt(u))!==nr;)t?t===Ye?(y(),e+=Ze[c[u]]||c[u],y()):t===Je&&c.charCodeAt(u+1)===Ve?(e&&r.push([,e]),e="",y(2),r.push(d(0,125))):(e+=c[u],y(),t=c.charCodeAt(u),t===nr&&e&&r.push([,e])):k("Unterminated template");return y(),r},qe=C[nr];C[nr]=(r,e)=>r&&e<ze?m.asi&&m.newline?void 0:(y(),["``",r,...Vr()]):r?qe?.(r,e):(y(),(t=>t.length<2&&t[0]?.[0]===void 0?t[0]||[,""]:["`",...t])(Vr()));p("`",(...r)=>(r=r.map(i),e=>r.map(t=>t(e)).join("")));p("``",(r,...e)=>{r=i(r);let t=[],o=[];for(let s of e)Array.isArray(s)&&s[0]===void 0?t.push(s[1]):o.push(i(s));let n=Object.assign([...t],{raw:t});return s=>r(s)(n,...o.map(l=>l(s)))});m.string["'"]=!0;m.number={"0x":16,"0b":2,"0o":8};var gr=5,Yr=123,Zr=125,w=(r,e,t,o=r.charCodeAt(0),n=r.length,s=C[o],l)=>C[o]=(f,a,g,S=u)=>!f&&(g?r==g:(n<2||c.substr(u,n)==r)&&(g=r))&&a<e&&!m.id(c.charCodeAt(u+n))&&(O(u+n),(l=t())?Y(l,S):(O(S),!s&&k()),l)||s?.(f,a,g),Er=(r,e,t,o=r.charCodeAt(0),n=r.length,s=C[o],l)=>C[o]=(f,a,g,S=u)=>f&&(g?r==g:(n<2||c.substr(u,n)==r)&&(g=r))&&a<e&&!m.id(c.charCodeAt(u+n))&&(O(u+n),Y(l=t(f),S),l)||s?.(f,a,g),U=()=>(A()===Yr||k("Expected {"),y(),d(gr-.5,Zr)||null),X=()=>A()!==Yr?d(gr+.5):(y(),d(gr-.5,Zr)||null);var wr=5,xe=10,be=20,qr=r=>{let e=d(xe-1);return e?.[0]==="in"||e?.[0]==="of"?[e[0],[r,e[1]],e[2]]:e?.[0]===","?[r,...e.slice(1)]:[r,e]};E("let",wr+1,r=>!r&&qr("let"));E("const",wr+1,r=>!r&&qr("const"));w("var",wr,()=>(A(),["var",d(be)]));var xr=(...r)=>(r=r.map(e=>{if(typeof e=="string")return t=>{t[e]=void 0};if(e[0]==="="){let[,t,o]=e,n=i(o);return typeof t=="string"?s=>{s[t]=n(s)}:s=>G(t,n(s),s)}return i(e)}),e=>{for(let t of r)t(e)});p("let",xr);p("const",xr);p("var",r=>typeof r=="string"?e=>{e[r]=void 0}:()=>{});var D=Symbol("break"),z=Symbol("continue"),K=Symbol("return");var rt=200;w("function",rt,()=>{A();let r=!1;c[u]==="*"&&(r=!0,y(),A());let e=T(m.id);return e&&A(),r?["function*",e,_()||null,U()]:["function",e,_()||null,U()]});p("function",(r,e,t)=>{t=t?i(t):()=>{};let o=e?e[0]===","?e.slice(1):[e]:[],n=null,s=-1,l=o[o.length-1];return Array.isArray(l)&&l[0]==="..."&&(s=o.length-1,n=l[1],o.length--),f=>{let a=(...g)=>{let S={};o.forEach((v,N)=>S[v]=g[N]),n&&(S[n]=g.slice(s));let P=new Proxy(S,{get:(v,N)=>N in v?v[N]:f[N],set:(v,N,se)=>((N in v?v:f)[N]=se,!0),has:(v,N)=>N in v||N in f});try{return t(P)}catch(v){if(v?.type===K)return v.value;throw v}};return r&&(f[r]=a),a}});p("function*",(r,e,t)=>{throw Error("Generator functions are not supported in evaluation")});var ir=140,Cr=20;R("await",ir);w("yield",ir,()=>(A(),c[u]==="*"?(y(),A(),["yield*",d(Cr)]):["yield",d(Cr)]));w("async",ir,()=>{if(A(),I("function"))return["async",d(ir)];let r=d(Cr-.5);return r&&["async",r]});p("async",r=>{let e=i(r);return t=>{let o=e(t);return async function(...n){return o(...n)}}});p("await",r=>(r=i(r),async e=>await r(e)));p("yield",r=>(r=r?i(r):null,e=>{throw{__yield__:r?r(e):void 0}}));p("yield*",r=>(r=i(r),e=>{throw{__yield_all__:r(e)}}));var Sr=200,et=140,tt=90,ot=Symbol("static");B("super",Symbol.for("super"));R("static",et);h("instanceof",tt);E("#",Sr,r=>{if(r)return;let e=T(m.id);return e?"#"+e:void 0});w("class",Sr,()=>{A();let r=T(m.id)||null;if(r==="extends")r=null,A();else{if(A(),!I("extends"))return["class",r,null,U()];y(7),A()}return["class",r,d(Sr),U()]});var nt=r=>{throw Error(r)};p("instanceof",(r,e)=>(r=i(r),e=i(e),t=>r(t)instanceof e(t)));p("class",(r,e,t)=>(e=e?i(e):null,t=t?i(t):null,o=>{let n=e?e(o):Object,s=function(...l){if(!(this instanceof s))return nt("Class constructor must be called with new");let f=e?Reflect.construct(n,l,s):this;return s.prototype.__constructor__&&s.prototype.__constructor__.apply(f,l),f};if(Object.setPrototypeOf(s.prototype,n.prototype),Object.setPrototypeOf(s,n),t){let l=Object.create(o);l.super=n;let f=t(l),a=Array.isArray(f)&&typeof f[0]?.[0]=="string"?f:[];for(let[g,S]of a)g==="constructor"?s.prototype.__constructor__=S:s.prototype[g]=S}return r&&(o[r]=s),s}));p("static",r=>(r=i(r),e=>[[ot,r(e)]]));var it=140,kr=47,st=92,pt=r=>r===st?2:r&&r!==kr,lt=r=>r===103||r===105||r===109||r===115||r===117||r===121;E("/",it,r=>{if(r)return;let e=c.charCodeAt(u);if(e===kr||e===42||e===43||e===63||e===61)return;let t=T(pt);c.charCodeAt(u)===kr||k("Unterminated regex"),y();let o=T(lt);try{new RegExp(t,o)}catch(n){k("Invalid regex: "+n.message)}return o?["//",t,o]:["//",t]});p("//",(r,e)=>{let t=new RegExp(r,e||"");return()=>t});var ft=5,ut=59,mt=()=>{let r=u;return A()===ut&&y(),A(),I("else")?(y(4),!0):(O(r),!1)};w("if",ft+1,()=>{A();let r=["if",_(),X()];return mt()&&r.push(X()),r});p("if",(r,e,t)=>(r=i(r),e=i(e),t=t!==void 0?i(t):null,o=>r(o)?e(o):t?.(o)));var J=(r,e)=>{try{return{v:r(e)}}catch(t){if(t?.type===D)return{b:1};if(t?.type===z)return{c:1};if(t?.type===K)return{r:1,v:t.value};throw t}},Q=5,ct=125,dt=59;w("while",Q+1,()=>(A(),["while",_(),X()]));w("do",Q+1,()=>(r=>(A(),y(5),A(),["do",r,_()]))(X()));w("for",Q+1,()=>(A(),I("await")?(y(5),A(),["for await",_(),X()]):["for",_(),X()]));w("break",Q+1,()=>["break"]);w("continue",Q+1,()=>["continue"]);w("return",Q+1,()=>{m.asi&&(m.newline=!1),A();let r=c.charCodeAt(u);return!r||r===ct||r===dt||m.newline?["return"]:["return",d(Q)]});p("while",(r,e)=>(r=i(r),e=i(e),t=>{let o,n;for(;r(t)&&!(o=J(e,t)).b;){if(o.r)return o.v;o.c||(n=o.v)}return n}));p("do",(r,e)=>(r=i(r),e=i(e),t=>{let o,n;do{if((o=J(r,t)).b)break;if(o.r)return o.v;o.c||(n=o.v)}while(e(t));return n}));p("for",(r,e)=>{if(Array.isArray(r)&&r[0]===";"){let[,t,o,n]=r;return t=t?i(t):null,o=o?i(o):()=>!0,n=n?i(n):null,e=i(e),s=>{let l,f;for(t?.(s);o(s)&&!(l=J(e,s)).b;n?.(s)){if(l.r)return l.v;l.c||(f=l.v)}return f}}if(Array.isArray(r)&&(r[0]==="in"||r[0]==="of")){let[t,o,n]=r;if(Array.isArray(o)&&(o[0]==="let"||o[0]==="const"||o[0]==="var")&&(o=o[1]),t==="in")return ht(o,n,e);if(t==="of")return At(o,n,e)}});var At=(r,e,t)=>{e=i(e),t=i(t);let o=Array.isArray(r);return n=>{let s,l,f=o?null:n[r];for(let a of e(n)){if(o?G(r,a,n):n[r]=a,(s=J(t,n)).b)break;if(s.r)return s.v;s.c||(l=s.v)}return o||(n[r]=f),l}},ht=(r,e,t)=>{e=i(e),t=i(t);let o=Array.isArray(r);return n=>{let s,l,f=o?null:n[r];for(let a in e(n)){if(o?G(r,a,n):n[r]=a,(s=J(t,n)).b)break;if(s.r)return s.v;s.c||(l=s.v)}return o||(n[r]=f),l}};p("break",()=>()=>{throw{type:D}});p("continue",()=>()=>{throw{type:z}});p("return",r=>(r=r!==void 0?i(r):null,e=>{throw{type:K,value:r?.(e)}}));var V=5;w("try",V+1,()=>["try",U()]);Er("catch",V+1,r=>(A(),["catch",r,_(),U()]));Er("finally",V+1,r=>["finally",r,U()]);w("throw",V+1,()=>{if(m.asi&&(m.newline=!1),A(),m.newline)throw SyntaxError("Unexpected newline after throw");return["throw",d(V)]});p("try",r=>(r=r?i(r):null,e=>r?.(e)));p("catch",(r,e,t)=>{let o=r?.[1]?i(r[1]):null;return t=t?i(t):null,n=>{let s;try{s=o?.(n)}catch(l){if(l?.type===D||l?.type===z||l?.type===K)throw l;if(e!==null&&t){let f=e in n,a=n[e];n[e]=l;try{s=t(n)}finally{f?n[e]=a:delete n[e]}}else if(e===null)throw l}return s}});p("finally",(r,e)=>(r=r?i(r):null,e=e?i(e):null,t=>{let o;try{o=r?.(t)}finally{e?.(t)}return o}));p("throw",r=>(r=i(r),e=>{throw r(e)}));var ee=5,yt=20,br=58,at=59,te=125,oe=(r,e=r.charCodeAt(0),t=C[e])=>C[e]=(o,n,s)=>I(r)&&!o&&(m.reserved=1)||t?.(o,n,s);oe("case");oe("default");var re=r=>{let e=[];for(;(r=A())!==te&&!I("case")&&!I("default");){if(r===at){y();continue}e.push(d(ee-.5))||k()}return e.length>1?[";",...e]:e[0]||null},gt=()=>{A()===123||k("Expected {"),y();let r=[];for(;A()!==te;)if(I("case")){O(u+4),A();let e=d(yt-.5);A()===br&&y(),r.push(["case",e,re()])}else I("default")?(O(u+7),A()===br&&y(),r.push(["default",re()])):k("Expected case or default");return y(),r};w("switch",ee+1,()=>(A(),["switch",_(),...gt()]));p("switch",(r,...e)=>(r=i(r),e.length?(e=e.map(t=>[t[0]==="case"?i(t[1]):null,(t[0]==="case"?t[2]:t[1])?.[0]===";"?(t[0]==="case"?t[2]:t[1]).slice(1).map(i):(t[0]==="case"?t[2]:t[1])?[i(t[0]==="case"?t[2]:t[1])]:[]]),t=>{let o=r(t),n=!1,s;for(let[f,a]of e)if(n||f===null||f(t)===o)for(n=!0,l=0;l<a.length;l++)try{s=a[l](t)}catch(g){if(g?.type===D)return g.value??s;throw g}var l;return s}):t=>r(t)));var vr=5,$=10,ne=42,Et=C[ne];C[ne]=(r,e)=>r?Et?.(r,e):(y(),"*");E("from",$+1,r=>r?r[0]!=="="&&r[0]!==","&&(A(),["from",r,d($+1)]):!1);E("as",$+2,r=>r?(A(),["as",r,d($+2)]):!1);w("import",vr,()=>I(".meta")?(y(5),["import.meta"]):["import",d($)]);w("export",vr,()=>(A(),["export",d(vr)]));w("default",$+1,()=>A()!==58&&(A(),["default",d($)]));p("import",()=>()=>{});p("export",()=>()=>{});p("from",(r,e)=>()=>{});p("as",(r,e)=>()=>{});p("default",r=>i(r));var ie=5;m.asi=(r,e,t)=>{if(e>=ie)return;let o=t(ie-.5);if(o)return r?.[0]!==";"?[";",r,o]:(r.push(o),r)};export{lr as access,h as binary,i as compile,c as cur,Dr as default,k as err,d as expr,H as group,wt as id,u as idx,B as literal,Y as loc,C as lookup,pr as nary,T as next,p as operator,sr as operators,_ as parens,m as parse,O as seek,y as skip,A as space,E as token,R as unary,I as word};
|
package/justin.min.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
`),o=t.pop(),i=c.slice(Math.max(0,e-40),e),p="\u032D",
|
|
1
|
+
var u,c,d=r=>(u=0,c=r,d.newline=!1,r=A(),c[u]?v():r||""),v=(r="Unexpected token",e=u,t=c.slice(0,e).split(`
|
|
2
|
+
`),o=t.pop(),i=c.slice(Math.max(0,e-40),e),p="\u032D",f=(c[e]||" ")+p,l=c.slice(e+1,e+20))=>{throw SyntaxError(`${r} at ${t.length+1}:${o.length+1}
|
|
3
3
|
${c[e-41]!==`
|
|
4
|
-
`,""+i}${
|
|
5
|
-
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},
|
|
6
|
-
`,"/*":"*/"};var
|
|
7
|
-
`)for(;c.charCodeAt(o)>=
|
|
8
|
-
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},
|
|
4
|
+
`,""+i}${f}${l}`)},Pr=(r,e=u)=>(Array.isArray(r)&&(r.loc=e),r),w=(r,e=u,t)=>{for(;t=r(c.charCodeAt(u));)u+=t;return c.slice(e,u)},g=(r=1)=>c[u+=r],or=r=>u=r,A=(r=0,e)=>{let t,o,i,p,f=d.reserved,l;for(e&&d.asi&&(d.newline=!1),d.reserved=0;(t=d.space())&&(l=d.newline,1)&&t!==e&&(i=((p=C[t])&&p(o,r))??(d.asi&&o&&l&&(i=d.asi(o,r,A)))??(!o&&!d.reserved&&w(d.id)));)o=i,d.reserved=0;return d.reserved=f,e&&(t==e?u++:v("Unclosed "+String.fromCharCode(e-(e>42?2:1)))),o},P=d.space=(r,e=u)=>{for(;(r=c.charCodeAt(u))<=32;)d.asi&&r===10&&(d.newline=!0),u++;return r},Ie=d.id=r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||r==36||r==95||r>=192&&r!=215&&r!=247,nr=(r,e=r.length)=>c.substr(u,e)===r&&!d.id(c.charCodeAt(u+e)),ve=()=>(g(),A(0,41)),C=[],y=(r,e=32,t,o=r.charCodeAt(0),i=r.length,p=C[o],f=r.toUpperCase()!==r,l,h)=>C[o]=(E,I,R,T=u)=>(l=R,(R?r==R:(i<2||r.charCodeAt(1)===c.charCodeAt(u+1)&&(i<3||c.substr(u,i)==r))&&(!f||!d.id(c.charCodeAt(u+i)))&&(l=R=r))&&I<e&&(u+=i,(h=t(E))?Pr(h,T):(u=T,l=0,f&&h!==!1&&(d.reserved=1),!f&&!p&&v()),h)||p?.(E,I,l)),m=(r,e,t=!1)=>y(r,e,(o,i)=>o&&(i=A(e-(t?.5:0)))&&[r,o,i]),S=(r,e,t)=>y(r,e,o=>t?o&&[r,o]:!o&&(o=A(e-.5))&&[r,o]),L=(r,e)=>y(r,200,t=>!t&&[,e]),z=(r,e,t)=>{y(r,e,(o,i)=>(i=A(e-(t?.5:0)),o?.[0]!==r&&(o=[r,o||null]),i?.[0]===r?o.push(...i.slice(1)):o.push(i||null),o))},_=(r,e)=>y(r[0],e,t=>!t&&[r,A(0,r.charCodeAt(1))||null]),J=(r,e)=>y(r[0],e,t=>t&&[r,t,A(0,r.charCodeAt(1))||null]),W={},s=(r,e,t=W[r])=>W[r]=(...o)=>e(...o)||t?.(...o),n=r=>Array.isArray(r)?r[0]==null?(e=>()=>e)(r[1]):W[r[0]]?.(...r.slice(1))??v(`Unknown operator: ${r[0]}`,r?.loc):r===void 0?()=>{}:e=>e?.[r];var D=46,U=48,F=57,Lr=69,Tr=101,_r=43,Ur=45,B=95,Mr=110,Br=97,Dr=102,Fr=65,Gr=70,ir=r=>r.indexOf("_")<0?r:r.replaceAll("_",""),V=r=>{let e=ir(w(t=>t===D&&c.charCodeAt(u+1)!==D||t>=U&&t<=F||t===B||((t===Lr||t===Tr)&&((t=c.charCodeAt(u+1))>=U&&t<=F||t===_r||t===Ur)?2:0)));return c.charCodeAt(u)===Mr?(g(),[,BigInt(e)]):(r=+e)!=r?v():[,r]},Xr={2:r=>r===48||r===49||r===B,8:r=>r>=48&&r<=55||r===B,16:r=>r>=U&&r<=F||r>=Br&&r<=Dr||r>=Fr&&r<=Gr||r===B};d.number=null;C[D]=r=>!r&&c.charCodeAt(u+1)!==D&&V();for(let r=U;r<=F;r++)C[r]=e=>e?void 0:V();C[U]=r=>{if(r)return;let e=d.number;if(e){for(let[t,o]of Object.entries(e))if(t[0]==="0"&&c[u+1]?.toLowerCase()===t[1])return g(2),[,parseInt(ir(w(Xr[o])),o)]}return V()};var $r=92,sr=34,pr=39,Qr={n:`
|
|
5
|
+
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},lr=r=>(e,t,o="")=>{if(!(e||!d.string?.[String.fromCharCode(r)]))return g(),w(i=>i-r&&(i===$r?(o+=Qr[c[u+1]]||c[u+1],2):(o+=c[u],1))),c[u]===String.fromCharCode(r)?g():v("Bad string"),[,o]};C[sr]=lr(sr);C[pr]=lr(pr);d.string={'"':!0};var Hr=20;"= += -= *= /= %= |= &= ^= >>= <<=".split(" ").map(r=>m(r,Hr,!0));var mr=(r,e,t,o)=>typeof r=="string"?i=>e(i,r,i):r[0]==="."?(t=n(r[1]),o=r[2],i=>e(t(i),o,i)):r[0]==="[]"&&r.length===3?(t=n(r[1]),o=n(r[2]),i=>e(t(i),o(i),i)):r[0]==="()"&&r.length===2?mr(r[1],e):(()=>{throw Error("Invalid assignment target")})(),fr={"=":(r,e,t)=>r[e]=t,"+=":(r,e,t)=>r[e]+=t,"-=":(r,e,t)=>r[e]-=t,"*=":(r,e,t)=>r[e]*=t,"/=":(r,e,t)=>r[e]/=t,"%=":(r,e,t)=>r[e]%=t,"|=":(r,e,t)=>r[e]|=t,"&=":(r,e,t)=>r[e]&=t,"^=":(r,e,t)=>r[e]^=t,">>=":(r,e,t)=>r[e]>>=t,"<<=":(r,e,t)=>r[e]<<=t};for(let r in fr)s(r,(e,t)=>(t=n(t),mr(e,(o,i,p)=>fr[r](o,i,t(p)))));var ar=30,Kr=40,ur=140;m("!",ur);S("!",ur);m("||",ar);m("&&",Kr);s("!",r=>(r=n(r),e=>!r(e)));s("||",(r,e)=>(r=n(r),e=n(e),t=>r(t)||e(t)));s("&&",(r,e)=>(r=n(r),e=n(e),t=>r(t)&&e(t)));var jr=50,Wr=60,zr=70,cr=100,Jr=140;m("|",jr);m("&",zr);m("^",Wr);m(">>",cr);m("<<",cr);S("~",Jr);s("~",r=>(r=n(r),e=>~r(e)));s("|",(r,e)=>(r=n(r),e=n(e),t=>r(t)|e(t)));s("&",(r,e)=>(r=n(r),e=n(e),t=>r(t)&e(t)));s("^",(r,e)=>(r=n(r),e=n(e),t=>r(t)^e(t)));s(">>",(r,e)=>(r=n(r),e=n(e),t=>r(t)>>e(t)));s("<<",(r,e)=>(r=n(r),e=n(e),t=>r(t)<<e(t)));var G=90;m("<",G);m(">",G);m("<=",G);m(">=",G);s(">",(r,e)=>(r=n(r),e=n(e),t=>r(t)>e(t)));s("<",(r,e)=>(r=n(r),e=n(e),t=>r(t)<e(t)));s(">=",(r,e)=>(r=n(r),e=n(e),t=>r(t)>=e(t)));s("<=",(r,e)=>(r=n(r),e=n(e),t=>r(t)<=e(t)));var dr=80;m("==",dr);m("!=",dr);s("==",(r,e)=>(r=n(r),e=n(e),t=>r(t)==e(t)));s("!=",(r,e)=>(r=n(r),e=n(e),t=>r(t)!=e(t)));var Ar=110,Y=120,gr=140;m("+",Ar);m("-",Ar);m("*",Y);m("/",Y);m("%",Y);S("+",gr);S("-",gr);s("+",(r,e)=>e!==void 0?(r=n(r),e=n(e),t=>r(t)+e(t)):(r=n(r),t=>+r(t)));s("-",(r,e)=>e!==void 0?(r=n(r),e=n(e),t=>r(t)-e(t)):(r=n(r),t=>-r(t)));s("*",(r,e)=>(r=n(r),e=n(e),t=>r(t)*e(t)));s("/",(r,e)=>(r=n(r),e=n(e),t=>r(t)/e(t)));s("%",(r,e)=>(r=n(r),e=n(e),t=>r(t)%e(t)));var X=150;y("++",X,r=>r?["++",r,null]:["++",A(X-1)]);y("--",X,r=>r?["--",r,null]:["--",A(X-1)]);var Z=(r,e,t,o)=>typeof r=="string"?i=>e(i,r):r[0]==="."?(t=n(r[1]),o=r[2],i=>e(t(i),o)):r[0]==="[]"&&r.length===3?(t=n(r[1]),o=n(r[2]),i=>e(t(i),o(i))):r[0]==="()"&&r.length===2?Z(r[1],e):(()=>{throw Error("Invalid increment target")})();s("++",(r,e)=>Z(r,e===null?(t,o)=>t[o]++:(t,o)=>++t[o]));s("--",(r,e)=>Z(r,e===null?(t,o)=>t[o]--:(t,o)=>--t[o]));var Vr=5,Yr=10,Zr=170;_("()",Zr);z(",",Yr);z(";",Vr,!0);var hr=(...r)=>(r=r.map(n),e=>{let t;for(let o of r)t=o(e);return t});s(",",hr);s(";",hr);var N=r=>r?.[0]==="_"&&r[1]==="_"||r==="constructor"||r==="prototype",q=170;J("[]",q);m(".",q);J("()",q);var $=r=>{throw Error(r)};s("[]",(r,e)=>e===void 0?(r=r?r[0]===","?r.slice(1):[r]:[],r=r.map(t=>t==null?(()=>{}):t[0]==="..."?(t=n(t[1]),o=>t(o)):(t=n(t),o=>[t(o)])),t=>r.flatMap(o=>o(t))):(e==null&&$("Missing index"),r=n(r),e=n(e),t=>{let o=e(t);return N(o)?void 0:r(t)[o]}));s(".",(r,e)=>(r=n(r),e=e[0]?e:e[1],N(e)?()=>{}:t=>r(t)[e]));s("()",(r,e)=>{if(e===void 0)return r==null?$("Empty ()"):n(r);let t=i=>i?.[0]===","&&i.slice(1).some(p=>p==null||t(p));t(e)&&$("Empty argument");let o=e?e[0]===","?(e=e.slice(1).map(n),i=>e.map(p=>p(i))):(e=n(e),i=>[e(i)]):()=>[];return x(r,(i,p,f)=>i[p](...o(f)))});var k=r=>typeof r=="string"||Array.isArray(r)&&(r[0]==="."||r[0]==="?."||r[0]==="[]"&&r.length===3||r[0]==="?.[]"||r[0]==="()"&&r.length===2&&k(r[1])||r[0]==="{}"),x=(r,e,t,o)=>r==null?$("Empty ()"):r[0]==="()"&&r.length==2?x(r[1],e):typeof r=="string"?i=>e(i,r,i):r[0]==="."?(t=n(r[1]),o=r[2],i=>e(t(i),o,i)):r[0]==="?."?(t=n(r[1]),o=r[2],i=>{let p=t(i);return p==null?void 0:e(p,o,i)}):r[0]==="[]"&&r.length===3?(t=n(r[1]),o=n(r[2]),i=>e(t(i),o(i),i)):r[0]==="?.[]"?(t=n(r[1]),o=n(r[2]),i=>{let p=t(i);return p==null?void 0:e(p,o(i),i)}):(r=n(r),i=>e([r(i)],0,i)),O=x;var yr=new WeakMap,qr=(r,...e)=>typeof r=="string"?n(d(r)):yr.get(r)||yr.set(r,xr(r,e)).get(r),Cr=57344,xr=(r,e)=>{let t=r.reduce((p,f,l)=>p+(l?String.fromCharCode(Cr+l-1):"")+f,""),o=d(t),i=p=>{if(typeof p=="string"&&p.length===1){let f=p.charCodeAt(0)-Cr,l;if(f>=0&&f<e.length)return l=e[f],br(l)?l:[,l]}return Array.isArray(p)?p.map(i):p};return n(i(o))},br=r=>typeof r=="string"||Array.isArray(r)&&(typeof r[0]=="string"||r[0]===void 0),re=qr;var ee=32,te=d.space;d.comment??={"//":`
|
|
6
|
+
`,"/*":"*/"};var b;d.space=()=>{b||(b=Object.entries(d.comment).map(([i,p])=>[i,p,i.charCodeAt(0)]));for(var r;r=te();){for(var e=0,t;t=b[e++];)if(r===t[2]&&c.substr(u,t[0].length)===t[0]){var o=u+t[0].length;if(t[1]===`
|
|
7
|
+
`)for(;c.charCodeAt(o)>=ee;)o++;else{for(;c[o]&&c.substr(o,t[1].length)!==t[1];)o++;c[o]&&(o+=t[1].length)}or(o),r=0;break}if(r)return r}return r};var Sr=80;m("===",Sr);m("!==",Sr);s("===",(r,e)=>(r=n(r),e=n(e),t=>r(t)===e(t)));s("!==",(r,e)=>(r=n(r),e=n(e),t=>r(t)!==e(t)));var oe=30;m("??",oe);s("??",(r,e)=>(r=n(r),e=n(e),t=>r(t)??e(t)));var ne=130,ie=20;m("**",ne,!0);m("**=",ie,!0);s("**",(r,e)=>(r=n(r),e=n(e),t=>r(t)**e(t)));var se=r=>{throw Error(r)};s("**=",(r,e)=>(k(r)||se("Invalid assignment target"),e=n(e),O(r,(t,o,i)=>t[o]**=e(i))));var Er=90;m("in",Er);m("of",Er);s("in",(r,e)=>(r=n(r),e=n(e),t=>r(t)in e(t)));var pe=20,le=100,fe=r=>{throw Error(r)};m(">>>",le);m(">>>=",pe,!0);s(">>>",(r,e)=>(r=n(r),e=n(e),t=>r(t)>>>e(t)));s(">>>=",(r,e)=>(k(r)||fe("Invalid assignment target"),e=n(e),O(r,(t,o,i)=>t[o]>>>=e(i))));var me=r=>r[0]?.[0]===","?r[0].slice(1):r,Q=(r,e,t)=>{if(typeof r=="string"){t[r]=e;return}let[o,...i]=r,p=me(i);if(o==="{}"){let f=[];for(let l of p){if(Array.isArray(l)&&l[0]==="..."){let T={};for(let j in e)f.includes(j)||(T[j]=e[j]);t[l[1]]=T;break}let h,E,I;typeof l=="string"?h=E=l:l[0]==="="?(typeof l[1]=="string"?h=E=l[1]:[,h,E]=l[1],I=l[2]):[,h,E]=l,f.push(h);let R=e[h];R===void 0&&I&&(R=n(I)(t)),Q(E,R,t)}}else if(o==="[]"){let f=0;for(let l of p){if(l===null){f++;continue}if(Array.isArray(l)&&l[0]==="..."){t[l[1]]=e.slice(f);break}let h=l,E;Array.isArray(l)&&l[0]==="="&&([,h,E]=l);let I=e[f++];I===void 0&&E&&(I=n(E)(t)),Q(h,I,t)}}};var rr=20,H=r=>{throw Error(r)};m("||=",rr,!0);m("&&=",rr,!0);m("??=",rr,!0);s("=",(r,e)=>{if(Array.isArray(r)&&(r[0]==="let"||r[0]==="const"||r[0]==="var")){let t=r[1];return e=n(e),typeof t=="string"?o=>{o[t]=e(o)}:o=>Q(t,e(o),o)}return k(r)||H("Invalid assignment target"),e=n(e),O(r,(t,o,i)=>t[o]=e(i))});s("||=",(r,e)=>(k(r)||H("Invalid assignment target"),e=n(e),O(r,(t,o,i)=>t[o]||=e(i))));s("&&=",(r,e)=>(k(r)||H("Invalid assignment target"),e=n(e),O(r,(t,o,i)=>t[o]&&=e(i))));s("??=",(r,e)=>(k(r)||H("Invalid assignment target"),e=n(e),O(r,(t,o,i)=>t[o]??=e(i))));L("true",!0);L("false",!1);L("null",null);y("undefined",200,r=>!r&&[]);L("NaN",NaN);L("Infinity",1/0);var er=20;y("?",er,(r,e,t)=>r&&(e=A(er-1))&&w(o=>o===58)&&(t=A(er-1),["?",r,e,t]));s("?",(r,e,t)=>(r=n(r),e=n(e),t=n(t),o=>r(o)?e(o):t(o)));var ue=20;m("=>",ue,!0);s("=>",(r,e)=>{r=r[0]==="()"?r[1]:r,r=r?r[0]===","?r.slice(1):[r]:[];let t=-1,o=null;return r.length&&Array.isArray(r[r.length-1])&&r[r.length-1][0]==="..."&&(t=r.length-1,o=r[t][1],r=r.slice(0,-1)),e=n(e[0]==="{}"?e[1]:e),(i=null)=>(i=Object.create(i),(...p)=>(r.forEach((f,l)=>i[f]=p[l]),o&&(i[o]=p.slice(t)),e(i)))});var ce=140;S("...",ce);s("...",r=>(r=n(r),e=>Object.entries(r(e))));var Ir=170;y("?.",Ir,(r,e)=>{if(!r)return;let t=P();return t===40?(g(),["?.()",r,A(0,41)||null]):t===91?(g(),["?.[]",r,A(0,93)]):(e=A(Ir),e?["?.",r,e]:void 0)});s("?.",(r,e)=>(r=n(r),N(e)?()=>{}:t=>r(t)?.[e]));s("?.[]",(r,e)=>(r=n(r),e=n(e),t=>{let o=e(t);return N(o)?void 0:r(t)?.[o]}));s("?.()",(r,e)=>{let t=e?e[0]===","?(e=e.slice(1).map(n),i=>e.map(p=>p(i))):(e=n(e),i=>[e(i)]):()=>[];if(r[0]==="?."){let i=n(r[1]),p=r[2];return N(p)?()=>{}:f=>i(f)?.[p]?.(...t(f))}if(r[0]==="?.[]"){let i=n(r[1]),p=n(r[2]);return f=>{let l=i(f),h=p(f);return N(h)?void 0:l?.[h]?.(...t(f))}}if(r[0]==="."){let i=n(r[1]),p=r[2];return N(p)?()=>{}:f=>i(f)?.[p]?.(...t(f))}if(r[0]==="[]"&&r.length===3){let i=n(r[1]),p=n(r[2]);return f=>{let l=i(f),h=p(f);return N(h)?void 0:l?.[h]?.(...t(f))}}let o=n(r);return i=>o(i)?.(...t(i))});var M=140;S("typeof",M);S("void",M);S("delete",M);y("new",M,r=>!r&&(nr(".target")?(g(7),["new.target"]):["new",A(M)]));s("typeof",r=>(r=n(r),e=>typeof r(e)));s("void",r=>(r=n(r),e=>(r(e),void 0)));s("delete",r=>{if(r[0]==="."){let e=n(r[1]),t=r[2];return o=>delete e(o)[t]}if(r[0]==="[]"){let e=n(r[1]),t=n(r[2]);return o=>delete e(o)[t(o)]}return()=>!0});s("new",r=>{let e=n(r?.[0]==="()"?r[1]:r),t=r?.[0]==="()"?r[2]:null,o=t?t[0]===","?(i=>p=>i.map(f=>f(p)))(t.slice(1).map(n)):(i=>p=>[i(p)])(n(t)):()=>[];return i=>new(e(i))(...o(i))});var a=Symbol("accessor"),tr=20,de=40,vr=41,wr=123,kr=125,Nr=r=>e=>{if(e)return;P();let t=w(d.id);if(!t||(P(),c.charCodeAt(u)!==de))return!1;g();let o=A(0,vr);return P(),c.charCodeAt(u)!==wr?!1:(g(),[r,t,o,A(0,kr)])};y("get",tr-1,Nr("get"));y("set",tr-1,Nr("set"));y("(",tr-1,r=>{if(!r||typeof r!="string")return;let e=A(0,vr)||null;if(P(),c.charCodeAt(u)===wr)return g(),[":",r,["=>",["()",e],A(0,kr)||null]]});s("get",(r,e)=>(e=e?n(e):()=>{},t=>[[a,r,{get:function(){let o=Object.create(t||{});return o.this=this,e(o)}}]]));s("set",(r,e,t)=>(t=t?n(t):()=>{},o=>[[a,r,{set:function(i){let p=Object.create(o||{});p.this=this,p[e]=i,t(p)}}]]));var Ae=20,Or=200;_("[]",Or);_("{}",Or);m(":",Ae-1,!0);s("{}",(r,e)=>{if(e!==void 0)return;r=r?r[0]!==","?[r]:r.slice(1):[];let t=r.map(o=>n(typeof o=="string"?[":",o,o]:o));return o=>{let i={},p={};for(let f of t.flatMap(l=>l(o)))if(f[0]===a){let[,l,h]=f;p[l]={...p[l],...h,configurable:!0,enumerable:!0}}else i[f[0]]=f[1];for(let f in p)Object.defineProperty(i,f,p[f]);return i}});s(":",(r,e)=>(e=n(e),Array.isArray(r)?(r=n(r),t=>[[r(t),e(t)]]):t=>[[r,e(t)]]));var ge=170,K=96,he=36,ye=123,Ce=92,Se={n:`
|
|
8
|
+
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},Rr=()=>{let r=[];for(let e="",t;(t=c.charCodeAt(u))!==K;)t?t===Ce?(g(),e+=Se[c[u]]||c[u],g()):t===he&&c.charCodeAt(u+1)===ye?(e&&r.push([,e]),e="",g(2),r.push(A(0,125))):(e+=c[u],g(),t=c.charCodeAt(u),t===K&&e&&r.push([,e])):v("Unterminated template");return g(),r},Ee=C[K];C[K]=(r,e)=>r&&e<ge?d.asi&&d.newline?void 0:(g(),["``",r,...Rr()]):r?Ee?.(r,e):(g(),(t=>t.length<2&&t[0]?.[0]===void 0?t[0]||[,""]:["`",...t])(Rr()));s("`",(...r)=>(r=r.map(n),e=>r.map(t=>t(e)).join("")));s("``",(r,...e)=>{r=n(r);let t=[],o=[];for(let p of e)Array.isArray(p)&&p[0]===void 0?t.push(p[1]):o.push(n(p));let i=Object.assign([...t],{raw:t});return p=>r(p)(i,...o.map(f=>f(p)))});d.string["'"]=!0;d.number={"0x":16,"0b":2,"0o":8};export{J as access,m as binary,n as compile,c as cur,re as default,v as err,A as expr,_ as group,Ie as id,u as idx,L as literal,Pr as loc,C as lookup,z as nary,w as next,s as operator,W as operators,ve as parens,d as parse,or as seek,g as skip,P as space,y as token,S as unary,nr as word};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "subscript",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.1.1",
|
|
4
4
|
"description": "Tiny expression parser & evaluator",
|
|
5
5
|
"main": "subscript.js",
|
|
6
6
|
"module": "subscript.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"scripts": {
|
|
31
31
|
"build": "esbuild subscript.js --bundle --minify --format=esm --outfile=subscript.min.js && esbuild justin.js --bundle --minify --format=esm --outfile=justin.min.js && esbuild jessie.js --bundle --minify --format=esm --outfile=jessie.min.js",
|
|
32
32
|
"prepublishOnly": "npm run build",
|
|
33
|
-
"test": "node test/test.js",
|
|
33
|
+
"test": "node --import ./test/https-loader.js test/test.js",
|
|
34
34
|
"check-types": "tsc --noEmit subscript.d.ts"
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
@@ -77,6 +77,6 @@
|
|
|
77
77
|
"@playwright/test": "^1.57.0",
|
|
78
78
|
"esbuild": "^0.27.2",
|
|
79
79
|
"terser": "^5.44.1",
|
|
80
|
-
"tst": "^9.2.
|
|
80
|
+
"tst": "^9.2.1"
|
|
81
81
|
}
|
|
82
82
|
}
|
package/parse.js
CHANGED
|
@@ -137,9 +137,10 @@ export const operator = (op, fn, prev = operators[op]) =>
|
|
|
137
137
|
(operators[op] = (...args) => fn(...args) || prev?.(...args));
|
|
138
138
|
|
|
139
139
|
// Compile AST to evaluator function
|
|
140
|
+
// Note: [, value] serializes to [null, value] in JSON, both forms accepted
|
|
140
141
|
export const compile = node => (
|
|
141
142
|
!Array.isArray(node) ? (node === undefined ? () => undefined : ctx => ctx?.[node]) :
|
|
142
|
-
node[0]
|
|
143
|
+
node[0] == null ? (v => () => v)(node[1]) : // == catches both undefined and null
|
|
143
144
|
operators[node[0]]?.(...node.slice(1)) ?? err(`Unknown operator: ${node[0]}`, node?.loc)
|
|
144
145
|
);
|
|
145
146
|
|
package/subscript.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var l,f,u=r=>(l=0,f=r,u.newline=!1,r=c(),f[l]?C():r||""),C=(r="Unexpected token",e=l,t=f.slice(0,e).split(`
|
|
2
2
|
`),o=t.pop(),i=f.slice(Math.max(0,e-40),e),p="\u032D",A=(f[e]||" ")+p,d=f.slice(e+1,e+20))=>{throw SyntaxError(`${r} at ${t.length+1}:${o.length+1}
|
|
3
3
|
${f[e-41]!==`
|
|
4
|
-
`,""+i}${A}${d}`)},or=(r,e=l)=>(Array.isArray(r)&&(r.loc=e),r),E=(r,e=l,t)=>{for(;t=r(f.charCodeAt(l));)l+=t;return f.slice(e,l)},y=(r=1)=>f[l+=r],Dr=r=>l=r,c=(r=0,e)=>{let t,o,i,p,A=u.reserved,d;for(e&&u.asi&&(u.newline=!1),u.reserved=0;(t=u.space())&&(d=u.newline,1)&&t!==e&&(i=((p=g[t])&&p(o,r))??(u.asi&&o&&d&&(i=u.asi(o,r,c)))??(!o&&!u.reserved&&E(u.id)));)o=i,u.reserved=0;return u.reserved=A,e&&(t==e?l++:C("Unclosed "+String.fromCharCode(e-(e>42?2:1)))),o},Mr=u.space=(r,e=l)=>{for(;(r=f.charCodeAt(l))<=32;)u.asi&&r===10&&(u.newline=!0),l++;return r},Or=u.id=r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||r==36||r==95||r>=192&&r!=215&&r!=247,Lr=(r,e=r.length)=>f.substr(l,e)===r&&!u.id(f.charCodeAt(l+e)),Nr=()=>(y(),c(0,41)),g=[],h=(r,e=32,t,o=r.charCodeAt(0),i=r.length,p=g[o],A=r.toUpperCase()!==r,d,w)=>g[o]=(X,Q,I,B=l)=>(d=I,(I?r==I:(i<2||r.charCodeAt(1)===f.charCodeAt(l+1)&&(i<3||f.substr(l,i)==r))&&(!A||!u.id(f.charCodeAt(l+i)))&&(d=I=r))&&Q<e&&(l+=i,(w=t(X))?or(w,B):(l=B,d=0,A&&w!==!1&&(u.reserved=1),!A&&!p&&C()),w)||p?.(X,Q,d)),m=(r,e,t=!1)=>h(r,e,(o,i)=>o&&(i=c(e-(t?.5:0)))&&[r,o,i]),S=(r,e,t)=>h(r,e,o=>t?o&&[r,o]:!o&&(o=c(e-.5))&&[r,o]),$r=(r,e)=>h(r,200,t=>!t&&[,e]),O=(r,e,t)=>{h(r,e,(o,i)=>(i=c(e-(t?.5:0)),o?.[0]!==r&&(o=[r,o||null]),i?.[0]===r?o.push(...i.slice(1)):o.push(i||null),o))},H=(r,e)=>h(r[0],e,t=>!t&&[r,c(0,r.charCodeAt(1))||null]),L=(r,e)=>h(r[0],e,t=>t&&[r,t,c(0,r.charCodeAt(1))||null]),M={},s=(r,e,t=M[r])=>M[r]=(...o)=>e(...o)||t?.(...o),n=r=>Array.isArray(r)?r[0]
|
|
4
|
+
`,""+i}${A}${d}`)},or=(r,e=l)=>(Array.isArray(r)&&(r.loc=e),r),E=(r,e=l,t)=>{for(;t=r(f.charCodeAt(l));)l+=t;return f.slice(e,l)},y=(r=1)=>f[l+=r],Dr=r=>l=r,c=(r=0,e)=>{let t,o,i,p,A=u.reserved,d;for(e&&u.asi&&(u.newline=!1),u.reserved=0;(t=u.space())&&(d=u.newline,1)&&t!==e&&(i=((p=g[t])&&p(o,r))??(u.asi&&o&&d&&(i=u.asi(o,r,c)))??(!o&&!u.reserved&&E(u.id)));)o=i,u.reserved=0;return u.reserved=A,e&&(t==e?l++:C("Unclosed "+String.fromCharCode(e-(e>42?2:1)))),o},Mr=u.space=(r,e=l)=>{for(;(r=f.charCodeAt(l))<=32;)u.asi&&r===10&&(u.newline=!0),l++;return r},Or=u.id=r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||r==36||r==95||r>=192&&r!=215&&r!=247,Lr=(r,e=r.length)=>f.substr(l,e)===r&&!u.id(f.charCodeAt(l+e)),Nr=()=>(y(),c(0,41)),g=[],h=(r,e=32,t,o=r.charCodeAt(0),i=r.length,p=g[o],A=r.toUpperCase()!==r,d,w)=>g[o]=(X,Q,I,B=l)=>(d=I,(I?r==I:(i<2||r.charCodeAt(1)===f.charCodeAt(l+1)&&(i<3||f.substr(l,i)==r))&&(!A||!u.id(f.charCodeAt(l+i)))&&(d=I=r))&&Q<e&&(l+=i,(w=t(X))?or(w,B):(l=B,d=0,A&&w!==!1&&(u.reserved=1),!A&&!p&&C()),w)||p?.(X,Q,d)),m=(r,e,t=!1)=>h(r,e,(o,i)=>o&&(i=c(e-(t?.5:0)))&&[r,o,i]),S=(r,e,t)=>h(r,e,o=>t?o&&[r,o]:!o&&(o=c(e-.5))&&[r,o]),$r=(r,e)=>h(r,200,t=>!t&&[,e]),O=(r,e,t)=>{h(r,e,(o,i)=>(i=c(e-(t?.5:0)),o?.[0]!==r&&(o=[r,o||null]),i?.[0]===r?o.push(...i.slice(1)):o.push(i||null),o))},H=(r,e)=>h(r[0],e,t=>!t&&[r,c(0,r.charCodeAt(1))||null]),L=(r,e)=>h(r[0],e,t=>t&&[r,t,c(0,r.charCodeAt(1))||null]),M={},s=(r,e,t=M[r])=>M[r]=(...o)=>e(...o)||t?.(...o),n=r=>Array.isArray(r)?r[0]==null?(e=>()=>e)(r[1]):M[r[0]]?.(...r.slice(1))??C(`Unknown operator: ${r[0]}`,r?.loc):r===void 0?()=>{}:e=>e?.[r];var U=46,_=48,v=57,nr=69,ir=101,sr=43,lr=45,T=95,pr=110,ur=97,mr=102,fr=65,dr=70,G=r=>r.indexOf("_")<0?r:r.replaceAll("_",""),N=r=>{let e=G(E(t=>t===U&&f.charCodeAt(l+1)!==U||t>=_&&t<=v||t===T||((t===nr||t===ir)&&((t=f.charCodeAt(l+1))>=_&&t<=v||t===sr||t===lr)?2:0)));return f.charCodeAt(l)===pr?(y(),[,BigInt(e)]):(r=+e)!=r?C():[,r]},Ar={2:r=>r===48||r===49||r===T,8:r=>r>=48&&r<=55||r===T,16:r=>r>=_&&r<=v||r>=ur&&r<=mr||r>=fr&&r<=dr||r===T};u.number=null;g[U]=r=>!r&&f.charCodeAt(l+1)!==U&&N();for(let r=_;r<=v;r++)g[r]=e=>e?void 0:N();g[_]=r=>{if(r)return;let e=u.number;if(e){for(let[t,o]of Object.entries(e))if(t[0]==="0"&&f[l+1]?.toLowerCase()===t[1])return y(2),[,parseInt(G(E(Ar[o])),o)]}return N()};var cr=92,W=34,z=39,gr={n:`
|
|
5
5
|
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},J=r=>(e,t,o="")=>{if(!(e||!u.string?.[String.fromCharCode(r)]))return y(),E(i=>i-r&&(i===cr?(o+=gr[f[l+1]]||f[l+1],2):(o+=f[l],1))),f[l]===String.fromCharCode(r)?y():C("Bad string"),[,o]};g[W]=J(W);g[z]=J(z);u.string={'"':!0};var hr=20;"= += -= *= /= %= |= &= ^= >>= <<=".split(" ").map(r=>m(r,hr,!0));var V=(r,e,t,o)=>typeof r=="string"?i=>e(i,r,i):r[0]==="."?(t=n(r[1]),o=r[2],i=>e(t(i),o,i)):r[0]==="[]"&&r.length===3?(t=n(r[1]),o=n(r[2]),i=>e(t(i),o(i),i)):r[0]==="()"&&r.length===2?V(r[1],e):(()=>{throw Error("Invalid assignment target")})(),K={"=":(r,e,t)=>r[e]=t,"+=":(r,e,t)=>r[e]+=t,"-=":(r,e,t)=>r[e]-=t,"*=":(r,e,t)=>r[e]*=t,"/=":(r,e,t)=>r[e]/=t,"%=":(r,e,t)=>r[e]%=t,"|=":(r,e,t)=>r[e]|=t,"&=":(r,e,t)=>r[e]&=t,"^=":(r,e,t)=>r[e]^=t,">>=":(r,e,t)=>r[e]>>=t,"<<=":(r,e,t)=>r[e]<<=t};for(let r in K)s(r,(e,t)=>(t=n(t),V(e,(o,i,p)=>K[r](o,i,t(p)))));var Cr=30,yr=40,Y=140;m("!",Y);S("!",Y);m("||",Cr);m("&&",yr);s("!",r=>(r=n(r),e=>!r(e)));s("||",(r,e)=>(r=n(r),e=n(e),t=>r(t)||e(t)));s("&&",(r,e)=>(r=n(r),e=n(e),t=>r(t)&&e(t)));var Sr=50,Er=60,_r=70,Z=100,wr=140;m("|",Sr);m("&",_r);m("^",Er);m(">>",Z);m("<<",Z);S("~",wr);s("~",r=>(r=n(r),e=>~r(e)));s("|",(r,e)=>(r=n(r),e=n(e),t=>r(t)|e(t)));s("&",(r,e)=>(r=n(r),e=n(e),t=>r(t)&e(t)));s("^",(r,e)=>(r=n(r),e=n(e),t=>r(t)^e(t)));s(">>",(r,e)=>(r=n(r),e=n(e),t=>r(t)>>e(t)));s("<<",(r,e)=>(r=n(r),e=n(e),t=>r(t)<<e(t)));var P=90;m("<",P);m(">",P);m("<=",P);m(">=",P);s(">",(r,e)=>(r=n(r),e=n(e),t=>r(t)>e(t)));s("<",(r,e)=>(r=n(r),e=n(e),t=>r(t)<e(t)));s(">=",(r,e)=>(r=n(r),e=n(e),t=>r(t)>=e(t)));s("<=",(r,e)=>(r=n(r),e=n(e),t=>r(t)<=e(t)));var q=80;m("==",q);m("!=",q);s("==",(r,e)=>(r=n(r),e=n(e),t=>r(t)==e(t)));s("!=",(r,e)=>(r=n(r),e=n(e),t=>r(t)!=e(t)));var x=110,$=120,j=140;m("+",x);m("-",x);m("*",$);m("/",$);m("%",$);S("+",j);S("-",j);s("+",(r,e)=>e!==void 0?(r=n(r),e=n(e),t=>r(t)+e(t)):(r=n(r),t=>+r(t)));s("-",(r,e)=>e!==void 0?(r=n(r),e=n(e),t=>r(t)-e(t)):(r=n(r),t=>-r(t)));s("*",(r,e)=>(r=n(r),e=n(e),t=>r(t)*e(t)));s("/",(r,e)=>(r=n(r),e=n(e),t=>r(t)/e(t)));s("%",(r,e)=>(r=n(r),e=n(e),t=>r(t)%e(t)));var R=150;h("++",R,r=>r?["++",r,null]:["++",c(R-1)]);h("--",R,r=>r?["--",r,null]:["--",c(R-1)]);var F=(r,e,t,o)=>typeof r=="string"?i=>e(i,r):r[0]==="."?(t=n(r[1]),o=r[2],i=>e(t(i),o)):r[0]==="[]"&&r.length===3?(t=n(r[1]),o=n(r[2]),i=>e(t(i),o(i))):r[0]==="()"&&r.length===2?F(r[1],e):(()=>{throw Error("Invalid increment target")})();s("++",(r,e)=>F(r,e===null?(t,o)=>t[o]++:(t,o)=>++t[o]));s("--",(r,e)=>F(r,e===null?(t,o)=>t[o]--:(t,o)=>--t[o]));var Ir=5,Tr=10,Ur=170;H("()",Ur);O(",",Tr);O(";",Ir,!0);var a=(...r)=>(r=r.map(n),e=>{let t;for(let o of r)t=o(e);return t});s(",",a);s(";",a);var b=r=>r?.[0]==="_"&&r[1]==="_"||r==="constructor"||r==="prototype",k=170;L("[]",k);m(".",k);L("()",k);var D=r=>{throw Error(r)};s("[]",(r,e)=>e===void 0?(r=r?r[0]===","?r.slice(1):[r]:[],r=r.map(t=>t==null?(()=>{}):t[0]==="..."?(t=n(t[1]),o=>t(o)):(t=n(t),o=>[t(o)])),t=>r.flatMap(o=>o(t))):(e==null&&D("Missing index"),r=n(r),e=n(e),t=>{let o=e(t);return b(o)?void 0:r(t)[o]}));s(".",(r,e)=>(r=n(r),e=e[0]?e:e[1],b(e)?()=>{}:t=>r(t)[e]));s("()",(r,e)=>{if(e===void 0)return r==null?D("Empty ()"):n(r);let t=i=>i?.[0]===","&&i.slice(1).some(p=>p==null||t(p));t(e)&&D("Empty argument");let o=e?e[0]===","?(e=e.slice(1).map(n),i=>e.map(p=>p(i))):(e=n(e),i=>[e(i)]):()=>[];return rr(r,(i,p,A)=>i[p](...o(A)))});var rr=(r,e,t,o)=>r==null?D("Empty ()"):r[0]==="()"&&r.length==2?rr(r[1],e):typeof r=="string"?i=>e(i,r,i):r[0]==="."?(t=n(r[1]),o=r[2],i=>e(t(i),o,i)):r[0]==="?."?(t=n(r[1]),o=r[2],i=>{let p=t(i);return p==null?void 0:e(p,o,i)}):r[0]==="[]"&&r.length===3?(t=n(r[1]),o=n(r[2]),i=>e(t(i),o(i),i)):r[0]==="?.[]"?(t=n(r[1]),o=n(r[2]),i=>{let p=t(i);return p==null?void 0:e(p,o(i),i)}):(r=n(r),i=>e([r(i)],0,i));var er=new WeakMap,vr=(r,...e)=>typeof r=="string"?n(u(r)):er.get(r)||er.set(r,Pr(r,e)).get(r),tr=57344,Pr=(r,e)=>{let t=r.reduce((p,A,d)=>p+(d?String.fromCharCode(tr+d-1):"")+A,""),o=u(t),i=p=>{if(typeof p=="string"&&p.length===1){let A=p.charCodeAt(0)-tr,d;if(A>=0&&A<e.length)return d=e[A],Rr(d)?d:[,d]}return Array.isArray(p)?p.map(i):p};return n(i(o))},Rr=r=>typeof r=="string"||Array.isArray(r)&&(typeof r[0]=="string"||r[0]===void 0),le=vr;export{L as access,m as binary,n as compile,f as cur,le as default,C as err,c as expr,H as group,Or as id,l as idx,$r as literal,or as loc,g as lookup,O as nary,E as next,s as operator,M as operators,Nr as parens,u as parse,Dr as seek,y as skip,Mr as space,h as token,S as unary,Lr as word};
|
package/util/stringify.js
CHANGED
|
@@ -25,8 +25,11 @@ export const codegen = node => {
|
|
|
25
25
|
// Literal: [, value]
|
|
26
26
|
if (op === undefined) return typeof args[0] === 'string' ? JSON.stringify(args[0]) : String(args[0]);
|
|
27
27
|
|
|
28
|
-
// Custom generator
|
|
29
|
-
if (generators[op])
|
|
28
|
+
// Custom generator (if returns result, use it; undefined falls through)
|
|
29
|
+
if (generators[op]) {
|
|
30
|
+
const result = generators[op](...args);
|
|
31
|
+
if (result !== undefined) return result;
|
|
32
|
+
}
|
|
30
33
|
|
|
31
34
|
// Brackets: [], {}, ()
|
|
32
35
|
if (op === '[]' || op === '{}' || op === '()') {
|
|
@@ -143,6 +146,9 @@ generator(':', (k, v) => (typeof k === 'string' ? k : '[' + codegen(k) + ']') +
|
|
|
143
146
|
generator('`', (...parts) => '`' + parts.map(p => p?.[0] === undefined ? String(p[1]).replace(/`/g, '\\`').replace(/\$/g, '\\$') : '${' + codegen(p) + '}').join('') + '`');
|
|
144
147
|
generator('``', (tag, ...parts) => codegen(tag) + '`' + parts.map(p => p?.[0] === undefined ? String(p[1]).replace(/`/g, '\\`').replace(/\$/g, '\\$') : '${' + codegen(p) + '}').join('') + '`');
|
|
145
148
|
|
|
149
|
+
// Regex constructor: ['//', pattern, flags?]
|
|
150
|
+
generator('//', (a, b) => '/' + a + '/' + (b || ''));
|
|
151
|
+
|
|
146
152
|
// Getter/Setter
|
|
147
153
|
generator('get', (name, body) => 'get ' + name + '() { ' + (body ? codegen(body) : '') + ' }');
|
|
148
154
|
generator('set', (name, param, body) => 'set ' + name + '(' + param + ') { ' + (body ? codegen(body) : '') + ' }');
|