xhs-mp-sjs-loader 2.0.21 → 2.0.22
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/dist/index.d.ts +12 -0
- package/dist/index.js +0 -1
- package/dist/scope.d.ts +33 -0
- package/dist/tranform.d.ts +2 -0
- package/package.json +1 -1
- package/dist/index.js.map +0 -1
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Span } from '@swc/core';
|
|
2
|
+
export declare const SJS_HELPER = "_sjs$";
|
|
3
|
+
declare function sjsCompiler(code: any, onRequire: (s: string) => string): {
|
|
4
|
+
code: string;
|
|
5
|
+
map: string | undefined;
|
|
6
|
+
legacyCode: string;
|
|
7
|
+
errors: {
|
|
8
|
+
message: string;
|
|
9
|
+
span: Span;
|
|
10
|
+
}[];
|
|
11
|
+
};
|
|
12
|
+
export default sjsCompiler;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("lodash"),t=require("@swc/core");const r=(e,r,s="esnext",a=!1)=>t.transformSync(e,{swcrc:!1,configFile:!1,minify:a,sourceMaps:!1,jsc:{preserveAllComments:!0,target:s,externalHelpers:!1,parser:{syntax:"ecmascript",jsx:!1,dynamicImport:!1,privateMethod:!1,functionBind:!1,classPrivateProperty:!1,exportDefaultFrom:!1,exportNamespaceFrom:!1,decorators:!1,decoratorsBeforeExport:!1,importMeta:!1}},plugin:r}),s=["getDate","getRegExp","console"],a=["Object","Boolean","Array","String","Number","Date","Map","Set","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","isNaN","isFinite","parseFloat","parseInt","Infinity","NaN","undefined","setTimeout","clearTimeout","setInterval","clearInterval","JSON","Math","module","require","exports",...s];class n{constructor(){this.defines={},this.access={}}toString(){return`defines: ${Object.keys(this.defines)} access: ${Object.keys(this.access)}`}anlysis(){for(const e in this.access)if(this.checkGlobal(e)&&!a.includes(e))return{variable:e,span:this.access[e]}}checkGlobal(e){let t=this;for(;t;){if(t.defines[e])return!1;t=t.parentScope}return!t}setAccess(e,t){this.access[e]=t}setDefines(e,t){this.defines[e]=t}setParentScope(e){this.parentScope=e}}class o{constructor(){this._scopeStack=[],this._scopeTables=[],this._stop=!1}stop(){this._stop=!0}enterScope(){this._stop||this._scopeStack.push(new n)}exitScope(){if(this._stop)return;const e=this._scopeStack.pop();e&&(this._scopeTables.push(e),e.setParentScope(this.getCurrentScope()))}getCurrentScope(){if(!this._stop)return this._scopeStack[this._scopeStack.length-1]}pushIdentifier(e){var t;this._stop||this.getCurrentScope()&&(null===(t=this.getCurrentScope())||void 0===t||t.setDefines(e.value,e.span))}pushAccess(e){if(this._stop)return;const t=this.getCurrentScope();t&&(null==t||t.setAccess(e.value,e.span),s.includes(e.value)&&(e._xhsScope=t))}getDFSScope(){return this._scopeTables}}const i="_sjs$",c=`${i}.s`,p=`${i}.g`,l=`${i}.c`;exports.SJS_HELPER=i,exports.default=function(t,a){var n;const u=[];let d="scan";const y=new o,f=[];function h(e,t){if("scan"!==d)return;const r=e.trim().split(/\s+/).length>1?e:`${e} is disallowed`;u.push({message:r,span:Object.assign({},t)})}function m(e){switch(e.type){case"RestElement":m(e.argument),"Identifier"===e.argument.type&&y.pushIdentifier(e.argument);break;case"AssignmentPattern":I(e.right),"Identifier"===e.left.type&&y.pushIdentifier(e.left);break;case"Identifier":y.pushIdentifier(e);break;case"MemberExpression":I(e);break;case"ArrayPattern":h("Destructuring assignment like const [a, b] = array; is disallowed ",e.span);break;case"ObjectPattern":h("Destructuring assignment like const {a, b} = obj; is disallowed ",e.span);break;default:h(e.type,e.span)}}function b(e){var t;(null===(t=null==e?void 0:e.decorators)||void 0===t?void 0:t.length)&&h(e.type,e.span),e.pat&&m(e.pat)}function v(e){var t,r,s,a,n,o,i,c,p,l,u;switch(e.type){case"BlockStatement":y.enterScope(),null===(t=e.stmts)||void 0===t||t.forEach(v),y.exitScope();break;case"TryStatement":e.block&&v(e.block),y.enterScope(),(null===(r=e.handler)||void 0===r?void 0:r.param)&&m(null===(s=e.handler)||void 0===s?void 0:s.param),"BlockStatement"===(null===(n=null===(a=e.handler)||void 0===a?void 0:a.body)||void 0===n?void 0:n.type)&&(null===(i=null===(o=e.handler)||void 0===o?void 0:o.body)||void 0===i||i.stmts.forEach(v)),y.exitScope(),e.finalizer&&v(e.finalizer);break;case"ForStatement":if(y.enterScope(),e.init)if("VariableDeclaration"===e.init.type)v(e.init);else I(e.init);e.test&&I(e.test),e.update&&I(e.update),"BlockStatement"===e.body.type?null===(c=e.body.stmts)||void 0===c||c.forEach(v):v(e.body),y.exitScope();break;case"SwitchStatement":I(e.discriminant),null===(p=e.cases)||void 0===p||p.forEach((e=>{var t;e.test&&I(e.test),null===(t=e.consequent)||void 0===t||t.forEach(v)}));break;case"DoWhileStatement":case"WhileStatement":I(e.test),v(e.body);break;case"IfStatement":I(e.test),v(e.consequent),e.alternate&&v(e.alternate);break;case"ExpressionStatement":I(e.expression);break;case"FunctionDeclaration":k(e),y.pushIdentifier(e.identifier),y.enterScope(),y.pushIdentifier(Object.assign(Object.assign({},e.identifier),{value:"arguments"})),e.params.forEach(b),"BlockStatement"===(null===(l=null==e?void 0:e.body)||void 0===l?void 0:l.type)&&(null===(u=e.body.stmts)||void 0===u||u.forEach(v)),y.exitScope();break;case"ReturnStatement":e.argument&&I(e.argument);break;case"VariableDeclaration":for(const t of e.declarations){if("Identifier"===t.id.type)y.pushIdentifier(t.id);else h(t.id.type,t.id.span);t.init&&I(t.init)}break;case"BreakStatement":case"DebuggerStatement":case"ContinueStatement":case"EmptyStatement":break;default:h(e.type,e.span)}}function g(e){if("Computed"===e.type){I(e.expression)}}function S(e){var t,r,s;switch(e.type){case"KeyValueProperty":g(e.key),I(e.value);break;case"GetterProperty":g(e.key),y.enterScope(),"BlockStatement"===(null===(t=e.body)||void 0===t?void 0:t.type)&&e.body.stmts.forEach(v),y.exitScope();break;case"SetterProperty":g(e.key),y.enterScope(),m(e.param),"BlockStatement"===(null===(r=e.body)||void 0===r?void 0:r.type)&&e.body.stmts.forEach(v),y.exitScope();break;case"Identifier":y.pushAccess(e),E(e);break;case"MethodProperty":g(e.key),k(e),y.enterScope(),e.params.forEach(b),"BlockStatement"===(null===(s=e.body)||void 0===s?void 0:s.type)&&e.body.stmts.forEach(v),y.exitScope();break;case"SpreadElement":I(e.arguments);break;default:h(e.type,e.span)}}function x(e){return"Computed"===e.type?(I(e.expression),e.expression):"Identifier"===e.type?{type:"StringLiteral",span:e.span,value:e.value,raw:JSON.stringify(e.value)}:"PrivateName"===e.type?{type:"NullLiteral"}:void 0}function k(e){(e.async||e.generator)&&h(e.type,e.span)}function E(e){var t;"generate"===d&&s.includes(e.value)&&(null===(t=e._xhsScope)||void 0===t?void 0:t.checkGlobal(e.value))&&(e.value=`${i}.${e.value}`)}function I(e){var t,r,s,a,n,o;switch(e.type){case"FunctionExpression":k(e),e.identifier&&y.pushIdentifier(e.identifier),y.enterScope(),e.params.forEach(b),"BlockStatement"===(null===(t=e.body)||void 0===t?void 0:t.type)&&(null===(r=e.body.stmts)||void 0===r||r.forEach(v)),y.exitScope();break;case"ArrowFunctionExpression":k(e),y.enterScope(),e.params.forEach(m),"BlockStatement"===e.body.type?null===(s=e.body.stmts)||void 0===s||s.forEach(v):I(e.body),y.exitScope();break;case"CallExpression":switch(e.callee.type){case"Import":case"Super":h(e.callee.type,e.span);break;default:if("MemberExpression"===e.callee.type&&"generate"===d){const t=e.callee,r=e;r.type="CallExpression",r.callee={type:"Identifier",span:e.span,value:l,optional:!1},I(t.object),e.arguments.forEach((e=>I(e.expression))),r.arguments=[{expression:x(t.property)},{expression:t.object},{expression:{type:"ArrayExpression",elements:e.arguments,span:e.span}}]}else"MemberExpression"===e.callee.type&&"legacyGenerate"===d&&"Identifier"===e.callee.property.type&&"constructor"===e.callee.property.value?(e.callee.property.value=`${e.callee.property.value}.name`,I(e.callee.object),e.arguments.forEach((e=>I(e.expression)))):("Identifier"===e.callee.type&&("require"===e.callee.value&&(o=e,"scan"===d&&(f.push(o),"Identifier"===o.callee.type&&(o.callee._xhsScope=y.getCurrentScope()))),E(e.callee)),I(e.callee),e.arguments.forEach((e=>I(e.expression))))}break;case"ArrayExpression":null===(a=e.elements)||void 0===a||a.forEach((e=>{e&&I(e.expression)}));break;case"ObjectExpression":e.properties.forEach(S);break;case"TemplateLiteral":e.expressions.forEach(I);break;case"UpdateExpression":if("MemberExpression"===e.argument.type&&"generate"===d){const t=e;t.type="CallExpression",t.callee={type:"Identifier",span:e.span,value:c,optional:!1},I(e.argument.object),t.arguments=[{expression:x(e.argument.property)},{expression:e.argument.object},{expression:{type:"StringLiteral",span:e.span,value:e.operator,raw:JSON.stringify(e.operator)}}],Reflect.deleteProperty(e,"prefix"),Reflect.deleteProperty(e,"operator"),Reflect.deleteProperty(e,"argument")}else I(e.argument);break;case"UnaryExpression":I(e.argument);break;case"AssignmentExpression":if("MemberExpression"===e.left.type&&"generate"===d){const t=e;t.type="CallExpression",t.callee={type:"Identifier",span:e.span,value:c,optional:!1},I(e.right),I(e.left.object),t.arguments=[{expression:x(e.left.property)},{expression:e.left.object},{expression:{type:"StringLiteral",span:e.span,value:e.operator,raw:JSON.stringify(e.operator)}},{expression:e.right}],Reflect.deleteProperty(e,"left"),Reflect.deleteProperty(e,"right"),Reflect.deleteProperty(e,"operator")}else m(e.left),I(e.right);break;case"BinaryExpression":I(e.left),I(e.right);break;case"ConditionalExpression":I(e.test),I(e.consequent),I(e.alternate);break;case"MemberExpression":if("generate"===d){const t=e;t.type="CallExpression",t.callee={type:"Identifier",span:e.span,value:p,optional:!1},I(e.object),t.arguments=[{expression:x(e.property)},{expression:e.object}],Reflect.deleteProperty(e,"object"),Reflect.deleteProperty(e,"property")}else"legacyGenerate"===d&&"Identifier"===e.property.type&&"constructor"===e.property.value?(e.property.value=`${e.property.value}.name`,I(e.object)):(I(e.object),function(e){switch(e.type){case"Computed":I(e.expression);break;case"Identifier":break;default:h(e.type,e.span)}}(e.property));break;case"ParenthesisExpression":I(e.expression);break;case"SequenceExpression":null===(n=e.expressions)||void 0===n||n.forEach(I);break;case"Identifier":y.pushAccess(e),E(e);break;case"BigIntLiteral":case"NullLiteral":case"StringLiteral":case"BooleanLiteral":case"NumericLiteral":case"ThisExpression":case"RegExpLiteral":break;default:h(e.type,e.span)}}let j;const P=r(t,(t=>{d="scan",y.enterScope(),t.body.forEach(v),y.exitScope(),y.stop();return y.getDFSScope().map((e=>e.anlysis())).filter(Boolean).forEach((e=>{e&&h(`identifier(${e.variable}) is undefined`,e.span)})),f.forEach((e=>{var t,r,s;if("Identifier"===e.callee.type&&(null===(t=e.callee._xhsScope)||void 0===t?void 0:t.checkGlobal(e.callee.value))){const t=null===(s=null===(r=e.arguments)||void 0===r?void 0:r[0])||void 0===s?void 0:s.expression;if(t&&"StringLiteral"===(null==t?void 0:t.type)&&(null==t?void 0:t.value))try{const e=null==a?void 0:a(null==t?void 0:t.value);t.value=e,t.raw=JSON.stringify(e)}catch(t){h(t.message,e.span)}else h("require() must provide static path, dynamic or empty path is disallowed",e.span)}})),u.length?(t.body=[],t):(j=e.cloneDeep(t),d="generate",t.body.forEach(v),t)}));d="legacyGenerate";const _=(null===(n=null==j?void 0:j.body)||void 0===n?void 0:n.length)?r("var magic;",(()=>(j.body.forEach(v),j)),"es2015",!0).code:"";return{code:P.code,map:P.map,legacyCode:_,errors:u}};
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
package/dist/scope.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Span, Identifier } from '@swc/core';
|
|
2
|
+
export declare const SPECIFY_VAR: string[];
|
|
3
|
+
declare module "@swc/core" {
|
|
4
|
+
interface Identifier {
|
|
5
|
+
_xhsScope?: Scope;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare class Scope {
|
|
9
|
+
private parentScope;
|
|
10
|
+
private defines;
|
|
11
|
+
private access;
|
|
12
|
+
toString(): string;
|
|
13
|
+
anlysis(): {
|
|
14
|
+
variable: string;
|
|
15
|
+
span: Span;
|
|
16
|
+
} | undefined;
|
|
17
|
+
checkGlobal(key: string): boolean;
|
|
18
|
+
setAccess(key: string, value: Span): void;
|
|
19
|
+
setDefines(key: string, value: Span): void;
|
|
20
|
+
setParentScope(scope: Scope | undefined): void;
|
|
21
|
+
}
|
|
22
|
+
export declare class ScopeManager {
|
|
23
|
+
private _scopeStack;
|
|
24
|
+
private _scopeTables;
|
|
25
|
+
private _stop;
|
|
26
|
+
stop(): void;
|
|
27
|
+
enterScope(): void;
|
|
28
|
+
exitScope(): void;
|
|
29
|
+
getCurrentScope(): Scope | undefined;
|
|
30
|
+
pushIdentifier(id: Identifier): void;
|
|
31
|
+
pushAccess(id: Identifier): void;
|
|
32
|
+
getDFSScope(): Scope[];
|
|
33
|
+
}
|
package/package.json
CHANGED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/tranform.ts","../src/scope.ts","../src/index.ts"],"sourcesContent":["import type { JscTarget, Program } from '@swc/core';\nimport { transformSync } from '@swc/core'\n\n\nexport const transform = (code: string, plugin?: (m: Program) => Program, target: JscTarget = 'esnext', minify = false) => transformSync(code, {\n swcrc: false,\n configFile: false,\n minify,\n sourceMaps: false,\n jsc: {\n preserveAllComments: true,\n target,\n // minify: false,\n externalHelpers: false,\n parser: {\n syntax: \"ecmascript\",\n jsx: false,\n dynamicImport: false,\n privateMethod: false,\n functionBind: false,\n classPrivateProperty: false,\n exportDefaultFrom: false,\n exportNamespaceFrom: false,\n decorators: false,\n decoratorsBeforeExport: false,\n importMeta: false,\n },\n },\n plugin,\n})\n\n","/* eslint-disable consistent-return */\nimport type { Span, Identifier } from '@swc/core';\n\nexport const SPECIFY_VAR = [\"getDate\", \"getRegExp\", \"console\"]\n\nconst IDENTIFIER_WHITE_LIST = [\n \"Object\", \"Boolean\", \"Array\", \"String\", \"Number\", \"Date\", \"Map\", \"Set\",\n\n \"decodeURI\", \"decodeURIComponent\", \"encodeURI\", \"encodeURIComponent\", \"isNaN\", \"isFinite\", \"parseFloat\", \"parseInt\",\n\n \"Infinity\", \"NaN\", \"undefined\",\n\n \"setTimeout\", \"clearTimeout\", \"setInterval\", \"clearInterval\",\n\n \"JSON\", \"Math\",\n\n // 模块化\n \"module\", \"require\", \"exports\",\n\n ...SPECIFY_VAR\n]\n\ndeclare module \"@swc/core\" {\n interface Identifier {\n _xhsScope?: Scope\n }\n}\n\n// 变量作用域表\nexport class Scope {\n private parentScope: Scope | undefined;\n\n // 当前作用域定义的变量\n private defines: Record<string, Span> = {};\n\n // 当前作用域使用的变量\n private access: Record<string, Span> = {};\n\n toString() {\n return `defines: ${Object.keys(this.defines)} access: ${Object.keys(this.access)}`\n }\n\n /**\n * @returns \n */\n anlysis() {\n // TODO 优化算法复杂度\n // 在自身作用域 以及 上级作用域寻找,找到顶层作用域时 则需要看 白名单是否含有\n for (const variable in this.access) {\n // 白名单也不包含此变量\n if (this.checkGlobal(variable) && !IDENTIFIER_WHITE_LIST.includes(variable)) {\n return { variable, span: this.access[variable] }\n }\n }\n return undefined\n }\n\n // 检查是否是全局调用\n checkGlobal(key: string): boolean {\n let scope: Scope | undefined = this\n while (scope) {\n if (!scope.defines[key]) {\n scope = scope.parentScope\n continue\n } else {\n return false\n }\n }\n return !scope\n }\n\n setAccess(key: string, value: Span) {\n this.access[key] = value\n }\n\n setDefines(key: string, value: Span) {\n this.defines[key] = value\n }\n\n setParentScope(scope: Scope | undefined) {\n this.parentScope = scope\n }\n}\n\nexport class ScopeManager {\n // 栈帧\n private _scopeStack: Scope[] = []\n\n // 栈 深度遍历结果\n private _scopeTables: Scope[] = []\n\n // 是否停止收集\n private _stop: boolean = false\n\n // 停止分析\n stop() {\n this._stop = true\n }\n\n enterScope() {\n if (this._stop) return\n this._scopeStack.push(new Scope())\n }\n\n exitScope() {\n if (this._stop) return\n const scope = this._scopeStack.pop()\n if (scope) {\n this._scopeTables.push(scope)\n scope.setParentScope(this.getCurrentScope())\n }\n }\n\n getCurrentScope() {\n if (this._stop) return\n return this._scopeStack[this._scopeStack.length - 1]\n }\n\n // 记录定义的值\n pushIdentifier(id: Identifier) {\n if (this._stop) return\n if (this.getCurrentScope()) {\n this.getCurrentScope()?.setDefines(id.value, id.span)\n }\n }\n\n // 记录使用的值\n pushAccess(id: Identifier) {\n if (this._stop) return\n const current = this.getCurrentScope()\n if (current) {\n current?.setAccess(id.value, id.span)\n if (SPECIFY_VAR.includes(id.value)) {\n id._xhsScope = current\n }\n }\n }\n\n getDFSScope() {\n return this._scopeTables\n }\n}","/* eslint-disable consistent-return */\n/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type { ArrowFunctionExpression, CallExpression, Expression, Identifier, FunctionDeclaration, FunctionExpression, MemberExpression, MethodProperty, ModuleItem, NullLiteral, ObjectExpression, Param, Pattern, PropertyName, Span, Statement } from '@swc/core';\nimport { cloneDeep } from 'lodash';\nimport { transform } from './tranform';\nimport { SPECIFY_VAR, ScopeManager } from './scope';\n\nexport const SJS_HELPER = '_sjs$'\nconst SETTER = `${SJS_HELPER}.s`\nconst GETTER = `${SJS_HELPER}.g`\nconst CALLER = `${SJS_HELPER}.c`\n\ntype CompileMode = 'scan' | 'generate' | 'legacyGenerate'\n\nfunction sjsCompiler(code, onRequire: (s: string) => string) {\n const errors: { message: string, span: Span }[] = []\n\n const offset = 1;\n\n // scan 阶段只是对整个树的遍历,会对作用域进行收集,禁止修改语法树\n // generate 阶段会生成 helper形式代码\n // legacyGenerate 阶段 只生成一份修改 .constructor 访问的代码\n\n let mode: CompileMode = 'scan'\n\n // 普通变量作用域管理\n const scopeManager = new ScopeManager()\n\n // require语句\n const requireCallee: CallExpression[] = []\n\n // 找到对应行\n function emitCompilerError(msg: string, span: Span) {\n if (mode !== 'scan') return\n const message = msg.trim().split(/\\s+/).length > 1 ? msg : `${msg} is disallowed`\n errors.push({ message, span: { ...span } })\n }\n\n function handlePattern(pattern: Pattern) {\n switch (pattern.type) {\n case \"RestElement\":\n // function f(...a) {}\n handlePattern(pattern.argument)\n if (pattern.argument.type === \"Identifier\") {\n scopeManager.pushIdentifier(pattern.argument)\n }\n break;\n case \"AssignmentPattern\":\n // 默认值语法 function f(a = 1) {}\n handleExpression(pattern.right)\n if (pattern.left.type === \"Identifier\") {\n scopeManager.pushIdentifier(pattern.left)\n }\n break;\n case 'Identifier':\n // function f(a) {}\n scopeManager.pushIdentifier(pattern)\n break;\n case \"MemberExpression\":\n handleExpression(pattern)\n break;\n case \"ArrayPattern\":\n emitCompilerError(\"Destructuring assignment like const [a, b] = array; is disallowed \", pattern.span)\n break\n case \"ObjectPattern\":\n emitCompilerError(\"Destructuring assignment like const {a, b} = obj; is disallowed \", pattern.span)\n break\n default:\n // @ts-ignore\n emitCompilerError(pattern.type, pattern.span)\n break\n }\n }\n\n function handleParam(p: Param) {\n // 参数不支持装饰器\n if (p?.decorators?.length) {\n emitCompilerError(p.type, p.span)\n }\n if (p.pat) {\n handlePattern(p.pat)\n }\n }\n\n function handleStatement(e: ModuleItem | Statement) {\n switch (e.type) {\n case \"BlockStatement\":\n scopeManager.enterScope()\n e.stmts?.forEach(handleStatement)\n scopeManager.exitScope()\n break\n case \"TryStatement\":\n if (e.block) {\n handleStatement(e.block)\n }\n // catch 部分是有参数的\n scopeManager.enterScope()\n if (e.handler?.param) {\n handlePattern(e.handler?.param)\n }\n if (e.handler?.body?.type === \"BlockStatement\") {\n e.handler?.body?.stmts.forEach(handleStatement)\n }\n scopeManager.exitScope()\n\n if (e.finalizer) {\n handleStatement(e.finalizer)\n }\n break\n case \"ForStatement\":\n scopeManager.enterScope()\n if (e.init) {\n switch (e.init.type) {\n case \"VariableDeclaration\":\n handleStatement(e.init)\n break;\n default:\n handleExpression(e.init)\n break;\n }\n }\n\n if (e.test) {\n handleExpression(e.test)\n }\n\n if (e.update) {\n handleExpression(e.update)\n }\n if (e.body.type === \"BlockStatement\") {\n e.body.stmts?.forEach(handleStatement)\n } else {\n handleStatement(e.body)\n }\n scopeManager.exitScope()\n break\n case \"SwitchStatement\":\n // 处理switch条件\n handleExpression(e.discriminant)\n\n // 处理case条件\n e.cases?.forEach((case_) => {\n if (case_.test) {\n handleExpression(case_.test)\n }\n case_.consequent?.forEach(handleStatement)\n })\n break\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n handleExpression(e.test)\n handleStatement(e.body)\n break\n case \"IfStatement\":\n handleExpression(e.test)\n handleStatement(e.consequent)\n if (e.alternate) {\n handleStatement(e.alternate)\n }\n break\n case \"ExpressionStatement\":\n handleExpression(e.expression)\n break\n case \"FunctionDeclaration\":\n checkFunction(e)\n scopeManager.pushIdentifier(e.identifier)\n scopeManager.enterScope()\n // function() { arguments }\n scopeManager.pushIdentifier({ ...e.identifier, value: 'arguments' })\n e.params.forEach(handleParam)\n if (e?.body?.type === \"BlockStatement\") {\n e.body.stmts?.forEach(handleStatement)\n }\n scopeManager.exitScope()\n break\n case \"ReturnStatement\":\n if (e.argument) {\n handleExpression(e.argument)\n }\n break\n case \"VariableDeclaration\":\n for (const declaration of e.declarations) {\n switch (declaration.id.type) {\n case \"Identifier\":\n scopeManager.pushIdentifier(declaration.id)\n break;\n default:\n // @ts-ignore\n emitCompilerError(declaration.id.type, declaration.id.span)\n break;\n }\n\n if (declaration.init) {\n handleExpression(declaration.init)\n }\n }\n break\n case \"BreakStatement\":\n case \"DebuggerStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n break\n default:\n emitCompilerError(e.type, e.span)\n break;\n }\n }\n\n function handleProperty(p: MemberExpression['property']) {\n switch (p.type) {\n case \"Computed\":\n {\n const expression = p.expression\n handleExpression(expression)\n }\n break\n case \"Identifier\":\n break\n default:\n emitCompilerError(p.type, p.span)\n break\n }\n }\n\n function handleObjectPropertyName(key: PropertyName) {\n switch (key.type) {\n case \"Computed\":\n {\n const expression = key.expression\n handleExpression(expression)\n }\n break\n default:\n break;\n }\n }\n\n function handleObjectProperty(i: ObjectExpression['properties'][0]) {\n switch (i.type) {\n case \"KeyValueProperty\":\n handleObjectPropertyName(i.key)\n handleExpression(i.value)\n break\n case \"GetterProperty\":\n handleObjectPropertyName(i.key)\n scopeManager.enterScope()\n if (i.body?.type === \"BlockStatement\") {\n i.body.stmts.forEach(handleStatement)\n }\n scopeManager.exitScope()\n break;\n case \"SetterProperty\":\n handleObjectPropertyName(i.key)\n scopeManager.enterScope()\n handlePattern(i.param)\n if (i.body?.type === \"BlockStatement\") {\n i.body.stmts.forEach(handleStatement)\n }\n scopeManager.exitScope()\n break\n case \"Identifier\":\n scopeManager.pushAccess(i)\n fixSpecialVarWhenGenerate(i)\n break\n case \"MethodProperty\":\n handleObjectPropertyName(i.key)\n checkFunction(i)\n scopeManager.enterScope()\n i.params.forEach(handleParam)\n if (i.body?.type === \"BlockStatement\") {\n i.body.stmts.forEach(handleStatement)\n }\n scopeManager.exitScope()\n break\n case \"SpreadElement\":\n handleExpression(i.arguments)\n break\n default:\n // @ts-ignore\n emitCompilerError(i.type, i.span)\n break\n }\n }\n\n function modifyProperty(p: MemberExpression['property']): any {\n if (p.type === \"Computed\") {\n handleExpression(p.expression)\n return p.expression\n }\n if (p.type === \"Identifier\") {\n return {\n type: 'StringLiteral',\n span: p.span,\n value: p.value,\n raw: JSON.stringify(p.value)\n }\n }\n\n if (p.type === \"PrivateName\") {\n return { type: 'NullLiteral' } as NullLiteral\n }\n }\n\n function checkFunction(e: FunctionExpression | ArrowFunctionExpression | FunctionDeclaration | MethodProperty) {\n // 不允许使用 async 或者 generator 语法\n if (e.async || e.generator) {\n emitCompilerError(e.type, e.span)\n }\n }\n\n\n function collectRequireWhenScan(c: CallExpression) {\n if (mode !== 'scan') {\n return\n }\n requireCallee.push(c)\n // 标记作用域\n if (c.callee.type === 'Identifier') {\n c.callee._xhsScope = scopeManager.getCurrentScope()\n }\n }\n\n function fixSpecialVarWhenGenerate(id: Identifier) {\n if (mode !== 'generate') {\n return\n }\n // 发现调用全局特殊变量\n if (SPECIFY_VAR.includes(id.value) && id._xhsScope?.checkGlobal(id.value)) {\n // 生成阶段判断是否是调用全局环境\n id.value = `${SJS_HELPER}.${id.value}`\n }\n }\n\n function handleExpression(e: Expression) {\n switch (e.type) {\n case \"FunctionExpression\":\n checkFunction(e)\n if (e.identifier) {\n scopeManager.pushIdentifier(e.identifier)\n }\n scopeManager.enterScope()\n e.params.forEach(handleParam)\n if (e.body?.type === \"BlockStatement\") {\n e.body.stmts?.forEach(handleStatement)\n }\n scopeManager.exitScope()\n break\n case \"ArrowFunctionExpression\":\n checkFunction(e)\n scopeManager.enterScope()\n e.params.forEach(handlePattern)\n\n if (e.body.type === \"BlockStatement\") {\n e.body.stmts?.forEach(handleStatement)\n } else {\n handleExpression(e.body)\n }\n scopeManager.exitScope()\n break;\n case \"CallExpression\":\n switch (e.callee.type) {\n case \"Import\":\n case \"Super\":\n emitCompilerError(e.callee.type, e.span)\n break\n default:\n if (e.callee.type === \"MemberExpression\" && mode === 'generate') {\n const oldCallee = e.callee\n\n const NewCallExpression = e as unknown as CallExpression\n NewCallExpression.type = \"CallExpression\"\n NewCallExpression.callee = {\n type: 'Identifier',\n span: e.span,\n value: CALLER,\n optional: false\n }\n\n handleExpression(oldCallee.object)\n e.arguments.forEach(i => handleExpression(i.expression))\n\n NewCallExpression.arguments = [\n { expression: modifyProperty(oldCallee.property) },\n { expression: oldCallee.object },\n {\n expression: {\n type: \"ArrayExpression\",\n elements: e.arguments,\n span: e.span\n }\n },\n ]\n } else if (e.callee.type === \"MemberExpression\"\n && mode === 'legacyGenerate'\n && e.callee.property.type === \"Identifier\"\n && e.callee.property.value === \"constructor\"\n ) {\n e.callee.property.value = `${e.callee.property.value}.name`\n handleExpression(e.callee.object)\n e.arguments.forEach(i => handleExpression(i.expression))\n } else {\n if (e.callee.type === \"Identifier\") {\n if (e.callee.value === \"require\") {\n collectRequireWhenScan(e)\n }\n // 需要后置处理,否则callee.value会被修改\n fixSpecialVarWhenGenerate(e.callee)\n }\n handleExpression(e.callee)\n e.arguments.forEach(i => handleExpression(i.expression))\n }\n break\n }\n break;\n case \"ArrayExpression\":\n e.elements?.forEach(i => {\n if (i) {\n handleExpression(i.expression)\n }\n })\n break;\n case \"ObjectExpression\":\n e.properties.forEach(handleObjectProperty)\n break;\n case \"TemplateLiteral\":\n // 当中会有表达式\n e.expressions.forEach(handleExpression)\n break\n case \"UpdateExpression\":\n if (e.argument.type === \"MemberExpression\" && mode === 'generate') {\n const NewUpdateExpression = e as unknown as CallExpression\n NewUpdateExpression.type = \"CallExpression\"\n NewUpdateExpression.callee = {\n type: 'Identifier',\n span: e.span,\n value: SETTER,\n optional: false\n }\n handleExpression(e.argument.object)\n NewUpdateExpression.arguments = [\n { expression: modifyProperty(e.argument.property) },\n { expression: e.argument.object },\n {\n expression:\n {\n type: 'StringLiteral',\n span: e.span,\n value: e.operator,\n raw: JSON.stringify(e.operator)\n }\n },\n ]\n\n Reflect.deleteProperty(e, 'prefix')\n Reflect.deleteProperty(e, 'operator')\n Reflect.deleteProperty(e, 'argument')\n } else {\n handleExpression(e.argument)\n }\n break\n case \"UnaryExpression\":\n handleExpression(e.argument)\n break\n case \"AssignmentExpression\":\n if (e.left.type === 'MemberExpression' && mode === 'generate') {\n const NewAssignmentExpression = e as unknown as CallExpression\n NewAssignmentExpression.type = \"CallExpression\"\n NewAssignmentExpression.callee = {\n type: 'Identifier',\n span: e.span,\n value: SETTER,\n optional: false\n }\n handleExpression(e.right)\n handleExpression(e.left.object)\n NewAssignmentExpression.arguments = [\n { expression: modifyProperty(e.left.property) },\n { expression: e.left.object },\n {\n expression:\n {\n type: 'StringLiteral',\n span: e.span,\n value: e.operator,\n raw: JSON.stringify(e.operator)\n }\n },\n { expression: e.right }\n ]\n\n Reflect.deleteProperty(e, 'left')\n Reflect.deleteProperty(e, 'right')\n Reflect.deleteProperty(e, 'operator')\n } else {\n handlePattern(e.left)\n handleExpression(e.right)\n }\n break;\n case \"BinaryExpression\":\n handleExpression(e.left)\n handleExpression(e.right)\n break;\n case \"ConditionalExpression\":\n handleExpression(e.test)\n handleExpression(e.consequent)\n handleExpression(e.alternate)\n break;\n case \"MemberExpression\":\n if (mode === 'generate') {\n const NewMemberExpression = e as unknown as CallExpression\n NewMemberExpression.type = \"CallExpression\"\n NewMemberExpression.callee = {\n type: 'Identifier',\n span: e.span,\n value: GETTER,\n optional: false\n }\n handleExpression(e.object)\n\n NewMemberExpression.arguments = [\n { expression: modifyProperty(e.property) },\n { expression: e.object }\n ]\n // 清除语法树\n Reflect.deleteProperty(e, 'object')\n Reflect.deleteProperty(e, 'property')\n } else if (mode === 'legacyGenerate' && e.property.type === \"Identifier\" && e.property.value === \"constructor\") {\n e.property.value = `${e.property.value}.name`\n handleExpression(e.object)\n } else {\n // 只遍历\n handleExpression(e.object)\n handleProperty(e.property)\n }\n break;\n case \"ParenthesisExpression\":\n handleExpression(e.expression)\n break;\n case \"SequenceExpression\":\n e.expressions?.forEach(handleExpression)\n break;\n case \"Identifier\":\n scopeManager.pushAccess(e)\n fixSpecialVarWhenGenerate(e)\n break;\n // 以下都是字面量无需处理\n case \"BigIntLiteral\":\n case \"NullLiteral\":\n case \"StringLiteral\":\n case \"BooleanLiteral\":\n case \"NumericLiteral\":\n case \"ThisExpression\":\n case \"RegExpLiteral\":\n break\n default:\n // @ts-ignore\n emitCompilerError(e.type, e.span)\n break;\n }\n }\n\n function getSourceCode(span: Span) {\n return code.slice(span.start - offset, span.end - offset)\n }\n\n let legacyModule: any\n\n const result = transform(code, (module) => {\n // 1. 校验基本语法错误,收集变量作用域,构建作用域表\n mode = \"scan\"\n scopeManager.enterScope()\n module.body.forEach(handleStatement)\n scopeManager.exitScope()\n scopeManager.stop()\n\n // 2. 分析作用域表 找出不是sjs 标准的模块进行屏蔽\n // 2.2 从最小作用域向上分析\n const validResult = scopeManager.getDFSScope().map(i => i.anlysis()).filter(Boolean)\n validResult.forEach(i => {\n if (i) {\n emitCompilerError(`identifier(${i.variable}) is undefined`, i.span)\n }\n })\n\n // 2.1 require语句校验以及处理path\n requireCallee.forEach(i => {\n // 调用全局环境 require\n if (i.callee.type === \"Identifier\" && i.callee._xhsScope?.checkGlobal(i.callee.value)) {\n const requirePath = i.arguments?.[0]?.expression\n if (requirePath && requirePath?.type === 'StringLiteral' && requirePath?.value) {\n try {\n const formatPath = onRequire?.(requirePath?.value)\n requirePath.value = formatPath\n requirePath.raw = JSON.stringify(formatPath)\n } catch (error: any) {\n // 校验path 地址是否正确不正确进行报错\n emitCompilerError(error.message, i.span)\n }\n } else {\n emitCompilerError('require() must provide static path, dynamic or empty path is disallowed', i.span)\n }\n }\n })\n\n // 3. 抛出前面检查出来的错误\n if (errors.length) {\n module.body = []\n return module\n }\n\n // 上面的没出错,拷贝一份语法树用于生成兼容代码\n legacyModule = cloneDeep(module)\n\n // 4. 修改语法树生成 set get call 语法\n mode = \"generate\"\n module.body.forEach(handleStatement)\n return module\n })\n\n mode = 'legacyGenerate'\n\n // 生成老版本的兼容代码\n const legacyCode = legacyModule?.body?.length\n ? transform('var magic;', () => {\n legacyModule.body.forEach(handleStatement)\n return legacyModule\n }, 'es2015', true).code\n : ''\n\n return {\n code: result.code,\n map: result.map,\n legacyCode,\n errors,\n }\n}\n\nexport default sjsCompiler\n"],"names":["transform","code","plugin","target","minify","transformSync","swcrc","configFile","sourceMaps","jsc","preserveAllComments","externalHelpers","parser","syntax","jsx","dynamicImport","privateMethod","functionBind","classPrivateProperty","exportDefaultFrom","exportNamespaceFrom","decorators","decoratorsBeforeExport","importMeta","SPECIFY_VAR","IDENTIFIER_WHITE_LIST","Scope","constructor","this","defines","access","toString","Object","keys","anlysis","variable","checkGlobal","includes","span","key","scope","parentScope","setAccess","value","setDefines","setParentScope","ScopeManager","_scopeStack","_scopeTables","_stop","stop","enterScope","push","exitScope","pop","getCurrentScope","length","pushIdentifier","id","_a","pushAccess","current","_xhsScope","getDFSScope","SJS_HELPER","SETTER","GETTER","CALLER","onRequire","errors","mode","scopeManager","requireCallee","emitCompilerError","msg","message","trim","split","assign","handlePattern","pattern","type","argument","handleExpression","right","left","handleParam","p","pat","handleStatement","e","stmts","forEach","block","handler","_b","param","_c","_e","_d","body","_g","_f","finalizer","init","test","update","_h","discriminant","_j","cases","case_","consequent","alternate","expression","checkFunction","identifier","params","_k","_l","declaration","declarations","handleObjectPropertyName","handleObjectProperty","i","fixSpecialVarWhenGenerate","arguments","modifyProperty","raw","JSON","stringify","async","generator","c","callee","oldCallee","NewCallExpression","optional","object","property","elements","properties","expressions","NewUpdateExpression","operator","Reflect","deleteProperty","NewAssignmentExpression","NewMemberExpression","handleProperty","legacyModule","result","module","map","filter","Boolean","requirePath","formatPath","error","cloneDeep","legacyCode"],"mappings":"mHAIO,MAAMA,EAAY,CAACC,EAAcC,EAAkCC,EAAoB,SAAUC,GAAS,IAAUC,EAAaA,cAACJ,EAAM,CAC3IK,OAAO,EACPC,YAAY,EACZH,SACAI,YAAY,EACZC,IAAK,CACDC,qBAAqB,EACrBP,SAEAQ,iBAAiB,EACjBC,OAAQ,CACJC,OAAQ,aACRC,KAAK,EACLC,eAAe,EACfC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,mBAAmB,EACnBC,qBAAqB,EACrBC,YAAY,EACZC,wBAAwB,EACxBC,YAAY,IAGpBrB,WCzBSsB,EAAc,CAAC,UAAW,YAAa,WAE9CC,EAAwB,CAC1B,SAAU,UAAW,QAAS,SAAU,SAAU,OAAQ,MAAO,MAEjE,YAAa,qBAAsB,YAAa,qBAAsB,QAAS,WAAY,aAAc,WAEzG,WAAY,MAAO,YAEnB,aAAc,eAAgB,cAAe,gBAE7C,OAAQ,OAGR,SAAU,UAAW,aAElBD,SAUME,EAAb,WAAAC,GAIYC,KAAOC,QAAyB,GAGhCD,KAAME,OAAyB,EA8C1C,CA5CG,QAAAC,GACI,MAAO,YAAYC,OAAOC,KAAKL,KAAKC,oBAAoBG,OAAOC,KAAKL,KAAKE,SAC5E,CAKD,OAAAI,GAGI,IAAK,MAAMC,KAAYP,KAAKE,OAExB,GAAIF,KAAKQ,YAAYD,KAAcV,EAAsBY,SAASF,GAC9D,MAAO,CAAEA,WAAUG,KAAMV,KAAKE,OAAOK,GAIhD,CAGD,WAAAC,CAAYG,GACR,IAAIC,EAA2BZ,KAC/B,KAAOY,GAAO,CACV,GAAKA,EAAMX,QAAQU,GAIf,OAAO,EAHPC,EAAQA,EAAMC,WAKrB,CACD,OAAQD,CACX,CAED,SAAAE,CAAUH,EAAaI,GACnBf,KAAKE,OAAOS,GAAOI,CACtB,CAED,UAAAC,CAAWL,EAAaI,GACpBf,KAAKC,QAAQU,GAAOI,CACvB,CAED,cAAAE,CAAeL,GACXZ,KAAKa,YAAcD,CACtB,QAGQM,EAAb,WAAAnB,GAEYC,KAAWmB,YAAY,GAGvBnB,KAAYoB,aAAY,GAGxBpB,KAAKqB,OAAY,CAiD5B,CA9CG,IAAAC,GACItB,KAAKqB,OAAQ,CAChB,CAED,UAAAE,GACQvB,KAAKqB,OACTrB,KAAKmB,YAAYK,KAAK,IAAI1B,EAC7B,CAED,SAAA2B,GACI,GAAIzB,KAAKqB,MAAO,OAChB,MAAMT,EAAQZ,KAAKmB,YAAYO,MAC3Bd,IACAZ,KAAKoB,aAAaI,KAAKZ,GACvBA,EAAMK,eAAejB,KAAK2B,mBAEjC,CAED,eAAAA,GACI,IAAI3B,KAAKqB,MACT,OAAOrB,KAAKmB,YAAYnB,KAAKmB,YAAYS,OAAS,EACrD,CAGD,cAAAC,CAAeC,SACP9B,KAAKqB,OACLrB,KAAK2B,4BACLI,EAAA/B,KAAK2B,kCAAmBX,WAAWc,EAAGf,MAAOe,EAAGpB,MAEvD,CAGD,UAAAsB,CAAWF,GACP,GAAI9B,KAAKqB,MAAO,OAChB,MAAMY,EAAUjC,KAAK2B,kBACjBM,IACAA,SAAAA,EAASnB,UAAUgB,EAAGf,MAAOe,EAAGpB,MAC5Bd,EAAYa,SAASqB,EAAGf,SACxBe,EAAGI,UAAYD,GAG1B,CAED,WAAAE,GACI,OAAOnC,KAAKoB,YACf,ECrIE,MAAMgB,EAAa,QACpBC,EAAS,GAAGD,MACZE,EAAS,GAAGF,MACZG,EAAS,GAAGH,2CAIlB,SAAqB/D,EAAMmE,SACvB,MAAMC,EAA4C,GAQlD,IAAIC,EAAoB,OAGxB,MAAMC,EAAe,IAAIzB,EAGnB0B,EAAkC,GAGxC,SAASC,EAAkBC,EAAapC,GACpC,GAAa,SAATgC,EAAiB,OACrB,MAAMK,EAAUD,EAAIE,OAAOC,MAAM,OAAOrB,OAAS,EAAIkB,EAAM,GAAGA,kBAC9DL,EAAOjB,KAAK,CAAEuB,UAASrC,KAAIN,OAAA8C,OAAA,CAAA,EAAOxC,IACrC,CAED,SAASyC,EAAcC,GACnB,OAAQA,EAAQC,MACZ,IAAK,cAEDF,EAAcC,EAAQE,UACQ,eAA1BF,EAAQE,SAASD,MACjBV,EAAad,eAAeuB,EAAQE,UAExC,MACJ,IAAK,oBAEDC,EAAiBH,EAAQI,OACC,eAAtBJ,EAAQK,KAAKJ,MACbV,EAAad,eAAeuB,EAAQK,MAExC,MACJ,IAAK,aAEDd,EAAad,eAAeuB,GAC5B,MACJ,IAAK,mBACDG,EAAiBH,GACjB,MACJ,IAAK,eACDP,EAAkB,qEAAsEO,EAAQ1C,MAChG,MACJ,IAAK,gBACDmC,EAAkB,mEAAoEO,EAAQ1C,MAC9F,MACJ,QAEImC,EAAkBO,EAAQC,KAAMD,EAAQ1C,MAGnD,CAED,SAASgD,EAAYC,UAEA,QAAb5B,EAAA4B,aAAC,EAADA,EAAGlE,kBAAU,IAAAsC,OAAA,EAAAA,EAAEH,SACfiB,EAAkBc,EAAEN,KAAMM,EAAEjD,MAE5BiD,EAAEC,KACFT,EAAcQ,EAAEC,IAEvB,CAED,SAASC,EAAgBC,6BACrB,OAAQA,EAAET,MACN,IAAK,iBACDV,EAAapB,aACN,QAAPQ,EAAA+B,EAAEC,aAAK,IAAAhC,GAAAA,EAAEiC,QAAQH,GACjBlB,EAAalB,YACb,MACJ,IAAK,eACGqC,EAAEG,OACFJ,EAAgBC,EAAEG,OAGtBtB,EAAapB,cACE,UAAXuC,EAAEI,eAAS,IAAAC,OAAA,EAAAA,EAAAC,QACXjB,EAAyB,UAAXW,EAAEI,eAAS,IAAAG,OAAA,EAAAA,EAAAD,OAEC,oBAAT,QAAjBE,EAAW,QAAXC,EAAAT,EAAEI,eAAS,IAAAK,OAAA,EAAAA,EAAAC,YAAM,IAAAF,OAAA,EAAAA,EAAAjB,QACA,QAAjBoB,EAAW,QAAXC,EAAAZ,EAAEI,eAAS,IAAAQ,OAAA,EAAAA,EAAAF,YAAM,IAAAC,GAAAA,EAAAV,MAAMC,QAAQH,IAEnClB,EAAalB,YAETqC,EAAEa,WACFd,EAAgBC,EAAEa,WAEtB,MACJ,IAAK,eAED,GADAhC,EAAapB,aACTuC,EAAEc,KACF,GACS,wBADDd,EAAEc,KAAKvB,KAEPQ,EAAgBC,EAAEc,WAGlBrB,EAAiBO,EAAEc,MAK3Bd,EAAEe,MACFtB,EAAiBO,EAAEe,MAGnBf,EAAEgB,QACFvB,EAAiBO,EAAEgB,QAEH,mBAAhBhB,EAAEU,KAAKnB,aACP0B,EAAAjB,EAAEU,KAAKT,sBAAOC,QAAQH,GAEtBA,EAAgBC,EAAEU,MAEtB7B,EAAalB,YACb,MACJ,IAAK,kBAED8B,EAAiBO,EAAEkB,cAGZ,QAAPC,EAAAnB,EAAEoB,aAAK,IAAAD,GAAAA,EAAEjB,SAASmB,UACVA,EAAMN,MACNtB,EAAiB4B,EAAMN,MAEX,QAAhB9C,EAAAoD,EAAMC,kBAAU,IAAArD,GAAAA,EAAEiC,QAAQH,EAAgB,IAE9C,MACJ,IAAK,mBACL,IAAK,iBACDN,EAAiBO,EAAEe,MACnBhB,EAAgBC,EAAEU,MAClB,MACJ,IAAK,cACDjB,EAAiBO,EAAEe,MACnBhB,EAAgBC,EAAEsB,YACdtB,EAAEuB,WACFxB,EAAgBC,EAAEuB,WAEtB,MACJ,IAAK,sBACD9B,EAAiBO,EAAEwB,YACnB,MACJ,IAAK,sBACDC,EAAczB,GACdnB,EAAad,eAAeiC,EAAE0B,YAC9B7C,EAAapB,aAEboB,EAAad,eAAczB,OAAA8C,OAAA9C,OAAA8C,OAAA,CAAA,EAAMY,EAAE0B,YAAU,CAAEzE,MAAO,eACtD+C,EAAE2B,OAAOzB,QAAQN,GACK,oBAAT,QAATgC,EAAA5B,aAAA,EAAAA,EAAGU,YAAM,IAAAkB,OAAA,EAAAA,EAAArC,gBACTsC,EAAA7B,EAAEU,KAAKT,sBAAOC,QAAQH,IAE1BlB,EAAalB,YACb,MACJ,IAAK,kBACGqC,EAAER,UACFC,EAAiBO,EAAER,UAEvB,MACJ,IAAK,sBACD,IAAK,MAAMsC,KAAe9B,EAAE+B,aAAc,CACtC,GACS,eADDD,EAAY9D,GAAGuB,KAEfV,EAAad,eAAe+D,EAAY9D,SAIxCe,EAAkB+C,EAAY9D,GAAGuB,KAAMuC,EAAY9D,GAAGpB,MAI1DkF,EAAYhB,MACZrB,EAAiBqC,EAAYhB,KAEpC,CACD,MACJ,IAAK,iBACL,IAAK,oBACL,IAAK,oBACL,IAAK,iBACD,MACJ,QACI/B,EAAkBiB,EAAET,KAAMS,EAAEpD,MAGvC,CAkBD,SAASoF,EAAyBnF,GAC9B,GACS,aADDA,EAAI0C,KAEJ,CAEIE,EADmB5C,EAAI2E,WAE1B,CAKZ,CAED,SAASS,EAAqBC,aAC1B,OAAQA,EAAE3C,MACN,IAAK,mBACDyC,EAAyBE,EAAErF,KAC3B4C,EAAiByC,EAAEjF,OACnB,MACJ,IAAK,iBACD+E,EAAyBE,EAAErF,KAC3BgC,EAAapB,aACQ,4BAAjBQ,EAAAiE,EAAExB,2BAAMnB,OACR2C,EAAExB,KAAKT,MAAMC,QAAQH,GAEzBlB,EAAalB,YACb,MACJ,IAAK,iBACDqE,EAAyBE,EAAErF,KAC3BgC,EAAapB,aACb4B,EAAc6C,EAAE5B,OACK,4BAAjBD,EAAA6B,EAAExB,2BAAMnB,OACR2C,EAAExB,KAAKT,MAAMC,QAAQH,GAEzBlB,EAAalB,YACb,MACJ,IAAK,aACDkB,EAAaX,WAAWgE,GACxBC,EAA0BD,GAC1B,MACJ,IAAK,iBACDF,EAAyBE,EAAErF,KAC3B4E,EAAcS,GACdrD,EAAapB,aACbyE,EAAEP,OAAOzB,QAAQN,GACI,4BAAjBW,EAAA2B,EAAExB,2BAAMnB,OACR2C,EAAExB,KAAKT,MAAMC,QAAQH,GAEzBlB,EAAalB,YACb,MACJ,IAAK,gBACD8B,EAAiByC,EAAEE,WACnB,MACJ,QAEIrD,EAAkBmD,EAAE3C,KAAM2C,EAAEtF,MAGvC,CAED,SAASyF,EAAexC,GACpB,MAAe,aAAXA,EAAEN,MACFE,EAAiBI,EAAE2B,YACZ3B,EAAE2B,YAEE,eAAX3B,EAAEN,KACK,CACHA,KAAM,gBACN3C,KAAMiD,EAAEjD,KACRK,MAAO4C,EAAE5C,MACTqF,IAAKC,KAAKC,UAAU3C,EAAE5C,QAIf,gBAAX4C,EAAEN,KACK,CAAEA,KAAM,oBADnB,CAGH,CAED,SAASkC,EAAczB,IAEfA,EAAEyC,OAASzC,EAAE0C,YACb3D,EAAkBiB,EAAET,KAAMS,EAAEpD,KAEnC,CAcD,SAASuF,EAA0BnE,SAClB,aAATY,GAIA9C,EAAYa,SAASqB,EAAGf,SAAsB,QAAZgB,EAAAD,EAAGI,iBAAS,IAAAH,OAAA,EAAAA,EAAEvB,YAAYsB,EAAGf,UAE/De,EAAGf,MAAQ,GAAGqB,KAAcN,EAAGf,QAEtC,CAED,SAASwC,EAAiBO,iBAtBM2C,EAuB5B,OAAQ3C,EAAET,MACN,IAAK,qBACDkC,EAAczB,GACVA,EAAE0B,YACF7C,EAAad,eAAeiC,EAAE0B,YAElC7C,EAAapB,aACbuC,EAAE2B,OAAOzB,QAAQN,GACI,4BAAjB3B,EAAA+B,EAAEU,2BAAMnB,gBACRc,EAAAL,EAAEU,KAAKT,sBAAOC,QAAQH,IAE1BlB,EAAalB,YACb,MACJ,IAAK,0BACD8D,EAAczB,GACdnB,EAAapB,aACbuC,EAAE2B,OAAOzB,QAAQb,GAEG,mBAAhBW,EAAEU,KAAKnB,aACPgB,EAAAP,EAAEU,KAAKT,sBAAOC,QAAQH,GAEtBN,EAAiBO,EAAEU,MAEvB7B,EAAalB,YACb,MACJ,IAAK,iBACD,OAAQqC,EAAE4C,OAAOrD,MACb,IAAK,SACL,IAAK,QACDR,EAAkBiB,EAAE4C,OAAOrD,KAAMS,EAAEpD,MACnC,MACJ,QACI,GAAsB,qBAAlBoD,EAAE4C,OAAOrD,MAAwC,aAATX,EAAqB,CAC7D,MAAMiE,EAAY7C,EAAE4C,OAEdE,EAAoB9C,EAC1B8C,EAAkBvD,KAAO,iBACzBuD,EAAkBF,OAAS,CACvBrD,KAAM,aACN3C,KAAMoD,EAAEpD,KACRK,MAAOwB,EACPsE,UAAU,GAGdtD,EAAiBoD,EAAUG,QAC3BhD,EAAEoC,UAAUlC,SAAQgC,GAAKzC,EAAiByC,EAAEV,cAE5CsB,EAAkBV,UAAY,CAC1B,CAAEZ,WAAYa,EAAeQ,EAAUI,WACvC,CAAEzB,WAAYqB,EAAUG,QACxB,CACIxB,WAAY,CACRjC,KAAM,kBACN2D,SAAUlD,EAAEoC,UACZxF,KAAMoD,EAAEpD,OAIvB,KAA4B,qBAAlBoD,EAAE4C,OAAOrD,MACJ,mBAATX,GAC2B,eAA3BoB,EAAE4C,OAAOK,SAAS1D,MACU,gBAA5BS,EAAE4C,OAAOK,SAAShG,OAErB+C,EAAE4C,OAAOK,SAAShG,MAAQ,GAAG+C,EAAE4C,OAAOK,SAAShG,aAC/CwC,EAAiBO,EAAE4C,OAAOI,QAC1BhD,EAAEoC,UAAUlC,SAAQgC,GAAKzC,EAAiByC,EAAEV,gBAEtB,eAAlBxB,EAAE4C,OAAOrD,OACc,YAAnBS,EAAE4C,OAAO3F,QA3FT0F,EA4FuB3C,EA3FtC,SAATpB,IAGJE,EAAcpB,KAAKiF,GAEG,eAAlBA,EAAEC,OAAOrD,OACToD,EAAEC,OAAOxE,UAAYS,EAAahB,qBAwFdsE,EAA0BnC,EAAE4C,SAEhCnD,EAAiBO,EAAE4C,QACnB5C,EAAEoC,UAAUlC,SAAQgC,GAAKzC,EAAiByC,EAAEV,eAIxD,MACJ,IAAK,kBACS,QAAVf,EAAAT,EAAEkD,gBAAQ,IAAAzC,GAAAA,EAAEP,SAAQgC,IACZA,GACAzC,EAAiByC,EAAEV,WACtB,IAEL,MACJ,IAAK,mBACDxB,EAAEmD,WAAWjD,QAAQ+B,GACrB,MACJ,IAAK,kBAEDjC,EAAEoD,YAAYlD,QAAQT,GACtB,MACJ,IAAK,mBACD,GAAwB,qBAApBO,EAAER,SAASD,MAAwC,aAATX,EAAqB,CAC/D,MAAMyE,EAAsBrD,EAC5BqD,EAAoB9D,KAAO,iBAC3B8D,EAAoBT,OAAS,CACzBrD,KAAM,aACN3C,KAAMoD,EAAEpD,KACRK,MAAOsB,EACPwE,UAAU,GAEdtD,EAAiBO,EAAER,SAASwD,QAC5BK,EAAoBjB,UAAY,CAC5B,CAAEZ,WAAYa,EAAerC,EAAER,SAASyD,WACxC,CAAEzB,WAAYxB,EAAER,SAASwD,QACzB,CACIxB,WACA,CACIjC,KAAM,gBACN3C,KAAMoD,EAAEpD,KACRK,MAAO+C,EAAEsD,SACThB,IAAKC,KAAKC,UAAUxC,EAAEsD,aAKlCC,QAAQC,eAAexD,EAAG,UAC1BuD,QAAQC,eAAexD,EAAG,YAC1BuD,QAAQC,eAAexD,EAAG,WAC7B,MACGP,EAAiBO,EAAER,UAEvB,MACJ,IAAK,kBACDC,EAAiBO,EAAER,UACnB,MACJ,IAAK,uBACD,GAAoB,qBAAhBQ,EAAEL,KAAKJ,MAAwC,aAATX,EAAqB,CAC3D,MAAM6E,EAA0BzD,EAChCyD,EAAwBlE,KAAO,iBAC/BkE,EAAwBb,OAAS,CAC7BrD,KAAM,aACN3C,KAAMoD,EAAEpD,KACRK,MAAOsB,EACPwE,UAAU,GAEdtD,EAAiBO,EAAEN,OACnBD,EAAiBO,EAAEL,KAAKqD,QACxBS,EAAwBrB,UAAY,CAChC,CAAEZ,WAAYa,EAAerC,EAAEL,KAAKsD,WACpC,CAAEzB,WAAYxB,EAAEL,KAAKqD,QACrB,CACIxB,WACA,CACIjC,KAAM,gBACN3C,KAAMoD,EAAEpD,KACRK,MAAO+C,EAAEsD,SACThB,IAAKC,KAAKC,UAAUxC,EAAEsD,YAG9B,CAAE9B,WAAYxB,EAAEN,QAGpB6D,QAAQC,eAAexD,EAAG,QAC1BuD,QAAQC,eAAexD,EAAG,SAC1BuD,QAAQC,eAAexD,EAAG,WAC7B,MACGX,EAAcW,EAAEL,MAChBF,EAAiBO,EAAEN,OAEvB,MACJ,IAAK,mBACDD,EAAiBO,EAAEL,MACnBF,EAAiBO,EAAEN,OACnB,MACJ,IAAK,wBACDD,EAAiBO,EAAEe,MACnBtB,EAAiBO,EAAEsB,YACnB7B,EAAiBO,EAAEuB,WACnB,MACJ,IAAK,mBACD,GAAa,aAAT3C,EAAqB,CACrB,MAAM8E,EAAsB1D,EAC5B0D,EAAoBnE,KAAO,iBAC3BmE,EAAoBd,OAAS,CACzBrD,KAAM,aACN3C,KAAMoD,EAAEpD,KACRK,MAAOuB,EACPuE,UAAU,GAEdtD,EAAiBO,EAAEgD,QAEnBU,EAAoBtB,UAAY,CAC5B,CAAEZ,WAAYa,EAAerC,EAAEiD,WAC/B,CAAEzB,WAAYxB,EAAEgD,SAGpBO,QAAQC,eAAexD,EAAG,UAC1BuD,QAAQC,eAAexD,EAAG,WAC7B,KAAmB,mBAATpB,GAAiD,eAApBoB,EAAEiD,SAAS1D,MAA8C,gBAArBS,EAAEiD,SAAShG,OACnF+C,EAAEiD,SAAShG,MAAQ,GAAG+C,EAAEiD,SAAShG,aACjCwC,EAAiBO,EAAEgD,UAGnBvD,EAAiBO,EAAEgD,QAnUnC,SAAwBnD,GACpB,OAAQA,EAAEN,MACN,IAAK,WAGGE,EADmBI,EAAE2B,YAGzB,MACJ,IAAK,aACD,MACJ,QACIzC,EAAkBc,EAAEN,KAAMM,EAAEjD,MAGvC,CAsTe+G,CAAe3D,EAAEiD,WAErB,MACJ,IAAK,wBACDxD,EAAiBO,EAAEwB,YACnB,MACJ,IAAK,qBACY,QAAbhB,EAAAR,EAAEoD,mBAAW,IAAA5C,GAAAA,EAAEN,QAAQT,GACvB,MACJ,IAAK,aACDZ,EAAaX,WAAW8B,GACxBmC,EAA0BnC,GAC1B,MAEJ,IAAK,gBACL,IAAK,cACL,IAAK,gBACL,IAAK,iBACL,IAAK,iBACL,IAAK,iBACL,IAAK,gBACD,MACJ,QAEIjB,EAAkBiB,EAAET,KAAMS,EAAEpD,MAGvC,CAMD,IAAIgH,EAEJ,MAAMC,EAASvJ,EAAUC,GAAOuJ,IAE5BlF,EAAO,OACPC,EAAapB,aACbqG,EAAOpD,KAAKR,QAAQH,GACpBlB,EAAalB,YACbkB,EAAarB,OAgCb,OA5BoBqB,EAAaR,cAAc0F,KAAI7B,GAAKA,EAAE1F,YAAWwH,OAAOC,SAChE/D,SAAQgC,IACZA,GACAnD,EAAkB,cAAcmD,EAAEzF,yBAA0ByF,EAAEtF,KACjE,IAILkC,EAAcoB,SAAQgC,cAElB,GAAsB,eAAlBA,EAAEU,OAAOrD,OAA2C,QAAlBtB,EAAAiE,EAAEU,OAAOxE,iBAAS,IAAAH,OAAA,EAAAA,EAAEvB,YAAYwF,EAAEU,OAAO3F,QAAQ,CACnF,MAAMiH,EAAgC,QAAlB3D,EAAW,QAAXF,EAAA6B,EAAEE,iBAAS,IAAA/B,OAAA,EAAAA,EAAG,UAAI,IAAAE,OAAA,EAAAA,EAAAiB,WACtC,GAAI0C,GAAqC,mBAAtBA,aAAW,EAAXA,EAAa3E,QAA4B2E,aAAW,EAAXA,EAAajH,OACrE,IACI,MAAMkH,EAAazF,eAAAA,EAAYwF,aAAA,EAAAA,EAAajH,OAC5CiH,EAAYjH,MAAQkH,EACpBD,EAAY5B,IAAMC,KAAKC,UAAU2B,EACpC,CAAC,MAAOC,GAELrF,EAAkBqF,EAAMnF,QAASiD,EAAEtF,KACtC,MAEDmC,EAAkB,0EAA2EmD,EAAEtF,KAEtG,KAID+B,EAAOb,QACPgG,EAAOpD,KAAO,GACPoD,IAIXF,EAAeS,EAAAA,UAAUP,GAGzBlF,EAAO,WACPkF,EAAOpD,KAAKR,QAAQH,GACb+D,EAAM,IAGjBlF,EAAO,iBAGP,MAAM0F,GAA+B,QAAlBrG,EAAA2F,aAAY,EAAZA,EAAclD,YAAI,IAAAzC,OAAA,EAAAA,EAAEH,QACjCxD,EAAU,cAAc,KACtBsJ,EAAalD,KAAKR,QAAQH,GACnB6D,IACR,UAAU,GAAMrJ,KACjB,GAEN,MAAO,CACHA,KAAMsJ,EAAOtJ,KACbwJ,IAAKF,EAAOE,IACZO,aACA3F,SAER"}
|