Initial commit
This commit is contained in:
commit
83ccc6370c
87
lcake.js
Normal file
87
lcake.js
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
|
||||||
|
// Credit to http://m1el.github.io/smallest-lambda-eval/
|
||||||
|
function Eval(prog, env) {
|
||||||
|
if (typeof prog === 'string') {
|
||||||
|
// lookup a variable
|
||||||
|
return env[prog];
|
||||||
|
} else if (prog[0] === '$') {
|
||||||
|
// constructing a new lambda
|
||||||
|
return (arg) => Eval(prog[2], { ...env, [prog[1]]: arg });
|
||||||
|
} else {
|
||||||
|
// function application
|
||||||
|
return Eval(prog[0], env)(Eval(prog[1], env));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function FromChurch(f) {
|
||||||
|
var i = 0;
|
||||||
|
f(function (x) {
|
||||||
|
i++;
|
||||||
|
return x;
|
||||||
|
})(function (x) {
|
||||||
|
return x;
|
||||||
|
})(undefined);
|
||||||
|
}
|
||||||
|
function ToChurch(i) {
|
||||||
|
return function (a) {
|
||||||
|
return function (b) {
|
||||||
|
var c = b;
|
||||||
|
for (let j = 0; j < i; j++)c = a(c);
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function FromArray(x) {
|
||||||
|
return x([])((a) => (v) => [...a, v])
|
||||||
|
}
|
||||||
|
function ToArray(x) {
|
||||||
|
return function (n) {
|
||||||
|
return function (s) {
|
||||||
|
var o = n;
|
||||||
|
for (var i of x) {
|
||||||
|
o = s(o)(i);
|
||||||
|
}
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function FromString(x) {
|
||||||
|
return String.fromCodePoint(...FromArray(x).map(FromChurch))
|
||||||
|
}
|
||||||
|
function ToString(s){
|
||||||
|
return toArray([...s].map(x => x.codePointAt(0)).map(FromChurch))
|
||||||
|
}
|
||||||
|
var opcodes = {
|
||||||
|
0: 'io_ref_new',
|
||||||
|
1: 'io_ref_read',
|
||||||
|
2: 'io_ref_write',
|
||||||
|
}
|
||||||
|
function RunIO(prog) {
|
||||||
|
return prog(function(x){
|
||||||
|
return x;
|
||||||
|
})(function (ty) {
|
||||||
|
return function (pay) {
|
||||||
|
return function (cont) {
|
||||||
|
var then = function(x){
|
||||||
|
return RunIO(cont(x))
|
||||||
|
}
|
||||||
|
switch (opcodes[FromChurch(ty)]) {
|
||||||
|
case 'io_ref_new':
|
||||||
|
var x = Math.random().toString();
|
||||||
|
RunIO["io_ref/" + x] = pay;
|
||||||
|
return then(ToString(x));
|
||||||
|
case 'io_ref_read':
|
||||||
|
return then(RunIO["io_ref/" + FromString(pay)])
|
||||||
|
case 'io_ref_write':
|
||||||
|
return pay(function(a){
|
||||||
|
return function(b){
|
||||||
|
RunIO["io_ref/" + FromString(a)] = b;
|
||||||
|
return then(b);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
RunIO(Eval([["$","val",["$","p",["$","i",["p","val"]]]],["$","+",["$","0","0"]]],{}))
|
||||||
|
|
286
lcakec.js
Normal file
286
lcakec.js
Normal file
|
@ -0,0 +1,286 @@
|
||||||
|
let {reduceUsing} = require('shift-reducer')
|
||||||
|
|
||||||
|
const cyrb53 = (str, seed = 0) => {
|
||||||
|
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
|
||||||
|
for(let i = 0, ch; i < str.length; i++) {
|
||||||
|
ch = str.charCodeAt(i);
|
||||||
|
h1 = Math.imul(h1 ^ ch, 2654435761);
|
||||||
|
h2 = Math.imul(h2 ^ ch, 1597334677);
|
||||||
|
}
|
||||||
|
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
|
||||||
|
h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
|
||||||
|
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
|
||||||
|
h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
||||||
|
|
||||||
|
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
let srcBase = `
|
||||||
|
// Credit to http://m1el.github.io/smallest-lambda-eval/
|
||||||
|
function Eval(prog, env) {
|
||||||
|
if (typeof prog === 'string') {
|
||||||
|
// lookup a variable
|
||||||
|
return env[prog];
|
||||||
|
} else if (prog[0] === '$') {
|
||||||
|
// constructing a new lambda
|
||||||
|
return (arg) => Eval(prog[2], { ...env, [prog[1]]: arg });
|
||||||
|
} else {
|
||||||
|
// function application
|
||||||
|
return Eval(prog[0], env)(Eval(prog[1], env));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function FromChurch(f) {
|
||||||
|
var i = 0;
|
||||||
|
f(function (x) {
|
||||||
|
i++;
|
||||||
|
return x;
|
||||||
|
})(function (x) {
|
||||||
|
return x;
|
||||||
|
})(undefined);
|
||||||
|
}
|
||||||
|
function ToChurch(i) {
|
||||||
|
return function (a) {
|
||||||
|
return function (b) {
|
||||||
|
var c = b;
|
||||||
|
for (let j = 0; j < i; j++)c = a(c);
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function FromArray(x) {
|
||||||
|
return x([])((a) => (v) => [...a, v])
|
||||||
|
}
|
||||||
|
function ToArray(x) {
|
||||||
|
return function (n) {
|
||||||
|
return function (s) {
|
||||||
|
var o = n;
|
||||||
|
for (var i of x) {
|
||||||
|
o = s(o)(i);
|
||||||
|
}
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function FromString(x) {
|
||||||
|
return String.fromCodePoint(...FromArray(x).map(FromChurch))
|
||||||
|
}
|
||||||
|
function ToString(s){
|
||||||
|
return toArray([...s].map(x => x.codePointAt(0)).map(FromChurch))
|
||||||
|
}
|
||||||
|
var opcodes = {
|
||||||
|
0: 'io_ref_new',
|
||||||
|
1: 'io_ref_read',
|
||||||
|
2: 'io_ref_write',
|
||||||
|
}
|
||||||
|
function RunIO(prog) {
|
||||||
|
return prog(function(x){
|
||||||
|
return x;
|
||||||
|
})(function (ty) {
|
||||||
|
return function (pay) {
|
||||||
|
return function (cont) {
|
||||||
|
var then = function(x){
|
||||||
|
return RunIO(cont(x))
|
||||||
|
}
|
||||||
|
switch (opcodes[FromChurch(ty)]) {
|
||||||
|
case 'io_ref_new':
|
||||||
|
var x = Math.random().toString();
|
||||||
|
RunIO["io_ref/" + x] = pay;
|
||||||
|
return then(ToString(x));
|
||||||
|
case 'io_ref_read':
|
||||||
|
return then(RunIO["io_ref/" + FromString(pay)])
|
||||||
|
case 'io_ref_write':
|
||||||
|
return pay(function(a){
|
||||||
|
return function(b){
|
||||||
|
RunIO["io_ref/" + FromString(a)] = b;
|
||||||
|
return then(b);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}`
|
||||||
|
|
||||||
|
function vari(x){
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
function abs(a,b){
|
||||||
|
return ['$',a,b]
|
||||||
|
}
|
||||||
|
|
||||||
|
function app(a,b){
|
||||||
|
return [a,b]
|
||||||
|
}
|
||||||
|
|
||||||
|
function appx(...a){
|
||||||
|
var b = a[0];
|
||||||
|
for(var i in a){
|
||||||
|
if(i != 0){
|
||||||
|
b = app(b,a[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
function subst(x,b,c){
|
||||||
|
if(typeof x == 'string'){
|
||||||
|
if(x === b)return c;
|
||||||
|
return x;
|
||||||
|
}else if (x[0] == '$'){
|
||||||
|
if(x[1] == b){
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
return abs(x[1],subst(x[2],b,c));
|
||||||
|
}
|
||||||
|
return app(subst(x[0],b,c),subst(x[1],b,c))
|
||||||
|
}
|
||||||
|
|
||||||
|
Function.prototype.fuse = function(){
|
||||||
|
var a = abs('$$0',this('$$0'))
|
||||||
|
var h = cyrb53(JSON.stringify(a))
|
||||||
|
return abs(`h${h}`,subst(a[2],'$$0',`h${h}`))
|
||||||
|
}
|
||||||
|
|
||||||
|
function createChurch(n){
|
||||||
|
var v = '0';
|
||||||
|
for(let i = 0; i < n; i++){
|
||||||
|
v = ['+',v];
|
||||||
|
}
|
||||||
|
return ['$','+',['$','0',v]]
|
||||||
|
}
|
||||||
|
function createList(n){
|
||||||
|
var v = 'null';
|
||||||
|
for(var i of n){
|
||||||
|
v = app('push')(v)(i);
|
||||||
|
}
|
||||||
|
return abs('null',abs('push',v))
|
||||||
|
}
|
||||||
|
function createString(s){
|
||||||
|
return createList([...s].map(x => x.codePointAt(0)).map(createChurch))
|
||||||
|
}
|
||||||
|
function createBool(b){
|
||||||
|
return abs('x',app('y',b ? 'x' : 'y'))
|
||||||
|
}
|
||||||
|
var yb = abs('f',abs('x',app('x',abs('z',app(app(app('f','f'),'x'),'z')))))
|
||||||
|
var y = app(yb,yb)
|
||||||
|
var IO = {
|
||||||
|
pure: abs('val',abs('p',abs('i',app('p','val')))),
|
||||||
|
bind: app(y,abs('bind',abs('m',abs('f',app(app('m','f'),abs('ty',abs('pay',abs('cont',abs('h',app(app(app('h','ty'),'pay'),abs('x',app(app('bind',app('cont','x')),'f')))))))))))),
|
||||||
|
name: 'io'
|
||||||
|
}
|
||||||
|
var createIO = abs('t',abs('p',abs('pu',abs('i',appx('i','t','p',IO.pure)))))
|
||||||
|
var newIORef = appx(createIO,createChurch(0))
|
||||||
|
var readIORef = appx(createIO,createChurch(1))
|
||||||
|
var writeIORef = abs('r',abs('v',appx(createIO,createChurch(2),abs('f',appx('f','r','v')))))
|
||||||
|
|
||||||
|
function warp(x,{pure,bind,name} = IO){
|
||||||
|
if(typeof x == 'string'){
|
||||||
|
return app(pure,name + '$' + x);
|
||||||
|
}else if (x[0] == '$'){
|
||||||
|
return app(pure,abs(name + '$' + x[1],warpIO(x[2])))
|
||||||
|
}else if(x[0] == 'splice_' + name){
|
||||||
|
return x[1];
|
||||||
|
}
|
||||||
|
return appx(bind,warp(x[0],{pure,bind,name}),abs('f',appx(bind,warp(x[1],{pure,bind,name}),abs('x',app('f','x')))))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var pred = abs('n',abs('f',abs('x',app(app(app('n',abs('g',abs('h',app('h',app('g','f'))))),abs('u','x')),abs('u','u')))))
|
||||||
|
var isZero = abs('n',app(app('n',abs('x',createBool(false)),createBool(true))))
|
||||||
|
var l_and = abs('p',abs('q',app(app('p','q'),'p')))
|
||||||
|
var minus = abs('a',abs('b',app(app('b',pred),'a')))
|
||||||
|
var leq = abs('m',abs('n',app(isZero,app(app(minus,'m'),'n'))))
|
||||||
|
var eq = abs('m',abs('n',app(app(l_and,app(app(leq,'m'),'n')),app(app(leq,'n'),'m'))))
|
||||||
|
|
||||||
|
var tru = abs('t',abs('f','t'))
|
||||||
|
var fals = abs('t',abs('f','f'))
|
||||||
|
|
||||||
|
var jsFun = abs('x',abs('fn',abs('truthy',abs('falsy',app('fn','x')))))
|
||||||
|
var jsTruthy = abs('t',abs('v',abs('fn',abs('truthy',abs('falsy',app(app('truthy','t'),'v'))))))
|
||||||
|
var jsFalsy = abs('t',app('fn',abs('truthy',abs('falsy',app('falsy','t')))))
|
||||||
|
|
||||||
|
var sempty = abs('e',abs('c','e'))
|
||||||
|
var scons = abs('h',abs('t',abs('e',abs('c',appx('c','h','t')))))
|
||||||
|
|
||||||
|
var stoc = appx(y,function(a){
|
||||||
|
return abs('l',abs('n',abs('c',appx('l','n',abs('a',abs('b',appx('c','a',appx(a,'b','n','c'))))))))
|
||||||
|
}.fuse)
|
||||||
|
|
||||||
|
var ctos = abs('a',appx('a',sempty,scons))
|
||||||
|
|
||||||
|
var strEq = appx(y,abs('strEq',abs('a',abs('b',appx('a',appx('b',tru,abs('_a',abs('_b',fals))),abs('c',abs('d',appx('b',fals,abs('e',abs('f',appx(eq,'c','e',appx('strEq','d','f'),fals)))))))))))
|
||||||
|
|
||||||
|
var churchSucc = abs('x',abs('o',abs('s',app('s',appx('x','o','s')))))
|
||||||
|
|
||||||
|
var TY_NULL = 0;
|
||||||
|
|
||||||
|
var jsNull = app(jsFalsy,createChurch(TY_NULL))
|
||||||
|
|
||||||
|
var getVarS = getGetVarSlot => abs('v',abs('p',abs('b',abs('l',appx(stoc,'l',abs('_',appx(free.pure,jsNull)),abs('f',abs('p',appx(getGetVarSlot('f'),'p'))),'v')))))
|
||||||
|
|
||||||
|
var free = {
|
||||||
|
name: 'free',
|
||||||
|
pure: abs('x',abs('p',abs('b',abs('l',app('p','x'))))),
|
||||||
|
bind: abs('m',abs('f',abs('p',abs('b',abs('l',appx('b',appx('m','p','b','l'),abs('v',appx('f','v','p','b','l'))))))))
|
||||||
|
}
|
||||||
|
|
||||||
|
var addVarS = push => abs('f',abs('v',abs('p',abs('b',abs('l',appx('f',
|
||||||
|
abs('v',abs('x',app('p','v'))), // pure
|
||||||
|
abs('m',abs('f',abs('x',appx('b',app('m','x'),abs('v',appx('f','v','x')))))), // bind
|
||||||
|
appx(scons,push(
|
||||||
|
abs('m',abs('x','m')), //lift
|
||||||
|
abs('r',abs('v',abs('x',appx(isZero,'v',app(free.pure,'x'),abs('_', appx('r',appx(pred,'v'))))))), //getVar
|
||||||
|
),'l'),
|
||||||
|
'v'
|
||||||
|
))))))
|
||||||
|
|
||||||
|
var liftIOS = getLift => abs('i',abs('p',abs('b',app('l',appx(stoc,'l','i',abs('d',abs('m',app(getLift('d'),'m'))))))))
|
||||||
|
|
||||||
|
|
||||||
|
var readerT = old => ({
|
||||||
|
base: old,
|
||||||
|
lift: abs('x',abs('v','x')),
|
||||||
|
pure: abs('x',abs('v',app(old.pure,'x'))),
|
||||||
|
bind: abs('m',abs('f',abs('v',appx(old.bind,app('m','v'),abs('w',appx('f','w','v')))))),
|
||||||
|
name: `readerT(${old.name})`
|
||||||
|
})
|
||||||
|
|
||||||
|
var contT = old => ({
|
||||||
|
base: old,
|
||||||
|
lift: abs('x',abs('cc',appx(old.bind,'x','cc'))),
|
||||||
|
pure: abs('x',abs('cc',app('cc','x'))),
|
||||||
|
bind: abs('m',abs('f',abs('cc',app('m',abs('x',appx('f','x','cc')))))),
|
||||||
|
name: `contT(${old.name})`
|
||||||
|
})
|
||||||
|
|
||||||
|
var js = contT(readerT(free))
|
||||||
|
|
||||||
|
var getVarB = getGetVarSlot => abs('j',app(js.lift,abs('vs',appx(getVarS(getGetVarSlot),appx('vs','j')))))
|
||||||
|
|
||||||
|
var liftIOB = getLift => abs('i',app(js.lift,abs('v',appx(liftIOS(getLift),'i'))))
|
||||||
|
|
||||||
|
var pushBase = (a,b) => abs('f',appx('f',a,b))
|
||||||
|
|
||||||
|
var addVarB = push => abs('m',abs('v',abs('f',appx(js.base.lift,addVarS(push),appx('f',abs('n',appx(strEq,'m','n',createChurch(0),app(churchSucc,app('f','n'))))),'v'))));
|
||||||
|
|
||||||
|
var addVar = addVarB(pushBase)
|
||||||
|
|
||||||
|
js.addVar = addVar
|
||||||
|
|
||||||
|
var getGetVarSlotBase = x => app(x,abs('a',abs('b','b')))
|
||||||
|
|
||||||
|
var getLiftBase = x => app(x,abs('a',abs('b','a')))
|
||||||
|
|
||||||
|
var getVar = getVarB(getGetVarSlotBase)
|
||||||
|
|
||||||
|
js.getVar = getVar
|
||||||
|
|
||||||
|
var liftIOJ = liftIOB(getLiftBase)
|
||||||
|
|
||||||
|
js.liftIO = liftIOJ
|
||||||
|
|
||||||
|
|
||||||
|
console.log(srcBase + `
|
||||||
|
RunIO(Eval(${JSON.stringify(app(IO.pure,createChurch(0)))},{}))
|
||||||
|
`)
|
83
node_modules/.package-lock.json
generated
vendored
Normal file
83
node_modules/.package-lock.json
generated
vendored
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
{
|
||||||
|
"name": "lambdaworld",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"node_modules/multimap": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw=="
|
||||||
|
},
|
||||||
|
"node_modules/shift-ast": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-O0INwsZa1XH/lMSf52udGnjNOxKBLxFiZHt0Ys3i6bqtwuGEA3eDR4+e0qJELIsCy8+BiTtlTgQzP76K1ehipQ=="
|
||||||
|
},
|
||||||
|
"node_modules/shift-parser": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-IShW1wGhvA5e+SPNVQ+Dwi/Be6651F2jZc6wwYHbYW7PiswAYfvR/v3Q+CjjxsVCna5L6J5OtR6y+tkkCzvCfw==",
|
||||||
|
"dependencies": {
|
||||||
|
"multimap": "^1.0.2",
|
||||||
|
"shift-ast": "7.0.0",
|
||||||
|
"shift-reducer": "7.0.0",
|
||||||
|
"shift-regexp-acceptor": "3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/shift-reducer": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-9igIDMHzp1+CkQZITGHM1sAd9jqMPV0vhqHuh8jlYumHSMIwsYcrDeo1tlpzNRUnfbEq1nLyh8Bf1YU8HGUE7g==",
|
||||||
|
"dependencies": {
|
||||||
|
"shift-ast": "7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/shift-regexp-acceptor": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-98UKizBjHY6SjjLUr51YYw4rtR+vxjGFm8znqNsoahesAI8Y9+WVAyiBCxxkov1KSDhW0Wz8FwwUqHnlFnjdUg==",
|
||||||
|
"dependencies": {
|
||||||
|
"unicode-match-property-ecmascript": "1.0.4",
|
||||||
|
"unicode-match-property-value-ecmascript": "1.0.2",
|
||||||
|
"unicode-property-aliases-ecmascript": "1.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-canonical-property-names-ecmascript": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-match-property-ecmascript": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
|
||||||
|
"dependencies": {
|
||||||
|
"unicode-canonical-property-names-ecmascript": "^1.0.4",
|
||||||
|
"unicode-property-aliases-ecmascript": "^1.0.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-match-property-value-ecmascript": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-property-aliases-ecmascript": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
41
node_modules/multimap/.jshintrc
generated
vendored
Normal file
41
node_modules/multimap/.jshintrc
generated
vendored
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"passfail" : false,
|
||||||
|
"maxerr" : 20,
|
||||||
|
"browser" : false,
|
||||||
|
"node" : true,
|
||||||
|
"debug" : false,
|
||||||
|
"devel" : true,
|
||||||
|
"es5" : false,
|
||||||
|
"strict" : false,
|
||||||
|
"globalstrict" : false,
|
||||||
|
"asi" : false,
|
||||||
|
"laxbreak" : false,
|
||||||
|
"bitwise" : false,
|
||||||
|
"boss" : true,
|
||||||
|
"curly" : false,
|
||||||
|
"eqeqeq" : false,
|
||||||
|
"eqnull" : false,
|
||||||
|
"evil" : true,
|
||||||
|
"expr" : true,
|
||||||
|
"forin" : false,
|
||||||
|
"immed" : true,
|
||||||
|
"latedef" : false,
|
||||||
|
"loopfunc" : true,
|
||||||
|
"noarg" : true,
|
||||||
|
"regexp" : true,
|
||||||
|
"regexdash" : false,
|
||||||
|
"scripturl" : true,
|
||||||
|
"shadow" : true,
|
||||||
|
"supernew" : false,
|
||||||
|
"undef" : false,
|
||||||
|
"newcap" : false,
|
||||||
|
"proto" : true,
|
||||||
|
"noempty" : true,
|
||||||
|
"nonew" : false,
|
||||||
|
"nomen" : false,
|
||||||
|
"onevar" : false,
|
||||||
|
"plusplus" : false,
|
||||||
|
"sub" : false,
|
||||||
|
"trailing" : false,
|
||||||
|
"white" : false
|
||||||
|
}
|
6
node_modules/multimap/.travis.yml
generated
vendored
Normal file
6
node_modules/multimap/.travis.yml
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "0.10"
|
||||||
|
- "0.11"
|
||||||
|
|
||||||
|
script: npm run test
|
136
node_modules/multimap/README.md
generated
vendored
Normal file
136
node_modules/multimap/README.md
generated
vendored
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
# Multimap - Map which Allow Multiple Values for the same Key
|
||||||
|
|
||||||
|
[![NPM version](https://badge.fury.io/js/multimap.svg)](http://badge.fury.io/js/multimap)
|
||||||
|
[![Build Status](https://travis-ci.org/villadora/multi-map.png?branch=master)](https://travis-ci.org/villadora/multi-map)
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install multimap --save
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
|
||||||
|
If you'd like to use native version when it exists and fallback to polyfill if it doesn't, but without implementing `Map` on global scope, do:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var Multimap = require('multimap');
|
||||||
|
var m = new Multimap();
|
||||||
|
```
|
||||||
|
|
||||||
|
If the global es6 `Map` exists or `Multimap.Map` is set, `Multimap` will use the `Map` as inner store, that means Object can be used as key.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var Multimap = require('multimap');
|
||||||
|
|
||||||
|
// if harmony is on
|
||||||
|
/* nothing need to do */
|
||||||
|
// or if you are using es6-shim
|
||||||
|
Multimap.Map = ShimMap;
|
||||||
|
|
||||||
|
var m = new Multimap();
|
||||||
|
var key = {};
|
||||||
|
m.set(key, 'one');
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Otherwise, an object will be used, all the keys will be transformed into string.
|
||||||
|
|
||||||
|
|
||||||
|
### In Modern Browser
|
||||||
|
|
||||||
|
Just download the `index.js` as `Multimap.js`.
|
||||||
|
|
||||||
|
```
|
||||||
|
<script src=Multimap.js"></script>
|
||||||
|
<script>
|
||||||
|
var map = new Multimap([['a', 1], ['b', 2], ['c', 3]]);
|
||||||
|
map = map.set('b', 20);
|
||||||
|
map.get('b'); // [2, 20]
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
Or use as an AMD loader:
|
||||||
|
|
||||||
|
```
|
||||||
|
require(['./Multimap.js'], function (Multimap) {
|
||||||
|
var map = new Multimap([['a', 1], ['b', 2], ['c', 3]]);
|
||||||
|
map = map.set('b', 20);
|
||||||
|
map.get('b'); // [2, 20]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
* Browsers should support `Object.defineProperty` and `Array.prototype.forEach`.
|
||||||
|
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
Following shows how to use `Multimap`:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var Multimap = require('multimap');
|
||||||
|
|
||||||
|
var map = new Multimap([['a', 'one'], ['b', 1], ['a', 'two'], ['b', 2]]);
|
||||||
|
|
||||||
|
map.size; // 4
|
||||||
|
map.count; // 2
|
||||||
|
|
||||||
|
map.get('a'); // ['one', 'two']
|
||||||
|
map.get('b'); // [1, 2]
|
||||||
|
|
||||||
|
map.has('a'); // true
|
||||||
|
map.has('foo'); // false
|
||||||
|
|
||||||
|
map.has('a', 'one'); // true
|
||||||
|
map.has('b', 3); // false
|
||||||
|
|
||||||
|
map.set('a', 'three');
|
||||||
|
map.size; // 5
|
||||||
|
map.count; // 2
|
||||||
|
map.get('a'); // ['one', 'two', 'three']
|
||||||
|
|
||||||
|
map.set('b', 3, 4);
|
||||||
|
map.size; // 7
|
||||||
|
map.count; // 2
|
||||||
|
|
||||||
|
map.delete('a', 'three'); // true
|
||||||
|
map.delete('x'); // false
|
||||||
|
map.delete('a', 'four'); // false
|
||||||
|
map.delete('b'); // true
|
||||||
|
|
||||||
|
map.size; // 2
|
||||||
|
map.count; // 1
|
||||||
|
|
||||||
|
map.set('b', 1, 2);
|
||||||
|
map.size; // 4
|
||||||
|
map.count; // 2
|
||||||
|
|
||||||
|
|
||||||
|
map.forEach(function (value, key) {
|
||||||
|
// iterates { 'one', 'a' }, { 'two', 'a' }, { 1, b }, { 2, 'b' }
|
||||||
|
});
|
||||||
|
|
||||||
|
map.forEachEntry(function (entry, key) {
|
||||||
|
// iterates {['one', 'two'], 'a' }, {[1, 2], 'b' }
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var keys = map.keys(); // iterator with ['a', 'b']
|
||||||
|
keys.next().value; // 'a'
|
||||||
|
var values = map.values(); // iterator ['one', 'two', 1, 2]
|
||||||
|
|
||||||
|
map.clear(); // undefined
|
||||||
|
map.size; // 0
|
||||||
|
map.count; // 0
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2013, Villa.Gao <jky239@gmail.com>;
|
||||||
|
All rights reserved.
|
226
node_modules/multimap/index.js
generated
vendored
Normal file
226
node_modules/multimap/index.js
generated
vendored
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/* global module, define */
|
||||||
|
|
||||||
|
function mapEach(map, operation){
|
||||||
|
var keys = map.keys();
|
||||||
|
var next;
|
||||||
|
while(!(next = keys.next()).done) {
|
||||||
|
operation(map.get(next.value), next.value, map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var Multimap = (function() {
|
||||||
|
var mapCtor;
|
||||||
|
if (typeof Map !== 'undefined') {
|
||||||
|
mapCtor = Map;
|
||||||
|
|
||||||
|
if (!Map.prototype.keys) {
|
||||||
|
Map.prototype.keys = function() {
|
||||||
|
var keys = [];
|
||||||
|
this.forEach(function(item, key) {
|
||||||
|
keys.push(key);
|
||||||
|
});
|
||||||
|
return keys;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Multimap(iterable) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self._map = mapCtor;
|
||||||
|
|
||||||
|
if (Multimap.Map) {
|
||||||
|
self._map = Multimap.Map;
|
||||||
|
}
|
||||||
|
|
||||||
|
self._ = self._map ? new self._map() : {};
|
||||||
|
|
||||||
|
if (iterable) {
|
||||||
|
iterable.forEach(function(i) {
|
||||||
|
self.set(i[0], i[1]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} key
|
||||||
|
* @return {Array} An array of values, undefined if no such a key;
|
||||||
|
*/
|
||||||
|
Multimap.prototype.get = function(key) {
|
||||||
|
return this._map ? this._.get(key) : this._[key];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} key
|
||||||
|
* @param {Object} val...
|
||||||
|
*/
|
||||||
|
Multimap.prototype.set = function(key, val) {
|
||||||
|
var args = Array.prototype.slice.call(arguments);
|
||||||
|
|
||||||
|
key = args.shift();
|
||||||
|
|
||||||
|
var entry = this.get(key);
|
||||||
|
if (!entry) {
|
||||||
|
entry = [];
|
||||||
|
if (this._map)
|
||||||
|
this._.set(key, entry);
|
||||||
|
else
|
||||||
|
this._[key] = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
Array.prototype.push.apply(entry, args);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} key
|
||||||
|
* @param {Object=} val
|
||||||
|
* @return {boolean} true if any thing changed
|
||||||
|
*/
|
||||||
|
Multimap.prototype.delete = function(key, val) {
|
||||||
|
if (!this.has(key))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (arguments.length == 1) {
|
||||||
|
this._map ? (this._.delete(key)) : (delete this._[key]);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
var entry = this.get(key);
|
||||||
|
var idx = entry.indexOf(val);
|
||||||
|
if (idx != -1) {
|
||||||
|
entry.splice(idx, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} key
|
||||||
|
* @param {Object=} val
|
||||||
|
* @return {boolean} whether the map contains 'key' or 'key=>val' pair
|
||||||
|
*/
|
||||||
|
Multimap.prototype.has = function(key, val) {
|
||||||
|
var hasKey = this._map ? this._.has(key) : this._.hasOwnProperty(key);
|
||||||
|
|
||||||
|
if (arguments.length == 1 || !hasKey)
|
||||||
|
return hasKey;
|
||||||
|
|
||||||
|
var entry = this.get(key) || [];
|
||||||
|
return entry.indexOf(val) != -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Array} all the keys in the map
|
||||||
|
*/
|
||||||
|
Multimap.prototype.keys = function() {
|
||||||
|
if (this._map)
|
||||||
|
return makeIterator(this._.keys());
|
||||||
|
|
||||||
|
return makeIterator(Object.keys(this._));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Array} all the values in the map
|
||||||
|
*/
|
||||||
|
Multimap.prototype.values = function() {
|
||||||
|
var vals = [];
|
||||||
|
this.forEachEntry(function(entry) {
|
||||||
|
Array.prototype.push.apply(vals, entry);
|
||||||
|
});
|
||||||
|
|
||||||
|
return makeIterator(vals);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Multimap.prototype.forEachEntry = function(iter) {
|
||||||
|
mapEach(this, iter);
|
||||||
|
};
|
||||||
|
|
||||||
|
Multimap.prototype.forEach = function(iter) {
|
||||||
|
var self = this;
|
||||||
|
self.forEachEntry(function(entry, key) {
|
||||||
|
entry.forEach(function(item) {
|
||||||
|
iter(item, key, self);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Multimap.prototype.clear = function() {
|
||||||
|
if (this._map) {
|
||||||
|
this._.clear();
|
||||||
|
} else {
|
||||||
|
this._ = {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.defineProperty(
|
||||||
|
Multimap.prototype,
|
||||||
|
"size", {
|
||||||
|
configurable: false,
|
||||||
|
enumerable: true,
|
||||||
|
get: function() {
|
||||||
|
var total = 0;
|
||||||
|
|
||||||
|
mapEach(this, function(value){
|
||||||
|
total += value.length;
|
||||||
|
});
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Object.defineProperty(
|
||||||
|
Multimap.prototype,
|
||||||
|
"count", {
|
||||||
|
configurable: false,
|
||||||
|
enumerable: true,
|
||||||
|
get: function() {
|
||||||
|
return this._.size;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var safariNext;
|
||||||
|
|
||||||
|
try{
|
||||||
|
safariNext = new Function('iterator', 'makeIterator', 'var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;');
|
||||||
|
}catch(error){
|
||||||
|
// for of not implemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeIterator(iterator){
|
||||||
|
if(Array.isArray(iterator)){
|
||||||
|
var nextIndex = 0;
|
||||||
|
|
||||||
|
return {
|
||||||
|
next: function(){
|
||||||
|
return nextIndex < iterator.length ?
|
||||||
|
{value: iterator[nextIndex++], done: false} :
|
||||||
|
{done: true};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only an issue in safari
|
||||||
|
if(!iterator.next && safariNext){
|
||||||
|
iterator.next = safariNext(iterator, makeIterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
return iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Multimap;
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
if(typeof exports === 'object' && module && module.exports)
|
||||||
|
module.exports = Multimap;
|
||||||
|
else if(typeof define === 'function' && define.amd)
|
||||||
|
define(function() { return Multimap; });
|
34
node_modules/multimap/package.json
generated
vendored
Normal file
34
node_modules/multimap/package.json
generated
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"name": "multimap",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"description": "multi-map which allow multiple values for the same key",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "./node_modules/.bin/jshint *.js test/*.js",
|
||||||
|
"test": "npm run lint; node test/index.js;node test/es6map.js"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/villadora/multi-map.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/villadora/multi-map/issues"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"keys",
|
||||||
|
"map",
|
||||||
|
"multiple"
|
||||||
|
],
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"chai": "~1.7.2",
|
||||||
|
"es6-shim": "^0.13.0",
|
||||||
|
"jshint": "~2.1.9"
|
||||||
|
},
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"author": {
|
||||||
|
"name": "villa.gao",
|
||||||
|
"email": "jky239@gmail.com"
|
||||||
|
},
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
86
node_modules/multimap/test/es6map.js
generated
vendored
Normal file
86
node_modules/multimap/test/es6map.js
generated
vendored
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
require('es6-shim');
|
||||||
|
|
||||||
|
var Multimap = require('..');
|
||||||
|
|
||||||
|
var map = new Multimap([
|
||||||
|
['a', 'one'],
|
||||||
|
['b', 1],
|
||||||
|
['a', 'two'],
|
||||||
|
['b', 2]
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert.equal(map.size, 4);
|
||||||
|
|
||||||
|
assert.equal(map.get('a').length, 2);
|
||||||
|
assert.equal(map.get('a')[0], 'one'); // ['one', 'two']
|
||||||
|
assert.equal(map.get('a')[1], 'two'); // ['one', 'two']
|
||||||
|
|
||||||
|
assert.equal(map.get('b').length, 2);
|
||||||
|
assert.equal(map.get('b')[0], 1); // [1, 2]
|
||||||
|
assert.equal(map.get('b')[1], 2); // [1, 2]
|
||||||
|
|
||||||
|
|
||||||
|
assert(map.has('a'), "map contains key 'a'");
|
||||||
|
assert(!map.has('foo'), "map does not contain key 'foo'");
|
||||||
|
|
||||||
|
assert(map.has('a', 'one'), "map contains entry 'a'=>'one'");
|
||||||
|
assert(!map.has('b', 3), "map does not contain entry 'b'=>3");
|
||||||
|
|
||||||
|
map.set('a', 'three');
|
||||||
|
|
||||||
|
assert.equal(map.size, 5);
|
||||||
|
assert.equal(map.get('a').length, 3); // ['one', 'two', 'three']
|
||||||
|
|
||||||
|
map.set('b', 3, 4);
|
||||||
|
assert.equal(map.size, 7);
|
||||||
|
|
||||||
|
assert(map.delete('a', 'three'), "delete 'a'=>'three'");
|
||||||
|
assert.equal(map.size, 6);
|
||||||
|
assert(!map.delete('x'), "empty 'x' for delete");
|
||||||
|
assert(!map.delete('a', 'four'), "no such entry 'a'=>'four'");
|
||||||
|
assert(map.delete('b'), "delete all 'b'");
|
||||||
|
|
||||||
|
assert.equal(map.size, 2);
|
||||||
|
|
||||||
|
map.set('b', 1, 2);
|
||||||
|
assert.equal(map.size, 4); // 4
|
||||||
|
|
||||||
|
var cnt = 0;
|
||||||
|
map.forEach(function(value, key) {
|
||||||
|
// iterates { 'a', 'one' }, { 'a', 'two' }, { 'b', 1 }, { 'b', 2 }
|
||||||
|
cnt++;
|
||||||
|
assert(key == 'a' || key == 'b', "key must be either 'a' or 'b'");
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(cnt, 4);
|
||||||
|
|
||||||
|
cnt = 0;
|
||||||
|
map.forEachEntry(function(entry, key) {
|
||||||
|
// iterates { 'a', ['one', 'two'] }, { 'b', [1, 2] }
|
||||||
|
cnt++;
|
||||||
|
assert(key == 'a' || key == 'b', "key must be either 'a' or 'b'");
|
||||||
|
assert.equal(entry.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(cnt, 2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var keys = map.keys(); // ['a', 'b']
|
||||||
|
assert.equal(keys.next().value, 'a');
|
||||||
|
assert.equal(keys.next().value, 'b');
|
||||||
|
assert(keys.next().done);
|
||||||
|
|
||||||
|
var values = map.values(); // ['one', 'two', 1, 2]
|
||||||
|
assert.equal(values.next().value, 'one');
|
||||||
|
assert.equal(values.next().value, 'two');
|
||||||
|
assert.equal(values.next().value, 1);
|
||||||
|
assert.equal(values.next().value, 2);
|
||||||
|
assert(values.next().done);
|
||||||
|
|
||||||
|
map.clear();
|
||||||
|
|
||||||
|
assert.equal(map.size, 0);
|
91
node_modules/multimap/test/index.js
generated
vendored
Normal file
91
node_modules/multimap/test/index.js
generated
vendored
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
var Multimap = require('..');
|
||||||
|
|
||||||
|
var map = new Multimap([
|
||||||
|
['a', 'one'],
|
||||||
|
['b', 1],
|
||||||
|
['a', 'two'],
|
||||||
|
['b', 2]
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert.equal(map.size, 4);
|
||||||
|
assert.equal(map.count, 2);
|
||||||
|
|
||||||
|
assert.equal(map.get('a').length, 2);
|
||||||
|
assert.equal(map.get('a')[0], 'one'); // ['one', 'two']
|
||||||
|
assert.equal(map.get('a')[1], 'two'); // ['one', 'two']
|
||||||
|
|
||||||
|
assert.equal(map.get('b').length, 2);
|
||||||
|
assert.equal(map.get('b')[0], 1); // [1, 2]
|
||||||
|
assert.equal(map.get('b')[1], 2); // [1, 2]
|
||||||
|
|
||||||
|
|
||||||
|
assert(map.has('a'), "map contains key 'a'");
|
||||||
|
assert(!map.has('foo'), "map does not contain key 'foo'");
|
||||||
|
|
||||||
|
assert(map.has('a', 'one'), "map contains entry 'a'=>'one'");
|
||||||
|
assert(!map.has('b', 3), "map does not contain entry 'b'=>3");
|
||||||
|
|
||||||
|
map.set('a', 'three');
|
||||||
|
|
||||||
|
assert.equal(map.size, 5);
|
||||||
|
assert.equal(map.count, 2);
|
||||||
|
assert.equal(map.get('a').length, 3); // ['one', 'two', 'three']
|
||||||
|
|
||||||
|
map.set('b', 3, 4);
|
||||||
|
assert.equal(map.size, 7);
|
||||||
|
assert.equal(map.count, 2);
|
||||||
|
|
||||||
|
assert(map.delete('a', 'three'), "delete 'a'=>'three'");
|
||||||
|
assert.equal(map.size, 6);
|
||||||
|
assert.equal(map.count, 2);
|
||||||
|
assert(!map.delete('x'), "empty 'x' for delete");
|
||||||
|
assert(!map.delete('a', 'four'), "no such entry 'a'=>'four'");
|
||||||
|
assert(map.delete('b'), "delete all 'b'");
|
||||||
|
|
||||||
|
assert.equal(map.size, 2);
|
||||||
|
assert.equal(map.count, 1);
|
||||||
|
|
||||||
|
map.set('b', 1, 2);
|
||||||
|
assert.equal(map.size, 4); // 4
|
||||||
|
assert.equal(map.count, 2);
|
||||||
|
|
||||||
|
var cnt = 0;
|
||||||
|
map.forEach(function(value, key) {
|
||||||
|
// iterates { 'a', 'one' }, { 'a', 'two' }, { 'b', 1 }, { 'b', 2 }
|
||||||
|
cnt++;
|
||||||
|
assert(key == 'a' || key == 'b', "key must be either 'a' or 'b'");
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(cnt, 4);
|
||||||
|
|
||||||
|
cnt = 0;
|
||||||
|
map.forEachEntry(function(entry, key) {
|
||||||
|
// iterates { 'a', ['one', 'two'] }, { 'b', [1, 2] }
|
||||||
|
cnt++;
|
||||||
|
assert(key == 'a' || key == 'b', "key must be either 'a' or 'b'");
|
||||||
|
assert.equal(entry.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(cnt, 2);
|
||||||
|
|
||||||
|
|
||||||
|
var keys = map.keys(); // ['a', 'b']
|
||||||
|
assert.equal(keys.next().value, 'a');
|
||||||
|
assert.equal(keys.next().value, 'b');
|
||||||
|
assert(keys.next().done);
|
||||||
|
|
||||||
|
var values = map.values(); // ['one', 'two', 1, 2]
|
||||||
|
assert.equal(values.next().value, 'one');
|
||||||
|
assert.equal(values.next().value, 'two');
|
||||||
|
assert.equal(values.next().value, 1);
|
||||||
|
assert.equal(values.next().value, 2);
|
||||||
|
assert(values.next().done);
|
||||||
|
|
||||||
|
|
||||||
|
map.clear();
|
||||||
|
|
||||||
|
assert.equal(map.size, 0);
|
||||||
|
assert.equal(map.count, 0);
|
92
node_modules/multimap/test/test.html
generated
vendored
Normal file
92
node_modules/multimap/test/test.html
generated
vendored
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>MultiMap Tests</title>
|
||||||
|
<script src="../node_modules/chai/chai.js"></script>
|
||||||
|
<script src="../index.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var assert = chai.assert;
|
||||||
|
var map = new Multimap([
|
||||||
|
['a', 'one'],
|
||||||
|
['b', 1],
|
||||||
|
['a', 'two'],
|
||||||
|
['b', 2]
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert.equal(map.size, 4);
|
||||||
|
|
||||||
|
assert.equal(map.get('a').length, 2);
|
||||||
|
assert.equal(map.get('a')[0], 'one'); // ['one', 'two']
|
||||||
|
assert.equal(map.get('a')[1], 'two'); // ['one', 'two']
|
||||||
|
|
||||||
|
assert.equal(map.get('b').length, 2);
|
||||||
|
assert.equal(map.get('b')[0], 1); // [1, 2]
|
||||||
|
assert.equal(map.get('b')[1], 2); // [1, 2]
|
||||||
|
|
||||||
|
|
||||||
|
assert(map.has('a'), "map contains key 'a'");
|
||||||
|
assert(!map.has('foo'), "map does not contain key 'foo'");
|
||||||
|
|
||||||
|
assert(map.has('a', 'one'), "map contains entry 'a'=>'one'");
|
||||||
|
assert(!map.has('b', 3), "map does not contain entry 'b'=>3");
|
||||||
|
|
||||||
|
map.set('a', 'three');
|
||||||
|
|
||||||
|
assert.equal(map.size, 5);
|
||||||
|
assert.equal(map.get('a').length, 3); // ['one', 'two', 'three']
|
||||||
|
|
||||||
|
map.set('b', 3, 4);
|
||||||
|
assert.equal(map.size, 7);
|
||||||
|
|
||||||
|
assert(map.delete('a', 'three'), "delete 'a'=>'three'");
|
||||||
|
assert.equal(map.size, 6);
|
||||||
|
assert(!map.delete('x'), "empty 'x' for delete");
|
||||||
|
assert(!map.delete('a', 'four'), "no such entry 'a'=>'four'");
|
||||||
|
assert(map.delete('b'), "delete all 'b'");
|
||||||
|
|
||||||
|
assert.equal(map.size, 2);
|
||||||
|
|
||||||
|
map.set('b', 1, 2);
|
||||||
|
assert.equal(map.size, 4); // 4
|
||||||
|
|
||||||
|
var cnt = 0;
|
||||||
|
map.forEach(function(value, key) {
|
||||||
|
// iterates { 'a', 'one' }, { 'a', 'two' }, { 'b', 1 }, { 'b', 2 }
|
||||||
|
cnt++;
|
||||||
|
assert(key == 'a' || key == 'b', "key must be either 'a' or 'b'");
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(cnt, 4);
|
||||||
|
|
||||||
|
cnt = 0;
|
||||||
|
map.forEachEntry(function(entry, key) {
|
||||||
|
// iterates { 'a', ['one', 'two'] }, { 'b', [1, 2] }
|
||||||
|
cnt++;
|
||||||
|
assert(key == 'a' || key == 'b', "key must be either 'a' or 'b'");
|
||||||
|
assert.equal(entry.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(cnt, 2);
|
||||||
|
|
||||||
|
|
||||||
|
var keys = map.keys(); // ['a', 'b']
|
||||||
|
assert.equal(keys.next().value, 'a');
|
||||||
|
assert.equal(keys.next().value, 'b');
|
||||||
|
assert(keys.next().done);
|
||||||
|
|
||||||
|
var values = map.values(); // ['one', 'two', 1, 2]
|
||||||
|
assert.equal(values.next().value, 'one');
|
||||||
|
assert.equal(values.next().value, 'two');
|
||||||
|
assert.equal(values.next().value, 1);
|
||||||
|
assert.equal(values.next().value, 2);
|
||||||
|
assert(values.next().done);
|
||||||
|
|
||||||
|
|
||||||
|
map.clear();
|
||||||
|
|
||||||
|
assert.equal(map.size, 0);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
202
node_modules/shift-ast/LICENSE
generated
vendored
Normal file
202
node_modules/shift-ast/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
63
node_modules/shift-ast/README.md
generated
vendored
Normal file
63
node_modules/shift-ast/README.md
generated
vendored
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
Shift AST Constructors
|
||||||
|
======================
|
||||||
|
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
This project provides constructors for
|
||||||
|
[Shift format](https://github.com/shapesecurity/shift-spec) AST nodes.
|
||||||
|
|
||||||
|
The resulting objects are suitable for use with the rest of the [Shift suite](http://shift-ast.org/).
|
||||||
|
|
||||||
|
There is a version with typechecking available as `shift-ast/checked` for use during development.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
[Stable](http://nodejs.org/api/documentation.html#documentation_stability_index).
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install shift-ast
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
var AST = require("shift-ast"); // or "shift-ast/checked"
|
||||||
|
var myAstFragment = new AST.LabeledStatement({
|
||||||
|
label: "label",
|
||||||
|
body: new AST.EmptyStatement
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
* Open a Github issue with a description of your desired change. If one exists already, leave a message stating that you are working on it with the date you expect it to be complete.
|
||||||
|
* Fork this repo, and clone the forked repo.
|
||||||
|
* Install dependencies with `npm install`.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Create a feature branch. Make your changes. Add tests.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Make a commit that includes the text "fixes #*XX*" where *XX* is the Github issue.
|
||||||
|
* Open a Pull Request on Github.
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright 2014 Shape Security, Inc.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
17
node_modules/shift-ast/checked.js
generated
vendored
Normal file
17
node_modules/shift-ast/checked.js
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2016 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = require('./gen/checked');
|
19
node_modules/shift-ast/gen/checked.d.ts
generated
vendored
Normal file
19
node_modules/shift-ast/gen/checked.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// Generated by scripts/generate-dts.js.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright 2019 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './index';
|
2048
node_modules/shift-ast/gen/checked.js
generated
vendored
Normal file
2048
node_modules/shift-ast/gen/checked.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
707
node_modules/shift-ast/gen/index.d.ts
generated
vendored
Normal file
707
node_modules/shift-ast/gen/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,707 @@
|
||||||
|
// Generated by scripts/generate-dts.js.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright 2019 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
type Init<Node> = Pick<Node, Exclude<keyof Node, 'type'>>;
|
||||||
|
|
||||||
|
export type Node = ArrayAssignmentTarget | ArrayBinding | ArrayExpression | ArrowExpression | AssignmentExpression | AssignmentTargetIdentifier | AssignmentTargetPropertyIdentifier | AssignmentTargetPropertyProperty | AssignmentTargetWithDefault | AwaitExpression | BinaryExpression | BindingIdentifier | BindingPropertyIdentifier | BindingPropertyProperty | BindingWithDefault | Block | BlockStatement | BreakStatement | CallExpression | CatchClause | ClassDeclaration | ClassElement | ClassExpression | CompoundAssignmentExpression | ComputedMemberAssignmentTarget | ComputedMemberExpression | ComputedPropertyName | ConditionalExpression | ContinueStatement | DataProperty | DebuggerStatement | Directive | DoWhileStatement | EmptyStatement | Export | ExportAllFrom | ExportDefault | ExportFrom | ExportFromSpecifier | ExportLocalSpecifier | ExportLocals | ExpressionStatement | ForAwaitStatement | ForInStatement | ForOfStatement | ForStatement | FormalParameters | FunctionBody | FunctionDeclaration | FunctionExpression | Getter | IdentifierExpression | IfStatement | Import | ImportNamespace | ImportSpecifier | LabeledStatement | LiteralBooleanExpression | LiteralInfinityExpression | LiteralNullExpression | LiteralNumericExpression | LiteralRegExpExpression | LiteralStringExpression | Method | Module | NewExpression | NewTargetExpression | ObjectAssignmentTarget | ObjectBinding | ObjectExpression | ReturnStatement | Script | Setter | ShorthandProperty | SpreadElement | SpreadProperty | StaticMemberAssignmentTarget | StaticMemberExpression | StaticPropertyName | Super | SwitchCase | SwitchDefault | SwitchStatement | SwitchStatementWithDefault | TemplateElement | TemplateExpression | ThisExpression | ThrowStatement | TryCatchStatement | TryFinallyStatement | UnaryExpression | UpdateExpression | VariableDeclaration | VariableDeclarationStatement | VariableDeclarator | WhileStatement | WithStatement | YieldExpression | YieldGeneratorExpression;
|
||||||
|
|
||||||
|
export type Expression = ArrayExpression | ArrowExpression | AssignmentExpression | AwaitExpression | BinaryExpression | CallExpression | ClassExpression | CompoundAssignmentExpression | ConditionalExpression | FunctionExpression | IdentifierExpression | LiteralBooleanExpression | LiteralInfinityExpression | LiteralNullExpression | LiteralNumericExpression | LiteralRegExpExpression | LiteralStringExpression | ComputedMemberExpression | StaticMemberExpression | NewExpression | NewTargetExpression | ObjectExpression | TemplateExpression | ThisExpression | UnaryExpression | UpdateExpression | YieldExpression | YieldGeneratorExpression;
|
||||||
|
|
||||||
|
export type Statement = BlockStatement | BreakStatement | ClassDeclaration | ContinueStatement | DebuggerStatement | EmptyStatement | ExpressionStatement | FunctionDeclaration | IfStatement | DoWhileStatement | ForAwaitStatement | ForInStatement | ForOfStatement | ForStatement | WhileStatement | LabeledStatement | ReturnStatement | SwitchStatement | SwitchStatementWithDefault | ThrowStatement | TryCatchStatement | TryFinallyStatement | VariableDeclarationStatement | WithStatement;
|
||||||
|
|
||||||
|
|
||||||
|
export class ArrayAssignmentTarget {
|
||||||
|
type: 'ArrayAssignmentTarget';
|
||||||
|
elements: Array<AssignmentTargetWithDefault | ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget | null>;
|
||||||
|
rest: ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget | null;
|
||||||
|
constructor(init: Init<ArrayAssignmentTarget>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ArrayBinding {
|
||||||
|
type: 'ArrayBinding';
|
||||||
|
elements: Array<BindingWithDefault | BindingIdentifier | ArrayBinding | ObjectBinding | null>;
|
||||||
|
rest: BindingIdentifier | ArrayBinding | ObjectBinding | null;
|
||||||
|
constructor(init: Init<ArrayBinding>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ArrayExpression {
|
||||||
|
type: 'ArrayExpression';
|
||||||
|
elements: Array<Expression | SpreadElement | null>;
|
||||||
|
constructor(init: Init<ArrayExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ArrowExpression {
|
||||||
|
type: 'ArrowExpression';
|
||||||
|
isAsync: boolean;
|
||||||
|
params: FormalParameters;
|
||||||
|
body: Expression | FunctionBody;
|
||||||
|
constructor(init: Init<ArrowExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AssignmentExpression {
|
||||||
|
type: 'AssignmentExpression';
|
||||||
|
binding: ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget;
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<AssignmentExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AssignmentTargetIdentifier {
|
||||||
|
type: 'AssignmentTargetIdentifier';
|
||||||
|
name: string;
|
||||||
|
constructor(init: Init<AssignmentTargetIdentifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AssignmentTargetPropertyIdentifier {
|
||||||
|
type: 'AssignmentTargetPropertyIdentifier';
|
||||||
|
binding: AssignmentTargetIdentifier;
|
||||||
|
init: Expression | null;
|
||||||
|
constructor(init: Init<AssignmentTargetPropertyIdentifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AssignmentTargetPropertyProperty {
|
||||||
|
type: 'AssignmentTargetPropertyProperty';
|
||||||
|
name: ComputedPropertyName | StaticPropertyName;
|
||||||
|
binding: AssignmentTargetWithDefault | ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget;
|
||||||
|
constructor(init: Init<AssignmentTargetPropertyProperty>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AssignmentTargetWithDefault {
|
||||||
|
type: 'AssignmentTargetWithDefault';
|
||||||
|
binding: ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget;
|
||||||
|
init: Expression;
|
||||||
|
constructor(init: Init<AssignmentTargetWithDefault>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AwaitExpression {
|
||||||
|
type: 'AwaitExpression';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<AwaitExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BinaryExpression {
|
||||||
|
type: 'BinaryExpression';
|
||||||
|
left: Expression;
|
||||||
|
operator: '==' | '!=' | '===' | '!==' | '<' | '<=' | '>' | '>=' | 'in' | 'instanceof' | '<<' | '>>' | '>>>' | '+' | '-' | '*' | '/' | '%' | '**' | ',' | '||' | '&&' | '|' | '^' | '&';
|
||||||
|
right: Expression;
|
||||||
|
constructor(init: Init<BinaryExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BindingIdentifier {
|
||||||
|
type: 'BindingIdentifier';
|
||||||
|
name: string;
|
||||||
|
constructor(init: Init<BindingIdentifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BindingPropertyIdentifier {
|
||||||
|
type: 'BindingPropertyIdentifier';
|
||||||
|
binding: BindingIdentifier;
|
||||||
|
init: Expression | null;
|
||||||
|
constructor(init: Init<BindingPropertyIdentifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BindingPropertyProperty {
|
||||||
|
type: 'BindingPropertyProperty';
|
||||||
|
name: ComputedPropertyName | StaticPropertyName;
|
||||||
|
binding: BindingWithDefault | BindingIdentifier | ArrayBinding | ObjectBinding;
|
||||||
|
constructor(init: Init<BindingPropertyProperty>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BindingWithDefault {
|
||||||
|
type: 'BindingWithDefault';
|
||||||
|
binding: BindingIdentifier | ArrayBinding | ObjectBinding;
|
||||||
|
init: Expression;
|
||||||
|
constructor(init: Init<BindingWithDefault>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Block {
|
||||||
|
type: 'Block';
|
||||||
|
statements: Array<Statement>;
|
||||||
|
constructor(init: Init<Block>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BlockStatement {
|
||||||
|
type: 'BlockStatement';
|
||||||
|
block: Block;
|
||||||
|
constructor(init: Init<BlockStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class BreakStatement {
|
||||||
|
type: 'BreakStatement';
|
||||||
|
label: string | null;
|
||||||
|
constructor(init: Init<BreakStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CallExpression {
|
||||||
|
type: 'CallExpression';
|
||||||
|
callee: Expression | Super;
|
||||||
|
arguments: Array<Expression | SpreadElement>;
|
||||||
|
constructor(init: Init<CallExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CatchClause {
|
||||||
|
type: 'CatchClause';
|
||||||
|
binding: BindingIdentifier | ArrayBinding | ObjectBinding | null;
|
||||||
|
body: Block;
|
||||||
|
constructor(init: Init<CatchClause>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ClassDeclaration {
|
||||||
|
type: 'ClassDeclaration';
|
||||||
|
name: BindingIdentifier;
|
||||||
|
super: Expression | null;
|
||||||
|
elements: Array<ClassElement>;
|
||||||
|
constructor(init: Init<ClassDeclaration>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ClassElement {
|
||||||
|
type: 'ClassElement';
|
||||||
|
isStatic: boolean;
|
||||||
|
method: Getter | Method | Setter;
|
||||||
|
constructor(init: Init<ClassElement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ClassExpression {
|
||||||
|
type: 'ClassExpression';
|
||||||
|
name: BindingIdentifier | null;
|
||||||
|
super: Expression | null;
|
||||||
|
elements: Array<ClassElement>;
|
||||||
|
constructor(init: Init<ClassExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CompoundAssignmentExpression {
|
||||||
|
type: 'CompoundAssignmentExpression';
|
||||||
|
binding: AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget;
|
||||||
|
operator: '+=' | '-=' | '*=' | '/=' | '%=' | '**=' | '<<=' | '>>=' | '>>>=' | '|=' | '^=' | '&=';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<CompoundAssignmentExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ComputedMemberAssignmentTarget {
|
||||||
|
type: 'ComputedMemberAssignmentTarget';
|
||||||
|
object: Expression | Super;
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<ComputedMemberAssignmentTarget>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ComputedMemberExpression {
|
||||||
|
type: 'ComputedMemberExpression';
|
||||||
|
object: Expression | Super;
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<ComputedMemberExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ComputedPropertyName {
|
||||||
|
type: 'ComputedPropertyName';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<ComputedPropertyName>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ConditionalExpression {
|
||||||
|
type: 'ConditionalExpression';
|
||||||
|
test: Expression;
|
||||||
|
consequent: Expression;
|
||||||
|
alternate: Expression;
|
||||||
|
constructor(init: Init<ConditionalExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ContinueStatement {
|
||||||
|
type: 'ContinueStatement';
|
||||||
|
label: string | null;
|
||||||
|
constructor(init: Init<ContinueStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DataProperty {
|
||||||
|
type: 'DataProperty';
|
||||||
|
name: ComputedPropertyName | StaticPropertyName;
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<DataProperty>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DebuggerStatement {
|
||||||
|
type: 'DebuggerStatement';
|
||||||
|
constructor(init?: Init<DebuggerStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Directive {
|
||||||
|
type: 'Directive';
|
||||||
|
rawValue: string;
|
||||||
|
constructor(init: Init<Directive>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DoWhileStatement {
|
||||||
|
type: 'DoWhileStatement';
|
||||||
|
body: Statement;
|
||||||
|
test: Expression;
|
||||||
|
constructor(init: Init<DoWhileStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class EmptyStatement {
|
||||||
|
type: 'EmptyStatement';
|
||||||
|
constructor(init?: Init<EmptyStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Export {
|
||||||
|
type: 'Export';
|
||||||
|
declaration: ClassDeclaration | FunctionDeclaration | VariableDeclaration;
|
||||||
|
constructor(init: Init<Export>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExportAllFrom {
|
||||||
|
type: 'ExportAllFrom';
|
||||||
|
moduleSpecifier: string;
|
||||||
|
constructor(init: Init<ExportAllFrom>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExportDefault {
|
||||||
|
type: 'ExportDefault';
|
||||||
|
body: ClassDeclaration | Expression | FunctionDeclaration;
|
||||||
|
constructor(init: Init<ExportDefault>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExportFrom {
|
||||||
|
type: 'ExportFrom';
|
||||||
|
namedExports: Array<ExportFromSpecifier>;
|
||||||
|
moduleSpecifier: string;
|
||||||
|
constructor(init: Init<ExportFrom>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExportFromSpecifier {
|
||||||
|
type: 'ExportFromSpecifier';
|
||||||
|
name: string;
|
||||||
|
exportedName: string | null;
|
||||||
|
constructor(init: Init<ExportFromSpecifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExportLocalSpecifier {
|
||||||
|
type: 'ExportLocalSpecifier';
|
||||||
|
name: IdentifierExpression;
|
||||||
|
exportedName: string | null;
|
||||||
|
constructor(init: Init<ExportLocalSpecifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExportLocals {
|
||||||
|
type: 'ExportLocals';
|
||||||
|
namedExports: Array<ExportLocalSpecifier>;
|
||||||
|
constructor(init: Init<ExportLocals>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExpressionStatement {
|
||||||
|
type: 'ExpressionStatement';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<ExpressionStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ForAwaitStatement {
|
||||||
|
type: 'ForAwaitStatement';
|
||||||
|
left: ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget | VariableDeclaration;
|
||||||
|
right: Expression;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<ForAwaitStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ForInStatement {
|
||||||
|
type: 'ForInStatement';
|
||||||
|
left: ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget | VariableDeclaration;
|
||||||
|
right: Expression;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<ForInStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ForOfStatement {
|
||||||
|
type: 'ForOfStatement';
|
||||||
|
left: ArrayAssignmentTarget | ObjectAssignmentTarget | AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget | VariableDeclaration;
|
||||||
|
right: Expression;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<ForOfStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ForStatement {
|
||||||
|
type: 'ForStatement';
|
||||||
|
init: Expression | VariableDeclaration | null;
|
||||||
|
test: Expression | null;
|
||||||
|
update: Expression | null;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<ForStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FormalParameters {
|
||||||
|
type: 'FormalParameters';
|
||||||
|
items: Array<BindingWithDefault | BindingIdentifier | ArrayBinding | ObjectBinding>;
|
||||||
|
rest: BindingIdentifier | ArrayBinding | ObjectBinding | null;
|
||||||
|
constructor(init: Init<FormalParameters>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FunctionBody {
|
||||||
|
type: 'FunctionBody';
|
||||||
|
directives: Array<Directive>;
|
||||||
|
statements: Array<Statement>;
|
||||||
|
constructor(init: Init<FunctionBody>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FunctionDeclaration {
|
||||||
|
type: 'FunctionDeclaration';
|
||||||
|
isAsync: boolean;
|
||||||
|
isGenerator: boolean;
|
||||||
|
name: BindingIdentifier;
|
||||||
|
params: FormalParameters;
|
||||||
|
body: FunctionBody;
|
||||||
|
constructor(init: Init<FunctionDeclaration>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FunctionExpression {
|
||||||
|
type: 'FunctionExpression';
|
||||||
|
isAsync: boolean;
|
||||||
|
isGenerator: boolean;
|
||||||
|
name: BindingIdentifier | null;
|
||||||
|
params: FormalParameters;
|
||||||
|
body: FunctionBody;
|
||||||
|
constructor(init: Init<FunctionExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Getter {
|
||||||
|
type: 'Getter';
|
||||||
|
name: ComputedPropertyName | StaticPropertyName;
|
||||||
|
body: FunctionBody;
|
||||||
|
constructor(init: Init<Getter>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class IdentifierExpression {
|
||||||
|
type: 'IdentifierExpression';
|
||||||
|
name: string;
|
||||||
|
constructor(init: Init<IdentifierExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class IfStatement {
|
||||||
|
type: 'IfStatement';
|
||||||
|
test: Expression;
|
||||||
|
consequent: Statement;
|
||||||
|
alternate: Statement | null;
|
||||||
|
constructor(init: Init<IfStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Import {
|
||||||
|
type: 'Import';
|
||||||
|
defaultBinding: BindingIdentifier | null;
|
||||||
|
namedImports: Array<ImportSpecifier>;
|
||||||
|
moduleSpecifier: string;
|
||||||
|
constructor(init: Init<Import>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ImportNamespace {
|
||||||
|
type: 'ImportNamespace';
|
||||||
|
defaultBinding: BindingIdentifier | null;
|
||||||
|
namespaceBinding: BindingIdentifier;
|
||||||
|
moduleSpecifier: string;
|
||||||
|
constructor(init: Init<ImportNamespace>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ImportSpecifier {
|
||||||
|
type: 'ImportSpecifier';
|
||||||
|
name: string | null;
|
||||||
|
binding: BindingIdentifier;
|
||||||
|
constructor(init: Init<ImportSpecifier>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LabeledStatement {
|
||||||
|
type: 'LabeledStatement';
|
||||||
|
label: string;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<LabeledStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LiteralBooleanExpression {
|
||||||
|
type: 'LiteralBooleanExpression';
|
||||||
|
value: boolean;
|
||||||
|
constructor(init: Init<LiteralBooleanExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LiteralInfinityExpression {
|
||||||
|
type: 'LiteralInfinityExpression';
|
||||||
|
constructor(init?: Init<LiteralInfinityExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LiteralNullExpression {
|
||||||
|
type: 'LiteralNullExpression';
|
||||||
|
constructor(init?: Init<LiteralNullExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LiteralNumericExpression {
|
||||||
|
type: 'LiteralNumericExpression';
|
||||||
|
value: number;
|
||||||
|
constructor(init: Init<LiteralNumericExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LiteralRegExpExpression {
|
||||||
|
type: 'LiteralRegExpExpression';
|
||||||
|
pattern: string;
|
||||||
|
global: boolean;
|
||||||
|
ignoreCase: boolean;
|
||||||
|
multiLine: boolean;
|
||||||
|
dotAll: boolean;
|
||||||
|
unicode: boolean;
|
||||||
|
sticky: boolean;
|
||||||
|
constructor(init: Init<LiteralRegExpExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LiteralStringExpression {
|
||||||
|
type: 'LiteralStringExpression';
|
||||||
|
value: string;
|
||||||
|
constructor(init: Init<LiteralStringExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Method {
|
||||||
|
type: 'Method';
|
||||||
|
isAsync: boolean;
|
||||||
|
isGenerator: boolean;
|
||||||
|
name: ComputedPropertyName | StaticPropertyName;
|
||||||
|
params: FormalParameters;
|
||||||
|
body: FunctionBody;
|
||||||
|
constructor(init: Init<Method>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Module {
|
||||||
|
type: 'Module';
|
||||||
|
directives: Array<Directive>;
|
||||||
|
items: Array<Export | ExportAllFrom | ExportDefault | ExportFrom | ExportLocals | Import | ImportNamespace | Statement>;
|
||||||
|
constructor(init: Init<Module>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class NewExpression {
|
||||||
|
type: 'NewExpression';
|
||||||
|
callee: Expression;
|
||||||
|
arguments: Array<Expression | SpreadElement>;
|
||||||
|
constructor(init: Init<NewExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class NewTargetExpression {
|
||||||
|
type: 'NewTargetExpression';
|
||||||
|
constructor(init?: Init<NewTargetExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ObjectAssignmentTarget {
|
||||||
|
type: 'ObjectAssignmentTarget';
|
||||||
|
properties: Array<AssignmentTargetPropertyIdentifier | AssignmentTargetPropertyProperty>;
|
||||||
|
rest: AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget | null;
|
||||||
|
constructor(init: Init<ObjectAssignmentTarget>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ObjectBinding {
|
||||||
|
type: 'ObjectBinding';
|
||||||
|
properties: Array<BindingPropertyIdentifier | BindingPropertyProperty>;
|
||||||
|
rest: BindingIdentifier | null;
|
||||||
|
constructor(init: Init<ObjectBinding>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ObjectExpression {
|
||||||
|
type: 'ObjectExpression';
|
||||||
|
properties: Array<DataProperty | Getter | Method | Setter | ShorthandProperty | SpreadProperty>;
|
||||||
|
constructor(init: Init<ObjectExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ReturnStatement {
|
||||||
|
type: 'ReturnStatement';
|
||||||
|
expression: Expression | null;
|
||||||
|
constructor(init: Init<ReturnStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Script {
|
||||||
|
type: 'Script';
|
||||||
|
directives: Array<Directive>;
|
||||||
|
statements: Array<Statement>;
|
||||||
|
constructor(init: Init<Script>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Setter {
|
||||||
|
type: 'Setter';
|
||||||
|
name: ComputedPropertyName | StaticPropertyName;
|
||||||
|
param: BindingWithDefault | BindingIdentifier | ArrayBinding | ObjectBinding;
|
||||||
|
body: FunctionBody;
|
||||||
|
constructor(init: Init<Setter>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ShorthandProperty {
|
||||||
|
type: 'ShorthandProperty';
|
||||||
|
name: IdentifierExpression;
|
||||||
|
constructor(init: Init<ShorthandProperty>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SpreadElement {
|
||||||
|
type: 'SpreadElement';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<SpreadElement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SpreadProperty {
|
||||||
|
type: 'SpreadProperty';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<SpreadProperty>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class StaticMemberAssignmentTarget {
|
||||||
|
type: 'StaticMemberAssignmentTarget';
|
||||||
|
object: Expression | Super;
|
||||||
|
property: string;
|
||||||
|
constructor(init: Init<StaticMemberAssignmentTarget>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class StaticMemberExpression {
|
||||||
|
type: 'StaticMemberExpression';
|
||||||
|
object: Expression | Super;
|
||||||
|
property: string;
|
||||||
|
constructor(init: Init<StaticMemberExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class StaticPropertyName {
|
||||||
|
type: 'StaticPropertyName';
|
||||||
|
value: string;
|
||||||
|
constructor(init: Init<StaticPropertyName>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Super {
|
||||||
|
type: 'Super';
|
||||||
|
constructor(init?: Init<Super>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SwitchCase {
|
||||||
|
type: 'SwitchCase';
|
||||||
|
test: Expression;
|
||||||
|
consequent: Array<Statement>;
|
||||||
|
constructor(init: Init<SwitchCase>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SwitchDefault {
|
||||||
|
type: 'SwitchDefault';
|
||||||
|
consequent: Array<Statement>;
|
||||||
|
constructor(init: Init<SwitchDefault>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SwitchStatement {
|
||||||
|
type: 'SwitchStatement';
|
||||||
|
discriminant: Expression;
|
||||||
|
cases: Array<SwitchCase>;
|
||||||
|
constructor(init: Init<SwitchStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SwitchStatementWithDefault {
|
||||||
|
type: 'SwitchStatementWithDefault';
|
||||||
|
discriminant: Expression;
|
||||||
|
preDefaultCases: Array<SwitchCase>;
|
||||||
|
defaultCase: SwitchDefault;
|
||||||
|
postDefaultCases: Array<SwitchCase>;
|
||||||
|
constructor(init: Init<SwitchStatementWithDefault>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TemplateElement {
|
||||||
|
type: 'TemplateElement';
|
||||||
|
rawValue: string;
|
||||||
|
constructor(init: Init<TemplateElement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TemplateExpression {
|
||||||
|
type: 'TemplateExpression';
|
||||||
|
tag: Expression | null;
|
||||||
|
elements: Array<Expression | TemplateElement>;
|
||||||
|
constructor(init: Init<TemplateExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ThisExpression {
|
||||||
|
type: 'ThisExpression';
|
||||||
|
constructor(init?: Init<ThisExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ThrowStatement {
|
||||||
|
type: 'ThrowStatement';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<ThrowStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TryCatchStatement {
|
||||||
|
type: 'TryCatchStatement';
|
||||||
|
body: Block;
|
||||||
|
catchClause: CatchClause;
|
||||||
|
constructor(init: Init<TryCatchStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TryFinallyStatement {
|
||||||
|
type: 'TryFinallyStatement';
|
||||||
|
body: Block;
|
||||||
|
catchClause: CatchClause | null;
|
||||||
|
finalizer: Block;
|
||||||
|
constructor(init: Init<TryFinallyStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class UnaryExpression {
|
||||||
|
type: 'UnaryExpression';
|
||||||
|
operator: '+' | '-' | '!' | '~' | 'typeof' | 'void' | 'delete';
|
||||||
|
operand: Expression;
|
||||||
|
constructor(init: Init<UnaryExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class UpdateExpression {
|
||||||
|
type: 'UpdateExpression';
|
||||||
|
isPrefix: boolean;
|
||||||
|
operator: '++' | '--';
|
||||||
|
operand: AssignmentTargetIdentifier | ComputedMemberAssignmentTarget | StaticMemberAssignmentTarget;
|
||||||
|
constructor(init: Init<UpdateExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class VariableDeclaration {
|
||||||
|
type: 'VariableDeclaration';
|
||||||
|
kind: 'var' | 'let' | 'const';
|
||||||
|
declarators: Array<VariableDeclarator>;
|
||||||
|
constructor(init: Init<VariableDeclaration>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class VariableDeclarationStatement {
|
||||||
|
type: 'VariableDeclarationStatement';
|
||||||
|
declaration: VariableDeclaration;
|
||||||
|
constructor(init: Init<VariableDeclarationStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class VariableDeclarator {
|
||||||
|
type: 'VariableDeclarator';
|
||||||
|
binding: BindingIdentifier | ArrayBinding | ObjectBinding;
|
||||||
|
init: Expression | null;
|
||||||
|
constructor(init: Init<VariableDeclarator>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class WhileStatement {
|
||||||
|
type: 'WhileStatement';
|
||||||
|
test: Expression;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<WhileStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class WithStatement {
|
||||||
|
type: 'WithStatement';
|
||||||
|
object: Expression;
|
||||||
|
body: Statement;
|
||||||
|
constructor(init: Init<WithStatement>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class YieldExpression {
|
||||||
|
type: 'YieldExpression';
|
||||||
|
expression: Expression | null;
|
||||||
|
constructor(init: Init<YieldExpression>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class YieldGeneratorExpression {
|
||||||
|
type: 'YieldGeneratorExpression';
|
||||||
|
expression: Expression;
|
||||||
|
constructor(init: Init<YieldGeneratorExpression>);
|
||||||
|
}
|
797
node_modules/shift-ast/gen/index.js
generated
vendored
Normal file
797
node_modules/shift-ast/gen/index.js
generated
vendored
Normal file
|
@ -0,0 +1,797 @@
|
||||||
|
// Generated by scripts/generate.js.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright 2016 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.ArrayAssignmentTarget = class {
|
||||||
|
constructor({ elements, rest }) {
|
||||||
|
this.type = 'ArrayAssignmentTarget';
|
||||||
|
this.elements = elements;
|
||||||
|
this.rest = rest;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ArrayBinding = class {
|
||||||
|
constructor({ elements, rest }) {
|
||||||
|
this.type = 'ArrayBinding';
|
||||||
|
this.elements = elements;
|
||||||
|
this.rest = rest;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ArrayExpression = class {
|
||||||
|
constructor({ elements }) {
|
||||||
|
this.type = 'ArrayExpression';
|
||||||
|
this.elements = elements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ArrowExpression = class {
|
||||||
|
constructor({ isAsync, params, body }) {
|
||||||
|
this.type = 'ArrowExpression';
|
||||||
|
this.isAsync = isAsync;
|
||||||
|
this.params = params;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AssignmentExpression = class {
|
||||||
|
constructor({ binding, expression }) {
|
||||||
|
this.type = 'AssignmentExpression';
|
||||||
|
this.binding = binding;
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AssignmentTargetIdentifier = class {
|
||||||
|
constructor({ name }) {
|
||||||
|
this.type = 'AssignmentTargetIdentifier';
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AssignmentTargetPropertyIdentifier = class {
|
||||||
|
constructor({ binding, init }) {
|
||||||
|
this.type = 'AssignmentTargetPropertyIdentifier';
|
||||||
|
this.binding = binding;
|
||||||
|
this.init = init;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AssignmentTargetPropertyProperty = class {
|
||||||
|
constructor({ name, binding }) {
|
||||||
|
this.type = 'AssignmentTargetPropertyProperty';
|
||||||
|
this.name = name;
|
||||||
|
this.binding = binding;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AssignmentTargetWithDefault = class {
|
||||||
|
constructor({ binding, init }) {
|
||||||
|
this.type = 'AssignmentTargetWithDefault';
|
||||||
|
this.binding = binding;
|
||||||
|
this.init = init;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AwaitExpression = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'AwaitExpression';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BinaryExpression = class {
|
||||||
|
constructor({ left, operator, right }) {
|
||||||
|
this.type = 'BinaryExpression';
|
||||||
|
this.left = left;
|
||||||
|
this.operator = operator;
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BindingIdentifier = class {
|
||||||
|
constructor({ name }) {
|
||||||
|
this.type = 'BindingIdentifier';
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BindingPropertyIdentifier = class {
|
||||||
|
constructor({ binding, init }) {
|
||||||
|
this.type = 'BindingPropertyIdentifier';
|
||||||
|
this.binding = binding;
|
||||||
|
this.init = init;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BindingPropertyProperty = class {
|
||||||
|
constructor({ name, binding }) {
|
||||||
|
this.type = 'BindingPropertyProperty';
|
||||||
|
this.name = name;
|
||||||
|
this.binding = binding;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BindingWithDefault = class {
|
||||||
|
constructor({ binding, init }) {
|
||||||
|
this.type = 'BindingWithDefault';
|
||||||
|
this.binding = binding;
|
||||||
|
this.init = init;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Block = class {
|
||||||
|
constructor({ statements }) {
|
||||||
|
this.type = 'Block';
|
||||||
|
this.statements = statements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BlockStatement = class {
|
||||||
|
constructor({ block }) {
|
||||||
|
this.type = 'BlockStatement';
|
||||||
|
this.block = block;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.BreakStatement = class {
|
||||||
|
constructor({ label }) {
|
||||||
|
this.type = 'BreakStatement';
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.CallExpression = class {
|
||||||
|
constructor({ callee, arguments: _arguments }) {
|
||||||
|
this.type = 'CallExpression';
|
||||||
|
this.callee = callee;
|
||||||
|
this.arguments = _arguments;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.CatchClause = class {
|
||||||
|
constructor({ binding, body }) {
|
||||||
|
this.type = 'CatchClause';
|
||||||
|
this.binding = binding;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ClassDeclaration = class {
|
||||||
|
constructor({ name, super: _super, elements }) {
|
||||||
|
this.type = 'ClassDeclaration';
|
||||||
|
this.name = name;
|
||||||
|
this.super = _super;
|
||||||
|
this.elements = elements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ClassElement = class {
|
||||||
|
constructor({ isStatic, method }) {
|
||||||
|
this.type = 'ClassElement';
|
||||||
|
this.isStatic = isStatic;
|
||||||
|
this.method = method;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ClassExpression = class {
|
||||||
|
constructor({ name, super: _super, elements }) {
|
||||||
|
this.type = 'ClassExpression';
|
||||||
|
this.name = name;
|
||||||
|
this.super = _super;
|
||||||
|
this.elements = elements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.CompoundAssignmentExpression = class {
|
||||||
|
constructor({ binding, operator, expression }) {
|
||||||
|
this.type = 'CompoundAssignmentExpression';
|
||||||
|
this.binding = binding;
|
||||||
|
this.operator = operator;
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ComputedMemberAssignmentTarget = class {
|
||||||
|
constructor({ object, expression }) {
|
||||||
|
this.type = 'ComputedMemberAssignmentTarget';
|
||||||
|
this.object = object;
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ComputedMemberExpression = class {
|
||||||
|
constructor({ object, expression }) {
|
||||||
|
this.type = 'ComputedMemberExpression';
|
||||||
|
this.object = object;
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ComputedPropertyName = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'ComputedPropertyName';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ConditionalExpression = class {
|
||||||
|
constructor({ test, consequent, alternate }) {
|
||||||
|
this.type = 'ConditionalExpression';
|
||||||
|
this.test = test;
|
||||||
|
this.consequent = consequent;
|
||||||
|
this.alternate = alternate;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ContinueStatement = class {
|
||||||
|
constructor({ label }) {
|
||||||
|
this.type = 'ContinueStatement';
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.DataProperty = class {
|
||||||
|
constructor({ name, expression }) {
|
||||||
|
this.type = 'DataProperty';
|
||||||
|
this.name = name;
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.DebuggerStatement = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'DebuggerStatement';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Directive = class {
|
||||||
|
constructor({ rawValue }) {
|
||||||
|
this.type = 'Directive';
|
||||||
|
this.rawValue = rawValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.DoWhileStatement = class {
|
||||||
|
constructor({ body, test }) {
|
||||||
|
this.type = 'DoWhileStatement';
|
||||||
|
this.body = body;
|
||||||
|
this.test = test;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.EmptyStatement = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'EmptyStatement';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Export = class {
|
||||||
|
constructor({ declaration }) {
|
||||||
|
this.type = 'Export';
|
||||||
|
this.declaration = declaration;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExportAllFrom = class {
|
||||||
|
constructor({ moduleSpecifier }) {
|
||||||
|
this.type = 'ExportAllFrom';
|
||||||
|
this.moduleSpecifier = moduleSpecifier;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExportDefault = class {
|
||||||
|
constructor({ body }) {
|
||||||
|
this.type = 'ExportDefault';
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExportFrom = class {
|
||||||
|
constructor({ namedExports, moduleSpecifier }) {
|
||||||
|
this.type = 'ExportFrom';
|
||||||
|
this.namedExports = namedExports;
|
||||||
|
this.moduleSpecifier = moduleSpecifier;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExportFromSpecifier = class {
|
||||||
|
constructor({ name, exportedName }) {
|
||||||
|
this.type = 'ExportFromSpecifier';
|
||||||
|
this.name = name;
|
||||||
|
this.exportedName = exportedName;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExportLocalSpecifier = class {
|
||||||
|
constructor({ name, exportedName }) {
|
||||||
|
this.type = 'ExportLocalSpecifier';
|
||||||
|
this.name = name;
|
||||||
|
this.exportedName = exportedName;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExportLocals = class {
|
||||||
|
constructor({ namedExports }) {
|
||||||
|
this.type = 'ExportLocals';
|
||||||
|
this.namedExports = namedExports;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ExpressionStatement = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'ExpressionStatement';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ForAwaitStatement = class {
|
||||||
|
constructor({ left, right, body }) {
|
||||||
|
this.type = 'ForAwaitStatement';
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ForInStatement = class {
|
||||||
|
constructor({ left, right, body }) {
|
||||||
|
this.type = 'ForInStatement';
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ForOfStatement = class {
|
||||||
|
constructor({ left, right, body }) {
|
||||||
|
this.type = 'ForOfStatement';
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ForStatement = class {
|
||||||
|
constructor({ init, test, update, body }) {
|
||||||
|
this.type = 'ForStatement';
|
||||||
|
this.init = init;
|
||||||
|
this.test = test;
|
||||||
|
this.update = update;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.FormalParameters = class {
|
||||||
|
constructor({ items, rest }) {
|
||||||
|
this.type = 'FormalParameters';
|
||||||
|
this.items = items;
|
||||||
|
this.rest = rest;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.FunctionBody = class {
|
||||||
|
constructor({ directives, statements }) {
|
||||||
|
this.type = 'FunctionBody';
|
||||||
|
this.directives = directives;
|
||||||
|
this.statements = statements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.FunctionDeclaration = class {
|
||||||
|
constructor({ isAsync, isGenerator, name, params, body }) {
|
||||||
|
this.type = 'FunctionDeclaration';
|
||||||
|
this.isAsync = isAsync;
|
||||||
|
this.isGenerator = isGenerator;
|
||||||
|
this.name = name;
|
||||||
|
this.params = params;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.FunctionExpression = class {
|
||||||
|
constructor({ isAsync, isGenerator, name, params, body }) {
|
||||||
|
this.type = 'FunctionExpression';
|
||||||
|
this.isAsync = isAsync;
|
||||||
|
this.isGenerator = isGenerator;
|
||||||
|
this.name = name;
|
||||||
|
this.params = params;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Getter = class {
|
||||||
|
constructor({ name, body }) {
|
||||||
|
this.type = 'Getter';
|
||||||
|
this.name = name;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.IdentifierExpression = class {
|
||||||
|
constructor({ name }) {
|
||||||
|
this.type = 'IdentifierExpression';
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.IfStatement = class {
|
||||||
|
constructor({ test, consequent, alternate }) {
|
||||||
|
this.type = 'IfStatement';
|
||||||
|
this.test = test;
|
||||||
|
this.consequent = consequent;
|
||||||
|
this.alternate = alternate;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Import = class {
|
||||||
|
constructor({ defaultBinding, namedImports, moduleSpecifier }) {
|
||||||
|
this.type = 'Import';
|
||||||
|
this.defaultBinding = defaultBinding;
|
||||||
|
this.namedImports = namedImports;
|
||||||
|
this.moduleSpecifier = moduleSpecifier;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ImportNamespace = class {
|
||||||
|
constructor({ defaultBinding, namespaceBinding, moduleSpecifier }) {
|
||||||
|
this.type = 'ImportNamespace';
|
||||||
|
this.defaultBinding = defaultBinding;
|
||||||
|
this.namespaceBinding = namespaceBinding;
|
||||||
|
this.moduleSpecifier = moduleSpecifier;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ImportSpecifier = class {
|
||||||
|
constructor({ name, binding }) {
|
||||||
|
this.type = 'ImportSpecifier';
|
||||||
|
this.name = name;
|
||||||
|
this.binding = binding;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LabeledStatement = class {
|
||||||
|
constructor({ label, body }) {
|
||||||
|
this.type = 'LabeledStatement';
|
||||||
|
this.label = label;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LiteralBooleanExpression = class {
|
||||||
|
constructor({ value }) {
|
||||||
|
this.type = 'LiteralBooleanExpression';
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LiteralInfinityExpression = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'LiteralInfinityExpression';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LiteralNullExpression = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'LiteralNullExpression';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LiteralNumericExpression = class {
|
||||||
|
constructor({ value }) {
|
||||||
|
this.type = 'LiteralNumericExpression';
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LiteralRegExpExpression = class {
|
||||||
|
constructor({ pattern, global, ignoreCase, multiLine, dotAll, unicode, sticky }) {
|
||||||
|
this.type = 'LiteralRegExpExpression';
|
||||||
|
this.pattern = pattern;
|
||||||
|
this.global = global;
|
||||||
|
this.ignoreCase = ignoreCase;
|
||||||
|
this.multiLine = multiLine;
|
||||||
|
this.dotAll = dotAll;
|
||||||
|
this.unicode = unicode;
|
||||||
|
this.sticky = sticky;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LiteralStringExpression = class {
|
||||||
|
constructor({ value }) {
|
||||||
|
this.type = 'LiteralStringExpression';
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Method = class {
|
||||||
|
constructor({ isAsync, isGenerator, name, params, body }) {
|
||||||
|
this.type = 'Method';
|
||||||
|
this.isAsync = isAsync;
|
||||||
|
this.isGenerator = isGenerator;
|
||||||
|
this.name = name;
|
||||||
|
this.params = params;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Module = class {
|
||||||
|
constructor({ directives, items }) {
|
||||||
|
this.type = 'Module';
|
||||||
|
this.directives = directives;
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.NewExpression = class {
|
||||||
|
constructor({ callee, arguments: _arguments }) {
|
||||||
|
this.type = 'NewExpression';
|
||||||
|
this.callee = callee;
|
||||||
|
this.arguments = _arguments;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.NewTargetExpression = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'NewTargetExpression';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ObjectAssignmentTarget = class {
|
||||||
|
constructor({ properties, rest }) {
|
||||||
|
this.type = 'ObjectAssignmentTarget';
|
||||||
|
this.properties = properties;
|
||||||
|
this.rest = rest;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ObjectBinding = class {
|
||||||
|
constructor({ properties, rest }) {
|
||||||
|
this.type = 'ObjectBinding';
|
||||||
|
this.properties = properties;
|
||||||
|
this.rest = rest;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ObjectExpression = class {
|
||||||
|
constructor({ properties }) {
|
||||||
|
this.type = 'ObjectExpression';
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ReturnStatement = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'ReturnStatement';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Script = class {
|
||||||
|
constructor({ directives, statements }) {
|
||||||
|
this.type = 'Script';
|
||||||
|
this.directives = directives;
|
||||||
|
this.statements = statements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Setter = class {
|
||||||
|
constructor({ name, param, body }) {
|
||||||
|
this.type = 'Setter';
|
||||||
|
this.name = name;
|
||||||
|
this.param = param;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ShorthandProperty = class {
|
||||||
|
constructor({ name }) {
|
||||||
|
this.type = 'ShorthandProperty';
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.SpreadElement = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'SpreadElement';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.SpreadProperty = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'SpreadProperty';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.StaticMemberAssignmentTarget = class {
|
||||||
|
constructor({ object, property }) {
|
||||||
|
this.type = 'StaticMemberAssignmentTarget';
|
||||||
|
this.object = object;
|
||||||
|
this.property = property;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.StaticMemberExpression = class {
|
||||||
|
constructor({ object, property }) {
|
||||||
|
this.type = 'StaticMemberExpression';
|
||||||
|
this.object = object;
|
||||||
|
this.property = property;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.StaticPropertyName = class {
|
||||||
|
constructor({ value }) {
|
||||||
|
this.type = 'StaticPropertyName';
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Super = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'Super';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.SwitchCase = class {
|
||||||
|
constructor({ test, consequent }) {
|
||||||
|
this.type = 'SwitchCase';
|
||||||
|
this.test = test;
|
||||||
|
this.consequent = consequent;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.SwitchDefault = class {
|
||||||
|
constructor({ consequent }) {
|
||||||
|
this.type = 'SwitchDefault';
|
||||||
|
this.consequent = consequent;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.SwitchStatement = class {
|
||||||
|
constructor({ discriminant, cases }) {
|
||||||
|
this.type = 'SwitchStatement';
|
||||||
|
this.discriminant = discriminant;
|
||||||
|
this.cases = cases;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.SwitchStatementWithDefault = class {
|
||||||
|
constructor({ discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
this.type = 'SwitchStatementWithDefault';
|
||||||
|
this.discriminant = discriminant;
|
||||||
|
this.preDefaultCases = preDefaultCases;
|
||||||
|
this.defaultCase = defaultCase;
|
||||||
|
this.postDefaultCases = postDefaultCases;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.TemplateElement = class {
|
||||||
|
constructor({ rawValue }) {
|
||||||
|
this.type = 'TemplateElement';
|
||||||
|
this.rawValue = rawValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.TemplateExpression = class {
|
||||||
|
constructor({ tag, elements }) {
|
||||||
|
this.type = 'TemplateExpression';
|
||||||
|
this.tag = tag;
|
||||||
|
this.elements = elements;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ThisExpression = class {
|
||||||
|
constructor() {
|
||||||
|
this.type = 'ThisExpression';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ThrowStatement = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'ThrowStatement';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.TryCatchStatement = class {
|
||||||
|
constructor({ body, catchClause }) {
|
||||||
|
this.type = 'TryCatchStatement';
|
||||||
|
this.body = body;
|
||||||
|
this.catchClause = catchClause;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.TryFinallyStatement = class {
|
||||||
|
constructor({ body, catchClause, finalizer }) {
|
||||||
|
this.type = 'TryFinallyStatement';
|
||||||
|
this.body = body;
|
||||||
|
this.catchClause = catchClause;
|
||||||
|
this.finalizer = finalizer;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.UnaryExpression = class {
|
||||||
|
constructor({ operator, operand }) {
|
||||||
|
this.type = 'UnaryExpression';
|
||||||
|
this.operator = operator;
|
||||||
|
this.operand = operand;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.UpdateExpression = class {
|
||||||
|
constructor({ isPrefix, operator, operand }) {
|
||||||
|
this.type = 'UpdateExpression';
|
||||||
|
this.isPrefix = isPrefix;
|
||||||
|
this.operator = operator;
|
||||||
|
this.operand = operand;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.VariableDeclaration = class {
|
||||||
|
constructor({ kind, declarators }) {
|
||||||
|
this.type = 'VariableDeclaration';
|
||||||
|
this.kind = kind;
|
||||||
|
this.declarators = declarators;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.VariableDeclarationStatement = class {
|
||||||
|
constructor({ declaration }) {
|
||||||
|
this.type = 'VariableDeclarationStatement';
|
||||||
|
this.declaration = declaration;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.VariableDeclarator = class {
|
||||||
|
constructor({ binding, init }) {
|
||||||
|
this.type = 'VariableDeclarator';
|
||||||
|
this.binding = binding;
|
||||||
|
this.init = init;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.WhileStatement = class {
|
||||||
|
constructor({ test, body }) {
|
||||||
|
this.type = 'WhileStatement';
|
||||||
|
this.test = test;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.WithStatement = class {
|
||||||
|
constructor({ object, body }) {
|
||||||
|
this.type = 'WithStatement';
|
||||||
|
this.object = object;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.YieldExpression = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'YieldExpression';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.YieldGeneratorExpression = class {
|
||||||
|
constructor({ expression }) {
|
||||||
|
this.type = 'YieldGeneratorExpression';
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
};
|
48
node_modules/shift-ast/package.json
generated
vendored
Normal file
48
node_modules/shift-ast/package.json
generated
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
"name": "shift-ast",
|
||||||
|
"version": "7.0.0",
|
||||||
|
"description": "constructors for the Shift AST format",
|
||||||
|
"author": "Shape Security",
|
||||||
|
"homepage": "https://github.com/shapesecurity/shift-ast-js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/shapesecurity/shift-ast-js.git"
|
||||||
|
},
|
||||||
|
"main": "gen/index.js",
|
||||||
|
"types": "gen/index.d.ts",
|
||||||
|
"files": [
|
||||||
|
"checked.js",
|
||||||
|
"gen"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha --inline-diffs --check-leaks --ui bdd --reporter dot test && tsc -p test",
|
||||||
|
"build": "mkdirp gen && node scripts/generate.js && node scripts/generate-checked.js && node scripts/generate-dts.js",
|
||||||
|
"lint": "eslint scripts gen test",
|
||||||
|
"prepare": "rimraf gen && npm run build"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/assert": "^1.4.2",
|
||||||
|
"@types/mocha": "^5.2.6",
|
||||||
|
"eslint": "^5.6.1",
|
||||||
|
"esutils": "^2.0.2",
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
|
"mocha": "^8.1.3",
|
||||||
|
"rimraf": "^2.6.3",
|
||||||
|
"shift-spec": "2019.0.0",
|
||||||
|
"typescript": "^3.3.3333"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"Shift",
|
||||||
|
"AST",
|
||||||
|
"node",
|
||||||
|
"constructor",
|
||||||
|
"class",
|
||||||
|
"abstract",
|
||||||
|
"syntax",
|
||||||
|
"tree"
|
||||||
|
],
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shapesecurity/shift-ast-js/issues"
|
||||||
|
},
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
}
|
202
node_modules/shift-parser/LICENSE
generated
vendored
Normal file
202
node_modules/shift-parser/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
83
node_modules/shift-parser/README.md
generated
vendored
Normal file
83
node_modules/shift-parser/README.md
generated
vendored
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
Shift Parser
|
||||||
|
============
|
||||||
|
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
This module provides an [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
|
||||||
|
parser that produces a [Shift format](https://github.com/shapesecurity/shift-spec) AST.
|
||||||
|
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
[Stable](http://nodejs.org/api/documentation.html#documentation_stability_index).
|
||||||
|
|
||||||
|
The parser supports version 6 (release candidate 2) of the ECMA-262 standard.
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install shift-parser
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```es6
|
||||||
|
import parse from "shift-parser";
|
||||||
|
let ast = parse("/* ECMAScript program text */");
|
||||||
|
```
|
||||||
|
|
||||||
|
```es6
|
||||||
|
import {parseScript, parseModule} from "shift-parser";
|
||||||
|
let scriptAST = parseScript("/* ECMAScript Script text */");
|
||||||
|
let moduleAST = parseModule("/* ECMAScript Module text */");
|
||||||
|
```
|
||||||
|
|
||||||
|
Or in node.js:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var parseScript = require("shift-parser").parseScript;
|
||||||
|
var scriptAST = parseScript("/* ECMAScript Script text */");
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Location information is available in environments which support `WeakMap` via an alternative interface:
|
||||||
|
|
||||||
|
```js
|
||||||
|
let {parseScriptWithLocation, parseModuleWithLocation} = require("shift-parser");
|
||||||
|
let {tree, locations, comments} = parseScriptWithLocation("2 + 3 /* = 5 */");
|
||||||
|
let threeNode = tree.statements[0].expression.right;
|
||||||
|
locations.get(threeNode); // { start: { line: 1, column: 4, offset: 4 }, end: { line: 1, column: 5, offset: 5 } }
|
||||||
|
comments; // [ { text: ' = 5 ', type: 'MultiLine', start: { line: 1, column: 6, offset: 6 }, end: { line: 1, column: 15, offset: 15 } } ]
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
* Open a Github issue with a description of your desired change. If one exists already, leave a message stating that you are working on it with the date you expect it to be complete.
|
||||||
|
* Fork this repo, and clone the forked repo.
|
||||||
|
* Install dependencies with `npm install`.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Create a feature branch. Make your changes. Add tests.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Make a commit that includes the text "fixes #*XX*" where *XX* is the Github issue.
|
||||||
|
* Open a Pull Request on Github.
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright 2014 Shape Security, Inc.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
81
node_modules/shift-parser/package.json
generated
vendored
Normal file
81
node_modules/shift-parser/package.json
generated
vendored
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
"name": "shift-parser",
|
||||||
|
"version": "8.0.0",
|
||||||
|
"description": "ECMAScript parser that produces a Shift format AST",
|
||||||
|
"author": "Shape Security",
|
||||||
|
"homepage": "https://github.com/shapesecurity/shift-parser-js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/shapesecurity/shift-parser-js.git"
|
||||||
|
},
|
||||||
|
"main": "src/index.js",
|
||||||
|
"files": [
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"build": "echo nothing to do",
|
||||||
|
"clean": "rm -rf coverage .nyc_output",
|
||||||
|
"test-specific": "mocha --inline-diffs --check-leaks --ui tdd --reporter dot --slow 200 --timeout 5000 --recursive test/$TEST",
|
||||||
|
"test": "TEST=\"\" npm run test-specific",
|
||||||
|
"coverage": "npm run build -- --plugins=istanbul && nyc --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 npm test",
|
||||||
|
"lint": "eslint src test",
|
||||||
|
"benchmark": "node benchmark",
|
||||||
|
"profile": "node --prof profile.js && node-tick-processor",
|
||||||
|
"regenerate-unicode": "node scripts/generate-unicode-data.js > src/unicode.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"multimap": "^1.0.2",
|
||||||
|
"shift-ast": "7.0.0",
|
||||||
|
"shift-reducer": "7.0.0",
|
||||||
|
"shift-regexp-acceptor": "3.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"acorn": "6.0.1",
|
||||||
|
"angular": "1.7.4",
|
||||||
|
"benchmark": "2.1.4",
|
||||||
|
"eslint": "5.6.0",
|
||||||
|
"esprima": "4.0.1",
|
||||||
|
"everything.js": "1.0.3",
|
||||||
|
"expect.js": "0.3.1",
|
||||||
|
"microtime": "^3.0.0",
|
||||||
|
"mocha": "8.1.3",
|
||||||
|
"normalize-parser-test": "2.0.0",
|
||||||
|
"nyc": "13.0.1",
|
||||||
|
"regenerate": "^1.4.0",
|
||||||
|
"shift-parser-expectations": "^2018.0.2",
|
||||||
|
"shift-spec": "2019.0.0",
|
||||||
|
"test262": "git+https://github.com/tc39/test262.git#8ed9947df1c4ea34fa1810067529df0806cc07ad",
|
||||||
|
"test262-parser": "^2.0.7",
|
||||||
|
"test262-parser-tests": "0.0.5",
|
||||||
|
"tick": "0.1.1",
|
||||||
|
"traceur": "0.0.111",
|
||||||
|
"uglify-js": "3.4.9",
|
||||||
|
"unicode-8.0.0": "^0.7.5"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"Shift",
|
||||||
|
"AST",
|
||||||
|
"node",
|
||||||
|
"parser",
|
||||||
|
"SpiderMonkey",
|
||||||
|
"Parser",
|
||||||
|
"API",
|
||||||
|
"parse",
|
||||||
|
"spider",
|
||||||
|
"monkey",
|
||||||
|
"abstract",
|
||||||
|
"syntax",
|
||||||
|
"tree"
|
||||||
|
],
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shapesecurity/shift-parser-js/issues"
|
||||||
|
},
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"nyc": {
|
||||||
|
"include": [
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"sourceMap": false,
|
||||||
|
"instrument": false
|
||||||
|
}
|
||||||
|
}
|
414
node_modules/shift-parser/src/early-error-state.js
generated
vendored
Normal file
414
node_modules/shift-parser/src/early-error-state.js
generated
vendored
Normal file
|
@ -0,0 +1,414 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2014 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const MultiMap = require('multimap');
|
||||||
|
|
||||||
|
function addEach(thisMap, ...otherMaps) {
|
||||||
|
otherMaps.forEach(otherMap => {
|
||||||
|
otherMap.forEachEntry((v, k) => {
|
||||||
|
thisMap.set.apply(thisMap, [k].concat(v));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return thisMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
let identity; // initialised below EarlyErrorState
|
||||||
|
|
||||||
|
class EarlyErrorState {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.errors = [];
|
||||||
|
// errors that are only errors in strict mode code
|
||||||
|
this.strictErrors = [];
|
||||||
|
|
||||||
|
// Label values used in LabeledStatement nodes; cleared at function boundaries
|
||||||
|
this.usedLabelNames = [];
|
||||||
|
|
||||||
|
// BreakStatement nodes; cleared at iteration; switch; and function boundaries
|
||||||
|
this.freeBreakStatements = [];
|
||||||
|
// ContinueStatement nodes; cleared at
|
||||||
|
this.freeContinueStatements = [];
|
||||||
|
|
||||||
|
// labeled BreakStatement nodes; cleared at LabeledStatement with same Label and function boundaries
|
||||||
|
this.freeLabeledBreakStatements = [];
|
||||||
|
// labeled ContinueStatement nodes; cleared at labeled iteration statement with same Label and function boundaries
|
||||||
|
this.freeLabeledContinueStatements = [];
|
||||||
|
|
||||||
|
// NewTargetExpression nodes; cleared at function (besides arrow expression) boundaries
|
||||||
|
this.newTargetExpressions = [];
|
||||||
|
|
||||||
|
// BindingIdentifier nodes; cleared at containing declaration node
|
||||||
|
this.boundNames = new MultiMap;
|
||||||
|
// BindingIdentifiers that were found to be in a lexical binding position
|
||||||
|
this.lexicallyDeclaredNames = new MultiMap;
|
||||||
|
// BindingIdentifiers that were the name of a FunctionDeclaration
|
||||||
|
this.functionDeclarationNames = new MultiMap;
|
||||||
|
// BindingIdentifiers that were found to be in a variable binding position
|
||||||
|
this.varDeclaredNames = new MultiMap;
|
||||||
|
// BindingIdentifiers that were found to be in a variable binding position
|
||||||
|
this.forOfVarDeclaredNames = [];
|
||||||
|
|
||||||
|
// Names that this module exports
|
||||||
|
this.exportedNames = new MultiMap;
|
||||||
|
// Locally declared names that are referenced in export declarations
|
||||||
|
this.exportedBindings = new MultiMap;
|
||||||
|
|
||||||
|
// CallExpressions with Super callee
|
||||||
|
this.superCallExpressions = [];
|
||||||
|
// SuperCall expressions in the context of a Method named "constructor"
|
||||||
|
this.superCallExpressionsInConstructorMethod = [];
|
||||||
|
// MemberExpressions with Super object
|
||||||
|
this.superPropertyExpressions = [];
|
||||||
|
|
||||||
|
// YieldExpression and YieldGeneratorExpression nodes; cleared at function boundaries
|
||||||
|
this.yieldExpressions = [];
|
||||||
|
// AwaitExpression nodes; cleared at function boundaries
|
||||||
|
this.awaitExpressions = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
addFreeBreakStatement(s) {
|
||||||
|
this.freeBreakStatements.push(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
addFreeLabeledBreakStatement(s) {
|
||||||
|
this.freeLabeledBreakStatements.push(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearFreeBreakStatements() {
|
||||||
|
this.freeBreakStatements = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
addFreeContinueStatement(s) {
|
||||||
|
this.freeContinueStatements.push(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
addFreeLabeledContinueStatement(s) {
|
||||||
|
this.freeLabeledContinueStatements.push(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearFreeContinueStatements() {
|
||||||
|
this.freeContinueStatements = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceFreeBreakStatementErrors(createError) {
|
||||||
|
[].push.apply(this.errors, this.freeBreakStatements.map(createError));
|
||||||
|
this.freeBreakStatements = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceFreeLabeledBreakStatementErrors(createError) {
|
||||||
|
[].push.apply(this.errors, this.freeLabeledBreakStatements.map(createError));
|
||||||
|
this.freeLabeledBreakStatements = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceFreeContinueStatementErrors(createError) {
|
||||||
|
[].push.apply(this.errors, this.freeContinueStatements.map(createError));
|
||||||
|
this.freeContinueStatements = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceFreeLabeledContinueStatementErrors(createError) {
|
||||||
|
[].push.apply(this.errors, this.freeLabeledContinueStatements.map(createError));
|
||||||
|
this.freeLabeledContinueStatements = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
observeIterationLabel(label) {
|
||||||
|
this.usedLabelNames.push(label);
|
||||||
|
this.freeLabeledBreakStatements = this.freeLabeledBreakStatements.filter(s => s.label !== label);
|
||||||
|
this.freeLabeledContinueStatements = this.freeLabeledContinueStatements.filter(s => s.label !== label);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeNonIterationLabel(label) {
|
||||||
|
this.usedLabelNames.push(label);
|
||||||
|
this.freeLabeledBreakStatements = this.freeLabeledBreakStatements.filter(s => s.label !== label);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearUsedLabelNames() {
|
||||||
|
this.usedLabelNames = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
observeSuperCallExpression(node) {
|
||||||
|
this.superCallExpressions.push(node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeConstructorMethod() {
|
||||||
|
this.superCallExpressionsInConstructorMethod = this.superCallExpressions;
|
||||||
|
this.superCallExpressions = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearSuperCallExpressionsInConstructorMethod() {
|
||||||
|
this.superCallExpressionsInConstructorMethod = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceSuperCallExpressions(createError) {
|
||||||
|
[].push.apply(this.errors, this.superCallExpressions.map(createError));
|
||||||
|
[].push.apply(this.errors, this.superCallExpressionsInConstructorMethod.map(createError));
|
||||||
|
this.superCallExpressions = [];
|
||||||
|
this.superCallExpressionsInConstructorMethod = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceSuperCallExpressionsInConstructorMethod(createError) {
|
||||||
|
[].push.apply(this.errors, this.superCallExpressionsInConstructorMethod.map(createError));
|
||||||
|
this.superCallExpressionsInConstructorMethod = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
observeSuperPropertyExpression(node) {
|
||||||
|
this.superPropertyExpressions.push(node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearSuperPropertyExpressions() {
|
||||||
|
this.superPropertyExpressions = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceSuperPropertyExpressions(createError) {
|
||||||
|
[].push.apply(this.errors, this.superPropertyExpressions.map(createError));
|
||||||
|
this.superPropertyExpressions = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
observeNewTargetExpression(node) {
|
||||||
|
this.newTargetExpressions.push(node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearNewTargetExpressions() {
|
||||||
|
this.newTargetExpressions = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bindName(name, node) {
|
||||||
|
this.boundNames.set(name, node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearBoundNames() {
|
||||||
|
this.boundNames = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeLexicalDeclaration() {
|
||||||
|
addEach(this.lexicallyDeclaredNames, this.boundNames);
|
||||||
|
this.boundNames = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeLexicalBoundary() {
|
||||||
|
this.previousLexicallyDeclaredNames = this.lexicallyDeclaredNames;
|
||||||
|
this.lexicallyDeclaredNames = new MultiMap;
|
||||||
|
this.functionDeclarationNames = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceDuplicateLexicallyDeclaredNames(createError) {
|
||||||
|
this.lexicallyDeclaredNames.forEachEntry(nodes => {
|
||||||
|
if (nodes.length > 1) {
|
||||||
|
nodes.slice(1).forEach(dupeNode => {
|
||||||
|
this.addError(createError(dupeNode));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceConflictingLexicallyDeclaredNames(otherNames, createError) {
|
||||||
|
this.lexicallyDeclaredNames.forEachEntry((nodes, bindingName) => {
|
||||||
|
if (otherNames.has(bindingName)) {
|
||||||
|
nodes.forEach(conflictingNode => {
|
||||||
|
this.addError(createError(conflictingNode));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeFunctionDeclaration() {
|
||||||
|
this.observeVarBoundary();
|
||||||
|
addEach(this.functionDeclarationNames, this.boundNames);
|
||||||
|
this.boundNames = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
functionDeclarationNamesAreLexical() {
|
||||||
|
addEach(this.lexicallyDeclaredNames, this.functionDeclarationNames);
|
||||||
|
this.functionDeclarationNames = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeVarDeclaration() {
|
||||||
|
addEach(this.varDeclaredNames, this.boundNames);
|
||||||
|
this.boundNames = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
recordForOfVars() {
|
||||||
|
this.varDeclaredNames.forEach(bindingIdentifier => {
|
||||||
|
this.forOfVarDeclaredNames.push(bindingIdentifier);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeVarBoundary() {
|
||||||
|
this.lexicallyDeclaredNames = new MultiMap;
|
||||||
|
this.functionDeclarationNames = new MultiMap;
|
||||||
|
this.varDeclaredNames = new MultiMap;
|
||||||
|
this.forOfVarDeclaredNames = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
exportName(name, node) {
|
||||||
|
this.exportedNames.set(name, node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
exportDeclaredNames() {
|
||||||
|
addEach(this.exportedNames, this.lexicallyDeclaredNames, this.varDeclaredNames);
|
||||||
|
addEach(this.exportedBindings, this.lexicallyDeclaredNames, this.varDeclaredNames);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
exportBinding(name, node) {
|
||||||
|
this.exportedBindings.set(name, node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearExportedBindings() {
|
||||||
|
this.exportedBindings = new MultiMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
observeYieldExpression(node) {
|
||||||
|
this.yieldExpressions.push(node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearYieldExpressions() {
|
||||||
|
this.yieldExpressions = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
observeAwaitExpression(node) {
|
||||||
|
this.awaitExpressions.push(node);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearAwaitExpressions() {
|
||||||
|
this.awaitExpressions = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
addError(e) {
|
||||||
|
this.errors.push(e);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
addStrictError(e) {
|
||||||
|
this.strictErrors.push(e);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
enforceStrictErrors() {
|
||||||
|
[].push.apply(this.errors, this.strictErrors);
|
||||||
|
this.strictErrors = [];
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MONOID IMPLEMENTATION
|
||||||
|
|
||||||
|
static empty() {
|
||||||
|
return identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
concat(s) {
|
||||||
|
if (this === identity) return s;
|
||||||
|
if (s === identity) return this;
|
||||||
|
[].push.apply(this.errors, s.errors);
|
||||||
|
[].push.apply(this.strictErrors, s.strictErrors);
|
||||||
|
[].push.apply(this.usedLabelNames, s.usedLabelNames);
|
||||||
|
[].push.apply(this.freeBreakStatements, s.freeBreakStatements);
|
||||||
|
[].push.apply(this.freeContinueStatements, s.freeContinueStatements);
|
||||||
|
[].push.apply(this.freeLabeledBreakStatements, s.freeLabeledBreakStatements);
|
||||||
|
[].push.apply(this.freeLabeledContinueStatements, s.freeLabeledContinueStatements);
|
||||||
|
[].push.apply(this.newTargetExpressions, s.newTargetExpressions);
|
||||||
|
addEach(this.boundNames, s.boundNames);
|
||||||
|
addEach(this.lexicallyDeclaredNames, s.lexicallyDeclaredNames);
|
||||||
|
addEach(this.functionDeclarationNames, s.functionDeclarationNames);
|
||||||
|
addEach(this.varDeclaredNames, s.varDeclaredNames);
|
||||||
|
[].push.apply(this.forOfVarDeclaredNames, s.forOfVarDeclaredNames);
|
||||||
|
addEach(this.exportedNames, s.exportedNames);
|
||||||
|
addEach(this.exportedBindings, s.exportedBindings);
|
||||||
|
[].push.apply(this.superCallExpressions, s.superCallExpressions);
|
||||||
|
[].push.apply(this.superCallExpressionsInConstructorMethod, s.superCallExpressionsInConstructorMethod);
|
||||||
|
[].push.apply(this.superPropertyExpressions, s.superPropertyExpressions);
|
||||||
|
[].push.apply(this.yieldExpressions, s.yieldExpressions);
|
||||||
|
[].push.apply(this.awaitExpressions, s.awaitExpressions);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
identity = new EarlyErrorState;
|
||||||
|
Object.getOwnPropertyNames(EarlyErrorState.prototype).forEach(methodName => {
|
||||||
|
if (methodName === 'constructor') return;
|
||||||
|
Object.defineProperty(identity, methodName, {
|
||||||
|
value() {
|
||||||
|
return EarlyErrorState.prototype[methodName].apply(new EarlyErrorState, arguments);
|
||||||
|
},
|
||||||
|
enumerable: false,
|
||||||
|
writable: true,
|
||||||
|
configurable: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
class EarlyError extends Error {
|
||||||
|
constructor(node, message) {
|
||||||
|
super(message);
|
||||||
|
this.node = node;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
EarlyErrorState,
|
||||||
|
EarlyError,
|
||||||
|
};
|
767
node_modules/shift-parser/src/early-errors.js
generated
vendored
Normal file
767
node_modules/shift-parser/src/early-errors.js
generated
vendored
Normal file
|
@ -0,0 +1,767 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2014 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { reduce, MonoidalReducer } = require('shift-reducer');
|
||||||
|
const { isStrictModeReservedWord } = require('./utils');
|
||||||
|
const { ErrorMessages } = require('./errors');
|
||||||
|
|
||||||
|
const { EarlyErrorState, EarlyError } = require('./early-error-state');
|
||||||
|
|
||||||
|
function isStrictFunctionBody({ directives }) {
|
||||||
|
return directives.some(directive => directive.rawValue === 'use strict');
|
||||||
|
}
|
||||||
|
|
||||||
|
function isLabelledFunction(node) {
|
||||||
|
return node.type === 'LabeledStatement' &&
|
||||||
|
(node.body.type === 'FunctionDeclaration' || isLabelledFunction(node.body));
|
||||||
|
}
|
||||||
|
|
||||||
|
function isIterationStatement(node) {
|
||||||
|
switch (node.type) {
|
||||||
|
case 'LabeledStatement':
|
||||||
|
return isIterationStatement(node.body);
|
||||||
|
case 'DoWhileStatement':
|
||||||
|
case 'ForInStatement':
|
||||||
|
case 'ForOfStatement':
|
||||||
|
case 'ForStatement':
|
||||||
|
case 'WhileStatement':
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSpecialMethod(methodDefinition) {
|
||||||
|
if (methodDefinition.name.type !== 'StaticPropertyName' || methodDefinition.name.value !== 'constructor') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch (methodDefinition.type) {
|
||||||
|
case 'Getter':
|
||||||
|
case 'Setter':
|
||||||
|
return true;
|
||||||
|
case 'Method':
|
||||||
|
return methodDefinition.isGenerator || methodDefinition.isAsync;
|
||||||
|
}
|
||||||
|
/* istanbul ignore next */
|
||||||
|
throw new Error('not reached');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function enforceDuplicateConstructorMethods(node, s) {
|
||||||
|
let ctors = node.elements.filter(e =>
|
||||||
|
!e.isStatic &&
|
||||||
|
e.method.type === 'Method' &&
|
||||||
|
!e.method.isGenerator &&
|
||||||
|
e.method.name.type === 'StaticPropertyName' &&
|
||||||
|
e.method.name.value === 'constructor'
|
||||||
|
);
|
||||||
|
if (ctors.length > 1) {
|
||||||
|
ctors.slice(1).forEach(ctor => {
|
||||||
|
s = s.addError(new EarlyError(ctor, 'Duplicate constructor method in class'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
const SUPERCALL_ERROR = node => new EarlyError(node, ErrorMessages.ILLEGAL_SUPER_CALL);
|
||||||
|
const SUPERPROPERTY_ERROR = node => new EarlyError(node, 'Member access on super must be in a method');
|
||||||
|
const DUPLICATE_BINDING = node => new EarlyError(node, `Duplicate binding ${JSON.stringify(node.name)}`);
|
||||||
|
const FREE_CONTINUE = node => new EarlyError(node, 'Continue statement must be nested within an iteration statement');
|
||||||
|
const UNBOUND_CONTINUE = node => new EarlyError(node, `Continue statement must be nested within an iteration statement with label ${JSON.stringify(node.label)}`);
|
||||||
|
const FREE_BREAK = node => new EarlyError(node, 'Break statement must be nested within an iteration statement or a switch statement');
|
||||||
|
const UNBOUND_BREAK = node => new EarlyError(node, `Break statement must be nested within a statement with label ${JSON.stringify(node.label)}`);
|
||||||
|
|
||||||
|
class EarlyErrorChecker extends MonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(EarlyErrorState);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentExpression() {
|
||||||
|
return super.reduceAssignmentExpression(...arguments).clearBoundNames();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
let s = this.identity;
|
||||||
|
if (node.name === 'eval' || node.name === 'arguments' || isStrictModeReservedWord(node.name)) {
|
||||||
|
s = s.addStrictError(new EarlyError(node, `The identifier ${JSON.stringify(node.name)} must not be in binding position in strict mode`));
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
let isSimpleParameterList = node.params.rest == null && node.params.items.every(i => i.type === 'BindingIdentifier');
|
||||||
|
params = params.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
if (node.body.type === 'FunctionBody') {
|
||||||
|
body = body.enforceConflictingLexicallyDeclaredNames(params.lexicallyDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
if (isStrictFunctionBody(node.body)) {
|
||||||
|
params = params.enforceStrictErrors();
|
||||||
|
body = body.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params.yieldExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Arrow parameters must not contain yield expressions'));
|
||||||
|
});
|
||||||
|
params.awaitExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Arrow parameters must not contain await expressions'));
|
||||||
|
});
|
||||||
|
let s = super.reduceArrowExpression(node, { params, body });
|
||||||
|
if (!isSimpleParameterList && node.body.type === 'FunctionBody' && isStrictFunctionBody(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node, 'Functions with non-simple parameter lists may not contain a "use strict" directive'));
|
||||||
|
}
|
||||||
|
s = s.clearYieldExpressions();
|
||||||
|
s = s.clearAwaitExpressions();
|
||||||
|
s = s.observeVarBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
return expression.observeAwaitExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
let s = this.identity;
|
||||||
|
if (node.name === 'eval' || node.name === 'arguments' || isStrictModeReservedWord(node.name)) {
|
||||||
|
s = s.addStrictError(new EarlyError(node, `The identifier ${JSON.stringify(node.name)} must not be in binding position in strict mode`));
|
||||||
|
}
|
||||||
|
s = s.bindName(node.name, node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlock() {
|
||||||
|
let s = super.reduceBlock(...arguments);
|
||||||
|
s = s.functionDeclarationNamesAreLexical();
|
||||||
|
s = s.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
s = s.enforceConflictingLexicallyDeclaredNames(s.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
s = s.observeLexicalBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
let s = super.reduceBreakStatement(...arguments);
|
||||||
|
s = node.label == null
|
||||||
|
? s.addFreeBreakStatement(node)
|
||||||
|
: s.addFreeLabeledBreakStatement(node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCallExpression(node) {
|
||||||
|
let s = super.reduceCallExpression(...arguments);
|
||||||
|
if (node.callee.type === 'Super') {
|
||||||
|
s = s.observeSuperCallExpression(node);
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
if (binding != null) {
|
||||||
|
binding = binding.observeLexicalDeclaration();
|
||||||
|
binding = binding.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
binding = binding.enforceConflictingLexicallyDeclaredNames(body.previousLexicallyDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
}
|
||||||
|
let s = super.reduceCatchClause(node, { binding, body });
|
||||||
|
s = s.observeLexicalBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
let s = name.enforceStrictErrors();
|
||||||
|
let sElements = this.append(...elements);
|
||||||
|
sElements = sElements.enforceStrictErrors();
|
||||||
|
if (node.super != null) {
|
||||||
|
_super = _super.enforceStrictErrors();
|
||||||
|
s = this.append(s, _super);
|
||||||
|
sElements = sElements.clearSuperCallExpressionsInConstructorMethod();
|
||||||
|
}
|
||||||
|
s = this.append(s, sElements);
|
||||||
|
s = enforceDuplicateConstructorMethods(node, s);
|
||||||
|
s = s.observeLexicalDeclaration();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassElement(node) {
|
||||||
|
let s = super.reduceClassElement(...arguments);
|
||||||
|
if (!node.isStatic && isSpecialMethod(node.method)) {
|
||||||
|
s = s.addError(new EarlyError(node, ErrorMessages.ILLEGAL_CONSTRUCTORS));
|
||||||
|
}
|
||||||
|
if (node.isStatic && node.method.name.type === 'StaticPropertyName' && node.method.name.value === 'prototype') {
|
||||||
|
s = s.addError(new EarlyError(node, 'Static class methods cannot be named "prototype"'));
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
let s = node.name == null ? this.identity : name.enforceStrictErrors();
|
||||||
|
let sElements = this.append(...elements);
|
||||||
|
sElements = sElements.enforceStrictErrors();
|
||||||
|
if (node.super != null) {
|
||||||
|
_super = _super.enforceStrictErrors();
|
||||||
|
s = this.append(s, _super);
|
||||||
|
sElements = sElements.clearSuperCallExpressionsInConstructorMethod();
|
||||||
|
}
|
||||||
|
s = this.append(s, sElements);
|
||||||
|
s = enforceDuplicateConstructorMethods(node, s);
|
||||||
|
s = s.clearBoundNames();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression() {
|
||||||
|
return super.reduceCompoundAssignmentExpression(...arguments).clearBoundNames();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node) {
|
||||||
|
let s = super.reduceComputedMemberExpression(...arguments);
|
||||||
|
if (node.object.type === 'Super') {
|
||||||
|
s = s.observeSuperPropertyExpression(node);
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
let s = super.reduceContinueStatement(...arguments);
|
||||||
|
s = node.label == null
|
||||||
|
? s.addFreeContinueStatement(node)
|
||||||
|
: s.addFreeLabeledContinueStatement(node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node) {
|
||||||
|
let s = super.reduceDoWhileStatement(...arguments);
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a do-while statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.clearFreeContinueStatements();
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExport() {
|
||||||
|
let s = super.reduceExport(...arguments);
|
||||||
|
s = s.functionDeclarationNamesAreLexical();
|
||||||
|
s = s.exportDeclaredNames();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFrom() {
|
||||||
|
let s = super.reduceExportFrom(...arguments);
|
||||||
|
s = s.clearExportedBindings();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
let s = super.reduceExportFromSpecifier(...arguments);
|
||||||
|
s = s.exportName(node.exportedName || node.name, node);
|
||||||
|
s = s.exportBinding(node.name, node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node) {
|
||||||
|
let s = super.reduceExportLocalSpecifier(...arguments);
|
||||||
|
s = s.exportName(node.exportedName || node.name.name, node);
|
||||||
|
s = s.exportBinding(node.name.name, node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportDefault(node) {
|
||||||
|
let s = super.reduceExportDefault(...arguments);
|
||||||
|
s = s.functionDeclarationNamesAreLexical();
|
||||||
|
s = s.exportName('default', node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFormalParameters() {
|
||||||
|
let s = super.reduceFormalParameters(...arguments);
|
||||||
|
s = s.observeLexicalDeclaration();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
if (init != null) {
|
||||||
|
init = init.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
init = init.enforceConflictingLexicallyDeclaredNames(body.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
}
|
||||||
|
let s = super.reduceForStatement(node, { init, test, update, body });
|
||||||
|
if (node.init != null && node.init.type === 'VariableDeclaration' && node.init.kind === 'const') {
|
||||||
|
node.init.declarators.forEach(declarator => {
|
||||||
|
if (declarator.init == null) {
|
||||||
|
s = s.addError(new EarlyError(declarator, 'Constant lexical declarations must have an initialiser'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a for statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.clearFreeContinueStatements();
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
s = s.observeLexicalBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
left = left.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
left = left.enforceConflictingLexicallyDeclaredNames(body.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
let s = super.reduceForInStatement(node, { left, right, body });
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a for-in statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.clearFreeContinueStatements();
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
s = s.observeLexicalBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
left = left.recordForOfVars();
|
||||||
|
left = left.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
left = left.enforceConflictingLexicallyDeclaredNames(body.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
let s = super.reduceForOfStatement(node, { left, right, body });
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a for-of statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.clearFreeContinueStatements();
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
s = s.observeLexicalBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
left = left.recordForOfVars();
|
||||||
|
left = left.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
left = left.enforceConflictingLexicallyDeclaredNames(body.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
let s = super.reduceForOfStatement(node, { left, right, body });
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a for-await statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.clearFreeContinueStatements();
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
s = s.observeLexicalBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionBody(node) {
|
||||||
|
let s = super.reduceFunctionBody(...arguments);
|
||||||
|
s = s.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
s = s.enforceConflictingLexicallyDeclaredNames(s.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
s = s.enforceFreeContinueStatementErrors(FREE_CONTINUE);
|
||||||
|
s = s.enforceFreeLabeledContinueStatementErrors(UNBOUND_CONTINUE);
|
||||||
|
s = s.enforceFreeBreakStatementErrors(FREE_BREAK);
|
||||||
|
s = s.enforceFreeLabeledBreakStatementErrors(UNBOUND_BREAK);
|
||||||
|
s = s.clearUsedLabelNames();
|
||||||
|
s = s.clearYieldExpressions();
|
||||||
|
s = s.clearAwaitExpressions();
|
||||||
|
if (isStrictFunctionBody(node)) {
|
||||||
|
s = s.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
let isSimpleParameterList = node.params.rest == null && node.params.items.every(i => i.type === 'BindingIdentifier');
|
||||||
|
let addError = !isSimpleParameterList || node.isGenerator ? 'addError' : 'addStrictError';
|
||||||
|
params.lexicallyDeclaredNames.forEachEntry(nodes => {
|
||||||
|
if (nodes.length > 1) {
|
||||||
|
nodes.slice(1).forEach(dupeNode => {
|
||||||
|
params = params[addError](DUPLICATE_BINDING(dupeNode));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
body = body.enforceConflictingLexicallyDeclaredNames(params.lexicallyDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
body = body.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
body = body.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR);
|
||||||
|
params = params.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
params = params.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR);
|
||||||
|
if (node.isGenerator) {
|
||||||
|
params.yieldExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Generator parameters must not contain yield expressions'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (node.isAsync) {
|
||||||
|
params.awaitExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Async function parameters must not contain await expressions'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
params = params.clearNewTargetExpressions();
|
||||||
|
body = body.clearNewTargetExpressions();
|
||||||
|
if (isStrictFunctionBody(node.body)) {
|
||||||
|
params = params.enforceStrictErrors();
|
||||||
|
body = body.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
let s = super.reduceFunctionDeclaration(node, { name, params, body });
|
||||||
|
if (!isSimpleParameterList && isStrictFunctionBody(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node, 'Functions with non-simple parameter lists may not contain a "use strict" directive'));
|
||||||
|
}
|
||||||
|
s = s.clearYieldExpressions();
|
||||||
|
s = s.clearAwaitExpressions();
|
||||||
|
s = s.observeFunctionDeclaration();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
let isSimpleParameterList = node.params.rest == null && node.params.items.every(i => i.type === 'BindingIdentifier');
|
||||||
|
let addError = !isSimpleParameterList || node.isGenerator ? 'addError' : 'addStrictError';
|
||||||
|
params.lexicallyDeclaredNames.forEachEntry((nodes, bindingName) => {
|
||||||
|
if (nodes.length > 1) {
|
||||||
|
nodes.slice(1).forEach(dupeNode => {
|
||||||
|
params = params[addError](new EarlyError(dupeNode, `Duplicate binding ${JSON.stringify(bindingName)}`));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
body = body.enforceConflictingLexicallyDeclaredNames(params.lexicallyDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
body = body.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
body = body.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR);
|
||||||
|
params = params.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
params = params.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR);
|
||||||
|
if (node.isGenerator) {
|
||||||
|
params.yieldExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Generator parameters must not contain yield expressions'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (node.isAsync) {
|
||||||
|
params.awaitExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Async function parameters must not contain await expressions'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
params = params.clearNewTargetExpressions();
|
||||||
|
body = body.clearNewTargetExpressions();
|
||||||
|
if (isStrictFunctionBody(node.body)) {
|
||||||
|
params = params.enforceStrictErrors();
|
||||||
|
body = body.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
let s = super.reduceFunctionExpression(node, { name, params, body });
|
||||||
|
if (!isSimpleParameterList && isStrictFunctionBody(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node, 'Functions with non-simple parameter lists may not contain a "use strict" directive'));
|
||||||
|
}
|
||||||
|
s = s.clearBoundNames();
|
||||||
|
s = s.clearYieldExpressions();
|
||||||
|
s = s.clearAwaitExpressions();
|
||||||
|
s = s.observeVarBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
body = body.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
body = body.clearSuperPropertyExpressions();
|
||||||
|
body = body.clearNewTargetExpressions();
|
||||||
|
if (isStrictFunctionBody(node.body)) {
|
||||||
|
body = body.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
let s = super.reduceGetter(node, { name, body });
|
||||||
|
s = s.observeVarBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
let s = this.identity;
|
||||||
|
if (isStrictModeReservedWord(node.name)) {
|
||||||
|
s = s.addStrictError(new EarlyError(node, `The identifier ${JSON.stringify(node.name)} must not be in expression position in strict mode`));
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
if (isLabelledFunction(node.consequent)) {
|
||||||
|
consequent = consequent.addError(new EarlyError(node.consequent, 'The consequent of an if statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
if (node.alternate != null && isLabelledFunction(node.alternate)) {
|
||||||
|
alternate = alternate.addError(new EarlyError(node.alternate, 'The alternate of an if statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
if (node.consequent.type === 'FunctionDeclaration') {
|
||||||
|
consequent = consequent.addStrictError(new EarlyError(node.consequent, 'FunctionDeclarations in IfStatements are disallowed in strict mode'));
|
||||||
|
consequent = consequent.observeLexicalBoundary();
|
||||||
|
}
|
||||||
|
if (node.alternate != null && node.alternate.type === 'FunctionDeclaration') {
|
||||||
|
alternate = alternate.addStrictError(new EarlyError(node.alternate, 'FunctionDeclarations in IfStatements are disallowed in strict mode'));
|
||||||
|
alternate = alternate.observeLexicalBoundary();
|
||||||
|
}
|
||||||
|
return super.reduceIfStatement(node, { test, consequent, alternate });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImport() {
|
||||||
|
let s = super.reduceImport(...arguments);
|
||||||
|
s = s.observeLexicalDeclaration();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportNamespace() {
|
||||||
|
let s = super.reduceImportNamespace(...arguments);
|
||||||
|
s = s.observeLexicalDeclaration();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLabeledStatement(node) {
|
||||||
|
let s = super.reduceLabeledStatement(...arguments);
|
||||||
|
if (node.label === 'yield' || isStrictModeReservedWord(node.label)) {
|
||||||
|
s = s.addStrictError(new EarlyError(node, `The identifier ${JSON.stringify(node.label)} must not be in label position in strict mode`));
|
||||||
|
}
|
||||||
|
if (s.usedLabelNames.indexOf(node.label) >= 0) {
|
||||||
|
s = s.addError(new EarlyError(node, `Label ${JSON.stringify(node.label)} has already been declared`));
|
||||||
|
}
|
||||||
|
if (node.body.type === 'FunctionDeclaration') {
|
||||||
|
s = s.addStrictError(new EarlyError(node, 'Labeled FunctionDeclarations are disallowed in strict mode'));
|
||||||
|
}
|
||||||
|
s = isIterationStatement(node.body)
|
||||||
|
? s.observeIterationLabel(node.label)
|
||||||
|
: s.observeNonIterationLabel(node.label);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression() {
|
||||||
|
let s = this.identity;
|
||||||
|
// NOTE: the RegExp pattern acceptor is disabled until we have more confidence in its correctness (more tests)
|
||||||
|
// if (!PatternAcceptor.test(node.pattern, node.flags.indexOf("u") >= 0)) {
|
||||||
|
// s = s.addError(new EarlyError(node, "Invalid regular expression pattern"));
|
||||||
|
// }
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
let isSimpleParameterList = node.params.rest == null && node.params.items.every(i => i.type === 'BindingIdentifier');
|
||||||
|
params = params.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
body = body.enforceConflictingLexicallyDeclaredNames(params.lexicallyDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
if (node.name.type === 'StaticPropertyName' && node.name.value === 'constructor') {
|
||||||
|
body = body.observeConstructorMethod();
|
||||||
|
params = params.observeConstructorMethod();
|
||||||
|
} else {
|
||||||
|
body = body.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
params = params.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
}
|
||||||
|
if (node.isGenerator) {
|
||||||
|
params.yieldExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Generator parameters must not contain yield expressions'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (node.isAsync) {
|
||||||
|
params.awaitExpressions.forEach(n => {
|
||||||
|
params = params.addError(new EarlyError(n, 'Async function parameters must not contain await expressions'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
body = body.clearSuperPropertyExpressions();
|
||||||
|
params = params.clearSuperPropertyExpressions();
|
||||||
|
params = params.clearNewTargetExpressions();
|
||||||
|
body = body.clearNewTargetExpressions();
|
||||||
|
if (isStrictFunctionBody(node.body)) {
|
||||||
|
params = params.enforceStrictErrors();
|
||||||
|
body = body.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
let s = super.reduceMethod(node, { name, params, body });
|
||||||
|
if (!isSimpleParameterList && isStrictFunctionBody(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node, 'Functions with non-simple parameter lists may not contain a "use strict" directive'));
|
||||||
|
}
|
||||||
|
s = s.clearYieldExpressions();
|
||||||
|
s = s.clearAwaitExpressions();
|
||||||
|
s = s.observeVarBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceModule() {
|
||||||
|
let s = super.reduceModule(...arguments);
|
||||||
|
s = s.functionDeclarationNamesAreLexical();
|
||||||
|
s = s.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
s = s.enforceConflictingLexicallyDeclaredNames(s.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
s.exportedNames.forEachEntry((nodes, bindingName) => {
|
||||||
|
if (nodes.length > 1) {
|
||||||
|
nodes.slice(1).forEach(dupeNode => {
|
||||||
|
s = s.addError(new EarlyError(dupeNode, `Duplicate export ${JSON.stringify(bindingName)}`));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
s.exportedBindings.forEachEntry((nodes, bindingName) => {
|
||||||
|
if (!s.lexicallyDeclaredNames.has(bindingName) && !s.varDeclaredNames.has(bindingName)) {
|
||||||
|
nodes.forEach(undeclaredNode => {
|
||||||
|
s = s.addError(new EarlyError(undeclaredNode, `Exported binding ${JSON.stringify(bindingName)} is not declared`));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
s.newTargetExpressions.forEach(node => {
|
||||||
|
s = s.addError(new EarlyError(node, 'new.target must be within function (but not arrow expression) code'));
|
||||||
|
});
|
||||||
|
s = s.enforceFreeContinueStatementErrors(FREE_CONTINUE);
|
||||||
|
s = s.enforceFreeLabeledContinueStatementErrors(UNBOUND_CONTINUE);
|
||||||
|
s = s.enforceFreeBreakStatementErrors(FREE_BREAK);
|
||||||
|
s = s.enforceFreeLabeledBreakStatementErrors(UNBOUND_BREAK);
|
||||||
|
s = s.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
s = s.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR);
|
||||||
|
s = s.enforceStrictErrors();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return this.identity.observeNewTargetExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectExpression(node) {
|
||||||
|
let s = super.reduceObjectExpression(...arguments);
|
||||||
|
s = s.enforceSuperCallExpressionsInConstructorMethod(SUPERCALL_ERROR);
|
||||||
|
let protos = node.properties.filter(p => p.type === 'DataProperty' && p.name.type === 'StaticPropertyName' && p.name.value === '__proto__');
|
||||||
|
protos.slice(1).forEach(n => {
|
||||||
|
s = s.addError(new EarlyError(n, 'Duplicate __proto__ property in object literal not allowed'));
|
||||||
|
});
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUpdateExpression() {
|
||||||
|
let s = super.reduceUpdateExpression(...arguments);
|
||||||
|
s = s.clearBoundNames();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUnaryExpression(node) {
|
||||||
|
let s = super.reduceUnaryExpression(...arguments);
|
||||||
|
if (node.operator === 'delete' && node.operand.type === 'IdentifierExpression') {
|
||||||
|
s = s.addStrictError(new EarlyError(node, 'Identifier expressions must not be deleted in strict mode'));
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceScript(node) {
|
||||||
|
let s = super.reduceScript(...arguments);
|
||||||
|
s = s.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
s = s.enforceConflictingLexicallyDeclaredNames(s.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
s.newTargetExpressions.forEach(n => {
|
||||||
|
s = s.addError(new EarlyError(n, 'new.target must be within function (but not arrow expression) code'));
|
||||||
|
});
|
||||||
|
s = s.enforceFreeContinueStatementErrors(FREE_CONTINUE);
|
||||||
|
s = s.enforceFreeLabeledContinueStatementErrors(UNBOUND_CONTINUE);
|
||||||
|
s = s.enforceFreeBreakStatementErrors(FREE_BREAK);
|
||||||
|
s = s.enforceFreeLabeledBreakStatementErrors(UNBOUND_BREAK);
|
||||||
|
s = s.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
s = s.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR);
|
||||||
|
if (isStrictFunctionBody(node)) {
|
||||||
|
s = s.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
let isSimpleParameterList = node.param.type === 'BindingIdentifier';
|
||||||
|
param = param.observeLexicalDeclaration();
|
||||||
|
param = param.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
body = body.enforceConflictingLexicallyDeclaredNames(param.lexicallyDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
param = param.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
body = body.enforceSuperCallExpressions(SUPERCALL_ERROR);
|
||||||
|
param = param.clearSuperPropertyExpressions();
|
||||||
|
body = body.clearSuperPropertyExpressions();
|
||||||
|
param = param.clearNewTargetExpressions();
|
||||||
|
body = body.clearNewTargetExpressions();
|
||||||
|
if (isStrictFunctionBody(node.body)) {
|
||||||
|
param = param.enforceStrictErrors();
|
||||||
|
body = body.enforceStrictErrors();
|
||||||
|
}
|
||||||
|
let s = super.reduceSetter(node, { name, param, body });
|
||||||
|
if (!isSimpleParameterList && isStrictFunctionBody(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node, 'Functions with non-simple parameter lists may not contain a "use strict" directive'));
|
||||||
|
}
|
||||||
|
s = s.observeVarBoundary();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node) {
|
||||||
|
let s = super.reduceStaticMemberExpression(...arguments);
|
||||||
|
if (node.object.type === 'Super') {
|
||||||
|
s = s.observeSuperPropertyExpression(node);
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
let sCases = this.append(...cases);
|
||||||
|
sCases = sCases.functionDeclarationNamesAreLexical();
|
||||||
|
sCases = sCases.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
sCases = sCases.enforceConflictingLexicallyDeclaredNames(sCases.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
sCases = sCases.observeLexicalBoundary();
|
||||||
|
let s = this.append(discriminant, sCases);
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
let sCases = this.append(defaultCase, ...preDefaultCases, ...postDefaultCases);
|
||||||
|
sCases = sCases.functionDeclarationNamesAreLexical();
|
||||||
|
sCases = sCases.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING);
|
||||||
|
sCases = sCases.enforceConflictingLexicallyDeclaredNames(sCases.varDeclaredNames, DUPLICATE_BINDING);
|
||||||
|
sCases = sCases.observeLexicalBoundary();
|
||||||
|
let s = this.append(discriminant, sCases);
|
||||||
|
s = s.clearFreeBreakStatements();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node) {
|
||||||
|
let s = super.reduceVariableDeclaration(...arguments);
|
||||||
|
switch (node.kind) {
|
||||||
|
case 'const':
|
||||||
|
case 'let': {
|
||||||
|
s = s.observeLexicalDeclaration();
|
||||||
|
if (s.lexicallyDeclaredNames.has('let')) {
|
||||||
|
s.lexicallyDeclaredNames.get('let').forEach(n => {
|
||||||
|
s = s.addError(new EarlyError(n, 'Lexical declarations must not have a binding named "let"'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'var':
|
||||||
|
s = s.observeVarDeclaration();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node) {
|
||||||
|
let s = super.reduceVariableDeclarationStatement(...arguments);
|
||||||
|
if (node.declaration.kind === 'const') {
|
||||||
|
node.declaration.declarators.forEach(declarator => {
|
||||||
|
if (declarator.init == null) {
|
||||||
|
s = s.addError(new EarlyError(declarator, 'Constant lexical declarations must have an initialiser'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWhileStatement(node) {
|
||||||
|
let s = super.reduceWhileStatement(...arguments);
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a while statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.clearFreeContinueStatements().clearFreeBreakStatements();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWithStatement(node) {
|
||||||
|
let s = super.reduceWithStatement(...arguments);
|
||||||
|
if (isLabelledFunction(node.body)) {
|
||||||
|
s = s.addError(new EarlyError(node.body, 'The body of a with statement must not be a labeled function declaration'));
|
||||||
|
}
|
||||||
|
s = s.addStrictError(new EarlyError(node, 'Strict mode code must not include a with statement'));
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldExpression(node) {
|
||||||
|
let s = super.reduceYieldExpression(...arguments);
|
||||||
|
s = s.observeYieldExpression(node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node) {
|
||||||
|
let s = super.reduceYieldGeneratorExpression(...arguments);
|
||||||
|
s = s.observeYieldExpression(node);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static check(node) {
|
||||||
|
return reduce(new EarlyErrorChecker, node).errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { EarlyErrorChecker };
|
121
node_modules/shift-parser/src/errors.js
generated
vendored
Normal file
121
node_modules/shift-parser/src/errors.js
generated
vendored
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2014 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
ErrorMessages: {
|
||||||
|
UNEXPECTED_TOKEN(id) {
|
||||||
|
return `Unexpected token ${JSON.stringify(id)}`;
|
||||||
|
},
|
||||||
|
UNEXPECTED_ILLEGAL_TOKEN(id) {
|
||||||
|
return `Unexpected ${JSON.stringify(id)}`;
|
||||||
|
},
|
||||||
|
UNEXPECTED_ESCAPED_KEYWORD: 'Unexpected escaped keyword',
|
||||||
|
UNEXPECTED_NUMBER: 'Unexpected number',
|
||||||
|
UNEXPECTED_STRING: 'Unexpected string',
|
||||||
|
UNEXPECTED_IDENTIFIER: 'Unexpected identifier',
|
||||||
|
UNEXPECTED_RESERVED_WORD: 'Unexpected reserved word',
|
||||||
|
UNEXPECTED_TEMPLATE: 'Unexpected template',
|
||||||
|
UNEXPECTED_EOS: 'Unexpected end of input',
|
||||||
|
UNEXPECTED_LINE_TERMINATOR: 'Unexpected line terminator',
|
||||||
|
UNEXPECTED_COMMA_AFTER_REST: 'Unexpected comma after rest',
|
||||||
|
UNEXPECTED_REST_PARAMETERS_INITIALIZATION: 'Rest parameter may not have a default initializer',
|
||||||
|
NEWLINE_AFTER_THROW: 'Illegal newline after throw',
|
||||||
|
UNTERMINATED_REGEXP: 'Invalid regular expression: missing /',
|
||||||
|
INVALID_LAST_REST_PARAMETER: 'Rest parameter must be last formal parameter',
|
||||||
|
INVALID_REST_PARAMETERS_INITIALIZATION: 'Rest parameter may not have a default initializer',
|
||||||
|
INVALID_REGEXP_FLAGS: 'Invalid regular expression flags',
|
||||||
|
INVALID_REGEX: 'Invalid regular expression',
|
||||||
|
INVALID_LHS_IN_ASSIGNMENT: 'Invalid left-hand side in assignment',
|
||||||
|
INVALID_LHS_IN_BINDING: 'Invalid left-hand side in binding', // todo collapse messages?
|
||||||
|
INVALID_LHS_IN_FOR_IN: 'Invalid left-hand side in for-in',
|
||||||
|
INVALID_LHS_IN_FOR_OF: 'Invalid left-hand side in for-of',
|
||||||
|
INVALID_LHS_IN_FOR_AWAIT: 'Invalid left-hand side in for-await',
|
||||||
|
INVALID_UPDATE_OPERAND: 'Increment/decrement target must be an identifier or member expression',
|
||||||
|
INVALID_EXPONENTIATION_LHS: 'Unary expressions as the left operand of an exponentation expression ' +
|
||||||
|
'must be disambiguated with parentheses',
|
||||||
|
MULTIPLE_DEFAULTS_IN_SWITCH: 'More than one default clause in switch statement',
|
||||||
|
NO_CATCH_OR_FINALLY: 'Missing catch or finally after try',
|
||||||
|
ILLEGAL_RETURN: 'Illegal return statement',
|
||||||
|
ILLEGAL_ARROW_FUNCTION_PARAMS: 'Illegal arrow function parameter list',
|
||||||
|
INVALID_ASYNC_PARAMS: 'Async function parameters must not contain await expressions',
|
||||||
|
INVALID_VAR_INIT_FOR_IN: 'Invalid variable declaration in for-in statement',
|
||||||
|
INVALID_VAR_INIT_FOR_OF: 'Invalid variable declaration in for-of statement',
|
||||||
|
INVALID_VAR_INIT_FOR_AWAIT: 'Invalid variable declaration in for-await statement',
|
||||||
|
UNINITIALIZED_BINDINGPATTERN_IN_FOR_INIT: 'Binding pattern appears without initializer in for statement init',
|
||||||
|
ILLEGAL_PROPERTY: 'Illegal property initializer',
|
||||||
|
INVALID_ID_BINDING_STRICT_MODE(id) {
|
||||||
|
return `The identifier ${JSON.stringify(id)} must not be in binding position in strict mode`;
|
||||||
|
},
|
||||||
|
INVALID_ID_IN_LABEL_STRICT_MODE(id) {
|
||||||
|
return `The identifier ${JSON.stringify(id)} must not be in label position in strict mode`;
|
||||||
|
},
|
||||||
|
INVALID_ID_IN_EXPRESSION_STRICT_MODE(id) {
|
||||||
|
return `The identifier ${JSON.stringify(id)} must not be in expression position in strict mode`;
|
||||||
|
},
|
||||||
|
INVALID_CALL_TO_SUPER: 'Calls to super must be in the "constructor" method of a class expression ' +
|
||||||
|
'or class declaration that has a superclass',
|
||||||
|
INVALID_DELETE_STRICT_MODE: 'Identifier expressions must not be deleted in strict mode',
|
||||||
|
DUPLICATE_BINDING(id) {
|
||||||
|
return `Duplicate binding ${JSON.stringify(id)}`;
|
||||||
|
},
|
||||||
|
ILLEGAL_ID_IN_LEXICAL_DECLARATION(id) {
|
||||||
|
return `Lexical declarations must not have a binding named ${JSON.stringify(id)}`;
|
||||||
|
},
|
||||||
|
UNITIALIZED_CONST: 'Constant lexical declarations must have an initialiser',
|
||||||
|
ILLEGAL_LABEL_IN_BODY(stmt) {
|
||||||
|
return `The body of a ${stmt} statement must not be a labeled function declaration`;
|
||||||
|
},
|
||||||
|
ILLEGEAL_LABEL_IN_IF: 'The consequent of an if statement must not be a labeled function declaration',
|
||||||
|
ILLEGAL_LABEL_IN_ELSE: 'The alternate of an if statement must not be a labeled function declaration',
|
||||||
|
ILLEGAL_CONTINUE_WITHOUT_ITERATION_WITH_ID(id) {
|
||||||
|
return `Continue statement must be nested within an iteration statement with label ${JSON.stringify(id)}`;
|
||||||
|
},
|
||||||
|
ILLEGAL_CONTINUE_WITHOUT_ITERATION: 'Continue statement must be nested within an iteration statement',
|
||||||
|
ILLEGAL_BREAK_WITHOUT_ITERATION_OR_SWITCH:
|
||||||
|
'Break statement must be nested within an iteration statement or a switch statement',
|
||||||
|
ILLEGAL_WITH_STRICT_MODE: 'Strict mode code must not include a with statement',
|
||||||
|
ILLEGAL_ACCESS_SUPER_MEMBER: 'Member access on super must be in a method',
|
||||||
|
ILLEGAL_SUPER_CALL: 'Calls to super must be in the "constructor" method of a class expression or class declaration that has a superclass',
|
||||||
|
DUPLICATE_LABEL_DECLARATION(label) {
|
||||||
|
return `Label ${JSON.stringify(label)} has already been declared`;
|
||||||
|
},
|
||||||
|
ILLEGAL_BREAK_WITHIN_LABEL(label) {
|
||||||
|
return `Break statement must be nested within a statement with label ${JSON.stringify(label)}`;
|
||||||
|
},
|
||||||
|
ILLEGAL_YIELD_EXPRESSIONS(paramType) {
|
||||||
|
return `${paramType} parameters must not contain yield expressions`;
|
||||||
|
},
|
||||||
|
ILLEGAL_YIELD_IDENTIFIER: '"yield" may not be used as an identifier in this context',
|
||||||
|
ILLEGAL_AWAIT_IDENTIFIER: '"await" may not be used as an identifier in this context',
|
||||||
|
DUPLICATE_CONSTRUCTOR: 'Duplicate constructor method in class',
|
||||||
|
ILLEGAL_CONSTRUCTORS: 'Constructors cannot be async, generators, getters or setters',
|
||||||
|
ILLEGAL_STATIC_CLASS_NAME: 'Static class methods cannot be named "prototype"',
|
||||||
|
NEW_TARGET_ERROR: 'new.target must be within function (but not arrow expression) code',
|
||||||
|
DUPLICATE_EXPORT(id) {
|
||||||
|
return `Duplicate export ${JSON.stringify(id)}`;
|
||||||
|
},
|
||||||
|
UNDECLARED_BINDING(id) {
|
||||||
|
return `Exported binding ${JSON.stringify(id)} is not declared`;
|
||||||
|
},
|
||||||
|
DUPLICATE_PROPTO_PROP: 'Duplicate __proto__ property in object literal not allowed',
|
||||||
|
ILLEGAL_LABEL_FUNC_DECLARATION: 'Labeled FunctionDeclarations are disallowed in strict mode',
|
||||||
|
ILLEGAL_FUNC_DECL_IF: 'FunctionDeclarations in IfStatements are disallowed in strict mode',
|
||||||
|
ILLEGAL_USE_STRICT: 'Functions with non-simple parameter lists may not contain a "use strict" directive',
|
||||||
|
ILLEGAL_EXPORTED_NAME: 'Names of variables used in an export specifier from the current module must be identifiers',
|
||||||
|
NO_OCTALS_IN_TEMPLATES: 'Template literals may not contain octal escape sequences',
|
||||||
|
NO_AWAIT_IN_ASYNC_PARAMS: 'Async arrow parameters may not contain "await"',
|
||||||
|
},
|
||||||
|
};
|
161
node_modules/shift-parser/src/index.js
generated
vendored
Normal file
161
node_modules/shift-parser/src/index.js
generated
vendored
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2016 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { GenericParser } = require('./parser');
|
||||||
|
const { JsError } = require('./tokenizer');
|
||||||
|
const { EarlyErrorChecker } = require('./early-errors');
|
||||||
|
const { isLineTerminator } = require('./utils');
|
||||||
|
const { Tokenizer, TokenClass, TokenType } = require('./tokenizer');
|
||||||
|
|
||||||
|
class ParserWithLocation extends GenericParser {
|
||||||
|
constructor(source) {
|
||||||
|
super(source);
|
||||||
|
this.locations = new WeakMap;
|
||||||
|
this.comments = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
startNode() {
|
||||||
|
return this.getLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
finishNode(node, start) {
|
||||||
|
if (node.type === 'Script' || node.type === 'Module') {
|
||||||
|
this.locations.set(node, {
|
||||||
|
start: { line: 1, column: 0, offset: 0 },
|
||||||
|
end: this.getLocation(),
|
||||||
|
});
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
if (node.type === 'TemplateExpression') {
|
||||||
|
// Adjust TemplateElements to not include surrounding backticks or braces
|
||||||
|
for (let i = 0; i < node.elements.length; i += 2) {
|
||||||
|
const endAdjustment = i < node.elements.length - 1 ? 2 : 1; // discard '${' or '`' respectively
|
||||||
|
const element = node.elements[i];
|
||||||
|
const location = this.locations.get(element);
|
||||||
|
this.locations.set(element, {
|
||||||
|
start: { line: location.start.line, column: location.start.column + 1, offset: location.start.offset + 1 }, // discard '}' or '`'
|
||||||
|
end: { line: location.end.line, column: location.end.column - endAdjustment, offset: location.end.offset - endAdjustment },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.locations.set(node, {
|
||||||
|
start,
|
||||||
|
end: this.getLastTokenEndLocation(),
|
||||||
|
});
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
copyNode(src, dest) {
|
||||||
|
this.locations.set(dest, this.locations.get(src)); // todo check undefined
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
skipSingleLineComment(offset) {
|
||||||
|
// We're actually extending the *tokenizer*, here.
|
||||||
|
const start = {
|
||||||
|
line: this.line + 1,
|
||||||
|
column: this.index - this.lineStart,
|
||||||
|
offset: this.index,
|
||||||
|
};
|
||||||
|
const c = this.source[this.index];
|
||||||
|
const type = c === '/' ? 'SingleLine' : c === '<' ? 'HTMLOpen' : 'HTMLClose';
|
||||||
|
|
||||||
|
super.skipSingleLineComment(offset);
|
||||||
|
|
||||||
|
const end = {
|
||||||
|
line: this.line + 1,
|
||||||
|
column: this.index - this.lineStart,
|
||||||
|
offset: this.index,
|
||||||
|
};
|
||||||
|
const trailingLineTerminatorCharacters = this.source[this.index - 2] === '\r' ? 2 : isLineTerminator(this.source.charCodeAt(this.index - 1)) ? 1 : 0;
|
||||||
|
const text = this.source.substring(start.offset + offset, end.offset - trailingLineTerminatorCharacters);
|
||||||
|
|
||||||
|
this.comments.push({ text, type, start, end });
|
||||||
|
}
|
||||||
|
|
||||||
|
skipMultiLineComment() {
|
||||||
|
const start = {
|
||||||
|
line: this.line + 1,
|
||||||
|
column: this.index - this.lineStart,
|
||||||
|
offset: this.index,
|
||||||
|
};
|
||||||
|
const type = 'MultiLine';
|
||||||
|
|
||||||
|
const retval = super.skipMultiLineComment();
|
||||||
|
|
||||||
|
const end = {
|
||||||
|
line: this.line + 1,
|
||||||
|
column: this.index - this.lineStart,
|
||||||
|
offset: this.index,
|
||||||
|
};
|
||||||
|
const text = this.source.substring(start.offset + 2, end.offset - 2);
|
||||||
|
|
||||||
|
this.comments.push({ text, type, start, end });
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateInterface(parsingFunctionName) {
|
||||||
|
return function parse(code, { earlyErrors = true } = {}) {
|
||||||
|
let parser = new GenericParser(code);
|
||||||
|
let tree = parser[parsingFunctionName]();
|
||||||
|
if (earlyErrors) {
|
||||||
|
let errors = EarlyErrorChecker.check(tree);
|
||||||
|
// for now, just throw the first error; we will handle multiple errors later
|
||||||
|
if (errors.length > 0) {
|
||||||
|
throw new JsError(0, 1, 0, errors[0].message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tree;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateInterfaceWithLocation(parsingFunctionName) {
|
||||||
|
return function parse(code, { earlyErrors = true } = {}) {
|
||||||
|
let parser = new ParserWithLocation(code);
|
||||||
|
let tree = parser[parsingFunctionName]();
|
||||||
|
if (earlyErrors) {
|
||||||
|
let errors = EarlyErrorChecker.check(tree);
|
||||||
|
// for now, just throw the first error; we will handle multiple errors later
|
||||||
|
if (errors.length > 0) {
|
||||||
|
let { node, message } = errors[0];
|
||||||
|
let { offset, line, column } = parser.locations.get(node).start;
|
||||||
|
throw new JsError(offset, line, column, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { tree, locations: parser.locations, comments: parser.comments };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const parseScript = generateInterface('parseScript');
|
||||||
|
const parseModule = generateInterface('parseModule');
|
||||||
|
const parseModuleWithLocation = generateInterfaceWithLocation('parseModule');
|
||||||
|
const parseScriptWithLocation = generateInterfaceWithLocation('parseScript');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
default: parseScript,
|
||||||
|
parseScript,
|
||||||
|
parseModule,
|
||||||
|
parseModuleWithLocation,
|
||||||
|
parseScriptWithLocation,
|
||||||
|
EarlyErrorChecker,
|
||||||
|
GenericParser,
|
||||||
|
ParserWithLocation,
|
||||||
|
Tokenizer,
|
||||||
|
TokenClass,
|
||||||
|
TokenType,
|
||||||
|
};
|
2650
node_modules/shift-parser/src/parser.js
generated
vendored
Normal file
2650
node_modules/shift-parser/src/parser.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
1513
node_modules/shift-parser/src/tokenizer.js
generated
vendored
Normal file
1513
node_modules/shift-parser/src/tokenizer.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
11
node_modules/shift-parser/src/unicode.js
generated
vendored
Normal file
11
node_modules/shift-parser/src/unicode.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
105
node_modules/shift-parser/src/utils.js
generated
vendored
Normal file
105
node_modules/shift-parser/src/utils.js
generated
vendored
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2017 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { whitespaceArray, whitespaceBool, idStartLargeRegex, idStartBool, idContinueLargeRegex, idContinueBool } = require('./unicode');
|
||||||
|
|
||||||
|
|
||||||
|
const strictReservedWords = [
|
||||||
|
'null',
|
||||||
|
'true',
|
||||||
|
'false',
|
||||||
|
|
||||||
|
'implements',
|
||||||
|
'interface',
|
||||||
|
'package',
|
||||||
|
'private',
|
||||||
|
'protected',
|
||||||
|
'public',
|
||||||
|
'static',
|
||||||
|
'let',
|
||||||
|
|
||||||
|
'if',
|
||||||
|
'in',
|
||||||
|
'do',
|
||||||
|
'var',
|
||||||
|
'for',
|
||||||
|
'new',
|
||||||
|
'try',
|
||||||
|
'this',
|
||||||
|
'else',
|
||||||
|
'case',
|
||||||
|
'void',
|
||||||
|
'with',
|
||||||
|
'enum',
|
||||||
|
'while',
|
||||||
|
'break',
|
||||||
|
'catch',
|
||||||
|
'throw',
|
||||||
|
'const',
|
||||||
|
'yield',
|
||||||
|
'class',
|
||||||
|
'super',
|
||||||
|
'return',
|
||||||
|
'typeof',
|
||||||
|
'delete',
|
||||||
|
'switch',
|
||||||
|
'export',
|
||||||
|
'import',
|
||||||
|
'default',
|
||||||
|
'finally',
|
||||||
|
'extends',
|
||||||
|
'function',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'instanceof',
|
||||||
|
];
|
||||||
|
|
||||||
|
exports.isStrictModeReservedWord = id => {
|
||||||
|
return strictReservedWords.indexOf(id) !== -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isWhiteSpace = ch => {
|
||||||
|
return ch < 128 ? whitespaceBool[ch] : ch === 0xA0 || ch > 0x167F && whitespaceArray.indexOf(ch) !== -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isLineTerminator = ch => {
|
||||||
|
return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isIdentifierStart = ch => {
|
||||||
|
return ch < 128 ? idStartBool[ch] : idStartLargeRegex.test(String.fromCodePoint(ch));
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isIdentifierPart = ch => {
|
||||||
|
return ch < 128 ? idContinueBool[ch] : idContinueLargeRegex.test(String.fromCodePoint(ch));
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isDecimalDigit = ch => {
|
||||||
|
return ch >= 48 && ch <= 57;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.getHexValue = rune => {
|
||||||
|
if (rune >= '0' && rune <= '9') {
|
||||||
|
return rune.charCodeAt(0) - 48;
|
||||||
|
}
|
||||||
|
if (rune >= 'a' && rune <= 'f') {
|
||||||
|
return rune.charCodeAt(0) - 87;
|
||||||
|
}
|
||||||
|
if (rune >= 'A' && rune <= 'F') {
|
||||||
|
return rune.charCodeAt(0) - 55;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
};
|
202
node_modules/shift-reducer/LICENSE
generated
vendored
Normal file
202
node_modules/shift-reducer/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
60
node_modules/shift-reducer/README.md
generated
vendored
Normal file
60
node_modules/shift-reducer/README.md
generated
vendored
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
Shift Reducer
|
||||||
|
=============
|
||||||
|
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
This module provides several reducers and related tooling for [Shift format](https://github.com/shapesecurity/shift-spec) ASTs.
|
||||||
|
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
[Stable](http://nodejs.org/api/documentation.html#documentation_stability_index).
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install shift-reducer
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
See [examples](./examples).
|
||||||
|
|
||||||
|
|
||||||
|
### Fantasy Land
|
||||||
|
|
||||||
|
![Fantasy Land logo](https://github.com/fantasyland/fantasy-land/raw/master/logo.png "Fantasy Land")
|
||||||
|
|
||||||
|
`MonoidalReducer` is compatible with [Fantasy Land](https://github.com/fantasyland/fantasy-land) Monoids.
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
* Open a Github issue with a description of your desired change. If one exists already, leave a message stating that you are working on it with the date you expect it to be complete.
|
||||||
|
* Fork this repo, and clone the forked repo.
|
||||||
|
* Install dependencies with `npm install`.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Create a feature branch. Make your changes. Add tests.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Make a commit that includes the text "fixes #*XX*" where *XX* is the Github issue.
|
||||||
|
* Open a Pull Request on Github.
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright 2014 Shape Security, Inc.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
8
node_modules/shift-reducer/gen/.eslintrc.js
generated
vendored
Normal file
8
node_modules/shift-reducer/gen/.eslintrc.js
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
module.exports = {
|
||||||
|
extends: '../.eslintrc.js',
|
||||||
|
rules: {
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'max-len': 'off',
|
||||||
|
'no-extra-parens': 'off',
|
||||||
|
}
|
||||||
|
}
|
418
node_modules/shift-reducer/gen/adapt.js
generated
vendored
Normal file
418
node_modules/shift-reducer/gen/adapt.js
generated
vendored
Normal file
|
@ -0,0 +1,418 @@
|
||||||
|
// Generated by generate-adapt.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Shift = require('shift-ast');
|
||||||
|
|
||||||
|
module.exports = (fn, reducer) => ({
|
||||||
|
__proto__: reducer,
|
||||||
|
|
||||||
|
reduceArrayAssignmentTarget(node, data) {
|
||||||
|
return fn(super.reduceArrayAssignmentTarget(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrayBinding(node, data) {
|
||||||
|
return fn(super.reduceArrayBinding(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrayExpression(node, data) {
|
||||||
|
return fn(super.reduceArrayExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrowExpression(node, data) {
|
||||||
|
return fn(super.reduceArrowExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, data) {
|
||||||
|
return fn(super.reduceAssignmentExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node, data) {
|
||||||
|
return fn(super.reduceAssignmentTargetIdentifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, data) {
|
||||||
|
return fn(super.reduceAssignmentTargetPropertyIdentifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, data) {
|
||||||
|
return fn(super.reduceAssignmentTargetPropertyProperty(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, data) {
|
||||||
|
return fn(super.reduceAssignmentTargetWithDefault(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, data) {
|
||||||
|
return fn(super.reduceAwaitExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, data) {
|
||||||
|
return fn(super.reduceBinaryExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node, data) {
|
||||||
|
return fn(super.reduceBindingIdentifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, data) {
|
||||||
|
return fn(super.reduceBindingPropertyIdentifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, data) {
|
||||||
|
return fn(super.reduceBindingPropertyProperty(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, data) {
|
||||||
|
return fn(super.reduceBindingWithDefault(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBlock(node, data) {
|
||||||
|
return fn(super.reduceBlock(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBlockStatement(node, data) {
|
||||||
|
return fn(super.reduceBlockStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBreakStatement(node, data) {
|
||||||
|
return fn(super.reduceBreakStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCallExpression(node, data) {
|
||||||
|
return fn(super.reduceCallExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCatchClause(node, data) {
|
||||||
|
return fn(super.reduceCatchClause(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, data) {
|
||||||
|
return fn(super.reduceClassDeclaration(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassElement(node, data) {
|
||||||
|
return fn(super.reduceClassElement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassExpression(node, data) {
|
||||||
|
return fn(super.reduceClassExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, data) {
|
||||||
|
return fn(super.reduceCompoundAssignmentExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, data) {
|
||||||
|
return fn(super.reduceComputedMemberAssignmentTarget(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, data) {
|
||||||
|
return fn(super.reduceComputedMemberExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, data) {
|
||||||
|
return fn(super.reduceComputedPropertyName(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, data) {
|
||||||
|
return fn(super.reduceConditionalExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceContinueStatement(node, data) {
|
||||||
|
return fn(super.reduceContinueStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDataProperty(node, data) {
|
||||||
|
return fn(super.reduceDataProperty(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node, data) {
|
||||||
|
return fn(super.reduceDebuggerStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDirective(node, data) {
|
||||||
|
return fn(super.reduceDirective(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, data) {
|
||||||
|
return fn(super.reduceDoWhileStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceEmptyStatement(node, data) {
|
||||||
|
return fn(super.reduceEmptyStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExport(node, data) {
|
||||||
|
return fn(super.reduceExport(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportAllFrom(node, data) {
|
||||||
|
return fn(super.reduceExportAllFrom(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportDefault(node, data) {
|
||||||
|
return fn(super.reduceExportDefault(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportFrom(node, data) {
|
||||||
|
return fn(super.reduceExportFrom(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node, data) {
|
||||||
|
return fn(super.reduceExportFromSpecifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, data) {
|
||||||
|
return fn(super.reduceExportLocalSpecifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportLocals(node, data) {
|
||||||
|
return fn(super.reduceExportLocals(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, data) {
|
||||||
|
return fn(super.reduceExpressionStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, data) {
|
||||||
|
return fn(super.reduceForAwaitStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForInStatement(node, data) {
|
||||||
|
return fn(super.reduceForInStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForOfStatement(node, data) {
|
||||||
|
return fn(super.reduceForOfStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForStatement(node, data) {
|
||||||
|
return fn(super.reduceForStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFormalParameters(node, data) {
|
||||||
|
return fn(super.reduceFormalParameters(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionBody(node, data) {
|
||||||
|
return fn(super.reduceFunctionBody(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, data) {
|
||||||
|
return fn(super.reduceFunctionDeclaration(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, data) {
|
||||||
|
return fn(super.reduceFunctionExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceGetter(node, data) {
|
||||||
|
return fn(super.reduceGetter(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node, data) {
|
||||||
|
return fn(super.reduceIdentifierExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceIfStatement(node, data) {
|
||||||
|
return fn(super.reduceIfStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImport(node, data) {
|
||||||
|
return fn(super.reduceImport(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImportNamespace(node, data) {
|
||||||
|
return fn(super.reduceImportNamespace(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, data) {
|
||||||
|
return fn(super.reduceImportSpecifier(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, data) {
|
||||||
|
return fn(super.reduceLabeledStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node, data) {
|
||||||
|
return fn(super.reduceLiteralBooleanExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node, data) {
|
||||||
|
return fn(super.reduceLiteralInfinityExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node, data) {
|
||||||
|
return fn(super.reduceLiteralNullExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node, data) {
|
||||||
|
return fn(super.reduceLiteralNumericExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node, data) {
|
||||||
|
return fn(super.reduceLiteralRegExpExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node, data) {
|
||||||
|
return fn(super.reduceLiteralStringExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceMethod(node, data) {
|
||||||
|
return fn(super.reduceMethod(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceModule(node, data) {
|
||||||
|
return fn(super.reduceModule(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceNewExpression(node, data) {
|
||||||
|
return fn(super.reduceNewExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node, data) {
|
||||||
|
return fn(super.reduceNewTargetExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, data) {
|
||||||
|
return fn(super.reduceObjectAssignmentTarget(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectBinding(node, data) {
|
||||||
|
return fn(super.reduceObjectBinding(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectExpression(node, data) {
|
||||||
|
return fn(super.reduceObjectExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceReturnStatement(node, data) {
|
||||||
|
return fn(super.reduceReturnStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceScript(node, data) {
|
||||||
|
return fn(super.reduceScript(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSetter(node, data) {
|
||||||
|
return fn(super.reduceSetter(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, data) {
|
||||||
|
return fn(super.reduceShorthandProperty(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSpreadElement(node, data) {
|
||||||
|
return fn(super.reduceSpreadElement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, data) {
|
||||||
|
return fn(super.reduceSpreadProperty(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, data) {
|
||||||
|
return fn(super.reduceStaticMemberAssignmentTarget(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, data) {
|
||||||
|
return fn(super.reduceStaticMemberExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node, data) {
|
||||||
|
return fn(super.reduceStaticPropertyName(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSuper(node, data) {
|
||||||
|
return fn(super.reduceSuper(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchCase(node, data) {
|
||||||
|
return fn(super.reduceSwitchCase(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, data) {
|
||||||
|
return fn(super.reduceSwitchDefault(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, data) {
|
||||||
|
return fn(super.reduceSwitchStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, data) {
|
||||||
|
return fn(super.reduceSwitchStatementWithDefault(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTemplateElement(node, data) {
|
||||||
|
return fn(super.reduceTemplateElement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, data) {
|
||||||
|
return fn(super.reduceTemplateExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceThisExpression(node, data) {
|
||||||
|
return fn(super.reduceThisExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceThrowStatement(node, data) {
|
||||||
|
return fn(super.reduceThrowStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, data) {
|
||||||
|
return fn(super.reduceTryCatchStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, data) {
|
||||||
|
return fn(super.reduceTryFinallyStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, data) {
|
||||||
|
return fn(super.reduceUnaryExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, data) {
|
||||||
|
return fn(super.reduceUpdateExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, data) {
|
||||||
|
return fn(super.reduceVariableDeclaration(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, data) {
|
||||||
|
return fn(super.reduceVariableDeclarationStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, data) {
|
||||||
|
return fn(super.reduceVariableDeclarator(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceWhileStatement(node, data) {
|
||||||
|
return fn(super.reduceWhileStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceWithStatement(node, data) {
|
||||||
|
return fn(super.reduceWithStatement(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceYieldExpression(node, data) {
|
||||||
|
return fn(super.reduceYieldExpression(node, data), node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, data) {
|
||||||
|
return fn(super.reduceYieldGeneratorExpression(node, data), node);
|
||||||
|
},
|
||||||
|
});
|
416
node_modules/shift-reducer/gen/clone-reducer.js
generated
vendored
Normal file
416
node_modules/shift-reducer/gen/clone-reducer.js
generated
vendored
Normal file
|
@ -0,0 +1,416 @@
|
||||||
|
// Generated by generate-clone-reducer.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Shift = require('shift-ast');
|
||||||
|
|
||||||
|
module.exports = class CloneReducer {
|
||||||
|
reduceArrayAssignmentTarget(node, { elements, rest }) {
|
||||||
|
return new Shift.ArrayAssignmentTarget({ elements, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayBinding(node, { elements, rest }) {
|
||||||
|
return new Shift.ArrayBinding({ elements, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayExpression(node, { elements }) {
|
||||||
|
return new Shift.ArrayExpression({ elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
return new Shift.ArrowExpression({ isAsync: node.isAsync, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return new Shift.AssignmentExpression({ binding, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
return new Shift.AssignmentTargetIdentifier({ name: node.name });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return new Shift.AssignmentTargetPropertyIdentifier({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, { name, binding }) {
|
||||||
|
return new Shift.AssignmentTargetPropertyProperty({ name, binding });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, { binding, init }) {
|
||||||
|
return new Shift.AssignmentTargetWithDefault({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
return new Shift.AwaitExpression({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, { left, right }) {
|
||||||
|
return new Shift.BinaryExpression({ left, operator: node.operator, right });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
return new Shift.BindingIdentifier({ name: node.name });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return new Shift.BindingPropertyIdentifier({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, { name, binding }) {
|
||||||
|
return new Shift.BindingPropertyProperty({ name, binding });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, { binding, init }) {
|
||||||
|
return new Shift.BindingWithDefault({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlock(node, { statements }) {
|
||||||
|
return new Shift.Block({ statements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlockStatement(node, { block }) {
|
||||||
|
return new Shift.BlockStatement({ block });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
return new Shift.BreakStatement({ label: node.label });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCallExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return new Shift.CallExpression({ callee, arguments: _arguments });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
return new Shift.CatchClause({ binding, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
return new Shift.ClassDeclaration({ name, super: _super, elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassElement(node, { method }) {
|
||||||
|
return new Shift.ClassElement({ isStatic: node.isStatic, method });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
return new Shift.ClassExpression({ name, super: _super, elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return new Shift.CompoundAssignmentExpression({ binding, operator: node.operator, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, { object, expression }) {
|
||||||
|
return new Shift.ComputedMemberAssignmentTarget({ object, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, { object, expression }) {
|
||||||
|
return new Shift.ComputedMemberExpression({ object, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, { expression }) {
|
||||||
|
return new Shift.ComputedPropertyName({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, { test, consequent, alternate }) {
|
||||||
|
return new Shift.ConditionalExpression({ test, consequent, alternate });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
return new Shift.ContinueStatement({ label: node.label });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDataProperty(node, { name, expression }) {
|
||||||
|
return new Shift.DataProperty({ name, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
return new Shift.DebuggerStatement;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
return new Shift.Directive({ rawValue: node.rawValue });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, { body, test }) {
|
||||||
|
return new Shift.DoWhileStatement({ body, test });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
return new Shift.EmptyStatement;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExport(node, { declaration }) {
|
||||||
|
return new Shift.Export({ declaration });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
return new Shift.ExportAllFrom({ moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportDefault(node, { body }) {
|
||||||
|
return new Shift.ExportDefault({ body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFrom(node, { namedExports }) {
|
||||||
|
return new Shift.ExportFrom({ namedExports, moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
return new Shift.ExportFromSpecifier({ name: node.name, exportedName: node.exportedName });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, { name }) {
|
||||||
|
return new Shift.ExportLocalSpecifier({ name, exportedName: node.exportedName });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocals(node, { namedExports }) {
|
||||||
|
return new Shift.ExportLocals({ namedExports });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, { expression }) {
|
||||||
|
return new Shift.ExpressionStatement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
return new Shift.ForAwaitStatement({ left, right, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
return new Shift.ForInStatement({ left, right, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
return new Shift.ForOfStatement({ left, right, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
return new Shift.ForStatement({ init, test, update, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFormalParameters(node, { items, rest }) {
|
||||||
|
return new Shift.FormalParameters({ items, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionBody(node, { directives, statements }) {
|
||||||
|
return new Shift.FunctionBody({ directives, statements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
return new Shift.FunctionDeclaration({ isAsync: node.isAsync, isGenerator: node.isGenerator, name, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
return new Shift.FunctionExpression({ isAsync: node.isAsync, isGenerator: node.isGenerator, name, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
return new Shift.Getter({ name, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
return new Shift.IdentifierExpression({ name: node.name });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
return new Shift.IfStatement({ test, consequent, alternate });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImport(node, { defaultBinding, namedImports }) {
|
||||||
|
return new Shift.Import({ defaultBinding, namedImports, moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportNamespace(node, { defaultBinding, namespaceBinding }) {
|
||||||
|
return new Shift.ImportNamespace({ defaultBinding, namespaceBinding, moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, { binding }) {
|
||||||
|
return new Shift.ImportSpecifier({ name: node.name, binding });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, { body }) {
|
||||||
|
return new Shift.LabeledStatement({ label: node.label, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
return new Shift.LiteralBooleanExpression({ value: node.value });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
return new Shift.LiteralInfinityExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
return new Shift.LiteralNullExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
return new Shift.LiteralNumericExpression({ value: node.value });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
return new Shift.LiteralRegExpExpression({ pattern: node.pattern, global: node.global, ignoreCase: node.ignoreCase, multiLine: node.multiLine, dotAll: node.dotAll, unicode: node.unicode, sticky: node.sticky });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
return new Shift.LiteralStringExpression({ value: node.value });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
return new Shift.Method({ isAsync: node.isAsync, isGenerator: node.isGenerator, name, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceModule(node, { directives, items }) {
|
||||||
|
return new Shift.Module({ directives, items });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return new Shift.NewExpression({ callee, arguments: _arguments });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return new Shift.NewTargetExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, { properties, rest }) {
|
||||||
|
return new Shift.ObjectAssignmentTarget({ properties, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectBinding(node, { properties, rest }) {
|
||||||
|
return new Shift.ObjectBinding({ properties, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectExpression(node, { properties }) {
|
||||||
|
return new Shift.ObjectExpression({ properties });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceReturnStatement(node, { expression }) {
|
||||||
|
return new Shift.ReturnStatement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceScript(node, { directives, statements }) {
|
||||||
|
return new Shift.Script({ directives, statements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
return new Shift.Setter({ name, param, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, { name }) {
|
||||||
|
return new Shift.ShorthandProperty({ name });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadElement(node, { expression }) {
|
||||||
|
return new Shift.SpreadElement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, { expression }) {
|
||||||
|
return new Shift.SpreadProperty({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, { object }) {
|
||||||
|
return new Shift.StaticMemberAssignmentTarget({ object, property: node.property });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, { object }) {
|
||||||
|
return new Shift.StaticMemberExpression({ object, property: node.property });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
return new Shift.StaticPropertyName({ value: node.value });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
return new Shift.Super;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchCase(node, { test, consequent }) {
|
||||||
|
return new Shift.SwitchCase({ test, consequent });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, { consequent }) {
|
||||||
|
return new Shift.SwitchDefault({ consequent });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
return new Shift.SwitchStatement({ discriminant, cases });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
return new Shift.SwitchStatementWithDefault({ discriminant, preDefaultCases, defaultCase, postDefaultCases });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
return new Shift.TemplateElement({ rawValue: node.rawValue });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, { tag, elements }) {
|
||||||
|
return new Shift.TemplateExpression({ tag, elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
return new Shift.ThisExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThrowStatement(node, { expression }) {
|
||||||
|
return new Shift.ThrowStatement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, { body, catchClause }) {
|
||||||
|
return new Shift.TryCatchStatement({ body, catchClause });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, { body, catchClause, finalizer }) {
|
||||||
|
return new Shift.TryFinallyStatement({ body, catchClause, finalizer });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, { operand }) {
|
||||||
|
return new Shift.UnaryExpression({ operator: node.operator, operand });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, { operand }) {
|
||||||
|
return new Shift.UpdateExpression({ isPrefix: node.isPrefix, operator: node.operator, operand });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, { declarators }) {
|
||||||
|
return new Shift.VariableDeclaration({ kind: node.kind, declarators });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, { declaration }) {
|
||||||
|
return new Shift.VariableDeclarationStatement({ declaration });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, { binding, init }) {
|
||||||
|
return new Shift.VariableDeclarator({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWhileStatement(node, { test, body }) {
|
||||||
|
return new Shift.WhileStatement({ test, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWithStatement(node, { object, body }) {
|
||||||
|
return new Shift.WithStatement({ object, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldExpression(node, { expression }) {
|
||||||
|
return new Shift.YieldExpression({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, { expression }) {
|
||||||
|
return new Shift.YieldGeneratorExpression({ expression });
|
||||||
|
}
|
||||||
|
};
|
418
node_modules/shift-reducer/gen/director.js
generated
vendored
Normal file
418
node_modules/shift-reducer/gen/director.js
generated
vendored
Normal file
|
@ -0,0 +1,418 @@
|
||||||
|
// Generated by generate-director.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const director = {
|
||||||
|
ArrayAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceArrayAssignmentTarget(node, { elements: node.elements.map(v => v && this[v.type](reducer, v)), rest: node.rest && this[node.rest.type](reducer, node.rest) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ArrayBinding(reducer, node) {
|
||||||
|
return reducer.reduceArrayBinding(node, { elements: node.elements.map(v => v && this[v.type](reducer, v)), rest: node.rest && this[node.rest.type](reducer, node.rest) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ArrayExpression(reducer, node) {
|
||||||
|
return reducer.reduceArrayExpression(node, { elements: node.elements.map(v => v && this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ArrowExpression(reducer, node) {
|
||||||
|
return reducer.reduceArrowExpression(node, { params: this.FormalParameters(reducer, node.params), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentExpression(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentExpression(node, { binding: this[node.binding.type](reducer, node.binding), expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetIdentifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetPropertyIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetPropertyIdentifier(node, { binding: this.AssignmentTargetIdentifier(reducer, node.binding), init: node.init && this[node.init.type](reducer, node.init) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetPropertyProperty(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetPropertyProperty(node, { name: this[node.name.type](reducer, node.name), binding: this[node.binding.type](reducer, node.binding) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetWithDefault(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetWithDefault(node, { binding: this[node.binding.type](reducer, node.binding), init: this[node.init.type](reducer, node.init) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AwaitExpression(reducer, node) {
|
||||||
|
return reducer.reduceAwaitExpression(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BinaryExpression(reducer, node) {
|
||||||
|
return reducer.reduceBinaryExpression(node, { left: this[node.left.type](reducer, node.left), right: this[node.right.type](reducer, node.right) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceBindingIdentifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingPropertyIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceBindingPropertyIdentifier(node, { binding: this.BindingIdentifier(reducer, node.binding), init: node.init && this[node.init.type](reducer, node.init) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingPropertyProperty(reducer, node) {
|
||||||
|
return reducer.reduceBindingPropertyProperty(node, { name: this[node.name.type](reducer, node.name), binding: this[node.binding.type](reducer, node.binding) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingWithDefault(reducer, node) {
|
||||||
|
return reducer.reduceBindingWithDefault(node, { binding: this[node.binding.type](reducer, node.binding), init: this[node.init.type](reducer, node.init) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Block(reducer, node) {
|
||||||
|
return reducer.reduceBlock(node, { statements: node.statements.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BlockStatement(reducer, node) {
|
||||||
|
return reducer.reduceBlockStatement(node, { block: this.Block(reducer, node.block) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BreakStatement(reducer, node) {
|
||||||
|
return reducer.reduceBreakStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
CallExpression(reducer, node) {
|
||||||
|
return reducer.reduceCallExpression(node, { callee: this[node.callee.type](reducer, node.callee), arguments: node.arguments.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
CatchClause(reducer, node) {
|
||||||
|
return reducer.reduceCatchClause(node, { binding: node.binding && this[node.binding.type](reducer, node.binding), body: this.Block(reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ClassDeclaration(reducer, node) {
|
||||||
|
return reducer.reduceClassDeclaration(node, { name: this.BindingIdentifier(reducer, node.name), super: node.super && this[node.super.type](reducer, node.super), elements: node.elements.map(v => this.ClassElement(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ClassElement(reducer, node) {
|
||||||
|
return reducer.reduceClassElement(node, { method: this[node.method.type](reducer, node.method) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ClassExpression(reducer, node) {
|
||||||
|
return reducer.reduceClassExpression(node, { name: node.name && this.BindingIdentifier(reducer, node.name), super: node.super && this[node.super.type](reducer, node.super), elements: node.elements.map(v => this.ClassElement(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
CompoundAssignmentExpression(reducer, node) {
|
||||||
|
return reducer.reduceCompoundAssignmentExpression(node, { binding: this[node.binding.type](reducer, node.binding), expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ComputedMemberAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceComputedMemberAssignmentTarget(node, { object: this[node.object.type](reducer, node.object), expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ComputedMemberExpression(reducer, node) {
|
||||||
|
return reducer.reduceComputedMemberExpression(node, { object: this[node.object.type](reducer, node.object), expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ComputedPropertyName(reducer, node) {
|
||||||
|
return reducer.reduceComputedPropertyName(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ConditionalExpression(reducer, node) {
|
||||||
|
return reducer.reduceConditionalExpression(node, { test: this[node.test.type](reducer, node.test), consequent: this[node.consequent.type](reducer, node.consequent), alternate: this[node.alternate.type](reducer, node.alternate) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ContinueStatement(reducer, node) {
|
||||||
|
return reducer.reduceContinueStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
DataProperty(reducer, node) {
|
||||||
|
return reducer.reduceDataProperty(node, { name: this[node.name.type](reducer, node.name), expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
DebuggerStatement(reducer, node) {
|
||||||
|
return reducer.reduceDebuggerStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Directive(reducer, node) {
|
||||||
|
return reducer.reduceDirective(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
DoWhileStatement(reducer, node) {
|
||||||
|
return reducer.reduceDoWhileStatement(node, { body: this[node.body.type](reducer, node.body), test: this[node.test.type](reducer, node.test) });
|
||||||
|
},
|
||||||
|
|
||||||
|
EmptyStatement(reducer, node) {
|
||||||
|
return reducer.reduceEmptyStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Export(reducer, node) {
|
||||||
|
return reducer.reduceExport(node, { declaration: this[node.declaration.type](reducer, node.declaration) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportAllFrom(reducer, node) {
|
||||||
|
return reducer.reduceExportAllFrom(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportDefault(reducer, node) {
|
||||||
|
return reducer.reduceExportDefault(node, { body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportFrom(reducer, node) {
|
||||||
|
return reducer.reduceExportFrom(node, { namedExports: node.namedExports.map(v => this.ExportFromSpecifier(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportFromSpecifier(reducer, node) {
|
||||||
|
return reducer.reduceExportFromSpecifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportLocalSpecifier(reducer, node) {
|
||||||
|
return reducer.reduceExportLocalSpecifier(node, { name: this.IdentifierExpression(reducer, node.name) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportLocals(reducer, node) {
|
||||||
|
return reducer.reduceExportLocals(node, { namedExports: node.namedExports.map(v => this.ExportLocalSpecifier(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExpressionStatement(reducer, node) {
|
||||||
|
return reducer.reduceExpressionStatement(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForAwaitStatement(reducer, node) {
|
||||||
|
return reducer.reduceForAwaitStatement(node, { left: this[node.left.type](reducer, node.left), right: this[node.right.type](reducer, node.right), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForInStatement(reducer, node) {
|
||||||
|
return reducer.reduceForInStatement(node, { left: this[node.left.type](reducer, node.left), right: this[node.right.type](reducer, node.right), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForOfStatement(reducer, node) {
|
||||||
|
return reducer.reduceForOfStatement(node, { left: this[node.left.type](reducer, node.left), right: this[node.right.type](reducer, node.right), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForStatement(reducer, node) {
|
||||||
|
return reducer.reduceForStatement(node, { init: node.init && this[node.init.type](reducer, node.init), test: node.test && this[node.test.type](reducer, node.test), update: node.update && this[node.update.type](reducer, node.update), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FormalParameters(reducer, node) {
|
||||||
|
return reducer.reduceFormalParameters(node, { items: node.items.map(v => this[v.type](reducer, v)), rest: node.rest && this[node.rest.type](reducer, node.rest) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FunctionBody(reducer, node) {
|
||||||
|
return reducer.reduceFunctionBody(node, { directives: node.directives.map(v => this.Directive(reducer, v)), statements: node.statements.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FunctionDeclaration(reducer, node) {
|
||||||
|
return reducer.reduceFunctionDeclaration(node, { name: this.BindingIdentifier(reducer, node.name), params: this.FormalParameters(reducer, node.params), body: this.FunctionBody(reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FunctionExpression(reducer, node) {
|
||||||
|
return reducer.reduceFunctionExpression(node, { name: node.name && this.BindingIdentifier(reducer, node.name), params: this.FormalParameters(reducer, node.params), body: this.FunctionBody(reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Getter(reducer, node) {
|
||||||
|
return reducer.reduceGetter(node, { name: this[node.name.type](reducer, node.name), body: this.FunctionBody(reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
IdentifierExpression(reducer, node) {
|
||||||
|
return reducer.reduceIdentifierExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
IfStatement(reducer, node) {
|
||||||
|
return reducer.reduceIfStatement(node, { test: this[node.test.type](reducer, node.test), consequent: this[node.consequent.type](reducer, node.consequent), alternate: node.alternate && this[node.alternate.type](reducer, node.alternate) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Import(reducer, node) {
|
||||||
|
return reducer.reduceImport(node, { defaultBinding: node.defaultBinding && this.BindingIdentifier(reducer, node.defaultBinding), namedImports: node.namedImports.map(v => this.ImportSpecifier(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ImportNamespace(reducer, node) {
|
||||||
|
return reducer.reduceImportNamespace(node, { defaultBinding: node.defaultBinding && this.BindingIdentifier(reducer, node.defaultBinding), namespaceBinding: this.BindingIdentifier(reducer, node.namespaceBinding) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ImportSpecifier(reducer, node) {
|
||||||
|
return reducer.reduceImportSpecifier(node, { binding: this.BindingIdentifier(reducer, node.binding) });
|
||||||
|
},
|
||||||
|
|
||||||
|
LabeledStatement(reducer, node) {
|
||||||
|
return reducer.reduceLabeledStatement(node, { body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralBooleanExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralBooleanExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralInfinityExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralInfinityExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralNullExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralNullExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralNumericExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralNumericExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralRegExpExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralRegExpExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralStringExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralStringExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Method(reducer, node) {
|
||||||
|
return reducer.reduceMethod(node, { name: this[node.name.type](reducer, node.name), params: this.FormalParameters(reducer, node.params), body: this.FunctionBody(reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Module(reducer, node) {
|
||||||
|
return reducer.reduceModule(node, { directives: node.directives.map(v => this.Directive(reducer, v)), items: node.items.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
NewExpression(reducer, node) {
|
||||||
|
return reducer.reduceNewExpression(node, { callee: this[node.callee.type](reducer, node.callee), arguments: node.arguments.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
NewTargetExpression(reducer, node) {
|
||||||
|
return reducer.reduceNewTargetExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceObjectAssignmentTarget(node, { properties: node.properties.map(v => this[v.type](reducer, v)), rest: node.rest && this[node.rest.type](reducer, node.rest) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectBinding(reducer, node) {
|
||||||
|
return reducer.reduceObjectBinding(node, { properties: node.properties.map(v => this[v.type](reducer, v)), rest: node.rest && this.BindingIdentifier(reducer, node.rest) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectExpression(reducer, node) {
|
||||||
|
return reducer.reduceObjectExpression(node, { properties: node.properties.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ReturnStatement(reducer, node) {
|
||||||
|
return reducer.reduceReturnStatement(node, { expression: node.expression && this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Script(reducer, node) {
|
||||||
|
return reducer.reduceScript(node, { directives: node.directives.map(v => this.Directive(reducer, v)), statements: node.statements.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Setter(reducer, node) {
|
||||||
|
return reducer.reduceSetter(node, { name: this[node.name.type](reducer, node.name), param: this[node.param.type](reducer, node.param), body: this.FunctionBody(reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ShorthandProperty(reducer, node) {
|
||||||
|
return reducer.reduceShorthandProperty(node, { name: this.IdentifierExpression(reducer, node.name) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SpreadElement(reducer, node) {
|
||||||
|
return reducer.reduceSpreadElement(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SpreadProperty(reducer, node) {
|
||||||
|
return reducer.reduceSpreadProperty(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
StaticMemberAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceStaticMemberAssignmentTarget(node, { object: this[node.object.type](reducer, node.object) });
|
||||||
|
},
|
||||||
|
|
||||||
|
StaticMemberExpression(reducer, node) {
|
||||||
|
return reducer.reduceStaticMemberExpression(node, { object: this[node.object.type](reducer, node.object) });
|
||||||
|
},
|
||||||
|
|
||||||
|
StaticPropertyName(reducer, node) {
|
||||||
|
return reducer.reduceStaticPropertyName(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Super(reducer, node) {
|
||||||
|
return reducer.reduceSuper(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchCase(reducer, node) {
|
||||||
|
return reducer.reduceSwitchCase(node, { test: this[node.test.type](reducer, node.test), consequent: node.consequent.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchDefault(reducer, node) {
|
||||||
|
return reducer.reduceSwitchDefault(node, { consequent: node.consequent.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchStatement(reducer, node) {
|
||||||
|
return reducer.reduceSwitchStatement(node, { discriminant: this[node.discriminant.type](reducer, node.discriminant), cases: node.cases.map(v => this.SwitchCase(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchStatementWithDefault(reducer, node) {
|
||||||
|
return reducer.reduceSwitchStatementWithDefault(node, { discriminant: this[node.discriminant.type](reducer, node.discriminant), preDefaultCases: node.preDefaultCases.map(v => this.SwitchCase(reducer, v)), defaultCase: this.SwitchDefault(reducer, node.defaultCase), postDefaultCases: node.postDefaultCases.map(v => this.SwitchCase(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
TemplateElement(reducer, node) {
|
||||||
|
return reducer.reduceTemplateElement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
TemplateExpression(reducer, node) {
|
||||||
|
return reducer.reduceTemplateExpression(node, { tag: node.tag && this[node.tag.type](reducer, node.tag), elements: node.elements.map(v => this[v.type](reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ThisExpression(reducer, node) {
|
||||||
|
return reducer.reduceThisExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ThrowStatement(reducer, node) {
|
||||||
|
return reducer.reduceThrowStatement(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
TryCatchStatement(reducer, node) {
|
||||||
|
return reducer.reduceTryCatchStatement(node, { body: this.Block(reducer, node.body), catchClause: this.CatchClause(reducer, node.catchClause) });
|
||||||
|
},
|
||||||
|
|
||||||
|
TryFinallyStatement(reducer, node) {
|
||||||
|
return reducer.reduceTryFinallyStatement(node, { body: this.Block(reducer, node.body), catchClause: node.catchClause && this.CatchClause(reducer, node.catchClause), finalizer: this.Block(reducer, node.finalizer) });
|
||||||
|
},
|
||||||
|
|
||||||
|
UnaryExpression(reducer, node) {
|
||||||
|
return reducer.reduceUnaryExpression(node, { operand: this[node.operand.type](reducer, node.operand) });
|
||||||
|
},
|
||||||
|
|
||||||
|
UpdateExpression(reducer, node) {
|
||||||
|
return reducer.reduceUpdateExpression(node, { operand: this[node.operand.type](reducer, node.operand) });
|
||||||
|
},
|
||||||
|
|
||||||
|
VariableDeclaration(reducer, node) {
|
||||||
|
return reducer.reduceVariableDeclaration(node, { declarators: node.declarators.map(v => this.VariableDeclarator(reducer, v)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
VariableDeclarationStatement(reducer, node) {
|
||||||
|
return reducer.reduceVariableDeclarationStatement(node, { declaration: this.VariableDeclaration(reducer, node.declaration) });
|
||||||
|
},
|
||||||
|
|
||||||
|
VariableDeclarator(reducer, node) {
|
||||||
|
return reducer.reduceVariableDeclarator(node, { binding: this[node.binding.type](reducer, node.binding), init: node.init && this[node.init.type](reducer, node.init) });
|
||||||
|
},
|
||||||
|
|
||||||
|
WhileStatement(reducer, node) {
|
||||||
|
return reducer.reduceWhileStatement(node, { test: this[node.test.type](reducer, node.test), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
WithStatement(reducer, node) {
|
||||||
|
return reducer.reduceWithStatement(node, { object: this[node.object.type](reducer, node.object), body: this[node.body.type](reducer, node.body) });
|
||||||
|
},
|
||||||
|
|
||||||
|
YieldExpression(reducer, node) {
|
||||||
|
return reducer.reduceYieldExpression(node, { expression: node.expression && this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
|
||||||
|
YieldGeneratorExpression(reducer, node) {
|
||||||
|
return reducer.reduceYieldGeneratorExpression(node, { expression: this[node.expression.type](reducer, node.expression) });
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = function reduce(reducer, node) {
|
||||||
|
return director[node.type](reducer, node);
|
||||||
|
};
|
650
node_modules/shift-reducer/gen/lazy-clone-reducer.js
generated
vendored
Normal file
650
node_modules/shift-reducer/gen/lazy-clone-reducer.js
generated
vendored
Normal file
|
@ -0,0 +1,650 @@
|
||||||
|
// Generated by generate-lazy-clone-reducer.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Shift = require('shift-ast');
|
||||||
|
|
||||||
|
module.exports = class LazyCloneReducer {
|
||||||
|
reduceArrayAssignmentTarget(node, { elements, rest }) {
|
||||||
|
if ((node.elements.length === elements.length && node.elements.every((v, i) => v === elements[i])) && node.rest === rest) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ArrayAssignmentTarget({ elements, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayBinding(node, { elements, rest }) {
|
||||||
|
if ((node.elements.length === elements.length && node.elements.every((v, i) => v === elements[i])) && node.rest === rest) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ArrayBinding({ elements, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayExpression(node, { elements }) {
|
||||||
|
if ((node.elements.length === elements.length && node.elements.every((v, i) => v === elements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ArrayExpression({ elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
if (node.params === params && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ArrowExpression({ isAsync: node.isAsync, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, { binding, expression }) {
|
||||||
|
if (node.binding === binding && node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.AssignmentExpression({ binding, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, { binding, init }) {
|
||||||
|
if (node.binding === binding && node.init === init) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.AssignmentTargetPropertyIdentifier({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, { name, binding }) {
|
||||||
|
if (node.name === name && node.binding === binding) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.AssignmentTargetPropertyProperty({ name, binding });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, { binding, init }) {
|
||||||
|
if (node.binding === binding && node.init === init) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.AssignmentTargetWithDefault({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.AwaitExpression({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, { left, right }) {
|
||||||
|
if (node.left === left && node.right === right) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.BinaryExpression({ left, operator: node.operator, right });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, { binding, init }) {
|
||||||
|
if (node.binding === binding && node.init === init) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.BindingPropertyIdentifier({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, { name, binding }) {
|
||||||
|
if (node.name === name && node.binding === binding) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.BindingPropertyProperty({ name, binding });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, { binding, init }) {
|
||||||
|
if (node.binding === binding && node.init === init) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.BindingWithDefault({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlock(node, { statements }) {
|
||||||
|
if ((node.statements.length === statements.length && node.statements.every((v, i) => v === statements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Block({ statements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlockStatement(node, { block }) {
|
||||||
|
if (node.block === block) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.BlockStatement({ block });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCallExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
if (node.callee === callee && (node.arguments.length === _arguments.length && node.arguments.every((v, i) => v === _arguments[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.CallExpression({ callee, arguments: _arguments });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
if (node.binding === binding && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.CatchClause({ binding, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
if (node.name === name && node.super === _super && (node.elements.length === elements.length && node.elements.every((v, i) => v === elements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ClassDeclaration({ name, super: _super, elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassElement(node, { method }) {
|
||||||
|
if (node.method === method) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ClassElement({ isStatic: node.isStatic, method });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
if (node.name === name && node.super === _super && (node.elements.length === elements.length && node.elements.every((v, i) => v === elements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ClassExpression({ name, super: _super, elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, { binding, expression }) {
|
||||||
|
if (node.binding === binding && node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.CompoundAssignmentExpression({ binding, operator: node.operator, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, { object, expression }) {
|
||||||
|
if (node.object === object && node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ComputedMemberAssignmentTarget({ object, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, { object, expression }) {
|
||||||
|
if (node.object === object && node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ComputedMemberExpression({ object, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ComputedPropertyName({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, { test, consequent, alternate }) {
|
||||||
|
if (node.test === test && node.consequent === consequent && node.alternate === alternate) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ConditionalExpression({ test, consequent, alternate });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDataProperty(node, { name, expression }) {
|
||||||
|
if (node.name === name && node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.DataProperty({ name, expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, { body, test }) {
|
||||||
|
if (node.body === body && node.test === test) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.DoWhileStatement({ body, test });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExport(node, { declaration }) {
|
||||||
|
if (node.declaration === declaration) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Export({ declaration });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportDefault(node, { body }) {
|
||||||
|
if (node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ExportDefault({ body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFrom(node, { namedExports }) {
|
||||||
|
if ((node.namedExports.length === namedExports.length && node.namedExports.every((v, i) => v === namedExports[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ExportFrom({ namedExports, moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, { name }) {
|
||||||
|
if (node.name === name) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ExportLocalSpecifier({ name, exportedName: node.exportedName });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocals(node, { namedExports }) {
|
||||||
|
if ((node.namedExports.length === namedExports.length && node.namedExports.every((v, i) => v === namedExports[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ExportLocals({ namedExports });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ExpressionStatement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
if (node.left === left && node.right === right && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ForAwaitStatement({ left, right, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
if (node.left === left && node.right === right && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ForInStatement({ left, right, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
if (node.left === left && node.right === right && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ForOfStatement({ left, right, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
if (node.init === init && node.test === test && node.update === update && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ForStatement({ init, test, update, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFormalParameters(node, { items, rest }) {
|
||||||
|
if ((node.items.length === items.length && node.items.every((v, i) => v === items[i])) && node.rest === rest) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.FormalParameters({ items, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionBody(node, { directives, statements }) {
|
||||||
|
if ((node.directives.length === directives.length && node.directives.every((v, i) => v === directives[i])) && (node.statements.length === statements.length && node.statements.every((v, i) => v === statements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.FunctionBody({ directives, statements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
if (node.name === name && node.params === params && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.FunctionDeclaration({ isAsync: node.isAsync, isGenerator: node.isGenerator, name, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
if (node.name === name && node.params === params && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.FunctionExpression({ isAsync: node.isAsync, isGenerator: node.isGenerator, name, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
if (node.name === name && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Getter({ name, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
if (node.test === test && node.consequent === consequent && node.alternate === alternate) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.IfStatement({ test, consequent, alternate });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImport(node, { defaultBinding, namedImports }) {
|
||||||
|
if (node.defaultBinding === defaultBinding && (node.namedImports.length === namedImports.length && node.namedImports.every((v, i) => v === namedImports[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Import({ defaultBinding, namedImports, moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportNamespace(node, { defaultBinding, namespaceBinding }) {
|
||||||
|
if (node.defaultBinding === defaultBinding && node.namespaceBinding === namespaceBinding) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ImportNamespace({ defaultBinding, namespaceBinding, moduleSpecifier: node.moduleSpecifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, { binding }) {
|
||||||
|
if (node.binding === binding) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ImportSpecifier({ name: node.name, binding });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, { body }) {
|
||||||
|
if (node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.LabeledStatement({ label: node.label, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
if (node.name === name && node.params === params && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Method({ isAsync: node.isAsync, isGenerator: node.isGenerator, name, params, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceModule(node, { directives, items }) {
|
||||||
|
if ((node.directives.length === directives.length && node.directives.every((v, i) => v === directives[i])) && (node.items.length === items.length && node.items.every((v, i) => v === items[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Module({ directives, items });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
if (node.callee === callee && (node.arguments.length === _arguments.length && node.arguments.every((v, i) => v === _arguments[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.NewExpression({ callee, arguments: _arguments });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, { properties, rest }) {
|
||||||
|
if ((node.properties.length === properties.length && node.properties.every((v, i) => v === properties[i])) && node.rest === rest) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ObjectAssignmentTarget({ properties, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectBinding(node, { properties, rest }) {
|
||||||
|
if ((node.properties.length === properties.length && node.properties.every((v, i) => v === properties[i])) && node.rest === rest) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ObjectBinding({ properties, rest });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectExpression(node, { properties }) {
|
||||||
|
if ((node.properties.length === properties.length && node.properties.every((v, i) => v === properties[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ObjectExpression({ properties });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceReturnStatement(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ReturnStatement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceScript(node, { directives, statements }) {
|
||||||
|
if ((node.directives.length === directives.length && node.directives.every((v, i) => v === directives[i])) && (node.statements.length === statements.length && node.statements.every((v, i) => v === statements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Script({ directives, statements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
if (node.name === name && node.param === param && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.Setter({ name, param, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, { name }) {
|
||||||
|
if (node.name === name) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ShorthandProperty({ name });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadElement(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.SpreadElement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.SpreadProperty({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, { object }) {
|
||||||
|
if (node.object === object) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.StaticMemberAssignmentTarget({ object, property: node.property });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, { object }) {
|
||||||
|
if (node.object === object) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.StaticMemberExpression({ object, property: node.property });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchCase(node, { test, consequent }) {
|
||||||
|
if (node.test === test && (node.consequent.length === consequent.length && node.consequent.every((v, i) => v === consequent[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.SwitchCase({ test, consequent });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, { consequent }) {
|
||||||
|
if ((node.consequent.length === consequent.length && node.consequent.every((v, i) => v === consequent[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.SwitchDefault({ consequent });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
if (node.discriminant === discriminant && (node.cases.length === cases.length && node.cases.every((v, i) => v === cases[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.SwitchStatement({ discriminant, cases });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
if (node.discriminant === discriminant && (node.preDefaultCases.length === preDefaultCases.length && node.preDefaultCases.every((v, i) => v === preDefaultCases[i])) && node.defaultCase === defaultCase && (node.postDefaultCases.length === postDefaultCases.length && node.postDefaultCases.every((v, i) => v === postDefaultCases[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.SwitchStatementWithDefault({ discriminant, preDefaultCases, defaultCase, postDefaultCases });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, { tag, elements }) {
|
||||||
|
if (node.tag === tag && (node.elements.length === elements.length && node.elements.every((v, i) => v === elements[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.TemplateExpression({ tag, elements });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThrowStatement(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.ThrowStatement({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, { body, catchClause }) {
|
||||||
|
if (node.body === body && node.catchClause === catchClause) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.TryCatchStatement({ body, catchClause });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, { body, catchClause, finalizer }) {
|
||||||
|
if (node.body === body && node.catchClause === catchClause && node.finalizer === finalizer) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.TryFinallyStatement({ body, catchClause, finalizer });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, { operand }) {
|
||||||
|
if (node.operand === operand) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.UnaryExpression({ operator: node.operator, operand });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, { operand }) {
|
||||||
|
if (node.operand === operand) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.UpdateExpression({ isPrefix: node.isPrefix, operator: node.operator, operand });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, { declarators }) {
|
||||||
|
if ((node.declarators.length === declarators.length && node.declarators.every((v, i) => v === declarators[i]))) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.VariableDeclaration({ kind: node.kind, declarators });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, { declaration }) {
|
||||||
|
if (node.declaration === declaration) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.VariableDeclarationStatement({ declaration });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, { binding, init }) {
|
||||||
|
if (node.binding === binding && node.init === init) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.VariableDeclarator({ binding, init });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWhileStatement(node, { test, body }) {
|
||||||
|
if (node.test === test && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.WhileStatement({ test, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWithStatement(node, { object, body }) {
|
||||||
|
if (node.object === object && node.body === body) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.WithStatement({ object, body });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldExpression(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.YieldExpression({ expression });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, { expression }) {
|
||||||
|
if (node.expression === expression) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return new Shift.YieldGeneratorExpression({ expression });
|
||||||
|
}
|
||||||
|
};
|
914
node_modules/shift-reducer/gen/memoize.js
generated
vendored
Normal file
914
node_modules/shift-reducer/gen/memoize.js
generated
vendored
Normal file
|
@ -0,0 +1,914 @@
|
||||||
|
// Generated by generate-memoize.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Shift = require('shift-ast');
|
||||||
|
|
||||||
|
module.exports = function memoize(reducer) {
|
||||||
|
const cache = new WeakMap;
|
||||||
|
return {
|
||||||
|
reduceArrayAssignmentTarget(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceArrayAssignmentTarget(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrayBinding(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceArrayBinding(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrayExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceArrayExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrowExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceArrowExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceAssignmentExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceAssignmentTargetIdentifier(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceAssignmentTargetPropertyIdentifier(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceAssignmentTargetPropertyProperty(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceAssignmentTargetWithDefault(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceAwaitExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBinaryExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBindingIdentifier(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBindingPropertyIdentifier(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBindingPropertyProperty(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBindingWithDefault(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBlock(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBlock(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBlockStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBlockStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceBreakStatement(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCallExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceCallExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCatchClause(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceCatchClause(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceClassDeclaration(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassElement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceClassElement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceClassExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceCompoundAssignmentExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceComputedMemberAssignmentTarget(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceComputedMemberExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceComputedPropertyName(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceConditionalExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceContinueStatement(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDataProperty(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceDataProperty(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceDebuggerStatement(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceDirective(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceDoWhileStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceEmptyStatement(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExport(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExport(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExportAllFrom(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportDefault(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExportDefault(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportFrom(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExportFrom(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExportFromSpecifier(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExportLocalSpecifier(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportLocals(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExportLocals(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceExpressionStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceForAwaitStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForInStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceForInStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForOfStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceForOfStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceForStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFormalParameters(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceFormalParameters(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionBody(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceFunctionBody(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceFunctionDeclaration(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceFunctionExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceGetter(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceGetter(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceIdentifierExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceIfStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceIfStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImport(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceImport(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImportNamespace(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceImportNamespace(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceImportSpecifier(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLabeledStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLiteralBooleanExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLiteralInfinityExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLiteralNullExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLiteralNumericExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLiteralRegExpExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceLiteralStringExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceMethod(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceMethod(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceModule(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceModule(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceNewExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceNewExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceNewTargetExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceObjectAssignmentTarget(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectBinding(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceObjectBinding(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceObjectExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceReturnStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceReturnStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceScript(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceScript(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSetter(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSetter(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceShorthandProperty(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSpreadElement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSpreadElement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSpreadProperty(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceStaticMemberAssignmentTarget(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceStaticMemberExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceStaticPropertyName(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSuper(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchCase(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSwitchCase(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSwitchDefault(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSwitchStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceSwitchStatementWithDefault(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceTemplateElement(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceTemplateExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceThisExpression(node);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceThrowStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceThrowStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceTryCatchStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceTryFinallyStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceUnaryExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceUpdateExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceVariableDeclaration(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceVariableDeclarationStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceVariableDeclarator(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceWhileStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceWhileStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceWithStatement(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceWithStatement(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceYieldExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceYieldExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, arg) {
|
||||||
|
if (cache.has(node)) {
|
||||||
|
return cache.get(node);
|
||||||
|
}
|
||||||
|
const res = reducer.reduceYieldGeneratorExpression(node, arg);
|
||||||
|
cache.set(node, res);
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
430
node_modules/shift-reducer/gen/monoidal-reducer.js
generated
vendored
Normal file
430
node_modules/shift-reducer/gen/monoidal-reducer.js
generated
vendored
Normal file
|
@ -0,0 +1,430 @@
|
||||||
|
// Generated by generate-monoidal-reducer.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Shift = require('shift-ast');
|
||||||
|
|
||||||
|
module.exports = class MonoidalReducer {
|
||||||
|
constructor(monoid) {
|
||||||
|
let identity = monoid.empty();
|
||||||
|
this.identity = identity;
|
||||||
|
let concat;
|
||||||
|
if (monoid.prototype && typeof monoid.prototype.concat === 'function') {
|
||||||
|
concat = Function.prototype.call.bind(monoid.prototype.concat);
|
||||||
|
} else if (typeof monoid.concat === 'function') {
|
||||||
|
concat = monoid.concat;
|
||||||
|
} else {
|
||||||
|
throw new TypeError('Monoid must provide a `concat` method');
|
||||||
|
}
|
||||||
|
this.append = (...args) => args.reduce(concat, identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayAssignmentTarget(node, { elements, rest }) {
|
||||||
|
return this.append(...elements.filter(n => n != null), rest == null ? this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayBinding(node, { elements, rest }) {
|
||||||
|
return this.append(...elements.filter(n => n != null), rest == null ? this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayExpression(node, { elements }) {
|
||||||
|
return this.append(...elements.filter(n => n != null));
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
return this.append(params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return this.append(binding, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return this.append(binding, init == null ? this.identity : init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, { name, binding }) {
|
||||||
|
return this.append(name, binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, { binding, init }) {
|
||||||
|
return this.append(binding, init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, { left, right }) {
|
||||||
|
return this.append(left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return this.append(binding, init == null ? this.identity : init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, { name, binding }) {
|
||||||
|
return this.append(name, binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, { binding, init }) {
|
||||||
|
return this.append(binding, init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlock(node, { statements }) {
|
||||||
|
return this.append(...statements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlockStatement(node, { block }) {
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCallExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return this.append(callee, ..._arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
return this.append(binding == null ? this.identity : binding, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
return this.append(name, _super == null ? this.identity : _super, ...elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassElement(node, { method }) {
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
return this.append(name == null ? this.identity : name, _super == null ? this.identity : _super, ...elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return this.append(binding, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, { object, expression }) {
|
||||||
|
return this.append(object, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, { object, expression }) {
|
||||||
|
return this.append(object, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, { test, consequent, alternate }) {
|
||||||
|
return this.append(test, consequent, alternate);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDataProperty(node, { name, expression }) {
|
||||||
|
return this.append(name, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, { body, test }) {
|
||||||
|
return this.append(body, test);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExport(node, { declaration }) {
|
||||||
|
return declaration;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportDefault(node, { body }) {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFrom(node, { namedExports }) {
|
||||||
|
return this.append(...namedExports);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, { name }) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocals(node, { namedExports }) {
|
||||||
|
return this.append(...namedExports);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
return this.append(left, right, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
return this.append(left, right, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
return this.append(left, right, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
return this.append(init == null ? this.identity : init, test == null ? this.identity : test, update == null ? this.identity : update, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFormalParameters(node, { items, rest }) {
|
||||||
|
return this.append(...items, rest == null ? this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionBody(node, { directives, statements }) {
|
||||||
|
return this.append(...directives, ...statements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
return this.append(name, params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
return this.append(name == null ? this.identity : name, params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
return this.append(name, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
return this.append(test, consequent, alternate == null ? this.identity : alternate);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImport(node, { defaultBinding, namedImports }) {
|
||||||
|
return this.append(defaultBinding == null ? this.identity : defaultBinding, ...namedImports);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportNamespace(node, { defaultBinding, namespaceBinding }) {
|
||||||
|
return this.append(defaultBinding == null ? this.identity : defaultBinding, namespaceBinding);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, { binding }) {
|
||||||
|
return binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, { body }) {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
return this.append(name, params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceModule(node, { directives, items }) {
|
||||||
|
return this.append(...directives, ...items);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return this.append(callee, ..._arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, { properties, rest }) {
|
||||||
|
return this.append(...properties, rest == null ? this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectBinding(node, { properties, rest }) {
|
||||||
|
return this.append(...properties, rest == null ? this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectExpression(node, { properties }) {
|
||||||
|
return this.append(...properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceReturnStatement(node, { expression }) {
|
||||||
|
return expression == null ? this.identity : expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceScript(node, { directives, statements }) {
|
||||||
|
return this.append(...directives, ...statements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
return this.append(name, param, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, { name }) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadElement(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, { object }) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, { object }) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchCase(node, { test, consequent }) {
|
||||||
|
return this.append(test, ...consequent);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, { consequent }) {
|
||||||
|
return this.append(...consequent);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
return this.append(discriminant, ...cases);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
return this.append(discriminant, ...preDefaultCases, defaultCase, ...postDefaultCases);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, { tag, elements }) {
|
||||||
|
return this.append(tag == null ? this.identity : tag, ...elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThrowStatement(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, { body, catchClause }) {
|
||||||
|
return this.append(body, catchClause);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, { body, catchClause, finalizer }) {
|
||||||
|
return this.append(body, catchClause == null ? this.identity : catchClause, finalizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, { operand }) {
|
||||||
|
return operand;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, { operand }) {
|
||||||
|
return operand;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, { declarators }) {
|
||||||
|
return this.append(...declarators);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, { declaration }) {
|
||||||
|
return declaration;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, { binding, init }) {
|
||||||
|
return this.append(binding, init == null ? this.identity : init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWhileStatement(node, { test, body }) {
|
||||||
|
return this.append(test, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWithStatement(node, { object, body }) {
|
||||||
|
return this.append(object, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldExpression(node, { expression }) {
|
||||||
|
return expression == null ? this.identity : expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, { expression }) {
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
};
|
418
node_modules/shift-reducer/gen/thunked-director.js
generated
vendored
Normal file
418
node_modules/shift-reducer/gen/thunked-director.js
generated
vendored
Normal file
|
@ -0,0 +1,418 @@
|
||||||
|
// Generated by generate-director.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const director = {
|
||||||
|
ArrayAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceArrayAssignmentTarget(node, { elements: node.elements.map(v => v && (() => this[v.type](reducer, v))), rest: node.rest && (() => this[node.rest.type](reducer, node.rest)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ArrayBinding(reducer, node) {
|
||||||
|
return reducer.reduceArrayBinding(node, { elements: node.elements.map(v => v && (() => this[v.type](reducer, v))), rest: node.rest && (() => this[node.rest.type](reducer, node.rest)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ArrayExpression(reducer, node) {
|
||||||
|
return reducer.reduceArrayExpression(node, { elements: node.elements.map(v => v && (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ArrowExpression(reducer, node) {
|
||||||
|
return reducer.reduceArrowExpression(node, { params: (() => this.FormalParameters(reducer, node.params)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentExpression(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentExpression(node, { binding: (() => this[node.binding.type](reducer, node.binding)), expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetIdentifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetPropertyIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetPropertyIdentifier(node, { binding: (() => this.AssignmentTargetIdentifier(reducer, node.binding)), init: node.init && (() => this[node.init.type](reducer, node.init)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetPropertyProperty(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetPropertyProperty(node, { name: (() => this[node.name.type](reducer, node.name)), binding: (() => this[node.binding.type](reducer, node.binding)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AssignmentTargetWithDefault(reducer, node) {
|
||||||
|
return reducer.reduceAssignmentTargetWithDefault(node, { binding: (() => this[node.binding.type](reducer, node.binding)), init: (() => this[node.init.type](reducer, node.init)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
AwaitExpression(reducer, node) {
|
||||||
|
return reducer.reduceAwaitExpression(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BinaryExpression(reducer, node) {
|
||||||
|
return reducer.reduceBinaryExpression(node, { left: (() => this[node.left.type](reducer, node.left)), right: (() => this[node.right.type](reducer, node.right)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceBindingIdentifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingPropertyIdentifier(reducer, node) {
|
||||||
|
return reducer.reduceBindingPropertyIdentifier(node, { binding: (() => this.BindingIdentifier(reducer, node.binding)), init: node.init && (() => this[node.init.type](reducer, node.init)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingPropertyProperty(reducer, node) {
|
||||||
|
return reducer.reduceBindingPropertyProperty(node, { name: (() => this[node.name.type](reducer, node.name)), binding: (() => this[node.binding.type](reducer, node.binding)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BindingWithDefault(reducer, node) {
|
||||||
|
return reducer.reduceBindingWithDefault(node, { binding: (() => this[node.binding.type](reducer, node.binding)), init: (() => this[node.init.type](reducer, node.init)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Block(reducer, node) {
|
||||||
|
return reducer.reduceBlock(node, { statements: node.statements.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BlockStatement(reducer, node) {
|
||||||
|
return reducer.reduceBlockStatement(node, { block: (() => this.Block(reducer, node.block)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
BreakStatement(reducer, node) {
|
||||||
|
return reducer.reduceBreakStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
CallExpression(reducer, node) {
|
||||||
|
return reducer.reduceCallExpression(node, { callee: (() => this[node.callee.type](reducer, node.callee)), arguments: node.arguments.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
CatchClause(reducer, node) {
|
||||||
|
return reducer.reduceCatchClause(node, { binding: node.binding && (() => this[node.binding.type](reducer, node.binding)), body: (() => this.Block(reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ClassDeclaration(reducer, node) {
|
||||||
|
return reducer.reduceClassDeclaration(node, { name: (() => this.BindingIdentifier(reducer, node.name)), super: node.super && (() => this[node.super.type](reducer, node.super)), elements: node.elements.map(v => (() => this.ClassElement(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ClassElement(reducer, node) {
|
||||||
|
return reducer.reduceClassElement(node, { method: (() => this[node.method.type](reducer, node.method)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ClassExpression(reducer, node) {
|
||||||
|
return reducer.reduceClassExpression(node, { name: node.name && (() => this.BindingIdentifier(reducer, node.name)), super: node.super && (() => this[node.super.type](reducer, node.super)), elements: node.elements.map(v => (() => this.ClassElement(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
CompoundAssignmentExpression(reducer, node) {
|
||||||
|
return reducer.reduceCompoundAssignmentExpression(node, { binding: (() => this[node.binding.type](reducer, node.binding)), expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ComputedMemberAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceComputedMemberAssignmentTarget(node, { object: (() => this[node.object.type](reducer, node.object)), expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ComputedMemberExpression(reducer, node) {
|
||||||
|
return reducer.reduceComputedMemberExpression(node, { object: (() => this[node.object.type](reducer, node.object)), expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ComputedPropertyName(reducer, node) {
|
||||||
|
return reducer.reduceComputedPropertyName(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ConditionalExpression(reducer, node) {
|
||||||
|
return reducer.reduceConditionalExpression(node, { test: (() => this[node.test.type](reducer, node.test)), consequent: (() => this[node.consequent.type](reducer, node.consequent)), alternate: (() => this[node.alternate.type](reducer, node.alternate)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ContinueStatement(reducer, node) {
|
||||||
|
return reducer.reduceContinueStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
DataProperty(reducer, node) {
|
||||||
|
return reducer.reduceDataProperty(node, { name: (() => this[node.name.type](reducer, node.name)), expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
DebuggerStatement(reducer, node) {
|
||||||
|
return reducer.reduceDebuggerStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Directive(reducer, node) {
|
||||||
|
return reducer.reduceDirective(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
DoWhileStatement(reducer, node) {
|
||||||
|
return reducer.reduceDoWhileStatement(node, { body: (() => this[node.body.type](reducer, node.body)), test: (() => this[node.test.type](reducer, node.test)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
EmptyStatement(reducer, node) {
|
||||||
|
return reducer.reduceEmptyStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Export(reducer, node) {
|
||||||
|
return reducer.reduceExport(node, { declaration: (() => this[node.declaration.type](reducer, node.declaration)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportAllFrom(reducer, node) {
|
||||||
|
return reducer.reduceExportAllFrom(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportDefault(reducer, node) {
|
||||||
|
return reducer.reduceExportDefault(node, { body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportFrom(reducer, node) {
|
||||||
|
return reducer.reduceExportFrom(node, { namedExports: node.namedExports.map(v => (() => this.ExportFromSpecifier(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportFromSpecifier(reducer, node) {
|
||||||
|
return reducer.reduceExportFromSpecifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportLocalSpecifier(reducer, node) {
|
||||||
|
return reducer.reduceExportLocalSpecifier(node, { name: (() => this.IdentifierExpression(reducer, node.name)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExportLocals(reducer, node) {
|
||||||
|
return reducer.reduceExportLocals(node, { namedExports: node.namedExports.map(v => (() => this.ExportLocalSpecifier(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ExpressionStatement(reducer, node) {
|
||||||
|
return reducer.reduceExpressionStatement(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForAwaitStatement(reducer, node) {
|
||||||
|
return reducer.reduceForAwaitStatement(node, { left: (() => this[node.left.type](reducer, node.left)), right: (() => this[node.right.type](reducer, node.right)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForInStatement(reducer, node) {
|
||||||
|
return reducer.reduceForInStatement(node, { left: (() => this[node.left.type](reducer, node.left)), right: (() => this[node.right.type](reducer, node.right)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForOfStatement(reducer, node) {
|
||||||
|
return reducer.reduceForOfStatement(node, { left: (() => this[node.left.type](reducer, node.left)), right: (() => this[node.right.type](reducer, node.right)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ForStatement(reducer, node) {
|
||||||
|
return reducer.reduceForStatement(node, { init: node.init && (() => this[node.init.type](reducer, node.init)), test: node.test && (() => this[node.test.type](reducer, node.test)), update: node.update && (() => this[node.update.type](reducer, node.update)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FormalParameters(reducer, node) {
|
||||||
|
return reducer.reduceFormalParameters(node, { items: node.items.map(v => (() => this[v.type](reducer, v))), rest: node.rest && (() => this[node.rest.type](reducer, node.rest)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FunctionBody(reducer, node) {
|
||||||
|
return reducer.reduceFunctionBody(node, { directives: node.directives.map(v => (() => this.Directive(reducer, v))), statements: node.statements.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FunctionDeclaration(reducer, node) {
|
||||||
|
return reducer.reduceFunctionDeclaration(node, { name: (() => this.BindingIdentifier(reducer, node.name)), params: (() => this.FormalParameters(reducer, node.params)), body: (() => this.FunctionBody(reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
FunctionExpression(reducer, node) {
|
||||||
|
return reducer.reduceFunctionExpression(node, { name: node.name && (() => this.BindingIdentifier(reducer, node.name)), params: (() => this.FormalParameters(reducer, node.params)), body: (() => this.FunctionBody(reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Getter(reducer, node) {
|
||||||
|
return reducer.reduceGetter(node, { name: (() => this[node.name.type](reducer, node.name)), body: (() => this.FunctionBody(reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
IdentifierExpression(reducer, node) {
|
||||||
|
return reducer.reduceIdentifierExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
IfStatement(reducer, node) {
|
||||||
|
return reducer.reduceIfStatement(node, { test: (() => this[node.test.type](reducer, node.test)), consequent: (() => this[node.consequent.type](reducer, node.consequent)), alternate: node.alternate && (() => this[node.alternate.type](reducer, node.alternate)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Import(reducer, node) {
|
||||||
|
return reducer.reduceImport(node, { defaultBinding: node.defaultBinding && (() => this.BindingIdentifier(reducer, node.defaultBinding)), namedImports: node.namedImports.map(v => (() => this.ImportSpecifier(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ImportNamespace(reducer, node) {
|
||||||
|
return reducer.reduceImportNamespace(node, { defaultBinding: node.defaultBinding && (() => this.BindingIdentifier(reducer, node.defaultBinding)), namespaceBinding: (() => this.BindingIdentifier(reducer, node.namespaceBinding)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ImportSpecifier(reducer, node) {
|
||||||
|
return reducer.reduceImportSpecifier(node, { binding: (() => this.BindingIdentifier(reducer, node.binding)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
LabeledStatement(reducer, node) {
|
||||||
|
return reducer.reduceLabeledStatement(node, { body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralBooleanExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralBooleanExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralInfinityExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralInfinityExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralNullExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralNullExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralNumericExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralNumericExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralRegExpExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralRegExpExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
LiteralStringExpression(reducer, node) {
|
||||||
|
return reducer.reduceLiteralStringExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Method(reducer, node) {
|
||||||
|
return reducer.reduceMethod(node, { name: (() => this[node.name.type](reducer, node.name)), params: (() => this.FormalParameters(reducer, node.params)), body: (() => this.FunctionBody(reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Module(reducer, node) {
|
||||||
|
return reducer.reduceModule(node, { directives: node.directives.map(v => (() => this.Directive(reducer, v))), items: node.items.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
NewExpression(reducer, node) {
|
||||||
|
return reducer.reduceNewExpression(node, { callee: (() => this[node.callee.type](reducer, node.callee)), arguments: node.arguments.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
NewTargetExpression(reducer, node) {
|
||||||
|
return reducer.reduceNewTargetExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceObjectAssignmentTarget(node, { properties: node.properties.map(v => (() => this[v.type](reducer, v))), rest: node.rest && (() => this[node.rest.type](reducer, node.rest)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectBinding(reducer, node) {
|
||||||
|
return reducer.reduceObjectBinding(node, { properties: node.properties.map(v => (() => this[v.type](reducer, v))), rest: node.rest && (() => this.BindingIdentifier(reducer, node.rest)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ObjectExpression(reducer, node) {
|
||||||
|
return reducer.reduceObjectExpression(node, { properties: node.properties.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ReturnStatement(reducer, node) {
|
||||||
|
return reducer.reduceReturnStatement(node, { expression: node.expression && (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Script(reducer, node) {
|
||||||
|
return reducer.reduceScript(node, { directives: node.directives.map(v => (() => this.Directive(reducer, v))), statements: node.statements.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
Setter(reducer, node) {
|
||||||
|
return reducer.reduceSetter(node, { name: (() => this[node.name.type](reducer, node.name)), param: (() => this[node.param.type](reducer, node.param)), body: (() => this.FunctionBody(reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ShorthandProperty(reducer, node) {
|
||||||
|
return reducer.reduceShorthandProperty(node, { name: (() => this.IdentifierExpression(reducer, node.name)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SpreadElement(reducer, node) {
|
||||||
|
return reducer.reduceSpreadElement(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SpreadProperty(reducer, node) {
|
||||||
|
return reducer.reduceSpreadProperty(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
StaticMemberAssignmentTarget(reducer, node) {
|
||||||
|
return reducer.reduceStaticMemberAssignmentTarget(node, { object: (() => this[node.object.type](reducer, node.object)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
StaticMemberExpression(reducer, node) {
|
||||||
|
return reducer.reduceStaticMemberExpression(node, { object: (() => this[node.object.type](reducer, node.object)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
StaticPropertyName(reducer, node) {
|
||||||
|
return reducer.reduceStaticPropertyName(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
Super(reducer, node) {
|
||||||
|
return reducer.reduceSuper(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchCase(reducer, node) {
|
||||||
|
return reducer.reduceSwitchCase(node, { test: (() => this[node.test.type](reducer, node.test)), consequent: node.consequent.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchDefault(reducer, node) {
|
||||||
|
return reducer.reduceSwitchDefault(node, { consequent: node.consequent.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchStatement(reducer, node) {
|
||||||
|
return reducer.reduceSwitchStatement(node, { discriminant: (() => this[node.discriminant.type](reducer, node.discriminant)), cases: node.cases.map(v => (() => this.SwitchCase(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
SwitchStatementWithDefault(reducer, node) {
|
||||||
|
return reducer.reduceSwitchStatementWithDefault(node, { discriminant: (() => this[node.discriminant.type](reducer, node.discriminant)), preDefaultCases: node.preDefaultCases.map(v => (() => this.SwitchCase(reducer, v))), defaultCase: (() => this.SwitchDefault(reducer, node.defaultCase)), postDefaultCases: node.postDefaultCases.map(v => (() => this.SwitchCase(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
TemplateElement(reducer, node) {
|
||||||
|
return reducer.reduceTemplateElement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
TemplateExpression(reducer, node) {
|
||||||
|
return reducer.reduceTemplateExpression(node, { tag: node.tag && (() => this[node.tag.type](reducer, node.tag)), elements: node.elements.map(v => (() => this[v.type](reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
ThisExpression(reducer, node) {
|
||||||
|
return reducer.reduceThisExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
ThrowStatement(reducer, node) {
|
||||||
|
return reducer.reduceThrowStatement(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
TryCatchStatement(reducer, node) {
|
||||||
|
return reducer.reduceTryCatchStatement(node, { body: (() => this.Block(reducer, node.body)), catchClause: (() => this.CatchClause(reducer, node.catchClause)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
TryFinallyStatement(reducer, node) {
|
||||||
|
return reducer.reduceTryFinallyStatement(node, { body: (() => this.Block(reducer, node.body)), catchClause: node.catchClause && (() => this.CatchClause(reducer, node.catchClause)), finalizer: (() => this.Block(reducer, node.finalizer)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
UnaryExpression(reducer, node) {
|
||||||
|
return reducer.reduceUnaryExpression(node, { operand: (() => this[node.operand.type](reducer, node.operand)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
UpdateExpression(reducer, node) {
|
||||||
|
return reducer.reduceUpdateExpression(node, { operand: (() => this[node.operand.type](reducer, node.operand)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
VariableDeclaration(reducer, node) {
|
||||||
|
return reducer.reduceVariableDeclaration(node, { declarators: node.declarators.map(v => (() => this.VariableDeclarator(reducer, v))) });
|
||||||
|
},
|
||||||
|
|
||||||
|
VariableDeclarationStatement(reducer, node) {
|
||||||
|
return reducer.reduceVariableDeclarationStatement(node, { declaration: (() => this.VariableDeclaration(reducer, node.declaration)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
VariableDeclarator(reducer, node) {
|
||||||
|
return reducer.reduceVariableDeclarator(node, { binding: (() => this[node.binding.type](reducer, node.binding)), init: node.init && (() => this[node.init.type](reducer, node.init)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
WhileStatement(reducer, node) {
|
||||||
|
return reducer.reduceWhileStatement(node, { test: (() => this[node.test.type](reducer, node.test)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
WithStatement(reducer, node) {
|
||||||
|
return reducer.reduceWithStatement(node, { object: (() => this[node.object.type](reducer, node.object)), body: (() => this[node.body.type](reducer, node.body)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
YieldExpression(reducer, node) {
|
||||||
|
return reducer.reduceYieldExpression(node, { expression: node.expression && (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
|
||||||
|
YieldGeneratorExpression(reducer, node) {
|
||||||
|
return reducer.reduceYieldGeneratorExpression(node, { expression: (() => this[node.expression.type](reducer, node.expression)) });
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = function thunkedReduce(reducer, node) {
|
||||||
|
return director[node.type](reducer, node);
|
||||||
|
};
|
444
node_modules/shift-reducer/gen/thunked-monoidal-reducer.js
generated
vendored
Normal file
444
node_modules/shift-reducer/gen/thunked-monoidal-reducer.js
generated
vendored
Normal file
|
@ -0,0 +1,444 @@
|
||||||
|
// Generated by generate-monoidal-reducer.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Shift = require('shift-ast');
|
||||||
|
|
||||||
|
module.exports = class MonoidalReducer {
|
||||||
|
constructor(monoid) {
|
||||||
|
let identity = monoid.empty();
|
||||||
|
this.identity = identity;
|
||||||
|
|
||||||
|
let concatThunk;
|
||||||
|
if (monoid.prototype && typeof monoid.prototype.concatThunk === 'function') {
|
||||||
|
concatThunk = Function.prototype.call.bind(monoid.prototype.concatThunk);
|
||||||
|
} else if (typeof monoid.concatThunk === 'function') {
|
||||||
|
concatThunk = monoid.concatThunk;
|
||||||
|
} else {
|
||||||
|
let concat;
|
||||||
|
if (monoid.prototype && typeof monoid.prototype.concat === 'function') {
|
||||||
|
concat = Function.prototype.call.bind(monoid.prototype.concat);
|
||||||
|
} else if (typeof monoid.concat === 'function') {
|
||||||
|
concat = monoid.concat;
|
||||||
|
} else {
|
||||||
|
throw new TypeError('Monoid must provide a `concatThunk` or `concat` method');
|
||||||
|
}
|
||||||
|
if (typeof monoid.isAbsorbing === 'function') {
|
||||||
|
let isAbsorbing = monoid.isAbsorbing;
|
||||||
|
concatThunk = (a, b) => isAbsorbing(a) ? a : concat(a, b());
|
||||||
|
} else {
|
||||||
|
concatThunk = (a, b) => concat(a, b());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.append = (...args) => args.reduce(concatThunk, identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayAssignmentTarget(node, { elements, rest }) {
|
||||||
|
return this.append(...elements.filter(n => n != null), rest == null ? () => this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayBinding(node, { elements, rest }) {
|
||||||
|
return this.append(...elements.filter(n => n != null), rest == null ? () => this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayExpression(node, { elements }) {
|
||||||
|
return this.append(...elements.filter(n => n != null));
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
return this.append(params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return this.append(binding, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return this.append(binding, init == null ? () => this.identity : init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, { name, binding }) {
|
||||||
|
return this.append(name, binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, { binding, init }) {
|
||||||
|
return this.append(binding, init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, { left, right }) {
|
||||||
|
return this.append(left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return this.append(binding, init == null ? () => this.identity : init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, { name, binding }) {
|
||||||
|
return this.append(name, binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, { binding, init }) {
|
||||||
|
return this.append(binding, init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlock(node, { statements }) {
|
||||||
|
return this.append(...statements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlockStatement(node, { block }) {
|
||||||
|
return block();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCallExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return this.append(callee, ..._arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
return this.append(binding == null ? () => this.identity : binding, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
return this.append(name, _super == null ? () => this.identity : _super, ...elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassElement(node, { method }) {
|
||||||
|
return method();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
return this.append(name == null ? () => this.identity : name, _super == null ? () => this.identity : _super, ...elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return this.append(binding, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, { object, expression }) {
|
||||||
|
return this.append(object, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, { object, expression }) {
|
||||||
|
return this.append(object, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, { test, consequent, alternate }) {
|
||||||
|
return this.append(test, consequent, alternate);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDataProperty(node, { name, expression }) {
|
||||||
|
return this.append(name, expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, { body, test }) {
|
||||||
|
return this.append(body, test);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExport(node, { declaration }) {
|
||||||
|
return declaration();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportDefault(node, { body }) {
|
||||||
|
return body();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFrom(node, { namedExports }) {
|
||||||
|
return this.append(...namedExports);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, { name }) {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocals(node, { namedExports }) {
|
||||||
|
return this.append(...namedExports);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
return this.append(left, right, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
return this.append(left, right, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
return this.append(left, right, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
return this.append(init == null ? () => this.identity : init, test == null ? () => this.identity : test, update == null ? () => this.identity : update, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFormalParameters(node, { items, rest }) {
|
||||||
|
return this.append(...items, rest == null ? () => this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionBody(node, { directives, statements }) {
|
||||||
|
return this.append(...directives, ...statements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
return this.append(name, params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
return this.append(name == null ? () => this.identity : name, params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
return this.append(name, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
return this.append(test, consequent, alternate == null ? () => this.identity : alternate);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImport(node, { defaultBinding, namedImports }) {
|
||||||
|
return this.append(defaultBinding == null ? () => this.identity : defaultBinding, ...namedImports);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportNamespace(node, { defaultBinding, namespaceBinding }) {
|
||||||
|
return this.append(defaultBinding == null ? () => this.identity : defaultBinding, namespaceBinding);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, { binding }) {
|
||||||
|
return binding();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, { body }) {
|
||||||
|
return body();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
return this.append(name, params, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceModule(node, { directives, items }) {
|
||||||
|
return this.append(...directives, ...items);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return this.append(callee, ..._arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, { properties, rest }) {
|
||||||
|
return this.append(...properties, rest == null ? () => this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectBinding(node, { properties, rest }) {
|
||||||
|
return this.append(...properties, rest == null ? () => this.identity : rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectExpression(node, { properties }) {
|
||||||
|
return this.append(...properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceReturnStatement(node, { expression }) {
|
||||||
|
return expression == null ? this.identity : expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceScript(node, { directives, statements }) {
|
||||||
|
return this.append(...directives, ...statements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
return this.append(name, param, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, { name }) {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadElement(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, { object }) {
|
||||||
|
return object();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, { object }) {
|
||||||
|
return object();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchCase(node, { test, consequent }) {
|
||||||
|
return this.append(test, ...consequent);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, { consequent }) {
|
||||||
|
return this.append(...consequent);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
return this.append(discriminant, ...cases);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
return this.append(discriminant, ...preDefaultCases, defaultCase, ...postDefaultCases);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, { tag, elements }) {
|
||||||
|
return this.append(tag == null ? () => this.identity : tag, ...elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
return this.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThrowStatement(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, { body, catchClause }) {
|
||||||
|
return this.append(body, catchClause);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, { body, catchClause, finalizer }) {
|
||||||
|
return this.append(body, catchClause == null ? () => this.identity : catchClause, finalizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, { operand }) {
|
||||||
|
return operand();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, { operand }) {
|
||||||
|
return operand();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, { declarators }) {
|
||||||
|
return this.append(...declarators);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, { declaration }) {
|
||||||
|
return declaration();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, { binding, init }) {
|
||||||
|
return this.append(binding, init == null ? () => this.identity : init);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWhileStatement(node, { test, body }) {
|
||||||
|
return this.append(test, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWithStatement(node, { object, body }) {
|
||||||
|
return this.append(object, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldExpression(node, { expression }) {
|
||||||
|
return expression == null ? this.identity : expression();
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, { expression }) {
|
||||||
|
return expression();
|
||||||
|
}
|
||||||
|
};
|
416
node_modules/shift-reducer/gen/thunkify-class.js
generated
vendored
Normal file
416
node_modules/shift-reducer/gen/thunkify-class.js
generated
vendored
Normal file
|
@ -0,0 +1,416 @@
|
||||||
|
// Generated by generate-thunkify.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function thunkifyClass(reducerClass) {
|
||||||
|
return class extends reducerClass {
|
||||||
|
reduceArrayAssignmentTarget(node, { elements, rest }) {
|
||||||
|
return super.reduceArrayAssignmentTarget(node, { elements: elements.map(n => n == null ? null : n()), rest: rest == null ? null : rest() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayBinding(node, { elements, rest }) {
|
||||||
|
return super.reduceArrayBinding(node, { elements: elements.map(n => n == null ? null : n()), rest: rest == null ? null : rest() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrayExpression(node, { elements }) {
|
||||||
|
return super.reduceArrayExpression(node, { elements: elements.map(n => n == null ? null : n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
return super.reduceArrowExpression(node, { params: params(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return super.reduceAssignmentExpression(node, { binding: binding(), expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
return super.reduceAssignmentTargetIdentifier(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return super.reduceAssignmentTargetPropertyIdentifier(node, { binding: binding(), init: init == null ? null : init() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, { name, binding }) {
|
||||||
|
return super.reduceAssignmentTargetPropertyProperty(node, { name: name(), binding: binding() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, { binding, init }) {
|
||||||
|
return super.reduceAssignmentTargetWithDefault(node, { binding: binding(), init: init() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
return super.reduceAwaitExpression(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, { left, right }) {
|
||||||
|
return super.reduceBinaryExpression(node, { left: left(), right: right() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
return super.reduceBindingIdentifier(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return super.reduceBindingPropertyIdentifier(node, { binding: binding(), init: init == null ? null : init() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, { name, binding }) {
|
||||||
|
return super.reduceBindingPropertyProperty(node, { name: name(), binding: binding() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, { binding, init }) {
|
||||||
|
return super.reduceBindingWithDefault(node, { binding: binding(), init: init() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlock(node, { statements }) {
|
||||||
|
return super.reduceBlock(node, { statements: statements.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBlockStatement(node, { block }) {
|
||||||
|
return super.reduceBlockStatement(node, { block: block() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
return super.reduceBreakStatement(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCallExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return super.reduceCallExpression(node, { callee: callee(), arguments: _arguments.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
return super.reduceCatchClause(node, { binding: binding == null ? null : binding(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
return super.reduceClassDeclaration(node, { name: name(), super: _super == null ? null : _super(), elements: elements.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassElement(node, { method }) {
|
||||||
|
return super.reduceClassElement(node, { method: method() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
return super.reduceClassExpression(node, { name: name == null ? null : name(), super: _super == null ? null : _super(), elements: elements.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return super.reduceCompoundAssignmentExpression(node, { binding: binding(), expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, { object, expression }) {
|
||||||
|
return super.reduceComputedMemberAssignmentTarget(node, { object: object(), expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, { object, expression }) {
|
||||||
|
return super.reduceComputedMemberExpression(node, { object: object(), expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, { expression }) {
|
||||||
|
return super.reduceComputedPropertyName(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, { test, consequent, alternate }) {
|
||||||
|
return super.reduceConditionalExpression(node, { test: test(), consequent: consequent(), alternate: alternate() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
return super.reduceContinueStatement(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDataProperty(node, { name, expression }) {
|
||||||
|
return super.reduceDataProperty(node, { name: name(), expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
return super.reduceDebuggerStatement(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
return super.reduceDirective(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, { body, test }) {
|
||||||
|
return super.reduceDoWhileStatement(node, { body: body(), test: test() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
return super.reduceEmptyStatement(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExport(node, { declaration }) {
|
||||||
|
return super.reduceExport(node, { declaration: declaration() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
return super.reduceExportAllFrom(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportDefault(node, { body }) {
|
||||||
|
return super.reduceExportDefault(node, { body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFrom(node, { namedExports }) {
|
||||||
|
return super.reduceExportFrom(node, { namedExports: namedExports.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
return super.reduceExportFromSpecifier(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, { name }) {
|
||||||
|
return super.reduceExportLocalSpecifier(node, { name: name() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExportLocals(node, { namedExports }) {
|
||||||
|
return super.reduceExportLocals(node, { namedExports: namedExports.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, { expression }) {
|
||||||
|
return super.reduceExpressionStatement(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
return super.reduceForAwaitStatement(node, { left: left(), right: right(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
return super.reduceForInStatement(node, { left: left(), right: right(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
return super.reduceForOfStatement(node, { left: left(), right: right(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
return super.reduceForStatement(node, { init: init == null ? null : init(), test: test == null ? null : test(), update: update == null ? null : update(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFormalParameters(node, { items, rest }) {
|
||||||
|
return super.reduceFormalParameters(node, { items: items.map(n => n()), rest: rest == null ? null : rest() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionBody(node, { directives, statements }) {
|
||||||
|
return super.reduceFunctionBody(node, { directives: directives.map(n => n()), statements: statements.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
return super.reduceFunctionDeclaration(node, { name: name(), params: params(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
return super.reduceFunctionExpression(node, { name: name == null ? null : name(), params: params(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
return super.reduceGetter(node, { name: name(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
return super.reduceIdentifierExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
return super.reduceIfStatement(node, { test: test(), consequent: consequent(), alternate: alternate == null ? null : alternate() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImport(node, { defaultBinding, namedImports }) {
|
||||||
|
return super.reduceImport(node, { defaultBinding: defaultBinding == null ? null : defaultBinding(), namedImports: namedImports.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportNamespace(node, { defaultBinding, namespaceBinding }) {
|
||||||
|
return super.reduceImportNamespace(node, { defaultBinding: defaultBinding == null ? null : defaultBinding(), namespaceBinding: namespaceBinding() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, { binding }) {
|
||||||
|
return super.reduceImportSpecifier(node, { binding: binding() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, { body }) {
|
||||||
|
return super.reduceLabeledStatement(node, { body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
return super.reduceLiteralBooleanExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
return super.reduceLiteralInfinityExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
return super.reduceLiteralNullExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
return super.reduceLiteralNumericExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
return super.reduceLiteralRegExpExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
return super.reduceLiteralStringExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
return super.reduceMethod(node, { name: name(), params: params(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceModule(node, { directives, items }) {
|
||||||
|
return super.reduceModule(node, { directives: directives.map(n => n()), items: items.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return super.reduceNewExpression(node, { callee: callee(), arguments: _arguments.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return super.reduceNewTargetExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, { properties, rest }) {
|
||||||
|
return super.reduceObjectAssignmentTarget(node, { properties: properties.map(n => n()), rest: rest == null ? null : rest() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectBinding(node, { properties, rest }) {
|
||||||
|
return super.reduceObjectBinding(node, { properties: properties.map(n => n()), rest: rest == null ? null : rest() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceObjectExpression(node, { properties }) {
|
||||||
|
return super.reduceObjectExpression(node, { properties: properties.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceReturnStatement(node, { expression }) {
|
||||||
|
return super.reduceReturnStatement(node, { expression: expression == null ? null : expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceScript(node, { directives, statements }) {
|
||||||
|
return super.reduceScript(node, { directives: directives.map(n => n()), statements: statements.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
return super.reduceSetter(node, { name: name(), param: param(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, { name }) {
|
||||||
|
return super.reduceShorthandProperty(node, { name: name() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadElement(node, { expression }) {
|
||||||
|
return super.reduceSpreadElement(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, { expression }) {
|
||||||
|
return super.reduceSpreadProperty(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, { object }) {
|
||||||
|
return super.reduceStaticMemberAssignmentTarget(node, { object: object() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, { object }) {
|
||||||
|
return super.reduceStaticMemberExpression(node, { object: object() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
return super.reduceStaticPropertyName(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
return super.reduceSuper(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchCase(node, { test, consequent }) {
|
||||||
|
return super.reduceSwitchCase(node, { test: test(), consequent: consequent.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, { consequent }) {
|
||||||
|
return super.reduceSwitchDefault(node, { consequent: consequent.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
return super.reduceSwitchStatement(node, { discriminant: discriminant(), cases: cases.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
return super.reduceSwitchStatementWithDefault(node, { discriminant: discriminant(), preDefaultCases: preDefaultCases.map(n => n()), defaultCase: defaultCase(), postDefaultCases: postDefaultCases.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
return super.reduceTemplateElement(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, { tag, elements }) {
|
||||||
|
return super.reduceTemplateExpression(node, { tag: tag == null ? null : tag(), elements: elements.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
return super.reduceThisExpression(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceThrowStatement(node, { expression }) {
|
||||||
|
return super.reduceThrowStatement(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, { body, catchClause }) {
|
||||||
|
return super.reduceTryCatchStatement(node, { body: body(), catchClause: catchClause() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, { body, catchClause, finalizer }) {
|
||||||
|
return super.reduceTryFinallyStatement(node, { body: body(), catchClause: catchClause == null ? null : catchClause(), finalizer: finalizer() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, { operand }) {
|
||||||
|
return super.reduceUnaryExpression(node, { operand: operand() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, { operand }) {
|
||||||
|
return super.reduceUpdateExpression(node, { operand: operand() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, { declarators }) {
|
||||||
|
return super.reduceVariableDeclaration(node, { declarators: declarators.map(n => n()) });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, { declaration }) {
|
||||||
|
return super.reduceVariableDeclarationStatement(node, { declaration: declaration() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, { binding, init }) {
|
||||||
|
return super.reduceVariableDeclarator(node, { binding: binding(), init: init == null ? null : init() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWhileStatement(node, { test, body }) {
|
||||||
|
return super.reduceWhileStatement(node, { test: test(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceWithStatement(node, { object, body }) {
|
||||||
|
return super.reduceWithStatement(node, { object: object(), body: body() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldExpression(node, { expression }) {
|
||||||
|
return super.reduceYieldExpression(node, { expression: expression == null ? null : expression() });
|
||||||
|
}
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, { expression }) {
|
||||||
|
return super.reduceYieldGeneratorExpression(node, { expression: expression() });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
416
node_modules/shift-reducer/gen/thunkify.js
generated
vendored
Normal file
416
node_modules/shift-reducer/gen/thunkify.js
generated
vendored
Normal file
|
@ -0,0 +1,416 @@
|
||||||
|
// Generated by generate-thunkify.js
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function thunkify(reducer) {
|
||||||
|
return {
|
||||||
|
reduceArrayAssignmentTarget(node, { elements, rest }) {
|
||||||
|
return reducer.reduceArrayAssignmentTarget(node, { elements: elements.map(n => n == null ? null : n()), rest: rest == null ? null : rest() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrayBinding(node, { elements, rest }) {
|
||||||
|
return reducer.reduceArrayBinding(node, { elements: elements.map(n => n == null ? null : n()), rest: rest == null ? null : rest() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrayExpression(node, { elements }) {
|
||||||
|
return reducer.reduceArrayExpression(node, { elements: elements.map(n => n == null ? null : n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceArrowExpression(node, { params, body }) {
|
||||||
|
return reducer.reduceArrowExpression(node, { params: params(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return reducer.reduceAssignmentExpression(node, { binding: binding(), expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetIdentifier(node) {
|
||||||
|
return reducer.reduceAssignmentTargetIdentifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return reducer.reduceAssignmentTargetPropertyIdentifier(node, { binding: binding(), init: init == null ? null : init() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetPropertyProperty(node, { name, binding }) {
|
||||||
|
return reducer.reduceAssignmentTargetPropertyProperty(node, { name: name(), binding: binding() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAssignmentTargetWithDefault(node, { binding, init }) {
|
||||||
|
return reducer.reduceAssignmentTargetWithDefault(node, { binding: binding(), init: init() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceAwaitExpression(node, { expression }) {
|
||||||
|
return reducer.reduceAwaitExpression(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBinaryExpression(node, { left, right }) {
|
||||||
|
return reducer.reduceBinaryExpression(node, { left: left(), right: right() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingIdentifier(node) {
|
||||||
|
return reducer.reduceBindingIdentifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingPropertyIdentifier(node, { binding, init }) {
|
||||||
|
return reducer.reduceBindingPropertyIdentifier(node, { binding: binding(), init: init == null ? null : init() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingPropertyProperty(node, { name, binding }) {
|
||||||
|
return reducer.reduceBindingPropertyProperty(node, { name: name(), binding: binding() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBindingWithDefault(node, { binding, init }) {
|
||||||
|
return reducer.reduceBindingWithDefault(node, { binding: binding(), init: init() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBlock(node, { statements }) {
|
||||||
|
return reducer.reduceBlock(node, { statements: statements.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBlockStatement(node, { block }) {
|
||||||
|
return reducer.reduceBlockStatement(node, { block: block() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceBreakStatement(node) {
|
||||||
|
return reducer.reduceBreakStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCallExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return reducer.reduceCallExpression(node, { callee: callee(), arguments: _arguments.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCatchClause(node, { binding, body }) {
|
||||||
|
return reducer.reduceCatchClause(node, { binding: binding == null ? null : binding(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassDeclaration(node, { name, super: _super, elements }) {
|
||||||
|
return reducer.reduceClassDeclaration(node, { name: name(), super: _super == null ? null : _super(), elements: elements.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassElement(node, { method }) {
|
||||||
|
return reducer.reduceClassElement(node, { method: method() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceClassExpression(node, { name, super: _super, elements }) {
|
||||||
|
return reducer.reduceClassExpression(node, { name: name == null ? null : name(), super: _super == null ? null : _super(), elements: elements.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceCompoundAssignmentExpression(node, { binding, expression }) {
|
||||||
|
return reducer.reduceCompoundAssignmentExpression(node, { binding: binding(), expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedMemberAssignmentTarget(node, { object, expression }) {
|
||||||
|
return reducer.reduceComputedMemberAssignmentTarget(node, { object: object(), expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedMemberExpression(node, { object, expression }) {
|
||||||
|
return reducer.reduceComputedMemberExpression(node, { object: object(), expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceComputedPropertyName(node, { expression }) {
|
||||||
|
return reducer.reduceComputedPropertyName(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceConditionalExpression(node, { test, consequent, alternate }) {
|
||||||
|
return reducer.reduceConditionalExpression(node, { test: test(), consequent: consequent(), alternate: alternate() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceContinueStatement(node) {
|
||||||
|
return reducer.reduceContinueStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDataProperty(node, { name, expression }) {
|
||||||
|
return reducer.reduceDataProperty(node, { name: name(), expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDebuggerStatement(node) {
|
||||||
|
return reducer.reduceDebuggerStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDirective(node) {
|
||||||
|
return reducer.reduceDirective(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceDoWhileStatement(node, { body, test }) {
|
||||||
|
return reducer.reduceDoWhileStatement(node, { body: body(), test: test() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceEmptyStatement(node) {
|
||||||
|
return reducer.reduceEmptyStatement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExport(node, { declaration }) {
|
||||||
|
return reducer.reduceExport(node, { declaration: declaration() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportAllFrom(node) {
|
||||||
|
return reducer.reduceExportAllFrom(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportDefault(node, { body }) {
|
||||||
|
return reducer.reduceExportDefault(node, { body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportFrom(node, { namedExports }) {
|
||||||
|
return reducer.reduceExportFrom(node, { namedExports: namedExports.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportFromSpecifier(node) {
|
||||||
|
return reducer.reduceExportFromSpecifier(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportLocalSpecifier(node, { name }) {
|
||||||
|
return reducer.reduceExportLocalSpecifier(node, { name: name() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExportLocals(node, { namedExports }) {
|
||||||
|
return reducer.reduceExportLocals(node, { namedExports: namedExports.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceExpressionStatement(node, { expression }) {
|
||||||
|
return reducer.reduceExpressionStatement(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForAwaitStatement(node, { left, right, body }) {
|
||||||
|
return reducer.reduceForAwaitStatement(node, { left: left(), right: right(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForInStatement(node, { left, right, body }) {
|
||||||
|
return reducer.reduceForInStatement(node, { left: left(), right: right(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForOfStatement(node, { left, right, body }) {
|
||||||
|
return reducer.reduceForOfStatement(node, { left: left(), right: right(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceForStatement(node, { init, test, update, body }) {
|
||||||
|
return reducer.reduceForStatement(node, { init: init == null ? null : init(), test: test == null ? null : test(), update: update == null ? null : update(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFormalParameters(node, { items, rest }) {
|
||||||
|
return reducer.reduceFormalParameters(node, { items: items.map(n => n()), rest: rest == null ? null : rest() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionBody(node, { directives, statements }) {
|
||||||
|
return reducer.reduceFunctionBody(node, { directives: directives.map(n => n()), statements: statements.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionDeclaration(node, { name, params, body }) {
|
||||||
|
return reducer.reduceFunctionDeclaration(node, { name: name(), params: params(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceFunctionExpression(node, { name, params, body }) {
|
||||||
|
return reducer.reduceFunctionExpression(node, { name: name == null ? null : name(), params: params(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceGetter(node, { name, body }) {
|
||||||
|
return reducer.reduceGetter(node, { name: name(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceIdentifierExpression(node) {
|
||||||
|
return reducer.reduceIdentifierExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceIfStatement(node, { test, consequent, alternate }) {
|
||||||
|
return reducer.reduceIfStatement(node, { test: test(), consequent: consequent(), alternate: alternate == null ? null : alternate() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImport(node, { defaultBinding, namedImports }) {
|
||||||
|
return reducer.reduceImport(node, { defaultBinding: defaultBinding == null ? null : defaultBinding(), namedImports: namedImports.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImportNamespace(node, { defaultBinding, namespaceBinding }) {
|
||||||
|
return reducer.reduceImportNamespace(node, { defaultBinding: defaultBinding == null ? null : defaultBinding(), namespaceBinding: namespaceBinding() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceImportSpecifier(node, { binding }) {
|
||||||
|
return reducer.reduceImportSpecifier(node, { binding: binding() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLabeledStatement(node, { body }) {
|
||||||
|
return reducer.reduceLabeledStatement(node, { body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralBooleanExpression(node) {
|
||||||
|
return reducer.reduceLiteralBooleanExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralInfinityExpression(node) {
|
||||||
|
return reducer.reduceLiteralInfinityExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralNullExpression(node) {
|
||||||
|
return reducer.reduceLiteralNullExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralNumericExpression(node) {
|
||||||
|
return reducer.reduceLiteralNumericExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralRegExpExpression(node) {
|
||||||
|
return reducer.reduceLiteralRegExpExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceLiteralStringExpression(node) {
|
||||||
|
return reducer.reduceLiteralStringExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceMethod(node, { name, params, body }) {
|
||||||
|
return reducer.reduceMethod(node, { name: name(), params: params(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceModule(node, { directives, items }) {
|
||||||
|
return reducer.reduceModule(node, { directives: directives.map(n => n()), items: items.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceNewExpression(node, { callee, arguments: _arguments }) {
|
||||||
|
return reducer.reduceNewExpression(node, { callee: callee(), arguments: _arguments.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceNewTargetExpression(node) {
|
||||||
|
return reducer.reduceNewTargetExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectAssignmentTarget(node, { properties, rest }) {
|
||||||
|
return reducer.reduceObjectAssignmentTarget(node, { properties: properties.map(n => n()), rest: rest == null ? null : rest() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectBinding(node, { properties, rest }) {
|
||||||
|
return reducer.reduceObjectBinding(node, { properties: properties.map(n => n()), rest: rest == null ? null : rest() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceObjectExpression(node, { properties }) {
|
||||||
|
return reducer.reduceObjectExpression(node, { properties: properties.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceReturnStatement(node, { expression }) {
|
||||||
|
return reducer.reduceReturnStatement(node, { expression: expression == null ? null : expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceScript(node, { directives, statements }) {
|
||||||
|
return reducer.reduceScript(node, { directives: directives.map(n => n()), statements: statements.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSetter(node, { name, param, body }) {
|
||||||
|
return reducer.reduceSetter(node, { name: name(), param: param(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceShorthandProperty(node, { name }) {
|
||||||
|
return reducer.reduceShorthandProperty(node, { name: name() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSpreadElement(node, { expression }) {
|
||||||
|
return reducer.reduceSpreadElement(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSpreadProperty(node, { expression }) {
|
||||||
|
return reducer.reduceSpreadProperty(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticMemberAssignmentTarget(node, { object }) {
|
||||||
|
return reducer.reduceStaticMemberAssignmentTarget(node, { object: object() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticMemberExpression(node, { object }) {
|
||||||
|
return reducer.reduceStaticMemberExpression(node, { object: object() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceStaticPropertyName(node) {
|
||||||
|
return reducer.reduceStaticPropertyName(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSuper(node) {
|
||||||
|
return reducer.reduceSuper(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchCase(node, { test, consequent }) {
|
||||||
|
return reducer.reduceSwitchCase(node, { test: test(), consequent: consequent.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchDefault(node, { consequent }) {
|
||||||
|
return reducer.reduceSwitchDefault(node, { consequent: consequent.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchStatement(node, { discriminant, cases }) {
|
||||||
|
return reducer.reduceSwitchStatement(node, { discriminant: discriminant(), cases: cases.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceSwitchStatementWithDefault(node, { discriminant, preDefaultCases, defaultCase, postDefaultCases }) {
|
||||||
|
return reducer.reduceSwitchStatementWithDefault(node, { discriminant: discriminant(), preDefaultCases: preDefaultCases.map(n => n()), defaultCase: defaultCase(), postDefaultCases: postDefaultCases.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTemplateElement(node) {
|
||||||
|
return reducer.reduceTemplateElement(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTemplateExpression(node, { tag, elements }) {
|
||||||
|
return reducer.reduceTemplateExpression(node, { tag: tag == null ? null : tag(), elements: elements.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceThisExpression(node) {
|
||||||
|
return reducer.reduceThisExpression(node);
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceThrowStatement(node, { expression }) {
|
||||||
|
return reducer.reduceThrowStatement(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTryCatchStatement(node, { body, catchClause }) {
|
||||||
|
return reducer.reduceTryCatchStatement(node, { body: body(), catchClause: catchClause() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceTryFinallyStatement(node, { body, catchClause, finalizer }) {
|
||||||
|
return reducer.reduceTryFinallyStatement(node, { body: body(), catchClause: catchClause == null ? null : catchClause(), finalizer: finalizer() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceUnaryExpression(node, { operand }) {
|
||||||
|
return reducer.reduceUnaryExpression(node, { operand: operand() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceUpdateExpression(node, { operand }) {
|
||||||
|
return reducer.reduceUpdateExpression(node, { operand: operand() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclaration(node, { declarators }) {
|
||||||
|
return reducer.reduceVariableDeclaration(node, { declarators: declarators.map(n => n()) });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclarationStatement(node, { declaration }) {
|
||||||
|
return reducer.reduceVariableDeclarationStatement(node, { declaration: declaration() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceVariableDeclarator(node, { binding, init }) {
|
||||||
|
return reducer.reduceVariableDeclarator(node, { binding: binding(), init: init == null ? null : init() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceWhileStatement(node, { test, body }) {
|
||||||
|
return reducer.reduceWhileStatement(node, { test: test(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceWithStatement(node, { object, body }) {
|
||||||
|
return reducer.reduceWithStatement(node, { object: object(), body: body() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceYieldExpression(node, { expression }) {
|
||||||
|
return reducer.reduceYieldExpression(node, { expression: expression == null ? null : expression() });
|
||||||
|
},
|
||||||
|
|
||||||
|
reduceYieldGeneratorExpression(node, { expression }) {
|
||||||
|
return reducer.reduceYieldGeneratorExpression(node, { expression: expression() });
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
51
node_modules/shift-reducer/package.json
generated
vendored
Normal file
51
node_modules/shift-reducer/package.json
generated
vendored
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"name": "shift-reducer",
|
||||||
|
"version": "7.0.0",
|
||||||
|
"description": "reducer for the Shift AST format",
|
||||||
|
"author": "Shape Security",
|
||||||
|
"homepage": "https://github.com/shapesecurity/shift-reducer-js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/shapesecurity/shift-reducer-js.git"
|
||||||
|
},
|
||||||
|
"main": "src/index.js",
|
||||||
|
"files": [
|
||||||
|
"gen",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha --inline-diffs --check-leaks --ui tdd --reporter dot test",
|
||||||
|
"build": "mkdir -p gen && (for i in scripts/build/*; do node $i; done)",
|
||||||
|
"prepare": "rm -rf gen/*.js && npm run build",
|
||||||
|
"lint": "eslint src gen test examples"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"shift-ast": "7.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "5.6.1",
|
||||||
|
"everything.js": "^1.0.3",
|
||||||
|
"mocha": "^8.1.3",
|
||||||
|
"shift-parser": "7.0.0",
|
||||||
|
"shift-spec": "2019.0.0"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"Shift",
|
||||||
|
"AST",
|
||||||
|
"reducer",
|
||||||
|
"reduce",
|
||||||
|
"reducible",
|
||||||
|
"monoidal",
|
||||||
|
"monoid",
|
||||||
|
"fold",
|
||||||
|
"summary",
|
||||||
|
"summarise",
|
||||||
|
"abstract",
|
||||||
|
"syntax",
|
||||||
|
"tree"
|
||||||
|
],
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shapesecurity/shift-reducer-js/issues"
|
||||||
|
},
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
}
|
49
node_modules/shift-reducer/src/index.js
generated
vendored
Normal file
49
node_modules/shift-reducer/src/index.js
generated
vendored
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const reduce = require('../gen/director.js');
|
||||||
|
const thunkedReduce = require('../gen/thunked-director.js');
|
||||||
|
const thunkify = require('../gen/thunkify.js');
|
||||||
|
const thunkifyClass = require('../gen/thunkify-class.js');
|
||||||
|
const memoize = require('../gen/memoize.js');
|
||||||
|
const CloneReducer = require('../gen/clone-reducer.js');
|
||||||
|
const LazyCloneReducer = require('../gen/lazy-clone-reducer.js');
|
||||||
|
const MonoidalReducer = require('../gen/monoidal-reducer.js');
|
||||||
|
const ThunkedMonoidalReducer = require('../gen/thunked-monoidal-reducer.js');
|
||||||
|
const adapt = require('../gen/adapt.js');
|
||||||
|
const { PlusReducer, ThunkedPlusReducer, ConcatReducer, ThunkedConcatReducer, AndReducer, ThunkedAndReducer, OrReducer, ThunkedOrReducer } = require('./reducers.js');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
default: reduce,
|
||||||
|
reduce,
|
||||||
|
thunkedReduce,
|
||||||
|
thunkify,
|
||||||
|
thunkifyClass,
|
||||||
|
memoize,
|
||||||
|
CloneReducer,
|
||||||
|
LazyCloneReducer,
|
||||||
|
MonoidalReducer,
|
||||||
|
ThunkedMonoidalReducer,
|
||||||
|
adapt,
|
||||||
|
PlusReducer,
|
||||||
|
ThunkedPlusReducer,
|
||||||
|
ConcatReducer,
|
||||||
|
ThunkedConcatReducer,
|
||||||
|
AndReducer,
|
||||||
|
ThunkedAndReducer,
|
||||||
|
OrReducer,
|
||||||
|
ThunkedOrReducer,
|
||||||
|
};
|
91
node_modules/shift-reducer/src/reducers.js
generated
vendored
Normal file
91
node_modules/shift-reducer/src/reducers.js
generated
vendored
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const MonoidalReducer = require('../gen/monoidal-reducer.js');
|
||||||
|
const ThunkedMonoidalReducer = require('../gen/thunked-monoidal-reducer.js');
|
||||||
|
|
||||||
|
const PlusMonoid = {
|
||||||
|
empty: () => 0,
|
||||||
|
concat: (a, b) => a + b,
|
||||||
|
};
|
||||||
|
|
||||||
|
const ConcatMonoid = {
|
||||||
|
empty: () => [],
|
||||||
|
concat: (a, b) => a.concat(b),
|
||||||
|
};
|
||||||
|
|
||||||
|
const AndMonoid = {
|
||||||
|
empty: () => true,
|
||||||
|
concat: (a, b) => a && b,
|
||||||
|
concatThunk: (a, b) => a && b(),
|
||||||
|
};
|
||||||
|
|
||||||
|
const OrMonoid = {
|
||||||
|
empty: () => false,
|
||||||
|
concat: (a, b) => a || b,
|
||||||
|
concatThunk: (a, b) => a || b(),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
exports.PlusReducer = class PlusReducer extends MonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(PlusMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ThunkedPlusReducer = class ThunkedPlusReducer extends ThunkedMonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(PlusMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ConcatReducer = class ConcatReducer extends MonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(ConcatMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ThunkedConcatReducer = class ThunkedConcatReducer extends ThunkedMonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(ConcatMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AndReducer = class AndReducer extends MonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(AndMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ThunkedAndReducer = class ThunkedAndReducer extends ThunkedMonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(AndMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.OrReducer = class OrReducer extends MonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(OrMonoid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ThunkedOrReducer = class ThunkedOrReducer extends ThunkedMonoidalReducer {
|
||||||
|
constructor() {
|
||||||
|
super(OrMonoid);
|
||||||
|
}
|
||||||
|
};
|
202
node_modules/shift-regexp-acceptor/LICENSE
generated
vendored
Normal file
202
node_modules/shift-regexp-acceptor/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
58
node_modules/shift-regexp-acceptor/README.md
generated
vendored
Normal file
58
node_modules/shift-regexp-acceptor/README.md
generated
vendored
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
Shift Regexp Acceptor
|
||||||
|
=============
|
||||||
|
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
This module provides a ECMA-262 regular expression [acceptor](https://en.wikipedia.org/wiki/Finite-state_machine#Acceptors_(recognizers)) for validation of regular expression literals for [ECMAScript 2016](https://www.ecma-international.org/ecma-262/9.0/#sec-regexp-regular-expression-objects), [Annex B](https://www.ecma-international.org/ecma-262/9.0/#sec-regular-expressions-patterns).
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
[Stable](http://nodejs.org/api/documentation.html#documentation_stability_index).
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install shift-regexp-acceptor
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
import acceptRegex from 'shift-regexp-acceptor';
|
||||||
|
|
||||||
|
let isAccepted = acceptRegex('[a-z]+' /* source */); // unicode is assumed
|
||||||
|
|
||||||
|
let isAccepted = acceptRegex('[a-z]+' /* source */, { unicode: true }; // unicode mode enabled
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
* Open a Github issue with a description of your desired change. If one exists already, leave a message stating that you are working on it with the date you expect it to be complete.
|
||||||
|
* Fork this repo, and clone the forked repo.
|
||||||
|
* Install dependencies with `npm install`.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Create a feature branch. Make your changes. Add tests.
|
||||||
|
* Build and test in your environment with `npm run build && npm test`.
|
||||||
|
* Make a commit that includes the text "fixes #*XX*" where *XX* is the Github issue.
|
||||||
|
* Open a Pull Request on Github.
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright 2018 Shape Security, Inc.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
40
node_modules/shift-regexp-acceptor/package.json
generated
vendored
Normal file
40
node_modules/shift-regexp-acceptor/package.json
generated
vendored
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"name": "shift-regexp-acceptor",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"description": "Regexp acceptor for ECMAScript 2018",
|
||||||
|
"author": "Shape Security",
|
||||||
|
"homepage": "https://github.com/shapesecurity/shift-regexp-acceptor-js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/shapesecurity/shift-regexp-acceptor-js.git"
|
||||||
|
},
|
||||||
|
"main": "src/index.js",
|
||||||
|
"files": [
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"build": "echo nothing to do",
|
||||||
|
"test": "mocha --inline-diffs --check-leaks --ui tdd --reporter dot test && npm run lint",
|
||||||
|
"lint": "eslint src test"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"unicode-match-property-value-ecmascript": "1.0.2",
|
||||||
|
"unicode-match-property-ecmascript": "1.0.4",
|
||||||
|
"unicode-property-aliases-ecmascript": "1.0.4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "5.6.1",
|
||||||
|
"mocha": "^8.1.3"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"Shift",
|
||||||
|
"regex",
|
||||||
|
"accept",
|
||||||
|
"acceptor",
|
||||||
|
"regular expression"
|
||||||
|
],
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shapesecurity/shift-regexp-acceptor-js/issues"
|
||||||
|
},
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
}
|
754
node_modules/shift-regexp-acceptor/src/index.js
generated
vendored
Normal file
754
node_modules/shift-regexp-acceptor/src/index.js
generated
vendored
Normal file
|
@ -0,0 +1,754 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Shape Security, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable no-use-before-define */
|
||||||
|
|
||||||
|
const matchPropertyValue = require('unicode-match-property-value-ecmascript');
|
||||||
|
|
||||||
|
const matchPropertyValueMappings = require('unicode-match-property-value-ecmascript/data/mappings');
|
||||||
|
|
||||||
|
const matchProperty = require('unicode-match-property-ecmascript');
|
||||||
|
|
||||||
|
const propertyAliases = require('unicode-property-aliases-ecmascript');
|
||||||
|
|
||||||
|
const { idContinueBool, idContinueLargeRegex, idStartBool, idStartLargeRegex } = require('./unicode');
|
||||||
|
|
||||||
|
const catchIsFalse = predicate => {
|
||||||
|
try {
|
||||||
|
return !!predicate();
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const syntaxCharacters = '^$\\.*+?()[]{}|'.split('');
|
||||||
|
const extendedSyntaxCharacters = '^$\\.*+?()[|'.split('');
|
||||||
|
|
||||||
|
const controlEscapeCharacters = 'fnrtv'.split('');
|
||||||
|
const controlEscapeCharacterValues = { 'f': '\f'.charCodeAt(0), 'n': '\n'.charCodeAt(0), 'r': '\r'.charCodeAt(0), 't': '\t'.charCodeAt(0), 'v': '\v'.charCodeAt(0) };
|
||||||
|
|
||||||
|
const controlCharacters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
|
||||||
|
const hexDigits = '0123456789abcdefABCDEF'.split('');
|
||||||
|
const decimalDigits = '0123456789'.split('');
|
||||||
|
const octalDigits = '01234567'.split('');
|
||||||
|
|
||||||
|
const INVALID_NAMED_BACKREFERENCE_SENTINEL = {};
|
||||||
|
|
||||||
|
function isIdentifierStart(ch) {
|
||||||
|
return ch < 128 ? idStartBool[ch] : idStartLargeRegex.test(String.fromCodePoint(ch));
|
||||||
|
}
|
||||||
|
|
||||||
|
function isIdentifierPart(ch) {
|
||||||
|
return ch < 128 ? idContinueBool[ch] : idContinueLargeRegex.test(String.fromCodePoint(ch));
|
||||||
|
}
|
||||||
|
|
||||||
|
class PatternAcceptorState {
|
||||||
|
constructor(pattern, unicode) {
|
||||||
|
this.pattern = pattern;
|
||||||
|
this.unicode = unicode;
|
||||||
|
this.index = 0;
|
||||||
|
this.largestBackreference = 0;
|
||||||
|
this.backreferenceNames = [];
|
||||||
|
this.groupingNames = [];
|
||||||
|
this.capturingGroups = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
empty() {
|
||||||
|
return this.index >= this.pattern.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
backreference(ref) {
|
||||||
|
if (ref > this.largestBackreference) {
|
||||||
|
this.largestBackreference = ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nextCodePoint() {
|
||||||
|
if (this.empty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (this.unicode) {
|
||||||
|
return String.fromCodePoint(this.pattern.codePointAt(this.index));
|
||||||
|
}
|
||||||
|
return this.pattern.charAt(this.index);
|
||||||
|
}
|
||||||
|
|
||||||
|
skipCodePoint() {
|
||||||
|
this.index += this.nextCodePoint().length;
|
||||||
|
}
|
||||||
|
|
||||||
|
eat(str) {
|
||||||
|
if (this.index + str.length > this.pattern.length || this.pattern.slice(this.index, this.index + str.length) !== str) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
this.index += str.length;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
eatIdentifierCodePoint() {
|
||||||
|
let characterValue;
|
||||||
|
let originalIndex = this.index;
|
||||||
|
let character;
|
||||||
|
if (this.match('\\u')) {
|
||||||
|
this.skipCodePoint();
|
||||||
|
characterValue = acceptUnicodeEscape(this);
|
||||||
|
if (!characterValue.matched) {
|
||||||
|
this.index = originalIndex;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
characterValue = characterValue.value;
|
||||||
|
character = String.fromCodePoint(characterValue);
|
||||||
|
} else {
|
||||||
|
character = this.nextCodePoint();
|
||||||
|
if (character == null) {
|
||||||
|
this.index = originalIndex;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
this.index += character.length;
|
||||||
|
characterValue = character.codePointAt(0);
|
||||||
|
}
|
||||||
|
return { character, characterValue };
|
||||||
|
}
|
||||||
|
|
||||||
|
eatIdentifierStart() {
|
||||||
|
let originalIndex = this.index;
|
||||||
|
let codePoint = this.eatIdentifierCodePoint();
|
||||||
|
if (codePoint === null) {
|
||||||
|
this.index = originalIndex;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (codePoint.character === '_' || codePoint.character === '$' || isIdentifierStart(codePoint.characterValue)) {
|
||||||
|
return codePoint.character;
|
||||||
|
}
|
||||||
|
this.index = originalIndex;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
eatIdentifierPart() {
|
||||||
|
let originalIndex = this.index;
|
||||||
|
let codePoint = this.eatIdentifierCodePoint();
|
||||||
|
if (codePoint === null) {
|
||||||
|
this.index = originalIndex;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// ZWNJ / ZWJ
|
||||||
|
if (codePoint.character === '\u200C' || codePoint.character === '\u200D' || codePoint.character === '$' || isIdentifierPart(codePoint.characterValue)) {
|
||||||
|
return codePoint.character;
|
||||||
|
}
|
||||||
|
this.index = originalIndex;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
eatAny(...strs) {
|
||||||
|
for (let str of strs) {
|
||||||
|
if (this.eat(str)) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
match(str) {
|
||||||
|
return this.index + str.length <= this.pattern.length && this.pattern.slice(this.index, this.index + str.length) === str;
|
||||||
|
}
|
||||||
|
|
||||||
|
matchAny(...strs) {
|
||||||
|
for (let str of strs) {
|
||||||
|
if (this.match(str)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
eatNaturalNumber() {
|
||||||
|
let characters = [];
|
||||||
|
let eatNumber = () => {
|
||||||
|
for (let str of decimalDigits) {
|
||||||
|
if (this.eat(str)) {
|
||||||
|
characters.push(str);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
while (eatNumber());
|
||||||
|
return characters.length === 0 ? null : characters.join('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// acceptRegex
|
||||||
|
module.exports = (pattern, { unicode = false } = {}) => {
|
||||||
|
let state = new PatternAcceptorState(pattern, unicode);
|
||||||
|
let accepted = acceptDisjunction(state);
|
||||||
|
if (accepted.matched) {
|
||||||
|
if (state.unicode) {
|
||||||
|
if (state.largestBackreference > state.capturingGroups) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state.groupingNames.length > 0 || state.unicode) {
|
||||||
|
for (let backreferenceName of state.backreferenceNames) {
|
||||||
|
if (state.groupingNames.indexOf(backreferenceName) === -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accepted.matched;
|
||||||
|
};
|
||||||
|
|
||||||
|
const backtrackOnFailure = func => state => {
|
||||||
|
let savedIndex = state.index;
|
||||||
|
let oldBackreference = state.largestBackreference;
|
||||||
|
let oldCapturingGroups = state.capturingGroups;
|
||||||
|
let val = func(state);
|
||||||
|
if (!val.matched) {
|
||||||
|
state.index = savedIndex;
|
||||||
|
state.largestBackreference = oldBackreference;
|
||||||
|
state.capturingGroups = oldCapturingGroups;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptUnicodeEscape = backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('u')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (state.unicode && state.eat('{')) {
|
||||||
|
let digits = [];
|
||||||
|
while (!state.eat('}')) {
|
||||||
|
let digit = state.eatAny(...hexDigits);
|
||||||
|
if (digit === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
digits.push(digit);
|
||||||
|
}
|
||||||
|
let value = parseInt(digits.join(''), 16);
|
||||||
|
return value > 0x10FFFF ? { matched: false } : { matched: true, value };
|
||||||
|
}
|
||||||
|
let digits = [0, 0, 0, 0].map(() => state.eatAny(...hexDigits));
|
||||||
|
if (digits.some(digit => digit === null)) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let value = parseInt(digits.join(''), 16);
|
||||||
|
if (state.unicode && value >= 0xD800 && value <= 0xDBFF) {
|
||||||
|
let surrogatePairValue = backtrackOnFailure(subState => {
|
||||||
|
if (!subState.eat('\\u')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let digits2 = [0, 0, 0, 0].map(() => subState.eatAny(...hexDigits));
|
||||||
|
if (digits2.some(digit => digit === null)) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let value2 = parseInt(digits2.join(''), 16);
|
||||||
|
if (value2 < 0xDC00 || value2 >= 0xE000) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: 0x10000 + ((value & 0x03FF) << 10) + (value2 & 0x03FF) };
|
||||||
|
})(state);
|
||||||
|
if (surrogatePairValue.matched) {
|
||||||
|
return surrogatePairValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { matched: true, value };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptDisjunction = (state, terminator) => {
|
||||||
|
do {
|
||||||
|
if (terminator !== void 0 && state.eat(terminator)) {
|
||||||
|
return { matched: true };
|
||||||
|
} else if (state.match('|')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!acceptAlternative(state, terminator).matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
} while (state.eat('|'));
|
||||||
|
return { matched: terminator === void 0 || !!state.eat(terminator) };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptAlternative = (state, terminator) => {
|
||||||
|
while (!state.match('|') && !state.empty() && (terminator === void 0 || !state.match(terminator))) {
|
||||||
|
if (!acceptTerm(state).matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { matched: true };
|
||||||
|
};
|
||||||
|
|
||||||
|
const anyOf = (...acceptors) => state => {
|
||||||
|
for (let predicate of acceptors) {
|
||||||
|
let value = predicate(state);
|
||||||
|
if (value.matched) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { matched: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptTerm = state => {
|
||||||
|
// non-quantified references are rolled into quantified accepts to improve performance significantly.
|
||||||
|
if (state.unicode) {
|
||||||
|
return anyOf(acceptAssertion, acceptQuantified(acceptAtom))(state);
|
||||||
|
}
|
||||||
|
return anyOf(acceptQuantified(acceptQuantifiableAssertion),
|
||||||
|
acceptAssertion,
|
||||||
|
acceptQuantified(acceptAtom))(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptLabeledGroup = predicate => backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('(')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (predicate(state)) {
|
||||||
|
return acceptDisjunction(state, ')');
|
||||||
|
}
|
||||||
|
return { matched: false };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptQuantifiableAssertion = acceptLabeledGroup(state => !!state.eatAny('?=', '?!'));
|
||||||
|
|
||||||
|
const acceptAssertion = state => {
|
||||||
|
if (state.eatAny('^', '$', '\\b', '\\B')) {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
return acceptLabeledGroup(subState => subState.unicode ? !!subState.eatAny('?=', '?!', '?<=', '?<!') : !!subState.eatAny('?<=', '?<!'))(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptDecimal = state => {
|
||||||
|
return { matched: state.eatNaturalNumber() !== null };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptQuantified = acceptor => backtrackOnFailure(state => {
|
||||||
|
if (!acceptor(state).matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (state.match('{')) {
|
||||||
|
let value = backtrackOnFailure(subState => {
|
||||||
|
subState.eat('{');
|
||||||
|
let num1 = subState.eatNaturalNumber();
|
||||||
|
if (num1 === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (subState.eat(',') && subState.matchAny(...decimalDigits)) {
|
||||||
|
let num2 = subState.eatNaturalNumber();
|
||||||
|
if (num2 === null || parseInt(num1) > parseInt(num2)) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!subState.eat('}')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
subState.eat('?');
|
||||||
|
return { matched: true };
|
||||||
|
})(state);
|
||||||
|
if (!value.matched) {
|
||||||
|
return { matched: !state.unicode };
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
} else if (state.eatAny('*', '+', '?')) {
|
||||||
|
state.eat('?');
|
||||||
|
}
|
||||||
|
return { matched: true };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptCharacterExcept = characters => state => {
|
||||||
|
let nextCodePoint = state.nextCodePoint();
|
||||||
|
if (nextCodePoint === null || characters.indexOf(nextCodePoint) !== -1) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
state.skipCodePoint();
|
||||||
|
return { matched: true };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptPatternCharacter = acceptCharacterExcept(syntaxCharacters);
|
||||||
|
|
||||||
|
const acceptExtendedPatternCharacter = acceptCharacterExcept(extendedSyntaxCharacters);
|
||||||
|
|
||||||
|
const acceptInvalidBracedQuantifier = state => {
|
||||||
|
return backtrackOnFailure(subState => {
|
||||||
|
return { matched: !!(subState.eat('{') && acceptDecimal(subState).matched && (!subState.eat(',') || subState.match('}') || acceptDecimal(subState).matched) && subState.eat('}')) };
|
||||||
|
})(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptAtom = state => {
|
||||||
|
if (state.unicode) {
|
||||||
|
return anyOf(acceptPatternCharacter,
|
||||||
|
subState => ({ matched: !!subState.eat('.') }),
|
||||||
|
backtrackOnFailure(subState => subState.eat('\\') ? acceptAtomEscape(subState) : { matched: false }),
|
||||||
|
acceptCharacterClass,
|
||||||
|
acceptLabeledGroup(subState => subState.eat('?:')),
|
||||||
|
acceptGrouping)(state);
|
||||||
|
}
|
||||||
|
let matched = anyOf(
|
||||||
|
subState => ({ matched: !!subState.eat('.') }),
|
||||||
|
backtrackOnFailure(subState => subState.eat('\\') ? acceptAtomEscape(subState) : { matched: false }),
|
||||||
|
backtrackOnFailure(subState => ({ matched: subState.eat('\\') && subState.match('c') })),
|
||||||
|
acceptCharacterClass,
|
||||||
|
acceptLabeledGroup(subState => subState.eat('?:')),
|
||||||
|
acceptGrouping)(state);
|
||||||
|
if (!matched.matched && acceptInvalidBracedQuantifier(state).matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return matched.matched ? matched : acceptExtendedPatternCharacter(state);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptGrouping = backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('(')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let groupName = backtrackOnFailure(subState => {
|
||||||
|
if (!state.eat('?')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return acceptGroupName(subState);
|
||||||
|
})(state);
|
||||||
|
if (!acceptDisjunction(state, ')').matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (groupName.matched) {
|
||||||
|
if (state.groupingNames.indexOf(groupName.data) !== -1) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
state.groupingNames.push(groupName.data);
|
||||||
|
}
|
||||||
|
state.capturingGroups++;
|
||||||
|
return { matched: true };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptDecimalEscape = backtrackOnFailure(state => {
|
||||||
|
let firstDecimal = state.eatAny(...decimalDigits);
|
||||||
|
if (firstDecimal === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (firstDecimal === '0') {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
// we also accept octal escapes here, but it is impossible to tell if it is a octal escape until all parsing is complete.
|
||||||
|
// octal escapes are handled in acceptCharacterEscape for classes
|
||||||
|
state.backreference(parseInt(firstDecimal + (state.eatNaturalNumber() || '')));
|
||||||
|
return { matched: true };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptCharacterClassEscape = state => {
|
||||||
|
if (state.eatAny('d', 'D', 's', 'S', 'w', 'W')) {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
if (state.unicode) {
|
||||||
|
return backtrackOnFailure(subState => {
|
||||||
|
if (!subState.eat('p{') && !subState.eat('P{')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (!acceptUnicodePropertyValueExpression(subState).matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: !!subState.eat('}') };
|
||||||
|
})(state);
|
||||||
|
}
|
||||||
|
return { matched: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptUnicodePropertyName = state => {
|
||||||
|
let characters = [];
|
||||||
|
let character;
|
||||||
|
while (character = state.eatAny(...controlCharacters, '_')) { // eslint-disable-line no-cond-assign
|
||||||
|
characters.push(character);
|
||||||
|
}
|
||||||
|
return { matched: characters.length > 0, data: characters.join('') };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptUnicodePropertyValue = state => {
|
||||||
|
let characters = [];
|
||||||
|
let character;
|
||||||
|
while (character = state.eatAny(...controlCharacters, ...decimalDigits, '_')) { // eslint-disable-line no-cond-assign
|
||||||
|
characters.push(character);
|
||||||
|
}
|
||||||
|
return { matched: characters.length > 0, data: characters.join('') };
|
||||||
|
};
|
||||||
|
|
||||||
|
// excluding nonbinary properties from mathias' list
|
||||||
|
// https://www.ecma-international.org/ecma-262/9.0/index.html#table-nonbinary-unicode-properties
|
||||||
|
const illegalLoneUnicodePropertyNames = [
|
||||||
|
'General_Category',
|
||||||
|
'Script',
|
||||||
|
'Script_Extensions',
|
||||||
|
'scx',
|
||||||
|
'sc',
|
||||||
|
'gc',
|
||||||
|
];
|
||||||
|
|
||||||
|
const generalCategoryValues = matchPropertyValueMappings.get('General_Category');
|
||||||
|
|
||||||
|
const acceptLoneUnicodePropertyNameOrValue = state => {
|
||||||
|
let loneValue = acceptUnicodePropertyValue(state);
|
||||||
|
if (!loneValue.matched || illegalLoneUnicodePropertyNames.includes(loneValue.data)) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { matched: catchIsFalse(() => matchProperty(loneValue.data)) || generalCategoryValues.get(loneValue.data) != null };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptUnicodePropertyValueExpression = state =>
|
||||||
|
anyOf(backtrackOnFailure(subState => {
|
||||||
|
let name = acceptUnicodePropertyName(subState);
|
||||||
|
if (!name.matched || !subState.eat('=')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let value = acceptUnicodePropertyValue(subState);
|
||||||
|
if (!value.matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: catchIsFalse(() => matchPropertyValue(propertyAliases.get(name.data) || name.data, value.data)) };
|
||||||
|
}),
|
||||||
|
backtrackOnFailure(acceptLoneUnicodePropertyNameOrValue))(state);
|
||||||
|
|
||||||
|
const acceptCharacterEscape = anyOf(
|
||||||
|
state => {
|
||||||
|
let eaten = state.eatAny(...controlEscapeCharacters);
|
||||||
|
if (eaten === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: controlEscapeCharacterValues[eaten] };
|
||||||
|
},
|
||||||
|
backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('c')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let character = state.eatAny(...controlCharacters);
|
||||||
|
if (character === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: character.charCodeAt(0) % 32 };
|
||||||
|
}),
|
||||||
|
backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('0') || state.eatAny(...decimalDigits)) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: 0 };
|
||||||
|
}),
|
||||||
|
backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('x')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let digits = [0, 0].map(() => state.eatAny(...hexDigits));
|
||||||
|
if (digits.some(value => value === null)) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: parseInt(digits.join(''), 16) };
|
||||||
|
}),
|
||||||
|
acceptUnicodeEscape,
|
||||||
|
backtrackOnFailure(state => {
|
||||||
|
if (state.unicode) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let octal1 = state.eatAny(...octalDigits);
|
||||||
|
if (octal1 === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let octal1Value = parseInt(octal1, 8);
|
||||||
|
if (octalDigits.indexOf(state.nextCodePoint()) === -1) {
|
||||||
|
return { matched: true, value: octal1Value };
|
||||||
|
}
|
||||||
|
let octal2 = state.eatAny(...octalDigits);
|
||||||
|
let octal2Value = parseInt(octal2, 8);
|
||||||
|
if (octal1Value < 4) {
|
||||||
|
if (octalDigits.indexOf(state.nextCodePoint()) === -1) {
|
||||||
|
return { matched: true, value: octal1Value << 3 | octal2Value };
|
||||||
|
}
|
||||||
|
let octal3 = state.eatAny(...octalDigits);
|
||||||
|
let octal3Value = parseInt(octal3, 8);
|
||||||
|
return { matched: true, value: octal1Value << 6 | octal2Value << 3 | octal3Value };
|
||||||
|
}
|
||||||
|
return { matched: true, value: octal1Value << 3 | octal2Value };
|
||||||
|
}),
|
||||||
|
backtrackOnFailure(state => {
|
||||||
|
if (!state.unicode) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let value = state.eatAny(...syntaxCharacters);
|
||||||
|
if (value === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: value.charCodeAt(0) };
|
||||||
|
}),
|
||||||
|
state => {
|
||||||
|
if (!state.unicode || !state.eat('/')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: '/'.charCodeAt(0) };
|
||||||
|
},
|
||||||
|
backtrackOnFailure(state => {
|
||||||
|
if (state.unicode) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let next = state.nextCodePoint();
|
||||||
|
if (next !== null && next !== 'c' && next !== 'k') {
|
||||||
|
state.skipCodePoint();
|
||||||
|
return { matched: true, value: next.codePointAt(0) };
|
||||||
|
}
|
||||||
|
return { matched: false };
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
const acceptGroupNameBackreference = backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('k')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let name = acceptGroupName(state);
|
||||||
|
if (!name.matched) {
|
||||||
|
state.backreferenceNames.push(INVALID_NAMED_BACKREFERENCE_SENTINEL);
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
state.backreferenceNames.push(name.data);
|
||||||
|
return { matched: true };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptGroupName = backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('<')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let characters = [];
|
||||||
|
let start = state.eatIdentifierStart();
|
||||||
|
if (!start) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
characters.push(start);
|
||||||
|
let part;
|
||||||
|
while (part = state.eatIdentifierPart()) { // eslint-disable-line no-cond-assign
|
||||||
|
characters.push(part);
|
||||||
|
}
|
||||||
|
if (!state.eat('>')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: characters.length > 0, data: characters.join('') };
|
||||||
|
});
|
||||||
|
|
||||||
|
const acceptAtomEscape = anyOf(
|
||||||
|
acceptDecimalEscape,
|
||||||
|
acceptCharacterClassEscape,
|
||||||
|
acceptCharacterEscape,
|
||||||
|
acceptGroupNameBackreference
|
||||||
|
);
|
||||||
|
|
||||||
|
const acceptCharacterClass = backtrackOnFailure(state => {
|
||||||
|
if (!state.eat('[')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
state.eat('^');
|
||||||
|
|
||||||
|
const acceptClassEscape = anyOf(
|
||||||
|
subState => {
|
||||||
|
return { matched: !!subState.eat('b'), value: 0x0008 };
|
||||||
|
},
|
||||||
|
subState => {
|
||||||
|
return { matched: subState.unicode && !!subState.eat('-'), value: '-'.charCodeAt(0) };
|
||||||
|
},
|
||||||
|
backtrackOnFailure(subState => {
|
||||||
|
if (subState.unicode || !subState.eat('c')) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
let character = subState.eatAny(...decimalDigits, '_');
|
||||||
|
if (character === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
return { matched: true, value: character.charCodeAt(0) % 32 };
|
||||||
|
}),
|
||||||
|
acceptCharacterClassEscape,
|
||||||
|
acceptCharacterEscape,
|
||||||
|
// We special-case `\k` because `acceptCharacterEscape` rejects `\k` unconditionally,
|
||||||
|
// deferring `\k` to acceptGroupNameBackreference, which is not called here.
|
||||||
|
// See also https://github.com/tc39/ecma262/issues/2037. This code takes the route of
|
||||||
|
// making it unconditionally legal, rather than legal only in the absence of a group name.
|
||||||
|
subState => {
|
||||||
|
return { matched: !subState.unicode && !!subState.eat('k'), value: 107 };
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const acceptClassAtomNoDash = localState => {
|
||||||
|
let nextCodePoint = localState.nextCodePoint();
|
||||||
|
if (nextCodePoint === ']' || nextCodePoint === '-' || nextCodePoint === null) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (nextCodePoint !== '\\') {
|
||||||
|
localState.skipCodePoint();
|
||||||
|
return { matched: true, value: nextCodePoint.codePointAt(0) };
|
||||||
|
}
|
||||||
|
localState.eat('\\');
|
||||||
|
let classEscape = acceptClassEscape(localState);
|
||||||
|
if (!classEscape.matched && localState.nextCodePoint() === 'c' && !localState.unicode) {
|
||||||
|
return { matched: true, value: '\\'.charCodeAt(0) };
|
||||||
|
}
|
||||||
|
return classEscape;
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptClassAtom = localState => {
|
||||||
|
if (localState.eat('-')) {
|
||||||
|
return { matched: true, value: '-'.charCodeAt(0) };
|
||||||
|
}
|
||||||
|
return acceptClassAtomNoDash(localState);
|
||||||
|
};
|
||||||
|
|
||||||
|
const finishClassRange = (localState, atom) => {
|
||||||
|
const isUnvaluedPassedAtom = subAtom => {
|
||||||
|
return subAtom.value === void 0 && subAtom.matched;
|
||||||
|
};
|
||||||
|
if (localState.eat('-')) {
|
||||||
|
if (localState.match(']')) {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
let otherAtom = acceptClassAtom(localState);
|
||||||
|
if (!otherAtom.matched) {
|
||||||
|
return { matched: false };
|
||||||
|
}
|
||||||
|
if (localState.unicode && (isUnvaluedPassedAtom(atom) || isUnvaluedPassedAtom(otherAtom))) {
|
||||||
|
return { matched: false };
|
||||||
|
} else if (!(!localState.unicode && (isUnvaluedPassedAtom(atom) || isUnvaluedPassedAtom(otherAtom))) && atom.value > otherAtom.value) {
|
||||||
|
return { matched: false };
|
||||||
|
} else if (localState.match(']')) {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
return acceptNonEmptyClassRanges(localState);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (localState.match(']')) {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
return acceptNonEmptyClassRangesNoDash(localState);
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptNonEmptyClassRanges = localState => {
|
||||||
|
let atom = acceptClassAtom(localState);
|
||||||
|
return atom.matched ? finishClassRange(localState, atom) : { matched: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
const acceptNonEmptyClassRangesNoDash = localState => {
|
||||||
|
let atom = acceptClassAtomNoDash(localState);
|
||||||
|
return atom.matched ? finishClassRange(localState, atom) : { matched: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
if (state.eat(']')) {
|
||||||
|
return { matched: true };
|
||||||
|
}
|
||||||
|
|
||||||
|
let value = acceptNonEmptyClassRanges(state);
|
||||||
|
if (value.matched) {
|
||||||
|
state.eat(']'); // cannot fail, as above will not return matched if it is not seen in advance
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
});
|
10
node_modules/shift-regexp-acceptor/src/unicode.js
generated
vendored
Normal file
10
node_modules/shift-regexp-acceptor/src/unicode.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
20
node_modules/unicode-canonical-property-names-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
20
node_modules/unicode-canonical-property-names-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
36
node_modules/unicode-canonical-property-names-ecmascript/README.md
generated
vendored
Normal file
36
node_modules/unicode-canonical-property-names-ecmascript/README.md
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# unicode-canonical-property-names-ecmascript [![Build status](https://travis-ci.org/mathiasbynens/unicode-canonical-property-names-ecmascript.svg?branch=master)](https://travis-ci.org/mathiasbynens/unicode-canonical-property-names-ecmascript)
|
||||||
|
|
||||||
|
_unicode-canonical-property-names-ecmascript_ exports the set of canonical Unicode property names that are supported in [ECMAScript RegExp property escapes](https://github.com/tc39/proposal-regexp-unicode-property-escapes).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To use _unicode-canonical-property-names-ecmascript_, install it as a dependency via [npm](https://www.npmjs.com/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install unicode-canonical-property-names-ecmascript
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, `require` it:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const properties = require('unicode-canonical-property-names-ecmascript');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```js
|
||||||
|
properties.has('ID_Start');
|
||||||
|
// → true
|
||||||
|
properties.has('IDS');
|
||||||
|
// → false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|
||||||
|
|---|
|
||||||
|
| [Mathias Bynens](https://mathiasbynens.be/) |
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
_unicode-canonical-property-names-ecmascript_ is available under the [MIT](https://mths.be/mit) license.
|
60
node_modules/unicode-canonical-property-names-ecmascript/index.js
generated
vendored
Executable file
60
node_modules/unicode-canonical-property-names-ecmascript/index.js
generated
vendored
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
module.exports = new Set([
|
||||||
|
// Non-binary properties:
|
||||||
|
'General_Category',
|
||||||
|
'Script',
|
||||||
|
'Script_Extensions',
|
||||||
|
// Binary properties:
|
||||||
|
'Alphabetic',
|
||||||
|
'Any',
|
||||||
|
'ASCII',
|
||||||
|
'ASCII_Hex_Digit',
|
||||||
|
'Assigned',
|
||||||
|
'Bidi_Control',
|
||||||
|
'Bidi_Mirrored',
|
||||||
|
'Case_Ignorable',
|
||||||
|
'Cased',
|
||||||
|
'Changes_When_Casefolded',
|
||||||
|
'Changes_When_Casemapped',
|
||||||
|
'Changes_When_Lowercased',
|
||||||
|
'Changes_When_NFKC_Casefolded',
|
||||||
|
'Changes_When_Titlecased',
|
||||||
|
'Changes_When_Uppercased',
|
||||||
|
'Dash',
|
||||||
|
'Default_Ignorable_Code_Point',
|
||||||
|
'Deprecated',
|
||||||
|
'Diacritic',
|
||||||
|
'Emoji',
|
||||||
|
'Emoji_Component',
|
||||||
|
'Emoji_Modifier',
|
||||||
|
'Emoji_Modifier_Base',
|
||||||
|
'Emoji_Presentation',
|
||||||
|
'Extended_Pictographic',
|
||||||
|
'Extender',
|
||||||
|
'Grapheme_Base',
|
||||||
|
'Grapheme_Extend',
|
||||||
|
'Hex_Digit',
|
||||||
|
'ID_Continue',
|
||||||
|
'ID_Start',
|
||||||
|
'Ideographic',
|
||||||
|
'IDS_Binary_Operator',
|
||||||
|
'IDS_Trinary_Operator',
|
||||||
|
'Join_Control',
|
||||||
|
'Logical_Order_Exception',
|
||||||
|
'Lowercase',
|
||||||
|
'Math',
|
||||||
|
'Noncharacter_Code_Point',
|
||||||
|
'Pattern_Syntax',
|
||||||
|
'Pattern_White_Space',
|
||||||
|
'Quotation_Mark',
|
||||||
|
'Radical',
|
||||||
|
'Regional_Indicator',
|
||||||
|
'Sentence_Terminal',
|
||||||
|
'Soft_Dotted',
|
||||||
|
'Terminal_Punctuation',
|
||||||
|
'Unified_Ideograph',
|
||||||
|
'Uppercase',
|
||||||
|
'Variation_Selector',
|
||||||
|
'White_Space',
|
||||||
|
'XID_Continue',
|
||||||
|
'XID_Start'
|
||||||
|
]);
|
34
node_modules/unicode-canonical-property-names-ecmascript/package.json
generated
vendored
Normal file
34
node_modules/unicode-canonical-property-names-ecmascript/package.json
generated
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"name": "unicode-canonical-property-names-ecmascript",
|
||||||
|
"version": "1.0.4",
|
||||||
|
"description": "The set of canonical Unicode property names supported in ECMAScript RegExp property escapes.",
|
||||||
|
"homepage": "https://github.com/mathiasbynens/unicode-canonical-property-names-ecmascript",
|
||||||
|
"main": "index.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE-MIT.txt",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"unicode",
|
||||||
|
"unicode properties"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"author": {
|
||||||
|
"name": "Mathias Bynens",
|
||||||
|
"url": "https://mathiasbynens.be/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mathiasbynens/unicode-canonical-property-names-ecmascript.git"
|
||||||
|
},
|
||||||
|
"bugs": "https://github.com/mathiasbynens/unicode-canonical-property-names-ecmascript/issues",
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "ava ./tests"
|
||||||
|
}
|
||||||
|
}
|
20
node_modules/unicode-match-property-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
20
node_modules/unicode-match-property-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
47
node_modules/unicode-match-property-ecmascript/README.md
generated
vendored
Normal file
47
node_modules/unicode-match-property-ecmascript/README.md
generated
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# unicode-match-property-ecmascript [![Build status](https://travis-ci.org/mathiasbynens/unicode-match-property-ecmascript.svg?branch=master)](https://travis-ci.org/mathiasbynens/unicode-match-property-ecmascript)
|
||||||
|
|
||||||
|
_unicode-match-property-ecmascript_ matches a given Unicode property or [property alias](https://github.com/mathiasbynens/unicode-property-aliases-ecmascript) to its canonical property name without applying [loose matching](https://github.com/mathiasbynens/unicode-loose-match) per the algorithm used for [RegExp Unicode property escapes in ECMAScript](https://github.com/tc39/proposal-regexp-unicode-property-escapes). Consider it a strict alternative to loose matching.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To use _unicode-match-property-ecmascript_ programmatically, install it as a dependency via [npm](https://www.npmjs.com/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install unicode-match-property-ecmascript
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, `require` it:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const matchProperty = require('unicode-match-property-ecmascript');
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
This module exports a single function named `matchProperty`.
|
||||||
|
|
||||||
|
### `matchProperty(value)`
|
||||||
|
|
||||||
|
This function takes a string `value` and attempts to match it to a canonical Unicode property name. If there’s a match, it returns the canonical property name. Otherwise, it throws an exception.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Find the canonical property name:
|
||||||
|
matchProperty('sc')
|
||||||
|
// → 'Script'
|
||||||
|
|
||||||
|
matchProperty('Script')
|
||||||
|
// → 'Script'
|
||||||
|
|
||||||
|
matchProperty('script') // Note: incorrect casing.
|
||||||
|
// → throws
|
||||||
|
```
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|
||||||
|
|---|
|
||||||
|
| [Mathias Bynens](https://mathiasbynens.be/) |
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
_unicode-match-property-ecmascript_ is available under the [MIT](https://mths.be/mit) license.
|
16
node_modules/unicode-match-property-ecmascript/index.js
generated
vendored
Executable file
16
node_modules/unicode-match-property-ecmascript/index.js
generated
vendored
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const canonicalProperties = require('unicode-canonical-property-names-ecmascript');
|
||||||
|
const propertyAliases = require('unicode-property-aliases-ecmascript');
|
||||||
|
|
||||||
|
const matchProperty = function(property) {
|
||||||
|
if (canonicalProperties.has(property)) {
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
if (propertyAliases.has(property)) {
|
||||||
|
return propertyAliases.get(property);
|
||||||
|
}
|
||||||
|
throw new Error(`Unknown property: ${ property }`);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = matchProperty;
|
39
node_modules/unicode-match-property-ecmascript/package.json
generated
vendored
Normal file
39
node_modules/unicode-match-property-ecmascript/package.json
generated
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"name": "unicode-match-property-ecmascript",
|
||||||
|
"version": "1.0.4",
|
||||||
|
"description": "Match a Unicode property or property alias to its canonical property name per the algorithm used for RegExp Unicode property escapes in ECMAScript.",
|
||||||
|
"homepage": "https://github.com/mathiasbynens/unicode-match-property-ecmascript",
|
||||||
|
"main": "index.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE-MIT.txt",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"unicode",
|
||||||
|
"unicode properties",
|
||||||
|
"unicode property aliases"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"author": {
|
||||||
|
"name": "Mathias Bynens",
|
||||||
|
"url": "https://mathiasbynens.be/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mathiasbynens/unicode-match-property-ecmascript.git"
|
||||||
|
},
|
||||||
|
"bugs": "https://github.com/mathiasbynens/unicode-match-property-ecmascript/issues",
|
||||||
|
"dependencies": {
|
||||||
|
"unicode-canonical-property-names-ecmascript": "^1.0.4",
|
||||||
|
"unicode-property-aliases-ecmascript": "^1.0.4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "ava ./tests"
|
||||||
|
}
|
||||||
|
}
|
20
node_modules/unicode-match-property-value-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
20
node_modules/unicode-match-property-value-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
50
node_modules/unicode-match-property-value-ecmascript/README.md
generated
vendored
Normal file
50
node_modules/unicode-match-property-value-ecmascript/README.md
generated
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# unicode-match-property-value-ecmascript [![Build status](https://travis-ci.org/mathiasbynens/unicode-match-property-value-ecmascript.svg?branch=master)](https://travis-ci.org/mathiasbynens/unicode-match-property-value-ecmascript)
|
||||||
|
|
||||||
|
_unicode-match-property-value-ecmascript_ matches a given Unicode property value or [property value alias](https://github.com/mathiasbynens/unicode-property-value-aliases) to its canonical property value without applying [loose matching](https://github.com/mathiasbynens/unicode-loose-match), per the algorithm used for [RegExp Unicode property escapes in ECMAScript](https://github.com/tc39/proposal-regexp-unicode-property-escapes). Consider it a strict alternative to loose matching.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To use _unicode-match-property-value-ecmascript_ programmatically, install it as a dependency via [npm](https://www.npmjs.com/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install unicode-match-property-value-ecmascript
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, `require` it:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const matchPropertyValue = require('unicode-match-property-value-ecmascript');
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
This module exports a single function named `matchPropertyValue`.
|
||||||
|
|
||||||
|
### `matchPropertyValue(property, value)`
|
||||||
|
|
||||||
|
This function takes a string `property` that is a canonical/unaliased Unicode property name, and a string `value`. It attemps to match `value` to a canonical Unicode property value for the given property. If there’s a match, it returns the canonical property value. Otherwise, it throws an exception.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Find the canonical property value:
|
||||||
|
matchPropertyValue('Script_Extensions', 'Aghb')
|
||||||
|
// → 'Caucasian_Albanian'
|
||||||
|
|
||||||
|
matchPropertyValue('Script_Extensions', 'Caucasian_Albanian')
|
||||||
|
// → 'Caucasian_Albanian'
|
||||||
|
|
||||||
|
matchPropertyValue('script_extensions', 'Caucasian_Albanian') // Note: incorrect casing.
|
||||||
|
// → throws
|
||||||
|
|
||||||
|
matchPropertyValue('Script_Extensions', 'caucasian_albanian') // Note: incorrect casing.
|
||||||
|
// → throws
|
||||||
|
```
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|
||||||
|
|---|
|
||||||
|
| [Mathias Bynens](https://mathiasbynens.be/) |
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
_unicode-match-property-value-ecmascript_ is available under the [MIT](https://mths.be/mit) license.
|
680
node_modules/unicode-match-property-value-ecmascript/data/mappings.js
generated
vendored
Normal file
680
node_modules/unicode-match-property-value-ecmascript/data/mappings.js
generated
vendored
Normal file
|
@ -0,0 +1,680 @@
|
||||||
|
module.exports = new Map([
|
||||||
|
['General_Category', new Map([
|
||||||
|
['C', 'Other'],
|
||||||
|
['Cc', 'Control'],
|
||||||
|
['cntrl', 'Control'],
|
||||||
|
['Cf', 'Format'],
|
||||||
|
['Cn', 'Unassigned'],
|
||||||
|
['Co', 'Private_Use'],
|
||||||
|
['Cs', 'Surrogate'],
|
||||||
|
['L', 'Letter'],
|
||||||
|
['LC', 'Cased_Letter'],
|
||||||
|
['Ll', 'Lowercase_Letter'],
|
||||||
|
['Lm', 'Modifier_Letter'],
|
||||||
|
['Lo', 'Other_Letter'],
|
||||||
|
['Lt', 'Titlecase_Letter'],
|
||||||
|
['Lu', 'Uppercase_Letter'],
|
||||||
|
['M', 'Mark'],
|
||||||
|
['Combining_Mark', 'Mark'],
|
||||||
|
['Mc', 'Spacing_Mark'],
|
||||||
|
['Me', 'Enclosing_Mark'],
|
||||||
|
['Mn', 'Nonspacing_Mark'],
|
||||||
|
['N', 'Number'],
|
||||||
|
['Nd', 'Decimal_Number'],
|
||||||
|
['digit', 'Decimal_Number'],
|
||||||
|
['Nl', 'Letter_Number'],
|
||||||
|
['No', 'Other_Number'],
|
||||||
|
['P', 'Punctuation'],
|
||||||
|
['punct', 'Punctuation'],
|
||||||
|
['Pc', 'Connector_Punctuation'],
|
||||||
|
['Pd', 'Dash_Punctuation'],
|
||||||
|
['Pe', 'Close_Punctuation'],
|
||||||
|
['Pf', 'Final_Punctuation'],
|
||||||
|
['Pi', 'Initial_Punctuation'],
|
||||||
|
['Po', 'Other_Punctuation'],
|
||||||
|
['Ps', 'Open_Punctuation'],
|
||||||
|
['S', 'Symbol'],
|
||||||
|
['Sc', 'Currency_Symbol'],
|
||||||
|
['Sk', 'Modifier_Symbol'],
|
||||||
|
['Sm', 'Math_Symbol'],
|
||||||
|
['So', 'Other_Symbol'],
|
||||||
|
['Z', 'Separator'],
|
||||||
|
['Zl', 'Line_Separator'],
|
||||||
|
['Zp', 'Paragraph_Separator'],
|
||||||
|
['Zs', 'Space_Separator'],
|
||||||
|
['Other', 'Other'],
|
||||||
|
['Control', 'Control'],
|
||||||
|
['Format', 'Format'],
|
||||||
|
['Unassigned', 'Unassigned'],
|
||||||
|
['Private_Use', 'Private_Use'],
|
||||||
|
['Surrogate', 'Surrogate'],
|
||||||
|
['Letter', 'Letter'],
|
||||||
|
['Cased_Letter', 'Cased_Letter'],
|
||||||
|
['Lowercase_Letter', 'Lowercase_Letter'],
|
||||||
|
['Modifier_Letter', 'Modifier_Letter'],
|
||||||
|
['Other_Letter', 'Other_Letter'],
|
||||||
|
['Titlecase_Letter', 'Titlecase_Letter'],
|
||||||
|
['Uppercase_Letter', 'Uppercase_Letter'],
|
||||||
|
['Mark', 'Mark'],
|
||||||
|
['Spacing_Mark', 'Spacing_Mark'],
|
||||||
|
['Enclosing_Mark', 'Enclosing_Mark'],
|
||||||
|
['Nonspacing_Mark', 'Nonspacing_Mark'],
|
||||||
|
['Number', 'Number'],
|
||||||
|
['Decimal_Number', 'Decimal_Number'],
|
||||||
|
['Letter_Number', 'Letter_Number'],
|
||||||
|
['Other_Number', 'Other_Number'],
|
||||||
|
['Punctuation', 'Punctuation'],
|
||||||
|
['Connector_Punctuation', 'Connector_Punctuation'],
|
||||||
|
['Dash_Punctuation', 'Dash_Punctuation'],
|
||||||
|
['Close_Punctuation', 'Close_Punctuation'],
|
||||||
|
['Final_Punctuation', 'Final_Punctuation'],
|
||||||
|
['Initial_Punctuation', 'Initial_Punctuation'],
|
||||||
|
['Other_Punctuation', 'Other_Punctuation'],
|
||||||
|
['Open_Punctuation', 'Open_Punctuation'],
|
||||||
|
['Symbol', 'Symbol'],
|
||||||
|
['Currency_Symbol', 'Currency_Symbol'],
|
||||||
|
['Modifier_Symbol', 'Modifier_Symbol'],
|
||||||
|
['Math_Symbol', 'Math_Symbol'],
|
||||||
|
['Other_Symbol', 'Other_Symbol'],
|
||||||
|
['Separator', 'Separator'],
|
||||||
|
['Line_Separator', 'Line_Separator'],
|
||||||
|
['Paragraph_Separator', 'Paragraph_Separator'],
|
||||||
|
['Space_Separator', 'Space_Separator']
|
||||||
|
])],
|
||||||
|
['Script', new Map([
|
||||||
|
['Adlm', 'Adlam'],
|
||||||
|
['Aghb', 'Caucasian_Albanian'],
|
||||||
|
['Ahom', 'Ahom'],
|
||||||
|
['Arab', 'Arabic'],
|
||||||
|
['Armi', 'Imperial_Aramaic'],
|
||||||
|
['Armn', 'Armenian'],
|
||||||
|
['Avst', 'Avestan'],
|
||||||
|
['Bali', 'Balinese'],
|
||||||
|
['Bamu', 'Bamum'],
|
||||||
|
['Bass', 'Bassa_Vah'],
|
||||||
|
['Batk', 'Batak'],
|
||||||
|
['Beng', 'Bengali'],
|
||||||
|
['Bhks', 'Bhaiksuki'],
|
||||||
|
['Bopo', 'Bopomofo'],
|
||||||
|
['Brah', 'Brahmi'],
|
||||||
|
['Brai', 'Braille'],
|
||||||
|
['Bugi', 'Buginese'],
|
||||||
|
['Buhd', 'Buhid'],
|
||||||
|
['Cakm', 'Chakma'],
|
||||||
|
['Cans', 'Canadian_Aboriginal'],
|
||||||
|
['Cari', 'Carian'],
|
||||||
|
['Cham', 'Cham'],
|
||||||
|
['Cher', 'Cherokee'],
|
||||||
|
['Copt', 'Coptic'],
|
||||||
|
['Qaac', 'Coptic'],
|
||||||
|
['Cprt', 'Cypriot'],
|
||||||
|
['Cyrl', 'Cyrillic'],
|
||||||
|
['Deva', 'Devanagari'],
|
||||||
|
['Dogr', 'Dogra'],
|
||||||
|
['Dsrt', 'Deseret'],
|
||||||
|
['Dupl', 'Duployan'],
|
||||||
|
['Egyp', 'Egyptian_Hieroglyphs'],
|
||||||
|
['Elba', 'Elbasan'],
|
||||||
|
['Ethi', 'Ethiopic'],
|
||||||
|
['Geor', 'Georgian'],
|
||||||
|
['Glag', 'Glagolitic'],
|
||||||
|
['Gong', 'Gunjala_Gondi'],
|
||||||
|
['Gonm', 'Masaram_Gondi'],
|
||||||
|
['Goth', 'Gothic'],
|
||||||
|
['Gran', 'Grantha'],
|
||||||
|
['Grek', 'Greek'],
|
||||||
|
['Gujr', 'Gujarati'],
|
||||||
|
['Guru', 'Gurmukhi'],
|
||||||
|
['Hang', 'Hangul'],
|
||||||
|
['Hani', 'Han'],
|
||||||
|
['Hano', 'Hanunoo'],
|
||||||
|
['Hatr', 'Hatran'],
|
||||||
|
['Hebr', 'Hebrew'],
|
||||||
|
['Hira', 'Hiragana'],
|
||||||
|
['Hluw', 'Anatolian_Hieroglyphs'],
|
||||||
|
['Hmng', 'Pahawh_Hmong'],
|
||||||
|
['Hrkt', 'Katakana_Or_Hiragana'],
|
||||||
|
['Hung', 'Old_Hungarian'],
|
||||||
|
['Ital', 'Old_Italic'],
|
||||||
|
['Java', 'Javanese'],
|
||||||
|
['Kali', 'Kayah_Li'],
|
||||||
|
['Kana', 'Katakana'],
|
||||||
|
['Khar', 'Kharoshthi'],
|
||||||
|
['Khmr', 'Khmer'],
|
||||||
|
['Khoj', 'Khojki'],
|
||||||
|
['Knda', 'Kannada'],
|
||||||
|
['Kthi', 'Kaithi'],
|
||||||
|
['Lana', 'Tai_Tham'],
|
||||||
|
['Laoo', 'Lao'],
|
||||||
|
['Latn', 'Latin'],
|
||||||
|
['Lepc', 'Lepcha'],
|
||||||
|
['Limb', 'Limbu'],
|
||||||
|
['Lina', 'Linear_A'],
|
||||||
|
['Linb', 'Linear_B'],
|
||||||
|
['Lisu', 'Lisu'],
|
||||||
|
['Lyci', 'Lycian'],
|
||||||
|
['Lydi', 'Lydian'],
|
||||||
|
['Mahj', 'Mahajani'],
|
||||||
|
['Maka', 'Makasar'],
|
||||||
|
['Mand', 'Mandaic'],
|
||||||
|
['Mani', 'Manichaean'],
|
||||||
|
['Marc', 'Marchen'],
|
||||||
|
['Medf', 'Medefaidrin'],
|
||||||
|
['Mend', 'Mende_Kikakui'],
|
||||||
|
['Merc', 'Meroitic_Cursive'],
|
||||||
|
['Mero', 'Meroitic_Hieroglyphs'],
|
||||||
|
['Mlym', 'Malayalam'],
|
||||||
|
['Modi', 'Modi'],
|
||||||
|
['Mong', 'Mongolian'],
|
||||||
|
['Mroo', 'Mro'],
|
||||||
|
['Mtei', 'Meetei_Mayek'],
|
||||||
|
['Mult', 'Multani'],
|
||||||
|
['Mymr', 'Myanmar'],
|
||||||
|
['Narb', 'Old_North_Arabian'],
|
||||||
|
['Nbat', 'Nabataean'],
|
||||||
|
['Newa', 'Newa'],
|
||||||
|
['Nkoo', 'Nko'],
|
||||||
|
['Nshu', 'Nushu'],
|
||||||
|
['Ogam', 'Ogham'],
|
||||||
|
['Olck', 'Ol_Chiki'],
|
||||||
|
['Orkh', 'Old_Turkic'],
|
||||||
|
['Orya', 'Oriya'],
|
||||||
|
['Osge', 'Osage'],
|
||||||
|
['Osma', 'Osmanya'],
|
||||||
|
['Palm', 'Palmyrene'],
|
||||||
|
['Pauc', 'Pau_Cin_Hau'],
|
||||||
|
['Perm', 'Old_Permic'],
|
||||||
|
['Phag', 'Phags_Pa'],
|
||||||
|
['Phli', 'Inscriptional_Pahlavi'],
|
||||||
|
['Phlp', 'Psalter_Pahlavi'],
|
||||||
|
['Phnx', 'Phoenician'],
|
||||||
|
['Plrd', 'Miao'],
|
||||||
|
['Prti', 'Inscriptional_Parthian'],
|
||||||
|
['Rjng', 'Rejang'],
|
||||||
|
['Rohg', 'Hanifi_Rohingya'],
|
||||||
|
['Runr', 'Runic'],
|
||||||
|
['Samr', 'Samaritan'],
|
||||||
|
['Sarb', 'Old_South_Arabian'],
|
||||||
|
['Saur', 'Saurashtra'],
|
||||||
|
['Sgnw', 'SignWriting'],
|
||||||
|
['Shaw', 'Shavian'],
|
||||||
|
['Shrd', 'Sharada'],
|
||||||
|
['Sidd', 'Siddham'],
|
||||||
|
['Sind', 'Khudawadi'],
|
||||||
|
['Sinh', 'Sinhala'],
|
||||||
|
['Sogd', 'Sogdian'],
|
||||||
|
['Sogo', 'Old_Sogdian'],
|
||||||
|
['Sora', 'Sora_Sompeng'],
|
||||||
|
['Soyo', 'Soyombo'],
|
||||||
|
['Sund', 'Sundanese'],
|
||||||
|
['Sylo', 'Syloti_Nagri'],
|
||||||
|
['Syrc', 'Syriac'],
|
||||||
|
['Tagb', 'Tagbanwa'],
|
||||||
|
['Takr', 'Takri'],
|
||||||
|
['Tale', 'Tai_Le'],
|
||||||
|
['Talu', 'New_Tai_Lue'],
|
||||||
|
['Taml', 'Tamil'],
|
||||||
|
['Tang', 'Tangut'],
|
||||||
|
['Tavt', 'Tai_Viet'],
|
||||||
|
['Telu', 'Telugu'],
|
||||||
|
['Tfng', 'Tifinagh'],
|
||||||
|
['Tglg', 'Tagalog'],
|
||||||
|
['Thaa', 'Thaana'],
|
||||||
|
['Thai', 'Thai'],
|
||||||
|
['Tibt', 'Tibetan'],
|
||||||
|
['Tirh', 'Tirhuta'],
|
||||||
|
['Ugar', 'Ugaritic'],
|
||||||
|
['Vaii', 'Vai'],
|
||||||
|
['Wara', 'Warang_Citi'],
|
||||||
|
['Xpeo', 'Old_Persian'],
|
||||||
|
['Xsux', 'Cuneiform'],
|
||||||
|
['Yiii', 'Yi'],
|
||||||
|
['Zanb', 'Zanabazar_Square'],
|
||||||
|
['Zinh', 'Inherited'],
|
||||||
|
['Qaai', 'Inherited'],
|
||||||
|
['Zyyy', 'Common'],
|
||||||
|
['Zzzz', 'Unknown'],
|
||||||
|
['Adlam', 'Adlam'],
|
||||||
|
['Caucasian_Albanian', 'Caucasian_Albanian'],
|
||||||
|
['Arabic', 'Arabic'],
|
||||||
|
['Imperial_Aramaic', 'Imperial_Aramaic'],
|
||||||
|
['Armenian', 'Armenian'],
|
||||||
|
['Avestan', 'Avestan'],
|
||||||
|
['Balinese', 'Balinese'],
|
||||||
|
['Bamum', 'Bamum'],
|
||||||
|
['Bassa_Vah', 'Bassa_Vah'],
|
||||||
|
['Batak', 'Batak'],
|
||||||
|
['Bengali', 'Bengali'],
|
||||||
|
['Bhaiksuki', 'Bhaiksuki'],
|
||||||
|
['Bopomofo', 'Bopomofo'],
|
||||||
|
['Brahmi', 'Brahmi'],
|
||||||
|
['Braille', 'Braille'],
|
||||||
|
['Buginese', 'Buginese'],
|
||||||
|
['Buhid', 'Buhid'],
|
||||||
|
['Chakma', 'Chakma'],
|
||||||
|
['Canadian_Aboriginal', 'Canadian_Aboriginal'],
|
||||||
|
['Carian', 'Carian'],
|
||||||
|
['Cherokee', 'Cherokee'],
|
||||||
|
['Coptic', 'Coptic'],
|
||||||
|
['Cypriot', 'Cypriot'],
|
||||||
|
['Cyrillic', 'Cyrillic'],
|
||||||
|
['Devanagari', 'Devanagari'],
|
||||||
|
['Dogra', 'Dogra'],
|
||||||
|
['Deseret', 'Deseret'],
|
||||||
|
['Duployan', 'Duployan'],
|
||||||
|
['Egyptian_Hieroglyphs', 'Egyptian_Hieroglyphs'],
|
||||||
|
['Elbasan', 'Elbasan'],
|
||||||
|
['Ethiopic', 'Ethiopic'],
|
||||||
|
['Georgian', 'Georgian'],
|
||||||
|
['Glagolitic', 'Glagolitic'],
|
||||||
|
['Gunjala_Gondi', 'Gunjala_Gondi'],
|
||||||
|
['Masaram_Gondi', 'Masaram_Gondi'],
|
||||||
|
['Gothic', 'Gothic'],
|
||||||
|
['Grantha', 'Grantha'],
|
||||||
|
['Greek', 'Greek'],
|
||||||
|
['Gujarati', 'Gujarati'],
|
||||||
|
['Gurmukhi', 'Gurmukhi'],
|
||||||
|
['Hangul', 'Hangul'],
|
||||||
|
['Han', 'Han'],
|
||||||
|
['Hanunoo', 'Hanunoo'],
|
||||||
|
['Hatran', 'Hatran'],
|
||||||
|
['Hebrew', 'Hebrew'],
|
||||||
|
['Hiragana', 'Hiragana'],
|
||||||
|
['Anatolian_Hieroglyphs', 'Anatolian_Hieroglyphs'],
|
||||||
|
['Pahawh_Hmong', 'Pahawh_Hmong'],
|
||||||
|
['Katakana_Or_Hiragana', 'Katakana_Or_Hiragana'],
|
||||||
|
['Old_Hungarian', 'Old_Hungarian'],
|
||||||
|
['Old_Italic', 'Old_Italic'],
|
||||||
|
['Javanese', 'Javanese'],
|
||||||
|
['Kayah_Li', 'Kayah_Li'],
|
||||||
|
['Katakana', 'Katakana'],
|
||||||
|
['Kharoshthi', 'Kharoshthi'],
|
||||||
|
['Khmer', 'Khmer'],
|
||||||
|
['Khojki', 'Khojki'],
|
||||||
|
['Kannada', 'Kannada'],
|
||||||
|
['Kaithi', 'Kaithi'],
|
||||||
|
['Tai_Tham', 'Tai_Tham'],
|
||||||
|
['Lao', 'Lao'],
|
||||||
|
['Latin', 'Latin'],
|
||||||
|
['Lepcha', 'Lepcha'],
|
||||||
|
['Limbu', 'Limbu'],
|
||||||
|
['Linear_A', 'Linear_A'],
|
||||||
|
['Linear_B', 'Linear_B'],
|
||||||
|
['Lycian', 'Lycian'],
|
||||||
|
['Lydian', 'Lydian'],
|
||||||
|
['Mahajani', 'Mahajani'],
|
||||||
|
['Makasar', 'Makasar'],
|
||||||
|
['Mandaic', 'Mandaic'],
|
||||||
|
['Manichaean', 'Manichaean'],
|
||||||
|
['Marchen', 'Marchen'],
|
||||||
|
['Medefaidrin', 'Medefaidrin'],
|
||||||
|
['Mende_Kikakui', 'Mende_Kikakui'],
|
||||||
|
['Meroitic_Cursive', 'Meroitic_Cursive'],
|
||||||
|
['Meroitic_Hieroglyphs', 'Meroitic_Hieroglyphs'],
|
||||||
|
['Malayalam', 'Malayalam'],
|
||||||
|
['Mongolian', 'Mongolian'],
|
||||||
|
['Mro', 'Mro'],
|
||||||
|
['Meetei_Mayek', 'Meetei_Mayek'],
|
||||||
|
['Multani', 'Multani'],
|
||||||
|
['Myanmar', 'Myanmar'],
|
||||||
|
['Old_North_Arabian', 'Old_North_Arabian'],
|
||||||
|
['Nabataean', 'Nabataean'],
|
||||||
|
['Nko', 'Nko'],
|
||||||
|
['Nushu', 'Nushu'],
|
||||||
|
['Ogham', 'Ogham'],
|
||||||
|
['Ol_Chiki', 'Ol_Chiki'],
|
||||||
|
['Old_Turkic', 'Old_Turkic'],
|
||||||
|
['Oriya', 'Oriya'],
|
||||||
|
['Osage', 'Osage'],
|
||||||
|
['Osmanya', 'Osmanya'],
|
||||||
|
['Palmyrene', 'Palmyrene'],
|
||||||
|
['Pau_Cin_Hau', 'Pau_Cin_Hau'],
|
||||||
|
['Old_Permic', 'Old_Permic'],
|
||||||
|
['Phags_Pa', 'Phags_Pa'],
|
||||||
|
['Inscriptional_Pahlavi', 'Inscriptional_Pahlavi'],
|
||||||
|
['Psalter_Pahlavi', 'Psalter_Pahlavi'],
|
||||||
|
['Phoenician', 'Phoenician'],
|
||||||
|
['Miao', 'Miao'],
|
||||||
|
['Inscriptional_Parthian', 'Inscriptional_Parthian'],
|
||||||
|
['Rejang', 'Rejang'],
|
||||||
|
['Hanifi_Rohingya', 'Hanifi_Rohingya'],
|
||||||
|
['Runic', 'Runic'],
|
||||||
|
['Samaritan', 'Samaritan'],
|
||||||
|
['Old_South_Arabian', 'Old_South_Arabian'],
|
||||||
|
['Saurashtra', 'Saurashtra'],
|
||||||
|
['SignWriting', 'SignWriting'],
|
||||||
|
['Shavian', 'Shavian'],
|
||||||
|
['Sharada', 'Sharada'],
|
||||||
|
['Siddham', 'Siddham'],
|
||||||
|
['Khudawadi', 'Khudawadi'],
|
||||||
|
['Sinhala', 'Sinhala'],
|
||||||
|
['Sogdian', 'Sogdian'],
|
||||||
|
['Old_Sogdian', 'Old_Sogdian'],
|
||||||
|
['Sora_Sompeng', 'Sora_Sompeng'],
|
||||||
|
['Soyombo', 'Soyombo'],
|
||||||
|
['Sundanese', 'Sundanese'],
|
||||||
|
['Syloti_Nagri', 'Syloti_Nagri'],
|
||||||
|
['Syriac', 'Syriac'],
|
||||||
|
['Tagbanwa', 'Tagbanwa'],
|
||||||
|
['Takri', 'Takri'],
|
||||||
|
['Tai_Le', 'Tai_Le'],
|
||||||
|
['New_Tai_Lue', 'New_Tai_Lue'],
|
||||||
|
['Tamil', 'Tamil'],
|
||||||
|
['Tangut', 'Tangut'],
|
||||||
|
['Tai_Viet', 'Tai_Viet'],
|
||||||
|
['Telugu', 'Telugu'],
|
||||||
|
['Tifinagh', 'Tifinagh'],
|
||||||
|
['Tagalog', 'Tagalog'],
|
||||||
|
['Thaana', 'Thaana'],
|
||||||
|
['Tibetan', 'Tibetan'],
|
||||||
|
['Tirhuta', 'Tirhuta'],
|
||||||
|
['Ugaritic', 'Ugaritic'],
|
||||||
|
['Vai', 'Vai'],
|
||||||
|
['Warang_Citi', 'Warang_Citi'],
|
||||||
|
['Old_Persian', 'Old_Persian'],
|
||||||
|
['Cuneiform', 'Cuneiform'],
|
||||||
|
['Yi', 'Yi'],
|
||||||
|
['Zanabazar_Square', 'Zanabazar_Square'],
|
||||||
|
['Inherited', 'Inherited'],
|
||||||
|
['Common', 'Common'],
|
||||||
|
['Unknown', 'Unknown']
|
||||||
|
])],
|
||||||
|
['Script_Extensions', new Map([
|
||||||
|
['Adlm', 'Adlam'],
|
||||||
|
['Aghb', 'Caucasian_Albanian'],
|
||||||
|
['Ahom', 'Ahom'],
|
||||||
|
['Arab', 'Arabic'],
|
||||||
|
['Armi', 'Imperial_Aramaic'],
|
||||||
|
['Armn', 'Armenian'],
|
||||||
|
['Avst', 'Avestan'],
|
||||||
|
['Bali', 'Balinese'],
|
||||||
|
['Bamu', 'Bamum'],
|
||||||
|
['Bass', 'Bassa_Vah'],
|
||||||
|
['Batk', 'Batak'],
|
||||||
|
['Beng', 'Bengali'],
|
||||||
|
['Bhks', 'Bhaiksuki'],
|
||||||
|
['Bopo', 'Bopomofo'],
|
||||||
|
['Brah', 'Brahmi'],
|
||||||
|
['Brai', 'Braille'],
|
||||||
|
['Bugi', 'Buginese'],
|
||||||
|
['Buhd', 'Buhid'],
|
||||||
|
['Cakm', 'Chakma'],
|
||||||
|
['Cans', 'Canadian_Aboriginal'],
|
||||||
|
['Cari', 'Carian'],
|
||||||
|
['Cham', 'Cham'],
|
||||||
|
['Cher', 'Cherokee'],
|
||||||
|
['Copt', 'Coptic'],
|
||||||
|
['Qaac', 'Coptic'],
|
||||||
|
['Cprt', 'Cypriot'],
|
||||||
|
['Cyrl', 'Cyrillic'],
|
||||||
|
['Deva', 'Devanagari'],
|
||||||
|
['Dogr', 'Dogra'],
|
||||||
|
['Dsrt', 'Deseret'],
|
||||||
|
['Dupl', 'Duployan'],
|
||||||
|
['Egyp', 'Egyptian_Hieroglyphs'],
|
||||||
|
['Elba', 'Elbasan'],
|
||||||
|
['Ethi', 'Ethiopic'],
|
||||||
|
['Geor', 'Georgian'],
|
||||||
|
['Glag', 'Glagolitic'],
|
||||||
|
['Gong', 'Gunjala_Gondi'],
|
||||||
|
['Gonm', 'Masaram_Gondi'],
|
||||||
|
['Goth', 'Gothic'],
|
||||||
|
['Gran', 'Grantha'],
|
||||||
|
['Grek', 'Greek'],
|
||||||
|
['Gujr', 'Gujarati'],
|
||||||
|
['Guru', 'Gurmukhi'],
|
||||||
|
['Hang', 'Hangul'],
|
||||||
|
['Hani', 'Han'],
|
||||||
|
['Hano', 'Hanunoo'],
|
||||||
|
['Hatr', 'Hatran'],
|
||||||
|
['Hebr', 'Hebrew'],
|
||||||
|
['Hira', 'Hiragana'],
|
||||||
|
['Hluw', 'Anatolian_Hieroglyphs'],
|
||||||
|
['Hmng', 'Pahawh_Hmong'],
|
||||||
|
['Hrkt', 'Katakana_Or_Hiragana'],
|
||||||
|
['Hung', 'Old_Hungarian'],
|
||||||
|
['Ital', 'Old_Italic'],
|
||||||
|
['Java', 'Javanese'],
|
||||||
|
['Kali', 'Kayah_Li'],
|
||||||
|
['Kana', 'Katakana'],
|
||||||
|
['Khar', 'Kharoshthi'],
|
||||||
|
['Khmr', 'Khmer'],
|
||||||
|
['Khoj', 'Khojki'],
|
||||||
|
['Knda', 'Kannada'],
|
||||||
|
['Kthi', 'Kaithi'],
|
||||||
|
['Lana', 'Tai_Tham'],
|
||||||
|
['Laoo', 'Lao'],
|
||||||
|
['Latn', 'Latin'],
|
||||||
|
['Lepc', 'Lepcha'],
|
||||||
|
['Limb', 'Limbu'],
|
||||||
|
['Lina', 'Linear_A'],
|
||||||
|
['Linb', 'Linear_B'],
|
||||||
|
['Lisu', 'Lisu'],
|
||||||
|
['Lyci', 'Lycian'],
|
||||||
|
['Lydi', 'Lydian'],
|
||||||
|
['Mahj', 'Mahajani'],
|
||||||
|
['Maka', 'Makasar'],
|
||||||
|
['Mand', 'Mandaic'],
|
||||||
|
['Mani', 'Manichaean'],
|
||||||
|
['Marc', 'Marchen'],
|
||||||
|
['Medf', 'Medefaidrin'],
|
||||||
|
['Mend', 'Mende_Kikakui'],
|
||||||
|
['Merc', 'Meroitic_Cursive'],
|
||||||
|
['Mero', 'Meroitic_Hieroglyphs'],
|
||||||
|
['Mlym', 'Malayalam'],
|
||||||
|
['Modi', 'Modi'],
|
||||||
|
['Mong', 'Mongolian'],
|
||||||
|
['Mroo', 'Mro'],
|
||||||
|
['Mtei', 'Meetei_Mayek'],
|
||||||
|
['Mult', 'Multani'],
|
||||||
|
['Mymr', 'Myanmar'],
|
||||||
|
['Narb', 'Old_North_Arabian'],
|
||||||
|
['Nbat', 'Nabataean'],
|
||||||
|
['Newa', 'Newa'],
|
||||||
|
['Nkoo', 'Nko'],
|
||||||
|
['Nshu', 'Nushu'],
|
||||||
|
['Ogam', 'Ogham'],
|
||||||
|
['Olck', 'Ol_Chiki'],
|
||||||
|
['Orkh', 'Old_Turkic'],
|
||||||
|
['Orya', 'Oriya'],
|
||||||
|
['Osge', 'Osage'],
|
||||||
|
['Osma', 'Osmanya'],
|
||||||
|
['Palm', 'Palmyrene'],
|
||||||
|
['Pauc', 'Pau_Cin_Hau'],
|
||||||
|
['Perm', 'Old_Permic'],
|
||||||
|
['Phag', 'Phags_Pa'],
|
||||||
|
['Phli', 'Inscriptional_Pahlavi'],
|
||||||
|
['Phlp', 'Psalter_Pahlavi'],
|
||||||
|
['Phnx', 'Phoenician'],
|
||||||
|
['Plrd', 'Miao'],
|
||||||
|
['Prti', 'Inscriptional_Parthian'],
|
||||||
|
['Rjng', 'Rejang'],
|
||||||
|
['Rohg', 'Hanifi_Rohingya'],
|
||||||
|
['Runr', 'Runic'],
|
||||||
|
['Samr', 'Samaritan'],
|
||||||
|
['Sarb', 'Old_South_Arabian'],
|
||||||
|
['Saur', 'Saurashtra'],
|
||||||
|
['Sgnw', 'SignWriting'],
|
||||||
|
['Shaw', 'Shavian'],
|
||||||
|
['Shrd', 'Sharada'],
|
||||||
|
['Sidd', 'Siddham'],
|
||||||
|
['Sind', 'Khudawadi'],
|
||||||
|
['Sinh', 'Sinhala'],
|
||||||
|
['Sogd', 'Sogdian'],
|
||||||
|
['Sogo', 'Old_Sogdian'],
|
||||||
|
['Sora', 'Sora_Sompeng'],
|
||||||
|
['Soyo', 'Soyombo'],
|
||||||
|
['Sund', 'Sundanese'],
|
||||||
|
['Sylo', 'Syloti_Nagri'],
|
||||||
|
['Syrc', 'Syriac'],
|
||||||
|
['Tagb', 'Tagbanwa'],
|
||||||
|
['Takr', 'Takri'],
|
||||||
|
['Tale', 'Tai_Le'],
|
||||||
|
['Talu', 'New_Tai_Lue'],
|
||||||
|
['Taml', 'Tamil'],
|
||||||
|
['Tang', 'Tangut'],
|
||||||
|
['Tavt', 'Tai_Viet'],
|
||||||
|
['Telu', 'Telugu'],
|
||||||
|
['Tfng', 'Tifinagh'],
|
||||||
|
['Tglg', 'Tagalog'],
|
||||||
|
['Thaa', 'Thaana'],
|
||||||
|
['Thai', 'Thai'],
|
||||||
|
['Tibt', 'Tibetan'],
|
||||||
|
['Tirh', 'Tirhuta'],
|
||||||
|
['Ugar', 'Ugaritic'],
|
||||||
|
['Vaii', 'Vai'],
|
||||||
|
['Wara', 'Warang_Citi'],
|
||||||
|
['Xpeo', 'Old_Persian'],
|
||||||
|
['Xsux', 'Cuneiform'],
|
||||||
|
['Yiii', 'Yi'],
|
||||||
|
['Zanb', 'Zanabazar_Square'],
|
||||||
|
['Zinh', 'Inherited'],
|
||||||
|
['Qaai', 'Inherited'],
|
||||||
|
['Zyyy', 'Common'],
|
||||||
|
['Zzzz', 'Unknown'],
|
||||||
|
['Adlam', 'Adlam'],
|
||||||
|
['Caucasian_Albanian', 'Caucasian_Albanian'],
|
||||||
|
['Arabic', 'Arabic'],
|
||||||
|
['Imperial_Aramaic', 'Imperial_Aramaic'],
|
||||||
|
['Armenian', 'Armenian'],
|
||||||
|
['Avestan', 'Avestan'],
|
||||||
|
['Balinese', 'Balinese'],
|
||||||
|
['Bamum', 'Bamum'],
|
||||||
|
['Bassa_Vah', 'Bassa_Vah'],
|
||||||
|
['Batak', 'Batak'],
|
||||||
|
['Bengali', 'Bengali'],
|
||||||
|
['Bhaiksuki', 'Bhaiksuki'],
|
||||||
|
['Bopomofo', 'Bopomofo'],
|
||||||
|
['Brahmi', 'Brahmi'],
|
||||||
|
['Braille', 'Braille'],
|
||||||
|
['Buginese', 'Buginese'],
|
||||||
|
['Buhid', 'Buhid'],
|
||||||
|
['Chakma', 'Chakma'],
|
||||||
|
['Canadian_Aboriginal', 'Canadian_Aboriginal'],
|
||||||
|
['Carian', 'Carian'],
|
||||||
|
['Cherokee', 'Cherokee'],
|
||||||
|
['Coptic', 'Coptic'],
|
||||||
|
['Cypriot', 'Cypriot'],
|
||||||
|
['Cyrillic', 'Cyrillic'],
|
||||||
|
['Devanagari', 'Devanagari'],
|
||||||
|
['Dogra', 'Dogra'],
|
||||||
|
['Deseret', 'Deseret'],
|
||||||
|
['Duployan', 'Duployan'],
|
||||||
|
['Egyptian_Hieroglyphs', 'Egyptian_Hieroglyphs'],
|
||||||
|
['Elbasan', 'Elbasan'],
|
||||||
|
['Ethiopic', 'Ethiopic'],
|
||||||
|
['Georgian', 'Georgian'],
|
||||||
|
['Glagolitic', 'Glagolitic'],
|
||||||
|
['Gunjala_Gondi', 'Gunjala_Gondi'],
|
||||||
|
['Masaram_Gondi', 'Masaram_Gondi'],
|
||||||
|
['Gothic', 'Gothic'],
|
||||||
|
['Grantha', 'Grantha'],
|
||||||
|
['Greek', 'Greek'],
|
||||||
|
['Gujarati', 'Gujarati'],
|
||||||
|
['Gurmukhi', 'Gurmukhi'],
|
||||||
|
['Hangul', 'Hangul'],
|
||||||
|
['Han', 'Han'],
|
||||||
|
['Hanunoo', 'Hanunoo'],
|
||||||
|
['Hatran', 'Hatran'],
|
||||||
|
['Hebrew', 'Hebrew'],
|
||||||
|
['Hiragana', 'Hiragana'],
|
||||||
|
['Anatolian_Hieroglyphs', 'Anatolian_Hieroglyphs'],
|
||||||
|
['Pahawh_Hmong', 'Pahawh_Hmong'],
|
||||||
|
['Katakana_Or_Hiragana', 'Katakana_Or_Hiragana'],
|
||||||
|
['Old_Hungarian', 'Old_Hungarian'],
|
||||||
|
['Old_Italic', 'Old_Italic'],
|
||||||
|
['Javanese', 'Javanese'],
|
||||||
|
['Kayah_Li', 'Kayah_Li'],
|
||||||
|
['Katakana', 'Katakana'],
|
||||||
|
['Kharoshthi', 'Kharoshthi'],
|
||||||
|
['Khmer', 'Khmer'],
|
||||||
|
['Khojki', 'Khojki'],
|
||||||
|
['Kannada', 'Kannada'],
|
||||||
|
['Kaithi', 'Kaithi'],
|
||||||
|
['Tai_Tham', 'Tai_Tham'],
|
||||||
|
['Lao', 'Lao'],
|
||||||
|
['Latin', 'Latin'],
|
||||||
|
['Lepcha', 'Lepcha'],
|
||||||
|
['Limbu', 'Limbu'],
|
||||||
|
['Linear_A', 'Linear_A'],
|
||||||
|
['Linear_B', 'Linear_B'],
|
||||||
|
['Lycian', 'Lycian'],
|
||||||
|
['Lydian', 'Lydian'],
|
||||||
|
['Mahajani', 'Mahajani'],
|
||||||
|
['Makasar', 'Makasar'],
|
||||||
|
['Mandaic', 'Mandaic'],
|
||||||
|
['Manichaean', 'Manichaean'],
|
||||||
|
['Marchen', 'Marchen'],
|
||||||
|
['Medefaidrin', 'Medefaidrin'],
|
||||||
|
['Mende_Kikakui', 'Mende_Kikakui'],
|
||||||
|
['Meroitic_Cursive', 'Meroitic_Cursive'],
|
||||||
|
['Meroitic_Hieroglyphs', 'Meroitic_Hieroglyphs'],
|
||||||
|
['Malayalam', 'Malayalam'],
|
||||||
|
['Mongolian', 'Mongolian'],
|
||||||
|
['Mro', 'Mro'],
|
||||||
|
['Meetei_Mayek', 'Meetei_Mayek'],
|
||||||
|
['Multani', 'Multani'],
|
||||||
|
['Myanmar', 'Myanmar'],
|
||||||
|
['Old_North_Arabian', 'Old_North_Arabian'],
|
||||||
|
['Nabataean', 'Nabataean'],
|
||||||
|
['Nko', 'Nko'],
|
||||||
|
['Nushu', 'Nushu'],
|
||||||
|
['Ogham', 'Ogham'],
|
||||||
|
['Ol_Chiki', 'Ol_Chiki'],
|
||||||
|
['Old_Turkic', 'Old_Turkic'],
|
||||||
|
['Oriya', 'Oriya'],
|
||||||
|
['Osage', 'Osage'],
|
||||||
|
['Osmanya', 'Osmanya'],
|
||||||
|
['Palmyrene', 'Palmyrene'],
|
||||||
|
['Pau_Cin_Hau', 'Pau_Cin_Hau'],
|
||||||
|
['Old_Permic', 'Old_Permic'],
|
||||||
|
['Phags_Pa', 'Phags_Pa'],
|
||||||
|
['Inscriptional_Pahlavi', 'Inscriptional_Pahlavi'],
|
||||||
|
['Psalter_Pahlavi', 'Psalter_Pahlavi'],
|
||||||
|
['Phoenician', 'Phoenician'],
|
||||||
|
['Miao', 'Miao'],
|
||||||
|
['Inscriptional_Parthian', 'Inscriptional_Parthian'],
|
||||||
|
['Rejang', 'Rejang'],
|
||||||
|
['Hanifi_Rohingya', 'Hanifi_Rohingya'],
|
||||||
|
['Runic', 'Runic'],
|
||||||
|
['Samaritan', 'Samaritan'],
|
||||||
|
['Old_South_Arabian', 'Old_South_Arabian'],
|
||||||
|
['Saurashtra', 'Saurashtra'],
|
||||||
|
['SignWriting', 'SignWriting'],
|
||||||
|
['Shavian', 'Shavian'],
|
||||||
|
['Sharada', 'Sharada'],
|
||||||
|
['Siddham', 'Siddham'],
|
||||||
|
['Khudawadi', 'Khudawadi'],
|
||||||
|
['Sinhala', 'Sinhala'],
|
||||||
|
['Sogdian', 'Sogdian'],
|
||||||
|
['Old_Sogdian', 'Old_Sogdian'],
|
||||||
|
['Sora_Sompeng', 'Sora_Sompeng'],
|
||||||
|
['Soyombo', 'Soyombo'],
|
||||||
|
['Sundanese', 'Sundanese'],
|
||||||
|
['Syloti_Nagri', 'Syloti_Nagri'],
|
||||||
|
['Syriac', 'Syriac'],
|
||||||
|
['Tagbanwa', 'Tagbanwa'],
|
||||||
|
['Takri', 'Takri'],
|
||||||
|
['Tai_Le', 'Tai_Le'],
|
||||||
|
['New_Tai_Lue', 'New_Tai_Lue'],
|
||||||
|
['Tamil', 'Tamil'],
|
||||||
|
['Tangut', 'Tangut'],
|
||||||
|
['Tai_Viet', 'Tai_Viet'],
|
||||||
|
['Telugu', 'Telugu'],
|
||||||
|
['Tifinagh', 'Tifinagh'],
|
||||||
|
['Tagalog', 'Tagalog'],
|
||||||
|
['Thaana', 'Thaana'],
|
||||||
|
['Tibetan', 'Tibetan'],
|
||||||
|
['Tirhuta', 'Tirhuta'],
|
||||||
|
['Ugaritic', 'Ugaritic'],
|
||||||
|
['Vai', 'Vai'],
|
||||||
|
['Warang_Citi', 'Warang_Citi'],
|
||||||
|
['Old_Persian', 'Old_Persian'],
|
||||||
|
['Cuneiform', 'Cuneiform'],
|
||||||
|
['Yi', 'Yi'],
|
||||||
|
['Zanabazar_Square', 'Zanabazar_Square'],
|
||||||
|
['Inherited', 'Inherited'],
|
||||||
|
['Common', 'Common'],
|
||||||
|
['Unknown', 'Unknown']
|
||||||
|
])]
|
||||||
|
]);
|
19
node_modules/unicode-match-property-value-ecmascript/index.js
generated
vendored
Executable file
19
node_modules/unicode-match-property-value-ecmascript/index.js
generated
vendored
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const propertyToValueAliases = require('./data/mappings.js');
|
||||||
|
|
||||||
|
const matchPropertyValue = function(property, value) {
|
||||||
|
const aliasToValue = propertyToValueAliases.get(property);
|
||||||
|
if (!aliasToValue) {
|
||||||
|
throw new Error(`Unknown property \`${ property }\`.`);
|
||||||
|
}
|
||||||
|
const canonicalValue = aliasToValue.get(value);
|
||||||
|
if (canonicalValue) {
|
||||||
|
return canonicalValue;
|
||||||
|
}
|
||||||
|
throw new Error(
|
||||||
|
`Unknown value \`${ value }\` for property \`${ property }\`.`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = matchPropertyValue;
|
39
node_modules/unicode-match-property-value-ecmascript/package.json
generated
vendored
Normal file
39
node_modules/unicode-match-property-value-ecmascript/package.json
generated
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"name": "unicode-match-property-value-ecmascript",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"description": "Match a Unicode property or property alias to its canonical property name per the algorithm used for RegExp Unicode property escapes in ECMAScript.",
|
||||||
|
"homepage": "https://github.com/mathiasbynens/unicode-match-property-value-ecmascript",
|
||||||
|
"main": "index.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE-MIT.txt",
|
||||||
|
"data/mappings.js",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"unicode",
|
||||||
|
"unicode property values",
|
||||||
|
"unicode property value aliases"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"author": {
|
||||||
|
"name": "Mathias Bynens",
|
||||||
|
"url": "https://mathiasbynens.be/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mathiasbynens/unicode-match-property-value-ecmascript.git"
|
||||||
|
},
|
||||||
|
"bugs": "https://github.com/mathiasbynens/unicode-match-property-value-ecmascript/issues",
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "*",
|
||||||
|
"jsesc": "^2.5.1",
|
||||||
|
"unicode-property-value-aliases-ecmascript": "^1.0.3"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "node scripts/build.js",
|
||||||
|
"test": "ava ./tests"
|
||||||
|
}
|
||||||
|
}
|
20
node_modules/unicode-property-aliases-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
20
node_modules/unicode-property-aliases-ecmascript/LICENSE-MIT.txt
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
38
node_modules/unicode-property-aliases-ecmascript/README.md
generated
vendored
Normal file
38
node_modules/unicode-property-aliases-ecmascript/README.md
generated
vendored
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# unicode-property-aliases-ecmascript [![Build status](https://travis-ci.org/mathiasbynens/unicode-property-aliases-ecmascript.svg?branch=master)](https://travis-ci.org/mathiasbynens/unicode-property-aliases-ecmascript)
|
||||||
|
|
||||||
|
_unicode-property-aliases-ecmascript_ offers Unicode property alias mappings in an easy-to-consume JavaScript format. It only contains the Unicode property names that are supported in [ECMAScript RegExp property escapes](https://github.com/tc39/proposal-regexp-unicode-property-escapes).
|
||||||
|
|
||||||
|
It’s based on [the `PropertyAliases.txt` data for Unicode v11.0.0](http://unicode.org/Public/11.0.0/ucd/PropertyAliases.txt).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To use _unicode-property-aliases-ecmascript_ programmatically, install it as a dependency via [npm](https://www.npmjs.com/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install unicode-property-aliases-ecmascript
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, `require` it:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const propertyAliases = require('unicode-property-aliases-ecmascript');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
This module exports a `Map` object. The most common usage is to convert a property alias to its canonical form:
|
||||||
|
|
||||||
|
```js
|
||||||
|
propertyAliases.get('scx')
|
||||||
|
// → 'Script_Extensions'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|
||||||
|
|---|
|
||||||
|
| [Mathias Bynens](https://mathiasbynens.be/) |
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
_unicode-property-aliases-ecmascript_ is available under the [MIT](https://mths.be/mit) license.
|
51
node_modules/unicode-property-aliases-ecmascript/index.js
generated
vendored
Executable file
51
node_modules/unicode-property-aliases-ecmascript/index.js
generated
vendored
Executable file
|
@ -0,0 +1,51 @@
|
||||||
|
// Generated using `npm run build`. Do not edit!
|
||||||
|
module.exports = new Map([
|
||||||
|
['scx', 'Script_Extensions'],
|
||||||
|
['sc', 'Script'],
|
||||||
|
['gc', 'General_Category'],
|
||||||
|
['AHex', 'ASCII_Hex_Digit'],
|
||||||
|
['Alpha', 'Alphabetic'],
|
||||||
|
['Bidi_C', 'Bidi_Control'],
|
||||||
|
['Bidi_M', 'Bidi_Mirrored'],
|
||||||
|
['Cased', 'Cased'],
|
||||||
|
['CI', 'Case_Ignorable'],
|
||||||
|
['CWCF', 'Changes_When_Casefolded'],
|
||||||
|
['CWCM', 'Changes_When_Casemapped'],
|
||||||
|
['CWKCF', 'Changes_When_NFKC_Casefolded'],
|
||||||
|
['CWL', 'Changes_When_Lowercased'],
|
||||||
|
['CWT', 'Changes_When_Titlecased'],
|
||||||
|
['CWU', 'Changes_When_Uppercased'],
|
||||||
|
['Dash', 'Dash'],
|
||||||
|
['Dep', 'Deprecated'],
|
||||||
|
['DI', 'Default_Ignorable_Code_Point'],
|
||||||
|
['Dia', 'Diacritic'],
|
||||||
|
['Ext', 'Extender'],
|
||||||
|
['Gr_Base', 'Grapheme_Base'],
|
||||||
|
['Gr_Ext', 'Grapheme_Extend'],
|
||||||
|
['Hex', 'Hex_Digit'],
|
||||||
|
['IDC', 'ID_Continue'],
|
||||||
|
['Ideo', 'Ideographic'],
|
||||||
|
['IDS', 'ID_Start'],
|
||||||
|
['IDSB', 'IDS_Binary_Operator'],
|
||||||
|
['IDST', 'IDS_Trinary_Operator'],
|
||||||
|
['Join_C', 'Join_Control'],
|
||||||
|
['LOE', 'Logical_Order_Exception'],
|
||||||
|
['Lower', 'Lowercase'],
|
||||||
|
['Math', 'Math'],
|
||||||
|
['NChar', 'Noncharacter_Code_Point'],
|
||||||
|
['Pat_Syn', 'Pattern_Syntax'],
|
||||||
|
['Pat_WS', 'Pattern_White_Space'],
|
||||||
|
['QMark', 'Quotation_Mark'],
|
||||||
|
['Radical', 'Radical'],
|
||||||
|
['RI', 'Regional_Indicator'],
|
||||||
|
['SD', 'Soft_Dotted'],
|
||||||
|
['STerm', 'Sentence_Terminal'],
|
||||||
|
['Term', 'Terminal_Punctuation'],
|
||||||
|
['UIdeo', 'Unified_Ideograph'],
|
||||||
|
['Upper', 'Uppercase'],
|
||||||
|
['VS', 'Variation_Selector'],
|
||||||
|
['WSpace', 'White_Space'],
|
||||||
|
['space', 'White_Space'],
|
||||||
|
['XIDC', 'XID_Continue'],
|
||||||
|
['XIDS', 'XID_Start']
|
||||||
|
]);
|
41
node_modules/unicode-property-aliases-ecmascript/package.json
generated
vendored
Normal file
41
node_modules/unicode-property-aliases-ecmascript/package.json
generated
vendored
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"name": "unicode-property-aliases-ecmascript",
|
||||||
|
"version": "1.0.4",
|
||||||
|
"description": "Unicode property alias mappings in JavaScript format for property names that are supported in ECMAScript RegExp property escapes.",
|
||||||
|
"homepage": "https://github.com/mathiasbynens/unicode-property-aliases-ecmascript",
|
||||||
|
"main": "index.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE-MIT.txt",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"unicode",
|
||||||
|
"unicode-data",
|
||||||
|
"alias",
|
||||||
|
"aliases",
|
||||||
|
"property alias"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"author": {
|
||||||
|
"name": "Mathias Bynens",
|
||||||
|
"url": "https://mathiasbynens.be/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mathiasbynens/unicode-property-aliases-ecmascript.git"
|
||||||
|
},
|
||||||
|
"bugs": "https://github.com/mathiasbynens/unicode-property-aliases-ecmascript/issues",
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "*",
|
||||||
|
"jsesc": "^2.5.1",
|
||||||
|
"unicode-canonical-property-names-ecmascript": "^1.0.4"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"download": "curl http://unicode.org/Public/11.0.0/ucd/PropertyAliases.txt > data/PropertyAliases.txt",
|
||||||
|
"build": "node scripts/build.js",
|
||||||
|
"test": "ava ./tests"
|
||||||
|
}
|
||||||
|
}
|
93
package-lock.json
generated
Normal file
93
package-lock.json
generated
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
{
|
||||||
|
"name": "lambdaworld",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "lambdaworld",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"license": "GPL-3.0-or-later",
|
||||||
|
"dependencies": {
|
||||||
|
"shift-ast": "^7.0.0",
|
||||||
|
"shift-parser": "^8.0.0",
|
||||||
|
"shift-reducer": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/multimap": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw=="
|
||||||
|
},
|
||||||
|
"node_modules/shift-ast": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-O0INwsZa1XH/lMSf52udGnjNOxKBLxFiZHt0Ys3i6bqtwuGEA3eDR4+e0qJELIsCy8+BiTtlTgQzP76K1ehipQ=="
|
||||||
|
},
|
||||||
|
"node_modules/shift-parser": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-IShW1wGhvA5e+SPNVQ+Dwi/Be6651F2jZc6wwYHbYW7PiswAYfvR/v3Q+CjjxsVCna5L6J5OtR6y+tkkCzvCfw==",
|
||||||
|
"dependencies": {
|
||||||
|
"multimap": "^1.0.2",
|
||||||
|
"shift-ast": "7.0.0",
|
||||||
|
"shift-reducer": "7.0.0",
|
||||||
|
"shift-regexp-acceptor": "3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/shift-reducer": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-9igIDMHzp1+CkQZITGHM1sAd9jqMPV0vhqHuh8jlYumHSMIwsYcrDeo1tlpzNRUnfbEq1nLyh8Bf1YU8HGUE7g==",
|
||||||
|
"dependencies": {
|
||||||
|
"shift-ast": "7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/shift-regexp-acceptor": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-98UKizBjHY6SjjLUr51YYw4rtR+vxjGFm8znqNsoahesAI8Y9+WVAyiBCxxkov1KSDhW0Wz8FwwUqHnlFnjdUg==",
|
||||||
|
"dependencies": {
|
||||||
|
"unicode-match-property-ecmascript": "1.0.4",
|
||||||
|
"unicode-match-property-value-ecmascript": "1.0.2",
|
||||||
|
"unicode-property-aliases-ecmascript": "1.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-canonical-property-names-ecmascript": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-match-property-ecmascript": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
|
||||||
|
"dependencies": {
|
||||||
|
"unicode-canonical-property-names-ecmascript": "^1.0.4",
|
||||||
|
"unicode-property-aliases-ecmascript": "^1.0.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-match-property-value-ecmascript": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-property-aliases-ecmascript": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
package.json
Normal file
16
package.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"name": "lambdaworld",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "GPL-3.0-or-later",
|
||||||
|
"dependencies": {
|
||||||
|
"shift-ast": "^7.0.0",
|
||||||
|
"shift-parser": "^8.0.0",
|
||||||
|
"shift-reducer": "^7.0.0"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue