subscript 7.5.1 → 7.5.3
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/justin.js +12 -5
- package/justin.min.js +1 -1
- package/package.json +1 -1
- package/parse.js +4 -9
- package/subscript.js +3 -3
- package/subscript.min.js +1 -1
package/justin.js
CHANGED
|
@@ -34,16 +34,23 @@ set('??', PREC_OR, (a, b) => a ?? b)
|
|
|
34
34
|
token('?.', PREC_CALL, a => a && ['?.', a])
|
|
35
35
|
operator('?.', a => (a = compile(a), ctx => a(ctx) || (() => { })))
|
|
36
36
|
|
|
37
|
-
// a?.b - optional chain operator
|
|
38
|
-
token('?.', PREC_CALL, (a, b) => a && (b = expr(PREC_CALL), !b?.map) && ['?.', a, b])
|
|
37
|
+
// a?.b, a?.() - optional chain operator
|
|
38
|
+
token('?.', PREC_CALL, (a, b) => a && (b = expr(PREC_CALL), !b?.map) && (b ? ['?.', a, b] : ['?.', a, b]))
|
|
39
39
|
operator('?.', (a, b) => b && (a = compile(a), ctx => a(ctx)?.[b]))
|
|
40
40
|
|
|
41
|
-
// a?.x() - keep context
|
|
42
|
-
operator('(', (a, b, path,
|
|
41
|
+
// a?.x() - keep context, but watch out a?.()
|
|
42
|
+
operator('(', (a, b, container, args, path, optional) => (b != null) && (a[0] === '?.') && (a[2] || Array.isArray(a[1])) && (
|
|
43
43
|
args = b == '' ? () => [] : // a()
|
|
44
44
|
b[0] === ',' ? (b = b.slice(1).map(compile), ctx => b.map(a => a(ctx))) : // a(b,c)
|
|
45
45
|
(b = compile(b), ctx => [b(ctx)]), // a(b)
|
|
46
|
-
|
|
46
|
+
// a?.()
|
|
47
|
+
!a[2] && (optional = true, a = a[1]),
|
|
48
|
+
// a?.['x']?.()
|
|
49
|
+
a[0] === '[' ? (path = compile(a[2])) : (path = ctx => a[2]),
|
|
50
|
+
(container = compile(a[1]), optional ?
|
|
51
|
+
ctx => (container(ctx)?.[path(ctx)]?.(...args(ctx))) :
|
|
52
|
+
ctx => (container(ctx)?.[path(ctx)](...args(ctx)))
|
|
53
|
+
)
|
|
47
54
|
))
|
|
48
55
|
|
|
49
56
|
// a in b
|
package/justin.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let e,t,r=r=>(e=0,t=r,r=
|
|
1
|
+
let e,t,r=r=>(e=0,t=r,r=a(),t[e]?l():r||""),l=(r="Bad syntax",l=t[e],n=t.slice(0,e).split("\n"),a=n.pop())=>{let s=t.slice(e-108,e).split("\n").pop(),i=t.slice(e+1,e+108).split("\n").shift();throw EvalError(`${r} at ${n.length}:${a.length} %c\`${s+l+i}\``,"font-weight: bold")},n=(r=1,l=e,n)=>{if("number"==typeof r)e+=r;else for(;n=r(t.charCodeAt(e));)e+=n;return t.slice(l,e)},a=(t=0,n,a,s,i,o)=>{for(;(a=r.space())&&(i=((o=p[a])&&o(s,t))??(!s&&r.id()));)s=i;return n&&(a==n?e++:l()),s},s=e=>e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>=192&&215!=e&&247!=e,i=r.space=r=>{for(;(r=t.charCodeAt(e))<=32;)e++;return r},o=r.id=e=>n(s),p=[],c=(r,l=32,n,a=r.charCodeAt(0),i=r.length,o=p[a],c=r.toUpperCase()!==r)=>p[a]=(a,p,h=e)=>p<l&&(i<2||t.substr(e,i)==r)&&(!c||!s(t.charCodeAt(e+i)))&&(e+=i,n(a,p))||(e=h,o?.(a,p)),h=(e,t,r=0)=>c(e,t,((l,n)=>l&&(n=a(t-r/2))&&[e,l,n])),f=(e,t,r)=>c(e,t,(l=>r?l&&[e,l]:!l&&(l=a(t-.5))&&[e,l])),u=(e,t,r)=>{c(e,t,((l,n)=>(l||r)&&((n=a(t))||r)&&((!l||l[0]!==e)&&(l=[e,l]),(n||r)&&l.push(n),l)))};const d=e=>Array.isArray(e)?g[e[0]](...e.slice(1)):t=>t?.[e],g={},m=(e,t,r=g[e])=>g[e]=(...e)=>t(...e)||r&&r(...e),A=e=>(e=r(e),t=>(e.call?e:e=d(e))(t)),b=(e,t,r)=>r.length?r.length>1?(h(e,Math.abs(t),t<0),m(e,((e,t)=>t&&(e=d(e),t=d(t),e.length||t.length?l=>r(e(l),t(l)):(e=r(e(),t()),()=>e))))):(f(e,t),m(e,((e,t)=>!t&&((e=d(e)).length?t=>r(e(t)):(e=r(e()),()=>e))))):(u(e,Math.abs(t),t<0),m(e,((...e)=>(e=e.map(d),t=>r(...e.map((e=>e(t)))))))),y=e=>e?l():["",(e=+n((e=>46===e||e>=48&&e<=57||(69===e||101===e?2:0))))!=e?l():e],C=(e,t,r,l)=>(c(e,t,(r=>r?["++"===e?"-":"+",[e,r],["",1]]:[e,a(t-1)])),m(e,l=(e,t)=>"("===e[0]?l(e[1]):"."===e[0]?(t=e[2],e=d(e[1]),l=>r(e(l),t)):"["===e[0]?([,e,t]=e,e=d(e),t=d(t),l=>r(e(l),t(l))):t=>r(t,e)));m("",(e=>()=>e)),p[34]=e=>e?l():["",(n()+n((e=>e-34?1:0))+(n()||l("Bad string"))).slice(1,-1)],p[46]=e=>!e&&y();for(let e=0;e<=9;e++)p[48+e]=y;b(",",1,((...e)=>e[e.length-1])),b("||",4,((...e)=>{let t,r=0;for(;!t&&r<e.length;)t=e[r++];return t})),b("&&",5,((...e)=>{let t=0,r=!0;for(;r&&t<e.length;)r=e[t++];return r})),b("+",12,((e,t)=>e+t)),b("-",12,((e,t)=>e-t)),b("*",13,((e,t)=>e*t)),b("/",13,((e,t)=>e/t)),b("%",13,((e,t)=>e%t)),b("|",6,((e,t)=>e|t)),b("&",8,((e,t)=>e&t)),b("^",7,((e,t)=>e^t)),b("==",9,((e,t)=>e==t)),b("!=",9,((e,t)=>e!=t)),b(">",10,((e,t)=>e>t)),b(">=",10,((e,t)=>e>=t)),b("<",10,((e,t)=>e<t)),b("<=",10,((e,t)=>e<=t)),b(">>",11,((e,t)=>e>>t)),b(">>>",11,((e,t)=>e>>>t)),b("<<",11,((e,t)=>e<<t)),b("+",15,(e=>+e)),b("-",15,(e=>-e)),b("!",15,(e=>!e)),C("++",15,((e,t)=>++e[t])),C("--",15,((e,t)=>--e[t])),c("[",18,(e=>e&&["[",e,a(0,93)||l()])),m("[",((e,t)=>t&&(e=d(e),t=d(t),r=>e(r)[t(r)]))),c(".",18,((e,t)=>e&&(t=a(18))&&[".",e,t])),m(".",((e,t)=>(e=d(e),t=t[0]?t:t[1],r=>e(r)[t]))),c("(",18,(e=>!e&&["(",a(0,41)||l()])),c("(",18,((e,t)=>e&&((t=a(0,41))?["(",e,t]:["(",e,""]))),m("(",((e,t,r,l)=>null==t?d(e):(l=""==t?()=>[]:","===t[0]?(t=t.slice(1).map(d),e=>t.map((t=>t(e)))):(t=d(t),e=>[t(e)]),"."===e[0]?(r=e[2],e=d(e[1]),t=>e(t)[r](...l(t))):"["===e[0]?(r=d(e[2]),e=d(e[1]),t=>e(t)[r(t)](...l(t))):(e=d(e),t=>e(t)(...l(t))))));let v={n:"\n",r:"\r",t:"\t",b:"\b",f:"\f",v:"\v"},E=r=>(a,s,i="")=>{for(a&&l("Unexpected string"),n();(s=t.charCodeAt(e))-r;)92===s?(n(),s=n(),i+=v[s]||s):i+=n();return n(),["",i]};b("===",9,((e,t)=>e===t)),b("!==",9,((e,t)=>e!==t)),b("~",15,(e=>~e)),c("?",3,((e,t,r)=>e&&(t=a(2,58))&&["?",e,t,a(3)])),m("?",((e,t,r)=>(e=d(e),t=d(t),r=d(r),l=>e(l)?t(l):r(l)))),b("??",6,((e,t)=>e??t)),c("?.",18,(e=>e&&["?.",e])),m("?.",(e=>(e=d(e),t=>e(t)||(()=>{})))),c("?.",18,((e,t)=>e&&!(t=a(18))?.map&&["?.",e,t])),m("?.",((e,t)=>t&&(e=d(e),r=>e(r)?.[t]))),m("(",((e,t,r,l,n,a)=>null!=t&&"?."===e[0]&&(e[2]||Array.isArray(e[1]))&&(l=""==t?()=>[]:","===t[0]?(t=t.slice(1).map(d),e=>t.map((t=>t(e)))):(t=d(t),e=>[t(e)]),!e[2]&&(e=e[1]),n="["===e[0]?d(e[2]):t=>e[2],r=d(e[1]),e=>r(e)?.[n(e)]?.(...l(e))))),b("in",10,((e,t)=>e in t)),p[34]=E(34),p[39]=E(39),c("/*",20,((r,l)=>(n((r=>42!==r&&47!==t.charCodeAt(e+1))),n(2),r||a(l)||[""]))),c("//",20,((e,t)=>(n((e=>e>=32)),e||a(t)||[""]))),c("null",20,(e=>e?l():["",null])),c("true",20,(e=>e?l():["",!0])),c("false",20,(e=>e?l():["",!1])),c("undefined",20,(e=>e?l():["",void 0])),b(";",-20,((...e)=>{for(let t=e.length;t--;)if(null!=e[t])return e[t]})),b("**",-14,((e,t)=>e**t)),c("[",20,(e=>!e&&["[",a(0,93)||""])),m("[",((e,t)=>!t&&(e?","===e[0]?(e=e.slice(1).map(d),t=>e.map((e=>e(t)))):(e=d(e),t=>[e(t)]):()=>[]))),c("{",20,(e=>!e&&["{",a(0,125)||""])),m("{",((e,t)=>e?","===e[0]?(e=e.slice(1).map(d),t=>Object.fromEntries(e.map((e=>e(t))))):":"===e[0]?(e=d(e),t=>Object.fromEntries([e(t)])):(t=d(e),r=>({[e]:t(r)})):e=>({}))),c(":",1.1,((e,t)=>[":",e,a(1.1)||l()])),m(":",((e,t)=>(t=d(t),e=Array.isArray(e)?d(e):(e=>e).bind(0,e),r=>[e(r),t(r)])));export{h as binary,d as compile,t as cur,A as default,l as err,a as expr,o as id,e as idx,s as isId,p as lookup,u as nary,m as operator,g as operators,r as parse,b as set,n as skip,i as space,c as token,f as unary};
|
package/package.json
CHANGED
package/parse.js
CHANGED
|
@@ -6,19 +6,14 @@ export let idx, cur,
|
|
|
6
6
|
// no handling tagged literals since easily done on user side with cache, if needed
|
|
7
7
|
parse = s => (idx = 0, cur = s, s = expr(), cur[idx] ? err() : s || ''),
|
|
8
8
|
|
|
9
|
-
err = (msg = 'Bad syntax',
|
|
10
|
-
throw SyntaxError(`${msg} ${frag ? `\`${frag}\` ` : ''}at ${prev.length}:${last.length}`, prev.length)
|
|
11
|
-
},
|
|
12
|
-
|
|
13
|
-
longErr = (msg = 'Bad syntax',
|
|
9
|
+
err = (msg = 'Bad syntax',
|
|
14
10
|
frag = cur[idx],
|
|
15
11
|
lines = cur.slice(0, idx).split('\n'),
|
|
16
12
|
last = lines.pop()
|
|
17
13
|
) => {
|
|
18
|
-
let before = cur.slice(idx -
|
|
19
|
-
let after = cur.slice(idx + 1, idx +
|
|
20
|
-
|
|
21
|
-
throw EvalError(`${msg} at ${location} \`${before + frag + after}\`\n${' '.repeat(18 + msg.length + location.length + before.length + 1)}^`)
|
|
14
|
+
let before = cur.slice(idx - 108, idx).split('\n').pop()
|
|
15
|
+
let after = cur.slice(idx + 1, idx + 108).split('\n').shift()
|
|
16
|
+
throw EvalError(`${msg} at ${lines.length}:${last.length} %c\`${before + frag + after}\``, 'font-weight: bold')
|
|
22
17
|
},
|
|
23
18
|
|
|
24
19
|
skip = (is = 1, from = idx, l) => {
|
package/subscript.js
CHANGED
|
@@ -51,7 +51,7 @@ lookup[DQUOTE] = (a) => a ? err() : ['', (skip() + skip(c => c - DQUOTE ? 1 : 0)
|
|
|
51
51
|
lookup[PERIOD] = a => !a && num()
|
|
52
52
|
|
|
53
53
|
// 0-9
|
|
54
|
-
for (let i = 0; i
|
|
54
|
+
for (let i = 0; i <= 9; i++) lookup[_0 + i] = num
|
|
55
55
|
|
|
56
56
|
// sequences
|
|
57
57
|
set(',', PREC_SEQ, (...args) => args[args.length - 1])
|
|
@@ -99,9 +99,9 @@ token('(', PREC_CALL, a => !a && ['(', expr(0, CPAREN) || err()])
|
|
|
99
99
|
|
|
100
100
|
// a(b,c,d), a()
|
|
101
101
|
token('(', PREC_CALL, (a, b) => a && (b = expr(0, CPAREN), b ? ['(', a, b] : ['(', a, '']))
|
|
102
|
-
operator('(', (a, b, path, args) => b == null ? compile(a, b) : (
|
|
102
|
+
operator('(', (a, b, path, args) => b == null ? (compile(a, b)) : (
|
|
103
103
|
args = b == '' ? () => [] : // a()
|
|
104
|
-
b[0] === ',' ? (b = b.slice(1).map(compile), ctx => b.map(
|
|
104
|
+
b[0] === ',' ? (b = b.slice(1).map(compile), ctx => b.map(arg => arg(ctx))) : // a(b,c)
|
|
105
105
|
(b = compile(b), ctx => [b(ctx)]), // a(b)
|
|
106
106
|
|
|
107
107
|
a[0] === '.' ? (path = a[2], a = compile(a[1]), ctx => a(ctx)[path](...args(ctx))) : // a.b(...args)
|
package/subscript.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let t,
|
|
1
|
+
let e,t,l=l=>(e=0,t=l,l=n(),t[e]?r():l||""),r=(l="Bad syntax",r=t[e],a=t.slice(0,e).split("\n"),n=a.pop())=>{let s=t.slice(e-108,e).split("\n").pop(),h=t.slice(e+1,e+108).split("\n").shift();throw EvalError(`${l} at ${a.length}:${n.length} %c\`${s+r+h}\``,"font-weight: bold")},a=(l=1,r=e,a)=>{if("number"==typeof l)e+=l;else for(;a=l(t.charCodeAt(e));)e+=a;return t.slice(r,e)},n=(t=0,a,n,s,h,o)=>{for(;(n=l.space())&&(h=((o=p[n])&&o(s,t))??(!s&&l.id()));)s=h;return a&&(n==a?e++:r()),s},s=e=>e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>=192&&215!=e&&247!=e,h=l.space=l=>{for(;(l=t.charCodeAt(e))<=32;)e++;return l},o=l.id=e=>a(s),p=[],i=(l,r=32,a,n=l.charCodeAt(0),h=l.length,o=p[n],i=l.toUpperCase()!==l)=>p[n]=(n,p,c=e)=>p<r&&(h<2||t.substr(e,h)==l)&&(!i||!s(t.charCodeAt(e+h)))&&(e+=h,a(n,p))||(e=c,o?.(n,p)),c=(e,t,l=0)=>i(e,t,((r,a)=>r&&(a=n(t-l/2))&&[e,r,a])),g=(e,t,l)=>i(e,t,(r=>l?r&&[e,r]:!r&&(r=n(t-.5))&&[e,r])),f=(e,t,l)=>{i(e,t,((r,a)=>(r||l)&&((a=n(t))||l)&&((!r||r[0]!==e)&&(r=[e,r]),(a||l)&&r.push(a),r)))};const d=e=>Array.isArray(e)?u[e[0]](...e.slice(1)):t=>t?.[e],u={},A=(e,t,l=u[e])=>u[e]=(...e)=>t(...e)||l&&l(...e),b=e=>(e=l(e),t=>(e.call?e:e=d(e))(t)),m=(e,t,l)=>l.length?l.length>1?(c(e,Math.abs(t),t<0),A(e,((e,t)=>t&&(e=d(e),t=d(t),e.length||t.length?r=>l(e(r),t(r)):(e=l(e(),t()),()=>e))))):(g(e,t),A(e,((e,t)=>!t&&((e=d(e)).length?t=>l(e(t)):(e=l(e()),()=>e))))):(f(e,Math.abs(t),t<0),A(e,((...e)=>(e=e.map(d),t=>l(...e.map((e=>e(t)))))))),C=e=>e?r():["",(e=+a((e=>46===e||e>=48&&e<=57||(69===e||101===e?2:0))))!=e?r():e],y=(e,t,l,r)=>(i(e,t,(l=>l?["++"===e?"-":"+",[e,l],["",1]]:[e,n(t-1)])),A(e,r=(e,t)=>"("===e[0]?r(e[1]):"."===e[0]?(t=e[2],e=d(e[1]),r=>l(e(r),t)):"["===e[0]?([,e,t]=e,e=d(e),t=d(t),r=>l(e(r),t(r))):t=>l(t,e)));A("",(e=>()=>e)),p[34]=e=>e?r():["",(a()+a((e=>e-34?1:0))+(a()||r("Bad string"))).slice(1,-1)],p[46]=e=>!e&&C();for(let e=0;e<=9;e++)p[48+e]=C;m(",",1,((...e)=>e[e.length-1])),m("||",4,((...e)=>{let t,l=0;for(;!t&&l<e.length;)t=e[l++];return t})),m("&&",5,((...e)=>{let t=0,l=!0;for(;l&&t<e.length;)l=e[t++];return l})),m("+",12,((e,t)=>e+t)),m("-",12,((e,t)=>e-t)),m("*",13,((e,t)=>e*t)),m("/",13,((e,t)=>e/t)),m("%",13,((e,t)=>e%t)),m("|",6,((e,t)=>e|t)),m("&",8,((e,t)=>e&t)),m("^",7,((e,t)=>e^t)),m("==",9,((e,t)=>e==t)),m("!=",9,((e,t)=>e!=t)),m(">",10,((e,t)=>e>t)),m(">=",10,((e,t)=>e>=t)),m("<",10,((e,t)=>e<t)),m("<=",10,((e,t)=>e<=t)),m(">>",11,((e,t)=>e>>t)),m(">>>",11,((e,t)=>e>>>t)),m("<<",11,((e,t)=>e<<t)),m("+",15,(e=>+e)),m("-",15,(e=>-e)),m("!",15,(e=>!e)),y("++",15,((e,t)=>++e[t])),y("--",15,((e,t)=>--e[t])),i("[",18,(e=>e&&["[",e,n(0,93)||r()])),A("[",((e,t)=>t&&(e=d(e),t=d(t),l=>e(l)[t(l)]))),i(".",18,((e,t)=>e&&(t=n(18))&&[".",e,t])),A(".",((e,t)=>(e=d(e),t=t[0]?t:t[1],l=>e(l)[t]))),i("(",18,(e=>!e&&["(",n(0,41)||r()])),i("(",18,((e,t)=>e&&((t=n(0,41))?["(",e,t]:["(",e,""]))),A("(",((e,t,l,r)=>null==t?d(e):(r=""==t?()=>[]:","===t[0]?(t=t.slice(1).map(d),e=>t.map((t=>t(e)))):(t=d(t),e=>[t(e)]),"."===e[0]?(l=e[2],e=d(e[1]),t=>e(t)[l](...r(t))):"["===e[0]?(l=d(e[2]),e=d(e[1]),t=>e(t)[l(t)](...r(t))):(e=d(e),t=>e(t)(...r(t))))));export{c as binary,d as compile,t as cur,b as default,r as err,n as expr,o as id,e as idx,s as isId,p as lookup,f as nary,A as operator,u as operators,l as parse,m as set,a as skip,h as space,i as token,g as unary};
|