@next-core/cook 1.3.5 → 1.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [1.3.5](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.4...@next-core/cook@1.3.5) (2021-11-01)
6
+ ## [1.3.9](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.8...@next-core/cook@1.3.9) (2021-11-23)
7
7
 
8
8
  **Note:** Version bump only for package @next-core/cook
9
9
 
@@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
11
11
 
12
12
 
13
13
 
14
- ## [1.3.4](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.3...@next-core/cook@1.3.4) (2021-10-28)
14
+ ## [1.3.8](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.7...@next-core/cook@1.3.8) (2021-11-18)
15
15
 
16
16
  **Note:** Version bump only for package @next-core/cook
17
17
 
@@ -19,57 +19,48 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
19
19
 
20
20
 
21
21
 
22
- ## [1.3.3](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.2...@next-core/cook@1.3.3) (2021-10-28)
22
+ ## [1.3.7](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.6...@next-core/cook@1.3.7) (2021-11-11)
23
23
 
24
24
  **Note:** Version bump only for package @next-core/cook
25
25
 
26
+ ## [1.3.6](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.5...@next-core/cook@1.3.6) (2021-11-02)
26
27
 
28
+ **Note:** Version bump only for package @next-core/cook
27
29
 
30
+ ## [1.3.5](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.4...@next-core/cook@1.3.5) (2021-11-01)
28
31
 
32
+ **Note:** Version bump only for package @next-core/cook
29
33
 
30
- ## [1.3.2](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.1...@next-core/cook@1.3.2) (2021-10-21)
34
+ ## [1.3.4](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.3...@next-core/cook@1.3.4) (2021-10-28)
31
35
 
32
36
  **Note:** Version bump only for package @next-core/cook
33
37
 
38
+ ## [1.3.3](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.2...@next-core/cook@1.3.3) (2021-10-28)
34
39
 
40
+ **Note:** Version bump only for package @next-core/cook
35
41
 
42
+ ## [1.3.2](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.1...@next-core/cook@1.3.2) (2021-10-21)
36
43
 
44
+ **Note:** Version bump only for package @next-core/cook
37
45
 
38
46
  ## [1.3.1](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.3.0...@next-core/cook@1.3.1) (2021-10-20)
39
47
 
40
48
  **Note:** Version bump only for package @next-core/cook
41
49
 
42
-
43
-
44
-
45
-
46
50
  # [1.3.0](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.2.3...@next-core/cook@1.3.0) (2021-10-20)
47
51
 
48
-
49
52
  ### Features
50
53
 
51
- * support widget functions ([a5a5cff](https://github.com/easyops-cn/next-core/commit/a5a5cff7b183b971e434506e531d0fddbbf5e597))
52
-
53
-
54
-
55
-
54
+ - support widget functions ([a5a5cff](https://github.com/easyops-cn/next-core/commit/a5a5cff7b183b971e434506e531d0fddbbf5e597))
56
55
 
57
56
  ## [1.2.3](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.2.2...@next-core/cook@1.2.3) (2021-10-13)
58
57
 
59
58
  **Note:** Version bump only for package @next-core/cook
60
59
 
61
-
62
-
63
-
64
-
65
60
  ## [1.2.2](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.2.1...@next-core/cook@1.2.2) (2021-10-12)
66
61
 
67
62
  **Note:** Version bump only for package @next-core/cook
68
63
 
69
-
70
-
71
-
72
-
73
64
  ## [1.2.1](https://github.com/easyops-cn/next-core/compare/@next-core/cook@1.2.0...@next-core/cook@1.2.1) (2021-09-30)
74
65
 
75
66
  ### Bug Fixes
package/dist/esm/cook.js CHANGED
@@ -4,13 +4,14 @@ import { sanitize, isAllowedConstructor } from "./sanitize";
4
4
  import { collectBoundNames, collectScopedDeclarations, containsExpression } from "./traverse";
5
5
 
6
6
  /** For next-core internal usage only. */
7
- export function cook(rootAst, codeSource, {
8
- rules,
9
- globalVariables = {},
10
- hooks = {}
11
- } = {}) {
7
+ export function cook(rootAst, codeSource) {
12
8
  var _hooks$beforeEvaluate3;
13
9
 
10
+ var {
11
+ rules,
12
+ globalVariables = {},
13
+ hooks = {}
14
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
14
15
  var expressionOnly = rootAst.type !== "FunctionDeclaration";
15
16
  var rootEnv = new DeclarativeEnvironment(null);
16
17
  var rootContext = new ExecutionContext();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cook.ts"],"names":["ApplyStringOrNumericAssignment","CreateListIteratorRecord","ApplyStringOrNumericBinaryOperator","GetV","GetValue","InitializeReferencedBinding","IsPropertyReference","LoopContinues","PutValue","RequireObjectCoercible","ToPropertyKey","UpdateEmpty","ApplyUnaryOperator","GetIdentifierReference","ForDeclarationBindingInstantiation","CopyDataProperties","CompletionRecord","DeclarativeEnvironment","ECMAScriptCode","Empty","Environment","ExecutionContext","FormalParameters","FunctionEnvironment","IsConstructor","NormalCompletion","ReferenceRecord","SourceNode","sanitize","isAllowedConstructor","collectBoundNames","collectScopedDeclarations","containsExpression","cook","rootAst","codeSource","rules","globalVariables","hooks","expressionOnly","type","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","executionContextStack","key","value","Object","entries","CreateImmutableBinding","InitializeBinding","TemplateMap","WeakMap","GetTemplateObject","templateLiteral","memo","get","rawObj","quasis","map","quasi","raw","template","cooked","freeze","defineProperty","writable","enumerable","configurable","set","Evaluate","node","optionalChainRef","beforeEvaluate","array","element","elements","length","spreadValues","argument","push","ThrowIfFunctionIsInvalid","closure","InstantiateArrowFunctionExpression","leftRef","left","leftValue","rightRef","right","Value","rightValue","operator","funcName","substring","start","end","TypeError","thisValue","Base","call","result","ref","callee","func","undefined","optional","skipped","EvaluateCall","arguments","expression","test","consequent","alternate","ResolveBinding","name","regex","SyntaxError","flags","includes","baseReference","object","baseValue","computed","EvaluatePropertyAccessWithExpressionKey","property","EvaluatePropertyAccessWithIdentifierKey","EvaluateNew","prop","properties","fromValue","Set","kind","propName","EvaluateComputedPropertyName","expr","expressions","chunks","index","val","String","join","tagRef","tag","tagFunc","deleteStatus","ReferenceName","lref","rref","rval","DestructuringAssignmentEvaluation","lval","r","body","oldEnv","getRunningContext","blockEnv","BlockDeclarationInstantiation","blockValue","EvaluateStatementList","EvaluateBreakableStatement","DoWhileLoopEvaluation","ForInOfLoopEvaluation","ForLoopEvaluation","InstantiateOrdinaryFunctionExpression","beforeBranch","v","exprRef","lhs","oldValue","Number","newValue","prefix","discriminant","switchValue","cases","R","CaseBlockEvaluation","block","error","handler","CatchClauseEvaluation","finalizer","F","Type","declarator","declarations","init","id","bindingId","rhs","BindingInitialization","WhileLoopEvaluation","env","thrownValue","catchEnv","argName","param","CreateMutableBinding","B","stmtResult","input","V","defaultCaseIndex","findIndex","switchCase","hasDefaultCase","A","slice","found","C","CaseClauseIsSelected","foundInB","clauseSelector","exprValue","isVariableDeclaration","lhsKind","uninitializedBoundNames","iterationKind","keyResult","ForInOfHeadEvaluation","ForInOfBodyEvaluation","runningContext","newEnv","iterator","EnumerateObjectProperties","stmt","iteratorRecord","destructuring","done","nextValue","next","lhsRef","iterationEnv","lhsName","ForBodyEvaluation","update","loopEnv","isConst","boundNames","dn","perIterationLets","Array","from","bodyResult","increment","perIterationBindings","CreatePerIterationEnvironment","testRef","testValue","incRef","lastIterationEnv","outer","OuterEnv","thisIterationEnv","bn","lastValue","GetBindingValue","pattern","PropertyDestructuringAssignmentEvaluation","IteratorDestructuringAssignmentEvaluation","excludedNames","valueTarget","defaultValue","add","KeyedDestructuringAssignmentEvaluation","RestDestructuringAssignmentEvaluation","propertyName","assignmentTarget","isObjectOrArray","rhsValue","restProperty","restObj","status","n","strict","propertyNameReference","propertyNameValue","propertyKey","identifier","propertyNameString","code","var","topLevel","d","IsConstantDeclaration","fn","fo","InstantiateFunctionObject","args","argList","ArgumentListEvaluation","apply","constructExpr","constructor","constructorName","isArray","arg","CallFunction","beforeCall","PrepareForOrdinaryCall","OrdinaryCallEvaluateBody","pop","calleeContext","Function","localEnv","EvaluateFunctionBody","FunctionDeclarationInstantiation","statements","s","formals","parameterNames","hasParameterExpressions","varDeclarations","varNames","functionNames","functionsToInitialize","i","unshift","noVar","paramName","IteratorBindingInitialization","varEnv","initialValue","lexEnv","lexDeclarations","f","SetMutableBinding","scope","OrdinaryFunctionCreate","functionExpression","funcEnv","arrowFunction","sourceNode","isConstructor","defineProperties","params","environment","InitializeBoundName","PropertyBindingInitialization","RestBindingInitialization","KeyedBindingInitialization","P","bindingElement","isIdentifier","async","generator"],"mappings":"AAyBA,SACEA,8BADF,EAEEC,wBAFF,EAGEC,kCAHF,EAIEC,IAJF,EAKEC,QALF,EAMEC,2BANF,EAOEC,mBAPF,EAQEC,aARF,EASEC,QATF,EAUEC,sBAVF,EAWEC,aAXF,EAYEC,WAZF,EAaEC,kBAbF,EAcEC,sBAdF,EAeEC,kCAfF,EAgBEC,kBAhBF,QAiBO,gBAjBP;AAkBA,SACEC,gBADF,EAEEC,sBAFF,EAGEC,cAHF,EAIEC,KAJF,EAKEC,WALF,EAOEC,gBAPF,EAQEC,gBARF,EASEC,mBATF,EAWEC,aAXF,EAYEC,gBAZF,EAcEC,eAdF,EAeEC,UAfF,QAgBO,oBAhBP;AAyBA,SAASC,QAAT,EAAmBC,oBAAnB,QAA+C,YAA/C;AACA,SACEC,iBADF,EAEEC,yBAFF,EAGEC,kBAHF,QAIO,YAJP;;AAkBA;AACA,OAAO,SAASC,IAAT,CACLC,OADK,EAELC,UAFK,EAGL;AAAEC,EAAAA,KAAF;AAASC,EAAAA,eAAe,GAAG,EAA3B;AAA+BC,EAAAA,KAAK,GAAG;AAAvC,IAA2D,EAHtD,EAII;AAAA;;AACT,MAAMC,cAAc,GAAGL,OAAO,CAACM,IAAR,KAAiB,qBAAxC;AAEA,MAAMC,OAAO,GAAG,IAAIxB,sBAAJ,CAA2B,IAA3B,CAAhB;AACA,MAAMyB,WAAW,GAAG,IAAIrB,gBAAJ,EAApB;AACAqB,EAAAA,WAAW,CAACC,mBAAZ,GAAkCF,OAAlC;AACAC,EAAAA,WAAW,CAACE,kBAAZ,GAAiCH,OAAjC;AACA,MAAMI,qBAAqB,GAAG,CAACH,WAAD,CAA9B;;AAEA,OAAK,IAAM,CAACI,GAAD,EAAMC,KAAN,CAAX,IAA2BC,MAAM,CAACC,OAAP,CAAeZ,eAAf,CAA3B,EAA4D;AAC1DI,IAAAA,OAAO,CAACS,sBAAR,CAA+BJ,GAA/B,EAAoC,IAApC;AACAL,IAAAA,OAAO,CAACU,iBAAR,CAA0BL,GAA1B,EAA+BC,KAA/B;AACD;;AAED,MAAMK,WAAW,GAAG,IAAIC,OAAJ,EAApB,CAdS,CAgBT;;AACA,WAASC,iBAAT,CAA2BC,eAA3B,EAAuE;AACrE,QAAMC,IAAI,GAAGJ,WAAW,CAACK,GAAZ,CAAgBF,eAAhB,CAAb;;AACA,QAAIC,IAAJ,EAAU;AACR,aAAOA,IAAP;AACD;;AACD,QAAME,MAAM,GAAGH,eAAe,CAACI,MAAhB,CAAuBC,GAAvB,CAA4BC,KAAD,IAAWA,KAAK,CAACd,KAAN,CAAYe,GAAlD,CAAf;AACA,QAAMC,QAAQ,GAAGR,eAAe,CAACI,MAAhB,CAAuBC,GAAvB,CAA4BC,KAAD,IAAWA,KAAK,CAACd,KAAN,CAAYiB,MAAlD,CAAjB;AACAhB,IAAAA,MAAM,CAACiB,MAAP,CAAcP,MAAd;AACAV,IAAAA,MAAM,CAACkB,cAAP,CAAsBH,QAAtB,EAAgC,KAAhC,EAAuC;AACrChB,MAAAA,KAAK,EAAEW,MAD8B;AAErCS,MAAAA,QAAQ,EAAE,KAF2B;AAGrCC,MAAAA,UAAU,EAAE,KAHyB;AAIrCC,MAAAA,YAAY,EAAE;AAJuB,KAAvC;AAMArB,IAAAA,MAAM,CAACiB,MAAP,CAAcF,QAAd;AACAX,IAAAA,WAAW,CAACkB,GAAZ,CAAgBf,eAAhB,EAAiCQ,QAAjC;AACA,WAAOA,QAAP;AACD;;AAED,WAASQ,QAAT,CACEC,IADF,EAEEC,gBAFF,EAGoB;AAAA;;AAClB,6BAAAnC,KAAK,CAACoC,cAAN,qFAAApC,KAAK,EAAkBkC,IAAlB,CAAL,CADkB,CAElB;;AACA,YAAQA,IAAI,CAAChC,IAAb;AACE,WAAK,iBAAL;AAAwB;AACtB;AACA,cAAMmC,KAAK,GAAG,EAAd;;AACA,eAAK,IAAMC,OAAX,IAAsBJ,IAAI,CAACK,QAA3B,EAAqC;AACnC,gBAAI,CAACD,OAAL,EAAc;AACZD,cAAAA,KAAK,CAACG,MAAN,IAAgB,CAAhB;AACD,aAFD,MAEO,IAAIF,OAAO,CAACpC,IAAR,KAAiB,eAArB,EAAsC;AAC3C,kBAAMuC,YAAY,GAAG3E,QAAQ,CAC3BmE,QAAQ,CAACK,OAAO,CAACI,QAAT,CADmB,CAA7B;AAGAL,cAAAA,KAAK,CAACM,IAAN,CAAW,GAAGF,YAAd;AACD,aALM,MAKA;AACLJ,cAAAA,KAAK,CAACM,IAAN,CAAW7E,QAAQ,CAACmE,QAAQ,CAACK,OAAD,CAAT,CAAnB;AACD;AACF;;AACD,iBAAOnD,gBAAgB,CAACkD,KAAD,CAAvB;AACD;;AACD,WAAK,yBAAL;AAAgC;AAC9B;AACAO,UAAAA,wBAAwB,CAACV,IAAD,CAAxB;AACA,cAAMW,OAAO,GAAGC,kCAAkC,CAACZ,IAAD,CAAlD;AACA,iBAAO/C,gBAAgB,CAAC0D,OAAD,CAAvB;AACD;;AACD,WAAK,kBAAL;AAAyB;AACvB,cAAME,OAAO,GAAGd,QAAQ,CAACC,IAAI,CAACc,IAAN,CAAxB;AACA,cAAMC,SAAS,GAAGnF,QAAQ,CAACiF,OAAD,CAA1B;AACA,cAAMG,QAAQ,GAAGjB,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAAR,CAAqBC,KAAtC;AACA,cAAMC,UAAU,GAAGvF,QAAQ,CAACoF,QAAD,CAA3B;;AACA,cAAIjD,cAAc,IAAKiC,IAAI,CAACoB,QAAN,KAA+B,IAArD,EAA2D;AACzD;AACA;AACA;AACA,gBAAI,OAAOD,UAAP,KAAsB,UAA1B,EAAsC;AACpC,kBAAME,QAAQ,GAAG1D,UAAU,CAAC2D,SAAX,CACftB,IAAI,CAACiB,KAAL,CAAWM,KADI,EAEfvB,IAAI,CAACiB,KAAL,CAAWO,GAFI,CAAjB;AAIA,oBAAM,IAAIC,SAAJ,WAAiBJ,QAAjB,wBAAN;AACD;;AACD,gBAAIK,SAAJ;;AACA,gBAAIV,QAAQ,YAAY9D,eAAxB,EAAyC;AACvC,kBAAIpB,mBAAmB,CAACkF,QAAD,CAAvB,EAAmC;AACjCU,gBAAAA,SAAS,GAAGV,QAAQ,CAACW,IAArB;AACD;AACF;;AACD,mBAAO1E,gBAAgB,CACpBkE,UAAD,CAA0CS,IAA1C,CAA+CF,SAA/C,EAA0DX,SAA1D,CADqB,CAAvB;AAGD,WAzBsB,CA0BvB;;;AACA,cAAMc,MAAM,GAAGnG,kCAAkC,CAC/CqF,SAD+C,EAE/Cf,IAAI,CAACoB,QAF0C,EAG/CD,UAH+C,CAAjD;AAKA,iBAAOlE,gBAAgB,CAAC4E,MAAD,CAAvB;AACD;;AACD,WAAK,gBAAL;AAAuB;AACrB;AACA,cAAMC,GAAG,GAAG/B,QAAQ,CAACC,IAAI,CAAC+B,MAAN,EAAc9B,gBAAd,CAAR,CACTiB,KADH;AAEA,cAAMc,IAAI,GAAGpG,QAAQ,CAACkG,GAAD,CAArB;;AACA,cACE,CAACE,IAAI,KAAKC,SAAT,IAAsBD,IAAI,KAAK,IAAhC,MACChC,IAAI,CAACkC,QAAL,IAAiBjC,gBAAjB,aAAiBA,gBAAjB,eAAiBA,gBAAgB,CAAEkC,OADpC,CADF,EAGE;AACAlC,YAAAA,gBAAgB,CAACkC,OAAjB,GAA2B,IAA3B;AACA,mBAAOlF,gBAAgB,CAACgF,SAAD,CAAvB;AACD;;AACD7E,UAAAA,QAAQ,CAAC4E,IAAD,CAAR;AACA,iBAAOI,YAAY,CAACJ,IAAD,EAAOF,GAAP,EAAY9B,IAAI,CAACqC,SAAjB,EAA4BrC,IAAI,CAAC+B,MAAjC,CAAnB;AACD;;AACD,WAAK,iBAAL;AACE;AACA,eAAOhC,QAAQ,CAACC,IAAI,CAACsC,UAAN,EAAkB,EAAlB,CAAf;;AACF,WAAK,uBAAL;AACE;AACA,eAAOrF,gBAAgB,CACrBrB,QAAQ,CACNmE,QAAQ,CACNnE,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACuC,IAAN,CAAT,CAAR,GAAgCvC,IAAI,CAACwC,UAArC,GAAkDxC,IAAI,CAACyC,SADjD,CADF,CADa,CAAvB;;AAOF,WAAK,YAAL;AACE;AACA,eAAOxF,gBAAgB,CAACyF,cAAc,CAAC1C,IAAI,CAAC2C,IAAN,CAAf,CAAvB;;AACF,WAAK,SAAL;AAAgB;AACd;AACA,cAAI3C,IAAI,CAAC4C,KAAT,EAAgB;AACd,gBAAI5C,IAAI,CAACzB,KAAL,KAAe,IAAnB,EAAyB;AACvB;AACA,oBAAM,IAAIsE,WAAJ,uCAA+C7C,IAAI,CAACV,GAApD,EAAN;AACD;;AACD,gBAAIU,IAAI,CAAC4C,KAAL,CAAWE,KAAX,CAAiBC,QAAjB,CAA0B,GAA1B,CAAJ,EAAoC;AAClC;AACA,oBAAM,IAAIF,WAAJ,2DAC+C7C,IAAI,CAACV,GADpD,EAAN;AAGD;AACF;;AACD,iBAAOrC,gBAAgB,CAAC+C,IAAI,CAACzB,KAAN,CAAvB;AACD;;AACD,WAAK,mBAAL;AAA0B;AACxB;AACA,cAAMwC,UAAS,GAAGnF,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACc,IAAN,CAAT,CAA1B;;AACA,kBAAQd,IAAI,CAACoB,QAAb;AACE,iBAAK,IAAL;AACE,qBAAOnE,gBAAgB,CACrB8D,UAAS,IAAInF,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAAT,CADA,CAAvB;;AAGF,iBAAK,IAAL;AACE,qBAAOhE,gBAAgB,CACrB8D,UAAS,IAAInF,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAAT,CADA,CAAvB;;AAGF,iBAAK,IAAL;AACE,qBAAOhE,gBAAgB,CACrB8D,UADqB,aACrBA,UADqB,cACrBA,UADqB,GACRnF,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAAT,CADA,CAAvB;AAGF;;AACA;AACE,oBAAM,IAAI4B,WAAJ,EACJ;AACA;AAFI,sDAG6B7C,IAAI,CAACoB,QAHlC,OAAN;AAfJ;AAqBD;;AACD,WAAK,kBAAL;AAAyB;AACvB;AACA,cAAM4B,aAAa,GAAGjD,QAAQ,CAACC,IAAI,CAACiD,MAAN,EAAchD,gBAAd,CAAR,CACnBiB,KADH;AAEA,cAAMgC,SAAS,GAAGtH,QAAQ,CAACoH,aAAD,CAA1B;;AAIA,cACE,CAACE,SAAS,KAAKjB,SAAd,IAA2BiB,SAAS,KAAK,IAA1C,MACClD,IAAI,CAACkC,QAAL,IAAiBjC,gBAAjB,aAAiBA,gBAAjB,eAAiBA,gBAAgB,CAAEkC,OADpC,CADF,EAGE;AACAlC,YAAAA,gBAAgB,CAACkC,OAAjB,GAA2B,IAA3B;AACA,mBAAOlF,gBAAgB,CAACgF,SAAD,CAAvB;AACD;;AACD7E,UAAAA,QAAQ,CAAC8F,SAAD,CAAR;;AACA,cAAMrB,OAAM,GAAG7B,IAAI,CAACmD,QAAL,GACXC,uCAAuC,CACrCF,SADqC,EAErClD,IAAI,CAACqD,QAFgC,EAGrC,IAHqC,CAD5B,GAMXC,uCAAuC,CACrCJ,SADqC,EAErClD,IAAI,CAACqD,QAFgC,EAGrC,IAHqC,CAN3C;;AAWAjG,UAAAA,QAAQ,CAACyE,OAAD,CAAR;AACA,iBAAO5E,gBAAgB,CAAC4E,OAAD,CAAvB;AACD;;AACD,WAAK,eAAL;AACE;AACA,eAAO0B,WAAW,CAACvD,IAAI,CAAC+B,MAAN,EAAc/B,IAAI,CAACqC,SAAnB,CAAlB;;AACF,WAAK,kBAAL;AAAyB;AACvB;AACA,cAAMY,MAAoC,GAAG,EAA7C;;AACA,eAAK,IAAMO,IAAX,IAAoBxD,IAAD,CAAiCyD,UAApD,EAAgE;AAC9D,gBAAID,IAAI,CAACxF,IAAL,KAAc,eAAlB,EAAmC;AACjC,kBAAM0F,SAAS,GAAG9H,QAAQ,CAACmE,QAAQ,CAACyD,IAAI,CAAChD,QAAN,CAAT,CAA1B;AACAjE,cAAAA,kBAAkB,CAAC0G,MAAD,EAASS,SAAT,EAAoB,IAAIC,GAAJ,EAApB,CAAlB;AACD,aAHD,MAGO;AACL,kBAAIH,IAAI,CAACI,IAAL,KAAc,MAAlB,EAA0B;AACxB,sBAAM,IAAIf,WAAJ,CAAgB,kCAAhB,CAAN;AACD;;AACD,kBAAMgB,QAAQ,GACZ,CAACL,IAAI,CAACL,QAAN,IAAkBK,IAAI,CAAClF,GAAL,CAASN,IAAT,KAAkB,YAApC,GACIwF,IAAI,CAAClF,GAAL,CAASqE,IADb,GAEImB,4BAA4B,CAACN,IAAI,CAAClF,GAAN,CAHlC;;AAIA,kBAAIuF,QAAQ,KAAK,WAAjB,EAA8B;AAC5B,sBAAM,IAAIpC,SAAJ,CACJ,6CADI,CAAN;AAGD;;AACDwB,cAAAA,MAAM,CAACY,QAAD,CAAN,GAAmBjI,QAAQ,CAACmE,QAAQ,CAACyD,IAAI,CAACjF,KAAN,CAAT,CAA3B;AACD;AACF;;AACD,iBAAOtB,gBAAgB,CAACgG,MAAD,CAAvB;AACD;;AACD,WAAK,oBAAL;AAA2B;AACzB;AACA,cAAIpB,QAAJ;;AACA,eAAK,IAAMkC,IAAX,IAAmB/D,IAAI,CAACgE,WAAxB,EAAqC;AACnCnC,YAAAA,QAAM,GAAG5E,gBAAgB,CAACrB,QAAQ,CAACmE,QAAQ,CAACgE,IAAD,CAAT,CAAT,CAAzB;AACD;;AACD,iBAAOlC,QAAP;AACD;;AACD,WAAK,iBAAL;AAAwB;AACtB;AACA,cAAMoC,MAAgB,GAAG,CAACjE,IAAI,CAACb,MAAL,CAAY,CAAZ,EAAeZ,KAAf,CAAqBiB,MAAtB,CAAzB;AACA,cAAI0E,KAAK,GAAG,CAAZ;;AACA,eAAK,IAAMH,KAAX,IAAmB/D,IAAI,CAACgE,WAAxB,EAAqC;AACnC,gBAAMG,GAAG,GAAGvI,QAAQ,CAACmE,QAAQ,CAACgE,KAAD,CAAT,CAApB;AACAE,YAAAA,MAAM,CAACxD,IAAP,CAAY2D,MAAM,CAACD,GAAD,CAAlB;AACAF,YAAAA,MAAM,CAACxD,IAAP,CAAYT,IAAI,CAACb,MAAL,CAAa+E,KAAK,IAAI,CAAtB,EAA0B3F,KAA1B,CAAgCiB,MAA5C;AACD;;AACD,iBAAOvC,gBAAgB,CAACgH,MAAM,CAACI,IAAP,CAAY,EAAZ,CAAD,CAAvB;AACD;;AACD,WAAK,0BAAL;AAAiC;AAC/B;AACA,cAAMC,MAAM,GAAGvE,QAAQ,CAACC,IAAI,CAACuE,GAAN,CAAR,CAAmBrD,KAAlC;AACA,cAAMsD,OAAO,GAAG5I,QAAQ,CAAC0I,MAAD,CAAxB;AACAlH,UAAAA,QAAQ,CAACoH,OAAD,CAAR;AACA,iBAAOpC,YAAY,CAACoC,OAAD,EAAUF,MAAV,EAAkBtE,IAAI,CAACX,KAAvB,EAA8BW,IAAI,CAACuE,GAAnC,CAAnB;AACD;;AACD,WAAK,iBAAL;AAAwB;AACtB;AACA,cAAMzC,IAAG,GAAG/B,QAAQ,CAACC,IAAI,CAACQ,QAAN,CAAR,CAAwBU,KAApC;;AACA,cAAI,CAACnD,cAAD,IAAmBiC,IAAI,CAACoB,QAAL,KAAkB,QAAzC,EAAmD;AACjD;AACA,gBAAI,EAAEU,IAAG,YAAY5E,eAAjB,CAAJ,EAAuC;AACrC,qBAAOD,gBAAgB,CAAC,IAAD,CAAvB;AACD,aAJgD,CAKjD;;;AACA,gBAAInB,mBAAmB,CAACgG,IAAD,CAAvB,EAA8B;AAC5B,kBAAM2C,YAAY,GAAG,OACnB3C,IAAG,CAACH,IADsB,CAE1BG,IAAG,CAAC4C,aAFsB,CAA5B;AAGA,qBAAOzH,gBAAgB,CAACwH,YAAD,CAAvB;AACD,aAXgD,CAYjD;;AACD;;AACD,cAAIzE,IAAI,CAACoB,QAAL,KAAkB,QAAtB,EAAgC;AAC9B,gBAAIU,IAAG,YAAY5E,eAAf,IAAkC4E,IAAG,CAACH,IAAJ,KAAa,cAAnD,EAAmE;AACjE,qBAAO1E,gBAAgB,CAAC,WAAD,CAAvB;AACD;;AACD,mBAAOA,gBAAgB,CAAC,OAAOrB,QAAQ,CAACkG,IAAD,CAAhB,CAAvB;AACD;;AACD,iBAAO7E,gBAAgB,CACrBb,kBAAkB,CAACR,QAAQ,CAACkG,IAAD,CAAT,EAAgB9B,IAAI,CAACoB,QAArB,CADG,CAAvB;AAGD;AA/OH;;AAiPA,QAAI,CAACrD,cAAL,EAAqB;AACnB;AACA,cAAQiC,IAAI,CAAChC,IAAb;AACE,aAAK,sBAAL;AAA6B;AAC3B;AACA,gBAAIgC,IAAI,CAACoB,QAAL,KAAkB,GAAtB,EAA2B;AACzB,kBACE,EACEpB,IAAI,CAACc,IAAL,CAAU9C,IAAV,KAAmB,cAAnB,IACAgC,IAAI,CAACc,IAAL,CAAU9C,IAAV,KAAmB,eAFrB,CADF,EAKE;AACA,oBAAM2G,KAAI,GAAG5E,QAAQ,CAACC,IAAI,CAACc,IAAN,CAAR,CAAoBI,KAAjC,CADA,CAEA;;AACA,oBAAM0D,MAAI,GAAG7E,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAArB;;AACA,oBAAM4D,MAAI,GAAGjJ,QAAQ,CAACgJ,MAAD,CAArB;;AAEA5I,gBAAAA,QAAQ,CAAC2I,KAAD,EAAOE,MAAP,CAAR;AACA,uBAAO5H,gBAAgB,CAAC4H,MAAD,CAAvB;AACD;;AACD,kBAAMD,KAAI,GAAG7E,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAArB;;AACA,kBAAM4D,KAAI,GAAGjJ,QAAQ,CAACgJ,KAAD,CAArB;;AACAE,cAAAA,iCAAiC,CAAC9E,IAAI,CAACc,IAAN,EAAY+D,KAAZ,CAAjC;AACA,qBAAO5H,gBAAgB,CAAC4H,KAAD,CAAvB;AACD,aArB0B,CAsB3B;;;AACA,gBAAMF,IAAI,GAAG5E,QAAQ,CAACC,IAAI,CAACc,IAAN,CAAR,CAAoBI,KAAjC;AACA,gBAAM6D,IAAI,GAAGnJ,QAAQ,CAAC+I,IAAD,CAArB;AACA,gBAAMC,IAAI,GAAG7E,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAArB;AACA,gBAAM4D,IAAI,GAAGjJ,QAAQ,CAACgJ,IAAD,CAArB;AACA,gBAAMI,CAAC,GAAGxJ,8BAA8B,CAACuJ,IAAD,EAAO/E,IAAI,CAACoB,QAAZ,EAAsByD,IAAtB,CAAxC;AACA7I,YAAAA,QAAQ,CAAC2I,IAAD,EAAOK,CAAP,CAAR;AACA,mBAAO/H,gBAAgB,CAAC+H,CAAD,CAAvB;AACD;;AACD,aAAK,gBAAL;AAAuB;AACrB;AACA,gBAAI,CAAChF,IAAI,CAACiF,IAAL,CAAU3E,MAAf,EAAuB;AACrB,qBAAOrD,gBAAgB,CAACN,KAAD,CAAvB;AACD;;AACD,gBAAMuI,MAAM,GAAGC,iBAAiB,GAAG/G,kBAAnC;AACA,gBAAMgH,QAAQ,GAAG,IAAI3I,sBAAJ,CAA2ByI,MAA3B,CAAjB;AACAG,YAAAA,6BAA6B,CAACrF,IAAI,CAACiF,IAAN,EAAYG,QAAZ,CAA7B;AACAD,YAAAA,iBAAiB,GAAG/G,kBAApB,GAAyCgH,QAAzC;AACA,gBAAME,UAAU,GAAGC,qBAAqB,CAACvF,IAAI,CAACiF,IAAN,CAAxC;AACAE,YAAAA,iBAAiB,GAAG/G,kBAApB,GAAyC8G,MAAzC;AACA,mBAAOI,UAAP;AACD;;AACD,aAAK,gBAAL;AACE;AACA,iBAAO,IAAI9I,gBAAJ,CAAqB,OAArB,EAA8BG,KAA9B,CAAP;;AACF,aAAK,mBAAL;AACE;AACA,iBAAO,IAAIH,gBAAJ,CAAqB,UAArB,EAAiCG,KAAjC,CAAP;;AACF,aAAK,gBAAL;AACE;AACA,iBAAOM,gBAAgB,CAACN,KAAD,CAAvB;;AACF,aAAK,kBAAL;AACE;AACA,iBAAO6I,0BAA0B,CAACC,qBAAqB,CAACzF,IAAD,CAAtB,CAAjC;;AACF,aAAK,qBAAL;AACA,aAAK,gBAAL;AACE;AACA,iBAAOD,QAAQ,CAACC,IAAI,CAACsC,UAAN,CAAf;;AACF,aAAK,gBAAL;AACA,aAAK,gBAAL;AACE;AACA,iBAAOkD,0BAA0B,CAACE,qBAAqB,CAAC1F,IAAD,CAAtB,CAAjC;;AACF,aAAK,cAAL;AACE;AACA,iBAAOwF,0BAA0B,CAACG,iBAAiB,CAAC3F,IAAD,CAAlB,CAAjC;;AACF,aAAK,qBAAL;AACE;AACA,iBAAO/C,gBAAgB,CAACN,KAAD,CAAvB;;AACF,aAAK,oBAAL;AACE;AACA+D,UAAAA,wBAAwB,CAACV,IAAD,CAAxB;AACA,iBAAO/C,gBAAgB,CAAC2I,qCAAqC,CAAC5F,IAAD,CAAtC,CAAvB;;AACF,aAAK,aAAL;AACE;AACA,iBAAOpE,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACuC,IAAN,CAAT,CAAR,IACF,uBAAAzE,KAAK,CAAC+H,YAAN,yEAAA/H,KAAK,EAAgBkC,IAAhB,EAAsB,IAAtB,CAAL,EACD7D,WAAW,CAAC4D,QAAQ,CAACC,IAAI,CAACwC,UAAN,CAAT,EAA4BP,SAA5B,CAFR,IAGH,CAAC,wBAAAnE,KAAK,CAAC+H,YAAN,2EAAA/H,KAAK,EAAgBkC,IAAhB,EAAsB,MAAtB,CAAL,EAAoCA,IAAI,CAACyC,SAA1C,IACAtG,WAAW,CAAC4D,QAAQ,CAACC,IAAI,CAACyC,SAAN,CAAT,EAA2BR,SAA3B,CADX,GAEAhF,gBAAgB,CAACgF,SAAD,CALpB;;AAMF,aAAK,iBAAL;AAAwB;AACtB;AACA,gBAAI6D,CAAJ;;AACA,gBAAI9F,IAAI,CAACQ,QAAT,EAAmB;AACjB,kBAAMuF,OAAO,GAAGhG,QAAQ,CAACC,IAAI,CAACQ,QAAN,CAAxB;AACAsF,cAAAA,CAAC,GAAGlK,QAAQ,CAACmK,OAAD,CAAZ;AACD;;AACD,mBAAO,IAAIvJ,gBAAJ,CAAqB,QAArB,EAA+BsJ,CAA/B,CAAP;AACD;;AACD,aAAK,gBAAL;AACE;AACA,gBAAMlK,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACQ,QAAN,CAAT,CAAd;;AACF,aAAK,kBAAL;AAAyB;AACvB;AACA,gBAAMwF,GAAG,GAAGjG,QAAQ,CAACC,IAAI,CAACQ,QAAN,CAAR,CAAwBU,KAApC;AACA,gBAAM+E,QAAQ,GAAGC,MAAM,CAACtK,QAAQ,CAACoK,GAAD,CAAT,CAAvB;AACA,gBAAMG,QAAQ,GAAGnG,IAAI,CAACoB,QAAL,KAAkB,IAAlB,GAAyB6E,QAAQ,GAAG,CAApC,GAAwCA,QAAQ,GAAG,CAApE;AACAjK,YAAAA,QAAQ,CAACgK,GAAD,EAAMG,QAAN,CAAR;AACA,mBAAOlJ,gBAAgB,CAAC+C,IAAI,CAACoG,MAAL,GAAcD,QAAd,GAAyBF,QAA1B,CAAvB;AACD;;AACD,aAAK,YAAL;AACE,iBAAOV,qBAAqB,CAACvF,IAAI,CAACwC,UAAN,CAA5B;;AACF,aAAK,iBAAL;AAAwB;AACtB;AACA,gBAAMuD,QAAO,GAAGhG,QAAQ,CAACC,IAAI,CAACqG,YAAN,CAAxB;;AACA,gBAAMC,WAAW,GAAG1K,QAAQ,CAACmK,QAAD,CAA5B;AACA,gBAAMb,OAAM,GAAGC,iBAAiB,GAAG/G,kBAAnC;;AACA,gBAAMgH,SAAQ,GAAG,IAAI3I,sBAAJ,CAA2ByI,OAA3B,CAAjB;;AACAG,YAAAA,6BAA6B,CAACrF,IAAI,CAACuG,KAAN,EAAanB,SAAb,CAA7B;AACAD,YAAAA,iBAAiB,GAAG/G,kBAApB,GAAyCgH,SAAzC;AACA,gBAAMoB,CAAC,GAAGC,mBAAmB,CAACzG,IAAI,CAACuG,KAAN,EAAaD,WAAb,CAA7B;AACAnB,YAAAA,iBAAiB,GAAG/G,kBAApB,GAAyC8G,OAAzC;AACA,mBAAOM,0BAA0B,CAACgB,CAAD,CAAjC;AACD;;AACD,aAAK,cAAL;AAAqB;AACnB;AACA,gBAAIA,EAAJ;;AACA,gBAAI;AACFA,cAAAA,EAAC,GAAGzG,QAAQ,CAACC,IAAI,CAAC0G,KAAN,CAAZ;AACD,aAFD,CAEE,OAAOC,KAAP,EAAc;AACd,kBAAI3G,IAAI,CAAC4G,OAAT,EAAkB;AAAA;;AAChB,0CAAA9I,KAAK,CAACoC,cAAN,uFAAApC,KAAK,EAAkBkC,IAAI,CAAC4G,OAAvB,CAAL;AACAJ,gBAAAA,EAAC,GAAGK,qBAAqB,CAAC7G,IAAI,CAAC4G,OAAN,EAAeD,KAAf,CAAzB;AACD,eAHD,MAGO;AACL,sBAAMA,KAAN;AACD;AACF,aATD,SASU;AACR,kBAAI3G,IAAI,CAAC8G,SAAT,EAAoB;AAClB,oBAAMC,CAAC,GAAGhH,QAAQ,CAACC,IAAI,CAAC8G,SAAN,CAAlB;;AACA,oBAAIC,CAAC,CAACC,IAAF,KAAW,QAAf,EAAyB;AACvBR,kBAAAA,EAAC,GAAGO,CAAJ;AACD;AACF;AACF;;AACD,mBAAOP,EAAP;AACD;;AACD,aAAK,qBAAL;AAA4B;AAC1B;AACA,gBAAI3E,QAAJ;;AACA,iBAAK,IAAMoF,UAAX,IAAyBjH,IAAI,CAACkH,YAA9B,EAA4C;AAC1C,kBAAI,CAACD,UAAU,CAACE,IAAhB,EAAsB;AACpB;AACA,oBAAInH,IAAI,CAAC4D,IAAL,KAAc,KAAlB,EAAyB;AACvB/B,kBAAAA,QAAM,GAAG5E,gBAAgB,CAACN,KAAD,CAAzB;AACD,iBAFD,MAEO;AACL,sBAAMqJ,IAAG,GAAGtD,cAAc,CAAEuE,UAAU,CAACG,EAAZ,CAA8BzE,IAA/B,CAA1B;;AACAd,kBAAAA,QAAM,GAAGhG,2BAA2B,CAACmK,IAAD,EAAM/D,SAAN,CAApC;AACD;AACF,eARD,MAQO,IAAIgF,UAAU,CAACG,EAAX,CAAcpJ,IAAd,KAAuB,YAA3B,EAAyC;AAC9C,oBAAMqJ,SAAS,GAAGJ,UAAU,CAACG,EAAX,CAAczE,IAAhC;;AACA,oBAAMqD,KAAG,GAAGtD,cAAc,CAAC2E,SAAD,CAA1B,CAF8C,CAG9C;;;AACA,oBAAMC,GAAG,GAAGvH,QAAQ,CAACkH,UAAU,CAACE,IAAZ,CAApB;;AACA,oBAAM5I,MAAK,GAAG3C,QAAQ,CAAC0L,GAAD,CAAtB;;AACAzF,gBAAAA,QAAM,GACJ7B,IAAI,CAAC4D,IAAL,KAAc,KAAd,GACI5H,QAAQ,CAACgK,KAAD,EAAMzH,MAAN,CADZ,GAEI1C,2BAA2B,CAACmK,KAAD,EAAMzH,MAAN,CAHjC;AAID,eAVM,MAUA;AACL,oBAAM+I,IAAG,GAAGvH,QAAQ,CAACkH,UAAU,CAACE,IAAZ,CAApB;;AACA,oBAAMtC,MAAI,GAAGjJ,QAAQ,CAAC0L,IAAD,CAArB;;AACAzF,gBAAAA,QAAM,GAAG0F,qBAAqB,CAC5BN,UAAU,CAACG,EADiB,EAE5BvC,MAF4B,EAG5B7E,IAAI,CAAC4D,IAAL,KAAc,KAAd,GACI3B,SADJ,GAEIkD,iBAAiB,GAAG/G,kBALI,CAA9B;AAOD;AACF;;AACD,mBAAOyD,QAAP;AACD;;AACD,aAAK,gBAAL;AACE;AACA,iBAAO2D,0BAA0B,CAACgC,mBAAmB,CAACxH,IAAD,CAApB,CAAjC;AAjLJ;AAmLD,KAzaiB,CA0alB;;;AACA,UAAM,IAAI6C,WAAJ,kCAA2C7C,IAAI,CAAChC,IAAhD,OAAN;AACD,GAndQ,CAqdT;;;AACA,WAASmH,iBAAT,GAA+C;AAC7C,WAAO9G,qBAAqB,CAACA,qBAAqB,CAACiC,MAAtB,GAA+B,CAAhC,CAA5B;AACD,GAxdQ,CA0dT;;;AACA,WAASoC,cAAT,CACEC,IADF,EAEE8E,GAFF,EAGmB;AACjB,QAAI,CAACA,GAAL,EAAU;AACRA,MAAAA,GAAG,GAAGtC,iBAAiB,GAAG/G,kBAA1B;AACD;;AACD,WAAO/B,sBAAsB,CAACoL,GAAD,EAAM9E,IAAN,EAAY,IAAZ,CAA7B;AACD,GAneQ,CAqeT;AACA;;;AACA,WAASkE,qBAAT,CACE7G,IADF,EAEE0H,WAFF,EAGoB;AAClB,QAAMxC,MAAM,GAAGC,iBAAiB,GAAG/G,kBAAnC;AACA,QAAMuJ,QAAQ,GAAG,IAAIlL,sBAAJ,CAA2ByI,MAA3B,CAAjB;;AACA,SAAK,IAAM0C,OAAX,IAAsBtK,iBAAiB,CAAC0C,IAAI,CAAC6H,KAAN,CAAvC,EAAqD;AACnDF,MAAAA,QAAQ,CAACG,oBAAT,CAA8BF,OAA9B,EAAuC,KAAvC;AACD;;AACDzC,IAAAA,iBAAiB,GAAG/G,kBAApB,GAAyCuJ,QAAzC;AACAJ,IAAAA,qBAAqB,CAACvH,IAAI,CAAC6H,KAAN,EAAaH,WAAb,EAA0BC,QAA1B,CAArB;AACA,QAAMI,CAAC,GAAGhI,QAAQ,CAACC,IAAI,CAACiF,IAAN,CAAlB;AACAE,IAAAA,iBAAiB,GAAG/G,kBAApB,GAAyC8G,MAAzC;AACA,WAAO6C,CAAP;AACD,GArfQ,CAufT;AACA;;;AACA,WAASvC,0BAAT,CACEwC,UADF,EAEoB;AAClB,WAAOA,UAAU,CAAChB,IAAX,KAAoB,OAApB,GACHgB,UAAU,CAAC9G,KAAX,KAAqBvE,KAArB,GACEM,gBAAgB,CAACgF,SAAD,CADlB,GAEEhF,gBAAgB,CAAC+K,UAAU,CAAC9G,KAAZ,CAHf,GAIH8G,UAJJ;AAKD,GAjgBQ,CAmgBT;AACA;;;AACA,WAASvB,mBAAT,CACEF,KADF,EAEE0B,KAFF,EAGoB;AAClB,QAAIC,CAAJ;AAEA,QAAMC,gBAAgB,GAAG5B,KAAK,CAAC6B,SAAN,CAAiBC,UAAD,IAAgB,CAACA,UAAU,CAAC9F,IAA5C,CAAzB;AACA,QAAM+F,cAAc,GAAGH,gBAAgB,IAAI,CAA3C;AACA,QAAMI,CAAC,GAAGD,cAAc,GAAG/B,KAAK,CAACiC,KAAN,CAAY,CAAZ,EAAeL,gBAAf,CAAH,GAAsC5B,KAA9D;AACA,QAAIkC,KAAK,GAAG,KAAZ;;AACA,SAAK,IAAMC,CAAX,IAAgBH,CAAhB,EAAmB;AACjB,UAAI,CAACE,KAAL,EAAY;AACVA,QAAAA,KAAK,GAAGE,oBAAoB,CAACD,CAAD,EAAIT,KAAJ,CAA5B;AACD;;AACD,UAAIQ,KAAJ,EAAW;AACT,YAAMjC,GAAC,GAAGzG,QAAQ,CAAC2I,CAAD,CAAlB;;AACA,YAAIlC,GAAC,CAACtF,KAAF,KAAYvE,KAAhB,EAAuB;AACrBuL,UAAAA,CAAC,GAAG1B,GAAC,CAACtF,KAAN;AACD;;AACD,YAAIsF,GAAC,CAACQ,IAAF,KAAW,QAAf,EAAyB;AACvB,iBAAO7K,WAAW,CAACqK,GAAD,EAAI0B,CAAJ,CAAlB;AACD;AACF;AACF;;AAED,QAAI,CAACI,cAAL,EAAqB;AACnB,aAAOrL,gBAAgB,CAACiL,CAAD,CAAvB;AACD;;AAED,QAAIU,QAAQ,GAAG,KAAf;AACA,QAAMb,CAAC,GAAGxB,KAAK,CAACiC,KAAN,CAAYL,gBAAgB,GAAG,CAA/B,CAAV;;AACA,QAAI,CAACM,KAAL,EAAY;AACV,WAAK,IAAMC,EAAX,IAAgBX,CAAhB,EAAmB;AACjB,YAAI,CAACa,QAAL,EAAe;AACbA,UAAAA,QAAQ,GAAGD,oBAAoB,CAACD,EAAD,EAAIT,KAAJ,CAA/B;AACD;;AACD,YAAIW,QAAJ,EAAc;AACZ,cAAMpC,GAAC,GAAGzG,QAAQ,CAAC2I,EAAD,CAAlB;;AACA,cAAIlC,GAAC,CAACtF,KAAF,KAAYvE,KAAhB,EAAuB;AACrBuL,YAAAA,CAAC,GAAG1B,GAAC,CAACtF,KAAN;AACD;;AACD,cAAIsF,GAAC,CAACQ,IAAF,KAAW,QAAf,EAAyB;AACvB,mBAAO7K,WAAW,CAACqK,GAAD,EAAI0B,CAAJ,CAAlB;AACD;AACF;AACF;AACF;;AAED,QAAIU,QAAJ,EAAc;AACZ,aAAO3L,gBAAgB,CAACiL,CAAD,CAAvB;AACD;;AACD,QAAM1B,CAAC,GAAGzG,QAAQ,CAACwG,KAAK,CAAC4B,gBAAD,CAAN,CAAlB;;AACA,QAAI3B,CAAC,CAACtF,KAAF,KAAYvE,KAAhB,EAAuB;AACrBuL,MAAAA,CAAC,GAAG1B,CAAC,CAACtF,KAAN;AACD;;AACD,QAAIsF,CAAC,CAACQ,IAAF,KAAW,QAAf,EAAyB;AACvB,aAAO7K,WAAW,CAACqK,CAAD,EAAI0B,CAAJ,CAAlB;AACD,KAtDiB,CAwDlB;;;AACA,SAAK,IAAMQ,GAAX,IAAgBX,CAAhB,EAAmB;AACjB,UAAMvB,GAAC,GAAGzG,QAAQ,CAAC2I,GAAD,CAAlB;;AACA,UAAIlC,GAAC,CAACtF,KAAF,KAAYvE,KAAhB,EAAuB;AACrBuL,QAAAA,CAAC,GAAG1B,GAAC,CAACtF,KAAN;AACD;;AACD,UAAIsF,GAAC,CAACQ,IAAF,KAAW,QAAf,EAAyB;AACvB,eAAO7K,WAAW,CAACqK,GAAD,EAAI0B,CAAJ,CAAlB;AACD;AACF;;AACD,WAAOjL,gBAAgB,CAACiL,CAAD,CAAvB;AACD,GA3kBQ,CA6kBT;;;AACA,WAASS,oBAAT,CAA8BD,CAA9B,EAA6CT,KAA7C,EAAsE;AACpE,QAAMY,cAAc,GAAGjN,QAAQ,CAACmE,QAAQ,CAAC2I,CAAC,CAACnG,IAAH,CAAT,CAA/B;AACA,WAAO0F,KAAK,KAAKY,cAAjB;AACD,GAjlBQ,CAmlBT;AACA;;;AACA,WAASrB,mBAAT,CAA6BxH,IAA7B,EAAqE;AACnE,QAAIkI,CAAJ,CADmE,CAEnE;;AACA,WAAO,IAAP,EAAa;AACX,UAAMY,SAAS,GAAGlN,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACuC,IAAN,CAAT,CAA1B;;AACA,UAAI,CAACuG,SAAL,EAAgB;AACd,eAAO7L,gBAAgB,CAACiL,CAAD,CAAvB;AACD;;AACD,UAAMF,UAAU,GAAGjI,QAAQ,CAACC,IAAI,CAACiF,IAAN,CAA3B;;AACA,UAAI,CAAClJ,aAAa,CAACiM,UAAD,CAAlB,EAAgC;AAC9B,eAAO7L,WAAW,CAAC6L,UAAD,EAAaE,CAAb,CAAlB;AACD;;AACD,UAAIF,UAAU,CAAC9G,KAAX,KAAqBvE,KAAzB,EAAgC;AAC9BuL,QAAAA,CAAC,GAAGF,UAAU,CAAC9G,KAAf;AACD;AACF;AACF,GArmBQ,CAumBT;AACA;;;AACA,WAASuE,qBAAT,CAA+BzF,IAA/B,EAAyE;AACvE,QAAIkI,CAAJ,CADuE,CAEvE;;AACA,WAAO,IAAP,EAAa;AACX,UAAMF,UAAU,GAAGjI,QAAQ,CAACC,IAAI,CAACiF,IAAN,CAA3B;;AACA,UAAI,CAAClJ,aAAa,CAACiM,UAAD,CAAlB,EAAgC;AAC9B,eAAO7L,WAAW,CAAC6L,UAAD,EAAaE,CAAb,CAAlB;AACD;;AACD,UAAIF,UAAU,CAAC9G,KAAX,KAAqBvE,KAAzB,EAAgC;AAC9BuL,QAAAA,CAAC,GAAGF,UAAU,CAAC9G,KAAf;AACD;;AACD,UAAM4H,SAAS,GAAGlN,QAAQ,CAACmE,QAAQ,CAACC,IAAI,CAACuC,IAAN,CAAT,CAA1B;;AACA,UAAI,CAACuG,SAAL,EAAgB;AACd,eAAO7L,gBAAgB,CAACiL,CAAD,CAAvB;AACD;AACF;AACF,GAznBQ,CA2nBT;AACA;;;AACA,WAASxC,qBAAT,CACE1F,IADF,EAEoB;AAClB,QAAMgG,GAAG,GAAGhG,IAAI,CAACc,IAAjB;AACA,QAAMiI,qBAAqB,GAAG/C,GAAG,CAAChI,IAAJ,KAAa,qBAA3C;AACA,QAAMgL,OAAO,GAAGD,qBAAqB,GACjC/C,GAAG,CAACpC,IAAJ,KAAa,KAAb,GACE,YADF,GAEE,gBAH+B,GAIjC,YAJJ;AAKA,QAAMqF,uBAAuB,GAC3BD,OAAO,KAAK,gBAAZ,GAA+B1L,iBAAiB,CAAC0I,GAAD,CAAhD,GAAwD,EAD1D;AAEA,QAAMkD,aAAa,GACjBlJ,IAAI,CAAChC,IAAL,KAAc,gBAAd,GAAiC,WAAjC,GAA+C,SADjD;AAEA,QAAMmL,SAAS,GAAGC,qBAAqB,CACrCH,uBADqC,EAErCjJ,IAAI,CAACiB,KAFgC,EAGrCiI,aAHqC,CAAvC;;AAKA,QAAIC,SAAS,CAACnC,IAAV,KAAmB,QAAvB,EAAiC;AAC/B;AACA,aAAOmC,SAAP;AACD;;AACD,WAAOE,qBAAqB,CAC1BrD,GAD0B,EAE1BhG,IAAI,CAACiF,IAFqB,EAG1BkE,SAAS,CAACjI,KAHgB,EAI1BgI,aAJ0B,EAK1BF,OAL0B,CAA5B;AAOD,GA3pBQ,CA6pBT;;;AACA,WAASI,qBAAT,CACEH,uBADF,EAEElF,IAFF,EAGEmF,aAHF,EAIoB;AAClB,QAAMI,cAAc,GAAGnE,iBAAiB,EAAxC;AACA,QAAMD,MAAM,GAAGoE,cAAc,CAAClL,kBAA9B;;AACA,QAAI6K,uBAAuB,CAAC3I,MAAxB,GAAiC,CAArC,EAAwC;AACtC,UAAMiJ,MAAM,GAAG,IAAI9M,sBAAJ,CAA2ByI,MAA3B,CAAf;;AACA,WAAK,IAAMvC,IAAX,IAAmBsG,uBAAnB,EAA4C;AAC1CM,QAAAA,MAAM,CAACzB,oBAAP,CAA4BnF,IAA5B,EAAkC,KAAlC;AACD;;AACD2G,MAAAA,cAAc,CAAClL,kBAAf,GAAoCmL,MAApC;AACD;;AACD,QAAMxD,OAAO,GAAGhG,QAAQ,CAACgE,IAAD,CAAxB;AACAuF,IAAAA,cAAc,CAAClL,kBAAf,GAAoC8G,MAApC;AACA,QAAM4D,SAAS,GAAGlN,QAAQ,CAACmK,OAAD,CAA1B;;AACA,QAAImD,aAAa,KAAK,WAAtB,EAAmC;AACjC,UAAIJ,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK7G,SAAxC,EAAmD;AACjD,eAAO,IAAIzF,gBAAJ,CAAqB,OAArB,EAA8BG,KAA9B,CAAP;AACD;;AACD,UAAM6M,SAAQ,GAAGC,yBAAyB,CAACX,SAAD,CAA1C;;AACA,aAAO7L,gBAAgB,CAACuM,SAAD,CAAvB;AACD;;AACD,QAAMA,QAAQ,GAAG/N,wBAAwB,CAACqN,SAAD,CAAzC;AACA,WAAO7L,gBAAgB,CAACuM,QAAD,CAAvB;AACD;;AAED,WAASH,qBAAT,CACErJ,IADF,EAEE0J,IAFF,EAGEC,cAHF,EAIET,aAJF,EAKEF,OALF,EAMoB;AAClB,QAAMhD,GAAG,GACPgD,OAAO,KAAK,YAAZ,GACKhJ,IADL,GAEKA,IAAD,CAA8BkH,YAA9B,CAA2C,CAA3C,EAA8CE,EAHpD;AAIA,QAAMlC,MAAM,GAAGC,iBAAiB,GAAG/G,kBAAnC;AACA,QAAI8J,CAAJ,CANkB,CAOlB;AACA;AACA;AACA;AACA;;AACA,QAAM0B,aAAa,GACjB5D,GAAG,CAAChI,IAAJ,KAAa,eAAb,IAAgCgI,GAAG,CAAChI,IAAJ,KAAa,cAD/C,CAZkB,CAclB;;AACA,WAAO,IAAP,EAAa;AACX,UAAM;AAAE6L,QAAAA,IAAF;AAAQtL,QAAAA,KAAK,EAAEuL;AAAf,UAA6BH,cAAc,CAACI,IAAf,EAAnC;;AACA,UAAIF,IAAJ,EAAU;AACR,eAAO5M,gBAAgB,CAACiL,CAAD,CAAvB;AACD;;AACD,UAAI8B,MAAuB,SAA3B;AACA,UAAIC,YAAoC,SAAxC;;AACA,UAAIjB,OAAO,KAAK,gBAAhB,EAAkC;AAChCiB,QAAAA,YAAY,GAAG,IAAIxN,sBAAJ,CAA2ByI,MAA3B,CAAf;AACA5I,QAAAA,kCAAkC,CAChC0D,IADgC,EAEhCiK,YAFgC,CAAlC;AAIA9E,QAAAA,iBAAiB,GAAG/G,kBAApB,GAAyC6L,YAAzC;;AACA,YAAI,CAACL,aAAL,EAAoB;AAClB,cAAM,CAACM,OAAD,IAAY5M,iBAAiB,CAAC0I,GAAD,CAAnC;AACAgE,UAAAA,MAAM,GAAGtH,cAAc,CAACwH,OAAD,CAAvB;AACD;AACF,OAXD,MAWO,IAAI,CAACN,aAAL,EAAoB;AACzBI,QAAAA,MAAM,GAAGjK,QAAQ,CAACiG,GAAD,CAAR,CAAc9E,KAAvB;AACD;;AACD0I,MAAAA,aAAa,GACTZ,OAAO,KAAK,YAAZ,GACElE,iCAAiC,CAACkB,GAAD,EAAM8D,SAAN,CADnC,GAEEd,OAAO,KAAK,YAAZ,GACAzB,qBAAqB,CAACvB,GAAD,EAAM8D,SAAN,EAAiB7H,SAAjB,CADrB,GAEAsF,qBAAqB,CAACvB,GAAD,EAAM8D,SAAN,EAAiBG,YAAjB,CALd,GAMTjB,OAAO,KAAK,gBAAZ,GACAnN,2BAA2B,CAACmO,MAAD,EAASF,SAAT,CAD3B,GAEA9N,QAAQ,CAACgO,MAAD,EAASF,SAAT,CARZ;AAUA,UAAMjI,MAAM,GAAG9B,QAAQ,CAAC2J,IAAD,CAAvB;AACAvE,MAAAA,iBAAiB,GAAG/G,kBAApB,GAAyC8G,MAAzC;;AACA,UAAI,CAACnJ,aAAa,CAAC8F,MAAD,CAAlB,EAA4B;AAC1B,eAAO1F,WAAW,CAAC0F,MAAD,EAASqG,CAAT,CAAlB;AACD;;AACD,UAAIrG,MAAM,CAACX,KAAP,KAAiBvE,KAArB,EAA4B;AAC1BuL,QAAAA,CAAC,GAAGrG,MAAM,CAACX,KAAX;AACD;AACF;AACF,GAvvBQ,CAyvBT;;;AACA,YAAUuI,yBAAV,CAAoClL,KAApC,EAAuE;AACrE,SAAK,IAAMD,IAAX,IAAkBC,KAAlB,EAAyB;AACvB,YAAMD,IAAN;AACD;AACF,GA9vBQ,CAgwBT;AACA;;;AACA,WAASqH,iBAAT,CAA2B3F,IAA3B,EAAiE;AAAA;;AAC/D,QAAI,eAAAA,IAAI,CAACmH,IAAL,0DAAWnJ,IAAX,MAAoB,qBAAxB,EAA+C;AAC7C;AACA,UAAIgC,IAAI,CAACmH,IAAL,CAAUvD,IAAV,KAAmB,KAAvB,EAA8B;AAC5B7D,QAAAA,QAAQ,CAACC,IAAI,CAACmH,IAAN,CAAR;AACA,eAAOgD,iBAAiB,CAACnK,IAAI,CAACuC,IAAN,EAAYvC,IAAI,CAACoK,MAAjB,EAAyBpK,IAAI,CAACiF,IAA9B,EAAoC,EAApC,CAAxB;AACD,OAL4C,CAM7C;;;AACA,UAAMC,MAAM,GAAGC,iBAAiB,GAAG/G,kBAAnC;AACA,UAAMiM,OAAO,GAAG,IAAI5N,sBAAJ,CAA2ByI,MAA3B,CAAhB;AACA,UAAMoF,OAAO,GAAGtK,IAAI,CAACmH,IAAL,CAAUvD,IAAV,KAAmB,OAAnC;AACA,UAAM2G,UAAU,GAAGjN,iBAAiB,CAAC0C,IAAI,CAACmH,IAAN,CAApC;;AACA,WAAK,IAAMqD,EAAX,IAAiBD,UAAjB,EAA6B;AAC3B,YAAID,OAAJ,EAAa;AACXD,UAAAA,OAAO,CAAC3L,sBAAR,CAA+B8L,EAA/B,EAAmC,IAAnC;AACD,SAFD,MAEO;AACLH,UAAAA,OAAO,CAACvC,oBAAR,CAA6B0C,EAA7B,EAAiC,KAAjC;AACD;AACF;;AACDrF,MAAAA,iBAAiB,GAAG/G,kBAApB,GAAyCiM,OAAzC;AACAtK,MAAAA,QAAQ,CAACC,IAAI,CAACmH,IAAN,CAAR;AACA,UAAMsD,gBAAgB,GAAGH,OAAO,GAAG,EAAH,GAAQI,KAAK,CAACC,IAAN,CAAWJ,UAAX,CAAxC;AACA,UAAMK,UAAU,GAAGT,iBAAiB,CAClCnK,IAAI,CAACuC,IAD6B,EAElCvC,IAAI,CAACoK,MAF6B,EAGlCpK,IAAI,CAACiF,IAH6B,EAIlCwF,gBAJkC,CAApC;AAMAtF,MAAAA,iBAAiB,GAAG/G,kBAApB,GAAyC8G,MAAzC;AACA,aAAO0F,UAAP;AACD,KA9B8D,CA+B/D;;;AACA,QAAI5K,IAAI,CAACmH,IAAT,EAAe;AACb,UAAMpB,OAAO,GAAGhG,QAAQ,CAACC,IAAI,CAACmH,IAAN,CAAxB;AACAvL,MAAAA,QAAQ,CAACmK,OAAD,CAAR;AACD;;AACD,WAAOoE,iBAAiB,CAACnK,IAAI,CAACuC,IAAN,EAAYvC,IAAI,CAACoK,MAAjB,EAAyBpK,IAAI,CAACiF,IAA9B,EAAoC,EAApC,CAAxB;AACD,GAvyBQ,CAyyBT;;;AACA,WAASkF,iBAAT,CACE5H,IADF,EAEEsI,SAFF,EAGEnB,IAHF,EAIEoB,oBAJF,EAKoB;AAClBC,IAAAA,6BAA6B,CAACD,oBAAD,CAA7B;AACA,QAAI5C,CAAJ,CAFkB,CAGlB;;AACA,WAAO,IAAP,EAAa;AACX,UAAI3F,IAAJ,EAAU;AACR,YAAMyI,OAAO,GAAGjL,QAAQ,CAACwC,IAAD,CAAxB;AACA,YAAM0I,SAAS,GAAGrP,QAAQ,CAACoP,OAAD,CAA1B;;AACA,YAAI,CAACC,SAAL,EAAgB;AACd,iBAAOhO,gBAAgB,CAACiL,CAAD,CAAvB;AACD;AACF;;AACD,UAAMrG,MAAM,GAAG9B,QAAQ,CAAC2J,IAAD,CAAvB;;AACA,UAAI,CAAC3N,aAAa,CAAC8F,MAAD,CAAlB,EAA4B;AAC1B,eAAO1F,WAAW,CAAC0F,MAAD,EAASqG,CAAT,CAAlB;AACD;;AACD,UAAIrG,MAAM,CAACX,KAAX,EAAkB;AAChBgH,QAAAA,CAAC,GAAGrG,MAAM,CAACX,KAAX;AACD;;AACD6J,MAAAA,6BAA6B,CAACD,oBAAD,CAA7B;;AACA,UAAID,SAAJ,EAAe;AACb,YAAMK,MAAM,GAAGnL,QAAQ,CAAC8K,SAAD,CAAvB;AACAjP,QAAAA,QAAQ,CAACsP,MAAD,CAAR;AACD;AACF;AACF,GAx0BQ,CA00BT;;;AACA,WAASH,6BAAT,CACED,oBADF,EAEW;AACT,QAAIA,oBAAoB,CAACxK,MAArB,KAAgC,CAApC,EAAuC;AACrC;AACD;;AACD,QAAM6K,gBAAgB,GAAGhG,iBAAiB,GAAG/G,kBAA7C;AACA,QAAMgN,KAAK,GAAGD,gBAAgB,CAACE,QAA/B;AACA,QAAMC,gBAAgB,GAAG,IAAI7O,sBAAJ,CAA2B2O,KAA3B,CAAzB;;AACA,SAAK,IAAMG,EAAX,IAAiBT,oBAAjB,EAAuC;AACrCQ,MAAAA,gBAAgB,CAACxD,oBAAjB,CAAsCyD,EAAtC,EAA0C,KAA1C;AACA,UAAMC,SAAS,GAAGL,gBAAgB,CAACM,eAAjB,CAAiCF,EAAjC,EAAqC,KAArC,CAAlB;AACAD,MAAAA,gBAAgB,CAAC3M,iBAAjB,CAAmC4M,EAAnC,EAAuCC,SAAvC;AACD;;AACDrG,IAAAA,iBAAiB,GAAG/G,kBAApB,GAAyCkN,gBAAzC;AACD,GA11BQ,CA41BT;AACA;;;AACA,WAASxG,iCAAT,CACE4G,OADF,EAEEnN,KAFF,EAGoB;AAClB,QAAImN,OAAO,CAAC1N,IAAR,KAAiB,eAArB,EAAsC;AACpC/B,MAAAA,sBAAsB,CAACsC,KAAD,CAAtB;;AACA,UAAImN,OAAO,CAACjI,UAAR,CAAmBnD,MAAnB,GAA4B,CAAhC,EAAmC;AACjCqL,QAAAA,yCAAyC,CACtCD,OAAD,CAAiCjI,UADM,EAEvClF,KAFuC,CAAzC;AAID;;AACD,aAAOtB,gBAAgB,CAACN,KAAD,CAAvB;AACD;;AACD,QAAMgN,cAAc,GAAGlO,wBAAwB,CAAC8C,KAAD,CAA/C;AACA,WAAOqN,yCAAyC,CAC9CF,OAAO,CAACrL,QADsC,EAE9CsJ,cAF8C,CAAhD;AAID,GAj3BQ,CAm3BT;;;AACA,WAASgC,yCAAT,CACElI,UADF,EAEElF,KAFF,EAGQ;AACN,QAAMsN,aAAa,GAAG,IAAIlI,GAAJ,EAAtB;;AACA,SAAK,IAAMH,IAAX,IAAmBC,UAAnB,EAA+B;AAC7B,UAAID,IAAI,CAACxF,IAAL,KAAc,UAAlB,EAA8B;AAC5B,YAAM6F,QAAQ,GACZ,CAACL,IAAI,CAACL,QAAN,IAAkBK,IAAI,CAAClF,GAAL,CAASN,IAAT,KAAkB,YAApC,GACIwF,IAAI,CAAClF,GAAL,CAASqE,IADb,GAEKmB,4BAA4B,CAACN,IAAI,CAAClF,GAAN,CAHnC;AAIA,YAAMwN,WAAW,GACftI,IAAI,CAACjF,KAAL,CAAWP,IAAX,KAAoB,mBAApB,GACIwF,IAAI,CAACjF,KAAL,CAAWuC,IADf,GAEI0C,IAAI,CAACjF,KAHX;;AAIA,YAAIuN,WAAW,CAAC9N,IAAZ,KAAqB,YAAzB,EAAuC;AACrC,cAAM2G,IAAI,GAAGjC,cAAc,CAACoJ,WAAW,CAACnJ,IAAb,CAA3B;AACA,cAAImD,CAAC,GAAGnK,IAAI,CAAC4C,KAAD,EAAQsF,QAAR,CAAZ;;AACA,cAAIL,IAAI,CAACjF,KAAL,CAAWP,IAAX,KAAoB,mBAApB,IAA2C8H,CAAC,KAAK7D,SAArD,EAAgE;AAC9D;AACA,gBAAM8J,YAAY,GAAGhM,QAAQ,CAACyD,IAAI,CAACjF,KAAL,CAAW0C,KAAZ,CAA7B;AACA6E,YAAAA,CAAC,GAAGlK,QAAQ,CAACmQ,YAAD,CAAZ;AACD;;AACD/P,UAAAA,QAAQ,CAAC2I,IAAD,EAAOmB,CAAP,CAAR;AACA+F,UAAAA,aAAa,CAACG,GAAd,CAAkBnI,QAAlB;AACD,SAVD,MAUO;AACLoI,UAAAA,sCAAsC,CAACzI,IAAI,CAACjF,KAAN,EAAaA,KAAb,EAAoBsF,QAApB,CAAtC;AACAgI,UAAAA,aAAa,CAACG,GAAd,CAAkBnI,QAAlB;AACD;AACF,OAvBD,MAuBO;AACLqI,QAAAA,qCAAqC,CAAC1I,IAAD,EAAOjF,KAAP,EAAcsN,aAAd,CAArC;AACD;AACF;AACF,GAr5BQ,CAu5BT;;;AACA,WAASI,sCAAT,CACEjM,IADF,EAEEzB,KAFF,EAGE4N,YAHF,EAIoB;AAClB,QAAMC,gBAAgB,GACpBpM,IAAI,CAAChC,IAAL,KAAc,mBAAd,GAAoCgC,IAAI,CAACc,IAAzC,GAAgDd,IADlD;AAEA,QAAMqM,eAAe,GACnBD,gBAAgB,CAACpO,IAAjB,KAA0B,cAA1B,IACAoO,gBAAgB,CAACpO,IAAjB,KAA0B,eAF5B;AAGA,QAAI2G,IAAJ;;AACA,QAAI,CAAC0H,eAAL,EAAsB;AACpB1H,MAAAA,IAAI,GAAG5E,QAAQ,CAACqM,gBAAD,CAAR,CAA2BlL,KAAlC;AACD;;AACD,QAAM4E,CAAC,GAAGnK,IAAI,CAAC4C,KAAD,EAAQ4N,YAAR,CAAd;AACA,QAAIG,QAAJ;;AACA,QAAItM,IAAI,CAAChC,IAAL,KAAc,mBAAd,IAAqC8H,CAAC,KAAK7D,SAA/C,EAA0D;AACxD;AACA,UAAM8J,YAAY,GAAGhM,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAA7B;AACAqL,MAAAA,QAAQ,GAAG1Q,QAAQ,CAACmQ,YAAD,CAAnB;AACD,KAJD,MAIO;AACLO,MAAAA,QAAQ,GAAGxG,CAAX;AACD;;AACD,QAAIuG,eAAJ,EAAqB;AACnB,aAAOvH,iCAAiC,CAACsH,gBAAD,EAAmBE,QAAnB,CAAxC;AACD;;AACD,WAAOtQ,QAAQ,CAAC2I,IAAD,EAAO2H,QAAP,CAAf;AACD,GAn7BQ,CAq7BT;;;AACA,WAASJ,qCAAT,CACEK,YADF,EAEEhO,KAFF,EAGEsN,aAHF,EAIoB;AAClB,QAAMlH,IAAI,GAAG5E,QAAQ,CAACwM,YAAY,CAAC/L,QAAd,CAAR,CAAgCU,KAA7C;AACA,QAAMsL,OAAO,GAAGjQ,kBAAkB,CAAC,EAAD,EAAKgC,KAAL,EAAYsN,aAAZ,CAAlC;AACA,WAAO7P,QAAQ,CAAC2I,IAAD,EAAO6H,OAAP,CAAf;AACD,GA97BQ,CAg8BT;;;AACA,WAASZ,yCAAT,CACEvL,QADF,EAEEsJ,cAFF,EAGoB;AAClB,QAAI8C,MAAM,GAAGxP,gBAAgB,CAACN,KAAD,CAA7B;;AACA,SAAK,IAAMyD,OAAX,IAAsBC,QAAtB,EAAgC;AAC9B,UAAI,CAACD,OAAL,EAAc;AACZuJ,QAAAA,cAAc,CAACI,IAAf;AACA0C,QAAAA,MAAM,GAAGxP,gBAAgB,CAACN,KAAD,CAAzB;AACA;AACD;;AACD,UAAMyP,gBAAgB,GACpBhM,OAAO,CAACpC,IAAR,KAAiB,aAAjB,GACIoC,OAAO,CAACI,QADZ,GAEIJ,OAAO,CAACpC,IAAR,KAAiB,mBAAjB,GACAoC,OAAO,CAACU,IADR,GAEAV,OALN;AAMA,UAAMiM,eAAe,GACnBD,gBAAgB,CAACpO,IAAjB,KAA0B,cAA1B,IACAoO,gBAAgB,CAACpO,IAAjB,KAA0B,eAF5B;AAGA,UAAI2G,IAAqB,SAAzB;;AACA,UAAI,CAAC0H,eAAL,EAAsB;AACpB1H,QAAAA,IAAI,GAAG5E,QAAQ,CAACqM,gBAAD,CAAR,CAA2BlL,KAAlC;AACD;;AACD,UAAI4E,CAAU,SAAd;;AACA,UAAI1F,OAAO,CAACpC,IAAR,KAAiB,aAArB,EAAoC;AAClC,YAAM;AAAE6L,UAAAA,IAAF;AAAQtL,UAAAA,KAAK,EAAEuL;AAAf,YAA6BH,cAAc,CAACI,IAAf,EAAnC;;AACA,YAAMxL,OAAK,GAAGsL,IAAI,GAAG5H,SAAH,GAAe6H,SAAjC;;AACA,YAAI1J,OAAO,CAACpC,IAAR,KAAiB,mBAAjB,IAAwCO,OAAK,KAAK0D,SAAtD,EAAiE;AAC/D;AACA,cAAM8J,YAAY,GAAGhM,QAAQ,CAACK,OAAO,CAACa,KAAT,CAA7B;AACA6E,UAAAA,CAAC,GAAGlK,QAAQ,CAACmQ,YAAD,CAAZ;AACD,SAJD,MAIO;AACLjG,UAAAA,CAAC,GAAGvH,OAAJ;AACD;AACF,OAVD,MAUO;AACL;AACAuH,QAAAA,CAAC,GAAG,EAAJ;AACA,YAAI4G,CAAC,GAAG,CAAR,CAHK,CAIL;;AACA,eAAO,IAAP,EAAa;AACX,cAAM;AAAE7C,YAAAA,IAAI,EAAJA,KAAF;AAAQtL,YAAAA,KAAK,EAAEuL;AAAf,cAA6BH,cAAc,CAACI,IAAf,EAAnC;;AACA,cAAIF,KAAJ,EAAU;AACR;AACD;;AACA/D,UAAAA,CAAD,CAAiB4G,CAAjB,IAAsB5C,UAAtB;AACA4C,UAAAA,CAAC;AACF;AACF;;AACD,UAAIL,eAAJ,EAAqB;AACnBI,QAAAA,MAAM,GAAG3H,iCAAiC,CAACsH,gBAAD,EAAmBtG,CAAnB,CAA1C;AACD,OAFD,MAEO;AACL2G,QAAAA,MAAM,GAAGzQ,QAAQ,CAAC2I,IAAD,EAAOmB,CAAP,CAAjB;AACD;AACF;;AACD,WAAO2G,MAAP;AACD,GAz/BQ,CA2/BT;AACA;;;AACA,WAASrJ,uCAAT,CACEF,SADF,EAEEZ,UAFF,EAGEqK,MAHF,EAImB;AACjB,QAAMC,qBAAqB,GAAG7M,QAAQ,CAACuC,UAAD,CAAtC;AACA,QAAMuK,iBAAiB,GAAGjR,QAAQ,CAACgR,qBAAD,CAAlC;AACA,QAAME,WAAW,GAAG5Q,aAAa,CAAC2Q,iBAAD,CAAjC;AACA,WAAO,IAAI3P,eAAJ,CAAoBgG,SAApB,EAA+B4J,WAA/B,EAA4CH,MAA5C,CAAP;AACD,GAtgCQ,CAwgCT;;;AACA,WAASrJ,uCAAT,CACEJ,SADF,EAEE6J,UAFF,EAGEJ,MAHF,EAImB;AACjB,QAAMK,kBAAkB,GAAGD,UAAU,CAACpK,IAAtC;AACA,WAAO,IAAIzF,eAAJ,CAAoBgG,SAApB,EAA+B8J,kBAA/B,EAAmDL,MAAnD,CAAP;AACD,GAhhCQ,CAkhCT;AACA;;;AACA,WAAStH,6BAAT,CACE4H,IADF,EAEExF,GAFF,EAGQ;AACN,QAAMP,YAAY,GAAG3J,yBAAyB,CAAC0P,IAAD,EAAO;AACnDC,MAAAA,GAAG,EAAE,KAD8C;AAEnDC,MAAAA,QAAQ,EAAE;AAFyC,KAAP,CAA9C;;AAIA,SAAK,IAAMC,CAAX,IAAgBlG,YAAhB,EAA8B;AAC5B,UAAMmG,qBAAqB,GACzBD,CAAC,CAACpP,IAAF,KAAW,qBAAX,IAAoCoP,CAAC,CAACxJ,IAAF,KAAW,OADjD;;AAEA,WAAK,IAAM4G,EAAX,IAAiBlN,iBAAiB,CAAC8P,CAAD,CAAlC,EAAuC;AACrC,YAAIC,qBAAJ,EAA2B;AACzB5F,UAAAA,GAAG,CAAC/I,sBAAJ,CAA2B8L,EAA3B,EAA+B,IAA/B;AACD,SAFD,MAEO;AACL/C,UAAAA,GAAG,CAACK,oBAAJ,CAAyB0C,EAAzB,EAA6B,KAA7B;AACD;AACF;;AACD,UAAI4C,CAAC,CAACpP,IAAF,KAAW,qBAAf,EAAsC;AACpC,YAAM,CAACsP,GAAD,IAAOhQ,iBAAiB,CAAC8P,CAAD,CAA9B;;AACA,YAAMG,GAAE,GAAGC,yBAAyB,CAACJ,CAAD,EAAI3F,GAAJ,CAApC;;AACAA,QAAAA,GAAG,CAAC9I,iBAAJ,CAAsB2O,GAAtB,EAA0BC,GAA1B;AACD;AACF;AACF,GA5iCQ,CA8iCT;AACA;;;AACA,WAASnL,YAAT,CACEJ,IADF,EAEEF,GAFF,EAGE2L,IAHF,EAIE1L,MAJF,EAKoB;AAClB,QAAIL,SAAJ;;AACA,QAAII,GAAG,YAAY5E,eAAnB,EAAoC;AAClC,UAAIpB,mBAAmB,CAACgG,GAAD,CAAvB,EAA8B;AAC5BJ,QAAAA,SAAS,GAAGI,GAAG,CAACH,IAAhB;AACD;AACF;;AACD,QAAM+L,OAAO,GAAGC,sBAAsB,CAACF,IAAD,CAAtC;;AACA,QAAI,OAAOzL,IAAP,KAAgB,UAApB,EAAgC;AAC9B,UAAMX,QAAQ,GAAG1D,UAAU,CAAC2D,SAAX,CAAqBS,MAAM,CAACR,KAA5B,EAAmCQ,MAAM,CAACP,GAA1C,CAAjB;AACA,YAAM,IAAIC,SAAJ,WAAiBJ,QAAjB,wBAAN;AACD;;AACD,QAAMQ,MAAM,GAAGG,IAAI,CAAC4L,KAAL,CAAWlM,SAAX,EAAsBgM,OAAtB,CAAf;AACAtQ,IAAAA,QAAQ,CAACyE,MAAD,CAAR;AACA,WAAO5E,gBAAgB,CAAC4E,MAAD,CAAvB;AACD,GApkCQ,CAskCT;;;AACA,WAAS0B,WAAT,CACEsK,aADF,EAEEJ,IAFF,EAGoB;AAClB,QAAM3L,GAAG,GAAG/B,QAAQ,CAAC8N,aAAD,CAApB;AACA,QAAMC,WAAW,GAAGlS,QAAQ,CAACkG,GAAD,CAA5B;AACA,QAAM4L,OAAO,GAAGC,sBAAsB,CAACF,IAAD,CAAtC;;AACA,QACE,OAAOK,WAAP,KAAuB,UAAvB,IACCA,WAAD,CAA2C9Q,aAA3C,MAA8D,KAFhE,EAGE;AACA,UAAM+Q,eAAe,GAAGpQ,UAAU,CAAC2D,SAAX,CACtBuM,aAAa,CAACtM,KADQ,EAEtBsM,aAAa,CAACrM,GAFQ,CAAxB;AAIA,YAAM,IAAIC,SAAJ,WAAiBsM,eAAjB,2BAAN;AACD;;AACD,QAAI,CAAC1Q,oBAAoB,CAACyQ,WAAD,CAAzB,EAAwC;AACtC,UAAMC,gBAAe,GAAGpQ,UAAU,CAAC2D,SAAX,CACtBuM,aAAa,CAACtM,KADQ,EAEtBsM,aAAa,CAACrM,GAFQ,CAAxB;;AAIA,YAAM,IAAIC,SAAJ,WAAiBsM,gBAAjB,oCAAN;AACD;;AACD,WAAO9Q,gBAAgB,CAAC,IAAI6Q,WAAJ,CAAgB,GAAGJ,OAAnB,CAAD,CAAvB;AACD,GAhmCQ,CAkmCT;;;AACA,WAASC,sBAAT,CACEF,IADF,EAEa;AACX,QAAMtN,KAAgB,GAAG,EAAzB;;AACA,QAAIuK,KAAK,CAACsD,OAAN,CAAcP,IAAd,CAAJ,EAAyB;AACvB,WAAK,IAAMQ,GAAX,IAAkBR,IAAlB,EAAwB;AACtB,YAAIQ,GAAG,CAACjQ,IAAJ,KAAa,eAAjB,EAAkC;AAChC,cAAMuC,YAAY,GAAG3E,QAAQ,CAACmE,QAAQ,CAACkO,GAAG,CAACzN,QAAL,CAAT,CAA7B;AACAL,UAAAA,KAAK,CAACM,IAAN,CAAW,GAAGF,YAAd;AACD,SAHD,MAGO;AACLJ,UAAAA,KAAK,CAACM,IAAN,CAAW7E,QAAQ,CAACmE,QAAQ,CAACkO,GAAD,CAAT,CAAnB;AACD;AACF;AACF,KATD,MASO;AACL9N,MAAAA,KAAK,CAACM,IAAN,CAAW3B,iBAAiB,CAAC2O,IAAD,CAA5B;;AACA,WAAK,IAAM1J,IAAX,IAAmB0J,IAAI,CAACzJ,WAAxB,EAAqC;AACnC7D,QAAAA,KAAK,CAACM,IAAN,CAAW7E,QAAQ,CAACmE,QAAQ,CAACgE,IAAD,CAAT,CAAnB;AACD;AACF;;AACD,WAAO5D,KAAP;AACD,GAvnCQ,CAynCT;;;AACA,WAAS+N,YAAT,CACEvN,OADF,EAEE8M,IAFF,EAGW;AAAA;;AACT,yBAAA3P,KAAK,CAACqQ,UAAN,6EAAArQ,KAAK,EAAc6C,OAAO,CAACxD,UAAD,CAArB,CAAL;AACAiR,IAAAA,sBAAsB,CAACzN,OAAD,CAAtB;AACA,QAAMkB,MAAM,GAAGwM,wBAAwB,CAAC1N,OAAD,EAAU8M,IAAV,CAAvC;AACApP,IAAAA,qBAAqB,CAACiQ,GAAtB;;AACA,QAAIzM,MAAM,CAACmF,IAAP,KAAgB,QAApB,EAA8B;AAC5B,aAAOnF,MAAM,CAACX,KAAd;AACD;;AACD,WAAOe,SAAP;AACD,GAtoCQ,CAwoCT;;;AACA,WAASmM,sBAAT,CAAgCrH,CAAhC,EAAqE;AACnE,QAAMwH,aAAa,GAAG,IAAI1R,gBAAJ,EAAtB;AACA0R,IAAAA,aAAa,CAACC,QAAd,GAAyBzH,CAAzB;AACA,QAAM0H,QAAQ,GAAG,IAAI1R,mBAAJ,CAAwBgK,CAAC,CAACnK,WAAD,CAAzB,CAAjB;AACA2R,IAAAA,aAAa,CAACpQ,mBAAd,GAAoCsQ,QAApC;AACAF,IAAAA,aAAa,CAACnQ,kBAAd,GAAmCqQ,QAAnC;AACApQ,IAAAA,qBAAqB,CAACoC,IAAtB,CAA2B8N,aAA3B;AACA,WAAOA,aAAP;AACD,GAjpCQ,CAmpCT;;;AACA,WAASF,wBAAT,CACEtH,CADF,EAEE0G,IAFF,EAGoB;AAClB,WAAOiB,oBAAoB,CAAC3H,CAAC,CAACrK,cAAD,CAAF,EAAoBqK,CAApB,EAAuB0G,IAAvB,CAA3B;AACD,GAzpCQ,CA2pCT;;;AACA,WAASiB,oBAAT,CACEzJ,IADF,EAEE8B,CAFF,EAGE0G,IAHF,EAIoB;AAClBkB,IAAAA,gCAAgC,CAAC5H,CAAD,EAAI0G,IAAJ,CAAhC;;AACA,QAAI/C,KAAK,CAACsD,OAAN,CAAc/I,IAAd,CAAJ,EAAyB;AACvB,aAAOM,qBAAqB,CAACN,IAAD,CAA5B;AACD;;AACD,WAAO,IAAIzI,gBAAJ,CAAqB,QAArB,EAA+BZ,QAAQ,CAACmE,QAAQ,CAACkF,IAAD,CAAT,CAAvC,CAAP;AACD,GAtqCQ,CAwqCT;;;AACA,WAASM,qBAAT,CAA+BqJ,UAA/B,EAA0E;AACxE,QAAI/M,MAAM,GAAG5E,gBAAgB,CAACN,KAAD,CAA7B;;AACA,SAAK,IAAM+M,IAAX,IAAmBkF,UAAnB,EAA+B;AAC7B,UAAMC,CAAC,GAAG9O,QAAQ,CAAC2J,IAAD,CAAlB;;AACA,UAAImF,CAAC,CAAC7H,IAAF,KAAW,QAAf,EAAyB;AACvB,eAAO6H,CAAP;AACD;;AACDhN,MAAAA,MAAM,GAAG1F,WAAW,CAAC0F,MAAD,EAASgN,CAAC,CAAC3N,KAAX,CAApB;AACD;;AACD,WAAOW,MAAP;AACD,GAnrCQ,CAqrCT;;;AACA,WAAS8M,gCAAT,CACE3M,IADF,EAEEyL,IAFF,EAGQ;AACN,QAAMc,aAAa,GAAGpJ,iBAAiB,EAAvC;AACA,QAAM8H,IAAI,GAAGjL,IAAI,CAACtF,cAAD,CAAjB;AACA,QAAMoS,OAAO,GAAG9M,IAAI,CAAClF,gBAAD,CAApB;AACA,QAAMiS,cAAc,GAAGzR,iBAAiB,CAACwR,OAAD,CAAxC;AACA,QAAME,uBAAuB,GAAGxR,kBAAkB,CAACsR,OAAD,CAAlD;AACA,QAAMG,eAAe,GAAG1R,yBAAyB,CAAC0P,IAAD,EAAO;AACtDC,MAAAA,GAAG,EAAE,IADiD;AAEtDC,MAAAA,QAAQ,EAAE;AAF4C,KAAP,CAAjD;AAIA,QAAM+B,QAAQ,GAAG5R,iBAAiB,CAAC2R,eAAD,CAAlC,CAVM,CAYN;AACA;;AACA,QAAME,aAAuB,GAAG,EAAhC;AACA,QAAMC,qBAA4C,GAAG,EAArD;;AACA,SAAK,IAAIC,CAAC,GAAGJ,eAAe,CAAC3O,MAAhB,GAAyB,CAAtC,EAAyC+O,CAAC,IAAI,CAA9C,EAAiDA,CAAC,EAAlD,EAAsD;AACpD,UAAMjC,CAAC,GAAG6B,eAAe,CAACI,CAAD,CAAzB;;AACA,UAAIjC,CAAC,CAACpP,IAAF,KAAW,qBAAf,EAAsC;AACpC0C,QAAAA,wBAAwB,CAAC0M,CAAD,CAAxB;AACA,YAAM,CAACE,IAAD,IAAOhQ,iBAAiB,CAAC8P,CAAD,CAA9B;;AACA,YAAI,CAAC+B,aAAa,CAACpM,QAAd,CAAuBuK,IAAvB,CAAL,EAAiC;AAC/B6B,UAAAA,aAAa,CAACG,OAAd,CAAsBhC,IAAtB;AACA8B,UAAAA,qBAAqB,CAACE,OAAtB,CAA8BlC,CAA9B;AACD;AACF,OAPD,MAOO,IAAIxP,KAAJ,aAAIA,KAAJ,eAAIA,KAAK,CAAE2R,KAAX,EAAkB;AACvB,cAAM,IAAI1M,WAAJ,CACJ,kEADI,CAAN;AAGD;AACF;;AAED,QAAM4E,GAAG,GAAG8G,aAAa,CAACnQ,kBAA1B;;AACA,SAAK,IAAMoR,SAAX,IAAwBT,cAAxB,EAAwC;AACtC;AACAtH,MAAAA,GAAG,CAACK,oBAAJ,CAAyB0H,SAAzB,EAAoC,KAApC;AACD;;AAED,QAAM7F,cAAc,GAAGlO,wBAAwB,CAACgS,IAAD,CAA/C;AACAgC,IAAAA,6BAA6B,CAACX,OAAD,EAAUnF,cAAV,EAA0BlC,GAA1B,CAA7B;AAEA,QAAIiI,MAAJ;;AACA,QAAI,CAACV,uBAAL,EAA8B;AAC5B;AACA;AACA;AACA,WAAK,IAAMtC,CAAX,IAAgBwC,QAAhB,EAA0B;AACxB,YAAI,CAACH,cAAc,CAAChM,QAAf,CAAwB2J,CAAxB,CAAL,EAAiC;AAC/BjF,UAAAA,GAAG,CAACK,oBAAJ,CAAyB4E,CAAzB,EAA4B,KAA5B;AACAjF,UAAAA,GAAG,CAAC9I,iBAAJ,CAAsB+N,CAAtB,EAAyBzK,SAAzB;AACD;AACF;;AACDyN,MAAAA,MAAM,GAAGjI,GAAT;AACD,KAXD,MAWO;AACL;AACA;AACA;AACAiI,MAAAA,MAAM,GAAG,IAAIjT,sBAAJ,CAA2BgL,GAA3B,CAAT;AACA8G,MAAAA,aAAa,CAACpQ,mBAAd,GAAoCuR,MAApC,CALK,CAML;;AACA,WAAK,IAAMhD,EAAX,IAAgBwC,QAAhB,EAA0B;AACxBQ,QAAAA,MAAM,CAAC5H,oBAAP,CAA4B4E,EAA5B,EAA+B,KAA/B;AACA,YAAIiD,YAAqB,SAAzB;;AACA,YAAIZ,cAAc,CAAChM,QAAf,CAAwB2J,EAAxB,KAA8B,CAACyC,aAAa,CAACpM,QAAd,CAAuB2J,EAAvB,CAAnC,EAA8D;AAC5DiD,UAAAA,YAAY,GAAGlI,GAAG,CAACgE,eAAJ,CAAoBiB,EAApB,EAAuB,KAAvB,CAAf;AACD;;AACDgD,QAAAA,MAAM,CAAC/Q,iBAAP,CAAyB+N,EAAzB,EAA4BiD,YAA5B,EANwB,CAOxB;AACA;AACD;AACF;;AACD,QAAMC,MAAM,GAAGF,MAAf;AACAnB,IAAAA,aAAa,CAACnQ,kBAAd,GAAmCwR,MAAnC;AAEA,QAAMC,eAAe,GAAGtS,yBAAyB,CAAC0P,IAAD,EAAO;AACtDC,MAAAA,GAAG,EAAE,KADiD;AAEtDC,MAAAA,QAAQ,EAAE;AAF4C,KAAP,CAAjD;;AAIA,SAAK,IAAMC,EAAX,IAAgByC,eAAhB,EAAiC;AAC/B,WAAK,IAAMrF,EAAX,IAAiBlN,iBAAiB,CAAC8P,EAAD,CAAlC,EAAuC;AACrC;AACA,YAAKA,EAAD,CAA2BxJ,IAA3B,KAAoC,OAAxC,EAAiD;AAC/CgM,UAAAA,MAAM,CAAClR,sBAAP,CAA8B8L,EAA9B,EAAkC,IAAlC;AACD,SAFD,MAEO;AACLoF,UAAAA,MAAM,CAAC9H,oBAAP,CAA4B0C,EAA5B,EAAgC,KAAhC;AACD;AACF;AACF;;AAED,SAAK,IAAMsF,CAAX,IAAgBV,qBAAhB,EAAuC;AACrC,UAAM,CAAC9B,IAAD,IAAOhQ,iBAAiB,CAACwS,CAAD,CAA9B;;AACA,UAAMvC,IAAE,GAAGC,yBAAyB,CAACsC,CAAD,EAAIF,MAAJ,CAApC;;AACAF,MAAAA,MAAM,CAACK,iBAAP,CAAyBzC,IAAzB,EAA6BC,IAA7B,EAAiC,KAAjC;AACD;AACF,GAvxCQ,CAyxCT;;;AACA,WAASC,yBAAT,CACExL,IADF,EAEEgO,KAFF,EAGkB;AAChB,WAAOC,sBAAsB,CAACjO,IAAD,EAAOgO,KAAP,EAAc,IAAd,CAA7B;AACD,GA/xCQ,CAiyCT;;;AACA,WAASpK,qCAAT,CACEsK,kBADF,EAEkB;AAChB,QAAMF,KAAK,GAAG7K,iBAAiB,GAAG/G,kBAAlC;;AACA,QAAI8R,kBAAkB,CAAC9I,EAAvB,EAA2B;AACzB,UAAMzE,IAAI,GAAGuN,kBAAkB,CAAC9I,EAAnB,CAAsBzE,IAAnC;AACA,UAAMwN,OAAO,GAAG,IAAI1T,sBAAJ,CAA2BuT,KAA3B,CAAhB;AACAG,MAAAA,OAAO,CAACzR,sBAAR,CAA+BiE,IAA/B,EAAqC,KAArC;AACA,UAAMhC,OAAO,GAAGsP,sBAAsB,CACpCC,kBADoC,EAEpC;AACA;AACAC,MAAAA,OAJoC,EAKpC,IALoC,CAAtC;AAOAA,MAAAA,OAAO,CAACxR,iBAAR,CAA0BgE,IAA1B,EAAgChC,OAAhC;AACA,aAAOA,OAAP;AACD,KAbD,MAaO;AACL,UAAMA,QAAO,GAAGsP,sBAAsB,CAACC,kBAAD,EAAqBF,KAArB,EAA4B,IAA5B,CAAtC;;AACA,aAAOrP,QAAP;AACD;AACF,GAvzCQ,CAyzCT;;;AACA,WAASC,kCAAT,CACEwP,aADF,EAEkB;AAChB,QAAMJ,KAAK,GAAG7K,iBAAiB,GAAG/G,kBAAlC;AACA,QAAMuC,OAAO,GAAGsP,sBAAsB,CAACG,aAAD,EAAgBJ,KAAhB,EAAuB,KAAvB,CAAtC;AACA,WAAOrP,OAAP;AACD,GAh0CQ,CAk0CT;;;AACA,WAASsP,sBAAT,CACEI,UADF,EAKE;AACA;AACAL,EAAAA,KAPF,EAQEM,aARF,EASkB;AAChB,QAAMvJ,CAAC,GAAG,YAAY;AACpB;AACA,aAAOmH,YAAY,CAACnH,CAAD,EAAI1E,SAAJ,CAAnB;AACD,KAHD;;AAIA7D,IAAAA,MAAM,CAAC+R,gBAAP,CAAwBxJ,CAAxB,EAA2B;AACzB,OAAC5J,UAAD,GAAc;AACZoB,QAAAA,KAAK,EAAE8R;AADK,OADW;AAIzB,OAACvT,gBAAD,GAAoB;AAClByB,QAAAA,KAAK,EAAE8R,UAAU,CAACG;AADA,OAJK;AAOzB,OAAC9T,cAAD,GAAkB;AAChB6B,QAAAA,KAAK,EACH8R,UAAU,CAACpL,IAAX,CAAgBjH,IAAhB,KAAyB,gBAAzB,GACIqS,UAAU,CAACpL,IAAX,CAAgBA,IADpB,GAEIoL,UAAU,CAACpL;AAJD,OAPO;AAazB,OAACrI,WAAD,GAAe;AACb2B,QAAAA,KAAK,EAAEyR;AADM,OAbU;AAgBzB,OAAChT,aAAD,GAAiB;AACfuB,QAAAA,KAAK,EAAE+R;AADQ;AAhBQ,KAA3B;AAoBA,WAAOvJ,CAAP;AACD,GAt2CQ,CAw2CT;AACA;;;AACA,WAASQ,qBAAT,CACEvH,IADF,EAEEzB,KAFF,EAGEkS,WAHF,EAIoB;AAClB,YAAQzQ,IAAI,CAAChC,IAAb;AACE,WAAK,YAAL;AACE,eAAO0S,mBAAmB,CAAC1Q,IAAI,CAAC2C,IAAN,EAAYpE,KAAZ,EAAmBkS,WAAnB,CAA1B;;AACF,WAAK,eAAL;AACExU,QAAAA,sBAAsB,CAACsC,KAAD,CAAtB;AACA,eAAOoS,6BAA6B,CACjC3Q,IAAD,CAA8ByD,UADI,EAElClF,KAFkC,EAGlCkS,WAHkC,CAApC;;AAKF,WAAK,cAAL;AAAqB;AACnB,cAAM9G,cAAc,GAAGlO,wBAAwB,CAC7C8C,KAD6C,CAA/C;AAGA,iBAAOkR,6BAA6B,CAClCzP,IAAI,CAACK,QAD6B,EAElCsJ,cAFkC,EAGlC8G,WAHkC,CAApC;AAKD;AAnBH;AAqBD,GAp4CQ,CAs4CT;;;AACA,WAASE,6BAAT,CACElN,UADF,EAEElF,KAFF,EAGEkS,WAHF,EAIoB;AAClB,QAAM5E,aAAa,GAAG,IAAIlI,GAAJ,EAAtB;;AACA,SAAK,IAAMH,IAAX,IAAmBC,UAAnB,EAA+B;AAC7B,UAAID,IAAI,CAACxF,IAAL,KAAc,aAAlB,EAAiC;AAC/B,eAAO4S,yBAAyB,CAC9BpN,IAD8B,EAE9BjF,KAF8B,EAG9BkS,WAH8B,EAI9B5E,aAJ8B,CAAhC;AAMD;;AACD,UAAI,CAACrI,IAAI,CAACL,QAAN,IAAkBK,IAAI,CAAClF,GAAL,CAASN,IAAT,KAAkB,YAAxC,EAAsD;AACpD6S,QAAAA,0BAA0B,CACxBrN,IAAI,CAACjF,KADmB,EAExBA,KAFwB,EAGxBkS,WAHwB,EAIxBjN,IAAI,CAAClF,GAAL,CAASqE,IAJe,CAA1B;AAMAkJ,QAAAA,aAAa,CAACG,GAAd,CAAkBxI,IAAI,CAAClF,GAAL,CAASqE,IAA3B;AACD,OARD,MAQO;AACL,YAAMmO,CAAC,GAAGhN,4BAA4B,CAACN,IAAI,CAAClF,GAAN,CAAtC;AACAuS,QAAAA,0BAA0B,CACxBrN,IAAI,CAACjF,KADmB,EAExBA,KAFwB,EAGxBkS,WAHwB,EAIxBK,CAJwB,CAA1B;AAMAjF,QAAAA,aAAa,CAACG,GAAd,CAAkB8E,CAAlB;AACD;AACF;;AACD,WAAO7T,gBAAgB,CAACN,KAAD,CAAvB;AACD,GA16CQ,CA46CT;;;AACA,WAASmH,4BAAT,CAAsC9D,IAAtC,EAAqE;AACnE,QAAM6D,QAAQ,GAAGjI,QAAQ,CAACmE,QAAQ,CAACC,IAAD,CAAT,CAAzB;AACA,WAAO9D,aAAa,CAAC2H,QAAD,CAApB;AACD,GAh7CQ,CAk7CT;;;AACA,WAAS+M,yBAAT,CACErE,YADF,EAEEhO,KAFF,EAGEkS,WAHF,EAIE5E,aAJF,EAKoB;AAClB,QAAM7F,GAAG,GAAGtD,cAAc,CACvB6J,YAAY,CAAC/L,QAAd,CAAsCmC,IADd,EAExB8N,WAFwB,CAA1B;AAIA,QAAMjE,OAAO,GAAGjQ,kBAAkB,CAAC,EAAD,EAAKgC,KAAL,EAAYsN,aAAZ,CAAlC;;AACA,QAAI,CAAC4E,WAAL,EAAkB;AAChB,aAAOzU,QAAQ,CAACgK,GAAD,EAAMwG,OAAN,CAAf;AACD;;AACD,WAAO3Q,2BAA2B,CAACmK,GAAD,EAAMwG,OAAN,CAAlC;AACD,GAl8CQ,CAo8CT;;;AACA,WAASiD,6BAAT,CACEpP,QADF,EAEEsJ,cAFF,EAGE8G,WAHF,EAIoB;AAClB,QAAIpQ,QAAQ,CAACC,MAAT,KAAoB,CAAxB,EAA2B;AACzB,aAAOrD,gBAAgB,CAACN,KAAD,CAAvB;AACD;;AACD,QAAIkF,MAAJ;;AACA,SAAK,IAAM7B,KAAX,IAAmBK,QAAnB,EAA6B;AAC3B,UAAI,CAACL,KAAL,EAAW;AACT;AACA2J,QAAAA,cAAc,CAACI,IAAf;AACAlI,QAAAA,MAAM,GAAG5E,gBAAgB,CAACN,KAAD,CAAzB;AACD,OAJD,MAIO,IAAIqD,KAAI,CAAChC,IAAL,KAAc,aAAlB,EAAiC;AACtC;AACA,YAAIgC,KAAI,CAACQ,QAAL,CAAcxC,IAAd,KAAuB,YAA3B,EAAyC;AACvC,cAAMgI,GAAG,GAAGtD,cAAc,CAAC1C,KAAI,CAACQ,QAAL,CAAcmC,IAAf,EAAqB8N,WAArB,CAA1B;AACA,cAAMlI,CAAY,GAAG,EAArB;AACA,cAAImE,CAAC,GAAG,CAAR,CAHuC,CAIvC;;AACA,iBAAO,IAAP,EAAa;AACX,gBAAM;AAAE7C,cAAAA,IAAF;AAAQtL,cAAAA,KAAK,EAALA;AAAR,gBAAkBoL,cAAc,CAACI,IAAf,EAAxB;;AACA,gBAAIF,IAAJ,EAAU;AACRhI,cAAAA,MAAM,GAAG4O,WAAW,GAChB5U,2BAA2B,CAACmK,GAAD,EAAMuC,CAAN,CADX,GAEhBvM,QAAQ,CAACgK,GAAD,EAAMuC,CAAN,CAFZ;AAGA;AACD;;AACDA,YAAAA,CAAC,CAACmE,CAAD,CAAD,GAAOnO,OAAP;AACAmO,YAAAA,CAAC;AACF;AACF,SAhBD,MAgBO;AACL,cAAMnE,EAAY,GAAG,EAArB;AACA,cAAImE,GAAC,GAAG,CAAR,CAFK,CAGL;;AACA,iBAAO,IAAP,EAAa;AACX,gBAAM;AAAE7C,cAAAA,IAAI,EAAJA,MAAF;AAAQtL,cAAAA,KAAK,EAALA;AAAR,gBAAkBoL,cAAc,CAACI,IAAf,EAAxB;;AACA,gBAAIF,MAAJ,EAAU;AACRhI,cAAAA,MAAM,GAAG0F,qBAAqB,CAACvH,KAAI,CAACQ,QAAN,EAAgB+H,EAAhB,EAAmBkI,WAAnB,CAA9B;AACA;AACD;;AACDlI,YAAAA,EAAC,CAACmE,GAAD,CAAD,GAAOnO,OAAP;AACAmO,YAAAA,GAAC;AACF;AACF;AACF,OAhCM,MAgCA;AACL;AACA,YAAMqE,cAAc,GAClB/Q,KAAI,CAAChC,IAAL,KAAc,mBAAd,GAAoCgC,KAAI,CAACc,IAAzC,GAAgDd,KADlD;;AAEA,gBAAQ+Q,cAAc,CAAC/S,IAAvB;AACE,eAAK,eAAL;AACA,eAAK,cAAL;AAAqB;AACnB,kBAAI8H,CAAU,SAAd;AACA,kBAAM;AAAE+D,gBAAAA,IAAI,EAAJA,MAAF;AAAQtL,gBAAAA,KAAK,EAALA;AAAR,kBAAkBoL,cAAc,CAACI,IAAf,EAAxB;;AACA,kBAAI,CAACF,MAAL,EAAW;AACT/D,gBAAAA,CAAC,GAAGvH,OAAJ;AACD;;AACD,kBAAIyB,KAAI,CAAChC,IAAL,KAAc,mBAAd,IAAqC8H,CAAC,KAAK7D,SAA/C,EAA0D;AACxD,oBAAM8J,YAAY,GAAGhM,QAAQ,CAACC,KAAI,CAACiB,KAAN,CAA7B;AACA6E,gBAAAA,CAAC,GAAGlK,QAAQ,CAACmQ,YAAD,CAAZ;AACD;;AACDlK,cAAAA,MAAM,GAAG0F,qBAAqB,CAACwJ,cAAD,EAAiBjL,CAAjB,EAAoB2K,WAApB,CAA9B;AACA;AACD;;AACD,eAAK,YAAL;AAAmB;AACjB,kBAAMpJ,SAAS,GAAG0J,cAAc,CAACpO,IAAjC;;AACA,kBAAMqD,KAAG,GAAGtD,cAAc,CAAC2E,SAAD,EAAYoJ,WAAZ,CAA1B;;AACA,kBAAI3K,EAAU,SAAd;;AACA,kBAAM;AAAE+D,gBAAAA,IAAI,EAAJA,MAAF;AAAQtL,gBAAAA,KAAK,EAALA;AAAR,kBAAkBoL,cAAc,CAACI,IAAf,EAAxB;;AACA,kBAAI,CAACF,MAAL,EAAW;AACT/D,gBAAAA,EAAC,GAAGvH,OAAJ;AACD;;AACD,kBAAIyB,KAAI,CAAChC,IAAL,KAAc,mBAAd,IAAqC8H,EAAC,KAAK7D,SAA/C,EAA0D;AACxD;AACA,oBAAM8J,aAAY,GAAGhM,QAAQ,CAACC,KAAI,CAACiB,KAAN,CAA7B;;AACA6E,gBAAAA,EAAC,GAAGlK,QAAQ,CAACmQ,aAAD,CAAZ;AACD;;AACDlK,cAAAA,MAAM,GAAG4O,WAAW,GAChB5U,2BAA2B,CAACmK,KAAD,EAAMF,EAAN,CADX,GAEhB9J,QAAQ,CAACgK,KAAD,EAAMF,EAAN,CAFZ;AAGA;AACD;AAhCH;AAkCD;AACF;;AACD,WAAOjE,MAAP;AACD,GA5hDQ,CA8hDT;;;AACA,WAASgP,0BAAT,CACE7Q,IADF,EAEEzB,KAFF,EAGEkS,WAHF,EAIEtE,YAJF,EAKoB;AAClB,QAAM6E,YAAY,GAChBhR,IAAI,CAAChC,IAAL,KAAc,YAAd,IACCgC,IAAI,CAAChC,IAAL,KAAc,mBAAd,IAAqCgC,IAAI,CAACc,IAAL,CAAU9C,IAAV,KAAmB,YAF3D;;AAGA,QAAIgT,YAAJ,EAAkB;AAChB,UAAM3J,SAAS,GACbrH,IAAI,CAAChC,IAAL,KAAc,YAAd,GAA6BgC,IAAI,CAAC2C,IAAlC,GAA0C3C,IAAI,CAACc,IAAN,CAA0B6B,IADrE;AAEA,UAAMqD,GAAG,GAAGtD,cAAc,CAAC2E,SAAD,EAAYoJ,WAAZ,CAA1B;;AACA,UAAI3K,GAAC,GAAGnK,IAAI,CAAC4C,KAAD,EAAQ4N,YAAR,CAAZ;;AACA,UAAInM,IAAI,CAAChC,IAAL,KAAc,mBAAd,IAAqC8H,GAAC,KAAK7D,SAA/C,EAA0D;AACxD;AACA,YAAM8J,YAAY,GAAGhM,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAA7B;AACA6E,QAAAA,GAAC,GAAGlK,QAAQ,CAACmQ,YAAD,CAAZ;AACD;;AACD,UAAI,CAAC0E,WAAL,EAAkB;AAChB,eAAOzU,QAAQ,CAACgK,GAAD,EAAMF,GAAN,CAAf;AACD;;AACD,aAAOjK,2BAA2B,CAACmK,GAAD,EAAMF,GAAN,CAAlC;AACD;;AAED,QAAIA,CAAC,GAAGnK,IAAI,CAAC4C,KAAD,EAAQ4N,YAAR,CAAZ;;AACA,QAAInM,IAAI,CAAChC,IAAL,KAAc,mBAAd,IAAqC8H,CAAC,KAAK7D,SAA/C,EAA0D;AACxD,UAAM8J,cAAY,GAAGhM,QAAQ,CAACC,IAAI,CAACiB,KAAN,CAA7B;;AACA6E,MAAAA,CAAC,GAAGlK,QAAQ,CAACmQ,cAAD,CAAZ;AACD;;AACD,WAAOxE,qBAAqB,CAC1BvH,IAAI,CAAChC,IAAL,KAAc,mBAAd,GAAoCgC,IAAI,CAACc,IAAzC,GAAgDd,IADtB,EAE1B8F,CAF0B,EAG1B2K,WAH0B,CAA5B;AAKD,GAlkDQ,CAokDT;;;AACA,WAASC,mBAAT,CACE/N,IADF,EAEEpE,KAFF,EAGEkS,WAHF,EAIoB;AAClB;AACAA,IAAAA,WAAW,CAAC9R,iBAAZ,CAA8BgE,IAA9B,EAAoCpE,KAApC;AACA,WAAOtB,gBAAgB,CAACN,KAAD,CAAvB;AACD;;AAED,WAAS+D,wBAAT,CACEsB,IADF,EAEQ;AACN,QAAIA,IAAI,CAACiP,KAAL,IAAcjP,IAAI,CAACkP,SAAvB,EAAkC;AAChC,YAAM,IAAIrO,WAAJ,WACDb,IAAI,CAACiP,KAAL,GAAa,OAAb,GAAuB,WADtB,8BAAN;AAGD;;AACD,QAAIlT,cAAc,IAAI,CAAEiE,IAAD,CAAkCM,UAAzD,EAAqE;AACnE,YAAM,IAAIO,WAAJ,CACJ,qEADI,CAAN;AAGD;AACF;;AAED,MAAI9E,cAAJ,EAAoB;AAClB,WAAOnC,QAAQ,CAACmE,QAAQ,CAACrC,OAAD,CAAT,CAAf;AACD;;AAED,4BAAAI,KAAK,CAACoC,cAAN,uFAAApC,KAAK,EAAkBJ,OAAlB,CAAL;AACAgD,EAAAA,wBAAwB,CAAChD,OAAD,CAAxB;AACA,MAAM,CAAC4P,EAAD,IAAOhQ,iBAAiB,CAACI,OAAD,CAA9B,CApmDS,CAqmDT;;AACAO,EAAAA,OAAO,CAACS,sBAAR,CAA+B4O,EAA/B,EAAmC,IAAnC;AACA,MAAMC,EAAE,GAAGC,yBAAyB,CAAC9P,OAAD,EAAUO,OAAV,CAApC;AACAA,EAAAA,OAAO,CAACU,iBAAR,CAA0B2O,EAA1B,EAA8BC,EAA9B;AACA,SAAOA,EAAP;AACD","sourcesContent":["import {\n ArrayPattern,\n ArrowFunctionExpression,\n BlockStatement,\n CallExpression,\n CatchClause,\n DoWhileStatement,\n Expression,\n ForInStatement,\n ForOfStatement,\n ForStatement,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n NewExpression,\n ObjectPattern,\n PatternLike,\n RestElement,\n Statement,\n SwitchCase,\n TemplateLiteral,\n VariableDeclaration,\n WhileStatement,\n} from \"@babel/types\";\nimport { SimpleFunction } from \"@next-core/brick-types\";\nimport {\n ApplyStringOrNumericAssignment,\n CreateListIteratorRecord,\n ApplyStringOrNumericBinaryOperator,\n GetV,\n GetValue,\n InitializeReferencedBinding,\n IsPropertyReference,\n LoopContinues,\n PutValue,\n RequireObjectCoercible,\n ToPropertyKey,\n UpdateEmpty,\n ApplyUnaryOperator,\n GetIdentifierReference,\n ForDeclarationBindingInstantiation,\n CopyDataProperties,\n} from \"./context-free\";\nimport {\n CompletionRecord,\n DeclarativeEnvironment,\n ECMAScriptCode,\n Empty,\n Environment,\n EnvironmentRecord,\n ExecutionContext,\n FormalParameters,\n FunctionEnvironment,\n FunctionObject,\n IsConstructor,\n NormalCompletion,\n OptionalChainRef,\n ReferenceRecord,\n SourceNode,\n} from \"./ExecutionContext\";\nimport {\n EstreeLVal,\n EstreeNode,\n EstreeObjectExpression,\n EstreeObjectPattern,\n EstreeProperty,\n CookRules,\n} from \"./interfaces\";\nimport { sanitize, isAllowedConstructor } from \"./sanitize\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface CookOptions {\n rules?: CookRules;\n globalVariables?: Record<string, unknown>;\n hooks?: CookHooks;\n}\n\nexport interface CookHooks {\n beforeEvaluate?(node: EstreeNode): void;\n beforeCall?(node: EstreeNode): void;\n beforeBranch?(node: EstreeNode, branch: \"if\" | \"else\"): void;\n}\n\n/** For next-core internal usage only. */\nexport function cook(\n rootAst: FunctionDeclaration | Expression,\n codeSource: string,\n { rules, globalVariables = {}, hooks = {} }: CookOptions = {}\n): unknown {\n const expressionOnly = rootAst.type !== \"FunctionDeclaration\";\n\n const rootEnv = new DeclarativeEnvironment(null);\n const rootContext = new ExecutionContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n const executionContextStack = [rootContext];\n\n for (const [key, value] of Object.entries(globalVariables)) {\n rootEnv.CreateImmutableBinding(key, true);\n rootEnv.InitializeBinding(key, value);\n }\n\n const TemplateMap = new WeakMap<TemplateLiteral, string[]>();\n\n // https://tc39.es/ecma262/#sec-gettemplateobject\n function GetTemplateObject(templateLiteral: TemplateLiteral): string[] {\n const memo = TemplateMap.get(templateLiteral);\n if (memo) {\n return memo;\n }\n const rawObj = templateLiteral.quasis.map((quasi) => quasi.value.raw);\n const template = templateLiteral.quasis.map((quasi) => quasi.value.cooked);\n Object.freeze(rawObj);\n Object.defineProperty(template, \"raw\", {\n value: rawObj,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n Object.freeze(template);\n TemplateMap.set(templateLiteral, template);\n return template;\n }\n\n function Evaluate(\n node: EstreeNode,\n optionalChainRef?: OptionalChainRef\n ): CompletionRecord {\n hooks.beforeEvaluate?.(node);\n // Expressions:\n switch (node.type) {\n case \"ArrayExpression\": {\n // https://tc39.es/ecma262/#sec-array-initializer\n const array = [];\n for (const element of node.elements) {\n if (!element) {\n array.length += 1;\n } else if (element.type === \"SpreadElement\") {\n const spreadValues = GetValue(\n Evaluate(element.argument)\n ) as unknown[];\n array.push(...spreadValues);\n } else {\n array.push(GetValue(Evaluate(element)));\n }\n }\n return NormalCompletion(array);\n }\n case \"ArrowFunctionExpression\": {\n // https://tc39.es/ecma262/#sec-arrow-function-definitions\n ThrowIfFunctionIsInvalid(node);\n const closure = InstantiateArrowFunctionExpression(node);\n return NormalCompletion(closure);\n }\n case \"BinaryExpression\": {\n const leftRef = Evaluate(node.left);\n const leftValue = GetValue(leftRef);\n const rightRef = Evaluate(node.right).Value;\n const rightValue = GetValue(rightRef);\n if (expressionOnly && (node.operator as unknown) === \"|>\") {\n // Minimal pipeline operator is supported only in expression-only mode.\n // See https://tc39.es/proposal-pipeline-operator\n // and https://github.com/tc39/proposal-pipeline-operator\n if (typeof rightValue !== \"function\") {\n const funcName = codeSource.substring(\n node.right.start,\n node.right.end\n );\n throw new TypeError(`${funcName} is not a function`);\n }\n let thisValue;\n if (rightRef instanceof ReferenceRecord) {\n if (IsPropertyReference(rightRef)) {\n thisValue = rightRef.Base;\n }\n }\n return NormalCompletion(\n (rightValue as unknown as SimpleFunction).call(thisValue, leftValue)\n );\n }\n // https://tc39.es/ecma262/#sec-additive-operators\n const result = ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n node.operator,\n rightValue as number\n );\n return NormalCompletion(result);\n }\n case \"CallExpression\": {\n // https://tc39.es/ecma262/#sec-function-calls\n const ref = Evaluate(node.callee, optionalChainRef)\n .Value as ReferenceRecord;\n const func = GetValue(ref) as SimpleFunction;\n if (\n (func === undefined || func === null) &&\n (node.optional || optionalChainRef?.skipped)\n ) {\n optionalChainRef.skipped = true;\n return NormalCompletion(undefined);\n }\n sanitize(func);\n return EvaluateCall(func, ref, node.arguments, node.callee);\n }\n case \"ChainExpression\":\n // https://tc39.es/ecma262/#sec-optional-chains\n return Evaluate(node.expression, {});\n case \"ConditionalExpression\":\n // https://tc39.es/ecma262/#sec-conditional-operator\n return NormalCompletion(\n GetValue(\n Evaluate(\n GetValue(Evaluate(node.test)) ? node.consequent : node.alternate\n )\n )\n );\n case \"Identifier\":\n // https://tc39.es/ecma262/#sec-identifiers\n return NormalCompletion(ResolveBinding(node.name));\n case \"Literal\": {\n // https://tc39.es/ecma262/#sec-primary-expression-literals\n if (node.regex) {\n if (node.value === null) {\n // Invalid regular expression fails silently in @babel/parser.\n throw new SyntaxError(`Invalid regular expression: ${node.raw}`);\n }\n if (node.regex.flags.includes(\"u\")) {\n // Currently unicode flag is not fully supported across major browsers.\n throw new SyntaxError(\n `Unsupported unicode flag in regular expression: ${node.raw}`\n );\n }\n }\n return NormalCompletion(node.value);\n }\n case \"LogicalExpression\": {\n // https://tc39.es/ecma262/#sec-binary-logical-operators\n const leftValue = GetValue(Evaluate(node.left));\n switch (node.operator) {\n case \"&&\":\n return NormalCompletion(\n leftValue && GetValue(Evaluate(node.right))\n );\n case \"||\":\n return NormalCompletion(\n leftValue || GetValue(Evaluate(node.right))\n );\n case \"??\":\n return NormalCompletion(\n leftValue ?? GetValue(Evaluate(node.right))\n );\n // istanbul ignore next\n default:\n throw new SyntaxError(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore never reach here.\n `Unsupported logical operator '${node.operator}'`\n );\n }\n }\n case \"MemberExpression\": {\n // https://tc39.es/ecma262/#sec-property-accessors\n const baseReference = Evaluate(node.object, optionalChainRef)\n .Value as ReferenceRecord;\n const baseValue = GetValue(baseReference) as Record<\n PropertyKey,\n unknown\n >;\n if (\n (baseValue === undefined || baseValue === null) &&\n (node.optional || optionalChainRef?.skipped)\n ) {\n optionalChainRef.skipped = true;\n return NormalCompletion(undefined);\n }\n sanitize(baseValue);\n const result = node.computed\n ? EvaluatePropertyAccessWithExpressionKey(\n baseValue,\n node.property as Expression,\n true\n )\n : EvaluatePropertyAccessWithIdentifierKey(\n baseValue,\n node.property as Identifier,\n true\n );\n sanitize(result);\n return NormalCompletion(result);\n }\n case \"NewExpression\":\n // https://tc39.es/ecma262/#sec-new-operator\n return EvaluateNew(node.callee, node.arguments);\n case \"ObjectExpression\": {\n // https://tc39.es/ecma262/#sec-object-initializer\n const object: Record<PropertyKey, unknown> = {};\n for (const prop of (node as EstreeObjectExpression).properties) {\n if (prop.type === \"SpreadElement\") {\n const fromValue = GetValue(Evaluate(prop.argument));\n CopyDataProperties(object, fromValue, new Set());\n } else {\n if (prop.kind !== \"init\") {\n throw new SyntaxError(\"Unsupported object getter/setter\");\n }\n const propName =\n !prop.computed && prop.key.type === \"Identifier\"\n ? prop.key.name\n : EvaluateComputedPropertyName(prop.key);\n if (propName === \"__proto__\") {\n throw new TypeError(\n \"Setting '__proto__' property is not allowed\"\n );\n }\n object[propName] = GetValue(Evaluate(prop.value));\n }\n }\n return NormalCompletion(object);\n }\n case \"SequenceExpression\": {\n // https://tc39.es/ecma262/#sec-comma-operator\n let result: CompletionRecord;\n for (const expr of node.expressions) {\n result = NormalCompletion(GetValue(Evaluate(expr)));\n }\n return result;\n }\n case \"TemplateLiteral\": {\n // https://tc39.es/ecma262/#sec-template-literals\n const chunks: string[] = [node.quasis[0].value.cooked];\n let index = 0;\n for (const expr of node.expressions) {\n const val = GetValue(Evaluate(expr));\n chunks.push(String(val));\n chunks.push(node.quasis[(index += 1)].value.cooked);\n }\n return NormalCompletion(chunks.join(\"\"));\n }\n case \"TaggedTemplateExpression\": {\n // https://tc39.es/ecma262/#sec-tagged-templates\n const tagRef = Evaluate(node.tag).Value as ReferenceRecord;\n const tagFunc = GetValue(tagRef) as SimpleFunction;\n sanitize(tagFunc);\n return EvaluateCall(tagFunc, tagRef, node.quasi, node.tag);\n }\n case \"UnaryExpression\": {\n // https://tc39.es/ecma262/#sec-unary-operators\n const ref = Evaluate(node.argument).Value as ReferenceRecord;\n if (!expressionOnly && node.operator === \"delete\") {\n // Delete operator is supported only in function mode.\n if (!(ref instanceof ReferenceRecord)) {\n return NormalCompletion(true);\n }\n // istanbul ignore else\n if (IsPropertyReference(ref)) {\n const deleteStatus = delete (\n ref.Base as Record<PropertyKey, unknown>\n )[ref.ReferenceName];\n return NormalCompletion(deleteStatus);\n }\n // Should never reach here in strict mode.\n }\n if (node.operator === \"typeof\") {\n if (ref instanceof ReferenceRecord && ref.Base === \"unresolvable\") {\n return NormalCompletion(\"undefined\");\n }\n return NormalCompletion(typeof GetValue(ref));\n }\n return NormalCompletion(\n ApplyUnaryOperator(GetValue(ref), node.operator)\n );\n }\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\": {\n // https://tc39.es/ecma262/#sec-assignment-operators\n if (node.operator === \"=\") {\n if (\n !(\n node.left.type === \"ArrayPattern\" ||\n node.left.type === \"ObjectPattern\"\n )\n ) {\n const lref = Evaluate(node.left).Value as ReferenceRecord;\n // Todo: IsAnonymousFunctionDefinition(lref)\n const rref = Evaluate(node.right);\n const rval = GetValue(rref);\n\n PutValue(lref, rval);\n return NormalCompletion(rval);\n }\n const rref = Evaluate(node.right);\n const rval = GetValue(rref) as string | number;\n DestructuringAssignmentEvaluation(node.left, rval);\n return NormalCompletion(rval);\n }\n // Operators other than `=`.\n const lref = Evaluate(node.left).Value as ReferenceRecord;\n const lval = GetValue(lref) as string | number;\n const rref = Evaluate(node.right);\n const rval = GetValue(rref) as string | number;\n const r = ApplyStringOrNumericAssignment(lval, node.operator, rval);\n PutValue(lref, r);\n return NormalCompletion(r);\n }\n case \"BlockStatement\": {\n // https://tc39.es/ecma262/#sec-block\n if (!node.body.length) {\n return NormalCompletion(Empty);\n }\n const oldEnv = getRunningContext().LexicalEnvironment;\n const blockEnv = new DeclarativeEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n getRunningContext().LexicalEnvironment = blockEnv;\n const blockValue = EvaluateStatementList(node.body);\n getRunningContext().LexicalEnvironment = oldEnv;\n return blockValue;\n }\n case \"BreakStatement\":\n // https://tc39.es/ecma262/#sec-break-statement\n return new CompletionRecord(\"break\", Empty);\n case \"ContinueStatement\":\n // https://tc39.es/ecma262/#sec-continue-statement\n return new CompletionRecord(\"continue\", Empty);\n case \"EmptyStatement\":\n // https://tc39.es/ecma262/#sec-empty-statement\n return NormalCompletion(Empty);\n case \"DoWhileStatement\":\n // https://tc39.es/ecma262/#sec-do-while-statement\n return EvaluateBreakableStatement(DoWhileLoopEvaluation(node));\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n // https://tc39.es/ecma262/#sec-expression-statement\n return Evaluate(node.expression);\n case \"ForInStatement\":\n case \"ForOfStatement\":\n // https://tc39.es/ecma262/#sec-for-in-and-for-of-statements\n return EvaluateBreakableStatement(ForInOfLoopEvaluation(node));\n case \"ForStatement\":\n // https://tc39.es/ecma262/#sec-for-statement\n return EvaluateBreakableStatement(ForLoopEvaluation(node));\n case \"FunctionDeclaration\":\n // https://tc39.es/ecma262/#sec-function-definitions\n return NormalCompletion(Empty);\n case \"FunctionExpression\":\n // https://tc39.es/ecma262/#sec-function-defining-expressions\n ThrowIfFunctionIsInvalid(node);\n return NormalCompletion(InstantiateOrdinaryFunctionExpression(node));\n case \"IfStatement\":\n // https://tc39.es/ecma262/#sec-if-statement\n return GetValue(Evaluate(node.test))\n ? (hooks.beforeBranch?.(node, \"if\"),\n UpdateEmpty(Evaluate(node.consequent), undefined))\n : (hooks.beforeBranch?.(node, \"else\"), node.alternate)\n ? UpdateEmpty(Evaluate(node.alternate), undefined)\n : NormalCompletion(undefined);\n case \"ReturnStatement\": {\n // https://tc39.es/ecma262/#sec-return-statement\n let v: unknown;\n if (node.argument) {\n const exprRef = Evaluate(node.argument);\n v = GetValue(exprRef);\n }\n return new CompletionRecord(\"return\", v);\n }\n case \"ThrowStatement\":\n // https://tc39.es/ecma262/#sec-throw-statement\n throw GetValue(Evaluate(node.argument));\n case \"UpdateExpression\": {\n // https://tc39.es/ecma262/#sec-update-expressions\n const lhs = Evaluate(node.argument).Value as ReferenceRecord;\n const oldValue = Number(GetValue(lhs));\n const newValue = node.operator === \"++\" ? oldValue + 1 : oldValue - 1;\n PutValue(lhs, newValue);\n return NormalCompletion(node.prefix ? newValue : oldValue);\n }\n case \"SwitchCase\":\n return EvaluateStatementList(node.consequent);\n case \"SwitchStatement\": {\n // https://tc39.es/ecma262/#sec-switch-statement\n const exprRef = Evaluate(node.discriminant);\n const switchValue = GetValue(exprRef);\n const oldEnv = getRunningContext().LexicalEnvironment;\n const blockEnv = new DeclarativeEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n getRunningContext().LexicalEnvironment = blockEnv;\n const R = CaseBlockEvaluation(node.cases, switchValue);\n getRunningContext().LexicalEnvironment = oldEnv;\n return EvaluateBreakableStatement(R);\n }\n case \"TryStatement\": {\n // https://tc39.es/ecma262/#sec-try-statement\n let R: CompletionRecord;\n try {\n R = Evaluate(node.block);\n } catch (error) {\n if (node.handler) {\n hooks.beforeEvaluate?.(node.handler);\n R = CatchClauseEvaluation(node.handler, error);\n } else {\n throw error;\n }\n } finally {\n if (node.finalizer) {\n const F = Evaluate(node.finalizer);\n if (F.Type !== \"normal\") {\n R = F;\n }\n }\n }\n return R;\n }\n case \"VariableDeclaration\": {\n // https://tc39.es/ecma262/#sec-declarations-and-the-variable-statement\n let result: CompletionRecord;\n for (const declarator of node.declarations) {\n if (!declarator.init) {\n // Assert: a declarator without init is always an identifier.\n if (node.kind === \"var\") {\n result = NormalCompletion(Empty);\n } else {\n const lhs = ResolveBinding((declarator.id as Identifier).name);\n result = InitializeReferencedBinding(lhs, undefined);\n }\n } else if (declarator.id.type === \"Identifier\") {\n const bindingId = declarator.id.name;\n const lhs = ResolveBinding(bindingId);\n // Todo: IsAnonymousFunctionDefinition(Initializer)\n const rhs = Evaluate(declarator.init);\n const value = GetValue(rhs);\n result =\n node.kind === \"var\"\n ? PutValue(lhs, value)\n : InitializeReferencedBinding(lhs, value);\n } else {\n const rhs = Evaluate(declarator.init);\n const rval = GetValue(rhs);\n result = BindingInitialization(\n declarator.id,\n rval,\n node.kind === \"var\"\n ? undefined\n : getRunningContext().LexicalEnvironment\n );\n }\n }\n return result;\n }\n case \"WhileStatement\":\n // https://tc39.es/ecma262/#sec-while-statement\n return EvaluateBreakableStatement(WhileLoopEvaluation(node));\n }\n }\n // eslint-disable-next-line no-console\n throw new SyntaxError(`Unsupported node type \\`${node.type}\\``);\n }\n\n // https://tc39.es/ecma262/#sec-execution-contexts\n function getRunningContext(): ExecutionContext {\n return executionContextStack[executionContextStack.length - 1];\n }\n\n // https://tc39.es/ecma262/#sec-resolvebinding\n function ResolveBinding(\n name: string,\n env?: EnvironmentRecord\n ): ReferenceRecord {\n if (!env) {\n env = getRunningContext().LexicalEnvironment;\n }\n return GetIdentifierReference(env, name, true);\n }\n\n // Try statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-catchclauseevaluation\n function CatchClauseEvaluation(\n node: CatchClause,\n thrownValue: unknown\n ): CompletionRecord {\n const oldEnv = getRunningContext().LexicalEnvironment;\n const catchEnv = new DeclarativeEnvironment(oldEnv);\n for (const argName of collectBoundNames(node.param)) {\n catchEnv.CreateMutableBinding(argName, false);\n }\n getRunningContext().LexicalEnvironment = catchEnv;\n BindingInitialization(node.param, thrownValue, catchEnv);\n const B = Evaluate(node.body);\n getRunningContext().LexicalEnvironment = oldEnv;\n return B;\n }\n\n // Iteration statements and switch statements.\n // https://tc39.es/ecma262/#prod-BreakableStatement\n function EvaluateBreakableStatement(\n stmtResult: CompletionRecord\n ): CompletionRecord {\n return stmtResult.Type === \"break\"\n ? stmtResult.Value === Empty\n ? NormalCompletion(undefined)\n : NormalCompletion(stmtResult.Value)\n : stmtResult;\n }\n\n // Switch statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseblockevaluation\n function CaseBlockEvaluation(\n cases: SwitchCase[],\n input: unknown\n ): CompletionRecord {\n let V: unknown;\n\n const defaultCaseIndex = cases.findIndex((switchCase) => !switchCase.test);\n const hasDefaultCase = defaultCaseIndex >= 0;\n const A = hasDefaultCase ? cases.slice(0, defaultCaseIndex) : cases;\n let found = false;\n for (const C of A) {\n if (!found) {\n found = CaseClauseIsSelected(C, input);\n }\n if (found) {\n const R = Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n }\n\n if (!hasDefaultCase) {\n return NormalCompletion(V);\n }\n\n let foundInB = false;\n const B = cases.slice(defaultCaseIndex + 1);\n if (!found) {\n for (const C of B) {\n if (!foundInB) {\n foundInB = CaseClauseIsSelected(C, input);\n }\n if (foundInB) {\n const R = Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n }\n }\n\n if (foundInB) {\n return NormalCompletion(V);\n }\n const R = Evaluate(cases[defaultCaseIndex]);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n\n // NOTE: The following is another complete iteration of the second CaseClauses.\n for (const C of B) {\n const R = Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n return NormalCompletion(V);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseclauseisselected\n function CaseClauseIsSelected(C: SwitchCase, input: unknown): boolean {\n const clauseSelector = GetValue(Evaluate(C.test));\n return input === clauseSelector;\n }\n\n // While statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-whileloopevaluation\n function WhileLoopEvaluation(node: WhileStatement): CompletionRecord {\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const exprValue = GetValue(Evaluate(node.test));\n if (!exprValue) {\n return NormalCompletion(V);\n }\n const stmtResult = Evaluate(node.body);\n if (!LoopContinues(stmtResult)) {\n return UpdateEmpty(stmtResult, V);\n }\n if (stmtResult.Value !== Empty) {\n V = stmtResult.Value;\n }\n }\n }\n\n // Do-while Statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-dowhileloopevaluation\n function DoWhileLoopEvaluation(node: DoWhileStatement): CompletionRecord {\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const stmtResult = Evaluate(node.body);\n if (!LoopContinues(stmtResult)) {\n return UpdateEmpty(stmtResult, V);\n }\n if (stmtResult.Value !== Empty) {\n V = stmtResult.Value;\n }\n const exprValue = GetValue(Evaluate(node.test));\n if (!exprValue) {\n return NormalCompletion(V);\n }\n }\n }\n\n // For in/of statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-forinofloopevaluation\n function ForInOfLoopEvaluation(\n node: ForInStatement | ForOfStatement\n ): CompletionRecord {\n const lhs = node.left;\n const isVariableDeclaration = lhs.type === \"VariableDeclaration\";\n const lhsKind = isVariableDeclaration\n ? lhs.kind === \"var\"\n ? \"varBinding\"\n : \"lexicalBinding\"\n : \"assignment\";\n const uninitializedBoundNames =\n lhsKind === \"lexicalBinding\" ? collectBoundNames(lhs) : [];\n const iterationKind =\n node.type === \"ForInStatement\" ? \"enumerate\" : \"iterate\";\n const keyResult = ForInOfHeadEvaluation(\n uninitializedBoundNames,\n node.right,\n iterationKind\n );\n if (keyResult.Type !== \"normal\") {\n // When enumerate, if the target is nil, a break completion will be returned.\n return keyResult;\n }\n return ForInOfBodyEvaluation(\n lhs,\n node.body,\n keyResult.Value as Iterator<unknown>,\n iterationKind,\n lhsKind\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-forinofheadevaluation\n function ForInOfHeadEvaluation(\n uninitializedBoundNames: string[],\n expr: Expression,\n iterationKind: \"enumerate\" | \"iterate\"\n ): CompletionRecord {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (uninitializedBoundNames.length > 0) {\n const newEnv = new DeclarativeEnvironment(oldEnv);\n for (const name of uninitializedBoundNames) {\n newEnv.CreateMutableBinding(name, false);\n }\n runningContext.LexicalEnvironment = newEnv;\n }\n const exprRef = Evaluate(expr);\n runningContext.LexicalEnvironment = oldEnv;\n const exprValue = GetValue(exprRef);\n if (iterationKind === \"enumerate\") {\n if (exprValue === null || exprValue === undefined) {\n return new CompletionRecord(\"break\", Empty);\n }\n const iterator = EnumerateObjectProperties(exprValue);\n return NormalCompletion(iterator);\n }\n const iterator = CreateListIteratorRecord(exprValue as Iterable<unknown>);\n return NormalCompletion(iterator);\n }\n\n function ForInOfBodyEvaluation(\n node: VariableDeclaration | EstreeLVal,\n stmt: Statement,\n iteratorRecord: Iterator<unknown>,\n iterationKind: \"enumerate\" | \"iterate\",\n lhsKind: \"varBinding\" | \"lexicalBinding\" | \"assignment\"\n ): CompletionRecord {\n const lhs =\n lhsKind === \"assignment\"\n ? (node as EstreeLVal)\n : (node as VariableDeclaration).declarations[0].id;\n const oldEnv = getRunningContext().LexicalEnvironment;\n let V: unknown;\n // When `destructuring` is false,\n // For `node` whose `kind` is assignment:\n // `lhs` is an `Identifier` or a `MemberExpression`,\n // Otherwise:\n // `lhs` is an `Identifier`.\n const destructuring =\n lhs.type === \"ObjectPattern\" || lhs.type === \"ArrayPattern\";\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value: nextValue } = iteratorRecord.next();\n if (done) {\n return NormalCompletion(V);\n }\n let lhsRef: ReferenceRecord;\n let iterationEnv: DeclarativeEnvironment;\n if (lhsKind === \"lexicalBinding\") {\n iterationEnv = new DeclarativeEnvironment(oldEnv);\n ForDeclarationBindingInstantiation(\n node as VariableDeclaration,\n iterationEnv\n );\n getRunningContext().LexicalEnvironment = iterationEnv;\n if (!destructuring) {\n const [lhsName] = collectBoundNames(lhs);\n lhsRef = ResolveBinding(lhsName);\n }\n } else if (!destructuring) {\n lhsRef = Evaluate(lhs).Value as ReferenceRecord;\n }\n destructuring\n ? lhsKind === \"assignment\"\n ? DestructuringAssignmentEvaluation(lhs, nextValue)\n : lhsKind === \"varBinding\"\n ? BindingInitialization(lhs, nextValue, undefined)\n : BindingInitialization(lhs, nextValue, iterationEnv)\n : lhsKind === \"lexicalBinding\"\n ? InitializeReferencedBinding(lhsRef, nextValue)\n : PutValue(lhsRef, nextValue);\n\n const result = Evaluate(stmt);\n getRunningContext().LexicalEnvironment = oldEnv;\n if (!LoopContinues(result)) {\n return UpdateEmpty(result, V);\n }\n if (result.Value !== Empty) {\n V = result.Value;\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-enumerate-object-properties\n function* EnumerateObjectProperties(value: any): Iterator<PropertyKey> {\n for (const key in value) {\n yield key;\n }\n }\n\n // For statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-forloopevaluation\n function ForLoopEvaluation(node: ForStatement): CompletionRecord {\n if (node.init?.type === \"VariableDeclaration\") {\n // `for (var … ; … ; … ) …`\n if (node.init.kind === \"var\") {\n Evaluate(node.init);\n return ForBodyEvaluation(node.test, node.update, node.body, []);\n }\n // `for (let/const … ; … ; … ) …`\n const oldEnv = getRunningContext().LexicalEnvironment;\n const loopEnv = new DeclarativeEnvironment(oldEnv);\n const isConst = node.init.kind === \"const\";\n const boundNames = collectBoundNames(node.init);\n for (const dn of boundNames) {\n if (isConst) {\n loopEnv.CreateImmutableBinding(dn, true);\n } else {\n loopEnv.CreateMutableBinding(dn, false);\n }\n }\n getRunningContext().LexicalEnvironment = loopEnv;\n Evaluate(node.init);\n const perIterationLets = isConst ? [] : Array.from(boundNames);\n const bodyResult = ForBodyEvaluation(\n node.test,\n node.update,\n node.body,\n perIterationLets\n );\n getRunningContext().LexicalEnvironment = oldEnv;\n return bodyResult;\n }\n // `for ( … ; … ; … ) …`\n if (node.init) {\n const exprRef = Evaluate(node.init);\n GetValue(exprRef);\n }\n return ForBodyEvaluation(node.test, node.update, node.body, []);\n }\n\n // https://tc39.es/ecma262/#sec-forbodyevaluation\n function ForBodyEvaluation(\n test: Expression,\n increment: Expression,\n stmt: Statement,\n perIterationBindings: string[]\n ): CompletionRecord {\n CreatePerIterationEnvironment(perIterationBindings);\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (test) {\n const testRef = Evaluate(test);\n const testValue = GetValue(testRef);\n if (!testValue) {\n return NormalCompletion(V);\n }\n }\n const result = Evaluate(stmt) as CompletionRecord;\n if (!LoopContinues(result)) {\n return UpdateEmpty(result, V);\n }\n if (result.Value) {\n V = result.Value;\n }\n CreatePerIterationEnvironment(perIterationBindings);\n if (increment) {\n const incRef = Evaluate(increment);\n GetValue(incRef);\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-createperiterationenvironment\n function CreatePerIterationEnvironment(\n perIterationBindings: string[]\n ): unknown {\n if (perIterationBindings.length === 0) {\n return;\n }\n const lastIterationEnv = getRunningContext().LexicalEnvironment;\n const outer = lastIterationEnv.OuterEnv;\n const thisIterationEnv = new DeclarativeEnvironment(outer);\n for (const bn of perIterationBindings) {\n thisIterationEnv.CreateMutableBinding(bn, false);\n const lastValue = lastIterationEnv.GetBindingValue(bn, false);\n thisIterationEnv.InitializeBinding(bn, lastValue);\n }\n getRunningContext().LexicalEnvironment = thisIterationEnv;\n }\n\n // Destructuring assignments.\n // https://tc39.es/ecma262/#sec-runtime-semantics-destructuringassignmentevaluation\n function DestructuringAssignmentEvaluation(\n pattern: ObjectPattern | EstreeObjectPattern | ArrayPattern,\n value: unknown\n ): CompletionRecord {\n if (pattern.type === \"ObjectPattern\") {\n RequireObjectCoercible(value);\n if (pattern.properties.length > 0) {\n PropertyDestructuringAssignmentEvaluation(\n (pattern as EstreeObjectPattern).properties,\n value\n );\n }\n return NormalCompletion(Empty);\n }\n const iteratorRecord = CreateListIteratorRecord(value as Iterable<unknown>);\n return IteratorDestructuringAssignmentEvaluation(\n pattern.elements,\n iteratorRecord\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-propertydestructuringassignmentevaluation\n function PropertyDestructuringAssignmentEvaluation(\n properties: (EstreeProperty | RestElement)[],\n value: unknown\n ): void {\n const excludedNames = new Set<PropertyKey>();\n for (const prop of properties) {\n if (prop.type === \"Property\") {\n const propName =\n !prop.computed && prop.key.type === \"Identifier\"\n ? prop.key.name\n : (EvaluateComputedPropertyName(prop.key) as string);\n const valueTarget =\n prop.value.type === \"AssignmentPattern\"\n ? prop.value.left\n : prop.value;\n if (valueTarget.type === \"Identifier\") {\n const lref = ResolveBinding(valueTarget.name);\n let v = GetV(value, propName);\n if (prop.value.type === \"AssignmentPattern\" && v === undefined) {\n // Todo(steve): check IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(prop.value.right);\n v = GetValue(defaultValue);\n }\n PutValue(lref, v);\n excludedNames.add(propName);\n } else {\n KeyedDestructuringAssignmentEvaluation(prop.value, value, propName);\n excludedNames.add(propName);\n }\n } else {\n RestDestructuringAssignmentEvaluation(prop, value, excludedNames);\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-keyeddestructuringassignmentevaluation\n function KeyedDestructuringAssignmentEvaluation(\n node: EstreeNode,\n value: unknown,\n propertyName: PropertyKey\n ): CompletionRecord {\n const assignmentTarget =\n node.type === \"AssignmentPattern\" ? node.left : node;\n const isObjectOrArray =\n assignmentTarget.type === \"ArrayPattern\" ||\n assignmentTarget.type === \"ObjectPattern\";\n let lref;\n if (!isObjectOrArray) {\n lref = Evaluate(assignmentTarget).Value as ReferenceRecord;\n }\n const v = GetV(value, propertyName);\n let rhsValue;\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // Todo(steve): check IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(node.right);\n rhsValue = GetValue(defaultValue);\n } else {\n rhsValue = v;\n }\n if (isObjectOrArray) {\n return DestructuringAssignmentEvaluation(assignmentTarget, rhsValue);\n }\n return PutValue(lref, rhsValue);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-restdestructuringassignmentevaluation\n function RestDestructuringAssignmentEvaluation(\n restProperty: RestElement,\n value: unknown,\n excludedNames: Set<PropertyKey>\n ): CompletionRecord {\n const lref = Evaluate(restProperty.argument).Value as ReferenceRecord;\n const restObj = CopyDataProperties({}, value, excludedNames);\n return PutValue(lref, restObj);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-iteratordestructuringassignmentevaluation\n function IteratorDestructuringAssignmentEvaluation(\n elements: PatternLike[],\n iteratorRecord: Iterator<unknown>\n ): CompletionRecord {\n let status = NormalCompletion(Empty);\n for (const element of elements) {\n if (!element) {\n iteratorRecord.next();\n status = NormalCompletion(Empty);\n continue;\n }\n const assignmentTarget =\n element.type === \"RestElement\"\n ? element.argument\n : element.type === \"AssignmentPattern\"\n ? element.left\n : element;\n const isObjectOrArray =\n assignmentTarget.type === \"ArrayPattern\" ||\n assignmentTarget.type === \"ObjectPattern\";\n let lref: ReferenceRecord;\n if (!isObjectOrArray) {\n lref = Evaluate(assignmentTarget).Value as ReferenceRecord;\n }\n let v: unknown;\n if (element.type !== \"RestElement\") {\n const { done, value: nextValue } = iteratorRecord.next();\n const value = done ? undefined : nextValue;\n if (element.type === \"AssignmentPattern\" && value === undefined) {\n // Todo(steve): check IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(element.right);\n v = GetValue(defaultValue);\n } else {\n v = value;\n }\n } else {\n // RestElement\n v = [];\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value: nextValue } = iteratorRecord.next();\n if (done) {\n break;\n }\n (v as unknown[])[n] = nextValue;\n n++;\n }\n }\n if (isObjectOrArray) {\n status = DestructuringAssignmentEvaluation(assignmentTarget, v);\n } else {\n status = PutValue(lref, v);\n }\n }\n return status;\n }\n\n // Object expressions.\n // https://tc39.es/ecma262/#sec-evaluate-property-access-with-expression-key\n function EvaluatePropertyAccessWithExpressionKey(\n baseValue: Record<PropertyKey, unknown>,\n expression: Expression,\n strict: boolean\n ): ReferenceRecord {\n const propertyNameReference = Evaluate(expression);\n const propertyNameValue = GetValue(propertyNameReference);\n const propertyKey = ToPropertyKey(propertyNameValue);\n return new ReferenceRecord(baseValue, propertyKey, strict);\n }\n\n // https://tc39.es/ecma262/#sec-evaluate-property-access-with-identifier-key\n function EvaluatePropertyAccessWithIdentifierKey(\n baseValue: Record<PropertyKey, unknown>,\n identifier: Identifier,\n strict: boolean\n ): ReferenceRecord {\n const propertyNameString = identifier.name;\n return new ReferenceRecord(baseValue, propertyNameString, strict);\n }\n\n // Block statements.\n // https://tc39.es/ecma262/#sec-blockdeclarationinstantiation\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: EnvironmentRecord\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n for (const d of declarations) {\n const IsConstantDeclaration =\n d.type === \"VariableDeclaration\" && d.kind === \"const\";\n for (const dn of collectBoundNames(d)) {\n if (IsConstantDeclaration) {\n env.CreateImmutableBinding(dn, true);\n } else {\n env.CreateMutableBinding(dn, false);\n }\n }\n if (d.type === \"FunctionDeclaration\") {\n const [fn] = collectBoundNames(d);\n const fo = InstantiateFunctionObject(d, env);\n env.InitializeBinding(fn, fo);\n }\n }\n }\n\n // Function declarations and expressions.\n // https://tc39.es/ecma262/#sec-evaluatecall\n function EvaluateCall(\n func: SimpleFunction,\n ref: ReferenceRecord,\n args: CallExpression[\"arguments\"] | TemplateLiteral,\n callee: CallExpression[\"callee\"]\n ): CompletionRecord {\n let thisValue;\n if (ref instanceof ReferenceRecord) {\n if (IsPropertyReference(ref)) {\n thisValue = ref.Base;\n }\n }\n const argList = ArgumentListEvaluation(args);\n if (typeof func !== \"function\") {\n const funcName = codeSource.substring(callee.start, callee.end);\n throw new TypeError(`${funcName} is not a function`);\n }\n const result = func.apply(thisValue, argList);\n sanitize(result);\n return NormalCompletion(result);\n }\n\n // https://tc39.es/ecma262/#sec-evaluatenew\n function EvaluateNew(\n constructExpr: CallExpression[\"callee\"],\n args: NewExpression[\"arguments\"]\n ): CompletionRecord {\n const ref = Evaluate(constructExpr);\n const constructor = GetValue(ref) as new (...args: unknown[]) => unknown;\n const argList = ArgumentListEvaluation(args);\n if (\n typeof constructor !== \"function\" ||\n (constructor as unknown as FunctionObject)[IsConstructor] === false\n ) {\n const constructorName = codeSource.substring(\n constructExpr.start,\n constructExpr.end\n );\n throw new TypeError(`${constructorName} is not a constructor`);\n }\n if (!isAllowedConstructor(constructor)) {\n const constructorName = codeSource.substring(\n constructExpr.start,\n constructExpr.end\n );\n throw new TypeError(`${constructorName} is not an allowed constructor`);\n }\n return NormalCompletion(new constructor(...argList));\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-argumentlistevaluation\n function ArgumentListEvaluation(\n args: CallExpression[\"arguments\"] | TemplateLiteral\n ): unknown[] {\n const array: unknown[] = [];\n if (Array.isArray(args)) {\n for (const arg of args) {\n if (arg.type === \"SpreadElement\") {\n const spreadValues = GetValue(Evaluate(arg.argument)) as unknown[];\n array.push(...spreadValues);\n } else {\n array.push(GetValue(Evaluate(arg)));\n }\n }\n } else {\n array.push(GetTemplateObject(args));\n for (const expr of args.expressions) {\n array.push(GetValue(Evaluate(expr)));\n }\n }\n return array;\n }\n\n // https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n function CallFunction(\n closure: FunctionObject,\n args: Iterable<unknown>\n ): unknown {\n hooks.beforeCall?.(closure[SourceNode]);\n PrepareForOrdinaryCall(closure);\n const result = OrdinaryCallEvaluateBody(closure, args);\n executionContextStack.pop();\n if (result.Type === \"return\") {\n return result.Value;\n }\n return undefined;\n }\n\n // https://tc39.es/ecma262/#sec-prepareforordinarycall\n function PrepareForOrdinaryCall(F: FunctionObject): ExecutionContext {\n const calleeContext = new ExecutionContext();\n calleeContext.Function = F;\n const localEnv = new FunctionEnvironment(F[Environment]);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n executionContextStack.push(calleeContext);\n return calleeContext;\n }\n\n // https://tc39.es/ecma262/#sec-ordinarycallevaluatebody\n function OrdinaryCallEvaluateBody(\n F: FunctionObject,\n args: Iterable<unknown>\n ): CompletionRecord {\n return EvaluateFunctionBody(F[ECMAScriptCode], F, args);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-evaluatefunctionbody\n function EvaluateFunctionBody(\n body: Statement[] | Expression,\n F: FunctionObject,\n args: Iterable<unknown>\n ): CompletionRecord {\n FunctionDeclarationInstantiation(F, args);\n if (Array.isArray(body)) {\n return EvaluateStatementList(body);\n }\n return new CompletionRecord(\"return\", GetValue(Evaluate(body)));\n }\n\n // https://tc39.es/ecma262/#sec-block-runtime-semantics-evaluation\n function EvaluateStatementList(statements: Statement[]): CompletionRecord {\n let result = NormalCompletion(Empty);\n for (const stmt of statements) {\n const s = Evaluate(stmt);\n if (s.Type !== \"normal\") {\n return s;\n }\n result = UpdateEmpty(result, s.Value);\n }\n return result;\n }\n\n // https://tc39.es/ecma262/#sec-functiondeclarationinstantiation\n function FunctionDeclarationInstantiation(\n func: FunctionObject,\n args: Iterable<unknown>\n ): void {\n const calleeContext = getRunningContext();\n const code = func[ECMAScriptCode] as BlockStatement | Expression;\n const formals = func[FormalParameters] as FunctionDeclaration[\"params\"];\n const parameterNames = collectBoundNames(formals);\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n // `functionNames` ∈ `varNames`\n // `functionsToInitialize` ≈ `functionNames`\n const functionNames: string[] = [];\n const functionsToInitialize: FunctionDeclaration[] = [];\n for (let i = varDeclarations.length - 1; i >= 0; i--) {\n const d = varDeclarations[i];\n if (d.type === \"FunctionDeclaration\") {\n ThrowIfFunctionIsInvalid(d);\n const [fn] = collectBoundNames(d);\n if (!functionNames.includes(fn)) {\n functionNames.unshift(fn);\n functionsToInitialize.unshift(d);\n }\n } else if (rules?.noVar) {\n throw new SyntaxError(\n \"Var declaration is not recommended, use `let` or `const` instead\"\n );\n }\n }\n\n const env = calleeContext.LexicalEnvironment;\n for (const paramName of parameterNames) {\n // In strict mode, it's guaranteed no duplicate params exist.\n env.CreateMutableBinding(paramName, false);\n }\n\n const iteratorRecord = CreateListIteratorRecord(args);\n IteratorBindingInitialization(formals, iteratorRecord, env);\n\n let varEnv: EnvironmentRecord;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n // `varNames` are unique.\n for (const n of varNames) {\n if (!parameterNames.includes(n)) {\n env.CreateMutableBinding(n, false);\n env.InitializeBinding(n, undefined);\n }\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new DeclarativeEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n // `varNames` are unique.\n for (const n of varNames) {\n varEnv.CreateMutableBinding(n, false);\n let initialValue: unknown;\n if (parameterNames.includes(n) && !functionNames.includes(n)) {\n initialValue = env.GetBindingValue(n, false);\n }\n varEnv.InitializeBinding(n, initialValue);\n // NOTE: A var with the same name as a formal parameter initially has\n // the same value as the corresponding initialized parameter.\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n for (const d of lexDeclarations) {\n for (const dn of collectBoundNames(d)) {\n // Only lexical VariableDeclaration here in top-level.\n if ((d as VariableDeclaration).kind === \"const\") {\n lexEnv.CreateImmutableBinding(dn, true);\n } else {\n lexEnv.CreateMutableBinding(dn, false);\n }\n }\n }\n\n for (const f of functionsToInitialize) {\n const [fn] = collectBoundNames(f);\n const fo = InstantiateFunctionObject(f, lexEnv);\n varEnv.SetMutableBinding(fn, fo, false);\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiatefunctionobject\n function InstantiateFunctionObject(\n func: FunctionDeclaration,\n scope: EnvironmentRecord\n ): FunctionObject {\n return OrdinaryFunctionCreate(func, scope, true);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiateordinaryfunctionexpression\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): FunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (functionExpression.id) {\n const name = functionExpression.id.name;\n const funcEnv = new DeclarativeEnvironment(scope);\n funcEnv.CreateImmutableBinding(name, false);\n const closure = OrdinaryFunctionCreate(\n functionExpression,\n // functionExpression.params,\n // functionExpression.body,\n funcEnv,\n true\n );\n funcEnv.InitializeBinding(name, closure);\n return closure;\n } else {\n const closure = OrdinaryFunctionCreate(functionExpression, scope, true);\n return closure;\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiatearrowfunctionexpression\n function InstantiateArrowFunctionExpression(\n arrowFunction: ArrowFunctionExpression\n ): FunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(arrowFunction, scope, false);\n return closure;\n }\n\n // https://tc39.es/ecma262/#sec-ordinaryfunctioncreate\n function OrdinaryFunctionCreate(\n sourceNode:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression,\n // parameterList: FunctionDeclaration[\"params\"],\n // body: BlockStatement | Expression,\n scope: EnvironmentRecord,\n isConstructor: boolean\n ): FunctionObject {\n const F = function () {\n // eslint-disable-next-line prefer-rest-params\n return CallFunction(F, arguments);\n } as FunctionObject;\n Object.defineProperties(F, {\n [SourceNode]: {\n value: sourceNode,\n },\n [FormalParameters]: {\n value: sourceNode.params,\n },\n [ECMAScriptCode]: {\n value:\n sourceNode.body.type === \"BlockStatement\"\n ? sourceNode.body.body\n : sourceNode.body,\n },\n [Environment]: {\n value: scope,\n },\n [IsConstructor]: {\n value: isConstructor,\n },\n });\n return F;\n }\n\n // Patterns initialization.\n // https://tc39.es/ecma262/#sec-runtime-semantics-bindinginitialization\n function BindingInitialization(\n node: EstreeLVal,\n value: unknown,\n environment: EnvironmentRecord\n ): CompletionRecord {\n switch (node.type) {\n case \"Identifier\":\n return InitializeBoundName(node.name, value, environment);\n case \"ObjectPattern\":\n RequireObjectCoercible(value);\n return PropertyBindingInitialization(\n (node as EstreeObjectPattern).properties,\n value,\n environment\n );\n case \"ArrayPattern\": {\n const iteratorRecord = CreateListIteratorRecord(\n value as Iterable<unknown>\n );\n return IteratorBindingInitialization(\n node.elements,\n iteratorRecord,\n environment\n );\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-destructuring-binding-patterns-runtime-semantics-propertybindinginitialization\n function PropertyBindingInitialization(\n properties: (EstreeProperty | RestElement)[],\n value: unknown,\n environment: EnvironmentRecord\n ): CompletionRecord {\n const excludedNames = new Set<PropertyKey>();\n for (const prop of properties) {\n if (prop.type === \"RestElement\") {\n return RestBindingInitialization(\n prop,\n value,\n environment,\n excludedNames\n );\n }\n if (!prop.computed && prop.key.type === \"Identifier\") {\n KeyedBindingInitialization(\n prop.value as EstreeLVal,\n value,\n environment,\n prop.key.name\n );\n excludedNames.add(prop.key.name);\n } else {\n const P = EvaluateComputedPropertyName(prop.key);\n KeyedBindingInitialization(\n prop.value as EstreeLVal,\n value,\n environment,\n P\n );\n excludedNames.add(P);\n }\n }\n return NormalCompletion(Empty);\n }\n\n // https://tc39.es/ecma262/#prod-ComputedPropertyName\n function EvaluateComputedPropertyName(node: Expression): PropertyKey {\n const propName = GetValue(Evaluate(node));\n return ToPropertyKey(propName);\n }\n\n // https://tc39.es/ecma262/#sec-destructuring-binding-patterns-runtime-semantics-restbindinginitialization\n function RestBindingInitialization(\n restProperty: RestElement,\n value: unknown,\n environment: EnvironmentRecord,\n excludedNames: Set<PropertyKey>\n ): CompletionRecord {\n const lhs = ResolveBinding(\n (restProperty.argument as Identifier).name,\n environment\n );\n const restObj = CopyDataProperties({}, value, excludedNames);\n if (!environment) {\n return PutValue(lhs, restObj);\n }\n return InitializeReferencedBinding(lhs, restObj);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-iteratorbindinginitialization\n function IteratorBindingInitialization(\n elements: PatternLike[],\n iteratorRecord: Iterator<unknown>,\n environment: EnvironmentRecord\n ): CompletionRecord {\n if (elements.length === 0) {\n return NormalCompletion(Empty);\n }\n let result;\n for (const node of elements) {\n if (!node) {\n // Elision element.\n iteratorRecord.next();\n result = NormalCompletion(Empty);\n } else if (node.type === \"RestElement\") {\n // Rest element.\n if (node.argument.type === \"Identifier\") {\n const lhs = ResolveBinding(node.argument.name, environment);\n const A: unknown[] = [];\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iteratorRecord.next();\n if (done) {\n result = environment\n ? InitializeReferencedBinding(lhs, A)\n : PutValue(lhs, A);\n break;\n }\n A[n] = value;\n n++;\n }\n } else {\n const A: unknown[] = [];\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iteratorRecord.next();\n if (done) {\n result = BindingInitialization(node.argument, A, environment);\n break;\n }\n A[n] = value;\n n++;\n }\n }\n } else {\n // Normal element.\n const bindingElement =\n node.type === \"AssignmentPattern\" ? node.left : node;\n switch (bindingElement.type) {\n case \"ObjectPattern\":\n case \"ArrayPattern\": {\n let v: unknown;\n const { done, value } = iteratorRecord.next();\n if (!done) {\n v = value;\n }\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n result = BindingInitialization(bindingElement, v, environment);\n break;\n }\n case \"Identifier\": {\n const bindingId = bindingElement.name;\n const lhs = ResolveBinding(bindingId, environment);\n let v: unknown;\n const { done, value } = iteratorRecord.next();\n if (!done) {\n v = value;\n }\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n result = environment\n ? InitializeReferencedBinding(lhs, v)\n : PutValue(lhs, v);\n break;\n }\n }\n }\n }\n return result;\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-keyedbindinginitialization\n function KeyedBindingInitialization(\n node: EstreeLVal,\n value: unknown,\n environment: EnvironmentRecord,\n propertyName: PropertyKey\n ): CompletionRecord {\n const isIdentifier =\n node.type === \"Identifier\" ||\n (node.type === \"AssignmentPattern\" && node.left.type === \"Identifier\");\n if (isIdentifier) {\n const bindingId =\n node.type === \"Identifier\" ? node.name : (node.left as Identifier).name;\n const lhs = ResolveBinding(bindingId, environment);\n let v = GetV(value, propertyName);\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // If IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n if (!environment) {\n return PutValue(lhs, v);\n }\n return InitializeReferencedBinding(lhs, v);\n }\n\n let v = GetV(value, propertyName);\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n return BindingInitialization(\n node.type === \"AssignmentPattern\" ? node.left : node,\n v,\n environment\n );\n }\n\n // https://tc39.es/ecma262/#sec-initializeboundname\n function InitializeBoundName(\n name: string,\n value: unknown,\n environment?: EnvironmentRecord\n ): CompletionRecord {\n // Assert: environment is always present.\n environment.InitializeBinding(name, value);\n return NormalCompletion(Empty);\n }\n\n function ThrowIfFunctionIsInvalid(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n ): void {\n if (func.async || func.generator) {\n throw new SyntaxError(\n `${func.async ? \"Async\" : \"Generator\"} function is not allowed`\n );\n }\n if (expressionOnly && !(func as ArrowFunctionExpression).expression) {\n throw new SyntaxError(\n \"Only an `Expression` is allowed in `ArrowFunctionExpression`'s body\"\n );\n }\n }\n\n if (expressionOnly) {\n return GetValue(Evaluate(rootAst));\n }\n\n hooks.beforeEvaluate?.(rootAst);\n ThrowIfFunctionIsInvalid(rootAst);\n const [fn] = collectBoundNames(rootAst);\n // Create an immutable binding for the root function.\n rootEnv.CreateImmutableBinding(fn, true);\n const fo = InstantiateFunctionObject(rootAst, rootEnv);\n rootEnv.InitializeBinding(fn, fo);\n return fo;\n}\n"],"file":"cook.js"}
1
+ {"version":3,"sources":["../../src/cook.ts"],"names":["ApplyStringOrNumericAssignment","CreateListIteratorRecord","ApplyStringOrNumericBinaryOperator","GetV","GetValue","InitializeReferencedBinding","IsPropertyReference","LoopContinues","PutValue","RequireObjectCoercible","ToPropertyKey","UpdateEmpty","ApplyUnaryOperator","GetIdentifierReference","ForDeclarationBindingInstantiation","CopyDataProperties","CompletionRecord","DeclarativeEnvironment","ECMAScriptCode","Empty","Environment","ExecutionContext","FormalParameters","FunctionEnvironment","IsConstructor","NormalCompletion","ReferenceRecord","SourceNode","sanitize","isAllowedConstructor","collectBoundNames","collectScopedDeclarations","containsExpression","cook","rootAst","codeSource","rules","globalVariables","hooks","expressionOnly","type","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","executionContextStack","key","value","Object","entries","CreateImmutableBinding","InitializeBinding","TemplateMap","WeakMap","GetTemplateObject","templateLiteral","memo","get","rawObj","quasis","map","quasi","raw","template","cooked","freeze","defineProperty","writable","enumerable","configurable","set","Evaluate","node","optionalChainRef","beforeEvaluate","array","element","elements","length","spreadValues","argument","push","ThrowIfFunctionIsInvalid","closure","InstantiateArrowFunctionExpression","leftRef","left","leftValue","rightRef","right","Value","rightValue","operator","funcName","substring","start","end","TypeError","thisValue","Base","call","result","ref","callee","func","undefined","optional","skipped","EvaluateCall","arguments","expression","test","consequent","alternate","ResolveBinding","name","regex","SyntaxError","flags","includes","baseReference","object","baseValue","computed","EvaluatePropertyAccessWithExpressionKey","property","EvaluatePropertyAccessWithIdentifierKey","EvaluateNew","prop","properties","fromValue","Set","kind","propName","EvaluateComputedPropertyName","expr","expressions","chunks","index","val","String","join","tagRef","tag","tagFunc","deleteStatus","ReferenceName","lref","rref","rval","DestructuringAssignmentEvaluation","lval","r","body","oldEnv","getRunningContext","blockEnv","BlockDeclarationInstantiation","blockValue","EvaluateStatementList","EvaluateBreakableStatement","DoWhileLoopEvaluation","ForInOfLoopEvaluation","ForLoopEvaluation","InstantiateOrdinaryFunctionExpression","beforeBranch","v","exprRef","lhs","oldValue","Number","newValue","prefix","discriminant","switchValue","cases","R","CaseBlockEvaluation","block","error","handler","CatchClauseEvaluation","finalizer","F","Type","declarator","declarations","init","id","bindingId","rhs","BindingInitialization","WhileLoopEvaluation","env","thrownValue","catchEnv","argName","param","CreateMutableBinding","B","stmtResult","input","V","defaultCaseIndex","findIndex","switchCase","hasDefaultCase","A","slice","found","C","CaseClauseIsSelected","foundInB","clauseSelector","exprValue","isVariableDeclaration","lhsKind","uninitializedBoundNames","iterationKind","keyResult","ForInOfHeadEvaluation","ForInOfBodyEvaluation","runningContext","newEnv","iterator","EnumerateObjectProperties","stmt","iteratorRecord","destructuring","done","nextValue","next","lhsRef","iterationEnv","lhsName","ForBodyEvaluation","update","loopEnv","isConst","boundNames","dn","perIterationLets","Array","from","bodyResult","increment","perIterationBindings","CreatePerIterationEnvironment","testRef","testValue","incRef","lastIterationEnv","outer","OuterEnv","thisIterationEnv","bn","lastValue","GetBindingValue","pattern","PropertyDestructuringAssignmentEvaluation","IteratorDestructuringAssignmentEvaluation","excludedNames","valueTarget","defaultValue","add","KeyedDestructuringAssignmentEvaluation","RestDestructuringAssignmentEvaluation","propertyName","assignmentTarget","isObjectOrArray","rhsValue","restProperty","restObj","status","n","strict","propertyNameReference","propertyNameValue","propertyKey","identifier","propertyNameString","code","var","topLevel","d","IsConstantDeclaration","fn","fo","InstantiateFunctionObject","args","argList","ArgumentListEvaluation","apply","constructExpr","constructor","constructorName","isArray","arg","CallFunction","beforeCall","PrepareForOrdinaryCall","OrdinaryCallEvaluateBody","pop","calleeContext","Function","localEnv","EvaluateFunctionBody","FunctionDeclarationInstantiation","statements","s","formals","parameterNames","hasParameterExpressions","varDeclarations","varNames","functionNames","functionsToInitialize","i","unshift","noVar","paramName","IteratorBindingInitialization","varEnv","initialValue","lexEnv","lexDeclarations","f","SetMutableBinding","scope","OrdinaryFunctionCreate","functionExpression","funcEnv","arrowFunction","sourceNode","isConstructor","defineProperties","params","environment","InitializeBoundName","PropertyBindingInitialization","RestBindingInitialization","KeyedBindingInitialization","P","bindingElement","isIdentifier","async","generator"],"mappings":"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","sourcesContent":["import {\n ArrayPattern,\n ArrowFunctionExpression,\n BlockStatement,\n CallExpression,\n CatchClause,\n DoWhileStatement,\n Expression,\n ForInStatement,\n ForOfStatement,\n ForStatement,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n NewExpression,\n ObjectPattern,\n PatternLike,\n RestElement,\n Statement,\n SwitchCase,\n TemplateLiteral,\n VariableDeclaration,\n WhileStatement,\n} from \"@babel/types\";\nimport { SimpleFunction } from \"@next-core/brick-types\";\nimport {\n ApplyStringOrNumericAssignment,\n CreateListIteratorRecord,\n ApplyStringOrNumericBinaryOperator,\n GetV,\n GetValue,\n InitializeReferencedBinding,\n IsPropertyReference,\n LoopContinues,\n PutValue,\n RequireObjectCoercible,\n ToPropertyKey,\n UpdateEmpty,\n ApplyUnaryOperator,\n GetIdentifierReference,\n ForDeclarationBindingInstantiation,\n CopyDataProperties,\n} from \"./context-free\";\nimport {\n CompletionRecord,\n DeclarativeEnvironment,\n ECMAScriptCode,\n Empty,\n Environment,\n EnvironmentRecord,\n ExecutionContext,\n FormalParameters,\n FunctionEnvironment,\n FunctionObject,\n IsConstructor,\n NormalCompletion,\n OptionalChainRef,\n ReferenceRecord,\n SourceNode,\n} from \"./ExecutionContext\";\nimport {\n EstreeLVal,\n EstreeNode,\n EstreeObjectExpression,\n EstreeObjectPattern,\n EstreeProperty,\n CookRules,\n} from \"./interfaces\";\nimport { sanitize, isAllowedConstructor } from \"./sanitize\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface CookOptions {\n rules?: CookRules;\n globalVariables?: Record<string, unknown>;\n hooks?: CookHooks;\n}\n\nexport interface CookHooks {\n beforeEvaluate?(node: EstreeNode): void;\n beforeCall?(node: EstreeNode): void;\n beforeBranch?(node: EstreeNode, branch: \"if\" | \"else\"): void;\n}\n\n/** For next-core internal usage only. */\nexport function cook(\n rootAst: FunctionDeclaration | Expression,\n codeSource: string,\n { rules, globalVariables = {}, hooks = {} }: CookOptions = {}\n): unknown {\n const expressionOnly = rootAst.type !== \"FunctionDeclaration\";\n\n const rootEnv = new DeclarativeEnvironment(null);\n const rootContext = new ExecutionContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n const executionContextStack = [rootContext];\n\n for (const [key, value] of Object.entries(globalVariables)) {\n rootEnv.CreateImmutableBinding(key, true);\n rootEnv.InitializeBinding(key, value);\n }\n\n const TemplateMap = new WeakMap<TemplateLiteral, string[]>();\n\n // https://tc39.es/ecma262/#sec-gettemplateobject\n function GetTemplateObject(templateLiteral: TemplateLiteral): string[] {\n const memo = TemplateMap.get(templateLiteral);\n if (memo) {\n return memo;\n }\n const rawObj = templateLiteral.quasis.map((quasi) => quasi.value.raw);\n const template = templateLiteral.quasis.map((quasi) => quasi.value.cooked);\n Object.freeze(rawObj);\n Object.defineProperty(template, \"raw\", {\n value: rawObj,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n Object.freeze(template);\n TemplateMap.set(templateLiteral, template);\n return template;\n }\n\n function Evaluate(\n node: EstreeNode,\n optionalChainRef?: OptionalChainRef\n ): CompletionRecord {\n hooks.beforeEvaluate?.(node);\n // Expressions:\n switch (node.type) {\n case \"ArrayExpression\": {\n // https://tc39.es/ecma262/#sec-array-initializer\n const array = [];\n for (const element of node.elements) {\n if (!element) {\n array.length += 1;\n } else if (element.type === \"SpreadElement\") {\n const spreadValues = GetValue(\n Evaluate(element.argument)\n ) as unknown[];\n array.push(...spreadValues);\n } else {\n array.push(GetValue(Evaluate(element)));\n }\n }\n return NormalCompletion(array);\n }\n case \"ArrowFunctionExpression\": {\n // https://tc39.es/ecma262/#sec-arrow-function-definitions\n ThrowIfFunctionIsInvalid(node);\n const closure = InstantiateArrowFunctionExpression(node);\n return NormalCompletion(closure);\n }\n case \"BinaryExpression\": {\n const leftRef = Evaluate(node.left);\n const leftValue = GetValue(leftRef);\n const rightRef = Evaluate(node.right).Value;\n const rightValue = GetValue(rightRef);\n if (expressionOnly && (node.operator as unknown) === \"|>\") {\n // Minimal pipeline operator is supported only in expression-only mode.\n // See https://tc39.es/proposal-pipeline-operator\n // and https://github.com/tc39/proposal-pipeline-operator\n if (typeof rightValue !== \"function\") {\n const funcName = codeSource.substring(\n node.right.start,\n node.right.end\n );\n throw new TypeError(`${funcName} is not a function`);\n }\n let thisValue;\n if (rightRef instanceof ReferenceRecord) {\n if (IsPropertyReference(rightRef)) {\n thisValue = rightRef.Base;\n }\n }\n return NormalCompletion(\n (rightValue as unknown as SimpleFunction).call(thisValue, leftValue)\n );\n }\n // https://tc39.es/ecma262/#sec-additive-operators\n const result = ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n node.operator,\n rightValue as number\n );\n return NormalCompletion(result);\n }\n case \"CallExpression\": {\n // https://tc39.es/ecma262/#sec-function-calls\n const ref = Evaluate(node.callee, optionalChainRef)\n .Value as ReferenceRecord;\n const func = GetValue(ref) as SimpleFunction;\n if (\n (func === undefined || func === null) &&\n (node.optional || optionalChainRef?.skipped)\n ) {\n optionalChainRef.skipped = true;\n return NormalCompletion(undefined);\n }\n sanitize(func);\n return EvaluateCall(func, ref, node.arguments, node.callee);\n }\n case \"ChainExpression\":\n // https://tc39.es/ecma262/#sec-optional-chains\n return Evaluate(node.expression, {});\n case \"ConditionalExpression\":\n // https://tc39.es/ecma262/#sec-conditional-operator\n return NormalCompletion(\n GetValue(\n Evaluate(\n GetValue(Evaluate(node.test)) ? node.consequent : node.alternate\n )\n )\n );\n case \"Identifier\":\n // https://tc39.es/ecma262/#sec-identifiers\n return NormalCompletion(ResolveBinding(node.name));\n case \"Literal\": {\n // https://tc39.es/ecma262/#sec-primary-expression-literals\n if (node.regex) {\n if (node.value === null) {\n // Invalid regular expression fails silently in @babel/parser.\n throw new SyntaxError(`Invalid regular expression: ${node.raw}`);\n }\n if (node.regex.flags.includes(\"u\")) {\n // Currently unicode flag is not fully supported across major browsers.\n throw new SyntaxError(\n `Unsupported unicode flag in regular expression: ${node.raw}`\n );\n }\n }\n return NormalCompletion(node.value);\n }\n case \"LogicalExpression\": {\n // https://tc39.es/ecma262/#sec-binary-logical-operators\n const leftValue = GetValue(Evaluate(node.left));\n switch (node.operator) {\n case \"&&\":\n return NormalCompletion(\n leftValue && GetValue(Evaluate(node.right))\n );\n case \"||\":\n return NormalCompletion(\n leftValue || GetValue(Evaluate(node.right))\n );\n case \"??\":\n return NormalCompletion(\n leftValue ?? GetValue(Evaluate(node.right))\n );\n // istanbul ignore next\n default:\n throw new SyntaxError(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore never reach here.\n `Unsupported logical operator '${node.operator}'`\n );\n }\n }\n case \"MemberExpression\": {\n // https://tc39.es/ecma262/#sec-property-accessors\n const baseReference = Evaluate(node.object, optionalChainRef)\n .Value as ReferenceRecord;\n const baseValue = GetValue(baseReference) as Record<\n PropertyKey,\n unknown\n >;\n if (\n (baseValue === undefined || baseValue === null) &&\n (node.optional || optionalChainRef?.skipped)\n ) {\n optionalChainRef.skipped = true;\n return NormalCompletion(undefined);\n }\n sanitize(baseValue);\n const result = node.computed\n ? EvaluatePropertyAccessWithExpressionKey(\n baseValue,\n node.property as Expression,\n true\n )\n : EvaluatePropertyAccessWithIdentifierKey(\n baseValue,\n node.property as Identifier,\n true\n );\n sanitize(result);\n return NormalCompletion(result);\n }\n case \"NewExpression\":\n // https://tc39.es/ecma262/#sec-new-operator\n return EvaluateNew(node.callee, node.arguments);\n case \"ObjectExpression\": {\n // https://tc39.es/ecma262/#sec-object-initializer\n const object: Record<PropertyKey, unknown> = {};\n for (const prop of (node as EstreeObjectExpression).properties) {\n if (prop.type === \"SpreadElement\") {\n const fromValue = GetValue(Evaluate(prop.argument));\n CopyDataProperties(object, fromValue, new Set());\n } else {\n if (prop.kind !== \"init\") {\n throw new SyntaxError(\"Unsupported object getter/setter\");\n }\n const propName =\n !prop.computed && prop.key.type === \"Identifier\"\n ? prop.key.name\n : EvaluateComputedPropertyName(prop.key);\n if (propName === \"__proto__\") {\n throw new TypeError(\n \"Setting '__proto__' property is not allowed\"\n );\n }\n object[propName] = GetValue(Evaluate(prop.value));\n }\n }\n return NormalCompletion(object);\n }\n case \"SequenceExpression\": {\n // https://tc39.es/ecma262/#sec-comma-operator\n let result: CompletionRecord;\n for (const expr of node.expressions) {\n result = NormalCompletion(GetValue(Evaluate(expr)));\n }\n return result;\n }\n case \"TemplateLiteral\": {\n // https://tc39.es/ecma262/#sec-template-literals\n const chunks: string[] = [node.quasis[0].value.cooked];\n let index = 0;\n for (const expr of node.expressions) {\n const val = GetValue(Evaluate(expr));\n chunks.push(String(val));\n chunks.push(node.quasis[(index += 1)].value.cooked);\n }\n return NormalCompletion(chunks.join(\"\"));\n }\n case \"TaggedTemplateExpression\": {\n // https://tc39.es/ecma262/#sec-tagged-templates\n const tagRef = Evaluate(node.tag).Value as ReferenceRecord;\n const tagFunc = GetValue(tagRef) as SimpleFunction;\n sanitize(tagFunc);\n return EvaluateCall(tagFunc, tagRef, node.quasi, node.tag);\n }\n case \"UnaryExpression\": {\n // https://tc39.es/ecma262/#sec-unary-operators\n const ref = Evaluate(node.argument).Value as ReferenceRecord;\n if (!expressionOnly && node.operator === \"delete\") {\n // Delete operator is supported only in function mode.\n if (!(ref instanceof ReferenceRecord)) {\n return NormalCompletion(true);\n }\n // istanbul ignore else\n if (IsPropertyReference(ref)) {\n const deleteStatus = delete (\n ref.Base as Record<PropertyKey, unknown>\n )[ref.ReferenceName];\n return NormalCompletion(deleteStatus);\n }\n // Should never reach here in strict mode.\n }\n if (node.operator === \"typeof\") {\n if (ref instanceof ReferenceRecord && ref.Base === \"unresolvable\") {\n return NormalCompletion(\"undefined\");\n }\n return NormalCompletion(typeof GetValue(ref));\n }\n return NormalCompletion(\n ApplyUnaryOperator(GetValue(ref), node.operator)\n );\n }\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\": {\n // https://tc39.es/ecma262/#sec-assignment-operators\n if (node.operator === \"=\") {\n if (\n !(\n node.left.type === \"ArrayPattern\" ||\n node.left.type === \"ObjectPattern\"\n )\n ) {\n const lref = Evaluate(node.left).Value as ReferenceRecord;\n // Todo: IsAnonymousFunctionDefinition(lref)\n const rref = Evaluate(node.right);\n const rval = GetValue(rref);\n\n PutValue(lref, rval);\n return NormalCompletion(rval);\n }\n const rref = Evaluate(node.right);\n const rval = GetValue(rref) as string | number;\n DestructuringAssignmentEvaluation(node.left, rval);\n return NormalCompletion(rval);\n }\n // Operators other than `=`.\n const lref = Evaluate(node.left).Value as ReferenceRecord;\n const lval = GetValue(lref) as string | number;\n const rref = Evaluate(node.right);\n const rval = GetValue(rref) as string | number;\n const r = ApplyStringOrNumericAssignment(lval, node.operator, rval);\n PutValue(lref, r);\n return NormalCompletion(r);\n }\n case \"BlockStatement\": {\n // https://tc39.es/ecma262/#sec-block\n if (!node.body.length) {\n return NormalCompletion(Empty);\n }\n const oldEnv = getRunningContext().LexicalEnvironment;\n const blockEnv = new DeclarativeEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n getRunningContext().LexicalEnvironment = blockEnv;\n const blockValue = EvaluateStatementList(node.body);\n getRunningContext().LexicalEnvironment = oldEnv;\n return blockValue;\n }\n case \"BreakStatement\":\n // https://tc39.es/ecma262/#sec-break-statement\n return new CompletionRecord(\"break\", Empty);\n case \"ContinueStatement\":\n // https://tc39.es/ecma262/#sec-continue-statement\n return new CompletionRecord(\"continue\", Empty);\n case \"EmptyStatement\":\n // https://tc39.es/ecma262/#sec-empty-statement\n return NormalCompletion(Empty);\n case \"DoWhileStatement\":\n // https://tc39.es/ecma262/#sec-do-while-statement\n return EvaluateBreakableStatement(DoWhileLoopEvaluation(node));\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n // https://tc39.es/ecma262/#sec-expression-statement\n return Evaluate(node.expression);\n case \"ForInStatement\":\n case \"ForOfStatement\":\n // https://tc39.es/ecma262/#sec-for-in-and-for-of-statements\n return EvaluateBreakableStatement(ForInOfLoopEvaluation(node));\n case \"ForStatement\":\n // https://tc39.es/ecma262/#sec-for-statement\n return EvaluateBreakableStatement(ForLoopEvaluation(node));\n case \"FunctionDeclaration\":\n // https://tc39.es/ecma262/#sec-function-definitions\n return NormalCompletion(Empty);\n case \"FunctionExpression\":\n // https://tc39.es/ecma262/#sec-function-defining-expressions\n ThrowIfFunctionIsInvalid(node);\n return NormalCompletion(InstantiateOrdinaryFunctionExpression(node));\n case \"IfStatement\":\n // https://tc39.es/ecma262/#sec-if-statement\n return GetValue(Evaluate(node.test))\n ? (hooks.beforeBranch?.(node, \"if\"),\n UpdateEmpty(Evaluate(node.consequent), undefined))\n : (hooks.beforeBranch?.(node, \"else\"), node.alternate)\n ? UpdateEmpty(Evaluate(node.alternate), undefined)\n : NormalCompletion(undefined);\n case \"ReturnStatement\": {\n // https://tc39.es/ecma262/#sec-return-statement\n let v: unknown;\n if (node.argument) {\n const exprRef = Evaluate(node.argument);\n v = GetValue(exprRef);\n }\n return new CompletionRecord(\"return\", v);\n }\n case \"ThrowStatement\":\n // https://tc39.es/ecma262/#sec-throw-statement\n throw GetValue(Evaluate(node.argument));\n case \"UpdateExpression\": {\n // https://tc39.es/ecma262/#sec-update-expressions\n const lhs = Evaluate(node.argument).Value as ReferenceRecord;\n const oldValue = Number(GetValue(lhs));\n const newValue = node.operator === \"++\" ? oldValue + 1 : oldValue - 1;\n PutValue(lhs, newValue);\n return NormalCompletion(node.prefix ? newValue : oldValue);\n }\n case \"SwitchCase\":\n return EvaluateStatementList(node.consequent);\n case \"SwitchStatement\": {\n // https://tc39.es/ecma262/#sec-switch-statement\n const exprRef = Evaluate(node.discriminant);\n const switchValue = GetValue(exprRef);\n const oldEnv = getRunningContext().LexicalEnvironment;\n const blockEnv = new DeclarativeEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n getRunningContext().LexicalEnvironment = blockEnv;\n const R = CaseBlockEvaluation(node.cases, switchValue);\n getRunningContext().LexicalEnvironment = oldEnv;\n return EvaluateBreakableStatement(R);\n }\n case \"TryStatement\": {\n // https://tc39.es/ecma262/#sec-try-statement\n let R: CompletionRecord;\n try {\n R = Evaluate(node.block);\n } catch (error) {\n if (node.handler) {\n hooks.beforeEvaluate?.(node.handler);\n R = CatchClauseEvaluation(node.handler, error);\n } else {\n throw error;\n }\n } finally {\n if (node.finalizer) {\n const F = Evaluate(node.finalizer);\n if (F.Type !== \"normal\") {\n R = F;\n }\n }\n }\n return R;\n }\n case \"VariableDeclaration\": {\n // https://tc39.es/ecma262/#sec-declarations-and-the-variable-statement\n let result: CompletionRecord;\n for (const declarator of node.declarations) {\n if (!declarator.init) {\n // Assert: a declarator without init is always an identifier.\n if (node.kind === \"var\") {\n result = NormalCompletion(Empty);\n } else {\n const lhs = ResolveBinding((declarator.id as Identifier).name);\n result = InitializeReferencedBinding(lhs, undefined);\n }\n } else if (declarator.id.type === \"Identifier\") {\n const bindingId = declarator.id.name;\n const lhs = ResolveBinding(bindingId);\n // Todo: IsAnonymousFunctionDefinition(Initializer)\n const rhs = Evaluate(declarator.init);\n const value = GetValue(rhs);\n result =\n node.kind === \"var\"\n ? PutValue(lhs, value)\n : InitializeReferencedBinding(lhs, value);\n } else {\n const rhs = Evaluate(declarator.init);\n const rval = GetValue(rhs);\n result = BindingInitialization(\n declarator.id,\n rval,\n node.kind === \"var\"\n ? undefined\n : getRunningContext().LexicalEnvironment\n );\n }\n }\n return result;\n }\n case \"WhileStatement\":\n // https://tc39.es/ecma262/#sec-while-statement\n return EvaluateBreakableStatement(WhileLoopEvaluation(node));\n }\n }\n // eslint-disable-next-line no-console\n throw new SyntaxError(`Unsupported node type \\`${node.type}\\``);\n }\n\n // https://tc39.es/ecma262/#sec-execution-contexts\n function getRunningContext(): ExecutionContext {\n return executionContextStack[executionContextStack.length - 1];\n }\n\n // https://tc39.es/ecma262/#sec-resolvebinding\n function ResolveBinding(\n name: string,\n env?: EnvironmentRecord\n ): ReferenceRecord {\n if (!env) {\n env = getRunningContext().LexicalEnvironment;\n }\n return GetIdentifierReference(env, name, true);\n }\n\n // Try statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-catchclauseevaluation\n function CatchClauseEvaluation(\n node: CatchClause,\n thrownValue: unknown\n ): CompletionRecord {\n const oldEnv = getRunningContext().LexicalEnvironment;\n const catchEnv = new DeclarativeEnvironment(oldEnv);\n for (const argName of collectBoundNames(node.param)) {\n catchEnv.CreateMutableBinding(argName, false);\n }\n getRunningContext().LexicalEnvironment = catchEnv;\n BindingInitialization(node.param, thrownValue, catchEnv);\n const B = Evaluate(node.body);\n getRunningContext().LexicalEnvironment = oldEnv;\n return B;\n }\n\n // Iteration statements and switch statements.\n // https://tc39.es/ecma262/#prod-BreakableStatement\n function EvaluateBreakableStatement(\n stmtResult: CompletionRecord\n ): CompletionRecord {\n return stmtResult.Type === \"break\"\n ? stmtResult.Value === Empty\n ? NormalCompletion(undefined)\n : NormalCompletion(stmtResult.Value)\n : stmtResult;\n }\n\n // Switch statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseblockevaluation\n function CaseBlockEvaluation(\n cases: SwitchCase[],\n input: unknown\n ): CompletionRecord {\n let V: unknown;\n\n const defaultCaseIndex = cases.findIndex((switchCase) => !switchCase.test);\n const hasDefaultCase = defaultCaseIndex >= 0;\n const A = hasDefaultCase ? cases.slice(0, defaultCaseIndex) : cases;\n let found = false;\n for (const C of A) {\n if (!found) {\n found = CaseClauseIsSelected(C, input);\n }\n if (found) {\n const R = Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n }\n\n if (!hasDefaultCase) {\n return NormalCompletion(V);\n }\n\n let foundInB = false;\n const B = cases.slice(defaultCaseIndex + 1);\n if (!found) {\n for (const C of B) {\n if (!foundInB) {\n foundInB = CaseClauseIsSelected(C, input);\n }\n if (foundInB) {\n const R = Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n }\n }\n\n if (foundInB) {\n return NormalCompletion(V);\n }\n const R = Evaluate(cases[defaultCaseIndex]);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n\n // NOTE: The following is another complete iteration of the second CaseClauses.\n for (const C of B) {\n const R = Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n return NormalCompletion(V);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseclauseisselected\n function CaseClauseIsSelected(C: SwitchCase, input: unknown): boolean {\n const clauseSelector = GetValue(Evaluate(C.test));\n return input === clauseSelector;\n }\n\n // While statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-whileloopevaluation\n function WhileLoopEvaluation(node: WhileStatement): CompletionRecord {\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const exprValue = GetValue(Evaluate(node.test));\n if (!exprValue) {\n return NormalCompletion(V);\n }\n const stmtResult = Evaluate(node.body);\n if (!LoopContinues(stmtResult)) {\n return UpdateEmpty(stmtResult, V);\n }\n if (stmtResult.Value !== Empty) {\n V = stmtResult.Value;\n }\n }\n }\n\n // Do-while Statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-dowhileloopevaluation\n function DoWhileLoopEvaluation(node: DoWhileStatement): CompletionRecord {\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const stmtResult = Evaluate(node.body);\n if (!LoopContinues(stmtResult)) {\n return UpdateEmpty(stmtResult, V);\n }\n if (stmtResult.Value !== Empty) {\n V = stmtResult.Value;\n }\n const exprValue = GetValue(Evaluate(node.test));\n if (!exprValue) {\n return NormalCompletion(V);\n }\n }\n }\n\n // For in/of statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-forinofloopevaluation\n function ForInOfLoopEvaluation(\n node: ForInStatement | ForOfStatement\n ): CompletionRecord {\n const lhs = node.left;\n const isVariableDeclaration = lhs.type === \"VariableDeclaration\";\n const lhsKind = isVariableDeclaration\n ? lhs.kind === \"var\"\n ? \"varBinding\"\n : \"lexicalBinding\"\n : \"assignment\";\n const uninitializedBoundNames =\n lhsKind === \"lexicalBinding\" ? collectBoundNames(lhs) : [];\n const iterationKind =\n node.type === \"ForInStatement\" ? \"enumerate\" : \"iterate\";\n const keyResult = ForInOfHeadEvaluation(\n uninitializedBoundNames,\n node.right,\n iterationKind\n );\n if (keyResult.Type !== \"normal\") {\n // When enumerate, if the target is nil, a break completion will be returned.\n return keyResult;\n }\n return ForInOfBodyEvaluation(\n lhs,\n node.body,\n keyResult.Value as Iterator<unknown>,\n iterationKind,\n lhsKind\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-forinofheadevaluation\n function ForInOfHeadEvaluation(\n uninitializedBoundNames: string[],\n expr: Expression,\n iterationKind: \"enumerate\" | \"iterate\"\n ): CompletionRecord {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (uninitializedBoundNames.length > 0) {\n const newEnv = new DeclarativeEnvironment(oldEnv);\n for (const name of uninitializedBoundNames) {\n newEnv.CreateMutableBinding(name, false);\n }\n runningContext.LexicalEnvironment = newEnv;\n }\n const exprRef = Evaluate(expr);\n runningContext.LexicalEnvironment = oldEnv;\n const exprValue = GetValue(exprRef);\n if (iterationKind === \"enumerate\") {\n if (exprValue === null || exprValue === undefined) {\n return new CompletionRecord(\"break\", Empty);\n }\n const iterator = EnumerateObjectProperties(exprValue);\n return NormalCompletion(iterator);\n }\n const iterator = CreateListIteratorRecord(exprValue as Iterable<unknown>);\n return NormalCompletion(iterator);\n }\n\n function ForInOfBodyEvaluation(\n node: VariableDeclaration | EstreeLVal,\n stmt: Statement,\n iteratorRecord: Iterator<unknown>,\n iterationKind: \"enumerate\" | \"iterate\",\n lhsKind: \"varBinding\" | \"lexicalBinding\" | \"assignment\"\n ): CompletionRecord {\n const lhs =\n lhsKind === \"assignment\"\n ? (node as EstreeLVal)\n : (node as VariableDeclaration).declarations[0].id;\n const oldEnv = getRunningContext().LexicalEnvironment;\n let V: unknown;\n // When `destructuring` is false,\n // For `node` whose `kind` is assignment:\n // `lhs` is an `Identifier` or a `MemberExpression`,\n // Otherwise:\n // `lhs` is an `Identifier`.\n const destructuring =\n lhs.type === \"ObjectPattern\" || lhs.type === \"ArrayPattern\";\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value: nextValue } = iteratorRecord.next();\n if (done) {\n return NormalCompletion(V);\n }\n let lhsRef: ReferenceRecord;\n let iterationEnv: DeclarativeEnvironment;\n if (lhsKind === \"lexicalBinding\") {\n iterationEnv = new DeclarativeEnvironment(oldEnv);\n ForDeclarationBindingInstantiation(\n node as VariableDeclaration,\n iterationEnv\n );\n getRunningContext().LexicalEnvironment = iterationEnv;\n if (!destructuring) {\n const [lhsName] = collectBoundNames(lhs);\n lhsRef = ResolveBinding(lhsName);\n }\n } else if (!destructuring) {\n lhsRef = Evaluate(lhs).Value as ReferenceRecord;\n }\n destructuring\n ? lhsKind === \"assignment\"\n ? DestructuringAssignmentEvaluation(lhs, nextValue)\n : lhsKind === \"varBinding\"\n ? BindingInitialization(lhs, nextValue, undefined)\n : BindingInitialization(lhs, nextValue, iterationEnv)\n : lhsKind === \"lexicalBinding\"\n ? InitializeReferencedBinding(lhsRef, nextValue)\n : PutValue(lhsRef, nextValue);\n\n const result = Evaluate(stmt);\n getRunningContext().LexicalEnvironment = oldEnv;\n if (!LoopContinues(result)) {\n return UpdateEmpty(result, V);\n }\n if (result.Value !== Empty) {\n V = result.Value;\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-enumerate-object-properties\n function* EnumerateObjectProperties(value: any): Iterator<PropertyKey> {\n for (const key in value) {\n yield key;\n }\n }\n\n // For statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-forloopevaluation\n function ForLoopEvaluation(node: ForStatement): CompletionRecord {\n if (node.init?.type === \"VariableDeclaration\") {\n // `for (var … ; … ; … ) …`\n if (node.init.kind === \"var\") {\n Evaluate(node.init);\n return ForBodyEvaluation(node.test, node.update, node.body, []);\n }\n // `for (let/const … ; … ; … ) …`\n const oldEnv = getRunningContext().LexicalEnvironment;\n const loopEnv = new DeclarativeEnvironment(oldEnv);\n const isConst = node.init.kind === \"const\";\n const boundNames = collectBoundNames(node.init);\n for (const dn of boundNames) {\n if (isConst) {\n loopEnv.CreateImmutableBinding(dn, true);\n } else {\n loopEnv.CreateMutableBinding(dn, false);\n }\n }\n getRunningContext().LexicalEnvironment = loopEnv;\n Evaluate(node.init);\n const perIterationLets = isConst ? [] : Array.from(boundNames);\n const bodyResult = ForBodyEvaluation(\n node.test,\n node.update,\n node.body,\n perIterationLets\n );\n getRunningContext().LexicalEnvironment = oldEnv;\n return bodyResult;\n }\n // `for ( … ; … ; … ) …`\n if (node.init) {\n const exprRef = Evaluate(node.init);\n GetValue(exprRef);\n }\n return ForBodyEvaluation(node.test, node.update, node.body, []);\n }\n\n // https://tc39.es/ecma262/#sec-forbodyevaluation\n function ForBodyEvaluation(\n test: Expression,\n increment: Expression,\n stmt: Statement,\n perIterationBindings: string[]\n ): CompletionRecord {\n CreatePerIterationEnvironment(perIterationBindings);\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (test) {\n const testRef = Evaluate(test);\n const testValue = GetValue(testRef);\n if (!testValue) {\n return NormalCompletion(V);\n }\n }\n const result = Evaluate(stmt) as CompletionRecord;\n if (!LoopContinues(result)) {\n return UpdateEmpty(result, V);\n }\n if (result.Value) {\n V = result.Value;\n }\n CreatePerIterationEnvironment(perIterationBindings);\n if (increment) {\n const incRef = Evaluate(increment);\n GetValue(incRef);\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-createperiterationenvironment\n function CreatePerIterationEnvironment(\n perIterationBindings: string[]\n ): unknown {\n if (perIterationBindings.length === 0) {\n return;\n }\n const lastIterationEnv = getRunningContext().LexicalEnvironment;\n const outer = lastIterationEnv.OuterEnv;\n const thisIterationEnv = new DeclarativeEnvironment(outer);\n for (const bn of perIterationBindings) {\n thisIterationEnv.CreateMutableBinding(bn, false);\n const lastValue = lastIterationEnv.GetBindingValue(bn, false);\n thisIterationEnv.InitializeBinding(bn, lastValue);\n }\n getRunningContext().LexicalEnvironment = thisIterationEnv;\n }\n\n // Destructuring assignments.\n // https://tc39.es/ecma262/#sec-runtime-semantics-destructuringassignmentevaluation\n function DestructuringAssignmentEvaluation(\n pattern: ObjectPattern | EstreeObjectPattern | ArrayPattern,\n value: unknown\n ): CompletionRecord {\n if (pattern.type === \"ObjectPattern\") {\n RequireObjectCoercible(value);\n if (pattern.properties.length > 0) {\n PropertyDestructuringAssignmentEvaluation(\n (pattern as EstreeObjectPattern).properties,\n value\n );\n }\n return NormalCompletion(Empty);\n }\n const iteratorRecord = CreateListIteratorRecord(value as Iterable<unknown>);\n return IteratorDestructuringAssignmentEvaluation(\n pattern.elements,\n iteratorRecord\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-propertydestructuringassignmentevaluation\n function PropertyDestructuringAssignmentEvaluation(\n properties: (EstreeProperty | RestElement)[],\n value: unknown\n ): void {\n const excludedNames = new Set<PropertyKey>();\n for (const prop of properties) {\n if (prop.type === \"Property\") {\n const propName =\n !prop.computed && prop.key.type === \"Identifier\"\n ? prop.key.name\n : (EvaluateComputedPropertyName(prop.key) as string);\n const valueTarget =\n prop.value.type === \"AssignmentPattern\"\n ? prop.value.left\n : prop.value;\n if (valueTarget.type === \"Identifier\") {\n const lref = ResolveBinding(valueTarget.name);\n let v = GetV(value, propName);\n if (prop.value.type === \"AssignmentPattern\" && v === undefined) {\n // Todo(steve): check IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(prop.value.right);\n v = GetValue(defaultValue);\n }\n PutValue(lref, v);\n excludedNames.add(propName);\n } else {\n KeyedDestructuringAssignmentEvaluation(prop.value, value, propName);\n excludedNames.add(propName);\n }\n } else {\n RestDestructuringAssignmentEvaluation(prop, value, excludedNames);\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-keyeddestructuringassignmentevaluation\n function KeyedDestructuringAssignmentEvaluation(\n node: EstreeNode,\n value: unknown,\n propertyName: PropertyKey\n ): CompletionRecord {\n const assignmentTarget =\n node.type === \"AssignmentPattern\" ? node.left : node;\n const isObjectOrArray =\n assignmentTarget.type === \"ArrayPattern\" ||\n assignmentTarget.type === \"ObjectPattern\";\n let lref;\n if (!isObjectOrArray) {\n lref = Evaluate(assignmentTarget).Value as ReferenceRecord;\n }\n const v = GetV(value, propertyName);\n let rhsValue;\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // Todo(steve): check IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(node.right);\n rhsValue = GetValue(defaultValue);\n } else {\n rhsValue = v;\n }\n if (isObjectOrArray) {\n return DestructuringAssignmentEvaluation(assignmentTarget, rhsValue);\n }\n return PutValue(lref, rhsValue);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-restdestructuringassignmentevaluation\n function RestDestructuringAssignmentEvaluation(\n restProperty: RestElement,\n value: unknown,\n excludedNames: Set<PropertyKey>\n ): CompletionRecord {\n const lref = Evaluate(restProperty.argument).Value as ReferenceRecord;\n const restObj = CopyDataProperties({}, value, excludedNames);\n return PutValue(lref, restObj);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-iteratordestructuringassignmentevaluation\n function IteratorDestructuringAssignmentEvaluation(\n elements: PatternLike[],\n iteratorRecord: Iterator<unknown>\n ): CompletionRecord {\n let status = NormalCompletion(Empty);\n for (const element of elements) {\n if (!element) {\n iteratorRecord.next();\n status = NormalCompletion(Empty);\n continue;\n }\n const assignmentTarget =\n element.type === \"RestElement\"\n ? element.argument\n : element.type === \"AssignmentPattern\"\n ? element.left\n : element;\n const isObjectOrArray =\n assignmentTarget.type === \"ArrayPattern\" ||\n assignmentTarget.type === \"ObjectPattern\";\n let lref: ReferenceRecord;\n if (!isObjectOrArray) {\n lref = Evaluate(assignmentTarget).Value as ReferenceRecord;\n }\n let v: unknown;\n if (element.type !== \"RestElement\") {\n const { done, value: nextValue } = iteratorRecord.next();\n const value = done ? undefined : nextValue;\n if (element.type === \"AssignmentPattern\" && value === undefined) {\n // Todo(steve): check IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(element.right);\n v = GetValue(defaultValue);\n } else {\n v = value;\n }\n } else {\n // RestElement\n v = [];\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value: nextValue } = iteratorRecord.next();\n if (done) {\n break;\n }\n (v as unknown[])[n] = nextValue;\n n++;\n }\n }\n if (isObjectOrArray) {\n status = DestructuringAssignmentEvaluation(assignmentTarget, v);\n } else {\n status = PutValue(lref, v);\n }\n }\n return status;\n }\n\n // Object expressions.\n // https://tc39.es/ecma262/#sec-evaluate-property-access-with-expression-key\n function EvaluatePropertyAccessWithExpressionKey(\n baseValue: Record<PropertyKey, unknown>,\n expression: Expression,\n strict: boolean\n ): ReferenceRecord {\n const propertyNameReference = Evaluate(expression);\n const propertyNameValue = GetValue(propertyNameReference);\n const propertyKey = ToPropertyKey(propertyNameValue);\n return new ReferenceRecord(baseValue, propertyKey, strict);\n }\n\n // https://tc39.es/ecma262/#sec-evaluate-property-access-with-identifier-key\n function EvaluatePropertyAccessWithIdentifierKey(\n baseValue: Record<PropertyKey, unknown>,\n identifier: Identifier,\n strict: boolean\n ): ReferenceRecord {\n const propertyNameString = identifier.name;\n return new ReferenceRecord(baseValue, propertyNameString, strict);\n }\n\n // Block statements.\n // https://tc39.es/ecma262/#sec-blockdeclarationinstantiation\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: EnvironmentRecord\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n for (const d of declarations) {\n const IsConstantDeclaration =\n d.type === \"VariableDeclaration\" && d.kind === \"const\";\n for (const dn of collectBoundNames(d)) {\n if (IsConstantDeclaration) {\n env.CreateImmutableBinding(dn, true);\n } else {\n env.CreateMutableBinding(dn, false);\n }\n }\n if (d.type === \"FunctionDeclaration\") {\n const [fn] = collectBoundNames(d);\n const fo = InstantiateFunctionObject(d, env);\n env.InitializeBinding(fn, fo);\n }\n }\n }\n\n // Function declarations and expressions.\n // https://tc39.es/ecma262/#sec-evaluatecall\n function EvaluateCall(\n func: SimpleFunction,\n ref: ReferenceRecord,\n args: CallExpression[\"arguments\"] | TemplateLiteral,\n callee: CallExpression[\"callee\"]\n ): CompletionRecord {\n let thisValue;\n if (ref instanceof ReferenceRecord) {\n if (IsPropertyReference(ref)) {\n thisValue = ref.Base;\n }\n }\n const argList = ArgumentListEvaluation(args);\n if (typeof func !== \"function\") {\n const funcName = codeSource.substring(callee.start, callee.end);\n throw new TypeError(`${funcName} is not a function`);\n }\n const result = func.apply(thisValue, argList);\n sanitize(result);\n return NormalCompletion(result);\n }\n\n // https://tc39.es/ecma262/#sec-evaluatenew\n function EvaluateNew(\n constructExpr: CallExpression[\"callee\"],\n args: NewExpression[\"arguments\"]\n ): CompletionRecord {\n const ref = Evaluate(constructExpr);\n const constructor = GetValue(ref) as new (...args: unknown[]) => unknown;\n const argList = ArgumentListEvaluation(args);\n if (\n typeof constructor !== \"function\" ||\n (constructor as unknown as FunctionObject)[IsConstructor] === false\n ) {\n const constructorName = codeSource.substring(\n constructExpr.start,\n constructExpr.end\n );\n throw new TypeError(`${constructorName} is not a constructor`);\n }\n if (!isAllowedConstructor(constructor)) {\n const constructorName = codeSource.substring(\n constructExpr.start,\n constructExpr.end\n );\n throw new TypeError(`${constructorName} is not an allowed constructor`);\n }\n return NormalCompletion(new constructor(...argList));\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-argumentlistevaluation\n function ArgumentListEvaluation(\n args: CallExpression[\"arguments\"] | TemplateLiteral\n ): unknown[] {\n const array: unknown[] = [];\n if (Array.isArray(args)) {\n for (const arg of args) {\n if (arg.type === \"SpreadElement\") {\n const spreadValues = GetValue(Evaluate(arg.argument)) as unknown[];\n array.push(...spreadValues);\n } else {\n array.push(GetValue(Evaluate(arg)));\n }\n }\n } else {\n array.push(GetTemplateObject(args));\n for (const expr of args.expressions) {\n array.push(GetValue(Evaluate(expr)));\n }\n }\n return array;\n }\n\n // https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n function CallFunction(\n closure: FunctionObject,\n args: Iterable<unknown>\n ): unknown {\n hooks.beforeCall?.(closure[SourceNode]);\n PrepareForOrdinaryCall(closure);\n const result = OrdinaryCallEvaluateBody(closure, args);\n executionContextStack.pop();\n if (result.Type === \"return\") {\n return result.Value;\n }\n return undefined;\n }\n\n // https://tc39.es/ecma262/#sec-prepareforordinarycall\n function PrepareForOrdinaryCall(F: FunctionObject): ExecutionContext {\n const calleeContext = new ExecutionContext();\n calleeContext.Function = F;\n const localEnv = new FunctionEnvironment(F[Environment]);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n executionContextStack.push(calleeContext);\n return calleeContext;\n }\n\n // https://tc39.es/ecma262/#sec-ordinarycallevaluatebody\n function OrdinaryCallEvaluateBody(\n F: FunctionObject,\n args: Iterable<unknown>\n ): CompletionRecord {\n return EvaluateFunctionBody(F[ECMAScriptCode], F, args);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-evaluatefunctionbody\n function EvaluateFunctionBody(\n body: Statement[] | Expression,\n F: FunctionObject,\n args: Iterable<unknown>\n ): CompletionRecord {\n FunctionDeclarationInstantiation(F, args);\n if (Array.isArray(body)) {\n return EvaluateStatementList(body);\n }\n return new CompletionRecord(\"return\", GetValue(Evaluate(body)));\n }\n\n // https://tc39.es/ecma262/#sec-block-runtime-semantics-evaluation\n function EvaluateStatementList(statements: Statement[]): CompletionRecord {\n let result = NormalCompletion(Empty);\n for (const stmt of statements) {\n const s = Evaluate(stmt);\n if (s.Type !== \"normal\") {\n return s;\n }\n result = UpdateEmpty(result, s.Value);\n }\n return result;\n }\n\n // https://tc39.es/ecma262/#sec-functiondeclarationinstantiation\n function FunctionDeclarationInstantiation(\n func: FunctionObject,\n args: Iterable<unknown>\n ): void {\n const calleeContext = getRunningContext();\n const code = func[ECMAScriptCode] as BlockStatement | Expression;\n const formals = func[FormalParameters] as FunctionDeclaration[\"params\"];\n const parameterNames = collectBoundNames(formals);\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n // `functionNames` ∈ `varNames`\n // `functionsToInitialize` ≈ `functionNames`\n const functionNames: string[] = [];\n const functionsToInitialize: FunctionDeclaration[] = [];\n for (let i = varDeclarations.length - 1; i >= 0; i--) {\n const d = varDeclarations[i];\n if (d.type === \"FunctionDeclaration\") {\n ThrowIfFunctionIsInvalid(d);\n const [fn] = collectBoundNames(d);\n if (!functionNames.includes(fn)) {\n functionNames.unshift(fn);\n functionsToInitialize.unshift(d);\n }\n } else if (rules?.noVar) {\n throw new SyntaxError(\n \"Var declaration is not recommended, use `let` or `const` instead\"\n );\n }\n }\n\n const env = calleeContext.LexicalEnvironment;\n for (const paramName of parameterNames) {\n // In strict mode, it's guaranteed no duplicate params exist.\n env.CreateMutableBinding(paramName, false);\n }\n\n const iteratorRecord = CreateListIteratorRecord(args);\n IteratorBindingInitialization(formals, iteratorRecord, env);\n\n let varEnv: EnvironmentRecord;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n // `varNames` are unique.\n for (const n of varNames) {\n if (!parameterNames.includes(n)) {\n env.CreateMutableBinding(n, false);\n env.InitializeBinding(n, undefined);\n }\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new DeclarativeEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n // `varNames` are unique.\n for (const n of varNames) {\n varEnv.CreateMutableBinding(n, false);\n let initialValue: unknown;\n if (parameterNames.includes(n) && !functionNames.includes(n)) {\n initialValue = env.GetBindingValue(n, false);\n }\n varEnv.InitializeBinding(n, initialValue);\n // NOTE: A var with the same name as a formal parameter initially has\n // the same value as the corresponding initialized parameter.\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n for (const d of lexDeclarations) {\n for (const dn of collectBoundNames(d)) {\n // Only lexical VariableDeclaration here in top-level.\n if ((d as VariableDeclaration).kind === \"const\") {\n lexEnv.CreateImmutableBinding(dn, true);\n } else {\n lexEnv.CreateMutableBinding(dn, false);\n }\n }\n }\n\n for (const f of functionsToInitialize) {\n const [fn] = collectBoundNames(f);\n const fo = InstantiateFunctionObject(f, lexEnv);\n varEnv.SetMutableBinding(fn, fo, false);\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiatefunctionobject\n function InstantiateFunctionObject(\n func: FunctionDeclaration,\n scope: EnvironmentRecord\n ): FunctionObject {\n return OrdinaryFunctionCreate(func, scope, true);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiateordinaryfunctionexpression\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): FunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (functionExpression.id) {\n const name = functionExpression.id.name;\n const funcEnv = new DeclarativeEnvironment(scope);\n funcEnv.CreateImmutableBinding(name, false);\n const closure = OrdinaryFunctionCreate(\n functionExpression,\n // functionExpression.params,\n // functionExpression.body,\n funcEnv,\n true\n );\n funcEnv.InitializeBinding(name, closure);\n return closure;\n } else {\n const closure = OrdinaryFunctionCreate(functionExpression, scope, true);\n return closure;\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiatearrowfunctionexpression\n function InstantiateArrowFunctionExpression(\n arrowFunction: ArrowFunctionExpression\n ): FunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(arrowFunction, scope, false);\n return closure;\n }\n\n // https://tc39.es/ecma262/#sec-ordinaryfunctioncreate\n function OrdinaryFunctionCreate(\n sourceNode:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression,\n // parameterList: FunctionDeclaration[\"params\"],\n // body: BlockStatement | Expression,\n scope: EnvironmentRecord,\n isConstructor: boolean\n ): FunctionObject {\n const F = function () {\n // eslint-disable-next-line prefer-rest-params\n return CallFunction(F, arguments);\n } as FunctionObject;\n Object.defineProperties(F, {\n [SourceNode]: {\n value: sourceNode,\n },\n [FormalParameters]: {\n value: sourceNode.params,\n },\n [ECMAScriptCode]: {\n value:\n sourceNode.body.type === \"BlockStatement\"\n ? sourceNode.body.body\n : sourceNode.body,\n },\n [Environment]: {\n value: scope,\n },\n [IsConstructor]: {\n value: isConstructor,\n },\n });\n return F;\n }\n\n // Patterns initialization.\n // https://tc39.es/ecma262/#sec-runtime-semantics-bindinginitialization\n function BindingInitialization(\n node: EstreeLVal,\n value: unknown,\n environment: EnvironmentRecord\n ): CompletionRecord {\n switch (node.type) {\n case \"Identifier\":\n return InitializeBoundName(node.name, value, environment);\n case \"ObjectPattern\":\n RequireObjectCoercible(value);\n return PropertyBindingInitialization(\n (node as EstreeObjectPattern).properties,\n value,\n environment\n );\n case \"ArrayPattern\": {\n const iteratorRecord = CreateListIteratorRecord(\n value as Iterable<unknown>\n );\n return IteratorBindingInitialization(\n node.elements,\n iteratorRecord,\n environment\n );\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-destructuring-binding-patterns-runtime-semantics-propertybindinginitialization\n function PropertyBindingInitialization(\n properties: (EstreeProperty | RestElement)[],\n value: unknown,\n environment: EnvironmentRecord\n ): CompletionRecord {\n const excludedNames = new Set<PropertyKey>();\n for (const prop of properties) {\n if (prop.type === \"RestElement\") {\n return RestBindingInitialization(\n prop,\n value,\n environment,\n excludedNames\n );\n }\n if (!prop.computed && prop.key.type === \"Identifier\") {\n KeyedBindingInitialization(\n prop.value as EstreeLVal,\n value,\n environment,\n prop.key.name\n );\n excludedNames.add(prop.key.name);\n } else {\n const P = EvaluateComputedPropertyName(prop.key);\n KeyedBindingInitialization(\n prop.value as EstreeLVal,\n value,\n environment,\n P\n );\n excludedNames.add(P);\n }\n }\n return NormalCompletion(Empty);\n }\n\n // https://tc39.es/ecma262/#prod-ComputedPropertyName\n function EvaluateComputedPropertyName(node: Expression): PropertyKey {\n const propName = GetValue(Evaluate(node));\n return ToPropertyKey(propName);\n }\n\n // https://tc39.es/ecma262/#sec-destructuring-binding-patterns-runtime-semantics-restbindinginitialization\n function RestBindingInitialization(\n restProperty: RestElement,\n value: unknown,\n environment: EnvironmentRecord,\n excludedNames: Set<PropertyKey>\n ): CompletionRecord {\n const lhs = ResolveBinding(\n (restProperty.argument as Identifier).name,\n environment\n );\n const restObj = CopyDataProperties({}, value, excludedNames);\n if (!environment) {\n return PutValue(lhs, restObj);\n }\n return InitializeReferencedBinding(lhs, restObj);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-iteratorbindinginitialization\n function IteratorBindingInitialization(\n elements: PatternLike[],\n iteratorRecord: Iterator<unknown>,\n environment: EnvironmentRecord\n ): CompletionRecord {\n if (elements.length === 0) {\n return NormalCompletion(Empty);\n }\n let result;\n for (const node of elements) {\n if (!node) {\n // Elision element.\n iteratorRecord.next();\n result = NormalCompletion(Empty);\n } else if (node.type === \"RestElement\") {\n // Rest element.\n if (node.argument.type === \"Identifier\") {\n const lhs = ResolveBinding(node.argument.name, environment);\n const A: unknown[] = [];\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iteratorRecord.next();\n if (done) {\n result = environment\n ? InitializeReferencedBinding(lhs, A)\n : PutValue(lhs, A);\n break;\n }\n A[n] = value;\n n++;\n }\n } else {\n const A: unknown[] = [];\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iteratorRecord.next();\n if (done) {\n result = BindingInitialization(node.argument, A, environment);\n break;\n }\n A[n] = value;\n n++;\n }\n }\n } else {\n // Normal element.\n const bindingElement =\n node.type === \"AssignmentPattern\" ? node.left : node;\n switch (bindingElement.type) {\n case \"ObjectPattern\":\n case \"ArrayPattern\": {\n let v: unknown;\n const { done, value } = iteratorRecord.next();\n if (!done) {\n v = value;\n }\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n result = BindingInitialization(bindingElement, v, environment);\n break;\n }\n case \"Identifier\": {\n const bindingId = bindingElement.name;\n const lhs = ResolveBinding(bindingId, environment);\n let v: unknown;\n const { done, value } = iteratorRecord.next();\n if (!done) {\n v = value;\n }\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n result = environment\n ? InitializeReferencedBinding(lhs, v)\n : PutValue(lhs, v);\n break;\n }\n }\n }\n }\n return result;\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-keyedbindinginitialization\n function KeyedBindingInitialization(\n node: EstreeLVal,\n value: unknown,\n environment: EnvironmentRecord,\n propertyName: PropertyKey\n ): CompletionRecord {\n const isIdentifier =\n node.type === \"Identifier\" ||\n (node.type === \"AssignmentPattern\" && node.left.type === \"Identifier\");\n if (isIdentifier) {\n const bindingId =\n node.type === \"Identifier\" ? node.name : (node.left as Identifier).name;\n const lhs = ResolveBinding(bindingId, environment);\n let v = GetV(value, propertyName);\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // If IsAnonymousFunctionDefinition(Initializer)\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n if (!environment) {\n return PutValue(lhs, v);\n }\n return InitializeReferencedBinding(lhs, v);\n }\n\n let v = GetV(value, propertyName);\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n const defaultValue = Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n return BindingInitialization(\n node.type === \"AssignmentPattern\" ? node.left : node,\n v,\n environment\n );\n }\n\n // https://tc39.es/ecma262/#sec-initializeboundname\n function InitializeBoundName(\n name: string,\n value: unknown,\n environment?: EnvironmentRecord\n ): CompletionRecord {\n // Assert: environment is always present.\n environment.InitializeBinding(name, value);\n return NormalCompletion(Empty);\n }\n\n function ThrowIfFunctionIsInvalid(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n ): void {\n if (func.async || func.generator) {\n throw new SyntaxError(\n `${func.async ? \"Async\" : \"Generator\"} function is not allowed`\n );\n }\n if (expressionOnly && !(func as ArrowFunctionExpression).expression) {\n throw new SyntaxError(\n \"Only an `Expression` is allowed in `ArrowFunctionExpression`'s body\"\n );\n }\n }\n\n if (expressionOnly) {\n return GetValue(Evaluate(rootAst));\n }\n\n hooks.beforeEvaluate?.(rootAst);\n ThrowIfFunctionIsInvalid(rootAst);\n const [fn] = collectBoundNames(rootAst);\n // Create an immutable binding for the root function.\n rootEnv.CreateImmutableBinding(fn, true);\n const fo = InstantiateFunctionObject(rootAst, rootEnv);\n rootEnv.InitializeBinding(fn, fo);\n return fo;\n}\n"],"file":"cook.js"}
package/dist/esm/lint.js CHANGED
@@ -2,10 +2,11 @@ import { parse } from "@babel/parser";
2
2
  import { precook } from "./precook";
3
3
 
4
4
  /** For next-core internal or devtools usage only. */
5
- export function lint(source, {
6
- typescript,
7
- rules
8
- } = {}) {
5
+ export function lint(source) {
6
+ var {
7
+ typescript,
8
+ rules
9
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
9
10
  var errors = [];
10
11
  var file;
11
12
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lint.ts"],"names":["parse","precook","lint","source","typescript","rules","errors","file","plugins","filter","Boolean","strictMode","attachComment","sourceType","e","body","program","jsNodes","node","type","startsWith","test","push","message","loc","func","isFunctionDeclaration","unshift","start","line","column","end","FunctionVisitor","async","generator","visitors","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression","Literal","regex","value","flags","includes","ObjectExpression","prop","properties","kind","computed","key","name","VariableDeclaration","noVar","__UnknownNode","__GlobalVariable"],"mappings":"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","sourcesContent":["import { parse, ParseResult, ParserPlugin } from \"@babel/parser\";\nimport {\n ArrowFunctionExpression,\n File,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n SourceLocation,\n Statement,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n EstreeLiteral,\n CookRules,\n EstreeObjectExpression,\n EstreeVisitorFn,\n EstreeNode,\n} from \"./interfaces\";\nimport { precook } from \"./precook\";\n\nexport interface LintOptions {\n typescript?: boolean;\n rules?: CookRules;\n}\n\nexport interface LintError {\n type: \"SyntaxError\" | \"TypeError\";\n message: string;\n loc: SourceLocation;\n}\n\n/** For next-core internal or devtools usage only. */\nexport function lint(\n source: string,\n { typescript, rules }: LintOptions = {}\n): LintError[] {\n const errors: LintError[] = [];\n let file: ParseResult<File>;\n try {\n file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n // Allow export/import declarations to make linter handle errors.\n sourceType: \"unambiguous\",\n });\n } catch (e) {\n // Return no errors if parse failed.\n return errors;\n }\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported TypeScript syntax: \\`${node.type}\\``,\n loc: node.loc,\n });\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n let func: FunctionDeclaration;\n for (const node of jsNodes) {\n const isFunctionDeclaration = node.type === \"FunctionDeclaration\";\n if (isFunctionDeclaration && !func) {\n func = node;\n } else {\n errors.push({\n type: \"SyntaxError\",\n message: isFunctionDeclaration\n ? \"Expect a single function declaration\"\n : `\\`${node.type}\\` is not allowed in top level`,\n loc: node.loc,\n });\n }\n }\n if (!func) {\n errors.unshift({\n type: \"SyntaxError\",\n message: \"Function declaration not found\",\n loc: {\n start: { line: 1, column: 0 },\n end: { line: 1, column: 0 },\n },\n });\n } else {\n const FunctionVisitor: EstreeVisitorFn = (\n node: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n ) => {\n if (node.async || node.generator) {\n errors.push({\n type: \"SyntaxError\",\n message: `${\n node.async ? \"Async\" : \"Generator\"\n } function is not allowed`,\n loc: node.loc,\n });\n }\n };\n precook(func, {\n visitors: {\n ArrowFunctionExpression: FunctionVisitor,\n FunctionDeclaration: FunctionVisitor,\n FunctionExpression: FunctionVisitor,\n Literal(node: EstreeLiteral) {\n if (node.regex) {\n if (node.value === null) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Invalid regular expression\",\n loc: node.loc,\n });\n } else if (node.regex.flags.includes(\"u\")) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported unicode flag in regular expression\",\n loc: node.loc,\n });\n }\n }\n },\n ObjectExpression(node: EstreeObjectExpression) {\n for (const prop of node.properties) {\n if (prop.type === \"Property\") {\n if (prop.kind !== \"init\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported object getter/setter property\",\n loc: prop.loc,\n });\n } else if (\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n prop.key.name === \"__proto__\"\n ) {\n errors.push({\n type: \"TypeError\",\n message: \"Setting '__proto__' property is not allowed\",\n loc: prop.key.loc,\n });\n }\n }\n }\n },\n VariableDeclaration(node: VariableDeclaration) {\n if (node.kind === \"var\" && rules?.noVar) {\n errors.push({\n type: \"SyntaxError\",\n message:\n \"Var declaration is not recommended, use `let` or `const` instead\",\n loc: {\n start: node.loc.start,\n end: {\n line: node.loc.end.line,\n // Only decorate the \"var\".\n column: node.loc.start.column + 3,\n },\n },\n });\n }\n },\n __UnknownNode(node: EstreeNode) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported syntax: \\`${node.type}\\``,\n loc: node.loc,\n });\n },\n __GlobalVariable(node: Identifier) {\n if (node.name === \"arguments\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Use the rest parameters instead of 'arguments'\",\n loc: node.loc,\n });\n }\n },\n },\n });\n }\n return errors;\n}\n"],"file":"lint.js"}
1
+ {"version":3,"sources":["../../src/lint.ts"],"names":["parse","precook","lint","source","typescript","rules","errors","file","plugins","filter","Boolean","strictMode","attachComment","sourceType","e","body","program","jsNodes","node","type","startsWith","test","push","message","loc","func","isFunctionDeclaration","unshift","start","line","column","end","FunctionVisitor","async","generator","visitors","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression","Literal","regex","value","flags","includes","ObjectExpression","prop","properties","kind","computed","key","name","VariableDeclaration","noVar","__UnknownNode","__GlobalVariable"],"mappings":"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","sourcesContent":["import { parse, ParseResult, ParserPlugin } from \"@babel/parser\";\nimport {\n ArrowFunctionExpression,\n File,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n SourceLocation,\n Statement,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n EstreeLiteral,\n CookRules,\n EstreeObjectExpression,\n EstreeVisitorFn,\n EstreeNode,\n} from \"./interfaces\";\nimport { precook } from \"./precook\";\n\nexport interface LintOptions {\n typescript?: boolean;\n rules?: CookRules;\n}\n\nexport interface LintError {\n type: \"SyntaxError\" | \"TypeError\";\n message: string;\n loc: SourceLocation;\n}\n\n/** For next-core internal or devtools usage only. */\nexport function lint(\n source: string,\n { typescript, rules }: LintOptions = {}\n): LintError[] {\n const errors: LintError[] = [];\n let file: ParseResult<File>;\n try {\n file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n // Allow export/import declarations to make linter handle errors.\n sourceType: \"unambiguous\",\n });\n } catch (e) {\n // Return no errors if parse failed.\n return errors;\n }\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported TypeScript syntax: \\`${node.type}\\``,\n loc: node.loc,\n });\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n let func: FunctionDeclaration;\n for (const node of jsNodes) {\n const isFunctionDeclaration = node.type === \"FunctionDeclaration\";\n if (isFunctionDeclaration && !func) {\n func = node;\n } else {\n errors.push({\n type: \"SyntaxError\",\n message: isFunctionDeclaration\n ? \"Expect a single function declaration\"\n : `\\`${node.type}\\` is not allowed in top level`,\n loc: node.loc,\n });\n }\n }\n if (!func) {\n errors.unshift({\n type: \"SyntaxError\",\n message: \"Function declaration not found\",\n loc: {\n start: { line: 1, column: 0 },\n end: { line: 1, column: 0 },\n },\n });\n } else {\n const FunctionVisitor: EstreeVisitorFn = (\n node: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n ) => {\n if (node.async || node.generator) {\n errors.push({\n type: \"SyntaxError\",\n message: `${\n node.async ? \"Async\" : \"Generator\"\n } function is not allowed`,\n loc: node.loc,\n });\n }\n };\n precook(func, {\n visitors: {\n ArrowFunctionExpression: FunctionVisitor,\n FunctionDeclaration: FunctionVisitor,\n FunctionExpression: FunctionVisitor,\n Literal(node: EstreeLiteral) {\n if (node.regex) {\n if (node.value === null) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Invalid regular expression\",\n loc: node.loc,\n });\n } else if (node.regex.flags.includes(\"u\")) {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported unicode flag in regular expression\",\n loc: node.loc,\n });\n }\n }\n },\n ObjectExpression(node: EstreeObjectExpression) {\n for (const prop of node.properties) {\n if (prop.type === \"Property\") {\n if (prop.kind !== \"init\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Unsupported object getter/setter property\",\n loc: prop.loc,\n });\n } else if (\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n prop.key.name === \"__proto__\"\n ) {\n errors.push({\n type: \"TypeError\",\n message: \"Setting '__proto__' property is not allowed\",\n loc: prop.key.loc,\n });\n }\n }\n }\n },\n VariableDeclaration(node: VariableDeclaration) {\n if (node.kind === \"var\" && rules?.noVar) {\n errors.push({\n type: \"SyntaxError\",\n message:\n \"Var declaration is not recommended, use `let` or `const` instead\",\n loc: {\n start: node.loc.start,\n end: {\n line: node.loc.end.line,\n // Only decorate the \"var\".\n column: node.loc.start.column + 3,\n },\n },\n });\n }\n },\n __UnknownNode(node: EstreeNode) {\n errors.push({\n type: \"SyntaxError\",\n message: `Unsupported syntax: \\`${node.type}\\``,\n loc: node.loc,\n });\n },\n __GlobalVariable(node: Identifier) {\n if (node.name === \"arguments\") {\n errors.push({\n type: \"SyntaxError\",\n message: \"Use the rest parameters instead of 'arguments'\",\n loc: node.loc,\n });\n }\n },\n },\n });\n }\n return errors;\n}\n"],"file":"lint.js"}
package/dist/esm/parse.js CHANGED
@@ -7,9 +7,10 @@ export function parseAsEstreeExpression(source) {
7
7
  attachComment: false
8
8
  });
9
9
  }
10
- export function parseAsEstree(source, {
11
- typescript
12
- } = {}) {
10
+ export function parseAsEstree(source) {
11
+ var {
12
+ typescript
13
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13
14
  var file = parse(source, {
14
15
  plugins: ["estree", typescript && "typescript"].filter(Boolean),
15
16
  strictMode: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/parse.ts"],"names":["parse","parseExpression","parseAsEstreeExpression","source","plugins","proposal","attachComment","parseAsEstree","typescript","file","filter","Boolean","strictMode","body","program","jsNodes","node","type","startsWith","test","SyntaxError","push","length","map","join"],"mappings":"AAAA,SAASA,KAAT,EAAgBC,eAAhB,QAAqD,eAArD;AAGA,OAAO,SAASC,uBAAT,CAAiCC,MAAjC,EAA6D;AAClE,SAAOF,eAAe,CAACE,MAAD,EAAS;AAC7BC,IAAAA,OAAO,EAAE,CAAC,QAAD,EAAW,CAAC,kBAAD,EAAqB;AAAEC,MAAAA,QAAQ,EAAE;AAAZ,KAArB,CAAX,CADoB;AAE7BC,IAAAA,aAAa,EAAE;AAFc,GAAT,CAAtB;AAID;AAMD,OAAO,SAASC,aAAT,CACLJ,MADK,EAEL;AAAEK,EAAAA;AAAF,IAAqC,EAFhC,EAGgB;AACrB,MAAMC,IAAI,GAAGT,KAAK,CAACG,MAAD,EAAS;AACzBC,IAAAA,OAAO,EAAE,CAAC,QAAD,EAAWI,UAAU,IAAI,YAAzB,EAAuCE,MAAvC,CACPC,OADO,CADgB;AAIzBC,IAAAA,UAAU,EAAE,IAJa;AAKzBN,IAAAA,aAAa,EAAE;AALU,GAAT,CAAlB;AAOA,MAAMO,IAAI,GAAGJ,IAAI,CAACK,OAAL,CAAaD,IAA1B;AACA,MAAME,OAAoB,GAAGP,UAAU,GAAG,EAAH,GAAQK,IAA/C;;AACA,MAAIL,UAAJ,EAAgB;AACd,SAAK,IAAMQ,IAAX,IAAmBH,IAAnB,EAAyB;AACvB,UAAIG,IAAI,CAACC,IAAL,CAAUC,UAAV,CAAqB,IAArB,CAAJ,EAAgC;AAC9B,YAAI,qBAAqBC,IAArB,CAA0BH,IAAI,CAACC,IAA/B,CAAJ,EAA0C;AACxC,gBAAM,IAAIG,WAAJ,0CAAkDJ,IAAI,CAACC,IAAvD,EAAN;AACD;AACF,OAJD,MAIO;AACLF,QAAAA,OAAO,CAACM,IAAR,CAAaL,IAAb;AACD;AACF;AACF;;AACD,MAAID,OAAO,CAACO,MAAR,KAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIF,WAAJ,CAAgB,gCAAhB,CAAN;AACD;;AACD,MAAIL,OAAO,CAACO,MAAR,GAAiB,CAAjB,IAAsBP,OAAO,CAAC,CAAD,CAAP,CAAWE,IAAX,KAAoB,qBAA9C,EAAqE;AACnE,UAAM,IAAIG,WAAJ,4EACgEL,OAAO,CACxEQ,GADiE,CAC5DP,IAAD,gBAAcA,IAAI,CAACC,IAAnB,OAD6D,EAEjEO,IAFiE,CAE5D,IAF4D,CADhE,EAAN;AAKD;;AACD,SAAOT,OAAO,CAAC,CAAD,CAAd;AACD","sourcesContent":["import { parse, parseExpression, ParserPlugin } from \"@babel/parser\";\nimport { Expression, FunctionDeclaration, Statement } from \"@babel/types\";\n\nexport function parseAsEstreeExpression(source: string): Expression {\n return parseExpression(source, {\n plugins: [\"estree\", [\"pipelineOperator\", { proposal: \"minimal\" }]],\n attachComment: false,\n });\n}\n\nexport interface ParseEstreeOptions {\n typescript?: boolean;\n}\n\nexport function parseAsEstree(\n source: string,\n { typescript }: ParseEstreeOptions = {}\n): FunctionDeclaration {\n const file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n });\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n throw new SyntaxError(`Unsupported TypeScript syntax: ${node.type}`);\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n if (jsNodes.length === 0) {\n throw new SyntaxError(\"Function declaration not found\");\n }\n if (jsNodes.length > 1 || jsNodes[0].type !== \"FunctionDeclaration\") {\n throw new SyntaxError(\n `Expect a single function declaration at top level, but received: ${jsNodes\n .map((node) => `\"${node.type}\"`)\n .join(\", \")}`\n );\n }\n return jsNodes[0] as FunctionDeclaration;\n}\n"],"file":"parse.js"}
1
+ {"version":3,"sources":["../../src/parse.ts"],"names":["parse","parseExpression","parseAsEstreeExpression","source","plugins","proposal","attachComment","parseAsEstree","typescript","file","filter","Boolean","strictMode","body","program","jsNodes","node","type","startsWith","test","SyntaxError","push","length","map","join"],"mappings":"AAAA,SAASA,KAAT,EAAgBC,eAAhB,QAAqD,eAArD;AAGA,OAAO,SAASC,uBAAT,CAAiCC,MAAjC,EAA6D;AAClE,SAAOF,eAAe,CAACE,MAAD,EAAS;AAC7BC,IAAAA,OAAO,EAAE,CAAC,QAAD,EAAW,CAAC,kBAAD,EAAqB;AAAEC,MAAAA,QAAQ,EAAE;AAAZ,KAArB,CAAX,CADoB;AAE7BC,IAAAA,aAAa,EAAE;AAFc,GAAT,CAAtB;AAID;AAMD,OAAO,SAASC,aAAT,CACLJ,MADK,EAGgB;AAAA,MADrB;AAAEK,IAAAA;AAAF,GACqB,uEADgB,EAChB;AACrB,MAAMC,IAAI,GAAGT,KAAK,CAACG,MAAD,EAAS;AACzBC,IAAAA,OAAO,EAAE,CAAC,QAAD,EAAWI,UAAU,IAAI,YAAzB,EAAuCE,MAAvC,CACPC,OADO,CADgB;AAIzBC,IAAAA,UAAU,EAAE,IAJa;AAKzBN,IAAAA,aAAa,EAAE;AALU,GAAT,CAAlB;AAOA,MAAMO,IAAI,GAAGJ,IAAI,CAACK,OAAL,CAAaD,IAA1B;AACA,MAAME,OAAoB,GAAGP,UAAU,GAAG,EAAH,GAAQK,IAA/C;;AACA,MAAIL,UAAJ,EAAgB;AACd,SAAK,IAAMQ,IAAX,IAAmBH,IAAnB,EAAyB;AACvB,UAAIG,IAAI,CAACC,IAAL,CAAUC,UAAV,CAAqB,IAArB,CAAJ,EAAgC;AAC9B,YAAI,qBAAqBC,IAArB,CAA0BH,IAAI,CAACC,IAA/B,CAAJ,EAA0C;AACxC,gBAAM,IAAIG,WAAJ,0CAAkDJ,IAAI,CAACC,IAAvD,EAAN;AACD;AACF,OAJD,MAIO;AACLF,QAAAA,OAAO,CAACM,IAAR,CAAaL,IAAb;AACD;AACF;AACF;;AACD,MAAID,OAAO,CAACO,MAAR,KAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIF,WAAJ,CAAgB,gCAAhB,CAAN;AACD;;AACD,MAAIL,OAAO,CAACO,MAAR,GAAiB,CAAjB,IAAsBP,OAAO,CAAC,CAAD,CAAP,CAAWE,IAAX,KAAoB,qBAA9C,EAAqE;AACnE,UAAM,IAAIG,WAAJ,4EACgEL,OAAO,CACxEQ,GADiE,CAC5DP,IAAD,gBAAcA,IAAI,CAACC,IAAnB,OAD6D,EAEjEO,IAFiE,CAE5D,IAF4D,CADhE,EAAN;AAKD;;AACD,SAAOT,OAAO,CAAC,CAAD,CAAd;AACD","sourcesContent":["import { parse, parseExpression, ParserPlugin } from \"@babel/parser\";\nimport { Expression, FunctionDeclaration, Statement } from \"@babel/types\";\n\nexport function parseAsEstreeExpression(source: string): Expression {\n return parseExpression(source, {\n plugins: [\"estree\", [\"pipelineOperator\", { proposal: \"minimal\" }]],\n attachComment: false,\n });\n}\n\nexport interface ParseEstreeOptions {\n typescript?: boolean;\n}\n\nexport function parseAsEstree(\n source: string,\n { typescript }: ParseEstreeOptions = {}\n): FunctionDeclaration {\n const file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n });\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n throw new SyntaxError(`Unsupported TypeScript syntax: ${node.type}`);\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n if (jsNodes.length === 0) {\n throw new SyntaxError(\"Function declaration not found\");\n }\n if (jsNodes.length > 1 || jsNodes[0].type !== \"FunctionDeclaration\") {\n throw new SyntaxError(\n `Expect a single function declaration at top level, but received: ${jsNodes\n .map((node) => `\"${node.type}\"`)\n .join(\", \")}`\n );\n }\n return jsNodes[0] as FunctionDeclaration;\n}\n"],"file":"parse.js"}
@@ -9,11 +9,12 @@ import { collectBoundNames, collectScopedDeclarations, containsExpression } from
9
9
  * @param options - Analysis options.
10
10
  * @returns A set of global variables the root AST attempts to access.
11
11
  */
12
- export function precook(rootAst, {
13
- expressionOnly,
14
- visitors,
15
- hooks = {}
16
- } = {}) {
12
+ export function precook(rootAst) {
13
+ var {
14
+ expressionOnly,
15
+ visitors,
16
+ hooks = {}
17
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
17
18
  var attemptToVisitGlobals = new Set();
18
19
  var analysisContextStack = [];
19
20
  var rootEnv = new AnalysisEnvironment(null);
@@ -422,10 +423,11 @@ export function precook(rootAst, {
422
423
  return OrdinaryFunctionCreate(functionExpression, funcEnv);
423
424
  }
424
425
 
425
- function OrdinaryFunctionCreate({
426
- params,
427
- body
428
- }, scope) {
426
+ function OrdinaryFunctionCreate(_ref, scope) {
427
+ var {
428
+ params,
429
+ body
430
+ } = _ref;
429
431
  return {
430
432
  FormalParameters: params,
431
433
  ECMAScriptCode: body.type === "BlockStatement" ? body.body : body,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/precook.ts"],"names":["hasOwnProperty","AnalysisContext","AnalysisEnvironment","collectBoundNames","collectScopedDeclarations","containsExpression","precook","rootAst","expressionOnly","visitors","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","type","Evaluate","Array","isArray","n","beforeVisit","ResolveBinding","name","add","__GlobalVariable","elements","env","closure","OrdinaryFunctionCreate","CallFunction","left","right","callee","arguments","expression","test","consequent","alternate","object","computed","property","properties","key","value","argument","expressions","tag","quasi","body","runningContext","oldEnv","blockEnv","BlockDeclarationInstantiation","catchEnv","BoundNamesInstantiation","param","lexicalBinding","kind","newEnv","iterationEnv","init","loopEnv","update","fn","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","discriminant","cases","block","handler","finalizer","declarations","id","__UnknownNode","console","warn","GetIdentifierReference","HasBinding","OuterEnv","code","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","funcEnv","params"],"mappings":"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","sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext\";\nimport { EstreeNode, EstreeVisitors, NodeWithBoundNames } from \"./interfaces\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n}\n\nexport interface PrecookHooks {\n beforeVisit?(node: EstreeNode): void;\n}\n\n/**\n * Analysis an AST of a storyboard function or an evaluation expression.\n *\n * @param rootAst - The root AST.\n * @param options - Analysis options.\n * @returns A set of global variables the root AST attempts to access.\n */\nexport function precook(\n rootAst: Expression | FunctionDeclaration,\n { expressionOnly, visitors, hooks = {} }: PrecookOptions = {}\n): Set<string> {\n const attemptToVisitGlobals = new Set<string>();\n const analysisContextStack: AnalysisContext[] = [];\n const rootEnv = new AnalysisEnvironment(null);\n const rootContext = new AnalysisContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n analysisContextStack.push(rootContext);\n\n function getRunningContext(): AnalysisContext {\n return analysisContextStack[analysisContextStack.length - 1];\n }\n\n function visit(node: EstreeNode): void {\n if (hasOwnProperty(visitors, node.type)) {\n visitors[node.type](node);\n }\n }\n\n function Evaluate(node: EstreeNode | EstreeNode[]): void {\n if (Array.isArray(node)) {\n for (const n of node) {\n Evaluate(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n hooks.beforeVisit?.(node);\n visitors && visit(node);\n // Expressions:\n switch (node.type) {\n case \"Identifier\":\n if (!ResolveBinding(node.name)) {\n attemptToVisitGlobals.add(node.name);\n if (visitors && hasOwnProperty(visitors, \"__GlobalVariable\")) {\n visitors.__GlobalVariable(node);\n }\n }\n return;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n Evaluate(node.elements);\n return;\n case \"ArrowFunctionExpression\": {\n const env = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(node, env);\n CallFunction(closure);\n return;\n }\n case \"AssignmentPattern\":\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n Evaluate(node.left);\n Evaluate(node.right);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n Evaluate(node.callee);\n Evaluate(node.arguments);\n return;\n case \"ChainExpression\":\n Evaluate(node.expression);\n return;\n case \"ConditionalExpression\":\n Evaluate(node.test);\n Evaluate(node.consequent);\n Evaluate(node.alternate);\n return;\n case \"MemberExpression\":\n Evaluate(node.object);\n if (node.computed) {\n Evaluate(node.property);\n }\n return;\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n Evaluate(node.properties);\n return;\n case \"Property\":\n if (node.computed) {\n Evaluate(node.key);\n }\n Evaluate(node.value);\n return;\n case \"RestElement\":\n case \"SpreadElement\":\n case \"UnaryExpression\":\n Evaluate(node.argument);\n return;\n case \"SequenceExpression\":\n case \"TemplateLiteral\":\n Evaluate(node.expressions);\n return;\n case \"TaggedTemplateExpression\":\n Evaluate(node.tag);\n Evaluate(node.quasi);\n return;\n case \"Literal\":\n return;\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\":\n Evaluate(node.right);\n Evaluate(node.left);\n return;\n case \"BlockStatement\": {\n if (!node.body.length) {\n return;\n }\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n Evaluate(node.body);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return;\n case \"CatchClause\": {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const catchEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.param, catchEnv);\n runningContext.LexicalEnvironment = catchEnv;\n Evaluate(node.param);\n Evaluate(node.body);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"DoWhileStatement\":\n Evaluate(node.body);\n Evaluate(node.test);\n return;\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n Evaluate(node.expression);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\": {\n // ForIn/OfHeadEvaluation\n const lexicalBinding =\n node.left.type === \"VariableDeclaration\" &&\n node.left.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const newEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, newEnv);\n runningContext.LexicalEnvironment = newEnv;\n }\n Evaluate(node.right);\n runningContext.LexicalEnvironment = oldEnv;\n\n // ForIn/OfBodyEvaluation\n if (lexicalBinding) {\n const iterationEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, iterationEnv);\n runningContext.LexicalEnvironment = iterationEnv;\n }\n Evaluate(node.left);\n Evaluate(node.body);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ForStatement\": {\n const lexicalBinding =\n node.init?.type === \"VariableDeclaration\" &&\n node.init.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const loopEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(\n node.init as VariableDeclaration,\n loopEnv\n );\n runningContext.LexicalEnvironment = loopEnv;\n }\n Evaluate(node.init);\n Evaluate(node.test);\n Evaluate(node.body);\n Evaluate(node.update);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"FunctionDeclaration\": {\n const [fn] = collectBoundNames(node);\n const env = getRunningContext().LexicalEnvironment;\n const fo = OrdinaryFunctionCreate(node, env);\n env.CreateBinding(fn);\n CallFunction(fo);\n return;\n }\n case \"FunctionExpression\": {\n const closure = InstantiateOrdinaryFunctionExpression(node);\n CallFunction(closure);\n return;\n }\n case \"IfStatement\":\n Evaluate(node.test);\n Evaluate(node.consequent);\n Evaluate(node.alternate);\n return;\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"UpdateExpression\":\n Evaluate(node.argument);\n return;\n case \"SwitchCase\":\n Evaluate(node.test);\n Evaluate(node.consequent);\n return;\n case \"SwitchStatement\": {\n Evaluate(node.discriminant);\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n Evaluate(node.cases);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"TryStatement\":\n Evaluate(node.block);\n Evaluate(node.handler);\n Evaluate(node.finalizer);\n return;\n case \"VariableDeclaration\":\n Evaluate(node.declarations);\n return;\n case \"VariableDeclarator\":\n Evaluate(node.id);\n Evaluate(node.init);\n return;\n case \"WhileStatement\":\n Evaluate(node.test);\n Evaluate(node.body);\n return;\n }\n }\n if (visitors && hasOwnProperty(visitors, \"__UnknownNode\")) {\n visitors.__UnknownNode(node);\n } else {\n // eslint-disable-next-line no-console\n console.warn(`Unsupported node type \\`${node.type}\\``);\n }\n }\n }\n\n function BoundNamesInstantiation(\n declarations: NodeWithBoundNames | NodeWithBoundNames[],\n env: AnalysisEnvironment\n ): void {\n for (const name of collectBoundNames(declarations)) {\n env.CreateBinding(name);\n }\n }\n\n function ResolveBinding(name: string): boolean {\n const env = getRunningContext().LexicalEnvironment;\n return GetIdentifierReference(env, name);\n }\n\n function GetIdentifierReference(\n env: AnalysisEnvironment,\n name: string\n ): boolean {\n return (\n !!env &&\n (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name))\n );\n }\n\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: AnalysisEnvironment\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n BoundNamesInstantiation(declarations, env);\n }\n\n function CallFunction(closure: AnalysisFunctionObject): void {\n PrepareOrdinaryCall(closure);\n FunctionDeclarationInstantiation(closure);\n Evaluate(closure.ECMAScriptCode);\n analysisContextStack.pop();\n }\n\n function PrepareOrdinaryCall(F: AnalysisFunctionObject): void {\n const calleeContext = new AnalysisContext();\n const localEnv = new AnalysisEnvironment(F.Environment);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n analysisContextStack.push(calleeContext);\n }\n\n function FunctionDeclarationInstantiation(\n func: AnalysisFunctionObject\n ): void {\n const calleeContext = getRunningContext();\n const code = func.ECMAScriptCode;\n const formals = func.FormalParameters;\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n const env = calleeContext.LexicalEnvironment;\n BoundNamesInstantiation(formals, env);\n\n Evaluate(formals);\n\n let varEnv: AnalysisEnvironment;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n for (const n of varNames) {\n env.CreateBinding(n);\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new AnalysisEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n for (const n of varNames) {\n varEnv.CreateBinding(n);\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n BoundNamesInstantiation(lexDeclarations, lexEnv);\n }\n\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): AnalysisFunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (!functionExpression.id) {\n return OrdinaryFunctionCreate(functionExpression, scope);\n }\n const name = functionExpression.id.name;\n const funcEnv = new AnalysisEnvironment(scope);\n funcEnv.CreateBinding(name);\n return OrdinaryFunctionCreate(functionExpression, funcEnv);\n }\n\n function OrdinaryFunctionCreate(\n {\n params,\n body,\n }: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression,\n scope: AnalysisEnvironment\n ): AnalysisFunctionObject {\n return {\n FormalParameters: params,\n ECMAScriptCode: body.type === \"BlockStatement\" ? body.body : body,\n Environment: scope,\n };\n }\n\n Evaluate(rootAst);\n\n return attemptToVisitGlobals;\n}\n"],"file":"precook.js"}
1
+ {"version":3,"sources":["../../src/precook.ts"],"names":["hasOwnProperty","AnalysisContext","AnalysisEnvironment","collectBoundNames","collectScopedDeclarations","containsExpression","precook","rootAst","expressionOnly","visitors","hooks","attemptToVisitGlobals","Set","analysisContextStack","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","push","getRunningContext","length","visit","node","type","Evaluate","Array","isArray","n","beforeVisit","ResolveBinding","name","add","__GlobalVariable","elements","env","closure","OrdinaryFunctionCreate","CallFunction","left","right","callee","arguments","expression","test","consequent","alternate","object","computed","property","properties","key","value","argument","expressions","tag","quasi","body","runningContext","oldEnv","blockEnv","BlockDeclarationInstantiation","catchEnv","BoundNamesInstantiation","param","lexicalBinding","kind","newEnv","iterationEnv","init","loopEnv","update","fn","fo","CreateBinding","InstantiateOrdinaryFunctionExpression","discriminant","cases","block","handler","finalizer","declarations","id","__UnknownNode","console","warn","GetIdentifierReference","HasBinding","OuterEnv","code","var","topLevel","PrepareOrdinaryCall","FunctionDeclarationInstantiation","ECMAScriptCode","pop","F","calleeContext","localEnv","Environment","func","formals","FormalParameters","hasParameterExpressions","varDeclarations","varNames","varEnv","lexEnv","lexDeclarations","functionExpression","scope","funcEnv","params"],"mappings":"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","sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext\";\nimport { EstreeNode, EstreeVisitors, NodeWithBoundNames } from \"./interfaces\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n}\n\nexport interface PrecookHooks {\n beforeVisit?(node: EstreeNode): void;\n}\n\n/**\n * Analysis an AST of a storyboard function or an evaluation expression.\n *\n * @param rootAst - The root AST.\n * @param options - Analysis options.\n * @returns A set of global variables the root AST attempts to access.\n */\nexport function precook(\n rootAst: Expression | FunctionDeclaration,\n { expressionOnly, visitors, hooks = {} }: PrecookOptions = {}\n): Set<string> {\n const attemptToVisitGlobals = new Set<string>();\n const analysisContextStack: AnalysisContext[] = [];\n const rootEnv = new AnalysisEnvironment(null);\n const rootContext = new AnalysisContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n analysisContextStack.push(rootContext);\n\n function getRunningContext(): AnalysisContext {\n return analysisContextStack[analysisContextStack.length - 1];\n }\n\n function visit(node: EstreeNode): void {\n if (hasOwnProperty(visitors, node.type)) {\n visitors[node.type](node);\n }\n }\n\n function Evaluate(node: EstreeNode | EstreeNode[]): void {\n if (Array.isArray(node)) {\n for (const n of node) {\n Evaluate(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n hooks.beforeVisit?.(node);\n visitors && visit(node);\n // Expressions:\n switch (node.type) {\n case \"Identifier\":\n if (!ResolveBinding(node.name)) {\n attemptToVisitGlobals.add(node.name);\n if (visitors && hasOwnProperty(visitors, \"__GlobalVariable\")) {\n visitors.__GlobalVariable(node);\n }\n }\n return;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n Evaluate(node.elements);\n return;\n case \"ArrowFunctionExpression\": {\n const env = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(node, env);\n CallFunction(closure);\n return;\n }\n case \"AssignmentPattern\":\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n Evaluate(node.left);\n Evaluate(node.right);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n Evaluate(node.callee);\n Evaluate(node.arguments);\n return;\n case \"ChainExpression\":\n Evaluate(node.expression);\n return;\n case \"ConditionalExpression\":\n Evaluate(node.test);\n Evaluate(node.consequent);\n Evaluate(node.alternate);\n return;\n case \"MemberExpression\":\n Evaluate(node.object);\n if (node.computed) {\n Evaluate(node.property);\n }\n return;\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n Evaluate(node.properties);\n return;\n case \"Property\":\n if (node.computed) {\n Evaluate(node.key);\n }\n Evaluate(node.value);\n return;\n case \"RestElement\":\n case \"SpreadElement\":\n case \"UnaryExpression\":\n Evaluate(node.argument);\n return;\n case \"SequenceExpression\":\n case \"TemplateLiteral\":\n Evaluate(node.expressions);\n return;\n case \"TaggedTemplateExpression\":\n Evaluate(node.tag);\n Evaluate(node.quasi);\n return;\n case \"Literal\":\n return;\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\":\n Evaluate(node.right);\n Evaluate(node.left);\n return;\n case \"BlockStatement\": {\n if (!node.body.length) {\n return;\n }\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n Evaluate(node.body);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return;\n case \"CatchClause\": {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const catchEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.param, catchEnv);\n runningContext.LexicalEnvironment = catchEnv;\n Evaluate(node.param);\n Evaluate(node.body);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"DoWhileStatement\":\n Evaluate(node.body);\n Evaluate(node.test);\n return;\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n Evaluate(node.expression);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\": {\n // ForIn/OfHeadEvaluation\n const lexicalBinding =\n node.left.type === \"VariableDeclaration\" &&\n node.left.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const newEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, newEnv);\n runningContext.LexicalEnvironment = newEnv;\n }\n Evaluate(node.right);\n runningContext.LexicalEnvironment = oldEnv;\n\n // ForIn/OfBodyEvaluation\n if (lexicalBinding) {\n const iterationEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, iterationEnv);\n runningContext.LexicalEnvironment = iterationEnv;\n }\n Evaluate(node.left);\n Evaluate(node.body);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ForStatement\": {\n const lexicalBinding =\n node.init?.type === \"VariableDeclaration\" &&\n node.init.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const loopEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(\n node.init as VariableDeclaration,\n loopEnv\n );\n runningContext.LexicalEnvironment = loopEnv;\n }\n Evaluate(node.init);\n Evaluate(node.test);\n Evaluate(node.body);\n Evaluate(node.update);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"FunctionDeclaration\": {\n const [fn] = collectBoundNames(node);\n const env = getRunningContext().LexicalEnvironment;\n const fo = OrdinaryFunctionCreate(node, env);\n env.CreateBinding(fn);\n CallFunction(fo);\n return;\n }\n case \"FunctionExpression\": {\n const closure = InstantiateOrdinaryFunctionExpression(node);\n CallFunction(closure);\n return;\n }\n case \"IfStatement\":\n Evaluate(node.test);\n Evaluate(node.consequent);\n Evaluate(node.alternate);\n return;\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"UpdateExpression\":\n Evaluate(node.argument);\n return;\n case \"SwitchCase\":\n Evaluate(node.test);\n Evaluate(node.consequent);\n return;\n case \"SwitchStatement\": {\n Evaluate(node.discriminant);\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n Evaluate(node.cases);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"TryStatement\":\n Evaluate(node.block);\n Evaluate(node.handler);\n Evaluate(node.finalizer);\n return;\n case \"VariableDeclaration\":\n Evaluate(node.declarations);\n return;\n case \"VariableDeclarator\":\n Evaluate(node.id);\n Evaluate(node.init);\n return;\n case \"WhileStatement\":\n Evaluate(node.test);\n Evaluate(node.body);\n return;\n }\n }\n if (visitors && hasOwnProperty(visitors, \"__UnknownNode\")) {\n visitors.__UnknownNode(node);\n } else {\n // eslint-disable-next-line no-console\n console.warn(`Unsupported node type \\`${node.type}\\``);\n }\n }\n }\n\n function BoundNamesInstantiation(\n declarations: NodeWithBoundNames | NodeWithBoundNames[],\n env: AnalysisEnvironment\n ): void {\n for (const name of collectBoundNames(declarations)) {\n env.CreateBinding(name);\n }\n }\n\n function ResolveBinding(name: string): boolean {\n const env = getRunningContext().LexicalEnvironment;\n return GetIdentifierReference(env, name);\n }\n\n function GetIdentifierReference(\n env: AnalysisEnvironment,\n name: string\n ): boolean {\n return (\n !!env &&\n (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name))\n );\n }\n\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: AnalysisEnvironment\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n BoundNamesInstantiation(declarations, env);\n }\n\n function CallFunction(closure: AnalysisFunctionObject): void {\n PrepareOrdinaryCall(closure);\n FunctionDeclarationInstantiation(closure);\n Evaluate(closure.ECMAScriptCode);\n analysisContextStack.pop();\n }\n\n function PrepareOrdinaryCall(F: AnalysisFunctionObject): void {\n const calleeContext = new AnalysisContext();\n const localEnv = new AnalysisEnvironment(F.Environment);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n analysisContextStack.push(calleeContext);\n }\n\n function FunctionDeclarationInstantiation(\n func: AnalysisFunctionObject\n ): void {\n const calleeContext = getRunningContext();\n const code = func.ECMAScriptCode;\n const formals = func.FormalParameters;\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n const env = calleeContext.LexicalEnvironment;\n BoundNamesInstantiation(formals, env);\n\n Evaluate(formals);\n\n let varEnv: AnalysisEnvironment;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n for (const n of varNames) {\n env.CreateBinding(n);\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new AnalysisEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n for (const n of varNames) {\n varEnv.CreateBinding(n);\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n BoundNamesInstantiation(lexDeclarations, lexEnv);\n }\n\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): AnalysisFunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (!functionExpression.id) {\n return OrdinaryFunctionCreate(functionExpression, scope);\n }\n const name = functionExpression.id.name;\n const funcEnv = new AnalysisEnvironment(scope);\n funcEnv.CreateBinding(name);\n return OrdinaryFunctionCreate(functionExpression, funcEnv);\n }\n\n function OrdinaryFunctionCreate(\n {\n params,\n body,\n }: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression,\n scope: AnalysisEnvironment\n ): AnalysisFunctionObject {\n return {\n FormalParameters: params,\n ECMAScriptCode: body.type === \"BlockStatement\" ? body.body : body,\n Environment: scope,\n };\n }\n\n Evaluate(rootAst);\n\n return attemptToVisitGlobals;\n}\n"],"file":"precook.js"}
@@ -2,8 +2,9 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
2
2
  var _excluded = ["typescript"];
3
3
  import { parseAsEstree } from "./parse";
4
4
  import { precook } from "./precook";
5
- export function precookFunction(source, _ref = {}) {
6
- var {
5
+ export function precookFunction(source) {
6
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
7
+ {
7
8
  typescript
8
9
  } = _ref,
9
10
  restOptions = _objectWithoutProperties(_ref, _excluded);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/precookFunction.ts"],"names":["parseAsEstree","precook","precookFunction","source","typescript","restOptions","func","attemptToVisitGlobals","function"],"mappings":";;AACA,SAASA,aAAT,QAA8B,SAA9B;AACA,SAASC,OAAT,QAAwC,WAAxC;AAWA,OAAO,SAASC,eAAT,CACLC,MADK,EAEL,OAAyD,EAFpD,EAGkB;AAAA,MADvB;AAAEC,IAAAA;AAAF,GACuB;AAAA,MADNC,WACM;;AACvB,MAAMC,IAAI,GAAGN,aAAa,CAACG,MAAD,EAAS;AAAEC,IAAAA;AAAF,GAAT,CAA1B;AACA,MAAMG,qBAAqB,GAAGN,OAAO,CAACK,IAAD,EAAOD,WAAP,CAArC;AACA,SAAO;AACLG,IAAAA,QAAQ,EAAEF,IADL;AAELC,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse\";\nimport { precook, PrecookOptions } from \"./precook\";\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n const func = parseAsEstree(source, { typescript });\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n"],"file":"precookFunction.js"}
1
+ {"version":3,"sources":["../../src/precookFunction.ts"],"names":["parseAsEstree","precook","precookFunction","source","typescript","restOptions","func","attemptToVisitGlobals","function"],"mappings":";;AACA,SAASA,aAAT,QAA8B,SAA9B;AACA,SAASC,OAAT,QAAwC,WAAxC;AAWA,OAAO,SAASC,eAAT,CACLC,MADK,EAGkB;AAAA,iFADkC,EAClC;AAAA,MADvB;AAAEC,IAAAA;AAAF,GACuB;AAAA,MADNC,WACM;;AACvB,MAAMC,IAAI,GAAGN,aAAa,CAACG,MAAD,EAAS;AAAEC,IAAAA;AAAF,GAAT,CAA1B;AACA,MAAMG,qBAAqB,GAAGN,OAAO,CAACK,IAAD,EAAOD,WAAP,CAArC;AACA,SAAO;AACLG,IAAAA,QAAQ,EAAEF,IADL;AAELC,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse\";\nimport { precook, PrecookOptions } from \"./precook\";\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n const func = parseAsEstree(source, { typescript });\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n"],"file":"precookFunction.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/cook",
3
- "version": "1.3.5",
3
+ "version": "1.3.9",
4
4
  "description": "Cook expressions and storyboard functions",
5
5
  "homepage": "https://github.com/easyops-cn/next-core/tree/master/packages/cook",
6
6
  "license": "GPL-3.0",
@@ -29,12 +29,12 @@
29
29
  },
30
30
  "sideEffects": false,
31
31
  "dependencies": {
32
- "@babel/parser": "^7.15.8",
33
- "@next-core/brick-types": "^2.46.0"
32
+ "@babel/parser": "^7.16.4",
33
+ "@next-core/brick-types": "^2.50.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@next-core/supply": "^1.0.9",
36
+ "@next-core/supply": "^1.0.13",
37
37
  "lodash": "^4.17.21"
38
38
  },
39
- "gitHead": "8f284a3f3dee8ff5ec555fd6fe9988c881a8c6ce"
39
+ "gitHead": "d49372740260654c30e7b59c31c94c722ac3706f"
40
40
  }